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();
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -117,15 +117,26 @@ public class Kelbim extends AbstractNpcAI
|
||||
|
||||
// Unlock
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
final int status = GrandBossManager.getInstance().getBossStatus(KELBIM);
|
||||
if (status == DEAD)
|
||||
{
|
||||
startQuestTimer("unlock_kelbim", time, null, null);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_kelbim", time, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (status != ALIVE)
|
||||
{
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, 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();
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -54,15 +54,27 @@ public class Helios extends AbstractNpcAI
|
||||
{
|
||||
addAttackId(HELIOS);
|
||||
addKillId(HELIOS);
|
||||
// Unlock
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(HELIOS);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_helios", time, null, null);
|
||||
}
|
||||
// Zone
|
||||
bossZone = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class);
|
||||
// Unlock
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(HELIOS);
|
||||
final int status = GrandBossManager.getInstance().getBossStatus(HELIOS);
|
||||
if (status == DEAD)
|
||||
{
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_helios", time, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(HELIOS, ALIVE);
|
||||
}
|
||||
}
|
||||
else if (status != ALIVE)
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(HELIOS, ALIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -105,13 +117,14 @@ public class Helios extends AbstractNpcAI
|
||||
{
|
||||
if (npc.getId() == HELIOS)
|
||||
{
|
||||
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true));
|
||||
|
||||
GrandBossManager.getInstance().setBossStatus(HELIOS, DEAD);
|
||||
final long respawnTime = (Config.HELIOS_SPAWN_INTERVAL + getRandom(-Config.HELIOS_SPAWN_RANDOM, Config.HELIOS_SPAWN_RANDOM)) * 3600000;
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(HELIOS);
|
||||
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
|
||||
GrandBossManager.getInstance().setStatsSet(HELIOS, info);
|
||||
startQuestTimer("unlock_helios", respawnTime, null, null);
|
||||
bossZone.broadcastPacket(new ExShowScreenMessage(NpcStringId.HELIOS_DEFEATED_TAKES_FLIGHT_DEEP_IN_TO_THE_SUPERION_FORT_HIS_THRONE_IS_RENDERED_INACTIVE, ExShowScreenMessage.TOP_CENTER, 10000, true));
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
@@ -117,15 +117,26 @@ public class Kelbim extends AbstractNpcAI
|
||||
|
||||
// Unlock
|
||||
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
final int status = GrandBossManager.getInstance().getBossStatus(KELBIM);
|
||||
if (status == DEAD)
|
||||
{
|
||||
startQuestTimer("unlock_kelbim", time, null, null);
|
||||
final long time = info.getLong("respawn_time") - System.currentTimeMillis();
|
||||
if (time > 0)
|
||||
{
|
||||
startQuestTimer("unlock_kelbim", time, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (status != ALIVE)
|
||||
{
|
||||
openDoor(DOOR1, 0);
|
||||
openDoor(DOOR2, 0);
|
||||
GrandBossManager.getInstance().setBossStatus(KELBIM, 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