Script adjustments.
This commit is contained in:
		| @@ -223,6 +223,7 @@ public final class Alarm extends AbstractNpcAI | ||||
| 	@Override | ||||
| 	public String onSpawn(Npc npc) | ||||
| 	{ | ||||
| 		cancelQuestTimer("SELF_DESTRUCT_IN_60", npc, null); | ||||
| 		startQuestTimer("SELF_DESTRUCT_IN_60", 60000, npc, null); | ||||
| 		npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.INTRUDER_ALERT_THE_ALARM_WILL_SELF_DESTRUCT_IN_2_MINUTES); | ||||
| 		final PlayerInstance player = npc.getVariables().getObject("player0", PlayerInstance.class); | ||||
|   | ||||
| @@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.skills.Skill; | ||||
| import org.l2jmobius.gameserver.model.zone.type.EffectZone; | ||||
| import org.l2jmobius.gameserver.network.SystemMessageId; | ||||
| import org.l2jmobius.gameserver.network.serverpackets.SystemMessage; | ||||
| import org.l2jmobius.gameserver.scripting.annotations.Disabled; | ||||
|  | ||||
| import ai.AbstractNpcAI; | ||||
|  | ||||
| @@ -35,6 +36,7 @@ import ai.AbstractNpcAI; | ||||
|  * Dummy AI for spawns/respawns only for testing. | ||||
|  * @author Gnacik | ||||
|  */ | ||||
| @Disabled // Mobius: this needs to be rewritten. | ||||
| public final class DenOfEvil extends AbstractNpcAI | ||||
| { | ||||
| 	// private static final int _buffer_id = 32656; | ||||
|   | ||||
| @@ -54,8 +54,7 @@ public final class ZealotOfShilen extends AbstractNpcAI | ||||
| 			return null; | ||||
| 		} | ||||
| 		 | ||||
| 		startQuestTimer("WATCHING", 10000, npc, null, true); | ||||
| 		if (event.equalsIgnoreCase("WATCHING") && !npc.isAttackingNow()) | ||||
| 		if (event.equals("WATCHING") && !npc.isAttackingNow() && !npc.isAlikeDead()) | ||||
| 		{ | ||||
| 			World.getInstance().forEachVisibleObject(npc, MonsterInstance.class, character -> | ||||
| 			{ | ||||
| @@ -66,6 +65,7 @@ public final class ZealotOfShilen extends AbstractNpcAI | ||||
| 					npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, character, null); | ||||
| 				} | ||||
| 			}); | ||||
| 			startQuestTimer("WATCHING", 10000, npc, null); | ||||
| 		} | ||||
| 		return super.onAdvEvent(event, npc, player); | ||||
| 	} | ||||
| @@ -87,7 +87,8 @@ public final class ZealotOfShilen extends AbstractNpcAI | ||||
| 		{ | ||||
| 			npc.setIsInvul(true); | ||||
| 			((Attackable) npc).setCanReturnToSpawnPoint(false); | ||||
| 			startQuestTimer("WATCHING", 10000, npc, null, true); | ||||
| 			cancelQuestTimer("WATCHING", npc, null); | ||||
| 			startQuestTimer("WATCHING", 10000, npc, null); | ||||
| 		} | ||||
| 		return super.onSpawn(npc); | ||||
| 	} | ||||
|   | ||||
| @@ -281,6 +281,7 @@ public final class MonasteryOfSilence extends AbstractNpcAI | ||||
| 	{ | ||||
| 		npc.setIsInvul(true); | ||||
| 		npc.disableCoreAI(true); | ||||
| 		cancelQuestTimer("TRAINING", npc, null); | ||||
| 		startQuestTimer("TRAINING", 30000, npc, null, true); | ||||
| 		return super.onSpawn(npc); | ||||
| 	} | ||||
|   | ||||
| @@ -486,6 +486,7 @@ public final class PrimevalIsle extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (CommonUtil.contains(SPRIGNANT, npc.getId())) | ||||
| 		{ | ||||
| 			cancelQuestTimer("USE_SKILL", npc, null); | ||||
| 			startQuestTimer("USE_SKILL", 15000, npc, null); | ||||
| 		} | ||||
| 		else if (CommonUtil.contains(TREX, npc.getId())) | ||||
| @@ -495,6 +496,7 @@ public final class PrimevalIsle extends AbstractNpcAI | ||||
| 			 | ||||
| 			if (collectGhost == 1) | ||||
| 			{ | ||||
| 				cancelQuestTimer("GHOST_DESPAWN", npc, null); | ||||
| 				startQuestTimer("GHOST_DESPAWN", collectDespawn * 60000, npc, null); | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -263,6 +263,7 @@ public final class SelMahumDrill extends AbstractNpcAI | ||||
| 	{ | ||||
| 		if (CommonUtil.contains(MAHUM_CHIEFS, npc.getId())) | ||||
| 		{ | ||||
| 			cancelQuestTimer("do_social_action", npc, null); | ||||
| 			startQuestTimer("do_social_action", 15000, npc, null); | ||||
| 		} | ||||
| 		 | ||||
|   | ||||
| @@ -345,6 +345,7 @@ public final class SelMahumSquad extends AbstractNpcAI | ||||
| 		} | ||||
| 		else if (npc.getId() == FIRE) | ||||
| 		{ | ||||
| 			cancelQuestTimer("fire", npc, null); | ||||
| 			startQuestTimer("fire", 1000, npc, null); | ||||
| 		} | ||||
| 		else if (CommonUtil.contains(SQUAD_LEADERS, npc.getId())) | ||||
|   | ||||
| @@ -18,10 +18,8 @@ package ai.bosses.QueenAnt; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.concurrent.CopyOnWriteArrayList; | ||||
| import java.util.concurrent.ScheduledFuture; | ||||
|  | ||||
| import org.l2jmobius.Config; | ||||
| import org.l2jmobius.commons.concurrent.ThreadPool; | ||||
| import org.l2jmobius.gameserver.ai.CtrlIntention; | ||||
| import org.l2jmobius.gameserver.instancemanager.GrandBossManager; | ||||
| import org.l2jmobius.gameserver.model.Location; | ||||
| @@ -82,7 +80,6 @@ public final class QueenAnt extends AbstractNpcAI | ||||
| 	MonsterInstance _queen = null; | ||||
| 	private MonsterInstance _larva = null; | ||||
| 	private final List<MonsterInstance> _nurses = new CopyOnWriteArrayList<>(); | ||||
| 	ScheduledFuture<?> _task = null; | ||||
| 	 | ||||
| 	private QueenAnt() | ||||
| 	{ | ||||
| @@ -151,68 +148,87 @@ public final class QueenAnt extends AbstractNpcAI | ||||
| 	@Override | ||||
| 	public String onAdvEvent(String event, Npc npc, PlayerInstance player) | ||||
| 	{ | ||||
| 		if (event.equalsIgnoreCase("heal")) | ||||
| 		switch (event) | ||||
| 		{ | ||||
| 			boolean notCasting; | ||||
| 			final boolean larvaNeedHeal = (_larva != null) && (_larva.getCurrentHp() < _larva.getMaxHp()); | ||||
| 			final boolean queenNeedHeal = (_queen != null) && (_queen.getCurrentHp() < _queen.getMaxHp()); | ||||
| 			for (MonsterInstance nurse : _nurses) | ||||
| 			case "heal": | ||||
| 			{ | ||||
| 				if ((nurse == null) || nurse.isDead() || nurse.isCastingNow()) | ||||
| 				boolean notCasting; | ||||
| 				final boolean larvaNeedHeal = (_larva != null) && (_larva.getCurrentHp() < _larva.getMaxHp()); | ||||
| 				final boolean queenNeedHeal = (_queen != null) && (_queen.getCurrentHp() < _queen.getMaxHp()); | ||||
| 				for (MonsterInstance nurse : _nurses) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
| 				 | ||||
| 				notCasting = nurse.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST; | ||||
| 				if (larvaNeedHeal) | ||||
| 				{ | ||||
| 					if ((nurse.getTarget() != _larva) || notCasting) | ||||
| 					{ | ||||
| 						nurse.setTarget(_larva); | ||||
| 						nurse.useMagic(getRandomBoolean() ? HEAL1.getSkill() : HEAL2.getSkill()); | ||||
| 					} | ||||
| 					continue; | ||||
| 				} | ||||
| 				if (queenNeedHeal) | ||||
| 				{ | ||||
| 					if (nurse.getLeader() == _larva) | ||||
| 					if ((nurse == null) || nurse.isDead() || nurse.isCastingNow()) | ||||
| 					{ | ||||
| 						continue; | ||||
| 					} | ||||
| 					 | ||||
| 					if ((nurse.getTarget() != _queen) || notCasting) | ||||
| 					notCasting = nurse.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST; | ||||
| 					if (larvaNeedHeal) | ||||
| 					{ | ||||
| 						nurse.setTarget(_queen); | ||||
| 						nurse.useMagic(HEAL1.getSkill()); | ||||
| 						if ((nurse.getTarget() != _larva) || notCasting) | ||||
| 						{ | ||||
| 							nurse.setTarget(_larva); | ||||
| 							nurse.useMagic(getRandomBoolean() ? HEAL1.getSkill() : HEAL2.getSkill()); | ||||
| 						} | ||||
| 						continue; | ||||
| 					} | ||||
| 					if (queenNeedHeal) | ||||
| 					{ | ||||
| 						if (nurse.getLeader() == _larva) | ||||
| 						{ | ||||
| 							continue; | ||||
| 						} | ||||
| 						 | ||||
| 						if ((nurse.getTarget() != _queen) || notCasting) | ||||
| 						{ | ||||
| 							nurse.setTarget(_queen); | ||||
| 							nurse.useMagic(HEAL1.getSkill()); | ||||
| 						} | ||||
| 						continue; | ||||
| 					} | ||||
| 					// if nurse not casting - remove target | ||||
| 					if (notCasting && (nurse.getTarget() != null)) | ||||
| 					{ | ||||
| 						nurse.setTarget(null); | ||||
| 					} | ||||
| 					continue; | ||||
| 				} | ||||
| 				// if nurse not casting - remove target | ||||
| 				if (notCasting && (nurse.getTarget() != null)) | ||||
| 				{ | ||||
| 					nurse.setTarget(null); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		else if (event.equalsIgnoreCase("action") && (npc != null)) | ||||
| 		{ | ||||
| 			if (getRandom(3) == 0) | ||||
| 			case "action": | ||||
| 			{ | ||||
| 				if (getRandom(2) == 0) | ||||
| 				if ((npc != null) && (getRandom(3) == 0)) | ||||
| 				{ | ||||
| 					npc.broadcastSocialAction(3); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					npc.broadcastSocialAction(4); | ||||
| 					if (getRandom(2) == 0) | ||||
| 					{ | ||||
| 						npc.broadcastSocialAction(3); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						npc.broadcastSocialAction(4); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			case "queen_unlock": | ||||
| 			{ | ||||
| 				final GrandBossInstance queen = (GrandBossInstance) addSpawn(QUEEN, QUEEN_X, QUEEN_Y, QUEEN_Z, 0, false, 0); | ||||
| 				GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE); | ||||
| 				spawnBoss(queen); | ||||
| 				break; | ||||
| 			} | ||||
| 			case "ANT_QUEEN_TASK": | ||||
| 			{ | ||||
| 				if ((_queen == null) || _queen.isDead()) | ||||
| 				{ | ||||
| 					cancelQuestTimers("ANT_QUEEN_TASK"); | ||||
| 				} | ||||
| 				else if (_queen.calculateDistance2D(QUEEN_X, QUEEN_Y, QUEEN_Z) > 2000) | ||||
| 				{ | ||||
| 					_queen.clearAggroList(); | ||||
| 					_queen.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(QUEEN_X, QUEEN_Y, QUEEN_Z, 0)); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		else if (event.equalsIgnoreCase("queen_unlock")) | ||||
| 		{ | ||||
| 			final GrandBossInstance queen = (GrandBossInstance) addSpawn(QUEEN, QUEEN_X, QUEEN_Y, QUEEN_Z, 0, false, 0); | ||||
| 			GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE); | ||||
| 			spawnBoss(queen); | ||||
| 		} | ||||
| 		return super.onAdvEvent(event, npc, player); | ||||
| 	} | ||||
| @@ -245,7 +261,8 @@ public final class QueenAnt extends AbstractNpcAI | ||||
| 			} | ||||
| 			case QUEEN: | ||||
| 			{ | ||||
| 				_task = ThreadPool.scheduleAtFixedRate(new QueenAntTask(), 5 * 1000, 5 * 1000); | ||||
| 				cancelQuestTimer("ANT_QUEEN_TASK", npc, null); | ||||
| 				startQuestTimer("ANT_QUEEN_TASK", 5000, npc, null, true); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| @@ -344,11 +361,7 @@ public final class QueenAnt extends AbstractNpcAI | ||||
| 			_larva.deleteMe(); | ||||
| 			_larva = null; | ||||
| 			_queen = null; | ||||
| 			if (_task != null) | ||||
| 			{ | ||||
| 				_task.cancel(false); | ||||
| 				_task = null; | ||||
| 			} | ||||
| 			cancelQuestTimers("ANT_QUEEN_TASK"); | ||||
| 		} | ||||
| 		else if ((_queen != null) && !_queen.isAlikeDead()) | ||||
| 		{ | ||||
| @@ -372,29 +385,6 @@ public final class QueenAnt extends AbstractNpcAI | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	private class QueenAntTask implements Runnable | ||||
| 	{ | ||||
| 		public QueenAntTask() | ||||
| 		{ | ||||
| 			// Constructor stub | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| 		public void run() | ||||
| 		{ | ||||
| 			if ((_queen == null) || _queen.isDead()) | ||||
| 			{ | ||||
| 				_task.cancel(false); | ||||
| 				_task = null; | ||||
| 			} | ||||
| 			else if (_queen.calculateDistance2D(QUEEN_X, QUEEN_Y, QUEEN_Z) > 2000.) | ||||
| 			{ | ||||
| 				_queen.clearAggroList(); | ||||
| 				_queen.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(QUEEN_X, QUEEN_Y, QUEEN_Z, 0)); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new QueenAnt(); | ||||
|   | ||||
| @@ -246,6 +246,7 @@ public final class Minigame extends AbstractNpcAI | ||||
| 			case TREASURE_BOX: | ||||
| 			{ | ||||
| 				npc.disableCoreAI(true); | ||||
| 				cancelQuestTimer("afterthat", npc, null); | ||||
| 				startQuestTimer("afterthat", 180000, npc, null); | ||||
| 				break; | ||||
| 			} | ||||
|   | ||||
| @@ -128,6 +128,8 @@ public final class WarriorFishingBlock extends AbstractNpcAI | ||||
| 	@Override | ||||
| 	public String onSpawn(Npc npc) | ||||
| 	{ | ||||
| 		cancelQuestTimer("SPAWN", npc, null); | ||||
| 		cancelQuestTimer("DESPAWN", npc, null); | ||||
| 		startQuestTimer("SPAWN", 2000, npc, null); | ||||
| 		return super.onSpawn(npc); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment