Orfen AI and grandboss SQL adjustments.

Contributed by nasseka.
This commit is contained in:
MobiusDevelopment 2022-08-12 00:57:38 +00:00
parent 8f163c49f8
commit d7b9cc53de
12 changed files with 48 additions and 720 deletions

View File

@ -13,12 +13,12 @@ CREATE TABLE IF NOT EXISTS `grandboss_data` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT IGNORE INTO `grandboss_data` (`boss_id`,`loc_x`,`loc_y`,`loc_z`,`heading`,`currentHP`,`currentMP`) VALUES
(29001, -21610, 181594, -5734, 0, 229898.48, 667.776), -- Queen Ant
(29001, 93069, 8925, -3904, 0, 229898.48, 667.776), -- Queen Ant
(29006, 17726, 108915, -6480, 0, 622493.58388, 3793.536), -- Core
(29014, 55024, 17368, -5412, 10126, 622493.58388, 3793.536), -- Orfen
(29014, 64418, 29467, -3792, 10126, 622493.58388, 3793.536), -- Orfen
(29020, 116033, 17447, 10107, -25348, 4068372, 39960), -- Baium
(29022, 52207, 217230, -3341, 0, 28531442, 12240), -- Zaken
-- (29028, -105200, -253104, -15264, 0, 62041918, 2248572), -- Valakas
(29068, 185708, 114298, -8221,32768, 62802301, 1998000); -- Antharas
-- (25286, 185080, -12613, -5499, 16550, 556345880, 86847), -- Anakim
-- (25283, 185062, -9605, -5499, 15640, 486021997, 79600), -- Lilith
-- (25286, -6675, 18505, -5488, 16550, 556345880, 86847), -- Anakim
-- (25283, 185059, -9610, -5488, 15640, 486021997, 79600), -- Lilith

View File

