Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
offtop
DiagoD Написал:Не то)
Там в АИ включается бег и задается движение)
Он просто упустил, что-то когда переносил.
Фрея там полностью рабочая.
Ну по названию похоже на запуск таски
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 101
Тем: 28
Зарегистрирован: Jun 2013
Репутация:
53
Мои действия по переносу.
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й стадии фрея не появляется , борюсь с этим уже не первый день. Белефа так перетащил работает, а тут ни как не соображу... Самое неудобное что ГС молчит, ни ошибок, ни предупреждений.
|