Jump to content
  • 0

TeamVsTeam For aCis


l2jkain

Question

Hello I changed the INTERVAL event to String but it does not work, the event starts when the serve goes online.

 

by :

# Time Between TvT events (in minutes, 300 = 5 hours)
TvTEventInterval = 1

for :

 

# Times TvT will occur (24h format).
# Example: 20:00,21,00,22:00
TvTEventInterval = 23:16 <---- Do not start at this time begins before

 

code original :

 

package net.sf.l2j.gameserver.model.entity;
+
+import net.sf.l2j.commons.concurrent.ThreadPool;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.util.Broadcast;
+
+/**
+ * @author FBIagent
+ */
+public class TvTEventManager implements Runnable
+{
+	/**
+	 * The one and only instance of this class<br>
+	 */
+	private static TvTEventManager _instance = null;
+	
+	/**
+	 * New instance only by getInstance()<br>
+	 */
+	private TvTEventManager()
+	{
+		if (Config.TVT_EVENT_ENABLED)
+		{
+			ThreadPool.schedule(this, 0);
+			System.out.println("TvTEventEngine[TvTManager.TvTManager()]: Started.");
+		}
+		else
+			System.out.println("TvTEventEngine[TvTManager.TvTManager()]: Engine is disabled.");
+	}
+	
+	/**
+	 * Initialize new/Returns the one and only instance<br>
+	 * <br>
+	 * @return TvTManager<br>
+	 */
+	public static TvTEventManager getInstance()
+	{
+		if (_instance == null)
+			_instance = new TvTEventManager();
+		
+		return _instance;
+	}
+	
+	/**
+	 * The task method to handle cycles of the event
+	 * @see java.lang.Runnable#run()
+	 */
+	@Override
+	public void run()
+	{
+		TvTEvent.init();
+		
+		for (;;)
+		{
+			waiter(Config.TVT_EVENT_INTERVAL * 60); // in config given as minutes
+			
+			if (!TvTEvent.startParticipation())
+			{
+				Broadcast.announceToOnlinePlayers("TvT: Event was canceled.", true);
+				System.out.println("TvTEventEngine[TvTManager.run()]: Error spawning event npc for participation.");
+				continue;
+			}
+			Broadcast.announceToOnlinePlayers("TvT: Registration opened for " + Config.TVT_EVENT_PARTICIPATION_TIME + " minute(s). Type .tvtjoin or .tvtleave", true);
+			
+			waiter(Config.TVT_EVENT_PARTICIPATION_TIME * 60); // in config given as minutes
+			
+			if (!TvTEvent.startFight())
+			{
+				Broadcast.announceToOnlinePlayers("TvT: Event canceled due to lack of Participation.", true);
+				System.out.println("TvTEventEngine[TvTManager.run()]: Lack of registration, abort event.");
+				continue;
+			}
+			Broadcast.announceToOnlinePlayers("TvT: Registration closed!", true);
+			TvTEvent.sysMsgToAllParticipants("TvT: Teleporting participants to an arena in " + Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY + " second(s).");
+			
+			waiter(Config.TVT_EVENT_RUNNING_TIME * 60); // in config given as minutes
+			Broadcast.announceToOnlinePlayers(TvTEvent.calculateRewards(), true);
+			TvTEvent.sysMsgToAllParticipants("TvT: Teleporting back to the registration npc in " + Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY + " second(s).");
+			TvTEvent.stopFight();
+		}
+	}
+	
+	/**
+	 * This method waits for a period time delay
+	 * @param seconds
+	 */
+	void waiter(int seconds)
+	{
+		while (seconds > 1)
+		{
+			seconds--; // here because we don't want to see two time announce at the same time
+			
+			if (TvTEvent.isParticipating() || TvTEvent.isStarted())
+			{
+				switch (seconds)
+				{
+					case 3600: // 1 hour left
+						if (TvTEvent.isParticipating())
+							Broadcast.announceToOnlinePlayers("TvT: " + seconds / 60 / 60 + " hour(s) umtil registration is closed!", true);
+						else if (TvTEvent.isStarted())
+							TvTEvent.sysMsgToAllParticipants("TvT: " + seconds / 60 / 60 + " hour(s) until event is finished!");
+						
+						break;
+					case 1800: // 30 minutes left
+					case 900: // 15 minutes left
+					case 600: // 10 minutes left
+					case 300: // 5 minutes left
+					case 240: // 4 minutes left
+					case 180: // 3 minutes left
+					case 120: // 2 minutes left
+					case 60: // 1 minute left
+						if (TvTEvent.isParticipating())
+							Broadcast.announceToOnlinePlayers("TvT: " + seconds / 60 + " minute(s) until registration is closed!", true);
+						else if (TvTEvent.isStarted())
+							TvTEvent.sysMsgToAllParticipants("TvT: " + seconds / 60 + " minute(s) until the event is finished!");
+						
+						break;
+					case 30: // 30 seconds left
+						/**
+						 * case 15: // 15 seconds left case 10: // 10 seconds left
+						 */
+					case 5: // 5 seconds left
+						
+						/**
+						 * case 4: // 4 seconds left case 3: // 3 seconds left case 2: // 2 seconds left case 1: // 1 seconds left
+						 */
+						if (TvTEvent.isParticipating())
+							Broadcast.announceToOnlinePlayers("TvT: " + seconds + " second(s) until registration is closed!", true);
+						else if (TvTEvent.isStarted())
+							TvTEvent.sysMsgToAllParticipants("TvT: " + seconds + " second(s) until the event is finished!");
+						
+						break;
+				}
+			}
+			TvTEvent.waiter(1);
+		}
+	}
+}

 

code modified :

 

package net.sf.l2j.gameserver.model.entity.jdev.engine.manager;

import java.util.Calendar;
import java.util.logging.Logger;

import net.sf.l2j.commons.concurrent.ThreadPool;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.entity.jdev.engine.TeamVsTeam;
import net.sf.l2j.gameserver.util.Broadcast;

/**
 * @author FBIagent
 */
public class TvTManager implements Runnable
{
	protected static final Logger _log = Logger.getLogger(TvTManager.class.getName());
	
	public TvTManager()
	{
		if (Config.EVENTS_ENABLED)
		{
			ThreadPool.schedule(this, 0);
			_log.info("TeamVsTeam: Started.");
		}
		else
			_log.info("TeamVsTeam: Disabled.");
	}
	
	public static TvTManager getInstance()
	{
		return SingletonHolder._instance;
	}
	
	@Override
	public void run()
	{
		TeamVsTeam.init();
		try
		{
			Calendar currentTime = Calendar.getInstance();
			Calendar nextStartTime = null;
			Calendar testStartTime = null;
			
			for (String timeOfDay : Config.TVT_EVENT_INTERVAL)
			{
				testStartTime = Calendar.getInstance();
				testStartTime.setLenient(true);
				String[] splitTimeOfDay = timeOfDay.split(":");
				testStartTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(splitTimeOfDay[0]));
				testStartTime.set(Calendar.MINUTE, Integer.parseInt(splitTimeOfDay[1]));
				
				if (testStartTime.getTimeInMillis() < currentTime.getTimeInMillis())
					testStartTime.add(Calendar.DAY_OF_MONTH, 1);
				
				if (nextStartTime == null || testStartTime.getTimeInMillis() < nextStartTime.getTimeInMillis())
					nextStartTime = testStartTime;
				
				if (!TeamVsTeam.startParticipation())
				{
					Broadcast.announceToOnlinePlayers("TeamVsTeam: Event was cancelled.", true);
					System.out.println("TeamVsTeam: Error spawning event npc for participation.");
					continue;
				}
				
				Broadcast.announceToOnlinePlayers("TeamVsTeam: Registration opened for " + Config.TVT_EVENT_PARTICIPATION_TIME + " minute(s).", true);
				Broadcast.announceToOnlinePlayers("TeamVsTeam: Joinable in " + Config.EVENTS_JOIN_LOCATION + ".", true);
				Broadcast.announceToOnlinePlayers("TeamVsTeam:"+" Recruiting levels: " + Config.EVENTS_MIN_LVL + " to " + Config.EVENTS_MAX_LVL + ".", true);
				
				if (Config.TVT_VOICED_COMMAND)
					Broadcast.announceToOnlinePlayers("TeamVsTeam: Commands .TVTon .TVToff .TVTinfo.",true);
				
				waiter(Config.TVT_EVENT_PARTICIPATION_TIME * 60); // in config given as minutes
				
				if (!TeamVsTeam.startFight())
				{
					Broadcast.announceToOnlinePlayers("TeamVsTeam: Event cancelled due to lack of Participation.", true);
					System.out.println("TeamVsTeam: Lack of registration, abort event.");
					continue;
				}
				TeamVsTeam.sysMsgToAllParticipants("TeamVsTeam: Teleporting participants to an arena in "  + Config.EVENTS_START_LEAVE_TELEPORT_DELAY + " second(s).");
				
				waiter(Config.TVT_EVENT_RUNNING_TIME * 60); // in config given as minutes
				Broadcast.announceToOnlinePlayers(TeamVsTeam.calculateRewards(), true);
				TeamVsTeam.sysMsgToAllParticipants("TeamVsTeam: Teleporting back to the registration npc in " + Config.EVENTS_START_LEAVE_TELEPORT_DELAY + " second(s).");
				TeamVsTeam.stopFight();
			}
		}
		catch (Exception e)
		{
			_log.warning("TeamVsTeam: Error figuring out a start time. Check TVTEventInterval in config file.");
		}
	}
	
	void waiter(int seconds)
	{
		while (seconds > 1)
		{
			seconds--; // Here because we don't want to see two time announce at the same time
			
			if (TeamVsTeam.isParticipating() || TeamVsTeam.isStarted())
			{
				switch (seconds)
				{
					case 3600: // 1 hour left
						if (TeamVsTeam.isParticipating())
							Broadcast.announceToOnlinePlayers("TeamVsTeam: " + seconds / 60 / 60 + " hour(s) umtil registration is closed!", true);
						else if (TeamVsTeam.isStarted())
							TeamVsTeam.sysMsgToAllParticipants("TeamVsTeam: " + seconds / 60 / 60 + " hour(s) until event is finished!");
						break;
					case 1800: // 30 minutes left
					case 900: // 15 minutes left
					case 600: // 10 minutes left
					case 300: // 5 minutes left
					case 240: // 4 minutes left
					case 180: // 3 minutes left
					case 120: // 2 minutes left
					case 60: // 1 minute left
						
						if (TeamVsTeam.isParticipating())
							Broadcast.announceToOnlinePlayers("TeamVsTeam: " + seconds / 60 + " minute(s) until registration is closed!", true);
						else if (TeamVsTeam.isStarted())
							TeamVsTeam.sysMsgToAllParticipants("TeamVsTeam: " + seconds / 60 + " minute(s) until the event is finished!");
						break;
					case 30: // 30 seconds left
					case 15: // 15 seconds left
					case 10: // 10 seconds left
					case 3: // 3 seconds left
					case 2: // 2 seconds left
					case 1: // 1 seconds left
						
						if (TeamVsTeam.isParticipating())
							Broadcast.announceToOnlinePlayers("TeamVsTeam: " + seconds + " second(s) until registration is closed!", true);
						else if (TeamVsTeam.isStarted())
							TeamVsTeam.sysMsgToAllParticipants("TeamVsTeam: " + seconds + " second(s) until the event is finished!");
						
						break;
				}
			}
			
			long startOneSecondWaiterStartTime = System.currentTimeMillis();
			while (startOneSecondWaiterStartTime + 1000L > System.currentTimeMillis())
			{
				try
				{
					Thread.sleep(1);
				}
				catch (final InterruptedException ie)
				{
					ie.printStackTrace();
				}
			}
		}
	}
	
	private static class SingletonHolder
	{
		protected static final TvTManager _instance = new TvTManager();
	}
}

 

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

search for an engine there are far better codes than this with more events and working with the timer you want, you lose time to fix that unless you try to learn

Link to comment
Share on other sites

  • 0
On 06/04/2018 at 5:14 AM, Nightw0lf said:

search for an engine there are far better codes than this with more events and working with the timer you want, you lose time to fix that unless you try to learn

 

 

I removed half of the code and created the cases in run () and it worked was improving the whole event removing the rubbish

Link to comment
Share on other sites

  • 0
7 hours ago, l2jkain said:

 

 

I removed half of the code and created the cases in run () and it worked was improving the whole event removing the rubbish

run is replaced with lamda in most of acis (that you're using) and what i already told you is far better without rubbish

Link to comment
Share on other sites

  • 0
On 09/04/2018 at 6:32 AM, Nightw0lf said:

run é substituído por lamda na maioria dos acis (que você está usando) e o que eu já disse é bem melhor sem lixo

 

 

I'm doing my own engine sicronizei all the events I removed the methods of balancing of teams and I made the configs of all you left configs useful I made an afk system, all based on the system of the ATHENA engine.

 

YFPfWoY.png

 

Yeah, it might suck to many for now. I will make a manage for all events soon

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • 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    
    • or at least to tell you an update that sorry but still not at home.. 10 days is suspisious.. but he is long time offline from discord indeed... maybe something happened?
    • I never had problems with him. Again, Im not sure if he scammed or not. But 10+ days without answering after we already paid, its a bit sus. If you know you wouldnt be able to answer for a few days, after receiving and confirming the amount, why dont keep in touch? or just say "hey, dont send now because I will only be available after day x.".  
    • i used to ask him for stuff etc, i dont think he scammed ... if he does i will be suprised...
  • Topics

×
×
  • Create New...