@ -16,14 +16,10 @@
*/
package ai.bosses.Orfen;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatSet;
@ -35,8 +31,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.GrandBoss;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
@ -44,17 +38,11 @@ import ai.AbstractNpcAI;
/**
* Orfen's AI
* @author Emperorc
* @author Emperorc, NasSeKa
*/
public class Orfen extends AbstractNpcAI
{
private static final Location[] POS =
{
new Location(43728, 17220, -4342),
new Location(55024, 17368, -5412),
new Location(53504, 21248, -5486),
new Location(53248, 24576, -5262)
};
private static final Location POS = new Location(64418, 29467, -3792);
private static final NpcStringId[] TEXT =
{
@ -65,33 +53,15 @@ public class Orfen extends AbstractNpcAI
};
private static final int ORFEN = 29014;
// private static final int RAIKEL = 29015;
private static final int RAIKEL_LEOS = 29016;
// private static final int RIBA = 29017;
private static final int RIBA_IREN = 29018;
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1);
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private static boolean _isTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType _zone;
private Orfen()
{
final int[] mobs =
{
ORFEN,
RAIKEL_LEOS,
RIBA_IREN
};
registerMobs(mobs);
_isTeleported = false;
_zone = ZoneManager.getInstance().getZoneById(12013);
registerMobs(ORFEN);
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
final int status = GrandBossManager.getInstance().getStatus(ORFEN);
if (status == DEAD)
@ -107,21 +77,7 @@ public class Orfen extends AbstractNpcAI
else
{
// the time has already expired while the server was offline. Immediately spawn Orfen.
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
@ -145,8 +101,8 @@ public class Orfen extends AbstractNpcAI
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
final Spawn spawn = npc.getSpawn();
spawn.setLocation(POS[index]);
npc.teleToLocation(POS[index], false);
spawn.setLocation(POS);
npc.teleToLocation(POS, false);
}
public void spawnBoss(GrandBoss npc)
@ -154,23 +110,6 @@ public class Orfen extends AbstractNpcAI
GrandBossManager.getInstance().addBoss(npc);
npc.broadcastPacket(new PlaySound(1, "BS01_A", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
startQuestTimer("check_orfen_pos", 10000, npc, null, true);
// Spawn minions
final int x = npc.getX();
final int y = npc.getY();
Attackable mob;
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
startQuestTimer("check_minion_loc", 10000, npc, null, true);
}
@Override
@ -178,62 +117,10 @@ public class Orfen extends AbstractNpcAI
{
if (event.equalsIgnoreCase("orfen_unlock"))
{
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
else if (event.equalsIgnoreCase("check_orfen_pos"))
{
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
{
setSpawnPoint(npc, getRandom(3) + 1);
_isTeleported = false;
}
else if (_isTeleported && !_zone.isInsideZone(npc))
{
setSpawnPoint(npc, 0);
}
}
else if (event.equalsIgnoreCase("check_minion_loc"))
{
for (Attackable mob : _minions)
{
if (!npc.isInsideRadius2D(mob, 3000))
{
mob.teleToLocation(npc.getLocation());
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
}
}
}
else if (event.equalsIgnoreCase("despawn_minions"))
{
for (Attackable mob : _minions)
{
mob.decayMe();
}
_minions.clear();
}
else if (event.equalsIgnoreCase("spawn_minion"))
{
final Attackable mob = (Attackable) addSpawn(RAIKEL_LEOS, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
}
return super.onAdvEvent(event, npc, player);
}
@ -254,49 +141,13 @@ public class Orfen extends AbstractNpcAI
return super.onSkillSee(npc, caster, skill, targets, isSummon);
}
@Override
public String onFactionCall(Npc npc, Npc caller, Player attacker, boolean isSummon)
{
if ((caller == null) || (npc == null) || npc.isCastingNow(SkillCaster::isAnyNormalType))
{
return super.onFactionCall(npc, caller, attacker, isSummon);
}
final int npcId = npc.getId();
final int callerId = caller.getId();
if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0))
{
npc.setTarget(attacker);
npc.doCast(BLOW.getSkill());
}
else if (npcId == RIBA_IREN)
{
int chance = 1;
if (callerId == ORFEN)
{
chance = 9;
}
if ((callerId != RIBA_IREN) && (caller.getCurrentHp() < (caller.getMaxHp() / 2.0)) && (getRandom(10) < chance))
{
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
npc.setTarget(caller);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onFactionCall(npc, caller, attacker, isSummon);
}
@Override
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
{
final int npcId = npc.getId();
if (npcId == ORFEN)
{
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 4)))
{
_isTeleported = true;
setSpawnPoint(npc, 0);
}
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
{
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName());
attacker.teleToLocation(npc.getLocation());
@ -304,14 +155,6 @@ public class Orfen extends AbstractNpcAI
npc.doCast(PARALYSIS.getSkill());
}
}
else if (npcId == RIBA_IREN)
{
if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0)))
{
npc.setTarget(attacker);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@ -330,15 +173,7 @@ public class Orfen extends AbstractNpcAI
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatSet(ORFEN, info);
cancelQuestTimer("check_minion_loc", npc, null);
cancelQuestTimer("check_orfen_pos", npc, null);
startQuestTimer("despawn_minions", 20000, null, null);
cancelQuestTimers("spawn_minion");
}
else if ((GrandBossManager.getInstance().getStatus(ORFEN) == ALIVE) && (npc.getId() == RAIKEL_LEOS))
{
_minions.remove(npc);
startQuestTimer("spawn_minion", 360000, npc, null);
}
return super.onKill(npc, killer, isSummon);
}

View File

@ -760,9 +760,6 @@
<param name="MoveAroundSocial" value="80" />
<param name="MoveAroundSocial1" value="80" />
<param name="MoveAroundSocial2" value="80" />
<minions name="Privates">
<npc id="29016" count="4" respawnTime="360" weightPoint="1" />
</minions>
</parameters>
<race>FAIRY</race>
<sex>FEMALE</sex>

View File

@ -13,12 +13,12 @@ CREATE TABLE IF NOT EXISTS `grandboss_data` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT IGNORE INTO `grandboss_data` (`boss_id`,`loc_x`,`loc_y`,`loc_z`,`heading`,`currentHP`,`currentMP`) VALUES
(29001, -21610, 181594, -5734, 0, 229898.48, 667.776), -- Queen Ant
(29001, 93069, 8925, -3904, 0, 229898.48, 667.776), -- Queen Ant
(29006, 17726, 108915, -6480, 0, 622493.58388, 3793.536), -- Core
(29014, 55024, 17368, -5412, 10126, 622493.58388, 3793.536), -- Orfen
(29014, 64418, 29467, -3792, 10126, 622493.58388, 3793.536), -- Orfen
(29020, 116033, 17447, 10107, -25348, 4068372, 39960), -- Baium
(29022, 52207, 217230, -3341, 0, 28531442, 12240), -- Zaken
-- (29028, -105200, -253104, -15264, 0, 62041918, 2248572), -- Valakas
(29068, 185708, 114298, -8221,32768, 62802301, 1998000); -- Antharas
-- (25286, 185080, -12613, -5499, 16550, 556345880, 86847), -- Anakim
-- (25283, 185062, -9605, -5499, 15640, 486021997, 79600), -- Lilith
-- (25286, -6675, 18505, -5488, 16550, 556345880, 86847), -- Anakim
-- (25283, 185059, -9610, -5488, 15640, 486021997, 79600), -- Lilith

View File

@ -16,14 +16,10 @@
*/
package ai.bosses.Orfen;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatSet;
@ -35,8 +31,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.GrandBoss;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
@ -44,17 +38,11 @@ import ai.AbstractNpcAI;
/**
* Orfen's AI
* @author Emperorc
* @author Emperorc, NasSeKa
*/
public class Orfen extends AbstractNpcAI
{
private static final Location[] POS =
{
new Location(43728, 17220, -4342),
new Location(55024, 17368, -5412),
new Location(53504, 21248, -5486),
new Location(53248, 24576, -5262)
};
private static final Location POS = new Location(64418, 29467, -3792);
private static final NpcStringId[] TEXT =
{
@ -65,33 +53,15 @@ public class Orfen extends AbstractNpcAI
};
private static final int ORFEN = 29014;
// private static final int RAIKEL = 29015;
private static final int RAIKEL_LEOS = 29016;
// private static final int RIBA = 29017;
private static final int RIBA_IREN = 29018;
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1);
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private static boolean _isTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType _zone;
private Orfen()
{
final int[] mobs =
{
ORFEN,
RAIKEL_LEOS,
RIBA_IREN
};
registerMobs(mobs);
_isTeleported = false;
_zone = ZoneManager.getInstance().getZoneById(12013);
registerMobs(ORFEN);
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
final int status = GrandBossManager.getInstance().getStatus(ORFEN);
if (status == DEAD)
@ -107,21 +77,7 @@ public class Orfen extends AbstractNpcAI
else
{
// the time has already expired while the server was offline. Immediately spawn Orfen.
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
@ -145,8 +101,8 @@ public class Orfen extends AbstractNpcAI
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
final Spawn spawn = npc.getSpawn();
spawn.setLocation(POS[index]);
npc.teleToLocation(POS[index], false);
spawn.setLocation(POS);
npc.teleToLocation(POS, false);
}
public void spawnBoss(GrandBoss npc)
@ -154,23 +110,6 @@ public class Orfen extends AbstractNpcAI
GrandBossManager.getInstance().addBoss(npc);
npc.broadcastPacket(new PlaySound(1, "BS01_A", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
startQuestTimer("check_orfen_pos", 10000, npc, null, true);
// Spawn minions
final int x = npc.getX();
final int y = npc.getY();
Attackable mob;
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
startQuestTimer("check_minion_loc", 10000, npc, null, true);
}
@Override
@ -178,62 +117,10 @@ public class Orfen extends AbstractNpcAI
{
if (event.equalsIgnoreCase("orfen_unlock"))
{
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
else if (event.equalsIgnoreCase("check_orfen_pos"))
{
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
{
setSpawnPoint(npc, getRandom(3) + 1);
_isTeleported = false;
}
else if (_isTeleported && !_zone.isInsideZone(npc))
{
setSpawnPoint(npc, 0);
}
}
else if (event.equalsIgnoreCase("check_minion_loc"))
{
for (Attackable mob : _minions)
{
if (!npc.isInsideRadius2D(mob, 3000))
{
mob.teleToLocation(npc.getLocation());
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
}
}
}
else if (event.equalsIgnoreCase("despawn_minions"))
{
for (Attackable mob : _minions)
{
mob.decayMe();
}
_minions.clear();
}
else if (event.equalsIgnoreCase("spawn_minion"))
{
final Attackable mob = (Attackable) addSpawn(RAIKEL_LEOS, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
}
return super.onAdvEvent(event, npc, player);
}
@ -254,49 +141,13 @@ public class Orfen extends AbstractNpcAI
return super.onSkillSee(npc, caster, skill, targets, isSummon);
}
@Override
public String onFactionCall(Npc npc, Npc caller, Player attacker, boolean isSummon)
{
if ((caller == null) || (npc == null) || npc.isCastingNow(SkillCaster::isAnyNormalType))
{
return super.onFactionCall(npc, caller, attacker, isSummon);
}
final int npcId = npc.getId();
final int callerId = caller.getId();
if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0))
{
npc.setTarget(attacker);
npc.doCast(BLOW.getSkill());
}
else if (npcId == RIBA_IREN)
{
int chance = 1;
if (callerId == ORFEN)
{
chance = 9;
}
if ((callerId != RIBA_IREN) && (caller.getCurrentHp() < (caller.getMaxHp() / 2.0)) && (getRandom(10) < chance))
{
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
npc.setTarget(caller);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onFactionCall(npc, caller, attacker, isSummon);
}
@Override
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
{
final int npcId = npc.getId();
if (npcId == ORFEN)
{
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 4)))
{
_isTeleported = true;
setSpawnPoint(npc, 0);
}
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
{
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName());
attacker.teleToLocation(npc.getLocation());
@ -304,14 +155,6 @@ public class Orfen extends AbstractNpcAI
npc.doCast(PARALYSIS.getSkill());
}
}
else if (npcId == RIBA_IREN)
{
if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0)))
{
npc.setTarget(attacker);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@ -330,15 +173,7 @@ public class Orfen extends AbstractNpcAI
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatSet(ORFEN, info);
cancelQuestTimer("check_minion_loc", npc, null);
cancelQuestTimer("check_orfen_pos", npc, null);
startQuestTimer("despawn_minions", 20000, null, null);
cancelQuestTimers("spawn_minion");
}
else if ((GrandBossManager.getInstance().getStatus(ORFEN) == ALIVE) && (npc.getId() == RAIKEL_LEOS))
{
_minions.remove(npc);
startQuestTimer("spawn_minion", 360000, npc, null);
}
return super.onKill(npc, killer, isSummon);
}

View File

@ -763,9 +763,6 @@
<param name="MoveAroundSocial" value="80" />
<param name="MoveAroundSocial1" value="80" />
<param name="MoveAroundSocial2" value="80" />
<minions name="Privates">
<npc id="29016" count="4" respawnTime="360" weightPoint="1" />
</minions>
</parameters>
<race>FAIRY</race>
<sex>FEMALE</sex>

View File

@ -13,12 +13,12 @@ CREATE TABLE IF NOT EXISTS `grandboss_data` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT IGNORE INTO `grandboss_data` (`boss_id`,`loc_x`,`loc_y`,`loc_z`,`heading`,`currentHP`,`currentMP`) VALUES
(29001, -21610, 181594, -5734, 0, 229898.48, 667.776), -- Queen Ant
(29001, 93069, 8925, -3904, 0, 229898.48, 667.776), -- Queen Ant
(29006, 17726, 108915, -6480, 0, 622493.58388, 3793.536), -- Core
(29014, 55024, 17368, -5412, 10126, 622493.58388, 3793.536), -- Orfen
(29014, 64418, 29467, -3792, 10126, 622493.58388, 3793.536), -- Orfen
(29020, 116033, 17447, 10107, -25348, 4068372, 39960), -- Baium
(29022, 52207, 217230, -3341, 0, 28531442, 12240), -- Zaken
-- (29028, -105200, -253104, -15264, 0, 62041918, 2248572), -- Valakas
(29068, 185708, 114298, -8221,32768, 62802301, 1998000); -- Antharas
-- (25286, 185080, -12613, -5499, 16550, 556345880, 86847), -- Anakim
-- (25283, 185062, -9605, -5499, 15640, 486021997, 79600), -- Lilith
-- (25286, -6675, 18505, -5488, 16550, 556345880, 86847), -- Anakim
-- (25283, 185059, -9610, -5488, 15640, 486021997, 79600), -- Lilith

