Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Квест: "Секретное задание"
#1
Я в Яве новичок, решил сделать квест "Секретное задание", вот код
Код:
package quests._10288_SecretMission;

import l2open.extensions.scripts.ScriptFile;
import l2open.gameserver.model.instances.L2NpcInstance;
import l2open.gameserver.model.quest.Quest;
import l2open.gameserver.model.quest.QuestState;

public class _10288_SecretMission extends Quest implements ScriptFile
{
    // NPC's
    private static final int _dominic  = 31350;
    private static final int _aquilani = 32780;
    private static final int _greymore = 32757;
    // Item's
    private static final int _letter = 15529;

    public _10288_SecretMission()
    {
        super(false);
        
        addStartNpc(_dominic,_aquilani);
        addTalkId(_dominic,_greymore,_aquilani);
        addFirstTalkId(_aquilani);
    }

    public String onEvent(String event, QuestState st, L2NpcInstance npc)
    {
        String htmltext = event;
        
        int npcId = npc.getNpcId();
        int id = st.getState();
        int cond = st.getInt("cond");
        
        if (npcId == _dominic)
        {
            if (event.equalsIgnoreCase("31350-05.htm"))
            {
                st.setState(STARTED);
                st.set("cond", "1");
                st.giveItems(_letter, 1);
                st.playSound(SOUND_ACCEPT);
            }
        }
        else if ((npcId == _greymore) && (event.equalsIgnoreCase("32757-03.htm")))
        {
            st.unset("cond");
            st.setState(COMPLETED);
            st.takeItems(_letter, -1);
            st.giveItems(57, 106583);
            st.addExpAndSp(417788, 46320);
            st.playSound(SOUND_FINISH);
            st.exitCurrentQuest(false);
        }
        else if (npcId == _aquilani)
        {
            if (id == STARTED)
            {
                if (event.equalsIgnoreCase("32780-05.htm"))
                {
                    st.set("cond", "2");
                    st.playSound("ItemSound.quest_middle");
                }
            }
            else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
            {
                st.getPlayer().teleToLocation(118833, -80589, -2688);
                return null;
            }
        }
        return htmltext;
    }

    public String onTalk(L2NpcInstance npc, QuestState st)
    {
        String htmltext = "noquest";
        
        int npcId = npc.getNpcId();
        int cond = st.getInt("cond");
        int id = st.getState();
        
        if (npcId == _dominic)
            switch (id)
            {
                case 1:
                    if (st.getPlayer().getLevel() >= 82)
                        htmltext = "31350-01.htm";
                    else
                        htmltext = "31350-00.htm";
                case 2:
                    if (cond == 1)
                        htmltext = "31350-06.htm";
                    else
                    {
                        if (cond != 2)
                            break;
                        htmltext = "31350-07.htm";
                    }
                case 3:
                        htmltext = "31350-08.htm";
            }
        else if (npcId == _aquilani)
            switch(cond)
            {
                case 1:
                    htmltext = "32780-03.htm";
                case 2:
                    htmltext = "32780-06.htm";
            }
        else if ((npcId == _greymore) && (cond == 2))
            return "32757-01.htm";
            
        return htmltext;
    }

    public String onFirstTalk(L2NpcInstance npc, QuestState st)
    {
        QuestState qs = st.getPlayer().getQuestState("_10288_SecretMission");
        if (npc.getNpcId() == _aquilani)
        {
            if (qs.getState() == COMPLETED)
                return "32780-01.htm";
            return "32780-00.htm";
        }
        return null;
    }

    public void onLoad() { }
    public void onReload() { }
    public void onShutdown() { }
}
Квест берется у Доминика а когда подхожу к Аквилани и гoворю с ним то не выводится окно диалога,если ставлю через админку себе cond = 2 то квест спокойно здается Гремори, подскажите пожалуйст почему не выводится диалог с Аквилани. В ГСе ошибок нет. Заранее спасибо
Ответ
#2
UP................
Ответ
#3
Постараюсь помочь, сам хочу в квестах разобраться. Ну как бы понятно, что если без установки cond через админку диалог не выводится, то где-то накосячил в месте установки этого параметра.

Код:
        else if (npcId == _aquilani)
        {
            if (id == STARTED)
            {
                if (event.equalsIgnoreCase("32780-05.htm"))
                {
                    st.set("cond", "2");
                    st.playSound("ItemSound.quest_middle");
                }
            }
            else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
            {
                st.getPlayer().teleToLocation(118833, -80589, -2688);
                return null;
            }
        }

Что вот это значит?
Код:
event.equalsIgnoreCase("32780-05.htm")

