Jump to content

L2 Battle Royale project


Elfo

Recommended Posts

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.

Edited by .Elfocrash
  • Like 1
Link to comment
Share on other sites

  • SweeTs locked this topic
Guest
This topic is now closed to further replies.


×
×
  • 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