Jump to content

xxdem

Members
  • Posts

    1,644
  • Joined

  • Last visited

  • Days Won

    8
  • Feedback

    0%

Everything posted by xxdem

  1. im making a massive clean on my project so I will probably share more
  2. shame, would be very interesting to see your version of the exact same code
  3. feel free to fix it
  4. didnt even touch the code, not showing off anything here just a nice feature
  5. Nothing special, just some small trivia engine I wrote back in 2012 for my server that I haven't been using since then because I dropped out this feature, so I leave it here if someone finds use for it package drake.aepvp.l2event; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.text.DecimalFormat; import java.util.ArrayList; import l2.ae.pvp.gameserver.ThreadPoolManager; import l2.ae.pvp.gameserver.model.actor.instance.L2PcInstance; import l2.ae.pvp.gameserver.network.serverpackets.CreatureSay; import l2.ae.pvp.gameserver.util.Broadcast; import l2.ae.pvp.gameserver.util.Util; import l2.ae.pvp.util.Rnd; public class TriviaEngine { private static final ArrayList<TriviaTemplate> _trivias = new ArrayList<>(); public TriviaEngine() { final File file = new File("./data/trivia.txt"); try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line; while ((line = reader.readLine()) != null) { final String[] explode = line.split(" - "); _trivias.add(new TriviaTemplate(explode[0], explode[1])); } System.out.println("Succesfully loaded " + _trivias.size() + " Trivia Quizes!"); } catch (final Exception e) { e.printStackTrace(); System.out.println("Unsuccesfully loaded " + _trivias.size() + " Trivia Quizes!"); } if (_trivias.size() > 10) ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(() -> { TriviaEvent.currentTrivia = new TriviaEvent(); }, 1800000, 1600000 + Rnd.get(400000)); } public static class TriviaEvent { private static TriviaEvent currentTrivia; private static DecimalFormat df = new DecimalFormat("###.##"); private final long startTime = System.currentTimeMillis(); private L2PcInstance closeAnswer; private final TriviaTemplate trivia; public TriviaEvent() { trivia = Util.getRandomItem(_trivias); Broadcast(trivia.getQuestion()); Broadcast("PM \"trivia with the answer."); ThreadPoolManager.getInstance().scheduleGeneral(() -> { if (currentTrivia == this) { Broadcast("The correct answer was " + trivia.getAnswer() + ", unfortunately nobody found the answer before the deadline."); if (closeAnswer != null) { Broadcast(closeAnswer.getName() + " wins a small reward for being close enough!"); reward(closeAnswer, 0); } currentTrivia = null; } }, 90000); } private long getTimePassedMillis() { return System.currentTimeMillis() - startTime; } public void check(final L2PcInstance player, String answer) { final long timePassed = getTimePassedMillis(); toTrivia(player, answer, timePassed); answer = answer.toLowerCase(); final String correct = trivia.getAnswer().toLowerCase(); if (answer.equals(correct)) { fromTrivia(player, "That is the correct answer!"); reward(player, timePassed); Broadcast(player.getName() + " found the answer in " + format(timePassed) + " seconds!"); Broadcast("The correct answer was " + trivia.getAnswer() + "."); currentTrivia = null; } else if (answer.length() > 1 && (correct.indexOf(answer) != -1 || correct.startsWith(answer) || correct.endsWith(answer))) { fromTrivia(player, "You are close!"); if (closeAnswer == null) closeAnswer = player; } else fromTrivia(player, "Thats the incorrect answer."); } private void reward(final L2PcInstance player, final long time) { if (time == 0) player.addItem("Trivia", 6320, 1, player, true); else if (time < 4333) player.addItem("Trivia", 6320, 4, player, true); else if (time < 8666) player.addItem("Trivia", 6320, 3, player, true); else if (time < 91000) player.addItem("Trivia", 6320, 2, player, true); } private static void toTrivia(final L2PcInstance player, final String msg, final long timePassed) { final CreatureSay cs = new CreatureSay(0, 2, "->Trivia", "you answered \"" + msg + "\" in " + format(timePassed) + " seconds."); player.sendPacket(cs); } private static void fromTrivia(final L2PcInstance player, final String msg) { final CreatureSay cs = new CreatureSay(0, 2, "Trivia", msg); player.sendPacket(cs); } public void Broadcast(final String msg) { Broadcast.toAllOnlinePlayers(new CreatureSay(0, 18, "", "Trivia: " + msg)); } private static String format(final long time) { return df.format((double) time / 1000); } public static TriviaEvent getCurrentTrivia() { return currentTrivia; } } public static class TriviaTemplate { private final String _question; private final String _answer; public TriviaTemplate(final String question, final String answer) { _question = question; _answer = answer; } public String getQuestion() { return _question; } public String getAnswer() { return _answer; } } public static class InstanceHolder { protected static TriviaEngine instance = new TriviaEngine(); } public static TriviaEngine getInstance() { return InstanceHolder.instance; } } To connect it to your gameserver just put this somewhere in Say2.java if (_type == TELL && "trivia".equalsIgnoreCase(_target)) { final TriviaEvent trivia = TriviaEngine.TriviaEvent.getCurrentTrivia(); if (trivia == null) activeChar.sendMessage("Could not find an active Trivia Event."); else trivia.check(activeChar, _text); return; } Trivia data I was using (I generated this with a java program that was leeching QAs from various sites) https://pastebin.com/Bgei8Tpa Things you have to do by urself: Don't ask the same question within a time period Create your own QA data on trivias.txt Unhardcode the rewards or just edit them impelement a //reload feature The code is tested on live server and worked great, but it is not unit tested and I don't remember if these functions are regex vulnerable
  6. What a clown, I never said C is the best, you say "all the time" I never did xd Can you enlighten me a bit? Why we need to cache all these sessions on the map? Even if we do, what would the average n lenght be on an official NCSoft server?
  7. imho I would just go O(n) with an array of struct{int accountId, int sessionId} and perform a search or something similar, it doesn't seem that the n will ever be huge on this case, I could be wrong
  8. My point was that it can be done without a hash map, I didn't meant "implement a C hashmap" that would be stupid, hash maps have a shitload of features you don't need on this case, (one of these features made this bug)
  9. No, as I said above you are talking about the same format ID I talked about before, anti-bots that use it are shit anyways
  10. Please shut up, the HWID on the HDD can't change because its hard-coded on the HDD's read-only section, and by read-only I mean true read-only ROM like. The "HWID" you are talking about is just a virtual ID given by windows after formatting a disk, that even the CMD can change, by no mean it can be called "HWID" because it has nothing to do with hardware. The only real ways to spoof the real HWID of a harddisk: -kernel level hook on GetHardDriveInfo (good luck with that) -Swap harddisk -Use virtual machine (VMs come with virtual/spoofed GetHardDriveInfo) -Spoof the packet that sends HWID to the server (somehow easier than 1, but with proper encyption impossible)
  11. PS: with all the respect I have towards you, you get a big fuck you for overloading == into strcmp, the word to describe what it feals like is "sacrilege" in my country :p Makes low level programming feel like frontend script code, and you also loose lots of functionality like inability to know and compare by address
  12. That's not quite true about C, it would just be done on a more plain way, you don't really need a complex data structure to do this job, imho. I love that you immediately noticed that on this specific case I was talking about operator overloading ([] more specifically) I didn't become too specific because there are lots of noobs here that wouldn't understand my point but you are smart enough to understand of what exactly I didn't like about the code :)
  13. You don't know if the guy who wrote this was idiot, probably he is better than all of us since he was given such a critical task, the fact is, that IF this bug exists is either a backdoor or something that slipped away from them for all those reasons that make C++ shit
  14. A good reason on why they should stick with C on such case, this can't happen in C
  15. Didn't read the code, but from the looks of it it seems so bad... Why would someone use this instead of multisells
  16. How can you be happy with a an average kill to game ratio of less than 1 ? This is a failure gameplay wise so I see nothing "finished" here
  17. there would be no good if there was no evil..
  18. nice bot shitfeast, this should not be allowed
  19. probably they don't know what a proxy is, or that a loginserver should specify different gameservers from other locations (that are not connected by any mean ofcourse)
  20. of course not
  21. It compiles down to direct asm jmp and call instructions because its like method pointers not reflection
  22. check the second one, its simmilar, unknown values will go through
  23. For my event engine I've ended up with something like this, I wanted something reflaction-like //child implementantion InfoPackage is pretty much your argument holder
  24. Reflection has big overhead, the above code has big latency disadvantage, you should really benchmark it
×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock