Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Разбор полетов по Quest (https://forum.zone-game.info/showthread.php?t=19814)

GOODPower 05.05.2012 00:29

Разбор полетов по Quest
 
http://pastebin.com/TqZm2i22
Квест который модернизирую.

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

Беру квест :
http://screenshot.ru/screen/05.05.12...9_dda7727f.png
Выдает диалог из 72 строки :
http://screenshot.ru/screen/05.05.12...0_71fb4276.png

Квест уже (выполнен) :
http://screenshot.ru/screen/05.05.12...9_c38a4552.png
В Актион/Квест :
http://screenshot.ru/screen/05.05.12...7_53b07704.png

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

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


Какой квест можно взять за начальное изучение с одним НПЦ ? (пока без класса onKill)

izen 05.05.2012 00:36

Re: Разбор полетов по Quest
 
Дык у вас при любом разговоре с 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 = "Не верные условия";
...

?

GOODPower 05.05.2012 00:39

Re: Разбор полетов по Quest
 
izen, Сейчас попробую.
А как тогда сделать, что бы не было постоянного вызова else if ?
Для начала разобраться с else и if - это понятно, и так этим занимаюсь щас :)

Пытаюсь сделать так, что бы было
Диалог 1 (проверку на уровень прошел) =>
Диалог 2 (молодец, ты взял квест) => Получи награду

izen 05.05.2012 00:41

Re: Разбор полетов по Quest
 
GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.

GOODPower 05.05.2012 00:43

Re: Разбор полетов по Quest
 
Цитата:

GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.
Вот на примерах и учу сразу.

Drizzy 05.05.2012 00:45

Re: Разбор полетов по Quest
 
Смотри, при взятии квеста у тебя выставляет конд = 1 и стейт квест как STARTED. Тут всё верно, но дальше в обработке разговора с нпс, ты указываешь cond == 0, что уже не может быть. А первоначальный диалог с нпс, обрабатывается не по конду, а по стейту CREATED =)
Вот как примерно должно выглядить:
Свернуть ↑Развернуть ↓

Только не пойму одного, как он получит награду если cond нигде не меняется на 2ой? :)

GOODPower 05.05.2012 00:57

Re: Разбор полетов по Quest
 
Так
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)
Пошел развивать эту тему ^^,

coldy 05.05.2012 01:02

Re: Разбор полетов по Quest
 
В чем вопрос то?

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


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

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

GOODPower 05.05.2012 01:28

Re: Разбор полетов по Quest
 
В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?

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

public _11111_TestQuest()
{
super(false);
addStartNpc(Klein);
addTalkId(Klein);
Каждый шаг разговора надо отписывать ?

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

L2CCCP 05.05.2012 20:34

Re: Разбор полетов по Quest
 
Цитата:

Сообщение от GOODPower (Сообщение 185241)
В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?

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

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

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

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

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


Текущее время: 06:08. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot