Здраствуйте форумчане в общем переделал с питона на яву Эвент нападения на город и теперь выдает ошибку(сборка Lovely 15rev):
Error on: C:\server\game\data\scripts\custom\ahosey\MonstersAttack.java.error.log
Line: -1 - Column: -1
compilation failed
Cам скрипт:
package custom.ahosey;
import ru.catssoftware.gameserver.Announcements;
import ru.catssoftware.gameserver.ThreadPoolManager;
import ru.catssoftware.gameserver.ai.CtrlIntention;
import ru.catssoftware.gameserver.instancemanager.QuestManager;
import ru.catssoftware.gameserver.model.L2CharPosition;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
/**
* Created by kuksin-mv on 12.05.2015.
*/
public class MonstersAttack extends Quest
{
// Задержка перед началом эвента после рестарта (в милисекундах 1сек == 1000мс)
private static final int START_TIME = 120000;
// автозапуск через
private static final int RESTART_TIME = 3600000;
// Босс
private static final int RAID_BOSS = 208621;
// Награда за боса
private static final int REWARD_BOSS = 20012;
private static final int REWARD_BOSS_COUNT = 3000;
// Список мобов
private static final int MOB_1 = 500100;
private static final int MOB_2 = 500200;
private static final int MOB_3 = 500300;
private static final int MOB_4 = 22123;
private static final int MOB_5 = 22126;
private static final int MOB_6 = 22132;
//Если true Выдает награду в зависимости от убитого моба
private static final boolean oneByOneReward = false;
// Награда за любого монстра
// Работает если oneByOneReward = false
private static final int REWARD_MOBS =20012;
private static final int REWARD_MOBS_COUNT = 80;
// Награда за моба REWARD_MOBS_1 = 18008 и тд
private static final int REWARD_MOBS_1 = 57;
private static final int REWARD_MOBS_COUNT_1 = 5000;
private static final int REWARD_MOBS_2 = 57;
private static final int REWARD_MOBS_COUNT_2 = 5000;
private static final int REWARD_MOBS_3 = 57;
private static final int REWARD_MOBS_COUNT_3 = 5000;
private static final int REWARD_MOBS_4 = 57;
private static final int REWARD_MOBS_COUNT_4 = 5000;
private static final int REWARD_MOBS_5 = 57;
private static final int REWARD_MOBS_COUNT_5 = 5000;
private static final int REWARD_MOBS_6 = 57;
private static final int REWARD_MOBS_COUNT_6 = 5000;
/**Интервалы между волнами
* Время указано в мс (1сек = 1000мс)
*/
private static final int FERST_WAVE = 1000; //Первая волна появляется через FERST_WAVE после анонса
private static final int SECOND_WAVE = 90000; //Вторая волна появляется через SECOND_WAVE
private static final int RUNNERS_WAVE = 60000; //Бегуны появляются через RUNNERS_WAVE
private static final int THIRD_WAVE = 30000; //Третья волна появляется через THIRD_WAVE
private static final int FOURTH_WAVE = 20000; //Четвертая волна появляется через FOURTH_WAVE
private static final int FIFTH_WAVE = 60000; //Пятая волна появляется через FIFTH_WAVE
private static final int BOSS_WAVE = 10000; //Босс появляется через BOSS_WAVE
//Сообщения перед каждой волной
private static final String FERST_WAVE_MSG = "Толпы монстров собираются около Гирана, нужно защитить жителей!";
private static final String SECOND_WAVE_MSG = "Монстры прорвались внутрь Гирана, нужно защитить жителей!";
private static final String RUNNERS_WAVE_MSG = "Они бегут со всех сторон!";
private static final String THIRD_WAVE_MSG = "Монстры уже на площади Гирана, город осажден, нужно защитить жителей!";
private static final String FOURTH_WAVE_MSG = "Их слишком много! Мы не справляемся";
private static final String FIFTH_WAVE_MSG = "Мы проигрываем";
private static final String BOSS_WAVE_MSG = "Бегите глупцы! Ваша смерть уже близко";
public MonstersAttack()
{
super(-1, MonstersAttack.class.getSimpleName(), "MonstersAttack");
load();
addKillId(MOB_1);
addKillId(MOB_2);
addKillId(MOB_3);
addKillId(MOB_4);
addKillId(MOB_5);
addKillId(MOB_6);
addKillId(RAID_BOSS);
_log.info("Load Monsters Attack Event");
}
public void load()
{
saveGlobalQuestVar("MonstersAttack", "0");
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StartMonstersAttack(), START_TIME, RESTART_TIME);
}
@Override
public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)
{
if (event.equalsIgnoreCase("run"))
{
_log.info("Start Event: Monsters Attack");
saveGlobalQuestVar("MonstersAttack", "1");
Announcements.getInstance().announceToAll(FERST_WAVE_MSG);
startQuestTimer("first", FERST_WAVE, null, null);
}
else if (event.equalsIgnoreCase("first"))
{
_log.info("First");
addSpawn(MOB_1, 80870, 142381, -3545, 40240, true, 600000); // Вот тут скорее всего вылезет баг
addSpawn(MOB_1, 81062, 142356, -3558, 40240, true, 600000); // Так как респ у мобов стоит 600000 и не от чего не зависит
addSpawn(MOB_1, 81311, 142389, -3580, 40240, true, 600000); // Как вариант можно указать RESTART_TIME вместо 600000
addSpawn(MOB_1, 80586, 142520, -3544, 40240, true, 600000);
addSpawn(MOB_1, 80699, 143015, -3539, 40240, true, 600000);
startQuestTimer("second", SECOND_WAVE, null, null);
cancelQuestTimer("first", null, null);
}
else if (event.equalsIgnoreCase("second"))
{
_log.info("second");
Announcements.getInstance().announceToAll(SECOND_WAVE_MSG);
addSpawn(MOB_2, 81501, 144672, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81318, 144467, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81691, 144601, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81682, 145161, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81494, 145410, -3532, 40240, true, 600000);
startQuestTimer("runners", RUNNERS_WAVE, null, null);
cancelQuestTimer("second", null, null);
}
else if (event.equalsIgnoreCase("runners"))
{
_log.info("runners");
Announcements.getInstance().announceToAll(RUNNERS_WAVE_MSG);
L2NpcInstance one = addSpawn(MOB_3, 84064, 143774, -3404, 40240, true, 600000);
L2NpcInstance two = addSpawn(MOB_3, 83992, 143770, -3404, 40240, true, 600000);
L2NpcInstance three = addSpawn(MOB_3, 83928, 143864, -3404, 40240,true, 600000);
L2NpcInstance four = addSpawn(MOB_3, 83812, 143816, -3404, 40240, true, 600000);
L2NpcInstance five = addSpawn(MOB_3, 83707, 143796, -3404, 40240, true, 600000);
one.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84043,146812, -3404, 0 ));
two.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84083,146882, -3404, 0 ));
three.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84013,146907, -3404, 0 ));
four.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(83963,146907, -3404, 0 ));
five.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(83944, 146860, -3404, 0));
startQuestTimer("third", THIRD_WAVE, null, null);
cancelQuestTimer("runners", null, null);
}
else if (event.equalsIgnoreCase("third"))
{
_log.info("third");
Announcements.getInstance().announceToAll(THIRD_WAVE_MSG);
addSpawn(MOB_4, 84044, 147687, -3397, 40240, true, 600000);
addSpawn(MOB_5, 83876, 147619, -3397, 40240, true, 600000);
addSpawn(MOB_4, 83645, 147697, -3532, 40240, true, 600000);
addSpawn(MOB_4, 83321, 147765, -3461, 40240, true, 600000);
addSpawn(MOB_4, 83147, 147708, -3461, 40240, true, 600000);
addSpawn(MOB_4, 82326, 148188, -3495, 40240, true, 600000);
addSpawn(MOB_4, 82292, 148348, -3459, 40240, true, 600000);
addSpawn(MOB_4, 82586, 148586, -3461, 40240, true, 600000);
startQuestTimer("fourth", FOURTH_WAVE, null, null);
cancelQuestTimer("third", null, null);
}
else if (event.equalsIgnoreCase("fourth"))
{
_log.info("fourth");
Announcements.getInstance().announceToAll(FOURTH_WAVE_MSG);
addSpawn(MOB_4, 82499, 148781, -3461, 40240, true, 600000);
addSpawn(MOB_5, 82649, 148956, -3461, 40240, true, 600000);
addSpawn(MOB_1, 83042, 149010, -3461, 40240, true, 600000);
addSpawn(MOB_1, 83337, 148802, -3397, 40240, true, 600000);
addSpawn(MOB_1, 82942, 148651, -3461, 40240, true, 600000);
addSpawn(MOB_1, 82260, 148478, -3459, 40240, true, 600000);
addSpawn(MOB_1, 81795, 148044, -3495, 40240, true, 600000);
addSpawn(MOB_1, 81891, 147743, -3461, 40240, true, 600000);
startQuestTimer("fifth", FIFTH_WAVE, null, null);
cancelQuestTimer("fourth", null, null);
}
else if (event.equalsIgnoreCase("fifth"))
{
_log.info("fifth");
Announcements.getInstance().announceToAll(FIFTH_WAVE_MSG);
addSpawn(MOB_4, 84442, 148621, -3428, 40240, true, 600000);
addSpawn(MOB_5, 84440, 148573, -3394, 40240, true, 600000);
addSpawn(MOB_1, 84428, 148680, -3394, 40240, true, 600000);
addSpawn(MOB_6, 84534, 148660, -3394, 40240, true, 600000);
addSpawn(MOB_6, 84521, 148618, -3428, 40240, true, 600000);
addSpawn(MOB_1, 84511, 148571, -3394, 40240, true, 600000);
startQuestTimer("boss", BOSS_WAVE, null, null);
cancelQuestTimer("fifth", null, null);
}
else if (event.equalsIgnoreCase("boss"))
{
_log.info("boss");
Announcements.getInstance().announceToAll(BOSS_WAVE_MSG);
saveGlobalQuestVar("MonstersAttack", "2");
addSpawn(RAID_BOSS, 85980, 148619, -3428, 40240, true, 600000);
cancelQuestTimer("boss", null, null);
}
/**
* Сюда бы ещё один if завершающий в котором сохранить saveGlobalQuestVar("MonstersAttack", "0");
* и удалить нпс или часто в сборках бывает функция завершающая эвент
*/
return null;
}
/**
*
* Вот тут скорее всего вылезет баг
* так как переменной MonstersAttack задаётся значение из базы
* и пока игроки не убьт босса оно всегда будет равно 2
* Черевато тем, что если босс или мобы доступны в игровом мире (в эвенте не уникальные НПС)
* игроки могут их убивать до посинения. Хотя мб что тригер сработает и всем будет хорошо
*
* Частично правит если задать saveGlobalQuestVar("MonstersAttack", "0"); при инициализации
* При спавне первых мобов saveGlobalQuestVar("MonstersAttack", "1");
* MonstersAttack == 1 награда за мобов будет выдаваться до тех пор пока не появится босс
* saveGlobalQuestVar("MonstersAttack", "2"); задается при спавне босса, в этот же момент перестают даваться итемы за мобов
* saveGlobalQuestVar("MonstersAttack", "0"); устанавливаем 0 при убийстве босса
*/
@Override
public String onKill(L2NpcInstance npc, L2PcInstance player, boolean isSummon)
{
QuestState st = player.getQuestState(getName());
int MonstersAttack = Integer.parseInt(loadGlobalQuestVar("MonstersAttack"));
if (st != null)
{
if ((npc.getNpcId() == RAID_BOSS) && (MonstersAttack == 2))
{
Announcements.getInstance().announceToAll("Главарь монстров повержен, игрок " + player.getName() + " нанес последний удар!");
Announcements.getInstance().announceToAll("Монстры отступают!");
player.addItem("Quest", REWARD_BOSS, REWARD_BOSS_COUNT, player, true, false);
saveGlobalQuestVar("MonstersAttack", "0");
_log.info("End Monsters Attack Event");
}
else if (!oneByOneReward && MonstersAttack == 1)
{
player.addItem("Quest", REWARD_MOBS, REWARD_MOBS_COUNT, player, true, false);
}
else if (oneByOneReward && MonstersAttack == 1)
{
switch (npc.getNpcId())
{
case MOB_1:
player.addItem("Quest", REWARD_MOBS_1, REWARD_MOBS_COUNT_1, player, true, false);
break;
case MOB_2:
player.addItem("Quest", REWARD_MOBS_2, REWARD_MOBS_COUNT_2, player, true, false);
break;
case MOB_3:
player.addItem("Quest", REWARD_MOBS_3, REWARD_MOBS_COUNT_3, player, true, false);
break;
case MOB_4:
player.addItem("Quest", REWARD_MOBS_4, REWARD_MOBS_COUNT_4, player, true, false);
break;
case MOB_5:
player.addItem("Quest", REWARD_MOBS_5, REWARD_MOBS_COUNT_5, player, true, false);
break;
case MOB_6:
player.addItem("Quest", REWARD_MOBS_6, REWARD_MOBS_COUNT_6, player, true, false);
break;
}
}
}
return super.onKill(npc, player, isSummon);
}
public class StartMonstersAttack implements Runnable
{
@Override
public void run()
{
QuestManager.getInstance().getQuest("MonstersAttack").notifyEvent("run", null, null);
}
}
public static void main(String args[])
{
new MonstersAttack();
}
}
В Чем может быть проблема ??? когда стоит этот скрипт полная жопа
Когда стоит вот этот скрипт все хорошо:
package custom.ahosey;
import ru.catssoftware.gameserver.Announcements;
import ru.catssoftware.gameserver.ThreadPoolManager;
import ru.catssoftware.gameserver.ai.CtrlIntention;
import ru.catssoftware.gameserver.instancemanager.QuestManager;
import ru.catssoftware.gameserver.model.L2CharPosition;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
/**
* Created by kuksin-mv on 12.05.2015.
*/
public class MonstersAttack extends Quest
{
// Задержка перед началом эвента после рестарта (в милисекундах 1сек == 1000мс)
private static final int START_TIME = 120000;
// автозапуск через
private static final int RESTART_TIME = 3600000;
// Босс
private static final int RAID_BOSS = 29065;
// Награда за боса
private static final int REWARD_BOSS = 57;
private static final int REWARD_BOSS_COUNT = 5000;
// Список мобов
private static final int MOB_1 = 18008;
private static final int MOB_2 = 20830;
private static final int MOB_3 = 21087;
private static final int MOB_4 = 22123;
private static final int MOB_5 = 22126;
private static final int MOB_6 = 22132;
//Если true Выдает награду в зависимости от убитого моба
private static final boolean oneByOneReward = false;
// Награда за любого монстра
// Работает если oneByOneReward = false
private static final int REWARD_MOBS = 57;
private static final int REWARD_MOBS_COUNT = 5000;
// Награда за моба REWARD_MOBS_1 = 18008 и тд
private static final int REWARD_MOBS_1 = 57;
private static final int REWARD_MOBS_COUNT_1 = 5000;
private static final int REWARD_MOBS_2 = 57;
private static final int REWARD_MOBS_COUNT_2 = 5000;
private static final int REWARD_MOBS_3 = 57;
private static final int REWARD_MOBS_COUNT_3 = 5000;
private static final int REWARD_MOBS_4 = 57;
private static final int REWARD_MOBS_COUNT_4 = 5000;
private static final int REWARD_MOBS_5 = 57;
private static final int REWARD_MOBS_COUNT_5 = 5000;
private static final int REWARD_MOBS_6 = 57;
private static final int REWARD_MOBS_COUNT_6 = 5000;
/**Интервалы между волнами
* Время указано в мс (1сек = 1000мс)
*/
private static final int FERST_WAVE = 1000; //Первая волна появляется через FERST_WAVE после анонса
private static final int SECOND_WAVE = 90000; //Вторая волна появляется через SECOND_WAVE
private static final int RUNNERS_WAVE = 60000; //Бегуны появляются через RUNNERS_WAVE
private static final int THIRD_WAVE = 30000; //Третья волна появляется через THIRD_WAVE
private static final int FOURTH_WAVE = 20000; //Четвертая волна появляется через FOURTH_WAVE
private static final int FIFTH_WAVE = 60000; //Пятая волна появляется через FIFTH_WAVE
private static final int BOSS_WAVE = 10000; //Босс появляется через BOSS_WAVE
//Сообщения перед каждой волной
private static final String FERST_WAVE_MSG = "Толпы монстров собираются около Гирана, нужно защитить жителей!";
private static final String SECOND_WAVE_MSG = "Монстры прорвались внутрь Гирана, нужно защитить жителей!";
private static final String RUNNERS_WAVE_MSG = "Они бегут со всех сторон!";
private static final String THIRD_WAVE_MSG = "Монстры уже на площади Гирана, город осажден, нужно защитить жителей!";
private static final String FOURTH_WAVE_MSG = "Их слишком много! Мы не справляемся";
private static final String FIFTH_WAVE_MSG = "Мы проигрываем";
private static final String BOSS_WAVE_MSG = "Бегите глупцы! Ваша смерть уже близко";
public MonstersAttack()
{
super(-1, MonstersAttack.class.getSimpleName(), "MonstersAttack");
load();
addKillId(MOB_1);
addKillId(MOB_2);
addKillId(MOB_3);
addKillId(MOB_4);
addKillId(MOB_5);
addKillId(MOB_6);
addKillId(RAID_BOSS);
_log.info("Load Monsters Attack Event");
}
public void load()
{
saveGlobalQuestVar("MonstersAttack", "0");
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new StartMonstersAttack(), START_TIME, RESTART_TIME);
}
@Override
public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player)
{
if (event.equalsIgnoreCase("run"))
{
_log.info("Start Event: Monsters Attack");
saveGlobalQuestVar("MonstersAttack", "1");
Announcements.getInstance().announceToAll(FERST_WAVE_MSG);
startQuestTimer("first", FERST_WAVE, null, null);
}
else if (event.equalsIgnoreCase("first"))
{
_log.info("First");
addSpawn(MOB_1, 80870, 142381, -3545, 40240, true, 600000); // Вот тут скорее всего вылезет баг
addSpawn(MOB_1, 81062, 142356, -3558, 40240, true, 600000); // Так как респ у мобов стоит 600000 и не от чего не зависит
addSpawn(MOB_1, 81311, 142389, -3580, 40240, true, 600000); // Как вариант можно указать RESTART_TIME вместо 600000
addSpawn(MOB_1, 80586, 142520, -3544, 40240, true, 600000);
addSpawn(MOB_1, 80699, 143015, -3539, 40240, true, 600000);
startQuestTimer("second", SECOND_WAVE, null, null);
cancelQuestTimer("first", null, null);
}
else if (event.equalsIgnoreCase("second"))
{
_log.info("second");
Announcements.getInstance().announceToAll(SECOND_WAVE_MSG);
addSpawn(MOB_2, 81501, 144672, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81318, 144467, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81691, 144601, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81682, 145161, -3532, 40240, true, 600000);
addSpawn(MOB_2, 81494, 145410, -3532, 40240, true, 600000);
startQuestTimer("runners", RUNNERS_WAVE, null, null);
cancelQuestTimer("second", null, null);
}
else if (event.equalsIgnoreCase("runners"))
{
_log.info("runners");
Announcements.getInstance().announceToAll(RUNNERS_WAVE_MSG);
L2NpcInstance one = addSpawn(MOB_3, 84064, 143774, -3404, 40240, true, 600000);
L2NpcInstance two = addSpawn(MOB_3, 83992, 143770, -3404, 40240, true, 600000);
L2NpcInstance three = addSpawn(MOB_3, 83928, 143864, -3404, 40240,true, 600000);
L2NpcInstance four = addSpawn(MOB_3, 83812, 143816, -3404, 40240, true, 600000);
L2NpcInstance five = addSpawn(MOB_3, 83707, 143796, -3404, 40240, true, 600000);
one.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84043,146812, -3404, 0 ));
two.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84083,146882, -3404, 0 ));
three.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(84013,146907, -3404, 0 ));
four.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(83963,146907, -3404, 0 ));
five.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new L2CharPosition(83944, 146860, -3404, 0));
startQuestTimer("third", THIRD_WAVE, null, null);
cancelQuestTimer("runners", null, null);
}
else if (event.equalsIgnoreCase("third"))
{
_log.info("third");
Announcements.getInstance().announceToAll(THIRD_WAVE_MSG);
addSpawn(MOB_4, 84044, 147687, -3397, 40240, true, 600000);
addSpawn(MOB_5, 83876, 147619, -3397, 40240, true, 600000);
addSpawn(MOB_4, 83645, 147697, -3532, 40240, true, 600000);
addSpawn(MOB_4, 83321, 147765, -3461, 40240, true, 600000);
addSpawn(MOB_4, 83147, 147708, -3461, 40240, true, 600000);
addSpawn(MOB_4, 82326, 148188, -3495, 40240, true, 600000);
addSpawn(MOB_4, 82292, 148348, -3459, 40240, true, 600000);
addSpawn(MOB_4, 82586, 148586, -3461, 40240, true, 600000);
startQuestTimer("fourth", FOURTH_WAVE, null, null);
cancelQuestTimer("third", null, null);
}
else if (event.equalsIgnoreCase("fourth"))
{
_log.info("fourth");
Announcements.getInstance().announceToAll(FOURTH_WAVE_MSG);
addSpawn(MOB_4, 82499, 148781, -3461, 40240, true, 600000);
addSpawn(MOB_5, 82649, 148956, -3461, 40240, true, 600000);
addSpawn(MOB_1, 83042, 149010, -3461, 40240, true, 600000);
addSpawn(MOB_1, 83337, 148802, -3397, 40240, true, 600000);
addSpawn(MOB_1, 82942, 148651, -3461, 40240, true, 600000);
addSpawn(MOB_1, 82260, 148478, -3459, 40240, true, 600000);
addSpawn(MOB_1, 81795, 148044, -3495, 40240, true, 600000);
addSpawn(MOB_1, 81891, 147743, -3461, 40240, true, 600000);
startQuestTimer("fifth", FIFTH_WAVE, null, null);
cancelQuestTimer("fourth", null, null);
}
else if (event.equalsIgnoreCase("fifth"))
{
_log.info("fifth");
Announcements.getInstance().announceToAll(FIFTH_WAVE_MSG);
addSpawn(MOB_4, 84442, 148621, -3428, 40240, true, 600000);
addSpawn(MOB_5, 84440, 148573, -3394, 40240, true, 600000);
addSpawn(MOB_1, 84428, 148680, -3394, 40240, true, 600000);
addSpawn(MOB_6, 84534, 148660, -3394, 40240, true, 600000);
addSpawn(MOB_6, 84521, 148618, -3428, 40240, true, 600000);
addSpawn(MOB_1, 84511, 148571, -3394, 40240, true, 600000);
startQuestTimer("boss", BOSS_WAVE, null, null);
cancelQuestTimer("fifth", null, null);
}
else if (event.equalsIgnoreCase("boss"))
{
_log.info("boss");
Announcements.getInstance().announceToAll(BOSS_WAVE_MSG);
saveGlobalQuestVar("MonstersAttack", "2");
addSpawn(RAID_BOSS, 85980, 148619, -3428, 40240, true, 600000);
cancelQuestTimer("boss", null, null);
}
/**
* Сюда бы ещё один if завершающий в котором сохранить saveGlobalQuestVar("MonstersAttack", "0");
* и удалить нпс или часто в сборках бывает функция завершающая эвент
*/
return null;
}
/**
*
* Вот тут скорее всего вылезет баг
* так как переменной MonstersAttack задаётся значение из базы
* и пока игроки не убьт босса оно всегда будет равно 2
* Черевато тем, что если босс или мобы доступны в игровом мире (в эвенте не уникальные НПС)
* игроки могут их убивать до посинения. Хотя мб что тригер сработает и всем будет хорошо
*
* Частично правит если задать saveGlobalQuestVar("MonstersAttack", "0"); при инициализации
* При спавне первых мобов saveGlobalQuestVar("MonstersAttack", "1");
* MonstersAttack == 1 награда за мобов будет выдаваться до тех пор пока не появится босс
* saveGlobalQuestVar("MonstersAttack", "2"); задается при спавне босса, в этот же момент перестают даваться итемы за мобов
* saveGlobalQuestVar("MonstersAttack", "0"); устанавливаем 0 при убийстве босса
*/
@Override
public String onKill(L2NpcInstance npc, L2PcInstance player, boolean isSummon)
{
QuestState st = player.getQuestState(getName());
int MonstersAttack = Integer.parseInt(loadGlobalQuestVar("MonstersAttack"));
if (st != null)
{
if ((npc.getNpcId() == RAID_BOSS) && (MonstersAttack == 2))
{
Announcements.getInstance().announceToAll("Главарь монстров повержен, игрок " + player.getName() + " нанес последний удар!");
Announcements.getInstance().announceToAll("Монстры отступают!");
player.addItem("Quest", REWARD_BOSS, REWARD_BOSS_COUNT, player, true, false);
saveGlobalQuestVar("MonstersAttack", "0");
_log.info("End Monsters Attack Event");
}
else if (!oneByOneReward && MonstersAttack == 1)
{
player.addItem("Quest", REWARD_MOBS, REWARD_MOBS_COUNT, player, true, false);
}
else if (oneByOneReward && MonstersAttack == 1)
{
switch (npc.getNpcId())
{
case MOB_1:
player.addItem("Quest", REWARD_MOBS_1, REWARD_MOBS_COUNT_1, player, true, false);
break;
case MOB_2:
player.addItem("Quest", REWARD_MOBS_2, REWARD_MOBS_COUNT_2, player, true, false);
break;
case MOB_3:
player.addItem("Quest", REWARD_MOBS_3, REWARD_MOBS_COUNT_3, player, true, false);
break;
case MOB_4:
player.addItem("Quest", REWARD_MOBS_4, REWARD_MOBS_COUNT_4, player, true, false);
break;
case MOB_5:
player.addItem("Quest", REWARD_MOBS_5, REWARD_MOBS_COUNT_5, player, true, false);
break;
case MOB_6:
player.addItem("Quest", REWARD_MOBS_6, REWARD_MOBS_COUNT_6, player, true, false);
break;
}
}
}
return super.onKill(npc, player, isSummon);
}
public class StartMonstersAttack implements Runnable
{
@Override
public void run()
{
QuestManager.getInstance().getQuest("MonstersAttack").notifyEvent("run", null, null);
}
}
public static void main(String args[])
{
new MonstersAttack();
}
}