Skip to content
Snippets Groups Projects
Commit f09de1e1 authored by Maneco2's avatar Maneco2
Browse files

Rework Queen Ant AI

Queen Ant has chance defend clan inside the zone Match retail.
Queen Ant will not attack players outside the zone with normal attacks.
Queen Ant movement based in zone match retail.
Add respawn in Admin Panel
Fixes #301
parent 80935eef
No related branches found
No related tags found
No related merge requests found
......@@ -19,34 +19,38 @@
package com.l2jserver.datapack.ai.individual;
import static com.l2jserver.gameserver.config.Configuration.grandBoss;
import static com.l2jserver.gameserver.config.Configuration.npc;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import com.l2jserver.datapack.ai.npc.AbstractNpcAI;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.enums.MountType;
import com.l2jserver.gameserver.enums.audio.Music;
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.model.StatsSet;
import com.l2jserver.gameserver.model.actor.L2Attackable;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.L2Playable;
import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance;
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.holders.SkillHolder;
import com.l2jserver.gameserver.model.skills.CommonSkill;
import com.l2jserver.gameserver.model.skills.AttributeType;
import com.l2jserver.gameserver.model.skills.Skill;
import com.l2jserver.gameserver.model.zone.L2ZoneType;
import com.l2jserver.gameserver.model.zone.type.L2BossZone;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
/**
* Queen Ant's AI
* Queen Ant AI
* @author Emperorc
* @author Maneco2
*/
public final class QueenAnt extends AbstractNpcAI {
// NPCs
private static final int QUEEN = 29001;
private static final int LARVA = 29002;
private static final int NURSE = 29003;
......@@ -61,57 +65,62 @@ public final class QueenAnt extends AbstractNpcAI {
ROYAL
};
private static final Location OUST_LOC_1 = new Location(-19480, 187344, -5600);
private static final Location OUST_LOC_2 = new Location(-17928, 180912, -5520);
private static final Location OUST_LOC_3 = new Location(-23808, 182368, -5600);
// Queen Ant Location
private static final int QUEEN_X = -21610;
private static final int QUEEN_Y = 181594;
private static final int QUEEN_Z = -5734;
// QUEEN Status Tracking :
private static final byte ALIVE = 0; // Queen Ant is spawned.
private static final byte DEAD = 1; // Queen Ant has been killed.
// Larva Location
private static final Location LARVA_LOCATION = new Location(-21600, 179482, -5846, getRandom(360));
// Zones
private static final int ZONE = 12012;
private static final Location TELE_LOCATION_1 = new Location(-19480, 187344, -5600);
private static final Location TELE_LOCATION_2 = new Location(-17928, 180912, -5520);
private static final Location TELE_LOCATION_3 = new Location(-23808, 182368, -5600);
// Skills
private static final SkillHolder RAID_CURSE = new SkillHolder(4215); // Raid Curse - Silence
private static final SkillHolder RAID_CURSE_2 = new SkillHolder(4515); // Raid Curse - Stone
private static final SkillHolder QUEEN_ANT_BRANDISH = new SkillHolder(4017); // Queen Ant Brandish
private static final SkillHolder DECREASE_SPEED_1 = new SkillHolder(4018); // Decrease Speed
private static final SkillHolder DECREASE_SPEED_2 = new SkillHolder(4019); // Decrease Speed
private static final SkillHolder HEAL_QUEEN_ANT_1 = new SkillHolder(4020); // Heal Queen Ant1
private static final SkillHolder HEAL_QUEEN_ANT_2 = new SkillHolder(4024); // Heal Queen Ant2
private static final SkillHolder ANTI_STRIDER = new SkillHolder(4258); // Hinder Strider
// Variables
private static L2BossZone _zone;
private static SkillHolder HEAL1 = new SkillHolder(4020, 1);
private static SkillHolder HEAL2 = new SkillHolder(4024, 1);
private static final String ATTACK_FLAG = "ATTACK_FLAG";
private L2MonsterInstance _queen = null;
private L2MonsterInstance _larva = null;
private final List<L2MonsterInstance> _nurses = new CopyOnWriteArrayList<>();
// Status
private static final int ALIVE = 0;
private static final int DEAD = 1;
public QueenAnt() {
super(QueenAnt.class.getSimpleName(), "ai/individual");
addSpawnId(MOBS);
addKillId(MOBS);
addAggroRangeEnterId(MOBS);
addFactionCallId(NURSE);
addSpawnId(MOBS);
addExitZoneId(ZONE);
addEnterZoneId(ZONE);
addSkillSeeId(QUEEN);
addMoveFinishedId(QUEEN);
addAttackId(QUEEN, NURSE, GUARD, ROYAL);
_zone = GrandBossManager.getInstance().getZone(QUEEN_X, QUEEN_Y, QUEEN_Z);
StatsSet info = GrandBossManager.getInstance().getStatsSet(QUEEN);
int status = GrandBossManager.getInstance().getBossStatus(QUEEN);
if (status == DEAD) {
// load the unlock date and time for queen ant from DB
long temp = info.getLong("respawn_time") - System.currentTimeMillis();
// if queen ant is locked until a certain time, mark it so and start the unlock timer
// the unlock time has not yet expired.
if (temp > 0) {
startQuestTimer("queen_unlock", temp, null, null);
final StatsSet info = GrandBossManager.getInstance().getStatsSet(QUEEN);
if (GrandBossManager.getInstance().getBossStatus(QUEEN) == DEAD) {
final long remain = info.getLong("respawn_time") - System.currentTimeMillis();
if (remain > 0) {
startQuestTimer("QUEEN_UNLOCK", remain, null, null);
} else {
// the time has already expired while the server was offline. Immediately spawn queen ant.
L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, QUEEN_X, QUEEN_Y, QUEEN_Z, 0, false, 0);
GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE);
spawnBoss(queen);
notifyEvent("QUEEN_UNLOCK", null, null);
}
} else {
int hp = info.getInt("currentHP");
int mp = info.getInt("currentMP");
int loc_x = info.getInt("loc_x");
int loc_y = info.getInt("loc_y");
int loc_z = info.getInt("loc_z");
int heading = info.getInt("heading");
int hp = info.getInt("currentHP");
int mp = info.getInt("currentMP");
if (!_zone.isInsideZone(loc_x, loc_y, loc_z)) {
loc_x = QUEEN_X;
loc_y = QUEEN_Y;
......@@ -123,183 +132,246 @@ public final class QueenAnt extends AbstractNpcAI {
}
}
private void spawnBoss(L2GrandBossInstance npc) {
GrandBossManager.getInstance().addBoss(npc);
if (getRandom(100) < 33) {
_zone.movePlayersTo(OUST_LOC_1);
} else if (getRandom(100) < 50) {
_zone.movePlayersTo(OUST_LOC_2);
} else {
_zone.movePlayersTo(OUST_LOC_3);
}
GrandBossManager.getInstance().addBoss(npc);
startQuestTimer("action", 10000, npc, null, true);
startQuestTimer("heal", 1000, null, null, true);
npc.broadcastPacket(Music.BS01_A_10000.getPacket());
_queen = npc;
_larva = (L2MonsterInstance) addSpawn(LARVA, -21600, 179482, -5846, getRandom(360), false, 0);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) {
if (event.equalsIgnoreCase("heal")) {
boolean notCasting;
final boolean larvaNeedHeal = (_larva != null) && (_larva.getCurrentHp() < _larva.getMaxHp());
final boolean queenNeedHeal = (_queen != null) && (_queen.getCurrentHp() < _queen.getMaxHp());
for (L2MonsterInstance nurse : _nurses) {
if ((nurse == null) || nurse.isDead() || nurse.isCastingNow()) {
continue;
switch (event) {
case "CHECK_ZONE": {
if (npc != null) {
addMoveToDesire(npc, new Location(-21610, 181594, -5734, 0), 0);
if (_zone.isInsideZone(npc)) {
cancelQuestTimers("CHECK_ZONE");
}
}
break;
}
case "CORE_AI": {
if ((npc != null) && (npc.isCoreAIDisabled()) && (_zone.isInsideZone(npc))) {
((L2Attackable) npc).clearAggroList();
npc.disableCoreAI(false);
npc.setIsImmobilized(false);
npc.getVariables().set(ATTACK_FLAG, false);
}
notCasting = nurse.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST;
if (larvaNeedHeal) {
if ((nurse.getTarget() != _larva) || notCasting) {
nurse.setTarget(_larva);
nurse.useMagic(getRandomBoolean() ? HEAL1.getSkill() : HEAL2.getSkill());
break;
}
case "CORE_MOVEMENT": {
if (npc != null) {
final L2Object obj = npc.getTarget();
if ((obj != null) && (obj.isPlayer()) && (_zone.isInsideZone(obj))) {
_queen.setIsImmobilized(false);
}
continue;
npc.getVariables().set(ATTACK_FLAG, false);
}
if (queenNeedHeal) {
if (nurse.getLeader() == _larva) {
continue;
break;
}
case "HEAL": {
if ((npc != null) && (!npc.isCastingNow())) {
if ((_larva != null) && (_queen != null)) {
if (_larva.getCurrentHp() < _larva.getMaxHp()) {
if (npc.calculateDistance(_larva, false, false) < 2500) {
addSkillCastDesire(npc, _larva, getRandomBoolean() ? HEAL_QUEEN_ANT_1 : HEAL_QUEEN_ANT_2, 100L);
} else {
addMoveToDesire(npc, LARVA_LOCATION, 0);
}
} else if (_queen.getCurrentHp() < _queen.getMaxHp()) {
addSkillCastDesire(npc, _queen, HEAL_QUEEN_ANT_1, 1000000L);
}
}
if ((nurse.getTarget() != _queen) || notCasting) {
nurse.setTarget(_queen);
nurse.useMagic(HEAL1.getSkill());
if ((!npc.isMoving()) && (npc.getAI().getIntention() == CtrlIntention.AI_INTENTION_ATTACK)) {
((L2Attackable) npc).clearAggroList();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE);
}
continue;
}
// if nurse not casting - remove target
if (notCasting && (nurse.getTarget() != null)) {
nurse.setTarget(null);
break;
}
case "ACTION": {
if ((getRandom(100) < 30) && (npc != null) && (!npc.isInCombat())) {
if (getRandom(100) < 50) {
npc.broadcastSocialAction(3);
} else {
npc.broadcastSocialAction(4);
}
}
break;
}
} else if (event.equalsIgnoreCase("action") && (npc != null)) {
if (getRandom(3) == 0) {
if (getRandom(2) == 0) {
npc.broadcastSocialAction(3);
case "QUEEN_UNLOCK": {
L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, QUEEN_X, QUEEN_Y, QUEEN_Z, 0, false, 0);
GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE);
spawnBoss(queen);
break;
}
case "RAID_CURSE": {
if ((player != null) && (!_zone.isInsideZone(player))) {
cancelQuestTimers("RAID_CURSE");
} else if ((player != null) && (!player.isDead()) && (_zone.isInsideZone(player)) && (_queen != null) && (!_queen.isDead())) {
if ((player.getLevel() - _queen.getLevel()) > 8) {
if (player.isMageClass()) {
if (!player.isAffectedBySkill(RAID_CURSE.getSkillId())) {
_queen.broadcastPacket(new MagicSkillUse(_queen, player, RAID_CURSE.getSkillId(), 1, 300, 0));
RAID_CURSE.getSkill().applyEffects(_queen, player);
}
} else {
if (!player.isAffectedBySkill(RAID_CURSE_2.getSkillId())) {
_queen.broadcastPacket(new MagicSkillUse(_queen, player, RAID_CURSE_2.getSkillId(), 1, 300, 0));
RAID_CURSE_2.getSkill().applyEffects(_queen, player);
}
}
}
}
break;
}
case "RESPAWN_QUEEN": {
if (GrandBossManager.getInstance().getBossStatus(QUEEN) == DEAD) {
GrandBossManager.getInstance().getStatsSet(QUEEN).set("respawn_time", 0);
cancelQuestTimers("QUEEN_UNLOCK");
notifyEvent("QUEEN_UNLOCK", null, null);
} else {
npc.broadcastSocialAction(4);
player.sendMessage(getClass().getSimpleName() + ": You cant respawn Queen Ant while Queen Ant is alive!");
}
break;
}
} else if (event.equalsIgnoreCase("queen_unlock")) {
L2GrandBossInstance queen = (L2GrandBossInstance) addSpawn(QUEEN, QUEEN_X, QUEEN_Y, QUEEN_Z, 0, false, 0);
GrandBossManager.getInstance().setBossStatus(QUEEN, ALIVE);
spawnBoss(queen);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill) {
if ((_zone.isInsideZone(npc)) && (npc != null) && (_queen != null) && (!npc.isCastingNow()) && (!npc.isCoreAIDisabled())) {
switch (npc.getId()) {
case QUEEN: {
if ((attacker.getMountType() == MountType.STRIDER) && !attacker.isAffectedBySkill(ANTI_STRIDER.getSkillId())) {
if (npc.checkDoCastConditions(ANTI_STRIDER.getSkill())) {
addSkillCastDesire(npc, attacker, ANTI_STRIDER, 1000000L);
}
} else if ((skill != null) && (skill.getAttributeType() == AttributeType.FIRE) && (getRandom(100) < 70)) {
addSkillCastDesire(npc, attacker, DECREASE_SPEED_1, 1000000L);
} else if ((npc.calculateDistance(attacker, false, false) > 500) && (getRandom(100) < 10)) {
addSkillCastDesire(npc, attacker, DECREASE_SPEED_2, 1000000L);
} else if ((npc.calculateDistance(attacker, false, false) > 150) && (getRandom(100) < 10)) {
if ((npc.calculateDistance(attacker, false, false) < 500) && (getRandom(100) < 80)) {
addSkillCastDesire(npc, attacker, DECREASE_SPEED_1, 1000000L);
} else {
addSkillCastDesire(npc, attacker, DECREASE_SPEED_2, 1000000L);
}
} else if ((npc.calculateDistance(attacker, false, false) < 250) && (getRandom(100) < 5)) {
addSkillCastDesire(npc, attacker, QUEEN_ANT_BRANDISH, 1000000L);
}
break;
}
case NURSE:
case ROYAL: {
if ((_queen.calculateDistance(attacker, false, false) > 500) && (getRandom(100) < 5)) {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_2, 1000000L);
} else if ((_queen.calculateDistance(attacker, false, false) > 150) && (getRandom(100) < 5)) {
if (getRandom(100) < 80) {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_1, 1000000L);
} else {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_2, 1000000L);
}
} else if ((_queen.calculateDistance(attacker, false, false) < 250) && (getRandom(100) < 2)) {
addSkillCastDesire(_queen, attacker, QUEEN_ANT_BRANDISH, 1000000L);
}
break;
}
case GUARD: {
if (attacker.isPlayer()) {
if ((_queen.calculateDistance(attacker, false, false) > 500) && (getRandom(100) < 3)) {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_2, 1000000L);
} else if ((_queen.calculateDistance(attacker, false, false) > 150) && (getRandom(100) < 3)) {
if (getRandom(100) < 80) {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_1, 1000000L);
} else {
addSkillCastDesire(_queen, attacker, DECREASE_SPEED_2, 1000000L);
}
} else if ((_queen.calculateDistance(attacker, false, false) < 250) && (getRandom(100) < 2)) {
addSkillCastDesire(_queen, attacker, QUEEN_ANT_BRANDISH, 1000000L);
}
}
break;
}
}
}
if ((!npc.getVariables().getBoolean(ATTACK_FLAG, false)) && !npc.isCoreAIDisabled()) {
if (npc.calculateDistance(attacker, false, false) > 150) {
_queen.setIsImmobilized(true);
}
npc.getVariables().set(ATTACK_FLAG, true);
startQuestTimer("CORE_MOVEMENT", 5000, npc, null);
}
return super.onAttack(npc, attacker, damage, isSummon, skill);
}
@Override
public String onSkillSee(L2Npc npc, L2PcInstance player, Skill skill, L2Object[] targets, boolean isSummon) {
if ((skill.getEffectPoint() > 0) && (getRandom(100) < 15)) {
if ((_zone.isInsideZone(npc)) && (npc != null) && (!npc.isCastingNow()) && (!npc.isCoreAIDisabled())) {
addSkillCastDesire(npc, player, DECREASE_SPEED_1, 1000000L);
}
}
return super.onSkillSee(npc, player, skill, targets, isSummon);
}
@Override
public String onSpawn(L2Npc npc) {
final L2MonsterInstance mob = (L2MonsterInstance) npc;
switch (npc.getId()) {
case LARVA:
mob.setIsImmobilized(true);
case QUEEN: {
startQuestTimer("ACTION", 10000, npc, null, true);
break;
}
case LARVA: {
mob.setIsMortal(false);
mob.setIsRaidMinion(true);
mob.setIsImmobilized(true);
break;
case NURSE:
}
case NURSE: {
_nurses.add(mob);
mob.disableCoreAI(true);
mob.setIsRaidMinion(true);
_nurses.add(mob);
startQuestTimer("HEAL", 2000, mob, null, true);
break;
}
case ROYAL:
case GUARD:
case GUARD: {
mob.setIsRaidMinion(true);
break;
}
}
return super.onSpawn(npc);
}
@Override
public String onFactionCall(L2Npc npc, L2Npc caller, L2PcInstance attacker, boolean isSummon) {
if ((caller == null) || (npc == null)) {
return super.onFactionCall(npc, caller, attacker, isSummon);
}
if (!npc.isCastingNow() && (npc.getAI().getIntention() != CtrlIntention.AI_INTENTION_CAST)) {
if (caller.getCurrentHp() < caller.getMaxHp()) {
npc.setTarget(caller);
((L2Attackable) npc).useMagic(HEAL1.getSkill());
}
}
return null;
}
@Override
public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isSummon) {
if ((npc == null) || (player.isGM() && player.isInvisible())) {
return null;
}
final boolean isMage;
final L2Playable character;
if (isSummon) {
isMage = false;
character = player.getSummon();
} else {
isMage = player.isMageClass();
character = player;
}
if (character == null) {
return null;
}
if (npc().raidCurse() && ((character.getLevel() - npc.getLevel()) > 8)) {
Skill curse = null;
if (isMage) {
if (!character.isMuted() && (getRandom(4) == 0)) {
curse = CommonSkill.RAID_CURSE.getSkill();
}
} else {
if (!character.isParalyzed() && (getRandom(4) == 0)) {
curse = CommonSkill.RAID_CURSE2.getSkill();
}
}
if (curse != null) {
npc.broadcastPacket(new MagicSkillUse(npc, character, curse.getId(), curse.getLevel(), 300, 0));
curse.applyEffects(npc, character);
}
((L2Attackable) npc).stopHating(character); // for calling again
return null;
}
return super.onAggroRangeEnter(npc, player, isSummon);
public String onEnterZone(L2Character character, L2ZoneType zone) {
final L2PcInstance player = character.getActingPlayer();
notifyEvent("RAID_CURSE", _queen, player);
startQuestTimer("RAID_CURSE", 3000, _queen, player, true);
return super.onEnterZone(character, zone);
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon) {
int npcId = npc.getId();
if (npcId == QUEEN) {
if (npc.getId() == QUEEN) {
cancelQuestTimers("HEAL");
cancelQuestTimers("ACTION");
npc.broadcastPacket(Music.BS02_D_10000.getPacket());
GrandBossManager.getInstance().setBossStatus(QUEEN, DEAD);
// Calculate Min and Max respawn times randomly.
long respawnTime = grandBoss().getIntervalOfQueenAntSpawn() + getRandom(-grandBoss().getRandomOfQueenAntSpawn(), grandBoss().getRandomOfQueenAntSpawn());
respawnTime *= 3600000;
startQuestTimer("queen_unlock", respawnTime, null, null);
cancelQuestTimer("action", npc, null);
cancelQuestTimer("heal", null, null);
// also save the respawn time so that the info is maintained past reboots
StatsSet info = GrandBossManager.getInstance().getStatsSet(QUEEN);
info.set("respawn_time", System.currentTimeMillis() + respawnTime);
GrandBossManager.getInstance().setStatsSet(QUEEN, info);
final long respawnTime = (grandBoss().getIntervalOfQueenAntSpawn() + getRandom(-grandBoss().getRandomOfQueenAntSpawn(), grandBoss().getRandomOfQueenAntSpawn())) * 3600000;
GrandBossManager.getInstance().getStatsSet(QUEEN).set("respawn_time", (System.currentTimeMillis() + respawnTime));
startQuestTimer("QUEEN_UNLOCK", respawnTime, null, null);
_nurses.clear();
_larva.deleteMe();
_larva = null;
_queen = null;
if (_larva != null) {
_larva.deleteMe();
_larva = null;
}
} else if ((_queen != null) && !_queen.isAlikeDead()) {
if (npcId == ROYAL) {
if (npc.getId() == ROYAL) {
L2MonsterInstance mob = (L2MonsterInstance) npc;
if (mob.getLeader() != null) {
mob.getLeader().getMinionList().onMinionDie(mob, (280 + getRandom(40)) * 1000);
}
} else if (npcId == NURSE) {
} else if (npc.getId() == NURSE) {
L2MonsterInstance mob = (L2MonsterInstance) npc;
_nurses.remove(mob);
if (mob.getLeader() != null) {
......@@ -307,6 +379,36 @@ public final class QueenAnt extends AbstractNpcAI {
}
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onExitZone(L2Character character, L2ZoneType zone) {
if ((character.isAttackable()) && (character.isRaid()) && (!_zone.isInsideZone(_queen)) && (_queen != null)) {
_queen.disableCoreAI(true);
_queen.setIsImmobilized(false);
startQuestTimer("CHECK_ZONE", 1000, _queen, null, true);
}
return super.onExitZone(character, zone);
}
@Override
public void onMoveFinished(L2Npc npc) {
startQuestTimer("CORE_AI", 100, npc, null);
}
private void spawnBoss(L2GrandBossInstance npc) {
if (getRandom(100) < 33) {
_zone.movePlayersTo(TELE_LOCATION_1);
} else if (getRandom(100) < 50) {
_zone.movePlayersTo(TELE_LOCATION_2);
} else {
_zone.movePlayersTo(TELE_LOCATION_3);
}
GrandBossManager.getInstance().addBoss(npc);
npc.broadcastPacket(Music.BS01_A_10000.getPacket());
_queen = npc;
_larva = (L2MonsterInstance) addSpawn(LARVA, LARVA_LOCATION, false, 0);
}
}
......@@ -22,6 +22,7 @@ import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.StringTokenizer;
import com.l2jserver.datapack.ai.individual.QueenAnt;
import com.l2jserver.datapack.ai.individual.Antharas.Antharas;
import com.l2jserver.datapack.ai.individual.Baium.Baium;
import com.l2jserver.gameserver.cache.HtmCache;
......@@ -78,7 +79,7 @@ public class AdminGrandBoss implements IAdminCommandHandler {
final int grandBossId = Integer.parseInt(st.nextToken());
if (grandBossId == ANTHARAS) {
antharasAi().notifyEvent("SKIP_WAITING", null, activeChar);
getAntharasAI().notifyEvent("SKIP_WAITING", null, activeChar);
manageHtml(activeChar, grandBossId);
} else {
activeChar.sendMessage("Wrong ID!");
......@@ -94,12 +95,17 @@ public class AdminGrandBoss implements IAdminCommandHandler {
switch (grandBossId) {
case ANTHARAS: {
antharasAi().notifyEvent("RESPAWN_ANTHARAS", null, activeChar);
getAntharasAI().notifyEvent("RESPAWN_ANTHARAS", null, activeChar);
manageHtml(activeChar, grandBossId);
break;
}
case BAIUM: {
baiumAi().notifyEvent("RESPAWN_BAIUM", null, activeChar);
getBaiumAI().notifyEvent("RESPAWN_BAIUM", null, activeChar);
manageHtml(activeChar, grandBossId);
break;
}
case QUEENANT: {
getQueenAntAI().notifyEvent("RESPAWN_QUEEN", null, activeChar);
manageHtml(activeChar, grandBossId);
break;
}
......@@ -118,11 +124,11 @@ public class AdminGrandBoss implements IAdminCommandHandler {
switch (grandBossId) {
case ANTHARAS: {
antharasAi().notifyEvent("DESPAWN_MINIONS", null, activeChar);
getAntharasAI().notifyEvent("DESPAWN_MINIONS", null, activeChar);
break;
}
case BAIUM: {
baiumAi().notifyEvent("DESPAWN_MINIONS", null, activeChar);
getBaiumAI().notifyEvent("DESPAWN_MINIONS", null, activeChar);
break;
}
default: {
......@@ -140,12 +146,12 @@ public class AdminGrandBoss implements IAdminCommandHandler {
switch (grandBossId) {
case ANTHARAS: {
antharasAi().notifyEvent("ABORT_FIGHT", null, activeChar);
getAntharasAI().notifyEvent("ABORT_FIGHT", null, activeChar);
manageHtml(activeChar, grandBossId);
break;
}
case BAIUM: {
baiumAi().notifyEvent("ABORT_FIGHT", null, activeChar);
getBaiumAI().notifyEvent("ABORT_FIGHT", null, activeChar);
manageHtml(activeChar, grandBossId);
break;
}
......@@ -255,14 +261,18 @@ public class AdminGrandBoss implements IAdminCommandHandler {
}
}
private Quest antharasAi() {
private Quest getAntharasAI() {
return QuestManager.getInstance().getQuest(Antharas.class.getSimpleName());
}
private Quest baiumAi() {
private Quest getBaiumAI() {
return QuestManager.getInstance().getQuest(Baium.class.getSimpleName());
}
private Quest getQueenAntAI() {
return QuestManager.getInstance().getQuest(QueenAnt.class.getSimpleName());
}
@Override
public String[] getAdminCommandList() {
return ADMIN_COMMANDS;
......
......@@ -9,7 +9,7 @@
</table>
<br>
<br>
<font color="LEVEL">Queen ant<font><br>
<font color="LEVEL">Queen Ant<font><br>
<table width="270" border="0" bgcolor="444444">
<tr>
<td>Status:</td>
......@@ -22,6 +22,7 @@
</table>
<br>
<br>
<button value="Respawn Queen Ant" action="bypass -h admin_grandboss_respawn 29001" width=200 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td><br1>
<button value="Teleport to Queen Ant" action="bypass -h admin_move_to -21568 181764 -5722" width=200 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td><br1>
<button value="Teleport to Queen Ant Larva" action="bypass -h admin_move_to -21598 179595 -5834" width=200 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td><br1>
</center>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment