From 8a8ebeda48e2610cd220f2067aa389110a410051 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 14 Oct 2017 14:03:30 +0000 Subject: [PATCH] Unlock timer improvements for grandbosses. --- .../data/scripts/ai/bosses/Anakim/Anakim.java | 18 ++++- .../data/scripts/ai/bosses/Lilith/Lilith.java | 18 ++++- .../scripts/ai/bosses/Lindvior/Lindvior.java | 31 ++++--- .../scripts/ai/bosses/Trasken/Trasken.java | 81 ++++++++----------- .../data/scripts/ai/bosses/Anakim/Anakim.java | 18 ++++- .../data/scripts/ai/bosses/Kelbim/Kelbim.java | 19 ++++- .../data/scripts/ai/bosses/Lilith/Lilith.java | 18 ++++- .../scripts/ai/bosses/Lindvior/Lindvior.java | 31 ++++--- .../scripts/ai/bosses/Trasken/Trasken.java | 81 ++++++++----------- .../data/scripts/ai/bosses/Anakim/Anakim.java | 18 ++++- .../data/scripts/ai/bosses/Helios/Helios.java | 29 +++++-- .../data/scripts/ai/bosses/Kelbim/Kelbim.java | 19 ++++- .../data/scripts/ai/bosses/Lilith/Lilith.java | 18 ++++- .../scripts/ai/bosses/Lindvior/Lindvior.java | 31 ++++--- .../scripts/ai/bosses/Trasken/Trasken.java | 81 ++++++++----------- 15 files changed, 303 insertions(+), 208 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java index 63dd20cca1..b52ac5e91a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java @@ -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); } } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java index c9b2beaa6e..6fc0a40bc8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java @@ -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); } } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index 68cdafafe3..7e11d3b4d1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -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) { diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java index 862e1977b6..6e8a0db865 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java @@ -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(); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java index 63dd20cca1..b52ac5e91a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java @@ -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); } } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java index 34a47060b6..a19a9f836b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java @@ -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); } } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java index c9b2beaa6e..6fc0a40bc8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java @@ -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); } } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index 68cdafafe3..7e11d3b4d1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -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) { diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java index 862e1977b6..6e8a0db865 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java @@ -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(); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java index 63dd20cca1..b52ac5e91a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Anakim/Anakim.java @@ -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); } } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Helios/Helios.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Helios/Helios.java index 4a5eaa1987..3288a982ea 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Helios/Helios.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Helios/Helios.java @@ -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); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java index 34a47060b6..a19a9f836b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Kelbim/Kelbim.java @@ -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); } } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java index c9b2beaa6e..6fc0a40bc8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lilith/Lilith.java @@ -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); } } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java index 68cdafafe3..7e11d3b4d1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Lindvior/Lindvior.java @@ -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) { diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java index 862e1977b6..6e8a0db865 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/bosses/Trasken/Trasken.java @@ -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();