Unlock timer improvements for grandbosses.
This commit is contained in:
		@@ -341,10 +341,22 @@ public class Anakim extends AbstractNpcAI
 | 
			
		||||
		
 | 
			
		||||
		// Unlock
 | 
			
		||||
		final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM);
 | 
			
		||||
		final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
		if (time > 0)
 | 
			
		||||
		final int status = GrandBossManager.getInstance().getBossStatus(ANAKIM);
 | 
			
		||||
		if (status == DEAD)
 | 
			
		||||
		{
 | 
			
		||||
			startQuestTimer("unlock_anakim", time, null, null);
 | 
			
		||||
			final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
			if (time > 0)
 | 
			
		||||
			{
 | 
			
		||||
				startQuestTimer("unlock_anakim", time, null, null);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if (status != ALIVE)
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(ANAKIM, ALIVE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -367,10 +367,22 @@ public class Lilith extends AbstractNpcAI
 | 
			
		||||
		
 | 
			
		||||
		// Unlock
 | 
			
		||||
		final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH);
 | 
			
		||||
		final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
		if (time > 0)
 | 
			
		||||
		final int status = GrandBossManager.getInstance().getBossStatus(LILITH);
 | 
			
		||||
		if (status == DEAD)
 | 
			
		||||
		{
 | 
			
		||||
			startQuestTimer("unlock_lilith", time, null, null);
 | 
			
		||||
			final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
			if (time > 0)
 | 
			
		||||
			{
 | 
			
		||||
				startQuestTimer("unlock_lilith", time, null, null);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(LILITH, ALIVE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if (status != ALIVE)
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(LILITH, ALIVE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -245,10 +245,22 @@ public class Lindvior extends AbstractNpcAI
 | 
			
		||||
		_zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class);
 | 
			
		||||
		// Unlock
 | 
			
		||||
		final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
 | 
			
		||||
		final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
		if (time > 0)
 | 
			
		||||
		final int status = GrandBossManager.getInstance().getBossStatus(LINDVIOR_RAID);
 | 
			
		||||
		if (status == DEAD)
 | 
			
		||||
		{
 | 
			
		||||
			startQuestTimer("unlock_lindvior", time, null, null);
 | 
			
		||||
			final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
			if (time > 0)
 | 
			
		||||
			{
 | 
			
		||||
				startQuestTimer("unlock_lindvior", time, null, null);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(LINDVIOR_RAID, ALIVE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if (status != ALIVE)
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(LINDVIOR_RAID, ALIVE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -812,12 +824,6 @@ public class Lindvior extends AbstractNpcAI
 | 
			
		||||
		if (npc.getId() == LINDVIOR_RAID)
 | 
			
		||||
		{
 | 
			
		||||
			_zoneLair.broadcastPacket(new ExShowScreenMessage(NpcStringId.HONORABLE_WARRIORS_HAVE_DRIVEN_OFF_LINDVIOR_THE_EVIL_WIND_DRAGON, ExShowScreenMessage.TOP_CENTER, 10000, true));
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(LINDVIOR_RAID, DEAD);
 | 
			
		||||
			final long respawnTime = (Config.LINDVIOR_SPAWN_INTERVAL + getRandom(-Config.LINDVIOR_SPAWN_RANDOM, Config.LINDVIOR_SPAWN_RANDOM)) * 3600000;
 | 
			
		||||
			final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
 | 
			
		||||
			info.set("respawn_time", System.currentTimeMillis() + respawnTime);
 | 
			
		||||
			GrandBossManager.getInstance().setStatsSet(LINDVIOR_RAID, info);
 | 
			
		||||
			startQuestTimer("unlock_lindvior", respawnTime, null, null);
 | 
			
		||||
			if (_mobsSpawnTask != null)
 | 
			
		||||
			{
 | 
			
		||||
				_mobsSpawnTask.cancel(true);
 | 
			
		||||
@@ -828,6 +834,13 @@ public class Lindvior extends AbstractNpcAI
 | 
			
		||||
			_zoneLair.broadcastPacket(new OnEventTrigger(SECOND_STAGE_EVENT_TRIGGER, false));
 | 
			
		||||
			_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true));
 | 
			
		||||
			_lionel.deleteMe();
 | 
			
		||||
			
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(LINDVIOR_RAID, DEAD);
 | 
			
		||||
			final long respawnTime = (Config.LINDVIOR_SPAWN_INTERVAL + getRandom(-Config.LINDVIOR_SPAWN_RANDOM, Config.LINDVIOR_SPAWN_RANDOM)) * 3600000;
 | 
			
		||||
			final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
 | 
			
		||||
			info.set("respawn_time", System.currentTimeMillis() + respawnTime);
 | 
			
		||||
			GrandBossManager.getInstance().setStatsSet(LINDVIOR_RAID, info);
 | 
			
		||||
			startQuestTimer("unlock_lindvior", respawnTime, null, null);
 | 
			
		||||
		}
 | 
			
		||||
		else if (npc.getId() == NPC_GENERATOR)
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
@@ -16,10 +16,10 @@
 | 
			
		||||
 */
 | 
			
		||||
package ai.bosses.Trasken;
 | 
			
		||||
 | 
			
		||||
import java.util.Calendar;
 | 
			
		||||
import java.util.concurrent.ScheduledFuture;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
import com.l2jmobius.Config;
 | 
			
		||||
import com.l2jmobius.commons.util.Rnd;
 | 
			
		||||
import com.l2jmobius.gameserver.ThreadPoolManager;
 | 
			
		||||
import com.l2jmobius.gameserver.data.xml.impl.DoorData;
 | 
			
		||||
@@ -41,11 +41,9 @@ import com.l2jmobius.gameserver.model.skills.BuffInfo;
 | 
			
		||||
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
 | 
			
		||||
import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone;
 | 
			
		||||
import com.l2jmobius.gameserver.network.NpcStringId;
 | 
			
		||||
import com.l2jmobius.gameserver.network.serverpackets.Earthquake;
 | 
			
		||||
import com.l2jmobius.gameserver.network.serverpackets.ExSendUIEvent;
 | 
			
		||||
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
 | 
			
		||||
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
 | 
			
		||||
import com.l2jmobius.gameserver.util.Broadcast;
 | 
			
		||||
 | 
			
		||||
import ai.AbstractNpcAI;
 | 
			
		||||
 | 
			
		||||
@@ -323,21 +321,29 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
		{
 | 
			
		||||
			DoorData.getInstance().getDoor(DOOR).openMe();
 | 
			
		||||
		}
 | 
			
		||||
		// Unlock
 | 
			
		||||
		final StatsSet info = GrandBossManager.getInstance().getStatsSet(TRASKEN);
 | 
			
		||||
		final int status = GrandBossManager.getInstance().getBossStatus(TRASKEN);
 | 
			
		||||
		if (status == DEAD)
 | 
			
		||||
		{
 | 
			
		||||
			final long time = info.getLong("respawn_time") - System.currentTimeMillis();
 | 
			
		||||
			if (time > 0)
 | 
			
		||||
			{
 | 
			
		||||
				startQuestTimer("unlock_trasken", time, null, null);
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else if (status != ALIVE)
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private void init()
 | 
			
		||||
	{
 | 
			
		||||
		int status = GrandBossManager.getInstance().getBossStatus(TRASKEN);
 | 
			
		||||
		final StatsSet info = GrandBossManager.getInstance().getStatsSet(TRASKEN);
 | 
			
		||||
		final Long respawnTime = info.getLong("respawn_time");
 | 
			
		||||
		if ((status == 3) && (respawnTime <= System.currentTimeMillis()))
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
 | 
			
		||||
		}
 | 
			
		||||
		else if (status == 3)
 | 
			
		||||
		{
 | 
			
		||||
			ThreadPoolManager.schedule(() -> GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE), respawnTime - System.currentTimeMillis());
 | 
			
		||||
		}
 | 
			
		||||
		int size = _zoneLair.getPlayersInside().size();
 | 
			
		||||
		if ((size >= 14) && (size <= 28))
 | 
			
		||||
		{
 | 
			
		||||
@@ -579,6 +585,11 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
	{
 | 
			
		||||
		switch (event)
 | 
			
		||||
		{
 | 
			
		||||
			case "unlock_trasken":
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "exitEarthWyrnCave":
 | 
			
		||||
			{
 | 
			
		||||
				if (npc.getId() == TELEPORT_ORB)
 | 
			
		||||
@@ -589,7 +600,6 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
			}
 | 
			
		||||
			case "finish":
 | 
			
		||||
			{
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(TRASKEN, DEAD);
 | 
			
		||||
				trasken.doDie(player);
 | 
			
		||||
				trasken.setIsDead(true);
 | 
			
		||||
				_zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION));
 | 
			
		||||
@@ -597,7 +607,6 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
				{
 | 
			
		||||
					playMovie(p, Movie.SC_EARTHWORM_ENDING);
 | 
			
		||||
				});
 | 
			
		||||
				final long respawnTime = 72 * 3600000;
 | 
			
		||||
				if (_collapseTask != null)
 | 
			
		||||
				{
 | 
			
		||||
					_collapseTask.cancel(true);
 | 
			
		||||
@@ -608,8 +617,14 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
				_zoneLair2.getCharactersInside().stream().filter(L2Character::isNpc).forEach(mob -> mob.deleteMe());
 | 
			
		||||
				_zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn());
 | 
			
		||||
				ThreadPoolManager.schedule(() -> npc.decayMe(), 10000);
 | 
			
		||||
				ThreadPoolManager.schedule(new UnlockTrasken(), respawnTime);
 | 
			
		||||
				cancelQuestTimer("finish", npc, null);
 | 
			
		||||
				
 | 
			
		||||
				GrandBossManager.getInstance().setBossStatus(TRASKEN, DEAD);
 | 
			
		||||
				final long respawnTime = (Config.TRASKEN_SPAWN_INTERVAL + getRandom(-Config.TRASKEN_SPAWN_RANDOM, Config.TRASKEN_SPAWN_RANDOM)) * 3600000;
 | 
			
		||||
				final StatsSet info = GrandBossManager.getInstance().getStatsSet(TRASKEN);
 | 
			
		||||
				info.set("respawn_time", System.currentTimeMillis() + respawnTime);
 | 
			
		||||
				GrandBossManager.getInstance().setStatsSet(TRASKEN, info);
 | 
			
		||||
				startQuestTimer("unlock_trasken", respawnTime, null, null);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			case "spawn_rnd":
 | 
			
		||||
@@ -882,38 +897,6 @@ public class Trasken extends AbstractNpcAI
 | 
			
		||||
		}, 4050);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean getTimeUnlock()
 | 
			
		||||
	{
 | 
			
		||||
		Calendar cal = Calendar.getInstance();
 | 
			
		||||
		if ((cal.get(Calendar.WEEK_OF_MONTH) == 1) || (cal.get(Calendar.WEEK_OF_MONTH) == 3))
 | 
			
		||||
		{
 | 
			
		||||
			switch (cal.get(Calendar.DAY_OF_WEEK))
 | 
			
		||||
			{
 | 
			
		||||
				case Calendar.FRIDAY:
 | 
			
		||||
				case Calendar.SATURDAY:
 | 
			
		||||
				case Calendar.SUNDAY:
 | 
			
		||||
				{
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private class UnlockTrasken implements Runnable
 | 
			
		||||
	{
 | 
			
		||||
		public UnlockTrasken()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		@Override
 | 
			
		||||
		public void run()
 | 
			
		||||
		{
 | 
			
		||||
			GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
 | 
			
		||||
			Broadcast.toAllOnlinePlayers(new Earthquake(CENTER_LOCATION.getX(), CENTER_LOCATION.getY(), CENTER_LOCATION.getZ(), CENTER_LOCATION.getHeading(), 10));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static void main(String[] args)
 | 
			
		||||
	{
 | 
			
		||||
		new Trasken();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user