Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Разбор полетов по Quest
#1
http://pastebin.com/TqZm2i22
Квест который модернизирую.

Каждый разговор всегда почему-то вылетает на диалог который указываю в 72 строке.

Беру квест :
http://screenshot.ru/screen/05.05.12_01:...a7727f.png
Выдает диалог из 72 строки :
http://screenshot.ru/screen/05.05.12_01:...fb4276.png

Квест уже (выполнен) :
http://screenshot.ru/screen/05.05.12_01:...8a4552.png
В Актион/Квест :
http://screenshot.ru/screen/05.05.12_01:...b07704.png

Что сделал не так с cond`ами ? Запутался с ними.

cond == 0 - Это идут проверки, верно ?
Если проверки прошел, то сразу дает cond == 1 , верно ?


Какой квест можно взять за начальное изучение с одним НПЦ ? (пока без класса onKill)
[Изображение: 1852855861.png]
Ответ
#2
Дык у вас при любом разговоре с npcId == Klein происходит
Код:
st.exitCurrentQuest(false);
htmltext = "31540-04.htm";
мб это в блоке cond == 2 должно быть?
eg
Код:
...
                        else if(cond == 2)
                        {
                                st.getPlayer().addExpAndSp((5672), (446), false, false);
                                st.exitCurrentQuest(false);
                                htmltext = "31540-04.htm";
                          } else  htmltext = "Не верные условия";
...
?
Ответ
#3
izen, Сейчас попробую.
А как тогда сделать, что бы не было постоянного вызова else if ?
Для начала разобраться с else и if - это понятно, и так этим занимаюсь щас Smile

Пытаюсь сделать так, что бы было
Диалог 1 (проверку на уровень прошел) =>
Диалог 2 (молодец, ты взял квест) => Получи награду
[Изображение: 1852855861.png]
Ответ
#4
GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.
Ответ
#5
Цитата:GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.
Вот на примерах и учу сразу.
[Изображение: 1852855861.png]
Ответ
#6
Смотри, при взятии квеста у тебя выставляет конд = 1 и стейт квест как STARTED. Тут всё верно, но дальше в обработке разговора с нпс, ты указываешь cond == 0, что уже не может быть. А первоначальный диалог с нпс, обрабатывается не по конду, а по стейту CREATED =)
Вот как примерно должно выглядить
Только не пойму одного, как он получит награду если cond нигде не меняется на 2ой? Smile
open-team.ru
Ответ
#7
Так
NPC > Quest >>
Выдает диалог *-01
Код:
Прошел проверку и идем дальше setCond(2) / if (cond ==2)
<a action="bypass -h Quest _11111_TestQuest 31540-02.htm">Принимаю квест</a>
Я на стадии START
> "Принимаю квест" Идет returnhtml ( но я не понял, почему он возвращает Аля "Вы не подходите по требованиям к этому НПЦ )

Мой cond==1
Выдает хтмл
Код:
htmltext = "31540-03.htm";

Пока на верном шаге, но что бы перейти в следующий шаг нужно ?
else if(cond == 1)
htmltext = "31540-03.htm";

Добавить setCond(2) - верно ?
Далее более подробно разобрать returnhtml, что бы выдавал следующий ХТМЛ сразу, верно ?

Добавлено через 2 минуты
Код:
else if(id == STARTED)
Агааааа!
и
Код:
if(id == CREATED)
Пошел развивать эту тему ^^,
[Изображение: 1852855861.png]
Ответ
#8
В чем вопрос то?

Зачем вообще проверять на cond == 0? Если квест не взят, то нужно if (st.getState() == CREATED). Лично мне удобнее стейты, в больших квестах с большим количеством нпц обрабатывать через case switch.


htmltext = "31540-03.htm"; // Какого-то Х... тут дают начало диалога,

onTalk обрабатывается после нажатия на Quest. Нпц нужно понимать что ему отвечать. если квест взяли, поставили cond == 1, то выдаем эту хтмлку.
Например, поговорили с нпц. Согласились делать квест. Выставляем State.STARTED, cond == 1. Согласились на квест, но не выполнили задание (cond == 1) то нпц снова посылает бить мобов. Убили мобов, поставили cond == 2. Нпц уже выдает другой диалог.
Ответ
#9
В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?

Добавлено через 9 часов 44 минуты
По какому принципу работает
Цитата: public _11111_TestQuest()
{
super(false);
addStartNpc(Klein);
addTalkId(Klein);
Каждый шаг разговора надо отписывать ?

И что обозначает (super(false)) ?
[Изображение: 1852855861.png]
Ответ
#10
GOODPower Написал:В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?

Добавлено через 9 часов 44 минуты
По какому принципу работает

Каждый шаг разговора надо отписывать ?

И что обозначает (super(false)) ?

super() - Квест выполняется патей или нет, то есть если поставить (true) = Квест\Итемы или сам cond, зачтется всей пати (У кого есть данный кв)
(flase) = Одиночный, только для добившего.

Добавлено через 5 минут
Также можно писать
super(PARTY_ONE); = Cлучайно по пати
super(PARTY_ALL); = Всей пати
super(PARTY_NONE); = По ластхиту (Кто добил цель последний)
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  quest крашит клиент CABA 5 2,349 04-24-2016, 05:45 PM
Последний пост: CABA
  Разбор структуры DDF Antonio 6 4,030 02-27-2016, 07:35 PM
Последний пост: Antonio
  [Help]Quest _10363_ RequestOfSeeker Wait_Me 4 1,444 05-06-2013, 09:55 PM
Последний пост: Wait_Me
  Quest.java kloni1 3 1,583 09-25-2012, 01:29 PM
Последний пост: kloni1
  aCis Interlude. Разбор полётов. finfan 3 2,067 09-17-2012, 12:00 AM
Последний пост: Ashe
  array mob's in quest weTr1k 11 4,164 03-10-2011, 06:32 PM
Последний пост: ANZO
  Quest: как узнать CharId? Stasev 2 2,583 04-21-2009, 01:36 PM
Последний пост: Stasev

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


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