Devastated castle fixes and cleanup.
Contributed by Sahar.
This commit is contained in:
		| @@ -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<Integer, Integer> _damageToGustav = new HashMap<>(); | ||||
| 	private final Map<Integer, Integer> _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<Integer, Integer> 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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment