Перейти к содержанию
Авторизация  
emil1993

Нападение на город JAVA Lovely

Рекомендуемые сообщения

Здраствуйте форумчане в общем переделал с питона на яву Эвент нападения на город и теперь выдает ошибку(сборка 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();
    }
}

Изменено пользователем emil1993

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а что ты хочешь сделать именно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а что ты хочешь сделать именно?

я хочу поменять нпц на своих нпц и награду другую сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а что ты хочешь сделать именно?

Видимо что бы за него посмотрели разницу в скриптах....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо что бы за него посмотрели разницу в скриптах....

там разница только в нпц айди и награде за мобов и все

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с телефона показалось что значение вылезло за границу

Там гс должен был вывалить ошибку. Возможно таких ид нет в базе

Хотя более вероятный вариант он не смог задать интеншен самопальным мобам. Это которые mob_3

Изменено пользователем Izonami

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...