Anderson 36 Опубликовано 23 сентября, 2012 И так, мои руки добрались до создания квеста. Написал скрипт, сделал диалоги. Скомпилил, у стартового нпц появился квест, там 3 диалога и на 3 он должен дать квест. Но 0 реакции. Я вспомнил что нужно еще в клиенте похимичить. В файл questname-e добавил одну строчку с иди кв и первым состоянием. Пробую, то же самое... Это в клиенте: 1 800 1 a,TotiSecrets\0 a,Go to master\0 u,Идите к.\\n\0 0 0 -115888.00000000 43568.00000000 524.00000000 17 23 0 a,Trader Erinu\0 1 1 0 50010 -115888.00000000 43568.00000000 524.00000000 a,No Requirements\0 u,Новинка сезона Деревня Kamael! Раскупайте принадлежности, сделанные из П.\0 0 0 0 0 0 243 Часть скрипта: @Override public String onAdvEvent(final String event, final L2Npc npc, final L2PcInstance player) { String htmltext = event; final QuestState st = player.getQuestState(qn); if (st == null) { return htmltext; } if ("800-03.htm".equalsIgnoreCase(event)) { st.set("cond", "1"); st.setState(QuestState.STARTED); st.playSound(QuestState.SOUND_ACCEPT); } 800-03.htm - после этого должен добавится кв. Но на этом диалоге 0 реакции. Умные люде помогите советом, мб я что то где то забыл? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 23 сентября, 2012 из третьего диалога ссылку в студию, откуда мы знаем, чем вы пытаетесь его запустить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 23 сентября, 2012 (изменено) из третьего диалога ссылку в студию, откуда мы знаем, чем вы пытаетесь его запустить. <html><body>Мастер силы<br> Хорошо, но знайте что это очень опасно. Если вы уверены... Направляйтесь к мастеру Лимонолу. Он находится в Глудио в торговой лавке </body></html> Тут ничего необычного, диалог выплыл а кв не добавился. Изменено 23 сентября, 2012 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 23 сентября, 2012 Как-бы, чтоб запустить квест - нужно дать на это команду. Изучайте устройство стандартных квестов... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 23 сентября, 2012 (изменено) Как-бы, чтоб запустить квест - нужно дать на это команду. Изучайте устройство стандартных квестов... Я не нашел норм туториалов по написанию кв на Джаве. По этому написал сюда st.setState(QuestState.STARTED); Это не она разве? П.С. На джаве, не Питон Изменено 23 сентября, 2012 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 23 сентября, 2012 скачай лыжу последнюю, там много квестов на яве. и причем тут туториалы/мануалы? мозга, чтоб самому посмотреть в движке - нету? обязательно надо быть ребенком, которому все разжевывают? Это не она разве? из html должна вести специальная ссылка, которая в скрипт квеста отправит нужный эвент. в твоем последнем хытымеле нет такой, только совет отправиться к кому-то там. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 23 сентября, 2012 (изменено) скачай лыжу последнюю, там много квестов на яве. и причем тут туториалы/мануалы? мозга, чтоб самому посмотреть в движке - нету? обязательно надо быть ребенком, которому все разжевывают? из html должна вести специальная ссылка, которая в скрипт квеста отправит нужный эвент. в твоем последнем хытымеле нет такой, только совет отправиться к кому-то там. Потому прошу объяснения, вроде пересмотрел все квы (сборка Силентиум) и там нигде ничего не отправляется Мне казалось что при открытии диалога отправляется эвент: if ("800-03.htm".equalsIgnoreCase(event)) { st.set("cond", "1"); st.setState(QuestState.STARTED); st.playSound(QuestState.SOUND_ACCEPT); } Я и спрашиваю, как оно работает, гугл не помогает, сам порылся не допер Глянул на кв на питоне, почти тоже, вызова из ХТМ ли не наблюдаю Изменено 23 сентября, 2012 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
xINVIZIBLx 67 Опубликовано 23 сентября, 2012 (изменено) Потому прошу объяснения, вроде пересмотрел все квы (сборка Силентиум) и там нигде ничего не отправляется Мне казалось что при открытии диалога отправляется эвент: if ("800-03.htm".equalsIgnoreCase(event)) { st.set("cond", "1"); st.setState(QuestState.STARTED); st.playSound(QuestState.SOUND_ACCEPT); } Я и спрашиваю, как оно работает, гугл не помогает, сам порылся не допер Глянул на кв на питоне, почти тоже, вызова из ХТМ ли не наблюдаю Учите Java. Кроме знаний ничего не поможет. Изменено 23 сентября, 2012 пользователем xINVIZIBLx Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 24 сентября, 2012 Да что это такое, попросил о помощи, а меня шлют джаву учить. Что именно учить? Я не понимаю само устройство квестов. Пересмотрел остальные, сделал. Не ужели знающему человеку так сложно помочь? if ("800-03.htm".equalsIgnoreCase(event)) { } Это должно как то вызываться, но я непонимаю как оно получает евент. Но по Джаве я все тут прекрасно разбераю. Опять прошу объяснить а не посылать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 24 сентября, 2012 Хм... Да, и правда, немного перекроили архитектору квестов за последнее время, давно не лазил по ним. Извиняюсь за неправильные наводки. Полностью класс квеста посмотреть можно? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 24 сентября, 2012 (изменено) Вообще, чтоб исполнить эвент квеста (или открыть связанный с квестом диалог) необходимо из предыдущего html вызвать такой байпасс: < a action="bypass -h Quest 458_PerfectForm 32768-04.htm">"Talent Scout?"< / a > Вы его делаете? Вместе с классом покажите полный код предыдущего html. Вообще, вот пример вызова байпасса в квест: http://svn.l2jdp.com/trunk/L2J_DataPack/dist/game/data/scripts/quests/Q458_PerfectForm/32768-01.htm А вот сам обработчик квеста: http://svn.l2jdp.com/trunk/L2J_DataPack/dist/game/data/scripts/quests/Q458_PerfectForm/Q458_PerfectForm.java Соответственно, вот вся папка с квестами. PS: Хм... А вы квест в scripts.cfg загружаете? Изменено 24 сентября, 2012 пользователем Relvl 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 24 сентября, 2012 (изменено) package silentium.scripts.quests; import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import silentium.commons.utils.Rnd; import silentium.gameserver.instancemanager.FourSepulchersManager; import silentium.gameserver.model.actor.L2Npc; import silentium.gameserver.model.actor.instance.L2PcInstance; import silentium.gameserver.model.quest.Quest; import silentium.gameserver.model.quest.QuestState; import silentium.gameserver.properties.GameServerProperties; import silentium.gameserver.scripting.ScriptFile; import silentium.gameserver.utils.Util; public class Q800_TotiSecret extends Quest implements ScriptFile { private static final Logger _log = LoggerFactory.getLogger(Q800_TotiSecret.class.getName()); private static final String qn = "Q800_TotiSecret"; //NPC private static final int POWER_MASTER = 50010; private static final int NPC_1 = 30862; private static final int NPC_2 = 31742; private static final int NPC_3 = 30694; //Items private static final int ITEM_1 = 10042; // Rewards private static final int REWARD_1 = 10041; public Q800_TotiSecret(final int scriptId, final String name, final String dname, final String path) { super(scriptId, name, dname, path); questItemIds = new int[] { ITEM_1, }; addStartNpc(POWER_MASTER); addTalkId(NPC_1); addTalkId(NPC_2); addTalkId(NPC_3); } public static void onLoad() { new Q800_TotiSecret(800, "Q800_TotiSecret", "TotiSecret", "Quests"); if (GameServerProperties.PRINT_QUESTS_LOADING) { _log.info("Loaded: scripts.quests.Q800_TotiSecret"); } } @Override public String onAdvEvent(final String event, final L2Npc npc, final L2PcInstance player) { String htmltext = event; final QuestState st = player.getQuestState(qn); if (st == null) { return htmltext; } if ("800-03.htm".equalsIgnoreCase(event)) { st.set("cond", "1"); st.setState(QuestState.STARTED); st.playSound(QuestState.SOUND_ACCEPT); } else if ("801-05.htm".equalsIgnoreCase(event)) { st.set("cond", "2"); st.playSound(QuestState.SOUND_MIDDLE); } else if ("802-03.htm".equalsIgnoreCase(event)) { st.set("cond", "3"); st.playSound(QuestState.SOUND_MIDDLE); } else if ("802-06.htm".equalsIgnoreCase(event)) { st.set("cond", "5"); st.playSound(QuestState.SOUND_MIDDLE); } else if ("801-07.htm".equalsIgnoreCase(event)) { st.set("cond", "6"); st.playSound(QuestState.SOUND_MIDDLE); } else if ("803-03.htm".equalsIgnoreCase(event)) { st.set("cond", "7"); st.playSound(QuestState.SOUND_MIDDLE); } else if ("803-06.htm".equalsIgnoreCase(event)) { st.set("cond", "9"); st.playSound(QuestState.SOUND_MIDDLE); } return htmltext; } @Override public String onTalk(final L2Npc npc, final L2PcInstance player) { String htmltext = Quest.getNoQuestMsg(); final QuestState st = player.getQuestState(qn); if (st == null) { return htmltext; } switch (st.getState()) { case QuestState.CREATED: if (player.getLevel() >= 80) { htmltext = "800-1.htm"; } else { htmltext = "800-00.htm"; st.exitQuest(true); } break; case QuestState.STARTED: final int cond = st.getInt("cond"); switch (npc.getNpcId()) { case NPC_1: if (cond == 1) { htmltext = "801-1.htm"; } else if (cond == 5) { htmltext = "801-1.htm"; } else if (cond == 10) { htmltext = "801-8.htm"; } break; case NPC_2: if (cond == 2) { htmltext = "802-1.htm"; } else if (cond == 3) { htmltext = "802-4.htm"; } else if (cond == 4) { htmltext = "802-5.htm"; } break; case NPC_3: if (cond == 6) { htmltext = "803-1.htm"; } else if (cond == { htmltext = "803-4.htm"; } break; } break; case QuestState.COMPLETED: htmltext = Quest.getAlreadyCompletedMsg(); break; } return htmltext; } } Да вызываю: <html><body>Мастер силы<br> Хм... Это очень опасные знания, я не могу россказать тебе о них сейчас. Мне нужно узнать твою силу, но я немогу ее проверить. Хм... Хмммм...<br> <a action="bypass -h Quest Q800_TotiSecret 800-3.htm">"Скажите как я могу доказать свою силу"</a> </body></html> Изменено 24 сентября, 2012 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 24 сентября, 2012 (изменено) Вообще, чтоб исполнить эвент квеста (или открыть связанный с квестом диалог) необходимо из предыдущего html вызвать такой байпасс: < a action="bypass -h Quest 458_PerfectForm 32768-04.htm">"Talent Scout?"< / a > Вы его делаете? Вместе с классом покажите полный код предыдущего html. Вообще, вот пример вызова байпасса в квест: http://svn.l2jdp.com...rm/32768-01.htm А вот сам обработчик квеста: http://svn.l2jdp.com...erfectForm.java Соответственно, вот вся папка с квестами. PS: Хм... А вы квест в scripts.cfg загружаете? А вот последнего я не делаю, но такого файлика нет, наверное сервак автоматом прогружает. Но диалоги показывает, и квест у стартового НПС появился Изменено 24 сентября, 2012 пользователем Anderson Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Relvl 26 Опубликовано 24 сентября, 2012 Смотрите... Вы из диалога вызываете байпасс "Quest Q800_TotiSecret 800-3.htm" Но в яве обработки этого байпасса нет. Сейчас поглядел как устроены квесты новые... Если к квестовый двиг подать хмлт параметр - он его отобразит клиенту в любом случае. Но в конкретном квесте, в перезаписи OnAdvEvent необходимо проверять этот параметр, если хотите на него среагировать. У Вас есть проверка на 800-03.htm, а вот на 800-3.htm нету. Вывод? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 24 сентября, 2012 (изменено) Смотрите... Вы из диалога вызываете байпасс "Quest Q800_TotiSecret 800-3.htm" Но в яве обработки этого байпасса нет. Сейчас поглядел как устроены квесты новые... Если к квестовый двиг подать хмлт параметр - он его отобразит клиенту в любом случае. Но в конкретном квесте, в перезаписи OnAdvEvent необходимо проверять этот параметр, если хотите на него среагировать. У Вас есть проверка на 800-03.htm, а вот на 800-3.htm нету. Вывод? Епт.... Омг, это называется пересидел перед монитором. Я тот нолик не заметил, и уже 2 день думаю что такое... Вы открыли мне глаза, спасибо) Надо пойти отдохнуть Изменено 24 сентября, 2012 пользователем Anderson 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Anderson 36 Опубликовано 24 сентября, 2012 Все работает. Закрыто Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты