12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301 |
- /*
- * Copyright (C) 2004-2015 L2J DataPack
- *
- * This file is part of L2J DataPack.
- *
- * L2J DataPack 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.
- *
- * L2J DataPack 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 instances.IceQueensCastleNormalBattle;
- import instances.AbstractInstance;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.concurrent.CopyOnWriteArrayList;
- import quests.Q10286_ReunionWithSirra.Q10286_ReunionWithSirra;
- import com.l2jserver.gameserver.ai.CtrlIntention;
- import com.l2jserver.gameserver.enums.MountType;
- import com.l2jserver.gameserver.instancemanager.InstanceManager;
- import com.l2jserver.gameserver.model.L2CommandChannel;
- import com.l2jserver.gameserver.model.L2Party;
- import com.l2jserver.gameserver.model.Location;
- import com.l2jserver.gameserver.model.PcCondOverride;
- 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.instance.L2GrandBossInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2QuestGuardInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2RaidBossInstance;
- import com.l2jserver.gameserver.model.holders.SkillHolder;
- import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
- import com.l2jserver.gameserver.model.quest.QuestState;
- import com.l2jserver.gameserver.model.quest.State;
- import com.l2jserver.gameserver.model.skills.Skill;
- import com.l2jserver.gameserver.model.variables.NpcVariables;
- import com.l2jserver.gameserver.network.NpcStringId;
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.network.clientpackets.Say2;
- import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
- import com.l2jserver.gameserver.network.serverpackets.ExChangeClientEffectInfo;
- import com.l2jserver.gameserver.network.serverpackets.ExSendUIEvent;
- import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
- import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
- import com.l2jserver.gameserver.util.Util;
- /**
- * Ice Queen's Castle (Normal Battle) instance zone.
- * @author St3eT
- */
- public final class IceQueensCastleNormalBattle extends AbstractInstance
- {
- protected class IQCNBWorld extends InstanceWorld
- {
- protected List<L2PcInstance> playersInside = new ArrayList<>();
- protected List<L2Npc> knightStatues = new ArrayList<>();
- protected List<L2Attackable> spawnedMobs = new CopyOnWriteArrayList<>();
- protected L2NpcInstance controller = null;
- protected L2GrandBossInstance freya = null;
- protected L2QuestGuardInstance supp_Jinia = null;
- protected L2QuestGuardInstance supp_Kegor = null;
- protected boolean isSupportActive = false;
- protected boolean canSpawnMobs = true;
- }
-
- // Npcs
- private static final int FREYA_THRONE = 29177; // First freya
- private static final int FREYA_SPELLING = 29178; // Second freya
- private static final int FREYA_STAND = 29179; // Last freya
- private static final int INVISIBLE_NPC = 18919;
- private static final int KNIGHT = 18855; // Archery Knight
- private static final int GLACIER = 18853; // Glacier
- private static final int BREATH = 18854; // Archer's Breath
- private static final int GLAKIAS = 25699; // Glakias (Archery Knight Captain)
- private static final int SIRRA = 32762; // Sirra
- private static final int JINIA = 32781; // Jinia
- private static final int SUPP_JINIA = 18850; // Jinia
- private static final int SUPP_KEGOR = 18851; // Kegor
- // Skills
- private static final SkillHolder BLIZZARD = new SkillHolder(6274, 1); // Eternal Blizzard
- private static final SkillHolder BLIZZARD_BREATH = new SkillHolder(6299, 1); // Breath of Ice Palace - Ice Storm
- private static final SkillHolder SUICIDE_BREATH = new SkillHolder(6300, 1); // Self-Destruction
- private static final SkillHolder JINIA_SUPPORT = new SkillHolder(6288, 1); // Jinia's Prayer
- private static final SkillHolder KEGOR_SUPPORT = new SkillHolder(6289, 1); // Kegor's Courage
- private static final SkillHolder ICE_STONE = new SkillHolder(6301, 1); // Cold Mana's Fragment
- private static final SkillHolder CANCEL = new SkillHolder(4618, 1); // NPC Cancel PC Target
- private static final SkillHolder POWER_STRIKE = new SkillHolder(6293, 1); // Power Strike
- private static final SkillHolder POINT_TARGET = new SkillHolder(6295, 1); // Point Target
- private static final SkillHolder CYLINDER_THROW = new SkillHolder(6297, 1); // Cylinder Throw
- private static final SkillHolder SelfRangeBuff = new SkillHolder(6294, 1); // Leader's Roar
- private static final SkillHolder LEADER_RUSH = new SkillHolder(6296, 1); // Rush
- private static final SkillHolder ANTI_STRIDER = new SkillHolder(4258, 1); // Hinder Strider
- private static final SkillHolder ICE_BALL = new SkillHolder(6278, 1); // Ice Ball
- private static final SkillHolder SUMMON_ELEMENTAL = new SkillHolder(6277, 1); // Summon Spirits
- private static final SkillHolder SELF_NOVA = new SkillHolder(6279, 1); // Attack Nearby Range
- private static final SkillHolder REFLECT_MAGIC = new SkillHolder(6282, 1); // Reflect Magic
- // Locations
- private static final Location FREYA_SPAWN = new Location(114720, -117085, -11088, 15956);
- private static final Location FREYA_SPELLING_SPAWN = new Location(114723, -117502, -10672, 15956);
- private static final Location FREYA_CORPSE = new Location(114767, -114795, -11200, 0);
- private static final Location MIDDLE_POINT = new Location(114730, -114805, -11200);
- private static final Location KEGOR_FINISH = new Location(114659, -114796, -11205);
- private static final Location GLAKIAS_SPAWN = new Location(114707, -114799, -11199, 15956);
- private static final Location SUPP_JINIA_SPAWN = new Location(114751, -114781, -11205);
- private static final Location SUPP_KEGOR_SPAWN = new Location(114659, -114796, -11205);
- private static final Location BATTLE_PORT = new Location(114694, -113700, -11200);
- private static final Location CONTROLLER_LOC = new Location(114394, -112383, -11200);
- private static final Location[] ENTER_LOC =
- {
- new Location(114185, -112435, -11210),
- new Location(114183, -112280, -11210),
- new Location(114024, -112435, -11210),
- new Location(114024, -112278, -11210),
- new Location(113865, -112435, -11210),
- new Location(113865, -112276, -11210),
-
- };
- private static final Location[] STATUES_LOC =
- {
- new Location(113845, -116091, -11168, 8264),
- new Location(113381, -115622, -11168, 8264),
- new Location(113380, -113978, -11168, -8224),
- new Location(113845, -113518, -11168, -8224),
- new Location(115591, -113516, -11168, -24504),
- new Location(116053, -113981, -11168, -24504),
- new Location(116061, -115611, -11168, 24804),
- new Location(115597, -116080, -11168, 24804),
- new Location(112942, -115480, -10960, 52),
- new Location(112940, -115146, -10960, 52),
- new Location(112945, -114453, -10960, 52),
- new Location(112945, -114123, -10960, 52),
- new Location(116497, -114117, -10960, 32724),
- new Location(116499, -114454, -10960, 32724),
- new Location(116501, -115145, -10960, 32724),
- new Location(116502, -115473, -10960, 32724),
- };
- private static Location[] KNIGHTS_LOC =
- {
- new Location(114502, -115315, -11205, 15451),
- new Location(114937, -115323, -11205, 18106),
- new Location(114722, -115185, -11205, 16437),
- };
- // Misc
- private static final int MAX_PLAYERS = 27;
- private static final int MIN_PLAYERS = 10;
- private static final int MIN_LEVEL = 82;
- private static final int TEMPLATE_ID = 139; // Ice Queen's Castle
- private static final int DOOR_ID = 23140101;
-
- public IceQueensCastleNormalBattle()
- {
- super(IceQueensCastleNormalBattle.class.getSimpleName());
- addStartNpc(SIRRA, SUPP_KEGOR, SUPP_JINIA);
- addFirstTalkId(SUPP_KEGOR, SUPP_JINIA);
- addTalkId(SIRRA, JINIA, SUPP_KEGOR);
- addAttackId(FREYA_THRONE, FREYA_STAND, GLAKIAS, GLACIER, BREATH, KNIGHT);
- addKillId(GLAKIAS, FREYA_STAND, KNIGHT, GLACIER, BREATH);
- addSpawnId(GLAKIAS, FREYA_STAND, KNIGHT, GLACIER, BREATH);
- addSpellFinishedId(GLACIER, BREATH);
- }
-
- @Override
- public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
- {
- if (event.equals("enter"))
- {
- enterInstance(player, new IQCNBWorld(), "IceQueensCastleNormalBattle.xml", TEMPLATE_ID);
- }
- else
- {
- final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-
- if ((tmpworld != null) && (tmpworld instanceof IQCNBWorld))
- {
- final IQCNBWorld world = (IQCNBWorld) tmpworld;
- switch (event)
- {
- case "openDoor":
- {
- if (npc.isScriptValue(0))
- {
- npc.setScriptValue(1);
- openDoor(DOOR_ID, world.getInstanceId());
- world.controller = (L2NpcInstance) addSpawn(INVISIBLE_NPC, CONTROLLER_LOC, false, 0, true, world.getInstanceId());
- for (Location loc : STATUES_LOC)
- {
- if (loc.getZ() == -11168)
- {
- final L2Npc statue = addSpawn(INVISIBLE_NPC, loc, false, 0, false, world.getInstanceId());
- world.knightStatues.add(statue);
- }
- }
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null) && !players.isDead() && (players.getInstanceId() == world.getInstanceId()))
- {
- final QuestState qs = player.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
- if ((qs != null) && (qs.getState() == State.STARTED) && qs.isCond(5))
- {
- qs.setCond(6, true);
- }
- }
- }
- startQuestTimer("STAGE_1_MOVIE", 60000, world.controller, null);
- }
- break;
- }
- case "portInside":
- {
- teleportPlayer(player, BATTLE_PORT, world.getInstanceId());
- break;
- }
- case "killFreya":
- {
- final QuestState qs = player.getQuestState(Q10286_ReunionWithSirra.class.getSimpleName());
- if ((qs != null) && (qs.getState() == State.STARTED) && qs.isCond(6))
- {
- qs.setMemoState(10);
- qs.setCond(7, true);
- }
- world.supp_Kegor.deleteMe();
- world.freya.decayMe();
- manageMovie(world, 20);
- cancelQuestTimer("FINISH_WORLD", world.controller, null);
- startQuestTimer("FINISH_WORLD", 58500, world.controller, null);
- break;
- }
- case "18851-01.html":
- {
- return event;
- }
- case "STAGE_1_MOVIE":
- {
- closeDoor(DOOR_ID, world.getInstanceId());
- world.setStatus(1);
- manageMovie(world, 15);
- startQuestTimer("STAGE_1_START", 53500, world.controller, null);
- break;
- }
- case "STAGE_1_START":
- {
- world.freya = (L2GrandBossInstance) addSpawn(FREYA_THRONE, FREYA_SPAWN, false, 0, true, world.getInstanceId());
- world.freya.setIsMortal(false);
- manageScreenMsg(world, NpcStringId.BEGIN_STAGE_1);
- startQuestTimer("CAST_BLIZZARD", 50000, world.controller, null);
- startQuestTimer("STAGE_1_SPAWN", 2000, world.freya, null);
- break;
- }
- case "STAGE_1_SPAWN":
- {
- notifyEvent("START_SPAWN", world.controller, null);
- break;
- }
- case "STAGE_1_FINISH":
- {
- world.freya.deleteMe();
- world.freya = null;
- manageDespawnMinions(world);
- manageMovie(world, 16);
- startQuestTimer("STAGE_1_PAUSE", 24100 - 1000, world.controller, null);
- break;
- }
- case "STAGE_1_PAUSE":
- {
- world.freya = (L2GrandBossInstance) addSpawn(FREYA_SPELLING, FREYA_SPELLING_SPAWN, false, 0, true, world.getInstanceId());
- world.freya.setIsInvul(true);
- world.freya.disableCoreAI(true);
- manageTimer(world, 60);
- world.setStatus(2);
- startQuestTimer("STAGE_2_START", 60000, world.controller, null);
- break;
- }
- case "STAGE_2_START":
- {
- world.canSpawnMobs = true;
- notifyEvent("START_SPAWN", world.controller, null);
- manageScreenMsg(world, NpcStringId.BEGIN_STAGE_2);
- break;
- }
- case "STAGE_2_MOVIE":
- {
- manageMovie(world, 23);
- startQuestTimer("STAGE_2_GLAKIAS", 7000, world.controller, null);
- break;
- }
- case "STAGE_2_GLAKIAS":
- {
- for (Location loc : STATUES_LOC)
- {
- if (loc.getZ() == -10960)
- {
- final L2Npc statue = addSpawn(INVISIBLE_NPC, loc, false, 0, false, world.getInstanceId());
- world.knightStatues.add(statue);
- startQuestTimer("SPAWN_KNIGHT", 5000, statue, null);
- }
- }
- final L2RaidBossInstance glakias = (L2RaidBossInstance) addSpawn(GLAKIAS, GLAKIAS_SPAWN, false, 0, true, world.getInstanceId());
- startQuestTimer("LEADER_DELAY", 5000, glakias, null);
- break;
- }
- case "STAGE_3_MOVIE":
- {
- manageMovie(world, 17);
- startQuestTimer("STAGE_3_START", 21500, world.controller, null);
- break;
- }
- case "STAGE_3_START":
- {
- for (L2PcInstance players : world.playersInside)
- {
- if (players != null)
- {
- players.broadcastPacket(ExChangeClientEffectInfo.STATIC_FREYA_DESTROYED);
- }
- }
- world.setStatus(4);
- world.freya.deleteMe();
- world.canSpawnMobs = true;
- world.freya = (L2GrandBossInstance) addSpawn(FREYA_STAND, FREYA_SPAWN, false, 0, true, world.getInstanceId());
- world.controller.getVariables().set("FREYA_MOVE", 0);
- notifyEvent("START_SPAWN", world.controller, null);
- startQuestTimer("START_MOVE", 10000, world.controller, null);
- startQuestTimer("CAST_BLIZZARD", 50000, world.controller, null);
- manageScreenMsg(world, NpcStringId.BEGIN_STAGE_3);
- break;
- }
- case "START_MOVE":
- {
- if (npc.getVariables().getInt("FREYA_MOVE") == 0)
- {
- world.controller.getVariables().set("FREYA_MOVE", 1);
- world.freya.setIsRunning(true);
- world.freya.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MIDDLE_POINT);
- }
- break;
- }
- case "CAST_BLIZZARD":
- {
- if (!world.freya.isInvul())
- {
- world.freya.doCast(BLIZZARD.getSkill());
- manageScreenMsg(world, NpcStringId.STRONG_MAGIC_POWER_CAN_BE_FELT_FROM_SOMEWHERE);
- }
-
- for (L2Attackable minion : world.spawnedMobs)
- {
- if ((minion != null) && !minion.isDead() && !minion.isInCombat())
- {
- manageRandomAttack(world, minion);
- }
- }
- startQuestTimer("CAST_BLIZZARD", getRandom(55, 60) * 1000, world.controller, null);
- break;
- }
- case "SPAWN_SUPPORT":
- {
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null) && (players.getInstanceId() == world.getInstanceId()))
- {
- players.setIsInvul(false);
- }
- }
- world.freya.setIsInvul(false);
- world.freya.disableCoreAI(false);
- manageScreenMsg(world, NpcStringId.BEGIN_STAGE_4);
- world.supp_Jinia = (L2QuestGuardInstance) addSpawn(SUPP_JINIA, SUPP_JINIA_SPAWN, false, 0, true, world.getInstanceId());
- world.supp_Jinia.setIsRunning(true);
- world.supp_Jinia.setIsInvul(true);
- world.supp_Jinia.setCanReturnToSpawnPoint(false);
- world.supp_Kegor = (L2QuestGuardInstance) addSpawn(SUPP_KEGOR, SUPP_KEGOR_SPAWN, false, 0, true, world.getInstanceId());
- world.supp_Kegor.setIsRunning(true);
- world.supp_Kegor.setIsInvul(true);
- world.supp_Kegor.setCanReturnToSpawnPoint(false);
- startQuestTimer("ATTACK_FREYA", 5000, world.supp_Jinia, null);
- startQuestTimer("ATTACK_FREYA", 5000, world.supp_Kegor, null);
- startQuestTimer("GIVE_SUPPORT", 1000, world.controller, null);
- break;
- }
- case "GIVE_SUPPORT":
- {
- if (world.isSupportActive)
- {
- world.supp_Jinia.doCast(JINIA_SUPPORT.getSkill());
- world.supp_Kegor.doCast(KEGOR_SUPPORT.getSkill());
- startQuestTimer("GIVE_SUPPORT", 25000, world.controller, null);
- }
- break;
- }
- case "FINISH_STAGE":
- {
- world.supp_Jinia.deleteMe();
- world.supp_Jinia = null;
- world.freya.teleToLocation(FREYA_CORPSE);
- world.supp_Kegor.teleToLocation(KEGOR_FINISH);
- break;
- }
- case "START_SPAWN":
- {
- for (L2Npc statues : world.knightStatues)
- {
- notifyEvent("SPAWN_KNIGHT", statues, null);
- }
-
- for (Location loc : KNIGHTS_LOC)
- {
- final L2Attackable knight = (L2Attackable) addSpawn(KNIGHT, loc, false, 0, false, world.getInstanceId());
- knight.disableCoreAI(true);
- knight.setDisplayEffect(1);
- knight.getSpawn().setLocation(loc);
- world.spawnedMobs.add(knight);
- startQuestTimer("ICE_RUPTURE", getRandom(2, 5) * 1000, knight, null);
- }
-
- for (int i = 0; i < world.getStatus(); i++)
- {
- notifyEvent("SPAWN_GLACIER", world.controller, null);
- }
- break;
- }
- case "SPAWN_KNIGHT":
- {
- if (world.canSpawnMobs)
- {
- final Location loc = new Location(MIDDLE_POINT.getX() + getRandom(-1000, 1000), MIDDLE_POINT.getY() + getRandom(-1000, 1000), MIDDLE_POINT.getZ());
- final L2Attackable knight = (L2Attackable) addSpawn(KNIGHT, npc.getLocation(), false, 0, false, world.getInstanceId());
- knight.getVariables().set("SPAWNED_NPC", npc);
- knight.disableCoreAI(true);
- knight.setIsImmobilized(true);
- knight.setDisplayEffect(1);
- knight.getSpawn().setLocation(loc);
- world.spawnedMobs.add(knight);
- startQuestTimer("ICE_RUPTURE", getRandom(5, 10) * 1000, knight, null);
- }
- break;
- }
- case "SPAWN_GLACIER":
- {
- if (world.canSpawnMobs)
- {
- final Location loc = new Location(MIDDLE_POINT.getX() + getRandom(-1000, 1000), MIDDLE_POINT.getY() + getRandom(-1000, 1000), MIDDLE_POINT.getZ());
- final L2Attackable glacier = (L2Attackable) addSpawn(GLACIER, loc, false, 0, false, world.getInstanceId());
- glacier.setDisplayEffect(1);
- glacier.disableCoreAI(true);
- glacier.setIsImmobilized(true);
- world.spawnedMobs.add(glacier);
- startQuestTimer("CHANGE_STATE", 1400, glacier, null);
- }
- break;
- }
- case "ICE_RUPTURE":
- {
- if (npc.isCoreAIDisabled())
- {
- npc.disableCoreAI(false);
- npc.setIsImmobilized(false);
- npc.setDisplayEffect(2);
- manageRandomAttack(world, (L2Attackable) npc);
- }
- break;
- }
- case "FIND_TARGET":
- {
- manageRandomAttack(world, (L2Attackable) npc);
- break;
- }
- case "CHANGE_STATE":
- {
- npc.setDisplayEffect(2);
- startQuestTimer("CAST_SKILL", 20000, npc, null);
- break;
- }
- case "CAST_SKILL":
- {
- if (npc.isScriptValue(0) && !npc.isDead())
- {
- npc.setTarget(npc);
- npc.doCast(ICE_STONE.getSkill());
- npc.setScriptValue(1);
- }
- break;
- }
- case "SUICIDE":
- {
- npc.setDisplayEffect(3);
- npc.setIsMortal(true);
- npc.doDie(null);
- break;
- }
- case "BLIZZARD":
- {
- npc.getVariables().set("SUICIDE_COUNT", npc.getVariables().getInt("SUICIDE_COUNT") + 1);
-
- if (npc.getVariables().getInt("SUICIDE_ON") == 0)
- {
- if (npc.getVariables().getInt("SUICIDE_COUNT") == 2)
- {
- startQuestTimer("ELEMENTAL_SUICIDE", 20000, npc, null);
- }
- else
- {
- if (npc.checkDoCastConditions(BLIZZARD_BREATH.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(npc);
- npc.doCast(BLIZZARD_BREATH.getSkill());
- }
- startQuestTimer("BLIZZARD", 20000, npc, null);
- }
- }
- break;
- }
- case "ELEMENTAL_SUICIDE":
- {
- npc.setTarget(npc);
- npc.doCast(SUICIDE_BREATH.getSkill());
- break;
- }
- case "ELEMENTAL_KILLED":
- {
- if (npc.getVariables().getInt("SUICIDE_ON") == 1)
- {
- npc.setTarget(npc);
- npc.doCast(SUICIDE_BREATH.getSkill());
- }
- break;
- }
- case "ATTACK_FREYA":
- {
- final SkillHolder skill = npc.getTemplate().getParameters().getObject("Skill01_ID", SkillHolder.class);
- if (npc.isInsideRadius(world.freya, 100, true, false))
- {
- if (npc.checkDoCastConditions(skill.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(world.freya);
- npc.doCast(skill.getSkill());
- startQuestTimer("ATTACK_FREYA", 20000, npc, null);
- }
- else
- {
- startQuestTimer("ATTACK_FREYA", 5000, npc, null);
- }
- }
- else
- {
- npc.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, world.freya);
- startQuestTimer("ATTACK_FREYA", 5000, npc, null);
- }
- break;
- }
- case "FINISH_WORLD":
- {
- if (world.freya != null)
- {
- world.freya.decayMe();
- }
-
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null))
- {
- players.broadcastPacket(ExChangeClientEffectInfo.STATIC_FREYA_DEFAULT);
- }
- }
- InstanceManager.getInstance().destroyInstance(world.getInstanceId());
- break;
- }
- case "LEADER_RANGEBUFF":
- {
- if (npc.checkDoCastConditions(SelfRangeBuff.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(npc);
- npc.doCast(SelfRangeBuff.getSkill());
- }
- else
- {
- startQuestTimer("LEADER_RANGEBUFF", 30000, npc, null);
- }
- break;
- }
- case "LEADER_RANDOMIZE":
- {
- final L2Attackable mob = (L2Attackable) npc;
- mob.clearAggroList();
-
- for (L2Character characters : npc.getKnownList().getKnownPlayersInRadius(1000))
- {
- if ((characters != null))
- {
- mob.addDamageHate(characters, 0, getRandom(10000, 20000));
- }
- }
- startQuestTimer("LEADER_RANDOMIZE", 25000, npc, null);
- break;
- }
- case "LEADER_DASH":
- {
- final L2Character mostHated = ((L2Attackable) npc).getMostHated();
- if (getRandomBoolean() && !npc.isCastingNow() && (mostHated != null) && !mostHated.isDead() && (npc.calculateDistance(mostHated, true, false) < 1000))
- {
- npc.setTarget(mostHated);
- npc.doCast(LEADER_RUSH.getSkill());
- }
- startQuestTimer("LEADER_DASH", 10000, npc, null);
- break;
- }
- case "LEADER_DESTROY":
- {
- final L2Attackable mob = (L2Attackable) npc;
- if (npc.getVariables().getInt("OFF_SHOUT") == 0)
- {
- manageScreenMsg(world, NpcStringId.THE_SPACE_FEELS_LIKE_ITS_GRADUALLY_STARTING_TO_SHAKE);
-
- switch (getRandom(4))
- {
- case 0:
- {
- broadcastNpcSay(npc, Say2.SHOUT, NpcStringId.ARCHER_GIVE_YOUR_BREATH_FOR_THE_INTRUDER);
- break;
- }
- case 1:
- {
- broadcastNpcSay(npc, Say2.SHOUT, NpcStringId.MY_KNIGHTS_SHOW_YOUR_LOYALTY);
- break;
- }
- case 2:
- {
- broadcastNpcSay(npc, Say2.SHOUT, NpcStringId.I_CAN_TAKE_IT_NO_LONGER);
- break;
- }
- case 3:
- {
- broadcastNpcSay(npc, Say2.SHOUT, NpcStringId.ARCHER_HEED_MY_CALL);
- for (int i = 0; i < 3; i++)
- {
- final L2Attackable breath = (L2Attackable) addSpawn(BREATH, npc.getLocation(), true, 0, false, world.getInstanceId());
- breath.setIsRunning(true);
- breath.addDamageHate(mob.getMostHated(), 0, 999);
- breath.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, mob.getMostHated());
- startQuestTimer("BLIZZARD", 20000, breath, null);
- world.spawnedMobs.add(breath);
- }
- break;
- }
- }
- }
- break;
- }
- case "LEADER_DELAY":
- {
- if (npc.getVariables().getInt("DELAY_VAL") == 0)
- {
- npc.getVariables().set("DELAY_VAL", 1);
- }
- break;
- }
- }
- }
- }
- return super.onAdvEvent(event, npc, player);
- }
-
- @Override
- public String onSpawn(L2Npc npc)
- {
- ((L2Attackable) npc).setOnKillDelay(0);
- return super.onSpawn(npc);
- }
-
- @Override
- public String onFirstTalk(L2Npc npc, L2PcInstance player)
- {
- final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-
- if (tmpworld instanceof IQCNBWorld)
- {
- final IQCNBWorld world = (IQCNBWorld) tmpworld;
-
- if (npc.getId() == SUPP_JINIA)
- {
- player.sendPacket(ActionFailed.STATIC_PACKET);
- return null;
- }
- else if (npc.getId() == SUPP_KEGOR)
- {
- if (world.isSupportActive)
- {
- player.sendPacket(ActionFailed.STATIC_PACKET);
- return null;
- }
- return "18851.html";
- }
- }
- player.sendPacket(ActionFailed.STATIC_PACKET);
- return null;
- }
-
- @Override
- public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon, Skill skill)
- {
- final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-
- if (tmpworld instanceof IQCNBWorld)
- {
- final IQCNBWorld world = (IQCNBWorld) tmpworld;
- switch (npc.getId())
- {
- case FREYA_THRONE:
- {
- if ((world.controller.getVariables().getInt("FREYA_MOVE") == 0) && world.isStatus(1))
- {
- world.controller.getVariables().set("FREYA_MOVE", 1);
- manageScreenMsg(world, NpcStringId.FREYA_HAS_STARTED_TO_MOVE);
- world.freya.setIsRunning(true);
- world.freya.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MIDDLE_POINT);
- }
-
- if (npc.getCurrentHp() < (npc.getMaxHp() * 0.02))
- {
- notifyEvent("STAGE_1_FINISH", world.controller, null);
- cancelQuestTimer("CAST_BLIZZARD", world.controller, null);
- }
- else
- {
- if ((attacker.getMountType() == MountType.STRIDER) && !attacker.isAffectedBySkill(ANTI_STRIDER.getSkillId()) && !npc.isCastingNow())
- {
- if (!npc.isSkillDisabled(ANTI_STRIDER.getSkill()))
- {
- npc.setTarget(attacker);
- npc.doCast(ANTI_STRIDER.getSkill());
- }
- }
-
- final L2Character mostHated = ((L2Attackable) npc).getMostHated();
- final boolean canReachMostHated = (mostHated != null) && !mostHated.isDead() && (npc.calculateDistance(mostHated, true, false) <= 800);
-
- if (getRandom(10000) < 3333)
- {
- if (getRandomBoolean())
- {
- if ((npc.calculateDistance(attacker, true, false) <= 800) && npc.checkDoCastConditions(ICE_BALL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(ICE_BALL.getSkill());
- }
- }
- else
- {
- if (canReachMostHated && npc.checkDoCastConditions(ICE_BALL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(mostHated);
- npc.doCast(ICE_BALL.getSkill());
- }
- }
- }
- else if (getRandom(10000) < 800)
- {
- if (getRandomBoolean())
- {
- if ((npc.calculateDistance(attacker, true, false) <= 800) && npc.checkDoCastConditions(SUMMON_ELEMENTAL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(SUMMON_ELEMENTAL.getSkill());
- }
- }
- else
- {
- if (canReachMostHated && npc.checkDoCastConditions(SUMMON_ELEMENTAL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(mostHated);
- npc.doCast(SUMMON_ELEMENTAL.getSkill());
- }
- }
- }
- else if (getRandom(10000) < 1500)
- {
- if (!npc.isAffectedBySkill(SELF_NOVA.getSkillId()) && npc.checkDoCastConditions(SELF_NOVA.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(npc);
- npc.doCast(SELF_NOVA.getSkill());
- }
- }
- }
- break;
- }
- case FREYA_STAND:
- {
- if (world.controller.getVariables().getInt("FREYA_MOVE") == 0)
- {
- world.controller.getVariables().set("FREYA_MOVE", 1);
- world.freya.setIsRunning(true);
- world.freya.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MIDDLE_POINT);
- }
-
- if ((npc.getCurrentHp() < (npc.getMaxHp() * 0.2)) && !world.isSupportActive)
- {
- world.isSupportActive = true;
- world.freya.setIsInvul(true);
- world.freya.disableCoreAI(true);
- for (L2PcInstance players : world.playersInside)
- {
- players.setIsInvul(true);
- players.abortAttack();
- }
- manageMovie(world, 18);
- startQuestTimer("SPAWN_SUPPORT", 27000, world.controller, null);
- }
-
- if ((attacker.getMountType() == MountType.STRIDER) && !attacker.isAffectedBySkill(ANTI_STRIDER.getSkillId()) && !npc.isCastingNow())
- {
- if (!npc.isSkillDisabled(ANTI_STRIDER.getSkill()))
- {
- npc.setTarget(attacker);
- npc.doCast(ANTI_STRIDER.getSkill());
- }
- }
-
- final L2Character mostHated = ((L2Attackable) npc).getMostHated();
- final boolean canReachMostHated = (mostHated != null) && !mostHated.isDead() && (npc.calculateDistance(mostHated, true, false) <= 800);
-
- if (getRandom(10000) < 3333)
- {
- if (getRandomBoolean())
- {
- if ((npc.calculateDistance(attacker, true, false) <= 800) && npc.checkDoCastConditions(ICE_BALL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(ICE_BALL.getSkill());
- }
- }
- else
- {
- if (canReachMostHated && npc.checkDoCastConditions(ICE_BALL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(mostHated);
- npc.doCast(ICE_BALL.getSkill());
- }
- }
- }
- else if (getRandom(10000) < 1333)
- {
- if (getRandomBoolean())
- {
- if ((npc.calculateDistance(attacker, true, false) <= 800) && npc.checkDoCastConditions(SUMMON_ELEMENTAL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(SUMMON_ELEMENTAL.getSkill());
- }
- }
- else
- {
- if (canReachMostHated && npc.checkDoCastConditions(SUMMON_ELEMENTAL.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(mostHated);
- npc.doCast(SUMMON_ELEMENTAL.getSkill());
- }
- }
- }
- else if (getRandom(10000) < 1500)
- {
- if (!npc.isAffectedBySkill(SELF_NOVA.getSkillId()) && npc.checkDoCastConditions(SELF_NOVA.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(npc);
- npc.doCast(SELF_NOVA.getSkill());
- }
- }
- else if (getRandom(10000) < 1333)
- {
- if (!npc.isAffectedBySkill(REFLECT_MAGIC.getSkillId()) && npc.checkDoCastConditions(REFLECT_MAGIC.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(npc);
- npc.doCast(REFLECT_MAGIC.getSkill());
- }
- }
- break;
- }
- case GLACIER:
- {
- if (npc.isScriptValue(0) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.5)))
- {
- npc.setTarget(attacker);
- npc.doCast(ICE_STONE.getSkill());
- npc.setScriptValue(1);
- }
- break;
- }
- case BREATH:
- {
- if ((npc.getCurrentHp() < (npc.getMaxHp() / 20)) && (npc.getVariables().getInt("SUICIDE_ON", 0) == 0))
- {
- npc.getVariables().set("SUICIDE_ON", 1);
- startQuestTimer("ELEMENTAL_KILLED", 1000, npc, null);
- }
- break;
- }
- case KNIGHT:
- {
- if (npc.isCoreAIDisabled())
- {
- manageRandomAttack(world, (L2Attackable) npc);
- npc.disableCoreAI(false);
- npc.setIsImmobilized(false);
- npc.setDisplayEffect(2);
- cancelQuestTimer("ICE_RUPTURE", npc, null);
- }
- break;
- }
- case GLAKIAS:
- {
- if (npc.getCurrentHp() < (npc.getMaxHp() * 0.02))
- {
- if (npc.getVariables().getInt("OFF_SHOUT") == 0)
- {
- npc.getVariables().set("OFF_SHOUT", 1);
- npc.getVariables().set("DELAY_VAL", 2);
- npc.setTarget(attacker);
- npc.doCast(CANCEL.getSkill());
- }
- else if (npc.getVariables().getInt("OFF_SHOUT") == 1)
- {
- npc.setTarget(attacker);
- npc.doCast(CANCEL.getSkill());
- }
- }
- else if ((npc.getVariables().getInt("OFF_SHOUT") == 0) && (npc.getVariables().getInt("DELAY_VAL") == 1))
- {
- final L2Character mostHated = ((L2Attackable) npc).getMostHated();
- final boolean canReachMostHated = (mostHated != null) && !mostHated.isDead() && (npc.calculateDistance(mostHated, true, false) < 1000);
-
- if (npc.getVariables().getInt("TIMER_ON") == 0)
- {
- npc.getVariables().set("TIMER_ON", 1);
- startQuestTimer("LEADER_RANGEBUFF", getRandom(5, 30) * 1000, npc, null);
- startQuestTimer("LEADER_RANDOMIZE", 25000, npc, null);
- startQuestTimer("LEADER_DASH", 5000, npc, null);
- startQuestTimer("LEADER_DESTROY", 60000, npc, null);
- }
-
- if (getRandom(10000) < 2500)
- {
- if (getRandom(10000) < 2500)
- {
- if (npc.checkDoCastConditions(POWER_STRIKE.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(POWER_STRIKE.getSkill());
- }
- }
- else if (npc.checkDoCastConditions(POWER_STRIKE.getSkill()) && !npc.isCastingNow() && canReachMostHated)
- {
- npc.setTarget(((L2Attackable) npc).getMostHated());
- npc.doCast(POWER_STRIKE.getSkill());
- }
- }
- else if (getRandom(10000) < 1500)
- {
- if (getRandomBoolean())
- {
- if (npc.checkDoCastConditions(POINT_TARGET.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(POINT_TARGET.getSkill());
- }
- }
- else if (npc.checkDoCastConditions(POINT_TARGET.getSkill()) && !npc.isCastingNow() && canReachMostHated)
- {
- npc.setTarget(((L2Attackable) npc).getMostHated());
- npc.doCast(POINT_TARGET.getSkill());
- }
- }
- else if (getRandom(10000) < 1500)
- {
- if (getRandomBoolean())
- {
- if (npc.checkDoCastConditions(CYLINDER_THROW.getSkill()) && !npc.isCastingNow())
- {
- npc.setTarget(attacker);
- npc.doCast(CYLINDER_THROW.getSkill());
- }
- }
- else if (npc.checkDoCastConditions(CYLINDER_THROW.getSkill()) && !npc.isCastingNow() && canReachMostHated)
- {
- npc.setTarget(((L2Attackable) npc).getMostHated());
- npc.doCast(CYLINDER_THROW.getSkill());
- }
- }
- }
- break;
- }
- }
- }
- return super.onAttack(npc, attacker, damage, isSummon, skill);
- }
-
- @Override
- public String onSpellFinished(L2Npc npc, L2PcInstance player, Skill skill)
- {
- final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-
- if (tmpworld instanceof IQCNBWorld)
- {
- final IQCNBWorld world = (IQCNBWorld) tmpworld;
-
- switch (npc.getId())
- {
- case GLACIER:
- {
- if (skill == ICE_STONE.getSkill())
- {
- if (getRandom(100) < 75)
- {
- final L2Attackable breath = (L2Attackable) addSpawn(BREATH, npc.getLocation(), false, 0, false, world.getInstanceId());
- if (player != null)
- {
- breath.setIsRunning(true);
- breath.addDamageHate(player, 0, 999);
- breath.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player);
- }
- else
- {
- manageRandomAttack(world, breath);
- }
- world.spawnedMobs.add(breath);
- startQuestTimer("BLIZZARD", 20000, breath, null);
- }
- notifyEvent("SUICIDE", npc, null);
- }
- break;
- }
- case BREATH:
- {
- if (skill == SUICIDE_BREATH.getSkill())
- {
- npc.doDie(null);
- }
- break;
- }
- }
- }
- return super.onSpellFinished(npc, player, skill);
- }
-
- @Override
- public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
- {
- final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
-
- if (tmpworld instanceof IQCNBWorld)
- {
- final IQCNBWorld world = (IQCNBWorld) tmpworld;
- switch (npc.getId())
- {
- case GLAKIAS:
- {
- manageDespawnMinions(world);
- manageTimer(world, 60);
- startQuestTimer("STAGE_3_MOVIE", 60000, world.controller, null);
- break;
- }
- case FREYA_STAND:
- {
- world.isSupportActive = false;
- manageMovie(world, 19);
- manageDespawnMinions(world);
- finishInstance(world);
- DecayTaskManager.getInstance().cancel(world.freya);
- cancelQuestTimer("ATTACK_FREYA", world.supp_Jinia, null);
- cancelQuestTimer("ATTACK_FREYA", world.supp_Kegor, null);
- cancelQuestTimer("GIVE_SUPPORT", world.controller, null);
- cancelQuestTimer("CAST_BLIZZARD", world.controller, null);
- startQuestTimer("FINISH_STAGE", 16000, world.controller, null);
- startQuestTimer("FINISH_WORLD", 300000, world.controller, null);
- break;
- }
- case KNIGHT:
- {
- final L2Npc spawnedBy = npc.getVariables().getObject("SPAWNED_NPC", L2Npc.class);
- final NpcVariables var = world.controller.getVariables();
- int knightCount = var.getInt("KNIGHT_COUNT");
-
- if ((var.getInt("FREYA_MOVE") == 0) && world.isStatus(1))
- {
- var.set("FREYA_MOVE", 1);
- manageScreenMsg(world, NpcStringId.FREYA_HAS_STARTED_TO_MOVE);
- world.freya.setIsRunning(true);
- world.freya.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, MIDDLE_POINT);
- }
-
- if ((knightCount < 10) && (world.isStatus(2)))
- {
- knightCount++;
- var.set("KNIGHT_COUNT", knightCount);
-
- if (knightCount == 10)
- {
- notifyEvent("STAGE_2_MOVIE", world.controller, null);
- world.setStatus(3);
- }
- }
-
- if (spawnedBy != null)
- {
- startQuestTimer("SPAWN_KNIGHT", getRandom(30, 60) * 1000, spawnedBy, null);
- }
- world.spawnedMobs.remove(npc);
- break;
- }
- case GLACIER:
- {
- startQuestTimer("SPAWN_GLACIER", getRandom(30, 60) * 1000, world.controller, null);
- world.spawnedMobs.remove(npc);
- break;
- }
- case BREATH:
- {
- world.spawnedMobs.remove(npc);
- break;
- }
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- @Override
- public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
- {
- if (firstEntrance)
- {
- if (!player.isInParty())
- {
- managePlayerEnter(player, (IQCNBWorld) world);
- }
- else if (player.getParty().isInCommandChannel())
- {
- for (L2PcInstance players : player.getParty().getCommandChannel().getMembers())
- {
- managePlayerEnter(players, (IQCNBWorld) world);
- }
- }
- else
- {
- for (L2PcInstance players : player.getParty().getMembers())
- {
- managePlayerEnter(players, (IQCNBWorld) world);
- }
- }
- }
- else
- {
- teleportPlayer(player, world.isStatus(4) ? BATTLE_PORT : ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId());
- }
- }
-
- private void managePlayerEnter(L2PcInstance player, IQCNBWorld world)
- {
- world.playersInside.add(player);
- world.addAllowed(player.getObjectId());
- teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId(), false);
- }
-
- @Override
- protected boolean checkConditions(L2PcInstance player)
- {
- final L2Party party = player.getParty();
- final L2CommandChannel channel = party != null ? party.getCommandChannel() : null;
-
- if (player.isGM() && player.canOverrideCond(PcCondOverride.INSTANCE_CONDITIONS))
- {
- return true;
- }
-
- if (party == null)
- {
- player.sendPacket(SystemMessageId.NOT_IN_PARTY_CANT_ENTER);
- return false;
- }
- else if (channel == null)
- {
- player.sendPacket(SystemMessageId.NOT_IN_COMMAND_CHANNEL_CANT_ENTER);
- return false;
- }
- else if (player != channel.getLeader())
- {
- player.sendPacket(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER);
- return false;
- }
- else if ((channel.getMemberCount() < MIN_PLAYERS) || (channel.getMemberCount() > MAX_PLAYERS))
- {
- player.sendPacket(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER);
- return false;
- }
- for (L2PcInstance channelMember : channel.getMembers())
- {
- if (channelMember.getLevel() < MIN_LEVEL)
- {
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_S_LEVEL_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED);
- sm.addPcName(channelMember);
- party.broadcastPacket(sm);
- return false;
- }
- else if (!Util.checkIfInRange(1000, player, channelMember, true))
- {
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_IN_A_LOCATION_WHICH_CANNOT_BE_ENTERED_THEREFORE_IT_CANNOT_BE_PROCESSED);
- sm.addPcName(channelMember);
- party.broadcastPacket(sm);
- return false;
- }
- else if (System.currentTimeMillis() < InstanceManager.getInstance().getInstanceTime(channelMember.getObjectId(), TEMPLATE_ID))
- {
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MAY_NOT_RE_ENTER_YET);
- sm.addPcName(channelMember);
- party.broadcastPacket(sm);
- return false;
- }
- }
- return true;
- }
-
- private void manageRandomAttack(IQCNBWorld world, L2Attackable mob)
- {
- final List<L2PcInstance> players = new ArrayList<>();
- for (L2PcInstance player : world.playersInside)
- {
- if ((player != null) && !player.isDead() && (player.getInstanceId() == world.getInstanceId()) && !player.isInvisible())
- {
- players.add(player);
- }
- }
-
- Collections.shuffle(players);
- final L2PcInstance target = (!players.isEmpty()) ? players.get(0) : null;
- if (target != null)
- {
- mob.addDamageHate(target, 0, 999);
- mob.setIsRunning(true);
- mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
- }
- else
- {
- startQuestTimer("FIND_TARGET", 10000, mob, null);
- }
- }
-
- private void manageDespawnMinions(IQCNBWorld world)
- {
- world.canSpawnMobs = false;
- for (L2Attackable mobs : world.spawnedMobs)
- {
- if ((mobs != null) && !mobs.isDead())
- {
- mobs.doDie(null);
- }
- }
- }
-
- private void manageTimer(IQCNBWorld world, int time)
- {
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null) && (players.getInstanceId() == world.getInstanceId()))
- {
- players.sendPacket(new ExSendUIEvent(players, false, false, time, 0, "Time remaining until next battle"));
- }
- }
- }
-
- private void manageScreenMsg(IQCNBWorld world, NpcStringId stringId)
- {
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null) && (players.getInstanceId() == world.getInstanceId()))
- {
- showOnScreenMsg(players, stringId, 2, 6000);
- }
- }
- }
-
- private void manageMovie(IQCNBWorld world, int movie)
- {
- for (L2PcInstance players : world.playersInside)
- {
- if ((players != null) && (players.getInstanceId() == world.getInstanceId()))
- {
- players.showQuestMovie(movie);
- }
- }
- }
- }
|