View File

@ -16,14 +16,10 @@
*/
package ai.bosses.Orfen;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatSet;
@ -35,8 +31,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.GrandBoss;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
@ -44,17 +38,11 @@ import ai.AbstractNpcAI;
/**
* Orfen's AI
* @author Emperorc
* @author Emperorc, NasSeKa
*/
public class Orfen extends AbstractNpcAI
{
private static final Location[] POS =
{
new Location(43728, 17220, -4342),
new Location(55024, 17368, -5412),
new Location(53504, 21248, -5486),
new Location(53248, 24576, -5262)
};
private static final Location POS = new Location(64418, 29467, -3792);
private static final NpcStringId[] TEXT =
{
@ -65,33 +53,15 @@ public class Orfen extends AbstractNpcAI
};
private static final int ORFEN = 29014;
// private static final int RAIKEL = 29015;
private static final int RAIKEL_LEOS = 29016;
// private static final int RIBA = 29017;
private static final int RIBA_IREN = 29018;
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1);
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private static boolean _isTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType _zone;
private Orfen()
{
final int[] mobs =
{
ORFEN,
RAIKEL_LEOS,
RIBA_IREN
};
registerMobs(mobs);
_isTeleported = false;
_zone = ZoneManager.getInstance().getZoneById(12013);
registerMobs(ORFEN);
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
final int status = GrandBossManager.getInstance().getStatus(ORFEN);
if (status == DEAD)
@ -107,21 +77,7 @@ public class Orfen extends AbstractNpcAI
else
{
// the time has already expired while the server was offline. Immediately spawn Orfen.
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
@ -145,8 +101,8 @@ public class Orfen extends AbstractNpcAI
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
final Spawn spawn = npc.getSpawn();
spawn.setLocation(POS[index]);
npc.teleToLocation(POS[index], false);
spawn.setLocation(POS);
npc.teleToLocation(POS, false);
}
public void spawnBoss(GrandBoss npc)
@ -154,23 +110,6 @@ public class Orfen extends AbstractNpcAI
GrandBossManager.getInstance().addBoss(npc);
npc.broadcastPacket(new PlaySound(1, "BS01_A", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
startQuestTimer("check_orfen_pos", 10000, npc, null, true);
// Spawn minions
final int x = npc.getX();
final int y = npc.getY();
Attackable mob;
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
startQuestTimer("check_minion_loc", 10000, npc, null, true);
}
@Override
@ -178,62 +117,10 @@ public class Orfen extends AbstractNpcAI
{
if (event.equalsIgnoreCase("orfen_unlock"))
{
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
else if (event.equalsIgnoreCase("check_orfen_pos"))
{
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
{
setSpawnPoint(npc, getRandom(3) + 1);
_isTeleported = false;
}
else if (_isTeleported && !_zone.isInsideZone(npc))
{
setSpawnPoint(npc, 0);
}
}
else if (event.equalsIgnoreCase("check_minion_loc"))
{
for (Attackable mob : _minions)
{
if (!npc.isInsideRadius2D(mob, 3000))
{
mob.teleToLocation(npc.getLocation());
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
}
}
}
else if (event.equalsIgnoreCase("despawn_minions"))
{
for (Attackable mob : _minions)
{
mob.decayMe();
}
_minions.clear();
}
else if (event.equalsIgnoreCase("spawn_minion"))
{
final Attackable mob = (Attackable) addSpawn(RAIKEL_LEOS, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
}
return super.onAdvEvent(event, npc, player);
}
@ -254,49 +141,13 @@ public class Orfen extends AbstractNpcAI
return super.onSkillSee(npc, caster, skill, targets, isSummon);
}
@Override
public String onFactionCall(Npc npc, Npc caller, Player attacker, boolean isSummon)
{
if ((caller == null) || (npc == null) || npc.isCastingNow(SkillCaster::isAnyNormalType))
{
return super.onFactionCall(npc, caller, attacker, isSummon);
}
final int npcId = npc.getId();
final int callerId = caller.getId();
if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0))
{
npc.setTarget(attacker);
npc.doCast(BLOW.getSkill());
}
else if (npcId == RIBA_IREN)
{
int chance = 1;
if (callerId == ORFEN)
{
chance = 9;
}
if ((callerId != RIBA_IREN) && (caller.getCurrentHp() < (caller.getMaxHp() / 2.0)) && (getRandom(10) < chance))
{
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
npc.setTarget(caller);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onFactionCall(npc, caller, attacker, isSummon);
}
@Override
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
{
final int npcId = npc.getId();
if (npcId == ORFEN)
{
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 4)))
{
_isTeleported = true;
setSpawnPoint(npc, 0);
}
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
{
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName());
attacker.teleToLocation(npc.getLocation());
@ -304,14 +155,6 @@ public class Orfen extends AbstractNpcAI
npc.doCast(PARALYSIS.getSkill());
}
}
else if (npcId == RIBA_IREN)
{
if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0)))
{
npc.setTarget(attacker);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@ -330,15 +173,7 @@ public class Orfen extends AbstractNpcAI
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatSet(ORFEN, info);
cancelQuestTimer("check_minion_loc", npc, null);
cancelQuestTimer("check_orfen_pos", npc, null);
startQuestTimer("despawn_minions", 20000, null, null);
cancelQuestTimers("spawn_minion");
}
else if ((GrandBossManager.getInstance().getStatus(ORFEN) == ALIVE) && (npc.getId() == RAIKEL_LEOS))
{
_minions.remove(npc);
startQuestTimer("spawn_minion", 360000, npc, null);
}
return super.onKill(npc, killer, isSummon);
}