Может стоит написать вот так:
Код:
        else if (npcId == _aquilani)
        {
            if (id == STARTED) && (cond == 1) //после разговора с Домиником у нас же именно такие параметры, правильно? Логично, что они такими и останутся при правильном порядке прохождения квеста.
            {
                htmltext = "32780-05.htm";
                st.set("cond", "2"); //ну и соответственно тут установили cond == 2
                st.playSound("ItemSound.quest_middle");
            }
            else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
            {
[U]наверное тут тоже надо добавить какой-то html, а то получается, что при диалоге игрока тупо без объяснения причин тпшит куда-то?[/U]
                st.getPlayer().teleToLocation(118833, -80589, -2688);
                return null;
            }

Вот как-то так.
Ответ
#4
Цитата:Что вот это значит?
Код:
event.equalsIgnoreCase("32780-05.htm")
я смотрел на квесты которые уже находятся в сборка как я понял это "Если выбран диалог 32780-05.htm" то выполнять действие.

Цитата:
Код:
else if ((id == COMPLETED) && (event.equalsIgnoreCase("teleport")))
            {
наверное тут тоже надо добавить какой-то html, а то получается, что при диалоге игрока тупо без объяснения причин тпшит куда-то?
                st.getPlayer().teleToLocation(118833, -80589, -2688);
                return null;
            }
это я сматрел в l2jserver и понимаю как "если квест закончен и выбрана команда (teleport) то выполнять телепортирование"

А диалог не выводится даже если квест не взят у Доминика, но у доминика квест берется и если ставить конд 2 то он сдается гремори а у аквилани не 1н диалог не открывается.
Ответ
#5
Мне кажется ты слишком много копируешь и слишком мало анализируешь. Я, конечно, могу ошибаться с вероятностью 50%, ибо сам квесты ни разу не писал, но вот что я думаю:
Всё равно что там и где выводилось или выводится, у нас стоит задача:
1) Поговорить с Домиником и взять квест.
2) Подойти к Аквелани и продолжить квест.
3) Подойти к Гремори и закончить квест.

if (answer == yes)
{
Код:
        else if (npcId == _aquilani)
        {
            if (id == STARTED) && (cond == 1)
            {
                htmltext = "текст по квесту.htm";
                st.set("cond", "2");
                st.playSound("ItemSound.quest_middle");
            }
            else if ((id == COMPLETED)
                                          {
                htmltext = "иди нахер, ты выполнил этот квест.htm";
                                          }
        }

Вроде всё логично.
Ответ
#6
Archiel;130411 Написал:Мне кажется ты слишком много копируешь и слишком мало анализируешь. Я, конечно, могу ошибаться с вероятностью 50%, ибо сам квесты ни разу не писал, но вот что я думаю:
Всё равно что там и где выводилось или выводится, у нас стоит задача:
1) Поговорить с Домиником и взять квест.
2) Подойти к Аквелани и продолжить квест.
3) Подойти к Гремори и закончить квест.

if (answer == yes)
{
Код:

else if (npcId == _aquilani)
{
if (id == STARTED) && (cond == 1)
{
htmltext = "текст по квесту.htm";
st.set("cond", "2");
st.playSound("ItemSound.quest_middle");
}
else if ((id == COMPLETED)
{
htmltext = "иди нахер, ты выполнил этот квест.htm";
}
}

Вроде всё логично.

а по мне вы сейчас разбираете часть где не происходит вывод диалогов а происходить только присвоение "cond", а вывод диалогов происходит в функции
Код:
public String onTalk(L2NpcInstance npc, QuestState st)
Ответ
#7
квест бред :pandaredlol:
[Изображение: 2ewe.jpg][Изображение: 1.gif]
Ответ
#8
kasik Написал:я смотрел на квесты которые уже находятся в сборка как я понял это "Если выбран диалог 32780-05.htm" то выполнять действие.
Вот в том-то и причина "нерабочести" что вы не правильно поняли.
И так, методы onEvent/onAdvEvent вызываются в следующих случаях:
- у игрока есть QuestState для этого квеста (был вызван диалог onTalk/onFirstTalk)
- игрок жамкнул на ссылку вида bypass Quest имя_квеста имя_события
Т.е. в вашем случае, что бы отработала ветка
if (event.equalsIgnoreCase("31350-05.htm"))
у npc Dominic должен быть диалог, в котором прописано
bypass -h Quest _10288_SecretMission 31350-05.htm
и игрок должен в нее тыкнуться
Ответ
#9
вот как раз этот диалог и работает, а у аквилани не 1н из
Код:
else if (npcId == _aquilani)
            switch(cond)
            {
                case 1:
                    htmltext = "32780-03.htm";
                case 2:
                    htmltext = "32780-06.htm";
            }
не открываеться хоть и cond стоит 1

Добавлено через 13 часов 11 минут
мб есть у кого данный скрипт и будет добр.... выложит его на общее обозрения=) я посмотрю на свои ошибки=) желательно к l2open
Ответ
#10
Ололо, где ваши break; ? Big Grin
Код:
switch(cond)
            {
                case 1:
                    htmltext = "32780-03.htm";
                    [B]break;[/B]
                case 2:
                    htmltext = "32780-06.htm";
                    [B]break;[/B]
            }
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  НПС не дает квест Dilar 1 1,756 03-20-2018, 08:17 PM
Последний пост: Emperor
  Квест 7 печатей как включить, как управлять! v1kt0r 5 3,162 04-29-2017, 01:17 PM
Последний пост: zGoSu
  Квест 7 печатей. Гварды не видят под шд CKREPKA 3 2,135 08-06-2015, 02:49 AM
Последний пост: Deazer
  квест, концепция, структура, логика mountaineer 2 1,872 07-31-2015, 08:01 PM
Последний пост: DroNik
  Квест JokerMaxi 8 2,685 09-03-2014, 04:30 AM
Последний пост: JokerMaxi
  Не отображается квест в квестах, помогите. the2fantasy 6 1,866 11-27-2013, 10:32 AM
Последний пост: the2fantasy
  Вопрос о скрипте java (квест\аи) Main 14 3,482 11-02-2013, 01:54 PM
Последний пост: Main
  Укороченный Квест На Нубл Saintly 3 4,117 10-06-2013, 01:10 PM
Последний пост: Saintly
  Квест 1megalord1 5 2,205 02-01-2013, 12:10 AM
Последний пост: ExLite
  Jython ошибка синтакса(клан квест) GRAFOON 13 2,780 01-09-2013, 04:33 PM
Последний пост: Anikey

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)