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

Квест

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

И так, мои руки добрались до создания квеста. Написал скрипт, сделал диалоги. Скомпилил, у стартового нпц появился квест, там 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 реакции.

Умные люде помогите советом, мб я что то где то забыл?

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


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

из третьего диалога ссылку в студию, откуда мы знаем, чем вы пытаетесь его запустить.

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


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

из третьего диалога ссылку в студию, откуда мы знаем, чем вы пытаетесь его запустить.

 

 

<html><body>Мастер силы<br>
Хорошо, но знайте что это очень опасно. Если вы уверены...
Направляйтесь к мастеру Лимонолу. Он находится в Глудио в торговой лавке
</body></html>

 

Тут ничего необычного, диалог выплыл а кв не добавился.

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

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


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

Как-бы, чтоб запустить квест - нужно дать на это команду. Изучайте устройство стандартных квестов...

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


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

Как-бы, чтоб запустить квест - нужно дать на это команду. Изучайте устройство стандартных квестов...

Я не нашел норм туториалов по написанию кв на Джаве. По этому написал сюда

 

st.setState(QuestState.STARTED);

 

Это не она разве?

 

П.С. На джаве, не Питон

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

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


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

скачай лыжу последнюю, там много квестов на яве.

и причем тут туториалы/мануалы? мозга, чтоб самому посмотреть в движке - нету? обязательно надо быть ребенком, которому все разжевывают?

 

Это не она разве?

из html должна вести специальная ссылка, которая в скрипт квеста отправит нужный эвент. в твоем последнем хытымеле нет такой, только совет отправиться к кому-то там.

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


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

скачай лыжу последнюю, там много квестов на яве.

и причем тут туториалы/мануалы? мозга, чтоб самому посмотреть в движке - нету? обязательно надо быть ребенком, которому все разжевывают?

из html должна вести специальная ссылка, которая в скрипт квеста отправит нужный эвент. в твоем последнем хытымеле нет такой, только совет отправиться к кому-то там.

Потому прошу объяснения, вроде пересмотрел все квы (сборка Силентиум) и там нигде ничего не отправляется

Мне казалось что при открытии диалога отправляется эвент:

if ("800-03.htm".equalsIgnoreCase(event))
{
st.set("cond", "1");
st.setState(QuestState.STARTED);
st.playSound(QuestState.SOUND_ACCEPT);
}

 

Я и спрашиваю, как оно работает, гугл не помогает, сам порылся не допер

Глянул на кв на питоне, почти тоже, вызова из ХТМ ли не наблюдаю

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

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


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

Потому прошу объяснения, вроде пересмотрел все квы (сборка Силентиум) и там нигде ничего не отправляется

Мне казалось что при открытии диалога отправляется эвент:

if ("800-03.htm".equalsIgnoreCase(event))
{
st.set("cond", "1");
st.setState(QuestState.STARTED);
st.playSound(QuestState.SOUND_ACCEPT);
}

 

Я и спрашиваю, как оно работает, гугл не помогает, сам порылся не допер

Глянул на кв на питоне, почти тоже, вызова из ХТМ ли не наблюдаю

Учите Java.

Кроме знаний ничего не поможет.

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

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


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

Да что это такое, попросил о помощи, а меня шлют джаву учить. Что именно учить? Я не понимаю само устройство квестов. Пересмотрел остальные, сделал. Не ужели знающему человеку так сложно помочь?

if ("800-03.htm".equalsIgnoreCase(event))
{
}

Это должно как то вызываться, но я непонимаю как оно получает евент. Но по Джаве я все тут прекрасно разбераю.

Опять прошу объяснить а не посылать

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


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

Хм... Да, и правда, немного перекроили архитектору квестов за последнее время, давно не лазил по ним.

Извиняюсь за неправильные наводки.

 

Полностью класс квеста посмотреть можно?

  • Upvote 1

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


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

Вообще, чтоб исполнить эвент квеста (или открыть связанный с квестом диалог) необходимо из предыдущего 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 загружаете?

Изменено пользователем Relvl
  • Upvote 1

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


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

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>

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

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


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

Вообще, чтоб исполнить эвент квеста (или открыть связанный с квестом диалог) необходимо из предыдущего 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 загружаете?

 

А вот последнего я не делаю, но такого файлика нет, наверное сервак автоматом прогружает. Но диалоги показывает, и квест у стартового НПС появился

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

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


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

Смотрите... Вы из диалога вызываете байпасс "Quest Q800_TotiSecret 800-3.htm"

Но в яве обработки этого байпасса нет.

Сейчас поглядел как устроены квесты новые...

 

Если к квестовый двиг подать хмлт параметр - он его отобразит клиенту в любом случае.

Но в конкретном квесте, в перезаписи OnAdvEvent необходимо проверять этот параметр, если хотите на него среагировать.

 

У Вас есть проверка на 800-03.htm, а вот на 800-3.htm нету. Вывод?

  • Upvote 1

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


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

Смотрите... Вы из диалога вызываете байпасс "Quest Q800_TotiSecret 800-3.htm"

Но в яве обработки этого байпасса нет.

Сейчас поглядел как устроены квесты новые...

 

Если к квестовый двиг подать хмлт параметр - он его отобразит клиенту в любом случае.

Но в конкретном квесте, в перезаписи OnAdvEvent необходимо проверять этот параметр, если хотите на него среагировать.

 

У Вас есть проверка на 800-03.htm, а вот на 800-3.htm нету. Вывод?

 

Епт.... Омг, это называется пересидел перед монитором. Я тот нолик не заметил, и уже 2 день думаю что такое... Вы открыли мне глаза, спасибо) Надо пойти отдохнуть

Изменено пользователем Anderson
  • Upvote 1

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


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

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

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

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

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

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

Войти

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

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

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

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

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