Quests GoD Ertheia

Wolfer

Прославленный
Местный
Старожил I степени
Сообщения
227
Розыгрыши
0
Репутация
216
Реакции
236
Баллы
1 408
Арендую данную тему.

Работаю над Ertheia на основе l2-s, пишу заного большую часть квестов.

Буду выкладывать тут по очереди написания, если вам нужен какой либо квест пишите, перепишу раньше...

Код:
package quests;

import l2s.gameserver.instancemanager.QuestManager;
import l2s.gameserver.listener.actor.player.OnLevelChangeListener;
import l2s.gameserver.listener.actor.player.OnPlayerEnterListener;
import l2s.gameserver.model.Player;
import l2s.gameserver.model.actor.listener.CharListenerList;
import l2s.gameserver.model.base.Race;
import l2s.gameserver.model.instances.NpcInstance;
import l2s.gameserver.model.quest.Quest;
import l2s.gameserver.model.quest.QuestState;
import l2s.gameserver.network.l2.s2c.ExShowScreenMessage;
import l2s.gameserver.network.l2.s2c.TutorialCloseHtmlPacket;
import l2s.gameserver.scripts.ScriptFile;

/**
*
* @Rebuild Wolfer
*/

public class _10397_Kekropus_Letter_A_Suspicious_Badge extends Quest implements ScriptFile, OnPlayerEnterListener, OnLevelChangeListener
{
    private static final int MIN_LEVEL = 52;
    private static final int MAX_LEVEL = 57;
    // Quest's NPCs
    private static final int MOUEN = 30196;
    private static final int ANDY = 33845;
    // Quest's Items
    private static final int SOE_OREN = 37114;
    private static final int SOE_SEA_OF_SPORE = 37027;
    // Quest's Reward
    private static final int EXP = 635250;
    private static final int SP = 152;
    private static final int EWB = 947;
    private static final int EWB_COUNT = 2;
    private static final int STEEL_DOOR_GUILD_COIN = 37045;
    private static final int STEEL_DOOR_GUILD_COIN_COUNT = 20;

    private static final int QUEST_START_DELAY = 10000;
    private static final String LETTER_ALERT_STRING = "Kekropus have a message for you.\nClick on the icon to see the Question-Mark.";
    private static final String NEXT_LETTER_ALERT_STRING = "Be trained to become stronger until you get the next letter at level 52";

    /**
     *
     */
    public _10397_Kekropus_Letter_A_Suspicious_Badge()
    {
        super(false);
        this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
        this.addRaceCheck(true,true,true,true,true,true,false);
        CharListenerList.addGlobal(this);
        this.addTalkId(MOUEN);
        this.addTalkId(ANDY);
        this.addQuestItem(SOE_OREN,SOE_SEA_OF_SPORE);
    }

    private void receivedLetter(final QuestState qs)
    {
        if(qs != null)
        {
            Player player = qs.getPlayer();
            qs.showQuestionMark(_questId);
            qs.playSound(SOUND_TUTORIAL);
            if (player != null)
            {
                player.sendPacket(new ExShowScreenMessage(LETTER_ALERT_STRING, 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true));
            }
        }
    }

    /**
     *
     * @param player
     * @return
     */
    @Override
    public boolean checkStartCondition(final Player player)
    {
        boolean result = true;
        if(player.getLevel() < MIN_LEVEL || player.getLevel() > MAX_LEVEL)
        {
            result = false;
        }
        if(player.getRace() == Race.ERTHEIA)
        {
            result = false;
        }
        QuestState state = player.getQuestState(this.getClass().getSimpleName());
        if((state != null && state.getCond() > 0))
        {
            result = false;
        }
        return result;
    }

    /**
     *
     * @param event
     * @param qs
     * @param npc
     * @return
     */
    @Override
    public String onEvent(final String event, final QuestState qs, final NpcInstance npc)
    {
        String htmlText = event;
        if(event != null && qs != null)
        {
            Player player = qs.getPlayer();
            if(player != null)
            {
                if(event.startsWith("QM"))
                {
                    try
                    {
                        int id = Integer.valueOf(event.substring(2));
                        if(id == _questId)
                        {
                            if(player.getRace() != Race.ERTHEIA)
                            {
                                qs.giveItems(SOE_OREN,1);
                                qs.showQuestHTML(qs.getQuest(),"00.htm");
                                qs.setState(STARTED);
                                qs.setCond(1);
                                qs.playSound(SOUND_ACCEPT);
                            }
                        }
                    }
                    catch (Throwable t)
                    {
                    }
                    htmlText = null;
                }
                else if(event.startsWith("TE"))
                {
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("Quest _10397_Kekropus_Letter_A_Suspicious_Badge to_oren"))
                {
                    player.teleToLocation(80920, 56392, -1585);
                    player.sendPacket(TutorialCloseHtmlPacket.STATIC);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("Quest _10397_Kekropus_Letter_A_Suspicious_Badge close_window"))
                {
                    player.sendPacket(TutorialCloseHtmlPacket.STATIC);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("start_quest_delay"))
                {
                    qs.startQuestTimer("start_quest_timeout", QUEST_START_DELAY);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("start_quest") || event.equalsIgnoreCase("start_quest_timeout"))
                {
                    this.receivedLetter(qs);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("accept_task"))
                {
                    qs.setCond(2);
                    qs.playSound(SOUND_MIDDLE);
                    qs.giveItems(SOE_SEA_OF_SPORE,1);
                    htmlText = "03.htm";
                }
                else if(event.equalsIgnoreCase("get_reward"))
                {
                    qs.setState(COMPLETED);
                    qs.exitCurrentQuest(false);
                    qs.playSound(SOUND_FINISH);
                    qs.takeAllItems(SOE_OREN, SOE_SEA_OF_SPORE);
                    qs.addExpAndSp(EXP,SP);
                    qs.giveItems(EWB,EWB_COUNT);
                    qs.giveItems(STEEL_DOOR_GUILD_COIN,STEEL_DOOR_GUILD_COIN_COUNT);
                    htmlText = "05.htm";
                    player.sendPacket(new ExShowScreenMessage(NEXT_LETTER_ALERT_STRING, 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true));
                }
            }
        }
        return htmlText;
    }

    /**
     *
     * @param npc
     * @param qs
     * @return
     */
    @Override
    public String onTalk(final NpcInstance npc, final QuestState qs)
    {
        String htmlText = NO_QUEST_DIALOG;
        if(npc != null && qs != null)
        {
            int npcId = npc.getNpcId();
            int cond = qs.getCond();
            Player player = qs.getPlayer();
            if(player != null)
            {
                if(npcId == MOUEN)
                {
                    if(cond == 1)
                    {
                        htmlText = "01.htm";
                    }
                }
                else if(npcId == ANDY)
                {
                    if(cond == 2)
                    {
                        htmlText = "04.htm";
                    }
                }
            }
        }
        return htmlText;
    }

    /**
     *
     */
    @Override
    public void onLoad()
    {

    }

    /**
     *
     */
    @Override
    public void onReload()
    {

    }

    /**
     *
     */
    @Override
    public void onShutdown()
    {

    }

    /**
     *
     * @param player
     * @param oldLvl
     * @param newLvl
     */
    @Override
    public void onLevelChange(final Player player, final int oldLvl, final int newLvl)
    {
        if(player != null && checkStartCondition(player))
        {
            Quest quest = QuestManager.getQuest(this.getClass());
            player.processQuestEvent(quest.getName(),"start_quest",null);
        }
    }

    /**
     *
     * @param player
     */
    @Override
    public void onPlayerEnter(final Player player)
    {
        if (player != null && this.checkStartCondition(player))
        {
            Quest quest = QuestManager.getQuest(this.getClass());
            player.processQuestEvent(quest.getName(),"start_quest_delay",null);
        }
    }
}

Чуть позже приложу htm
Код:
package quests;

import l2s.gameserver.model.Player;
import l2s.gameserver.model.instances.NpcInstance;
import l2s.gameserver.model.quest.Quest;
import l2s.gameserver.model.quest.QuestState;
import l2s.gameserver.scripts.ScriptFile;

/**
*
* @author Wolfer
*/
public class _10709_StolenSeed extends Quest implements ScriptFile
{
    private static final int MIN_LEVEL = 58;
    private static final int MAX_LEVEL = 61;
    // Quest's NPCs
    private static final int NOVAIN = 33866;
    private static final int MAGIC_CIRCLE_CONTROL_DEVICE = 33961;
    // Quest's Monster
    private static final int CURSED_GIANT_AKUM = 27520;
    // Quest's Items
    private static final int AKUM_MEMORY_FRAGMENT = 39510;
    private static final int NORMAL_FRAGMENT = 39511;
    // Quest's Reward
    private static final int EXP = 731010;
    private static final int SP = 175;
    private static final int EAB = 948;
    private static final int EAB_COUNT = 5;
    private static final int STEEL_DOOR_GUILD_COIN = 37045;
    private static final int STEEL_DOOR_GUILD_COIN_COUNT = 30;

    public _10709_StolenSeed()
    {
        super(false);
        this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
        this.addRaceCheck(true, true, true, true, true, true, false);
        this.addStartNpc(NOVAIN);
        this.addTalkId(MAGIC_CIRCLE_CONTROL_DEVICE);
        this.addQuestItem(AKUM_MEMORY_FRAGMENT, NORMAL_FRAGMENT);
        this.addKillId(CURSED_GIANT_AKUM);
    }

    /**
     *
     * @param event
     * @param qs
     * @param npc
     * @return
     */
    @Override
    public String onEvent(final String event, final QuestState qs, final NpcInstance npc)
    {
        String htmlText = event;
        if(event != null && qs != null)
        {
            if(event.equalsIgnoreCase("quest_accept"))
            {
                qs.setState(STARTED);
                qs.setCond(1);
                qs.playSound(SOUND_ACCEPT);
                htmlText = "03.htm";
            }
            else if(event.equalsIgnoreCase("try_fragment"))
            {
                qs.setCond(2);
                qs.playSound(SOUND_MIDDLE);
                htmlText = null;
                qs.addSpawn(CURSED_GIANT_AKUM);
            }
            else if(event.equalsIgnoreCase("get_reward"))
            {
                qs.addExpAndSp(EXP,SP);
                qs.takeAllItems(AKUM_MEMORY_FRAGMENT,NORMAL_FRAGMENT);
                qs.giveItems(EAB,EAB_COUNT);
                qs.giveItems(STEEL_DOOR_GUILD_COIN,STEEL_DOOR_GUILD_COIN_COUNT);
                qs.setState(COMPLETED);
                qs.exitCurrentQuest(false);
                qs.playSound(SOUND_FINISH);
                htmlText = "06.htm";
            }
        }
        return htmlText;
    }

    /**
     *
     * @param npc
     * @param qs
     * @return
     */
    @Override
    public String onTalk(final NpcInstance npc, final QuestState qs)
    {
        String htmlText = NO_QUEST_DIALOG;
        if(npc != null && qs != null)
        {
            int npcId = npc.getNpcId();
            int cond = qs.getCond();
            Player player = qs.getPlayer();
            if (player != null)
            {
                if(qs.isCompleted())
                {
                    htmlText = "completed-quest.htm";
                }
                else
                {
                    if(npcId == NOVAIN)
                    {
                        if(cond == 0)
                        {
                            htmlText = "00.htm";
                        }
                        else if(cond == 3)
                        {
                            htmlText = "05.htm";
                        }
                    }
                    else if(npcId == MAGIC_CIRCLE_CONTROL_DEVICE)
                    {
                        htmlText = "04.htm";
                    }
                }
            }
        }
        return htmlText;
    }

    /**
     *
     * @param npc
     * @param qs
     * @return
     */
    @Override
    public String onKill(final NpcInstance npc, final QuestState qs)
    {
        if(npc != null && qs != null)
        {
            int cond = qs.getCond();
            if(cond == 2)
            {
                qs.giveItems(NORMAL_FRAGMENT,1);
                qs.playSound(SOUND_MIDDLE);
                qs.setCond(3);
            }
        }
        return null;
    }

}
 

Вложения

  • _10397_Kekropus_Letter_A_Suspicious_Badge.7z
    1,5 КБ · Просмотры: 63
  • _10709_StolenSeed.7z
    1,3 КБ · Просмотры: 156
Последнее редактирование:

int id = Integer.valueOf(event.substring(2));

По всей видимости проще использовать Integer.parseInt(value); т.к. valueOf создает никому не нужный объект, хоть и гк его очистит быстро все же лучше возвращать сразу примитив.

The Stolen Seed - 10709, хочу увидеть )
 
Сделайте мне развидеть "это" (я про код квеста)... :)
 
Арендую данную тему.

Работаю над Ertheia на основе l2-s, пишу заного большую часть квестов.

Буду выкладывать тут по очереди написания, если вам нужен какой либо квест пишите, перепишу раньше...

Код:
package quests;

import l2s.gameserver.instancemanager.QuestManager;
import l2s.gameserver.listener.actor.player.OnLevelChangeListener;
import l2s.gameserver.listener.actor.player.OnPlayerEnterListener;
import l2s.gameserver.model.Player;
import l2s.gameserver.model.actor.listener.CharListenerList;
import l2s.gameserver.model.base.Race;
import l2s.gameserver.model.instances.NpcInstance;
import l2s.gameserver.model.quest.Quest;
import l2s.gameserver.model.quest.QuestState;
import l2s.gameserver.network.l2.s2c.ExShowScreenMessage;
import l2s.gameserver.network.l2.s2c.TutorialCloseHtmlPacket;
import l2s.gameserver.scripts.ScriptFile;

/**
*
* @Rebuild Wolfer
*/

public class _10397_Kekropus_Letter_A_Suspicious_Badge extends Quest implements ScriptFile, OnPlayerEnterListener, OnLevelChangeListener
{
    private static final int MIN_LEVEL = 52;
    private static final int MAX_LEVEL = 57;
    // Quest's NPCs
    private static final int MOUEN = 30196;
    private static final int ANDY = 33845;
    // Quest's Items
    private static final int SOE_OREN = 37114;
    private static final int SOE_SEA_OF_SPORE = 37027;
    // Quest's Reward
    private static final int EXP = 635250;
    private static final int SP = 152;
    private static final int EWB = 947;
    private static final int EWB_COUNT = 2;
    private static final int STEEL_DOOR_GUILD_COIN = 37045;
    private static final int STEEL_DOOR_GUILD_COIN_COUNT = 20;

    private static final int QUEST_START_DELAY = 10000;
    private static final String LETTER_ALERT_STRING = "Kekropus have a message for you.\nClick on the icon to see the Question-Mark.";
    private static final String NEXT_LETTER_ALERT_STRING = "Be trained to become stronger until you get the next letter at level 52";

    /**
     *
     */
    public _10397_Kekropus_Letter_A_Suspicious_Badge()
    {
        super(false);
        this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
        this.addRaceCheck(true,true,true,true,true,true,false);
        CharListenerList.addGlobal(this);
        this.addTalkId(MOUEN);
        this.addTalkId(ANDY);
        this.addQuestItem(SOE_OREN,SOE_SEA_OF_SPORE);
    }

    private void receivedLetter(final QuestState qs)
    {
        if(qs != null)
        {
            Player player = qs.getPlayer();
            qs.showQuestionMark(_questId);
            qs.playSound(SOUND_TUTORIAL);
            if (player != null)
            {
                player.sendPacket(new ExShowScreenMessage(LETTER_ALERT_STRING, 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true));
            }
        }
    }

    /**
     *
     * @param player
     * @return
     */
    @Override
    public boolean checkStartCondition(final Player player)
    {
        boolean result = true;
        if(player.getLevel() < MIN_LEVEL || player.getLevel() > MAX_LEVEL)
        {
            result = false;
        }
        if(player.getRace() == Race.ERTHEIA)
        {
            result = false;
        }
        QuestState state = player.getQuestState(this.getClass().getSimpleName());
        if((state != null && state.getCond() > 0))
        {
            result = false;
        }
        return result;
    }

    /**
     *
     * @param event
     * @param qs
     * @param npc
     * @return
     */
    @Override
    public String onEvent(final String event, final QuestState qs, final NpcInstance npc)
    {
        String htmlText = event;
        if(event != null && qs != null)
        {
            Player player = qs.getPlayer();
            if(player != null)
            {
                if(event.startsWith("QM"))
                {
                    try
                    {
                        int id = Integer.valueOf(event.substring(2));
                        if(id == _questId)
                        {
                            if(player.getRace() != Race.ERTHEIA)
                            {
                                qs.giveItems(SOE_OREN,1);
                                qs.showQuestHTML(qs.getQuest(),"00.htm");
                                qs.setState(STARTED);
                                qs.setCond(1);
                                qs.playSound(SOUND_ACCEPT);
                            }
                        }
                    }
                    catch (Throwable t)
                    {
                    }
                    htmlText = null;
                }
                else if(event.startsWith("TE"))
                {
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("Quest _10397_Kekropus_Letter_A_Suspicious_Badge to_oren"))
                {
                    player.teleToLocation(80920, 56392, -1585);
                    player.sendPacket(TutorialCloseHtmlPacket.STATIC);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("Quest _10397_Kekropus_Letter_A_Suspicious_Badge close_window"))
                {
                    player.sendPacket(TutorialCloseHtmlPacket.STATIC);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("start_quest_delay"))
                {
                    qs.startQuestTimer("start_quest_timeout", QUEST_START_DELAY);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("start_quest") || event.equalsIgnoreCase("start_quest_timeout"))
                {
                    this.receivedLetter(qs);
                    htmlText = null;
                }
                else if(event.equalsIgnoreCase("accept_task"))
                {
                    qs.setCond(2);
                    qs.playSound(SOUND_MIDDLE);
                    qs.giveItems(SOE_SEA_OF_SPORE,1);
                    htmlText = "03.htm";
                }
                else if(event.equalsIgnoreCase("get_reward"))
                {
                    qs.setState(COMPLETED);
                    qs.exitCurrentQuest(false);
                    qs.playSound(SOUND_FINISH);
                    qs.takeAllItems(SOE_OREN, SOE_SEA_OF_SPORE);
                    qs.addExpAndSp(EXP,SP);
                    qs.giveItems(EWB,EWB_COUNT);
                    qs.giveItems(STEEL_DOOR_GUILD_COIN,STEEL_DOOR_GUILD_COIN_COUNT);
                    htmlText = "05.htm";
                    player.sendPacket(new ExShowScreenMessage(NEXT_LETTER_ALERT_STRING, 10000, ExShowScreenMessage.ScreenMessageAlign.TOP_CENTER, true));
                }
            }
        }
        return htmlText;
    }

    /**
     *
     * @param npc
     * @param qs
     * @return
     */
    @Override
    public String onTalk(final NpcInstance npc, final QuestState qs)
    {
        String htmlText = NO_QUEST_DIALOG;
        if(npc != null && qs != null)
        {
            int npcId = npc.getNpcId();
            int cond = qs.getCond();
            Player player = qs.getPlayer();
            if(player != null)
            {
                if(npcId == MOUEN)
                {
                    if(cond == 1)
                    {
                        htmlText = "01.htm";
                    }
                }
                else if(npcId == ANDY)
                {
                    if(cond == 2)
                    {
                        htmlText = "04.htm";
                    }
                }
            }
        }
        return htmlText;
    }

    /**
     *
     */
    @Override
    public void onLoad()
    {

    }

    /**
     *
     */
    @Override
    public void onReload()
    {

    }

    /**
     *
     */
    @Override
    public void onShutdown()
    {

    }

    /**
     *
     * @param player
     * @param oldLvl
     * @param newLvl
     */
    @Override
    public void onLevelChange(final Player player, final int oldLvl, final int newLvl)
    {
        if(player != null && checkStartCondition(player))
        {
            Quest quest = QuestManager.getQuest(this.getClass());
            player.processQuestEvent(quest.getName(),"start_quest",null);
        }
    }

    /**
     *
     * @param player
     */
    @Override
    public void onPlayerEnter(final Player player)
    {
        if (player != null && this.checkStartCondition(player))
        {
            Quest quest = QuestManager.getQuest(this.getClass());
            player.processQuestEvent(quest.getName(),"start_quest_delay",null);
        }
    }
}
Откуда информацию по квестам берешь?
P.S Честно в коде много не нужного
 
наверное сам проходит или просит кого пройти и поскринить.

я письма кекропуса/королевы/барда к примеру так и делал в свое время
 
Последнее редактирование модератором:
В том квесте который я дал есть стадии со спавнами....
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Оффтоп:
Сервер уже открыл?
 
Можно инфу какую нить по нему?
подскажу - в процессе, до появления моба которого надо убить по квесту, перед игроком разыгрывается небольшая сценка между парой нпс, с выкрикиванием ими фраз, атакой ими друг друга и всем таким.
это все легко можно посмотреть на самом оффе, пройдя квест этот.

а про сам написанный квест - как минимум один косяк я вижу сразу - нет проверки на о что выполнен предыдущий квест из цепочки. про сам стиль написания уж просто промолчу - у каждого свой он...

Больше смахивает на оффтоп, что в коде не нужного тут ?
как минимум лишних проверок много в процессе
к примеру все эти проверки вида
Код:
if(event != null && qs != null)
по идее избыточны, т.к. и так проверяется это все уровнем выше и досюда просто null-значения не дойдут.

и кстаи если автор собирается на каждый квест из цепочек про письма, где игроку приходит письмо для начала квеста, вешать по листенеру на получение уровня/вход в игру, то в итоге это будет писец - столько листенеров перебирать каждый раз в проверках...
как я это реализовывал ты думаю в курсе - я тебе вроде скидывал посмотреть то что сделал для этого всего :)
 
Последнее редактирование:
Ага))
 
Тут кое что не ясно в _10709_StolenSeed, как можно забирать итем
AKUM_MEMORY_FRAGMENT
когда он нигде не выдаётся :)
 
Последнее редактирование:
Тут кое что не ясно в _10709_StolenSeed, как можно забирать итем
AKUM_MEMORY_FRAGMENT
когда он нигде не выдаётся :)
Их линия квестов

а про сам написанный квест - как минимум один косяк я вижу сразу - нет проверки на о что выполнен предыдущий квест из цепочки. про сам стиль написания уж просто промолчу - у каждого свой он...
Проверка, да это 1 вариант квеста (beta)
 
Код:
this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
this.addRaceCheck(true,true,true,true,true,true,false);
this.addTalkId(MOUEN);
this.addTalkId(ANDY);       
this.addQuestItem(SOE_OREN,SOE_SEA_OF_SPORE);
Код:
this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
this.addRaceCheck(true, true, true, true, true, true, false);
this.addStartNpc(NOVAIN);
this.addTalkId(MAGIC_CIRCLE_CONTROL_DEVICE);
this.addQuestItem(AKUM_MEMORY_FRAGMENT, NORMAL_FRAGMENT);
this.addKillId(CURSED_GIANT_AKUM);

Ты че бл**ь декомпилишь и тут пастишь?
 
Код:
this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
this.addRaceCheck(true,true,true,true,true,true,false);
this.addTalkId(MOUEN);
this.addTalkId(ANDY);    
this.addQuestItem(SOE_OREN,SOE_SEA_OF_SPORE);
Код:
this.addLevelCheck(MIN_LEVEL, MAX_LEVEL);
this.addRaceCheck(true, true, true, true, true, true, false);
this.addStartNpc(NOVAIN);
this.addTalkId(MAGIC_CIRCLE_CONTROL_DEVICE);
this.addQuestItem(AKUM_MEMORY_FRAGMENT, NORMAL_FRAGMENT);
this.addKillId(CURSED_GIANT_AKUM);

Ты че бл**ь декомпилишь и тут пастишь?
:Nani1: what?

Clip2net_160517013332.png
 
Последнее редактирование:
Вот как дожно это работать, видео манул внизу - напихай там просто startQuestTimer-и со стрингами разложы по кеисам и получится живая беседа. Удачи, это не сложно ...
Добавь второго чувака: private static final int REMEMBERED_EMBRYO = 27525;
да кстати, к моему первому посту, 1 итем даёться сразу на конд 1 - забираеться при вызове квест-монстра, при убиистве даёт второй, что надо здать, а для серии надо проверку поставить на преведущий квест в наяале, примерно так

Многие эти квесты я риализовал у мобиуса, на его форуме и на свн ест они, можешь посмотреть, в основном по линии артеи там, схожый код

_
 
Последнее редактирование:
Назад
Сверху Снизу