View File

@ -763,9 +763,6 @@
<param name="MoveAroundSocial" value="80" />
<param name="MoveAroundSocial1" value="80" />
<param name="MoveAroundSocial2" value="80" />
<minions name="Privates">
<npc id="29016" count="4" respawnTime="360" weightPoint="1" />
</minions>
</parameters>
<race>FAIRY</race>
<sex>FEMALE</sex>

View File

@ -13,12 +13,12 @@ CREATE TABLE IF NOT EXISTS `grandboss_data` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
INSERT IGNORE INTO `grandboss_data` (`boss_id`,`loc_x`,`loc_y`,`loc_z`,`heading`,`currentHP`,`currentMP`) VALUES
(29001, -21610, 181594, -5734, 0, 229898.48, 667.776), -- Queen Ant
(29001, 93069, 8925, -3904, 0, 229898.48, 667.776), -- Queen Ant
(29006, 17726, 108915, -6480, 0, 622493.58388, 3793.536), -- Core
(29014, 55024, 17368, -5412, 10126, 622493.58388, 3793.536), -- Orfen
(29014, 64418, 29467, -3792, 10126, 622493.58388, 3793.536), -- Orfen
(29020, 116033, 17447, 10107, -25348, 4068372, 39960), -- Baium
(29022, 52207, 217230, -3341, 0, 28531442, 12240), -- Zaken
-- (29028, -105200, -253104, -15264, 0, 62041918, 2248572), -- Valakas
(29068, 185708, 114298, -8221,32768, 62802301, 1998000); -- Antharas
-- (25286, 185080, -12613, -5499, 16550, 556345880, 86847), -- Anakim
-- (25283, 185062, -9605, -5499, 15640, 486021997, 79600), -- Lilith
-- (25286, -6675, 18505, -5488, 16550, 556345880, 86847), -- Anakim
-- (25283, 185059, -9610, -5488, 15640, 486021997, 79600), -- Lilith

