Addition of Bee Hive AI.
Contributed by Index.
This commit is contained in:
		
							
								
								
									
										149
									
								
								L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package ai.areas.BeeHive; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Monster; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Pet; | ||||
| import org.l2jmobius.gameserver.model.holders.SkillHolder; | ||||
|  | ||||
| import ai.AbstractNpcAI; | ||||
|  | ||||
| /** | ||||
|  * @author Index | ||||
|  */ | ||||
| public class BeeHive extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int PET_70_MONSTER = 22297; // Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_70_MONSTER = 22303; // Rusty | ||||
| 	private static final int PET_80_MONSTER = 22302; // Rude Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_80_MONSTER = 22304; // Giant Rusty | ||||
| 	private static final Set<Integer> LV_70_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_70_MONSTERS.add(22293); | ||||
| 		LV_70_MONSTERS.add(22294); | ||||
| 		LV_70_MONSTERS.add(22295); | ||||
| 		LV_70_MONSTERS.add(22296); | ||||
| 	} | ||||
| 	private static final Set<Integer> LV_80_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_80_MONSTERS.add(22298); | ||||
| 		LV_80_MONSTERS.add(22299); | ||||
| 		LV_80_MONSTERS.add(22300); | ||||
| 		LV_80_MONSTERS.add(22301); | ||||
| 	} | ||||
| 	// Skills | ||||
| 	private static final SkillHolder[] SKILLS = | ||||
| 	{ | ||||
| 		new SkillHolder(48197, 1), // (Lv. 1) Pet Growth Effect | ||||
| 		new SkillHolder(48198, 1) // (Lv. 1) Improved Pet Skills | ||||
| 	}; | ||||
| 	// Items | ||||
| 	private static final int TAG_PET_BOX = 94634; | ||||
| 	private static final int LOW_PET_XP_CRYSTAL = 94635; | ||||
| 	// Misc | ||||
| 	private static final long DESPAWN_TIME = 2 * 60 * 1000; // 2 minutes | ||||
| 	 | ||||
| 	private BeeHive() | ||||
| 	{ | ||||
| 		addKillId(LV_70_MONSTERS); | ||||
| 		addKillId(LV_80_MONSTERS); | ||||
| 		addKillId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 		addAttackId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon) | ||||
| 	{ | ||||
| 		if (!isSummon) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		final Pet pet = attacker.getPet(); | ||||
| 		if ((pet.getCurrentFed() == 0) || pet.isDead() || pet.isAffectedBySkill(SKILLS[0]) || pet.isAffectedBySkill(SKILLS[1])) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		if ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER)) | ||||
| 		{ | ||||
| 			pet.doCast(getRandomEntry(SKILLS).getSkill()); | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(Npc npc, Player killer, boolean isSummon) | ||||
| 	{ | ||||
| 		if (killer.hasPet() && ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER))) | ||||
| 		{ | ||||
| 			if (getRandom(1000) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", LOW_PET_XP_CRYSTAL, 1, killer, true); | ||||
| 			} | ||||
| 			else if (getRandom(100) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", TAG_PET_BOX, 1, killer, true); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (getRandomBoolean()) | ||||
| 		{ | ||||
| 			// Check if already spawned. | ||||
| 			for (Monster monster : World.getInstance().getVisibleObjects(killer, Monster.class)) | ||||
| 			{ | ||||
| 				if (monster.getScriptValue() == killer.getObjectId()) | ||||
| 				{ | ||||
| 					return super.onKill(npc, killer, isSummon); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			final boolean isLow = LV_70_MONSTERS.contains(npc.getId()); | ||||
| 			if (isLow || LV_80_MONSTERS.contains(npc.getId())) | ||||
| 			{ | ||||
| 				final Npc spawn; | ||||
| 				if (killer.hasPet()) | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PET_70_MONSTER : PET_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PLAYER_70_MONSTER : PLAYER_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				spawn.setScriptValue(killer.getObjectId()); | ||||
| 				spawn.setShowSummonAnimation(true); | ||||
| 				addAttackPlayerDesire(spawn, killer.hasPet() ? killer.getPet() : killer); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new BeeHive(); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										149
									
								
								L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package ai.areas.BeeHive; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Monster; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Pet; | ||||
| import org.l2jmobius.gameserver.model.holders.SkillHolder; | ||||
|  | ||||
| import ai.AbstractNpcAI; | ||||
|  | ||||
| /** | ||||
|  * @author Index | ||||
|  */ | ||||
| public class BeeHive extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int PET_70_MONSTER = 22297; // Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_70_MONSTER = 22303; // Rusty | ||||
| 	private static final int PET_80_MONSTER = 22302; // Rude Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_80_MONSTER = 22304; // Giant Rusty | ||||
| 	private static final Set<Integer> LV_70_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_70_MONSTERS.add(22293); | ||||
| 		LV_70_MONSTERS.add(22294); | ||||
| 		LV_70_MONSTERS.add(22295); | ||||
| 		LV_70_MONSTERS.add(22296); | ||||
| 	} | ||||
| 	private static final Set<Integer> LV_80_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_80_MONSTERS.add(22298); | ||||
| 		LV_80_MONSTERS.add(22299); | ||||
| 		LV_80_MONSTERS.add(22300); | ||||
| 		LV_80_MONSTERS.add(22301); | ||||
| 	} | ||||
| 	// Skills | ||||
| 	private static final SkillHolder[] SKILLS = | ||||
| 	{ | ||||
| 		new SkillHolder(48197, 1), // (Lv. 1) Pet Growth Effect | ||||
| 		new SkillHolder(48198, 1) // (Lv. 1) Improved Pet Skills | ||||
| 	}; | ||||
| 	// Items | ||||
| 	private static final int TAG_PET_BOX = 94634; | ||||
| 	private static final int LOW_PET_XP_CRYSTAL = 94635; | ||||
| 	// Misc | ||||
| 	private static final long DESPAWN_TIME = 2 * 60 * 1000; // 2 minutes | ||||
| 	 | ||||
| 	private BeeHive() | ||||
| 	{ | ||||
| 		addKillId(LV_70_MONSTERS); | ||||
| 		addKillId(LV_80_MONSTERS); | ||||
| 		addKillId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 		addAttackId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon) | ||||
| 	{ | ||||
| 		if (!isSummon) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		final Pet pet = attacker.getPet(); | ||||
| 		if ((pet.getCurrentFed() == 0) || pet.isDead() || pet.isAffectedBySkill(SKILLS[0]) || pet.isAffectedBySkill(SKILLS[1])) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		if ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER)) | ||||
| 		{ | ||||
| 			pet.doCast(getRandomEntry(SKILLS).getSkill()); | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(Npc npc, Player killer, boolean isSummon) | ||||
| 	{ | ||||
| 		if (killer.hasPet() && ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER))) | ||||
| 		{ | ||||
| 			if (getRandom(1000) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", LOW_PET_XP_CRYSTAL, 1, killer, true); | ||||
| 			} | ||||
| 			else if (getRandom(100) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", TAG_PET_BOX, 1, killer, true); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (getRandomBoolean()) | ||||
| 		{ | ||||
| 			// Check if already spawned. | ||||
| 			for (Monster monster : World.getInstance().getVisibleObjects(killer, Monster.class)) | ||||
| 			{ | ||||
| 				if (monster.getScriptValue() == killer.getObjectId()) | ||||
| 				{ | ||||
| 					return super.onKill(npc, killer, isSummon); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			final boolean isLow = LV_70_MONSTERS.contains(npc.getId()); | ||||
| 			if (isLow || LV_80_MONSTERS.contains(npc.getId())) | ||||
| 			{ | ||||
| 				final Npc spawn; | ||||
| 				if (killer.hasPet()) | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PET_70_MONSTER : PET_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PLAYER_70_MONSTER : PLAYER_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				spawn.setScriptValue(killer.getObjectId()); | ||||
| 				spawn.setShowSummonAnimation(true); | ||||
| 				addAttackPlayerDesire(spawn, killer.hasPet() ? killer.getPet() : killer); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new BeeHive(); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										149
									
								
								L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package ai.areas.BeeHive; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Monster; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Pet; | ||||
| import org.l2jmobius.gameserver.model.holders.SkillHolder; | ||||
|  | ||||
| import ai.AbstractNpcAI; | ||||
|  | ||||
| /** | ||||
|  * @author Index | ||||
|  */ | ||||
| public class BeeHive extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int PET_70_MONSTER = 22297; // Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_70_MONSTER = 22303; // Rusty | ||||
| 	private static final int PET_80_MONSTER = 22302; // Rude Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_80_MONSTER = 22304; // Giant Rusty | ||||
| 	private static final Set<Integer> LV_70_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_70_MONSTERS.add(22293); | ||||
| 		LV_70_MONSTERS.add(22294); | ||||
| 		LV_70_MONSTERS.add(22295); | ||||
| 		LV_70_MONSTERS.add(22296); | ||||
| 	} | ||||
| 	private static final Set<Integer> LV_80_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_80_MONSTERS.add(22298); | ||||
| 		LV_80_MONSTERS.add(22299); | ||||
| 		LV_80_MONSTERS.add(22300); | ||||
| 		LV_80_MONSTERS.add(22301); | ||||
| 	} | ||||
| 	// Skills | ||||
| 	private static final SkillHolder[] SKILLS = | ||||
| 	{ | ||||
| 		new SkillHolder(48197, 1), // (Lv. 1) Pet Growth Effect | ||||
| 		new SkillHolder(48198, 1) // (Lv. 1) Improved Pet Skills | ||||
| 	}; | ||||
| 	// Items | ||||
| 	private static final int TAG_PET_BOX = 94634; | ||||
| 	private static final int LOW_PET_XP_CRYSTAL = 94635; | ||||
| 	// Misc | ||||
| 	private static final long DESPAWN_TIME = 2 * 60 * 1000; // 2 minutes | ||||
| 	 | ||||
| 	private BeeHive() | ||||
| 	{ | ||||
| 		addKillId(LV_70_MONSTERS); | ||||
| 		addKillId(LV_80_MONSTERS); | ||||
| 		addKillId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 		addAttackId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon) | ||||
| 	{ | ||||
| 		if (!isSummon) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		final Pet pet = attacker.getPet(); | ||||
| 		if ((pet.getCurrentFed() == 0) || pet.isDead() || pet.isAffectedBySkill(SKILLS[0]) || pet.isAffectedBySkill(SKILLS[1])) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		if ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER)) | ||||
| 		{ | ||||
| 			pet.doCast(getRandomEntry(SKILLS).getSkill()); | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(Npc npc, Player killer, boolean isSummon) | ||||
| 	{ | ||||
| 		if (killer.hasPet() && ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER))) | ||||
| 		{ | ||||
| 			if (getRandom(1000) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", LOW_PET_XP_CRYSTAL, 1, killer, true); | ||||
| 			} | ||||
| 			else if (getRandom(100) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", TAG_PET_BOX, 1, killer, true); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (getRandomBoolean()) | ||||
| 		{ | ||||
| 			// Check if already spawned. | ||||
| 			for (Monster monster : World.getInstance().getVisibleObjects(killer, Monster.class)) | ||||
| 			{ | ||||
| 				if (monster.getScriptValue() == killer.getObjectId()) | ||||
| 				{ | ||||
| 					return super.onKill(npc, killer, isSummon); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			final boolean isLow = LV_70_MONSTERS.contains(npc.getId()); | ||||
| 			if (isLow || LV_80_MONSTERS.contains(npc.getId())) | ||||
| 			{ | ||||
| 				final Npc spawn; | ||||
| 				if (killer.hasPet()) | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PET_70_MONSTER : PET_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PLAYER_70_MONSTER : PLAYER_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				spawn.setScriptValue(killer.getObjectId()); | ||||
| 				spawn.setShowSummonAnimation(true); | ||||
| 				addAttackPlayerDesire(spawn, killer.hasPet() ? killer.getPet() : killer); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new BeeHive(); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										149
									
								
								L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| /* | ||||
|  * This file is part of the L2J Mobius project. | ||||
|  *  | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||
|  * General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| package ai.areas.BeeHive; | ||||
|  | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.l2jmobius.gameserver.model.World; | ||||
| import org.l2jmobius.gameserver.model.actor.Npc; | ||||
| import org.l2jmobius.gameserver.model.actor.Player; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Monster; | ||||
| import org.l2jmobius.gameserver.model.actor.instance.Pet; | ||||
| import org.l2jmobius.gameserver.model.holders.SkillHolder; | ||||
|  | ||||
| import ai.AbstractNpcAI; | ||||
|  | ||||
| /** | ||||
|  * @author Index | ||||
|  */ | ||||
| public class BeeHive extends AbstractNpcAI | ||||
| { | ||||
| 	// NPCs | ||||
| 	private static final int PET_70_MONSTER = 22297; // Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_70_MONSTER = 22303; // Rusty | ||||
| 	private static final int PET_80_MONSTER = 22302; // Rude Tag [Slayer] - BUFF | ||||
| 	private static final int PLAYER_80_MONSTER = 22304; // Giant Rusty | ||||
| 	private static final Set<Integer> LV_70_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_70_MONSTERS.add(22293); | ||||
| 		LV_70_MONSTERS.add(22294); | ||||
| 		LV_70_MONSTERS.add(22295); | ||||
| 		LV_70_MONSTERS.add(22296); | ||||
| 	} | ||||
| 	private static final Set<Integer> LV_80_MONSTERS = new HashSet<>(); | ||||
| 	static | ||||
| 	{ | ||||
| 		LV_80_MONSTERS.add(22298); | ||||
| 		LV_80_MONSTERS.add(22299); | ||||
| 		LV_80_MONSTERS.add(22300); | ||||
| 		LV_80_MONSTERS.add(22301); | ||||
| 	} | ||||
| 	// Skills | ||||
| 	private static final SkillHolder[] SKILLS = | ||||
| 	{ | ||||
| 		new SkillHolder(48197, 1), // (Lv. 1) Pet Growth Effect | ||||
| 		new SkillHolder(48198, 1) // (Lv. 1) Improved Pet Skills | ||||
| 	}; | ||||
| 	// Items | ||||
| 	private static final int TAG_PET_BOX = 94634; | ||||
| 	private static final int LOW_PET_XP_CRYSTAL = 94635; | ||||
| 	// Misc | ||||
| 	private static final long DESPAWN_TIME = 2 * 60 * 1000; // 2 minutes | ||||
| 	 | ||||
| 	private BeeHive() | ||||
| 	{ | ||||
| 		addKillId(LV_70_MONSTERS); | ||||
| 		addKillId(LV_80_MONSTERS); | ||||
| 		addKillId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 		addAttackId(PET_70_MONSTER, PET_80_MONSTER); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon) | ||||
| 	{ | ||||
| 		if (!isSummon) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		final Pet pet = attacker.getPet(); | ||||
| 		if ((pet.getCurrentFed() == 0) || pet.isDead() || pet.isAffectedBySkill(SKILLS[0]) || pet.isAffectedBySkill(SKILLS[1])) | ||||
| 		{ | ||||
| 			return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 		} | ||||
| 		 | ||||
| 		if ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER)) | ||||
| 		{ | ||||
| 			pet.doCast(getRandomEntry(SKILLS).getSkill()); | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onAttack(npc, attacker, damage, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String onKill(Npc npc, Player killer, boolean isSummon) | ||||
| 	{ | ||||
| 		if (killer.hasPet() && ((npc.getId() == PET_70_MONSTER) || (npc.getId() == PET_80_MONSTER))) | ||||
| 		{ | ||||
| 			if (getRandom(1000) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", LOW_PET_XP_CRYSTAL, 1, killer, true); | ||||
| 			} | ||||
| 			else if (getRandom(100) < 1) | ||||
| 			{ | ||||
| 				killer.addItem("Bee hive special monster", TAG_PET_BOX, 1, killer, true); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (getRandomBoolean()) | ||||
| 		{ | ||||
| 			// Check if already spawned. | ||||
| 			for (Monster monster : World.getInstance().getVisibleObjects(killer, Monster.class)) | ||||
| 			{ | ||||
| 				if (monster.getScriptValue() == killer.getObjectId()) | ||||
| 				{ | ||||
| 					return super.onKill(npc, killer, isSummon); | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			final boolean isLow = LV_70_MONSTERS.contains(npc.getId()); | ||||
| 			if (isLow || LV_80_MONSTERS.contains(npc.getId())) | ||||
| 			{ | ||||
| 				final Npc spawn; | ||||
| 				if (killer.hasPet()) | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PET_70_MONSTER : PET_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					spawn = addSpawn(isLow ? PLAYER_70_MONSTER : PLAYER_80_MONSTER, npc.getLocation(), false, DESPAWN_TIME); | ||||
| 				} | ||||
| 				spawn.setScriptValue(killer.getObjectId()); | ||||
| 				spawn.setShowSummonAnimation(true); | ||||
| 				addAttackPlayerDesire(spawn, killer.hasPet() ? killer.getPet() : killer); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return super.onKill(npc, killer, isSummon); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void main(String[] args) | ||||
| 	{ | ||||
| 		new BeeHive(); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 MobiusDevelopment
					MobiusDevelopment