Unlock timer improvements for grandbosses.

This commit is contained in:
MobiusDev
2017-10-14 14:03:30 +00:00
parent 2c49981231
commit 8a8ebeda48
15 changed files with 303 additions and 208 deletions

View File

@@ -341,10 +341,22 @@ public class Anakim extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM); final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(ANAKIM);
if (time > 0) 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);
} }
} }

View File

@@ -367,10 +367,22 @@ public class Lilith extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LILITH);
if (time > 0) 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);
} }
} }

View File

@@ -245,10 +245,22 @@ public class Lindvior extends AbstractNpcAI
_zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class); _zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class);
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LINDVIOR_RAID);
if (time > 0) 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) 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)); _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) if (_mobsSpawnTask != null)
{ {
_mobsSpawnTask.cancel(true); _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(SECOND_STAGE_EVENT_TRIGGER, false));
_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true)); _zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true));
_lionel.deleteMe(); _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) else if (npc.getId() == NPC_GENERATOR)
{ {

View File

@@ -16,10 +16,10 @@
*/ */
package ai.bosses.Trasken; package ai.bosses.Trasken;
import java.util.Calendar;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import com.l2jmobius.Config;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.data.xml.impl.DoorData; 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.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone; import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone;
import com.l2jmobius.gameserver.network.NpcStringId; 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.ExSendUIEvent;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import com.l2jmobius.gameserver.util.Broadcast;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -323,21 +321,29 @@ public class Trasken extends AbstractNpcAI
{ {
DoorData.getInstance().getDoor(DOOR).openMe(); 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() 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(); int size = _zoneLair.getPlayersInside().size();
if ((size >= 14) && (size <= 28)) if ((size >= 14) && (size <= 28))
{ {
@@ -579,6 +585,11 @@ public class Trasken extends AbstractNpcAI
{ {
switch (event) switch (event)
{ {
case "unlock_trasken":
{
GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
break;
}
case "exitEarthWyrnCave": case "exitEarthWyrnCave":
{ {
if (npc.getId() == TELEPORT_ORB) if (npc.getId() == TELEPORT_ORB)
@@ -589,7 +600,6 @@ public class Trasken extends AbstractNpcAI
} }
case "finish": case "finish":
{ {
GrandBossManager.getInstance().setBossStatus(TRASKEN, DEAD);
trasken.doDie(player); trasken.doDie(player);
trasken.setIsDead(true); trasken.setIsDead(true);
_zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION)); _zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION));
@@ -597,7 +607,6 @@ public class Trasken extends AbstractNpcAI
{ {
playMovie(p, Movie.SC_EARTHWORM_ENDING); playMovie(p, Movie.SC_EARTHWORM_ENDING);
}); });
final long respawnTime = 72 * 3600000;
if (_collapseTask != null) if (_collapseTask != null)
{ {
_collapseTask.cancel(true); _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(L2Character::isNpc).forEach(mob -> mob.deleteMe());
_zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn()); _zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn());
ThreadPoolManager.schedule(() -> npc.decayMe(), 10000); ThreadPoolManager.schedule(() -> npc.decayMe(), 10000);
ThreadPoolManager.schedule(new UnlockTrasken(), respawnTime);
cancelQuestTimer("finish", npc, null); 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; break;
} }
case "spawn_rnd": case "spawn_rnd":
@@ -882,38 +897,6 @@ public class Trasken extends AbstractNpcAI
}, 4050); }, 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) public static void main(String[] args)
{ {
new Trasken(); new Trasken();

View File

@@ -341,10 +341,22 @@ public class Anakim extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM); final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(ANAKIM);
if (time > 0) 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);
} }
} }

View File

@@ -117,15 +117,26 @@ public class Kelbim extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM); final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(KELBIM);
if (time > 0) 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(DOOR1, 0);
openDoor(DOOR2, 0); openDoor(DOOR2, 0);
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
} }
} }

View File

@@ -367,10 +367,22 @@ public class Lilith extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LILITH);
if (time > 0) 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);
} }
} }

View File

@@ -245,10 +245,22 @@ public class Lindvior extends AbstractNpcAI
_zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class); _zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class);
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LINDVIOR_RAID);
if (time > 0) 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) 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)); _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) if (_mobsSpawnTask != null)
{ {
_mobsSpawnTask.cancel(true); _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(SECOND_STAGE_EVENT_TRIGGER, false));
_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true)); _zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true));
_lionel.deleteMe(); _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) else if (npc.getId() == NPC_GENERATOR)
{ {

View File

@@ -16,10 +16,10 @@
*/ */
package ai.bosses.Trasken; package ai.bosses.Trasken;
import java.util.Calendar;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import com.l2jmobius.Config;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.data.xml.impl.DoorData; 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.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone; import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone;
import com.l2jmobius.gameserver.network.NpcStringId; 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.ExSendUIEvent;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import com.l2jmobius.gameserver.util.Broadcast;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -323,21 +321,29 @@ public class Trasken extends AbstractNpcAI
{ {
DoorData.getInstance().getDoor(DOOR).openMe(); 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() 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(); int size = _zoneLair.getPlayersInside().size();
if ((size >= 14) && (size <= 28)) if ((size >= 14) && (size <= 28))
{ {
@@ -579,6 +585,11 @@ public class Trasken extends AbstractNpcAI
{ {
switch (event) switch (event)
{ {
case "unlock_trasken":
{
GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
break;
}
case "exitEarthWyrnCave": case "exitEarthWyrnCave":
{ {
if (npc.getId() == TELEPORT_ORB) if (npc.getId() == TELEPORT_ORB)
@@ -589,7 +600,6 @@ public class Trasken extends AbstractNpcAI
} }
case "finish": case "finish":
{ {
GrandBossManager.getInstance().setBossStatus(TRASKEN, DEAD);
trasken.doDie(player); trasken.doDie(player);
trasken.setIsDead(true); trasken.setIsDead(true);
_zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION)); _zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION));
@@ -597,7 +607,6 @@ public class Trasken extends AbstractNpcAI
{ {
playMovie(p, Movie.SC_EARTHWORM_ENDING); playMovie(p, Movie.SC_EARTHWORM_ENDING);
}); });
final long respawnTime = 72 * 3600000;
if (_collapseTask != null) if (_collapseTask != null)
{ {
_collapseTask.cancel(true); _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(L2Character::isNpc).forEach(mob -> mob.deleteMe());
_zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn()); _zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn());
ThreadPoolManager.schedule(() -> npc.decayMe(), 10000); ThreadPoolManager.schedule(() -> npc.decayMe(), 10000);
ThreadPoolManager.schedule(new UnlockTrasken(), respawnTime);
cancelQuestTimer("finish", npc, null); 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; break;
} }
case "spawn_rnd": case "spawn_rnd":
@@ -882,38 +897,6 @@ public class Trasken extends AbstractNpcAI
}, 4050); }, 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) public static void main(String[] args)
{ {
new Trasken(); new Trasken();

View File

@@ -341,10 +341,22 @@ public class Anakim extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM); final StatsSet info = GrandBossManager.getInstance().getStatsSet(ANAKIM);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(ANAKIM);
if (time > 0) 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);
} }
} }

View File

@@ -54,15 +54,27 @@ public class Helios extends AbstractNpcAI
{ {
addAttackId(HELIOS); addAttackId(HELIOS);
addKillId(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 // Zone
bossZone = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class); 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 @Override
@@ -105,13 +117,14 @@ public class Helios extends AbstractNpcAI
{ {
if (npc.getId() == HELIOS) 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); GrandBossManager.getInstance().setBossStatus(HELIOS, DEAD);
final long respawnTime = (Config.HELIOS_SPAWN_INTERVAL + getRandom(-Config.HELIOS_SPAWN_RANDOM, Config.HELIOS_SPAWN_RANDOM)) * 3600000; final long respawnTime = (Config.HELIOS_SPAWN_INTERVAL + getRandom(-Config.HELIOS_SPAWN_RANDOM, Config.HELIOS_SPAWN_RANDOM)) * 3600000;
final StatsSet info = GrandBossManager.getInstance().getStatsSet(HELIOS); final StatsSet info = GrandBossManager.getInstance().getStatsSet(HELIOS);
info.set("respawn_time", System.currentTimeMillis() + respawnTime); info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatsSet(HELIOS, info); GrandBossManager.getInstance().setStatsSet(HELIOS, info);
startQuestTimer("unlock_helios", respawnTime, null, null); 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); return super.onKill(npc, killer, isSummon);
} }

View File