View File

@ -16,14 +16,10 @@
*/
package ai.bosses.Orfen;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.StatSet;
@ -35,8 +31,6 @@ import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.GrandBoss;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
@ -44,17 +38,11 @@ import ai.AbstractNpcAI;
/**
* Orfen's AI
* @author Emperorc
* @author Emperorc, NasSeKa
*/
public class Orfen extends AbstractNpcAI
{
private static final Location[] POS =
{
new Location(43728, 17220, -4342),
new Location(55024, 17368, -5412),
new Location(53504, 21248, -5486),
new Location(53248, 24576, -5262)
};
private static final Location POS = new Location(64418, 29467, -3792);
private static final NpcStringId[] TEXT =
{
@ -65,33 +53,15 @@ public class Orfen extends AbstractNpcAI
};
private static final int ORFEN = 29014;
// private static final int RAIKEL = 29015;
private static final int RAIKEL_LEOS = 29016;
// private static final int RIBA = 29017;
private static final int RIBA_IREN = 29018;
private static final byte ALIVE = 0;
private static final byte DEAD = 1;
private static final SkillHolder PARALYSIS = new SkillHolder(4064, 1);
private static final SkillHolder BLOW = new SkillHolder(4067, 4);
private static final SkillHolder ORFEN_HEAL = new SkillHolder(4516, 1);
private static boolean _isTeleported;
private static Set<Attackable> _minions = ConcurrentHashMap.newKeySet();
private static ZoneType _zone;
private Orfen()
{
final int[] mobs =
{
ORFEN,
RAIKEL_LEOS,
RIBA_IREN
};
registerMobs(mobs);
_isTeleported = false;
_zone = ZoneManager.getInstance().getZoneById(12013);
registerMobs(ORFEN);
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
final int status = GrandBossManager.getInstance().getStatus(ORFEN);
if (status == DEAD)
@ -107,21 +77,7 @@ public class Orfen extends AbstractNpcAI
else
{
// the time has already expired while the server was offline. Immediately spawn Orfen.
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
@ -145,8 +101,8 @@ public class Orfen extends AbstractNpcAI
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
final Spawn spawn = npc.getSpawn();
spawn.setLocation(POS[index]);
npc.teleToLocation(POS[index], false);
spawn.setLocation(POS);
npc.teleToLocation(POS, false);
}
public void spawnBoss(GrandBoss npc)
@ -154,23 +110,6 @@ public class Orfen extends AbstractNpcAI
GrandBossManager.getInstance().addBoss(npc);
npc.broadcastPacket(new PlaySound(1, "BS01_A", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
startQuestTimer("check_orfen_pos", 10000, npc, null, true);
// Spawn minions
final int x = npc.getX();
final int y = npc.getY();
Attackable mob;
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x + 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y + 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
mob = (Attackable) addSpawn(RAIKEL_LEOS, x - 100, y - 100, npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
startQuestTimer("check_minion_loc", 10000, npc, null, true);
}
@Override
@ -178,62 +117,10 @@ public class Orfen extends AbstractNpcAI
{
if (event.equalsIgnoreCase("orfen_unlock"))
{
final int i = getRandom(10);
Location loc;
if (i < 4)
{
loc = POS[1];
}
else if (i < 7)
{
loc = POS[2];
}
else
{
loc = POS[3];
}
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, loc, false, 0);
final GrandBoss orfen = (GrandBoss) addSpawn(ORFEN, POS, false, 0);
GrandBossManager.getInstance().setStatus(ORFEN, ALIVE);
spawnBoss(orfen);
}
else if (event.equalsIgnoreCase("check_orfen_pos"))
{
if ((_isTeleported && (npc.getCurrentHp() > (npc.getMaxHp() * 0.95))) || (!_zone.isInsideZone(npc) && !_isTeleported))
{
setSpawnPoint(npc, getRandom(3) + 1);
_isTeleported = false;
}
else if (_isTeleported && !_zone.isInsideZone(npc))
{
setSpawnPoint(npc, 0);
}
}
else if (event.equalsIgnoreCase("check_minion_loc"))
{
for (Attackable mob : _minions)
{
if (!npc.isInsideRadius2D(mob, 3000))
{
mob.teleToLocation(npc.getLocation());
((Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
}
}
}
else if (event.equalsIgnoreCase("despawn_minions"))
{
for (Attackable mob : _minions)
{
mob.decayMe();
}
_minions.clear();
}
else if (event.equalsIgnoreCase("spawn_minion"))
{
final Attackable mob = (Attackable) addSpawn(RAIKEL_LEOS, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0);
mob.setIsRaidMinion(true);
_minions.add(mob);
}
return super.onAdvEvent(event, npc, player);
}
@ -254,49 +141,13 @@ public class Orfen extends AbstractNpcAI
return super.onSkillSee(npc, caster, skill, targets, isSummon);
}
@Override
public String onFactionCall(Npc npc, Npc caller, Player attacker, boolean isSummon)
{
if ((caller == null) || (npc == null) || npc.isCastingNow(SkillCaster::isAnyNormalType))
{
return super.onFactionCall(npc, caller, attacker, isSummon);
}
final int npcId = npc.getId();
final int callerId = caller.getId();
if ((npcId == RAIKEL_LEOS) && (getRandom(20) == 0))
{
npc.setTarget(attacker);
npc.doCast(BLOW.getSkill());
}
else if (npcId == RIBA_IREN)
{
int chance = 1;
if (callerId == ORFEN)
{
chance = 9;
}
if ((callerId != RIBA_IREN) && (caller.getCurrentHp() < (caller.getMaxHp() / 2.0)) && (getRandom(10) < chance))
{
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null, null);
npc.setTarget(caller);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onFactionCall(npc, caller, attacker, isSummon);
}
@Override
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon)
{
final int npcId = npc.getId();
if (npcId == ORFEN)
{
if (!_isTeleported && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 4)))
{
_isTeleported = true;
setSpawnPoint(npc, 0);
}
else if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
if (npc.isInsideRadius2D(attacker, 1000) && !npc.isInsideRadius2D(attacker, 300) && (getRandom(10) == 0))
{
npc.broadcastSay(ChatType.NPC_GENERAL, TEXT[getRandom(3)], attacker.getName());
attacker.teleToLocation(npc.getLocation());
@ -304,14 +155,6 @@ public class Orfen extends AbstractNpcAI
npc.doCast(PARALYSIS.getSkill());
}
}
else if (npcId == RIBA_IREN)
{
if (!npc.isCastingNow(SkillCaster::isAnyNormalType) && ((npc.getCurrentHp() - damage) < (npc.getMaxHp() / 2.0)))
{
npc.setTarget(attacker);
npc.doCast(ORFEN_HEAL.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@ -330,15 +173,7 @@ public class Orfen extends AbstractNpcAI
final StatSet info = GrandBossManager.getInstance().getStatSet(ORFEN);
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatSet(ORFEN, info);
cancelQuestTimer("check_minion_loc", npc, null);
cancelQuestTimer("check_orfen_pos", npc, null);
startQuestTimer("despawn_minions", 20000, null, null);
cancelQuestTimers("spawn_minion");
}
else if ((GrandBossManager.getInstance().getStatus(ORFEN) == ALIVE) && (npc.getId() == RAIKEL_LEOS))
{
_minions.remove(npc);
startQuestTimer("spawn_minion", 360000, npc, null);
}
return super.onKill(npc, killer, isSummon);
}

View File

@ -763,9 +763,6 @@
<param name="MoveAroundSocial" value="80" />
<param name="MoveAroundSocial1" value="80" />
<param name="MoveAroundSocial2" value="80" />
<minions name="Privates">
<npc id="29016" count="4" respawnTime="360" weightPoint="1" />
</minions>
</parameters>
<race>FAIRY</race>
<sex>FEMALE</sex>