Jump to content

Elfo

Legendary Member
  • Posts

    2,015
  • Joined

  • Last visited

  • Days Won

    58
  • Feedback

    0%

Everything posted by Elfo

  1. Hello everyone As the title implies I'm selling the source code for https://maxcheaters.com/topic/222457-l2j-l2-battle-royale/ The project ran for a week without any technical problems but failed as expected due to low demand. I did get many messages during and after the development to sell it but I rejected them. I now feel comfortable to sell it. Just a disclaimer. The pack is a stripped out version of a gameserver and it contains no functionality other than the game engine and the relevant features. Everything else has been removed to enhance performance. The only reason you might wanna buy this pack is to extract it's features and use them for your own server. What's in the pack? The Tesla event engine The Tesla event engine was made to be a modular and easy to work with event engine to house the battle royale gameplay. However, it is not a battle royale specific engine and it is a general purpose event engine that you can use for any type of event. The engine is designed to work with a queue system which full-fills a supply and demand relationship between users and events. If there are enough users that wanna play the event then they can. It supports multiple queues and multiple team size types like solo, duo or squads where people make parties in order to play together. It is insanely easy to create a game and add a queue for it. Each game is fully instanced which makes maps reusable. The GMs have a special control panel to teleport to those instances and see the games. The games themselves are made with the idea of game stages in mind. Each game consists of at least 4 game stages. TeleportIntoLobbyStage StartGameStage n number of other stages here GameEndStage All you need to do to create a new event is to extend a class and write some minimum code. Then just add the logic you want in the stages themselves. That way you keep your Game classes lean and you have isolated reusable logic. Here is what the 10-man Duo event class looks like for L2BattleRoyale package net.sf.l2j.battleroyale.games; import net.sf.l2j.battleroyale.GameCircle; import net.sf.l2j.battleroyale.GameType; import net.sf.l2j.battleroyale.GameUtils; import net.sf.l2j.battleroyale.annotations.GameInfo; import net.sf.l2j.battleroyale.gamestages.CircleStage; import net.sf.l2j.battleroyale.gamestages.GameEndStage; import net.sf.l2j.battleroyale.gamestages.StartGameStage; import net.sf.l2j.battleroyale.gamestages.TeleportIntoLobbyStage; import net.sf.l2j.gameserver.model.location.Location; import static net.sf.l2j.battleroyale.GameUtils.getCircleInsideCircle; @GameInfo(gameName = "10-Man Duo", codeName = "tenmanduo", mapName = "Gludio Town", minimumPlayers = 4, maximumPlayers = 10, teamSize = 2, gameType = GameType.Duo) public class BattleRoyaleTenManDuo extends TeamGame { public BattleRoyaleTenManDuo() { super(); Location center = new Location(-14225, 123540, -3121); GameCircle firstBlue = new GameCircle(3000, center); GameCircle firstWhite = getCircleInsideCircle(firstBlue, 2000); GameCircle secondWhite = getCircleInsideCircle(firstWhite, 1500); GameCircle thirdWhite = getCircleInsideCircle(secondWhite, 1000); GameCircle fourthWhite = getCircleInsideCircle(thirdWhite, 200); GameCircle fifthWhite = getCircleInsideCircle(fourthWhite, 10); super.addStage(new TeleportIntoLobbyStage(this, 15)); super.addStage(new StartGameStage(this, 10)); super.addStage(new CircleStage(this, 120, firstBlue, firstWhite, 2, 2)); super.addStage(new CircleStage(this, 90, firstWhite, secondWhite, 3, 3)); super.addStage(new CircleStage(this, 90, secondWhite, thirdWhite, 4,4)); super.addStage(new CircleStage(this, 60, thirdWhite, fourthWhite, 6, 5)); super.addStage(new CircleStage(this, 60, fourthWhite, fifthWhite, 8, 6)); super.addStage(new GameEndStage(this, 10)); } @Override public int getAdenaPerKill() { return 110; } @Override protected int getAdenaOnWin() { return 200; } } As you can see, it's pretty clean, to the point where it could be extracted to an XML file pointing to the staging classes (but i didn't have the time to implement that). The game stages themselves have only 3 methods you need to implement. onStart - is called when the stage starts onUpdate - is called every second you are in this stage onTeardown - is called when the stage ends The dressing room engine The dressing room is your typical dress me system. It's on the community board and it supports buying and dressing up from the community board itself. The skins are dynamically sorted into categories which you specify and it also has dynamic pagination to make navigation easy. Here is what the skins.xml looks like. <skin itemId="8557" adena="25000" rarity="Accessory"/> <skin itemId="8558" adena="25000" rarity="Accessory"/> <skin itemId="8560" adena="25000" rarity="Accessory"/> <skin itemId="8561" adena="25000" rarity="Accessory"/> <skin itemId="8562" adena="25000" rarity="Accessory"/> <skin itemId="8563" adena="25000" rarity="Accessory"/> The title engine The title engine is another community board feature. It basically awards titles when a requirement is met. Here is what the titles.xml file looks like. <title id="28" text="The Dragonborn" description="Own the Draconic Set." color="F63C00" requirementChecker="ownDraconicSet" category="Skins" order="28"/> <title id="29" text="The Imperial" description="Own the Imperial Set." color="FFED58" requirementChecker="ownImperialSet" category="Skins" order="29"/> <title id="30" text="The Arcane" description="Own the Major Arcana Set." color="FFFAD3" requirementChecker="ownArcanaSet" category="Skins" order="30"/> <title id="31" text="Classy" description="Own the Formal Wear." color="86A49E" requirementChecker="ownFormalWear" category="Skins" order="31"/> The requirementChecker value is pointing to a method which is implemented with the logic that checks this specific requirement. Other minor features include Microbalance engine Season system Properly working API based individual vote reward More info for the server can be found on the server's topic. We can talk about the price in private. A server to test anything you need will be provided on demand.
      • 1
      • Like
  2. I don't know how you've implemented the API so I can only assume that you know better, but there are various ways to work around it either with a more obf friendly design or an exclusion white-list.
  3. I still don't get why lucera doesn't obfuscate the code (at least method names etc)
  4. Yeah you're right I realised later it's internal code
  5. Yeap, that's all you need.
  6. Ofc you can, because you joined to the characters table so you can do c.* or c.char_name to get any column or a specific column from the table. SELECT i.owner_id, c.char_name, i.count from items as i inner join characters c on c.obj_Id = i.owner_id WHERE i.item_id = 57 and i.count > 10 and c.accesslevel = 0 ORDER BY count DESC limit 10
  7. SELECT i.owner_id, i.count from items as i inner join characters c on c.obj_Id = i.owner_id WHERE i.item_id = 57 and i.count > 10 and c.accesslevel = 0 ORDER BY count DESC limit 10
  8. Your query is SQL injectable. Parameterise the parameters properly or else you expose your whole db.
  9. I migrated to a new VPS and I didn't bother moving the site. The server is still up on the new server but I'm playing privately with friends, as it didn't manage to achieve a stable online count. About whether it succeeded or not, that was never a question. It was meant to be there for people that enjoyed the concept and there were a few, but if there are not enough people to rotate then it gets boring. I knew it would play out like this from the beginning, that's why it didn't have any monetization and any progression system other than cosmetics and leaderboards. Before you say that I'm bullshiting, check here a convo with Ipo days before the launch. I never wanted to add skillshots and client mods, even though I knew it could make it a better experience, because I wanted to keep it simple. All I really wanted was to finish the project, as I'm doing with any other project I'm working on for the past 2 years. It is however technically and code wise better than anything xdem has written in his entire life.
  10. I have actually, but not with a single lawyer but with multiple ones because I've work in several places that use GPL licensed software and we had to make our changes open source. Simply put, you are misinformed. I can cite references to what I say. Can you? Btw, I won't go deeper on this with you because I remember having a chat with you about it and you were saying some other shit at the time, so there is no point replying to me.
  11. Welcome to open source licensing. Your depiction of GPLv3 is at least misleading and not accurate. GPLv3 doesn't prevent the commercial usage of the software. GPLv3 doesn't give the original author the right to get back code but if forces the creator of new code based on that GPLv3 licensed software to make those changes public, in order to improve the original software. Forking GPLv3 projects is allowed as long as they are open source so the main project can benefit off of it. Projects like L2jFrozen don't violate l2j's GPLv3. You cannot sub-license a GPLv3 open source project, that's why acis not just violates GLPv3 in it's privation but also changing the license. L2j is trully opensource, at least as truly opensource as Linux with which they share the same license (well almost, Linux uses GPLv2) Using reversed engineered findings to build new software doesn't make this new software illegal, except if the reversed engineered code itself was used. Copyleft licenses work and they are amazing when the community is not a bunch of greedy scumbags like the L2 community. Huge companies rely on glp open source projects and they make their changes public as they should. https://opensource.apple.com/ https://opensource.microsoft.com/ https://aws.github.io/ Nobody tricked you and nobody had the intention to do that. You were just a guy that wanted to profit off of l2j just like me and everyone else in here.
  12. To fix it I would have to rewrite it. I'm not gonna rewrite a shared feature.
  13. It's both an old shared feature and really poor code.
  14. Nice one. Here is a slightly refactored version of the code: https://pastebin.com/5wiEC1TC
  15. From what i've observed, the initial reaction is what you describe but in later games they actually spend more time looking for items and better weapons before charging on one another and some people get the same speed thing so they chase or give up on chasing etc.
  16. And yet I am :D
×
×
  • 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