diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java index 976a2d8e00..268db992c9 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java @@ -16,13 +16,12 @@ */ package conquerablehalls.DevastatedCastle; -import java.util.HashMap; +import java.util.Collections; import java.util.Map; -import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.data.sql.impl.ClanTable; -import org.l2jmobius.gameserver.data.xml.impl.NpcData; import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.model.actor.Npc; @@ -40,19 +39,24 @@ public class DevastatedCastle extends ClanHallSiegeEngine private static final int GUSTAV = 35410; private static final int MIKHAIL = 35409; private static final int DIETRICH = 35408; - private static final double GUSTAV_TRIGGER_HP = NpcData.getInstance().getTemplate(GUSTAV).getBaseHpMax() / 12; - private static Map _damageToGustav = new HashMap<>(); + private final Map _damageToGustav = new ConcurrentHashMap<>(); private DevastatedCastle() { super(DEVASTATED_CASTLE); addKillId(GUSTAV); - addSpawnId(MIKHAIL); - addSpawnId(DIETRICH); + addSpawnId(MIKHAIL, DIETRICH); addAttackId(GUSTAV); } + @Override + public void onSiegeStarts() + { + _damageToGustav.clear(); + super.onSiegeStarts(); + } + @Override public String onSpawn(Npc npc) { @@ -75,31 +79,21 @@ public class DevastatedCastle extends ClanHallSiegeEngine return null; } + final Clan clan = attacker.getClan(); + if ((clan != null) && checkIsAttacker(clan)) + { + _damageToGustav.merge(clan.getId(), damage, Integer::sum); + } + synchronized (this) { - final Clan clan = attacker.getClan(); - - if ((clan != null) && checkIsAttacker(clan)) - { - final int id = clan.getId(); - if (_damageToGustav.containsKey(id)) - { - int newDamage = _damageToGustav.get(id); - newDamage += damage; - _damageToGustav.put(id, newDamage); - } - else - { - _damageToGustav.put(id, damage); - } - } - - if ((npc.getCurrentHp() < GUSTAV_TRIGGER_HP) && (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST)) + if (!npc.isCastingNow() && (npc.getCurrentHp() < (npc.getMaxHp() / 12))) { npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_IS_UNBELIEVABLE_HAVE_I_REALLY_BEEN_DEFEATED_I_SHALL_RETURN_AND_TAKE_YOUR_HEAD); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, SkillData.getInstance().getSkill(4235, 1), npc); } } + return super.onAttack(npc, attacker, damage, isSummon); } @@ -113,14 +107,8 @@ public class DevastatedCastle extends ClanHallSiegeEngine _missionAccomplished = true; - if (npc.getId() == GUSTAV) - { - synchronized (this) - { - cancelSiegeTask(); - endSiege(); - } - } + cancelSiegeTask(); + endSiege(); return super.onKill(npc, killer, isSummon); } @@ -128,18 +116,13 @@ public class DevastatedCastle extends ClanHallSiegeEngine @Override public Clan getWinner() { - int counter = 0; - int damagest = 0; - for (Entry e : _damageToGustav.entrySet()) + if (_damageToGustav.isEmpty()) { - final int damage = e.getValue(); - if (damage > counter) - { - counter = damage; - damagest = e.getKey(); - } + return null; } - return ClanTable.getInstance().getClan(damagest); + + final int clanId = Collections.max(_damageToGustav.entrySet(), Map.Entry.comparingByValue()).getKey(); + return ClanTable.getInstance().getClan(clanId); } public static void main(String[] args) diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java index 976a2d8e00..268db992c9 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/conquerablehalls/DevastatedCastle/DevastatedCastle.java @@ -16,13 +16,12 @@ */ package conquerablehalls.DevastatedCastle; -import java.util.HashMap; +import java.util.Collections; import java.util.Map; -import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.ai.CtrlIntention; import org.l2jmobius.gameserver.data.sql.impl.ClanTable; -import org.l2jmobius.gameserver.data.xml.impl.NpcData; import org.l2jmobius.gameserver.data.xml.impl.SkillData; import org.l2jmobius.gameserver.enums.ChatType; import org.l2jmobius.gameserver.model.actor.Npc; @@ -40,19 +39,24 @@ public class DevastatedCastle extends ClanHallSiegeEngine private static final int GUSTAV = 35410; private static final int MIKHAIL = 35409; private static final int DIETRICH = 35408; - private static final double GUSTAV_TRIGGER_HP = NpcData.getInstance().getTemplate(GUSTAV).getBaseHpMax() / 12; - private static Map _damageToGustav = new HashMap<>(); + private final Map _damageToGustav = new ConcurrentHashMap<>(); private DevastatedCastle() { super(DEVASTATED_CASTLE); addKillId(GUSTAV); - addSpawnId(MIKHAIL); - addSpawnId(DIETRICH); + addSpawnId(MIKHAIL, DIETRICH); addAttackId(GUSTAV); } + @Override + public void onSiegeStarts() + { + _damageToGustav.clear(); + super.onSiegeStarts(); + } + @Override public String onSpawn(Npc npc) { @@ -75,31 +79,21 @@ public class DevastatedCastle extends ClanHallSiegeEngine return null; } + final Clan clan = attacker.getClan(); + if ((clan != null) && checkIsAttacker(clan)) + { + _damageToGustav.merge(clan.getId(), damage, Integer::sum); + } + synchronized (this) { - final Clan clan = attacker.getClan(); - - if ((clan != null) && checkIsAttacker(clan)) - { - final int id = clan.getId(); - if (_damageToGustav.containsKey(id)) - { - int newDamage = _damageToGustav.get(id); - newDamage += damage; - _damageToGustav.put(id, newDamage); - } - else - { - _damageToGustav.put(id, damage); - } - } - - if ((npc.getCurrentHp() < GUSTAV_TRIGGER_HP) && (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST)) + if (!npc.isCastingNow() && (npc.getCurrentHp() < (npc.getMaxHp() / 12))) { npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_IS_UNBELIEVABLE_HAVE_I_REALLY_BEEN_DEFEATED_I_SHALL_RETURN_AND_TAKE_YOUR_HEAD); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, SkillData.getInstance().getSkill(4235, 1), npc); } } + return super.onAttack(npc, attacker, damage, isSummon); } @@ -113,14 +107,8 @@ public class DevastatedCastle extends ClanHallSiegeEngine _missionAccomplished = true; - if (npc.getId() == GUSTAV) - { - synchronized (this) - { - cancelSiegeTask(); - endSiege(); - } - } + cancelSiegeTask(); + endSiege(); return super.onKill(npc, killer, isSummon); } @@ -128,18 +116,13 @@ public class DevastatedCastle extends ClanHallSiegeEngine @Override public Clan getWinner() { - int counter = 0; - int damagest = 0; - for (Entry e : _damageToGustav.entrySet()) + if (_damageToGustav.isEmpty()) { - final int damage = e.getValue(); - if (damage > counter) - { - counter = damage; - damagest = e.getKey(); - } + return null; } - return ClanTable.getInstance().getClan(damagest); + + final int clanId = Collections.max(_damageToGustav.entrySet(), Map.Entry.comparingByValue()).getKey(); + return ClanTable.getInstance().getClan(clanId); } public static void main(String[] args)