|
Lineage II
Описание темы:revolt team |
Ссылки сообщества |
Изображения и альбомы |
Пользователи |
К странице... |
Опции темы |
30.08.2013, 13:03 | #11 |
Antihero
Регистрация: 03.04.2010
Адрес: Virtual Reality
Сообщений: 2,455
Отблагодарили 1,098 раз(а)
Рейтинг мнений:
919
|
Re: Freya Manager
|
30.08.2013, 15:36 | #12 |
Пользователь
|
Re: Freya Manager
Мои действия по переносу.
1) Переношу FreyaManager.java в data\scripts\bosses Осторожно много кода!:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package bosses; import javolution.util.FastMap; import l2rt.common.ThreadPoolManager; import l2rt.config.ConfigSystem; import l2rt.extensions.listeners.L2ZoneEnterLeaveListener; import l2rt.extensions.scripts.ScriptFile; import l2rt.gameserver.ai.CtrlIntention; import l2rt.gameserver.cache.Msg; import l2rt.gameserver.instancemanager.InstancedZoneManager; import l2rt.gameserver.instancemanager.InstancedZoneManager.InstancedZone; import l2rt.gameserver.instancemanager.QuestManager; import l2rt.gameserver.instancemanager.ZoneManager; import l2rt.gameserver.model.*; import l2rt.gameserver.model.L2Zone.ZoneType; import l2rt.gameserver.model.instances.L2NpcInstance; import l2rt.gameserver.model.quest.Quest; import l2rt.gameserver.model.quest.QuestState; import l2rt.gameserver.serverpackets.*; import l2rt.gameserver.serverpackets.ExShowScreenMessage.ScreenMessageAlign; import l2rt.gameserver.tables.NpcTable; import l2rt.gameserver.tables.ReflectionTable; import l2rt.gameserver.tables.SkillTable; import l2rt.gameserver.tables.TerritoryTable; import l2rt.util.Location; import l2rt.util.Rnd; import l2rt.util.Util; import java.util.ArrayList; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.locks.ReentrantLock; /** * ****************** * * @author Diagod * * 20.05.2011 * * ****************** * После захода в зал, здем 20 секунди ставим ролик, по окончании которого спауним гвардов * <p/> * 91.218.230.157 * 15470 юзает скилл s_item_black_freezing_core * 15469 юзает скилл s_item_freezing_core * 274506830 */ public class FreyaManager extends Quest implements ScriptFile { private static final byte DORMANT = 0; private static final byte WAITING = 1; private static final byte FIGHTING = 2; private static final byte DEAD = 3; private L2Zone _zone; private ZoneListener _zoneListener = new ZoneListener(); private final ReentrantLock lock = new ReentrantLock(); private static final int Glacier = 18853; private static final int ArchersBreath = 18854; private int instId = -1; private static final int Sirra = 32762; // Может и не нужна она здесь...18852 private static final int KegorTalk = 18846; private static final int Kegor = 18851; private static final int Jinia = 18850; private static final int JiniaStart = 32781; private static final int Controler = 18932; private static final int[][] KnightSpawns = { /*0*/ {113845, -116091, -11168, 8264}, /*1*/ {113381, -115622, -11168, 8264}, /*2*/ {113380, -113978, -11168, -8224}, /*3*/ {113845, -113518, -11168, -8224}, /*4*/ {115591, -113516, -11168, -24504}, /*5*/ {116053, -113981, -11168, -24504}, /*6*/ {116061, -115611, -11168, 24804}, /*7*/ {115597, -116080, -11168, 24804}, /*8*/ {112942, -115480, -10960, 52}, // [PosX]=113078, [PosY]=-115480, [PosZ]=-10984} /*9*/ {112940, -115146, -10960, 52}, // [PosX]=113079, [PosY]=-115154, [PosZ]=-10984} /*10*/ {112945, -114453, -10960, 52}, // [PosX]=113081, [PosY]=-114459, [PosZ]=-10984} /*11*/ {112945, -114123, -10960, 52}, // [PosX]=113077, [PosY]=-114129, [PosZ]=-10984} /*12*/ {116497, -114117, -10960, 32724}, // [PosX]=116360, [PosY]=-114125, [PosZ]=-10984} /*13*/ {116499, -114454, -10960, 32724}, // [PosX]=116359, [PosY]=-114455, [PosZ]=-10984} /*14*/ {116501, -115145, -10960, 32724}, // [PosX]=116367, [PosY]=-115141, [PosZ]=-10984} /*15*/ {116502, -115473, -10960, 32724} // [PosX]=116351, [PosY]=-115457, [PosZ]=-10984} }; public static FastMap<Long, World> worlds = new FastMap<Long, World>(); public static FastMap<L2Player, Reflection> players = new FastMap<L2Player, Reflection>(); public FreyaManager() { super("FreyaManager", 0, 99915); addKillId(29178); addKillId(29177); addKillId(29180); addKillId(29179); addKillId(25700); addKillId(25699); addKillId(18856); addKillId(18855); addKillId(Glacier); addAttackId(29180); addAttackId(18856); addAttackId(29179); addAttackId(18855); } public class World { public L2NpcInstance Npc_Freya; public L2NpcInstance Npc_Kegor; public L2NpcInstance Npc_Jinia; public L2NpcInstance controler; public ArrayList<L2NpcInstance> ArcheryKnights = new ArrayList<L2NpcInstance>(); public ScheduledFuture<?> GlacierTimer = null; public ScheduledFuture<?> _batleFailTask = null; public ScheduledFuture<?> atackKnights = null; public Reflection reflection; public boolean _setStop = false; public boolean _ishardMode = false; // Усиленая Фрея. public boolean _isBatle = false; public boolean finish = true; public long instanceId = 0; public int FreyaOnThrone; public int FreyaStand; public int Glakias; public int ArcheryKnight; public int archery = 0; public int Glaciers = 0; public int status = 0; public int stages = 0; public int tick = 0; public int _Force = 0; public World(Reflection ref) { reflection = ref; } } public static void addWorld(long id, World world) { worlds.put(id, world); } public static World getWorld(long id) { World world = worlds.get(id); if (world != null) return world; return null; } private void enterInstance(L2NpcInstance npc, L2Player player, boolean hardMode) { instId = hardMode ? 144 : 139; FastMap<Integer, InstancedZone> izs = InstancedZoneManager.getInstance().getById(instId); InstancedZoneManager izm = InstancedZoneManager.getInstance(); if (izs == null) { player.sendPacket(Msg.SYSTEM_ERROR); return; } InstancedZone iz = izs.get(0); if (iz == null) { player.sendPacket(Msg.SYSTEM_ERROR); return; } String name = iz.getName(); int time = iz.getTimelimit(); int min_level = iz.getMinLevel(); int max_level = iz.getMaxLevel(); int minMembers = iz.getMinParty(); int maxMembers = iz.getMaxParty(); if (!ConfigSystem.getBoolean("DEBUG_FREYA")) { if (player.getParty() != null) { L2CommandChannel channel = player.getParty().getCommandChannel(); if (channel != null) { if (channel.getChannelLeader().getObjectId() != player.getObjectId()) { player.sendPacket(Msg.ONLY_A_PARTY_LEADER_CAN_TRY_TO_ENTER); return; } if (channel.getMemberCount() < minMembers) { player.sendPacket(new SystemMessage("The command channel must contains at least " + minMembers + " members.")); return; } if (channel.getMemberCount() > maxMembers) { player.sendPacket(new SystemMessage("The command channel must contains not more than " + maxMembers + " members.")); return; } for (L2Player member : channel.getMembers()) { if (member == null) continue; if (member.getLevel() < min_level || member.getLevel() > max_level) { player.sendPacket(new SystemMessage(SystemMessage.C1S_LEVEL_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED).addName(member)); return; } if (member.isCursedWeaponEquipped() || member.isInFlyingTransform() || member.isDead()) { player.sendPacket(new SystemMessage(SystemMessage.C1S_QUEST_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED).addName(member)); return; } if (!player.isInRange(member, 700)) { member.sendPacket(Msg.ITS_TOO_FAR_FROM_THE_NPC_TO_WORK); player.sendPacket(Msg.ITS_TOO_FAR_FROM_THE_NPC_TO_WORK); return; } } } } } Reflection ref = new Reflection(name); ref.setInstancedZoneId(instId); for (InstancedZone i : izs.values()) { if (ref.getReturnLoc() == null) ref.setReturnLoc(i.getReturnCoords()); if (ref.getTeleportLoc() == null) ref.setTeleportLoc(i.getTeleportCoords()); ref.FillSpawns(i.getSpawnsInfo()); ref.FillDoors(i.getDoors()); } World world = new World(ref); world.instanceId = ref.getId(); world._ishardMode = hardMode; world.FreyaOnThrone = hardMode ? 29178 : 29177; // 29177 - 29180 - Зделать мобом...29178 - Экстрим фрея world.FreyaStand = hardMode ? 29180 : 29179; // 29180 - Экстрим фрея, без кресла... world.Glakias = hardMode ? 25700 : 25699; // 25700 - Для Экстрим Фреи - Дать ему АИ world.ArcheryKnight = hardMode ? 18856 : 18855; // 18856 - Для Экстрим Фреи - Зделать Мобом lock.lock(); try { addWorld(ref.getId(), world); } finally { lock.unlock(); } if (!ConfigSystem.getBoolean("DEBUG_FREYA")) { L2CommandChannel channel = player.getParty().getCommandChannel(); for (L2Player members : channel.getMembers()) { if (izm.getTimeToNextEnterInstance(name, members) > 0) { channel.broadcastToChannelMembers(new SystemMessage(SystemMessage.C1_MAY_NOT_RE_ENTER_YET).addName(members)); return; } players.put(members, ref); members.setReflection(ref); members.teleToLocation(new Location(114025 + Rnd.get(50), -112300 + Rnd.get(50), -11200)); // members.teleToLocation(iz.getTeleportCoords()); members.setVar("backCoords", ref.getReturnLoc().toXYZString()); Quest q = QuestManager.getQuest(99915); if (q != null) members.processQuestEvent(q.getName(), "", null); // Если человек проходит квест то ставим ему следующий этап квеста... QuestState hostQuest = members.getQuestState("_10286_ReunionWithSirra"); if (hostQuest != null && hostQuest.getState() != COMPLETED && hostQuest.getInt("progress") == 2 && hostQuest.getInt("cond") == 5 && hostQuest.getInt("Ex") == 2) { hostQuest.set("cond", "6"); hostQuest.playSound("ItemSound.quest_middle"); } } channel.setReflection(ref); ref.setCommandChannel(channel); ref.startCollapseTimer(time * 60000); } else { if (player.getParty() != null) { for (L2Player member : player.getParty().getPartyMembers()) { players.put(member, ref); member.setReflection(ref); member.teleToLocation(new Location(114025 + Rnd.get(50), -112300 + Rnd.get(50), -11200)); member.setVar("backCoords", member.getLoc().toXYZString()); Quest q = QuestManager.getQuest(99915); if (q != null) member.processQuestEvent(q.getName(), "", null); QuestState hostQuest = member.getQuestState("_10286_ReunionWithSirra"); if (hostQuest != null && hostQuest.getState() != COMPLETED && hostQuest.getInt("progress") == 2 && hostQuest.getInt("cond") == 5 && hostQuest.getInt("Ex") == 2) { hostQuest.set("cond", "6"); hostQuest.playSound("ItemSound.quest_middle"); } } player.getParty().setReflection(ref); ref.setParty(player.getParty()); } else { players.put(player, ref); player.setReflection(ref); player.teleToLocation(new Location(114025 + Rnd.get(50), -112300 + Rnd.get(50), -11200)); player.setVar("backCoords", player.getLoc().toXYZString()); Quest q = QuestManager.getQuest(99915); if (q != null) player.processQuestEvent(q.getName(), "", null); QuestState hostQuest = player.getQuestState("_10286_ReunionWithSirra"); if (hostQuest != null && hostQuest.getState() != COMPLETED && hostQuest.getInt("progress") == 2 && hostQuest.getInt("cond") == 5 && hostQuest.getInt("Ex") == 2) { hostQuest.set("cond", "6"); hostQuest.playSound("ItemSound.quest_middle"); } } ref.startCollapseTimer(time * 60000); } // Спауним Сирру... L2NpcInstance sirr = spawn(Sirra, 114760, -113144, -11225, 16384, world); sirr.setIsInvul(true); for (L2Player players : world.reflection.getPlayers()) for (L2Effect e : players.getEffectList().getAllEffects()) e.exit(); } private L2NpcInstance spawn(int npcId, int X, int Y, int Z, int head, World world) { if (world._setStop) return null; try { L2NpcInstance npc = NpcTable.getTemplate(npcId).getNewInstance(); if (npc != null) { npc.setReflection(world.instanceId); npc.setSpawnedLoc(new Location(X, Y, Z, head)); npc.onSpawn(); npc.spawnMe(npc.getSpawnedLoc()); return npc; } } catch (Exception e) { } return null; } private void startWave(int stage, final World world) { if (stage == 1) { world.stages = 1; world._isBatle = true; for (L2Player player : world.reflection.getPlayers()) player.showQuestMovie(15); // Первое видео Фреи, она там обещает, что нам рогалики будут... ReflectionTable.getInstance().get(world.reflection.getId()).closeDoor(23140101); // Закрываем двери, что бы не заманивали в другую комнату))) ThreadPoolManager.getInstance().scheduleGeneral(new Timer(0, world) { @Override public void run() { world.finish = false; world.Npc_Freya = spawn(world.FreyaOnThrone, 114720, -117068, -11078, 16384, world); world.Npc_Freya.setRunning(); startAll(world); screenMessage(world.reflection, 1801086, ScreenMessageAlign.TOP_CENTER, true); spawnKnights(world); spawnGlaciers(world); } }, 53500); } if (stage == 2) { world.stages = 2; world._setStop = true; for (L2Player player : world.reflection.getPlayers()) player.showQuestMovie(16); // Второе видео, это после того как мы убиваем первый раз Фрею которая на диванчике... ThreadPoolManager.getInstance().scheduleGeneral(new Timer(0, world) { @Override public void run() { world.finish = false; world._setStop = false; world.Npc_Freya = spawn(world.FreyaOnThrone, 114719, -117450, -10673, 16384, world); world.Npc_Freya.setIsInvul(true); world.Npc_Freya.setParalyzed(true); world._setStop = true; startAll(world); for (L2Player members : world.reflection.getPlayers()) members.sendPacket(new ExSendUIEvent(members, false, false, 60, 0, "Время до следующего боя")); ThreadPoolManager.getInstance().scheduleGeneral(new Timer(60, world), 100); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { world._setStop = false; screenMessage(world.reflection, 1801087, ScreenMessageAlign.TOP_CENTER, true); spawnKnights(world); spawnGlaciers(world); batleFailTask(world); ThreadPoolManager.getInstance().scheduleGeneral(new Timer(360, world), 100); } }, 60100); } }, 21800); } if (stage == 3) { world.stages = 3; for (L2Player player : world.reflection.getPlayers()) player.showQuestMovie(17); // Четвертое видео, это когда мы убиваем Клакиеса и Фрея вылазит с кресла... ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { for (L2Player player : world.reflection.getPlayers()) player.sendPacket(new ChangeZoneInfo(0, 2)); } }, 15000); ThreadPoolManager.getInstance().scheduleGeneral(new Timer(0, world) { @Override public void run() { world.finish = false; world.status = 5; world._setStop = false; startAll(world); spawnKnights(world); spawnGlaciers(world); //batleFailTask(world); world.Npc_Freya = spawn(world.FreyaStand, 114720, -117068, -11078, 16384, world); screenMessage(world.reflection, 1801088, ScreenMessageAlign.TOP_CENTER, true); } }, 21800); } } private void stopAll(World world) { if (world._batleFailTask != null) world._batleFailTask.cancel(false); world._setStop = true; for (L2Player plr : world.reflection.getPlayers()) { plr.abortCast(true); plr.abortAttack(true, false); plr.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); plr.setImobilised(true); plr.setIsInvul(true); } for (L2NpcInstance npc : world.reflection.getMonsters()) { npc.setIsInvul(true); npc.abortCast(true); npc.abortAttack(true, false); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE); npc.setImobilised(true); } world.controler = null; for (L2Player player : world.reflection.getPlayers()) for (L2Effect e : player.getEffectList().getAllEffects()) if (e.getSkill().getId() == 6437) e.exit(); if (world.GlacierTimer != null) world.GlacierTimer.cancel(false); if (world.atackKnights != null) world.atackKnights.cancel(false); } private void startAll(World world) { for (L2Player plr : world.reflection.getPlayers()) { plr.setImobilised(false); plr.setIsInvul(false); plr.leaveMovieMode(); } for (L2NpcInstance npc : world.reflection.getMonsters()) { npc.setIsInvul(false); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ACTIVE); npc.setImobilised(false); } } private void endStage(World world) { world.Glaciers = 0; world.controler = null; world.ArcheryKnights.clear(); for (L2Spawn s : world.reflection.getSpawns()) if (s.getNpcId() != Sirra) s.despawnAll(); for (L2NpcInstance npc : world.reflection.getMonsters()) npc.deleteMe(); if (world.GlacierTimer != null) world.GlacierTimer.cancel(false); if (world._batleFailTask != null) world._batleFailTask.cancel(false); if (world.atackKnights != null) world.atackKnights.cancel(false); for (L2Player player : world.reflection.getPlayers()) for (L2Effect e : player.getEffectList().getAllEffects()) if (e.getSkill().getId() == 6437) e.exit(); } private void atackKnights(World world) { int attackTime = 0; int attackCount = 0; if (world._ishardMode) { switch (world.stages) { case 1: attackTime = 25; attackCount = 4; break; case 2: attackTime = 25; attackCount = 4; break; case 3: attackTime = 20; attackCount = 4; break; case 4: attackTime = 20; attackCount = 4; break; } } else { switch (world.stages) { case 1: attackTime = 30; attackCount = 1; break; case 2: attackTime = 30; attackCount = 2; break; case 3: attackTime = 45; attackCount = 2; break; case 4: attackTime = 30; attackCount = 2; break; } } final World wworld = world; for (int i = 0; i < attackCount; i++) { final L2NpcInstance mob = world.ArcheryKnights.get(Rnd.get(world.ArcheryKnights.size())); world.ArcheryKnights.remove(mob); mob.setNpcState(2); mob.setParalyzed(false); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { if (!wworld._setStop) { L2NpcInstance mob2 = spawn(wworld.ArcheryKnight, mob.getSpawnedLoc().x, mob.getSpawnedLoc().y, mob.getSpawnedLoc().z, 0, wworld); wworld.ArcheryKnights.add(mob2); mob2.setNpcState(1); mob2.setParalyzed(true); } } }, 20000); } // Запуск следующей разморозки кнайта... world.atackKnights = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { atackKnights(wworld); } }, attackTime * 1000); } private void spawnKnights(World world) { for (int i = 0; i < KnightSpawns.length; i++) { int spawn[] = KnightSpawns[i]; L2NpcInstance mob = spawn(world.ArcheryKnight, spawn[0], spawn[1], spawn[2], 0, world); mob.setNpcState(1); world.ArcheryKnights.add(mob); mob.setParalyzed(true); } if (world.status != 3) { spawn(world.ArcheryKnight, 114713, -115109, -11202, 16456, world); spawn(world.ArcheryKnight, 114008, -115080, -11202, 3568, world); spawn(world.ArcheryKnight, 114422, -115508, -11202, 12400, world); spawn(world.ArcheryKnight, 115023, -115508, -11202, 20016, world); spawn(world.ArcheryKnight, 115459, -115079, -11202, 27936, world); atackKnights(world); } } private void spawnGlaciers(World world) { int spawnTime = -1; if (world._ishardMode) { switch (world.stages) { case 1: spawnTime = 25; break; case 2: spawnTime = 20; break; case 3: spawnTime = 20; break; case 4: spawnTime = 20; break; } } else { switch (world.stages) { case 1: spawnTime = 45; break; case 2: spawnTime = 30; break; case 3: spawnTime = 30; break; case 4: spawnTime = 0; break; } } if (spawnTime > 0 && world.Glaciers < 7) { if (!world._setStop) { int spawn[] = TerritoryTable.getInstance().getRandomPoint(99911999); final L2NpcInstance mob = spawn(Glacier, spawn[0], spawn[1], -11200, 0, world); if (world.controler == null) { world.controler = spawn(Controler, 114707, -114797, -11199, 0, world); world.controler.setIsInvul(true); world.controler.setParalyzed(true); } if (world.controler != null) world.controler.setNpcState(world.Glaciers); mob.setNpcState(1); world.Glaciers++; if (world.Glaciers > 7) world.Glaciers = 7; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { mob.setNpcState(2); } }, 1500); for (L2Player player : world.reflection.getPlayers()) SkillTable.getInstance().getInfo(6437, world.Glaciers).getEffects(mob, player, false, false); } } final World wworld = world; world.GlacierTimer = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { spawnGlaciers(wworld); } }, spawnTime * 1000); } private void moveTo(L2NpcInstance npc, Location loc) { if (npc != null) { int heading = (int) (Util.calculateAngleFrom(npc.getX(), npc.getY(), loc.x, loc.y) * 182.04444444399999); npc.setRunning(); npc.moveToLocation(loc.x, loc.y, loc.z, heading, true); npc.getSpawn().setLocx(loc.x); npc.getSpawn().setLocy(loc.y); npc.getSpawn().setLocz(loc.z); } } @Override public String onEvent(String event, QuestState st, final L2NpcInstance npc) { if (event == null || st == null || npc == null) return ""; if (npc.getNpcId() == KegorTalk) { if (event.equalsIgnoreCase("killFreya")) { for (L2Player player : npc.getReflection().getPlayers()) player.showQuestMovie(20); // Последнее видео, это когда Кегор делает "сикирь бошка" Фрее... ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { for (L2Player player : npc.getReflection().getPlayers()) player.leaveMovieMode(); } }, 57100); npc.getReflection().startCollapseTimer(57800); // Если человек проходит квест то ставим ему завершение данного этапа... for (L2Player player : npc.getReflection().getPlayers()) { QuestState hostQuest = player.getQuestState("_10286_ReunionWithSirra"); if (hostQuest != null && hostQuest.getState() != COMPLETED && hostQuest.getInt("progress") == 2 && hostQuest.getInt("cond") == 6 && hostQuest.getInt("Ex") == 2) { hostQuest.set("cond", "7"); hostQuest.set("progress", "3"); hostQuest.playSound("ItemSound.quest_middle"); } } for (L2Player player : players.keySet()) { if (QuestManager.getQuest(99915) != null) { String qn = QuestManager.getQuest(99915).getName(); if (qn != null) { QuestState qs = player.getQuestState(qn); if (qs != null) qs.exitCurrentQuest(true); } } players.remove(player); } } } else if (npc.getNpcId() == Sirra) { if (event.equalsIgnoreCase("toEnterCastle")) st.getPlayer().teleToLocation(114694, -113700, -11200); } else if (npc.getNpcId() == JiniaStart) { if (event.equalsIgnoreCase("toEnter")) { if (ConfigSystem.getBoolean("DEBUG_FREYA")) { enterInstance(npc, st.getPlayer(), false); return ""; } else { if (players.get(st.getPlayer()) != null) { st.getPlayer().setReflection(players.get(st.getPlayer())); st.getPlayer().teleToLocation(114025, -112300, -11200); return ""; } else { if (st.getPlayer().getParty() != null && st.getPlayer().getParty().getCommandChannel() != null && st.getPlayer().getParty().getCommandChannel().getChannelLeader().getObjectId() == st.getPlayer().getObjectId()) { enterInstance(npc, st.getPlayer(), false); return ""; } else { showHtmlFile(st.getPlayer(), "data/html/default/jinia_npc2007.htm"); return ""; } } } } else if (event.equalsIgnoreCase("toEnterHard")) { if (ConfigSystem.getBoolean("DEBUG_FREYA")) { enterInstance(npc, st.getPlayer(), true); return ""; } else { if (players.get(st.getPlayer()) != null) { st.getPlayer().setReflection(players.get(st.getPlayer())); st.getPlayer().teleToLocation(114025, -112300, -11200); return ""; } else { if (st.getPlayer().getParty() != null && st.getPlayer().getParty().getCommandChannel() != null && st.getPlayer().getParty().getCommandChannel().getChannelLeader().getObjectId() == st.getPlayer().getObjectId()) { enterInstance(npc, st.getPlayer(), true); return ""; } else { showHtmlFile(st.getPlayer(), "data/html/default/jinia_npc2007.htm"); return ""; } } } } } else if (npc != null && npc.getReflectionId() > 0) { World world = getWorld(npc.getReflectionId()); if (event.equalsIgnoreCase("respawnKnight")) { L2NpcInstance knight = addSpawnToInstance(world.ArcheryKnight, new Location(npc.getSpawn().getLocx(), npc.getSpawn().getLocy(), npc.getSpawn().getLocz(), npc.getSpawn().getHeading()), 0, world.instanceId); knight.setNpcState(1); knight.setImobilised(true); } } return null; } @Override public String onKill(L2NpcInstance npc, QuestState st) { if (npc.getReflectionId() > 0) { final World world = getWorld(npc.getReflectionId()); if (npc.getNpcId() == world.FreyaOnThrone && world.status == 1) { world.finish = true; stopAll(world); endStage(world); world.status = 2; startWave(2, world); } else if (npc.getNpcId() == world.ArcheryKnight) { if (world.status == 2) { world.archery++; if (world.archery >= 11) { stopAll(world); endStage(world); world.status = 3; for (L2Player players : world.reflection.getPlayers()) players.showQuestMovie(23); // Третье видео, это когда Клакиес выпрыгивает из пола... ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { world._setStop = false; startAll(world); spawn(world.Glakias, 114722, -114797, -11200, 16384, world); spawnKnights(world); spawnGlaciers(world); if (world._ishardMode) { ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { for (L2Player members : world.reflection.getPlayers()) members.sendPacket(new ExSendUIEvent(members, false, false, world.tick, 0, "Время окончания боя")); } }, 1500); } } }, 7000); } } } // Это когда мы убиваем Клакиеса... else if (npc.getNpcId() == world.Glakias && world.status == 3) { ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { world.finish = true; world.status = 4; endStage(world); world._setStop = true; for (L2Player members : world.reflection.getPlayers()) members.sendPacket(new ExSendUIEvent(members, false, false, 60, 0, "Время до следующего боя")); ThreadPoolManager.getInstance().scheduleGeneral(new Timer(60, world), 100); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { startWave(3, world); } }, 60100); } }, 2500); } else if (npc.getNpcId() == world.FreyaStand && world.status == 6) { world.finish = true; world._setStop = true; endStage(world); for (L2Player players : world.reflection.getPlayers()) players.showQuestMovie(19); // Пятое видео, это когда мы убиваем Фрею окончательно... ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { for (L2Player player : world.reflection.getPlayers()) player.sendPacket(new ChangeZoneInfo(0, 1)); } }, 500); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { world._setStop = false; world.Npc_Freya = spawn(world.FreyaStand, 114767, -114795, -11200, 0, world); world.Npc_Freya.setCurrentHp((double) 1, true); world.Npc_Freya.setParalyzed(true); world.Npc_Freya.setIsInvul(true); world.Npc_Freya.setRHandId(15280); world.Npc_Freya.setNpcState(0); spawn(KegorTalk, 114672, -114793, -11200, 0, world); world._setStop = true; } }, 1000); // Ставим время отката рефлекта для всех кто заходил, а не для тех кто в нем сразу после убийства фреи... for (L2Player player : players.keySet()) { if (player.getReflectionId() != npc.getReflectionId()) continue; player.setVar(player.getReflection().getName(), String.valueOf(System.currentTimeMillis())); } } else if (npc.getNpcId() == Glacier) { npc.setNpcState(3); if (world.Glaciers != 0) world.Glaciers--; if (world.controler != null) world.controler.setNpcState(world.Glaciers); if (world.Glaciers > 0) for (L2Player tmpPlayer : world.reflection.getPlayers()) SkillTable.getInstance().getInfo(6437, world.Glaciers).getEffects(npc, tmpPlayer, false, false); npc.setNpcState(3); npc.deleteMe(); if (!world._setStop) spawn(ArchersBreath, npc.getX(), npc.getY(), npc.getZ(), 0, world); if (world.Glaciers == 0) { world.controler.setNpcState(8); for (L2Player player : world.reflection.getPlayers()) for (L2Effect e : player.getEffectList().getAllEffects()) if (e.getSkill().getId() == 6437) e.exit(); for (L2Player tmpPlayer : world.reflection.getPlayers()) SkillTable.getInstance().getInfo(6301, 1).getEffects(npc, tmpPlayer, false, false); } } } return null; } @Override public String onAttack(final L2NpcInstance npc, QuestState st) { if (npc.getReflectionId() > 0) { final World world = getWorld(npc.getReflectionId()); if (npc.getNpcId() == world.FreyaStand && npc.getCurrentHp() < npc.getMaxHp() * 0.30 && world.status == 5) { world.stages = 4; world.finish = true; stopAll(world); npc.setParalyzed(true); world.status = 6; for (L2Player players : world.reflection.getPlayers()) players.showQuestMovie(18); // Это когда выбегает Кегор с Зиниеей... ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { world.finish = false; npc.setParalyzed(false); startAll(world); world._setStop = false; world.Npc_Kegor = spawn(Kegor, 114690, -114797, -11200, 16260, world); world.Npc_Kegor.setRunning(); world.Npc_Kegor.setIsInvul(true); world.Npc_Jinia = spawn(Jinia, 114727, -114700, -11200, 16260, world); world.Npc_Jinia.setRunning(); world.Npc_Jinia.setIsInvul(true); screenMessage(world.reflection, 1801089, ScreenMessageAlign.TOP_CENTER, true); } }, 28000); } else if (npc.getNpcId() == world.ArcheryKnight && npc.isParalyzed()) { npc.setNpcState(2); npc.setImobilised(false); npc.setParalyzed(false); startQuestTimer("respawnKnight", 20000, npc, null); } } return super.onAttack(npc, st); } public void batleFailTask(World world) { if (world._ishardMode && world.status != 1 && world.status != 5) { for (L2Player members : world.reflection.getPlayers()) members.sendPacket(new ExSendUIEvent(members, false, false, 360, 0, "Время окончания боя")); final World wworld = world; world._batleFailTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { batleFail(wworld); } }, 6 * 60 * 1000); } } public void batleFail(World world) // на первый этап дается 5 минут { endStage(world); world._setStop = true; for (L2Player player : world.reflection.getPlayers()) player.showQuestMovie(22); // Если мы не вложились во время final World wworld = world; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { for (L2Player player : wworld.reflection.getPlayers()) player.leaveMovieMode(); } }, 21000); world.reflection.startCollapseTimer(21300); } private class Timer implements Runnable { private int time = 0; private World world = null; @Override public void run() { if (time < 1) return; world.tick = time; ThreadPoolManager.getInstance().scheduleGeneral(new Timer(time - 1, world), 1000); } public Timer(int _time, World _world) { time = _time; world = _world; } } public class ZoneListener extends L2ZoneEnterLeaveListener { @Override public void objectEntered(L2Zone zone, L2Object object) { if (object != null && object.isPlayer() && !object.inObserverMode()) { L2Player player = (L2Player) object; final World world = getWorld(player.getReflectionId()); if (world != null) { if (zone.getId() == 702123 && world.status < 1) { world.status = 1; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { @Override public void run() { startWave(1, world); // Запуск первого этапа, выползает Фрея на диванчике с пивком, её нужно отиметь... } } , 20000); } } } } @Override public void objectLeaved(L2Zone zone, L2Object object) { } } public static boolean isBatle(L2Player player) { World world = getWorld(player.getReflectionId()); if (world != null) return world._isBatle; return false; } public void playSound(L2NpcInstance npc, String sound) { npc.broadcastPacket(new PlaySound(sound)); //for(L2Player player : ref.getPlayers()) // player.sendPacket(new PlaySound(1, sound, 1)); } public void screenMessage(Reflection ref, int id, ScreenMessageAlign align, boolean bool) { for (L2Player members : ref.getPlayers()) members.sendPacket(new ExShowScreenMessage(id, 6000, align, true, 1, -1, bool)); } private L2Skill getSkill(int id, int level) { return SkillTable.getInstance().getInfo(id, level); } public void onLoad() { _zone = ZoneManager.getInstance().getZoneById(ZoneType.epic, 702123, false); _zone.getListenerEngine().addMethodInvokedListener(_zoneListener); } public void onReload() { _zone.getListenerEngine().removeMethodInvokedListener(_zoneListener); } public void onShutdown() { } } 2) Переношу АИ фреи Freya.java в data\scripts\ai Острожно, сново много кода:Свернуть ↑
Свернуть ↑Развернуть ↓
Код:
package ai; import l2rt.common.ThreadPoolManager; import l2rt.gameserver.ai.CtrlIntention; import l2rt.gameserver.ai.Mystic; import l2rt.gameserver.model.L2Character; import l2rt.gameserver.model.L2Player; import l2rt.gameserver.model.L2Skill; import l2rt.gameserver.model.Reflection; import l2rt.gameserver.model.instances.L2NpcInstance; import l2rt.gameserver.serverpackets.ExShowScreenMessage; import l2rt.gameserver.serverpackets.ExShowScreenMessage.ScreenMessageAlign; import l2rt.gameserver.serverpackets.PlaySound; import l2rt.gameserver.tables.SkillTable; import l2rt.util.Location; import l2rt.util.Rnd; import bosses.FreyaManager; import bosses.FreyaManager.World; /** * @author Diagod * 27.05.2011 **/ public class Freya extends Mystic { public Freya(L2Character actor) { super(actor); AI_TASK_DELAY = 100; AI_TASK_ACTIVE_DELAY = 100; } private int s_freya_eternal_blizzard1 = 6274; private int s_freya_eternal_blizzard_power1 = 6275; private int s_freya_eternal_blizzard_signal1 = 6276; @Override protected boolean thinkActive() { L2NpcInstance actor = getActor(); if(actor == null) return true; if(getIntention() == CtrlIntention.AI_INTENTION_ACTIVE) for(L2Player player : actor.getReflection().getPlayers()) if(player != null) { if(player.isDead()) continue; if(Rnd.getRnd(600000)) continue; player.addDamageHate(actor, 0, 100); // Это нужно, чтобы гвард не перестал атаковать цель после первых ударов actor.setRunning(); // Включаем бег... actor.setAttackTimeout(Integer.MAX_VALUE + System.currentTimeMillis()); // Это нужно, чтобы не сработал таймаут actor.getAI().setAttackTarget(player); // На всякий случай, не обязательно делать actor.getAI().changeIntention(CtrlIntention.AI_INTENTION_ATTACK, player, null); // Переводим в состояние атаки actor.getAI().addTaskAttack(player); // Добавляем отложенное задание атаки, сработает в самом конце движения return true; } return true; } @Override public void startAITask() { final L2NpcInstance actor = getActor(); if(_aiTask == null && actor != null) ThreadPoolManager.getInstance().scheduleGeneral(new Runnable(){ @Override public void run() { setAITask(actor); } }, 6000); super.startAITask(); } @Override public void onIntentionAttack(L2Character target) { L2NpcInstance actor = getActor(); if(actor == null) return; if(target.getNpcId() == 18855 || target.getNpcId() == 18856 || target.getNpcId() == 18854 || target.getNpcId() == 25699 || target.getNpcId() == 25700 || target.getNpcId() == 18853 || target.getNpcId() == 29179 || target.getNpcId() == 29180 || target.getNpcId() == 29177 || target.getNpcId() == 29178) { setIntention(CtrlIntention.AI_INTENTION_ACTIVE); return; } super.onIntentionAttack(target); } public static enum Methods { AddMoveToDesire, AddUseSkillDesire, AddTimerEx } private void runMethod(final Methods method, int time, final Object... arg) { final L2NpcInstance npc = getActor(); ThreadPoolManager.getInstance().scheduleGeneral(new Runnable(){ @Override public void run() { switch(method) { case AddMoveToDesire: npc.setRunning(); addTaskMove(new Location((Integer) arg[0], (Integer) arg[1], (Integer) arg[2], (Integer) arg[3]), true); break; case AddUseSkillDesire: L2Character target = getAttackTarget(); if(target != null) addTaskCast(target, (L2Skill) arg[0]); break; case AddTimerEx: World world = FreyaManager.getWorld(npc.getReflectionId()); if(((String) arg[0]).equalsIgnoreCase("TIMER_eternal_blizzard") && !world.finish) { boolean isHardmode = world._ishardMode; String voice = ""; screenMessage(npc.getReflection(), 1801111, ScreenMessageAlign.TOP_CENTER, false); // Я чувствую сильное влияние магии! switch(Rnd.get(3)) { case 0: voice = "SystemMsg_ru.freya_voice_09"; break; case 1: voice = "SystemMsg_ru.freya_voice_10"; break; case 2: voice = "SystemMsg_ru.freya_voice_11"; break; default: System.out.println("Error > FreyaManeger.runMethod.AddTimerEx.Rnd.get(3)"); break; } npc.broadcastPacket(new PlaySound(voice)); if(isHardmode) // HardMode??? { if(world._Force == 0 && npc.getCurrentHp() < npc.getMaxHp() * 0.80 || world._Force == 1 && npc.getCurrentHp() < npc.getMaxHp() * 0.60 || world._Force == 2 && npc.getCurrentHp() < npc.getMaxHp() * 0.40 || world._Force == 3 && npc.getCurrentHp() < npc.getMaxHp() * 0.20) { runMethod(Methods.AddUseSkillDesire, 2000, getSkill(6697, 1)); world._Force++; } else runMethod(Methods.AddUseSkillDesire, 2000, getSkill(6275, 1)); if(world.stages == 1) runMethod(Methods.AddTimerEx, (Rnd.get(5) + 40) * 1000, "TIMER_eternal_blizzard"); else if(world.stages == 3) runMethod(Methods.AddTimerEx, (Rnd.get(5) + 35) * 1000, "TIMER_eternal_blizzard"); } else { runMethod(Methods.AddUseSkillDesire, 2000, getSkill(6274, 1)); runMethod(Methods.AddTimerEx, (Rnd.get(5) + 55) * 1000, "TIMER_eternal_blizzard"); } } else if(((String) arg[0]).equalsIgnoreCase("TIMER_use_freya_buff")) { addTaskCast(npc, getSkill(6284, 1)); runMethod(Methods.AddTimerEx, 15 * 1000, "TIMER_use_freya_buff"); } break; } } }, time); } private void setAITask(L2NpcInstance npc) { World world = FreyaManager.getWorld(npc.getReflectionId()); boolean isHardmode = world._ishardMode; switch(world.stages) { case 1: if(isHardmode) { clearNextAction(); clearTasks(); runMethod(Methods.AddUseSkillDesire, 100, getSkill(6285, 1)); runMethod(Methods.AddMoveToDesire, 3000, 114730, -114805, -11200, 50); screenMessage(npc.getReflection(), 1801097, ScreenMessageAlign.TOP_CENTER, false); // Фрея начинает двигаться. runMethod(Methods.AddTimerEx, 60000, "TIMER_eternal_blizzard", isHardmode); //runMethod(Methods.AddTimerEx, 15000, "TIMER_use_freya_buff", isHardmode); } else { clearNextAction(); clearTasks(); runMethod(Methods.AddMoveToDesire, 3000, 114730, -114805, -11200, 50); screenMessage(npc.getReflection(), 1801097, ScreenMessageAlign.TOP_CENTER, false); // Фрея начинает двигаться. runMethod(Methods.AddTimerEx, 60000, "TIMER_eternal_blizzard", isHardmode); //runMethod(Methods.AddTimerEx, 15000, "TIMER_use_freya_buff", isHardmode); } break; case 3: if(isHardmode) { clearNextAction(); clearTasks(); runMethod(Methods.AddUseSkillDesire, 100, getSkill(6285, 1), 1000000); runMethod(Methods.AddMoveToDesire, 10000, 114730, -114805, -11200, 50); screenMessage(npc.getReflection(), 1801097, ScreenMessageAlign.TOP_CENTER, false); // Фрея начинает двигаться. runMethod(Methods.AddTimerEx, 50000, "TIMER_eternal_blizzard", isHardmode); //runMethod(Methods.AddTimerEx, 15000, "TIMER_use_freya_buff", isHardmode); } else { clearNextAction(); clearTasks(); runMethod(Methods.AddMoveToDesire, 5000, 114730, -114805, -11200, 50); screenMessage(npc.getReflection(), 1801097, ScreenMessageAlign.TOP_CENTER, false); // Фрея начинает двигаться. runMethod(Methods.AddTimerEx, 50000, "TIMER_eternal_blizzard", isHardmode); //runMethod(Methods.AddTimerEx, 15000, "TIMER_use_freya_buff", isHardmode); } break; } } /*else if( ( isMove ) == 1 ) { if(Rnd(10000) < 3333 ) { if( gg->Rand(10000) < 5000 ) { if( myself->Skill_GetConsumeMP(Ice_Ball) < ( attacker + 400 ) && myself->Skill_GetConsumeHP(Ice_Ball) < ( attacker + 328 ) && myself->Skill_InReuseDelay(Ice_Ball) == 0 ) { myself->AddUseSkillDesire(attacker,Ice_Ball,0,1,1000000); } } else if( myself->Skill_GetConsumeMP(Ice_Ball) < ( attacker + 400 ) && myself->Skill_GetConsumeHP(Ice_Ball) < ( attacker + 328 ) && myself->Skill_InReuseDelay(Ice_Ball) == 0 ) { myself->AddUseSkillDesire(( myself + 1504 ),Ice_Ball,0,1,1000000); } } if( gg->Rand(10000) < 800 ) { if( gg->Rand(10000) < 5000 ) { if( myself->Skill_GetConsumeMP(Summon_Elemental) < ( attacker + 400 ) && myself->Skill_GetConsumeHP(Summon_Elemental) < ( attacker + 328 ) && myself->Skill_InReuseDelay(Summon_Elemental) == 0 ) { myself->AddUseSkillDesire(attacker,Summon_Elemental,0,1,1000000); } ( myself + 1160 ) = gg->GetIndexFromCreature(attacker); } else if( myself->Skill_GetConsumeMP(Summon_Elemental) < ( attacker + 400 ) && myself->Skill_GetConsumeHP(Summon_Elemental) < ( attacker + 328 ) && myself->Skill_InReuseDelay(Summon_Elemental) == 0 ) { myself->AddUseSkillDesire(( myself + 1504 ),Summon_Elemental,0,1,1000000); } ( myself + 1160 ) = gg->GetIndexFromCreature(( myself + 1504 )); } if( gg->Rand(10000) < 1500 ) { if( myself->Skill_GetConsumeMP(Self_Nova) < ( attacker + 400 ) && myself->Skill_GetConsumeHP(Self_Nova) < ( attacker + 328 ) && myself->Skill_InReuseDelay(Self_Nova) == 0 ) { myself->AddUseSkillDesire(attacker,Self_Nova,0,1,1000000); } } if( gg->Rand(10000) < 500 ) { ( myself + 1184 ) = 1; myself->AddTimerEx(TIMER_enable_death_clack,( 15 * 1000 )); h0 = myself->GetMaxHateInfo(0); if( myself->IsNullCreature(( h0 + 8 )) == 0 ) { if( debug_mode ) { myself->Say("эLX а. " + ( ( h0 + 8 ) + 344 )); } myself->AddUseSkillDesire(( h0 + 8 ),Death_Clack,0,1,10000000); } if( is_hard_mode != 1 ) { i0 = Death_Clack_Count; // 2 } else { i0 = Death_Clack_Count_Hard; // 3 } select(i0) { case 2: if( myself->GetHateInfoCount() >= 2 ) { h0 = myself->GetNthHateInfo(0,( gg->Rand(9) + 1 ),0); if( myself->IsNullHateInfo(h0) == 0 ) { if( myself->IsNullCreature(( h0 + 8 )) == 0 ) { if( debug_mode ) { myself->Say("эLX а. " + ( ( h0 + 8 ) + 344 )); } myself->AddUseSkillDesire(( h0 + 8 ),Death_Clack,0,1,10000000); } } } break; case 3: if( myself->GetHateInfoCount() >= 3 ) { h0 = myself->GetNthHateInfo(0,( gg->Rand(4) + 1 ),0); if( myself->IsNullHateInfo(h0) == 0 ) { if( myself->IsNullCreature(( h0 + 8 )) == 0 ) { if( debug_mode ) { myself->Say("эLX а. " + ( ( h0 + 8 ) + 344 )); } myself->AddUseSkillDesire(( h0 + 8 ),Death_Clack,0,1,10000000); } } h0 = myself->GetNthHateInfo(0,( gg->Rand(( myself->GetHateInfoCount() - 1 )) + 1 ),0); if( myself->IsNullHateInfo(h0) == 0 ) { if( myself->IsNullCreature(( h0 + 8 )) == 0 ) { if( debug_mode ) { myself->Say("эLX а. " + ( ( h0 + 8 ) + 344 )); } myself->AddUseSkillDesire(( h0 + 8 ),Death_Clack,0,1,10000000); } } } break; } } }*/ public void screenMessage(Reflection ref, int id, ScreenMessageAlign align, boolean bool) { for(L2Player members : ref.getPlayers()) members.sendPacket(new ExShowScreenMessage(id, 6000, align, true, 1, -1, bool)); } private L2Skill getSkill(int id, int level) { return SkillTable.getInstance().getInfo(id, level); } @Override public boolean isGlobalAI() { return true; } public boolean isNotReturnHome() { return true; } } 3) В базе делаю так 4) Компилирую сборку. Ошибок при компиляции нет. 5) Заменяю lib файлы на рабочем ГС и добавляю в датапак файлы FreyaManager.java и Freya.java. В конфиг вывел debug=true и захожу туда одним чаром. На 3й стадии фрея не появляется , борюсь с этим уже не первый день. Белефа так перетащил работает, а тут ни как не соображу... Самое неудобное что ГС молчит, ни ошибок, ни предупреждений. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Продам] Сборки High Five Part 5, Freya | DiagoD | Рынок / Marketplace | 63 | 17.12.2018 11:06 |
Подскажите Пожалуйста | Jarvis | Aion | 19 | 08.01.2013 01:41 |
Продам сервер Lineage Freya x20 | MrTony | Рынок / Marketplace | 8 | 23.12.2010 14:20 |
Freya зборки | Croaton | Lineage II | 3 | 15.12.2010 09:43 |
[Гайд]Редактируем текстовые файлы клиента | MMd | Клиент | 0 | 27.01.2010 13:59 |