Addition of Bee Hive AI.
Contributed by Index.
This commit is contained in:
parent
54723025e1
commit
d53e842a0a
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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user