From d53e842a0a8ea5ab99d4298f791c1524cc69efd9 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 6 Aug 2022 12:23:49 +0000 Subject: [PATCH] Addition of Bee Hive AI. Contributed by Index. --- .../scripts/ai/areas/BeeHive/BeeHive.java | 149 ++++++++++++++++++ .../scripts/ai/areas/BeeHive/BeeHive.java | 149 ++++++++++++++++++ .../scripts/ai/areas/BeeHive/BeeHive.java | 149 ++++++++++++++++++ .../scripts/ai/areas/BeeHive/BeeHive.java | 149 ++++++++++++++++++ 4 files changed, 596 insertions(+) create mode 100644 L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java create mode 100644 L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java create mode 100644 L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java create mode 100644 L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java new file mode 100644 index 0000000000..8833debe85 --- /dev/null +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java @@ -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 . + */ +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 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 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(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java new file mode 100644 index 0000000000..8833debe85 --- /dev/null +++ b/L2J_Mobius_Essence_5.2_FrostLord/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java @@ -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 . + */ +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 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 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(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java new file mode 100644 index 0000000000..8833debe85 --- /dev/null +++ b/L2J_Mobius_Essence_6.1_BattleChronicle/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java @@ -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 . + */ +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 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 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(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java new file mode 100644 index 0000000000..8833debe85 --- /dev/null +++ b/L2J_Mobius_Essence_6.2_Vanguard/dist/game/data/scripts/ai/areas/BeeHive/BeeHive.java @@ -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 . + */ +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 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 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(); + } +} \ No newline at end of file