Jump to content

L2Aepvp Game/event Engine [Acis]


Recommended Posts

With xdem's permission, I want to re-sell the highly private event engine coded by him for L2AEPvP a few years ago. Its without a doubt the best, lightest and the most expandable private game engine ever made for Lineage. Its originally coded on aCis 260 rev but its coded in a way that allows extremely easy adaption for any server chronicle/project, even on different gameservers.

 

Event Engine features:

  • All known events support
  • n Size teams amounts
  • n Size flag amounts
  • Instanced events
  • Temporal NPCs (Spawn/Unspawn during events)
  • Item tier restriction (Allow up to A grade, or up to S80 Grade, or custom tier like aepvp Unique,Epic,etc) ingame with GM command
  • Bugless event abort
  • Dynamic registration town name announcement
  • Anti AFK
  • DCd/Crashed players may reconnect and will not loose their stats (deaths, damage dealt, etc)
  • Monitoring Damage dealt, Damage taken, healing done, steps done
  • Rewards may or may not be based on damage dealt, kills done etc
  • Healers may be rewarded too regardless of their kills if they did a specified amount of healing to one or more than one players
  • Additional reward every X kills
  • Increased respawn time for every death
  • A lot of event features that can be used by anyone to make any event.

Mini Event engine (Dissabled by default, beta)

  • Mini fights
  • Matchmaking with Elo or Divisions
  • Players decide team size and winner reward (betting system)

 

Multiverse Engine

  • The owner is able to make any Quest-like instance with the tools provided by the engine
  • Dynamic/Static re-entry delays
  • Player stat/party/party size requirements.

 

To make you understand what I mean by saying that anyone can make any event with this game engine, with minimum knowledge, I will give an Event sample. Even if its coded by the engine's original developer xdem, it will give you a taste of how simply you can create a big 15 minute event with a ton of feature support by coding a few lines.

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.l2event.mainevents;

import net.sf.l2j.gameserver.l2event.AbstractEvent;
import net.sf.l2j.gameserver.l2event.EventTeam;
import net.sf.l2j.gameserver.model.Location;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;

/**
 * @author Drake2wow 21/10/2012
 */
public class TeamVsTeam extends AbstractEvent
{	private final static int[] registrationTasksMinutes = {	15, 10,	5, 3, 2, 1 };
	private final static int[] eventFinishTasksMinutes = { 15, 10, 5, 3, 2, 1 };
	
	public TeamVsTeam()
	{	super("TvT Event(TvT)", "TvT", -82111, 150660, -3128);
		addTeam(new EventTeam("Green", 0x66FF00, new Location(-43837, 116510, -3584)));
		addTeam(new EventTeam("Orange", 0x0066FF, new Location(-53914, 108268, -3736)));
	}
	
	@Override
	public void run()
	{	ScheduleAfterMinutes(() -> startEventTask(), registrationTasksMinutes[0]);
		startRegistrationTask(registrationTasksMinutes);
	}
	
	@Override
	public void startEventTask()
	{	if (!hasEnoughRegistered(2))
			return;
		super.startEventTask();
		ScheduleAfterSeconds(() -> startMainAndFinishTask(eventFinishTasksMinutes), 25);
		ScheduleAfterMinutes(() -> end(), eventFinishTasksMinutes[0]);
	}
	
	@Override
	public void end()
	{	broadCastTopPlayers(5);
		calculateWinnerTeams();
		super.end();
	}
	
	@Override
	public boolean isSameTeam(final L2PcInstance player, final L2PcInstance target)
	{	return player != target && getTeam(player) != null && getTeam(player) == getTeam(target);
	}
	
	@Override
	public boolean isInSpawnProtection(final L2PcInstance player)
	{	if (!isEventParticipant(player))
			return false;
		final EventTeam team = getTeam(player);
		if (team == null)
			return false;
		final Location loc = team.getSpawnLocation();
		return player.isInsideRadius(loc.getX(), loc.getY(), loc.getZ(), 400, false, false);
	}
	
	@Override
	public void onDie(final L2PcInstance killer, final L2PcInstance victim)
	{	final EventTeam killerTeam = getTeam(killer), victimTeam = getTeam(victim);
		if (killerTeam != null && victimTeam != null && killerTeam != victimTeam)
			killerTeam.increaseScore();
		super.onDie(killer, victim);
	}
	
	@Override
	public void respawn(final L2PcInstance player)
	{	if (state == State.FINISHED || state == State.INACTIVE)
			player.teleToLocation(leaveLoc, 250);
		else
			player.teleToLocation(getTeam(player).getSpawnLocation(), 100);
		super.respawn(player);
	}
}

In case you are interested leave your offer on a PM here, or add me on skype desen.lacoka

 

PS: I have nothing to do with L2AEPvP or the coding of this game engine, I just got my hands on this game engine's source code and the authority of the developer to resell it for a small percentage of the sells. In case you want to speak with the developer directly you can find him only on skype drake 2wow

Edited by ’Insider
Link to comment
Share on other sites

lock delete

reasons:

1 L2AEPvP fail many topics made for this bad project

2 xdem is banned

3 -2 rep says your're bad boy

4 no test + old rev (but yes easy adaption lol) i dont even want to know the price...

5 "I just got my hands on this game engine's source code and the authority of the developer to rese" no commends.

i could continue

Edited by Nightw0lf
Link to comment
Share on other sites

With xdem's permission, I want to sell the event engine coded by him for L2AEPvP a few years ago. Its without a doubt the best, lightest and the most expandable private game engine ever made for Lineage. Its originally coded on aCis 260 rev.

 

 

Coded for 260 rev? That is over 100 revs old, the amount of things that aCis changed in their timeline is insane.

Link to comment
Share on other sites

Coded for 260 rev? That is over 100 revs old, the amount of things that aCis changed in their timeline is insane.

 

That's irrelevant, I don't want to get into the conversation of how L2AEPvP is syncing H5 L2J since 260rev being somewhat a hybrid of a latest L2J ht core and aCis datapack. I clrearly explained above that the events are highly adapt friendly. Just check the code sample I gave, anyone skilled/unskilled can see that.

import net.sf.l2j.gameserver.model.Location;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;

These are the imports from aCis

Edited by ’Insider
Link to comment
Share on other sites

You are all wrong. The engine maybe it's coded in a jar and you need only 5 lines to use it. Also, the fact that l2aepvp had problems has nothing to do with a simple engine.

 

Get real people, in case of scam he will get punished as everyone here. Everyone is free to sell whatever wants, there is moderator for this section and he can judge the bad.

Link to comment
Share on other sites

You are all wrong. The engine maybe it's coded in a jar and you need only 5 lines to use it. Also, the fact that l2aepvp had problems has nothing to do with a simple engine.

 

Get real people, in case of scam he will get punished as everyone here. Everyone is free to sell whatever wants, there is moderator for this section and he can judge the bad.

 

wut, how can someone call a server that never had less than 300 online and total pvps of 1,000,000+ bad or failed, I'll just ignore such comments from randoms

 

Its not in Jar, its full source, you can either compile it and add it as a library or add it in your source directly.

 

 

PS: My -2 karma comes from kids like baggoc for reasons I don't really give a shit about

Edited by ’Insider
Link to comment
Share on other sites

wut, how can someone call a server that never had less than 300 online and total pvps of 1,000,000+ bad or failed, I'll just ignore such comments from randoms

 

Its not in Jar, its full source, you can either compile it and add it as a library or add it in your source directly.

Whatever bro, I am just trying to support you because everyone is wrong.

Link to comment
Share on other sites

Whatever bro, I am just trying to support you because everyone is wrong.

 

Its okay mate, its classic on mxc that wannabies try to degrade you to their low level, they just need to be ignored.

 

Just look the beauty of that TvT class, if someone has the proper knowledge or intelligence can't flame that piece of art :D

Edited by ’Insider
Link to comment
Share on other sites

The bad thing is that the events are inside the core, w/e you want to change you have to recompile. xdem could make them load from datapack, listeners, xml and so on.. ;)

 


Its without a doubt the best, lightest and the most expandable private game engine ever made for Lineage.

 

Actually, I have doubts. You didn't saw Trance's engine. Anyway, good luck :)

Edited by SweeTs
Link to comment
Share on other sites

You are all wrong. The engine maybe it's coded in a jar and you need only 5 lines to use it. Also, the fact that l2aepvp had problems has nothing to do with a simple engine.

 

Get real people, in case of scam he will get punished as everyone here. Everyone is free to sell whatever wants, there is moderator for this section and he can judge the bad.

tries to lick and gets KO

wut, how can someone call a server that never had less than 300 online and total pvps of 1,000,000+ bad or failed, I'll just ignore such comments from randoms

 

Its not in Jar, its full source, you can either compile it and add it as a library or add it in your source directly.

 

 

PS: My -2 karma comes from kids like baggoc for reasons I don't really give a shit about

and here comes the fatality

 

Whatever bro, I am just trying to support you because everyone is wrong.

 

Its okay mate, its classic on mxc that wannabies try to degrade you to their low level, they just need to be ignored.

 

Just look the beauty of that TvT class, if someone has the proper knowledge or intelligence can't flame that piece of art :D

 

this thing smells for guys who dont know him I dont recommend him at all... for those who know him oh well..

Link to comment
Share on other sites

tries to lick and gets KO

and here comes the fatality

 

 

 

this thing smells for guys who dont know him I dont recommend him at all... for those who know him oh well..

please tell us some things about you non-factor.

Link to comment
Share on other sites

The code is pretty legit BTW, shows that engine uses latest java 8 technology and is really expandable and flexible as the abstract main class for events handled pretty much everything. If he is actually selling what he claims to sell then without a doubt it's a really good buy.

Good luck with your sales.

Link to comment
Share on other sites

The code is pretty legit BTW, shows that engine uses latest java 8 technology and is really expandable and flexible as the abstract main class for events handled pretty much everything. If he is actually selling what he claims to sell then without a doubt it's a really good buy.

Good luck with your sales.

 

At last, an answer from a legit guy with knowledge in this topic...

 

It sucks for the forum when clueless people harass the topics and thats indeed the reason all legit guys quited the forum.

 

The code sample above is a full time Team vs Team that can handle up to X teams simutaniusly. It covers both registration tasks and event tasks in less than 100 lines of code (the hard work is down under the hood ofc but the consumer doesnt actually care)

 

 

 

This is a sample of the mother class (580 lines of code) and all its variables

public abstract class AbstractEvent implements Runnable, DeathListener, ActionListener, ILocationable
{
	public static final Location leaveLoc = new Location(-82787, 150888, -3128);
	public static ItemTier nextTier = ItemTier.RELIC;
	public boolean devMode = true;
	protected boolean aborted;
	protected final String _townName;
	protected final String _fullName;
	public final String _miniName;
	protected ItemTier tier = ItemTier.RELIC;
	public State state = State.INACTIVE;
	private int InstanceId;
	protected final ArrayList<EventTeam> _teams = new ArrayList<>();
	protected final ArrayList<L2Spawn> _spawnedNpcs = new ArrayList<>();
	protected final ArrayList<L2PcInstance> registered = new ArrayList<>();
	protected final CopyOnWriteArrayList<L2PcInstance> participants = new CopyOnWriteArrayList<>();
	protected final ConcurrentHashMap<Integer, PlayerData> participantData = new ConcurrentHashMap<>();
	protected final ArrayList<Integer> _leavers = new ArrayList<>();
	
	public void startEventTask()
	{
		Announce(_fullName + ": Participants will be teleported to the battleground in 20 seconds.");
		ScheduleAfterSeconds(() -> paralyzePlayers(), 17);
		ScheduleAfterSeconds(() -> initParticipants(), 20);
		ScheduleAfterSeconds(() -> unparalyzePlayers(), 23);
	}

If the owner wants specific extra rewards for the top players:

	@Override
	protected void broadCastTopPlayer(final int place, final L2PcInstance player, final int score)
	{	super.broadCastTopPlayer(place, player, score);
		switch (place)
		{	case 1:
			{	player.addFame(150, false);
				player.addItem("DM", 3487, 20, null, true);
				player.addItem("DM", 6320, 3, null, true);
				break;
			}
			case 2:
			{	player.addFame(100, false);
				player.addItem("DM", 6320, 2, null, true);
				break;
			}
			case 3:
			{	player.addFame(50, false);
				player.addItem("DM", 6320, 2, null, true);
				break;
			}
			case 4:
			{	player.addFame(25, false);
				player.addItem("DM", 6320, 2, null, true);
				break;
			}
			case 5:
			{	player.addFame(25, false);
				player.addItem("DM", 6320, 1, null, true);
				break;
			}
			case 6:
			{	player.addFame(25, false);
				player.addItem("DM", 6320, 1, null, true);
				break;
			}
		}
	}

Or if he wants to ban a skill on a specific event:

	@Override
	public boolean denySkillUse(final L2PcInstance player, final L2Skill skill)
	{	switch (skill.getId())
		{	case 1050:
			case 1255:
			case 296:
			case 106:
			case 445:
			case 922:
				player.sendMessage("That skill is restricted!");
				return true;
		}
		return false;
	}

or if he wants that specific event to hide the player's identity just turn the switch

	@Override
	public boolean isDisguisedEvent()
	{
		return true;
	}

There are much much more features like the above for the owner to overwrite modify add something different or w/e.

Edited by ’Insider
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Posts

    • MidnightSell team WTB/WTS GOLD TWW EU/US all servers Cataclysm all servers Payment Visa/Master/Btc/Eth/Trc-20/Erc-20 (all payments within 10 min) For all question pls dm Discord https://discord.gg/h8AN57qJjK Or Telegram @MidnightSell
    • GOSTEI MUITO DO VIASUAL DO SERVE COMO POSSO ADQUIRI ESSA REV PACK   
    • Helly everyone . I use L2jmobius interlude , i did everything , installed the db compiled the Build in eclipse Gameserver seems to lead OK , but it fails to connect to loginserver When i click to start the loginserver it says  "Loginserver terminated abnormally" This is wheat gameserver shows me :    [05/10 17:25:12] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:12] LoginServerThread: LoginServer not available, trying to reconnect... [05/10 17:25:17] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:17] LoginServerThread: LoginServer not available, trying to reconnect... [05/10 17:25:22] LoginServerThread: Connecting to login on 127.0.0.1:9014 [05/10 17:25:22] LoginServerThread: LoginServer not available, trying to reconnect...   And This is my login config file:   # --------------------------------------------------------------------------- # Login Server Settings # --------------------------------------------------------------------------- # This is the server configuration file. Here you can set up the connection information for your server. # This was written with the assumption that you are behind a router. # Dumbed Down Definitions... # LAN (LOCAL area network) - typically consists of computers connected to the same router as you. # WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet). # x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers. # --------------------------------------------------------------------------- # Networking # --------------------------------------------------------------------------- # Bind ip of the LoginServer, use 0.0.0.0 to bind on all available IPs # WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u> # WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u> # Default: 0.0.0.0 LoginserverHostname = 0.0.0.0 # Default: 2106 LoginserverPort = 2106 # The address on which login will listen for GameServers, use * to bind on all available IPs # WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u> # WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u> # Default: 127.0.0.1 LoginHostname = 127.0.0.1 # The port on which login will listen for GameServers # Default: 9014 LoginPort = 9014 # --------------------------------------------------------------------------- # Database # --------------------------------------------------------------------------- # Specify the JDBC driver class for your database. # Default: org.mariadb.jdbc.Driver Driver = org.mariadb.jdbc.Driver # Database URL # Default: jdbc:mariadb://localhost/l2jmobiusinterlude?useUnicode=true&characterEncoding=utf-8&useSSL=false&connectTimeout=10000&interactiveClient=true&sessionVariables=wait_timeout=600,interactive_timeout=600&autoReconnect=true URL = jdbc:mariadb://localhost/l2jmobiusinterlude?useUnicode=true&characterEncoding=utf-8&useSSL=false&connectTimeout=10000&interactiveClient=true&sessionVariables=wait_timeout=600,interactive_timeout=600&autoReconnect=true # Database user info. Default is "root" but it's not recommended. Login = root # Database user password, leave empty for no password. Password = root # Maximum number of database connections to maintain in the pool. # Default: 5 MaximumDatabaseConnections = 5 # Determine whether database connections should be tested for availability. # Default: False TestDatabaseConnections = False # --------------------------------------------------------------------------- # Automatic Database Backup Settings # --------------------------------------------------------------------------- # Generate database backups when server restarts or shuts down.  BackupDatabase = False # Path to MySQL bin folder. Only necessary on Windows. MySqlBinLocation = C:/xampp/mysql/bin/ # Path where MySQL backups are stored. BackupPath = ../backup/ # Maximum number of days that backups will be kept. # Old files in backup folder will be deleted. # Set to 0 to disable. BackupDays = 30 # --------------------------------------------------------------------------- # Thread Configuration # --------------------------------------------------------------------------- # Defines the number of threads in the scheduled thread pool. # If set to -1, this will be determined by available processors divided by 2. ScheduledThreadPoolSize = 2 # Defines the number of threads in the instant thread pool. # If set to -1, this will be determined by available processors divided by 2. InstantThreadPoolSize = 2 # --------------------------------------------------------------------------- # Security # --------------------------------------------------------------------------- # How many times you can provide an invalid account/pass before the IP gets banned. # Default: 5 LoginTryBeforeBan = 5 # Time you won't be able to login back again after LoginTryBeforeBan tries to login. # Default: 900 (15 minutes) LoginBlockAfterBan = 900 # If set to True any GameServer can register on your login's free slots # Default: True AcceptNewGameServer = True # Flood Protection. All values are in milliseconds. # Default: True EnableFloodProtection = True # Default: 15 FastConnectionLimit = 15 # Default: 700 NormalConnectionTime = 700 # Default: 350 FastConnectionTime = 350 # Default: 50 MaxConnectionPerIP = 50 # --------------------------------------------------------------------------- # Misc Login Settings # --------------------------------------------------------------------------- # If False, the license (after the login) will not be shown. # Default: True ShowLicence = True # Default: True AutoCreateAccounts = True # Datapack root directory. # Defaults to current directory from which the server is started. DatapackRoot = . # --------------------------------------------------------------------------- # Scheduled Login Restart # --------------------------------------------------------------------------- # Enable disable scheduled login restart. # Default: False LoginRestartSchedule = False # Time in hours. # Default: 24 LoginRestartTime = 24    
  • Topics

×
×
  • Create New...