@@ -117,15 +117,26 @@ public class Kelbim extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM); final StatsSet info = GrandBossManager.getInstance().getStatsSet(KELBIM);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(KELBIM);
if (time > 0) 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(DOOR1, 0);
openDoor(DOOR2, 0); openDoor(DOOR2, 0);
GrandBossManager.getInstance().setBossStatus(KELBIM, ALIVE);
} }
} }

View File

@@ -367,10 +367,22 @@ public class Lilith extends AbstractNpcAI
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LILITH);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LILITH);
if (time > 0) 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);
} }
} }

View File

@@ -245,10 +245,22 @@ public class Lindvior extends AbstractNpcAI
_zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class); _zoneLair = ZoneManager.getInstance().getZoneById(ZONE_ID, L2NoSummonFriendZone.class);
// Unlock // Unlock
final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID); final StatsSet info = GrandBossManager.getInstance().getStatsSet(LINDVIOR_RAID);
final long time = info.getLong("respawn_time") - System.currentTimeMillis(); final int status = GrandBossManager.getInstance().getBossStatus(LINDVIOR_RAID);
if (time > 0) 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) 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)); _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) if (_mobsSpawnTask != null)
{ {
_mobsSpawnTask.cancel(true); _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(SECOND_STAGE_EVENT_TRIGGER, false));
_zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true)); _zoneLair.broadcastPacket(new OnEventTrigger(FIRST_STAGE_EVENT_TRIGGER, true));
_lionel.deleteMe(); _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) else if (npc.getId() == NPC_GENERATOR)
{ {

View File

@@ -16,10 +16,10 @@
*/ */
package ai.bosses.Trasken; package ai.bosses.Trasken;
import java.util.Calendar;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import com.l2jmobius.Config;
import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.data.xml.impl.DoorData; 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.L2ZoneType;
import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone; import com.l2jmobius.gameserver.model.zone.type.L2NoSummonFriendZone;
import com.l2jmobius.gameserver.network.NpcStringId; 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.ExSendUIEvent;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage; import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import com.l2jmobius.gameserver.util.Broadcast;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -323,21 +321,29 @@ public class Trasken extends AbstractNpcAI
{ {
DoorData.getInstance().getDoor(DOOR).openMe(); 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() 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(); int size = _zoneLair.getPlayersInside().size();
if ((size >= 14) && (size <= 28)) if ((size >= 14) && (size <= 28))
{ {
@@ -579,6 +585,11 @@ public class Trasken extends AbstractNpcAI
{ {
switch (event) switch (event)
{ {
case "unlock_trasken":
{
GrandBossManager.getInstance().setBossStatus(TRASKEN, ALIVE);
break;
}
case "exitEarthWyrnCave": case "exitEarthWyrnCave":
{ {
if (npc.getId() == TELEPORT_ORB) if (npc.getId() == TELEPORT_ORB)
@@ -589,7 +600,6 @@ public class Trasken extends AbstractNpcAI
} }
case "finish": case "finish":
{ {
GrandBossManager.getInstance().setBossStatus(TRASKEN, DEAD);
trasken.doDie(player); trasken.doDie(player);
trasken.setIsDead(true); trasken.setIsDead(true);
_zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION)); _zoneLair2.getPlayersInside().forEach(players -> players.teleToLocation(CENTER_LOCATION));
@@ -597,7 +607,6 @@ public class Trasken extends AbstractNpcAI
{ {
playMovie(p, Movie.SC_EARTHWORM_ENDING); playMovie(p, Movie.SC_EARTHWORM_ENDING);
}); });
final long respawnTime = 72 * 3600000;
if (_collapseTask != null) if (_collapseTask != null)
{ {
_collapseTask.cancel(true); _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(L2Character::isNpc).forEach(mob -> mob.deleteMe());
_zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn()); _zoneLair2.getCharactersInside().stream().filter(L2Object::isMonster).forEach(cha -> ((L2MonsterInstance) cha).getSpawn().stopRespawn());
ThreadPoolManager.schedule(() -> npc.decayMe(), 10000); ThreadPoolManager.schedule(() -> npc.decayMe(), 10000);
ThreadPoolManager.schedule(new UnlockTrasken(), respawnTime);
cancelQuestTimer("finish", npc, null); 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; break;
} }
case "spawn_rnd": case "spawn_rnd":
@@ -882,38 +897,6 @@ public class Trasken extends AbstractNpcAI
}, 4050); }, 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) public static void main(String[] args)
{ {
new Trasken(); new Trasken();