Сообщений: 1,640
Тем: 82
Зарегистрирован: Feb 2012
Репутация:
4,234
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)
Сообщений: 86
Тем: 2
Зарегистрирован: Sep 2010
Репутация:
757
Дык у вас при любом разговоре с 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 = "Не верные условия";
...
?
Сообщений: 1,640
Тем: 82
Зарегистрирован: Feb 2012
Репутация:
4,234
izen, Сейчас попробую.
А как тогда сделать, что бы не было постоянного вызова else if ?
Для начала разобраться с else и if - это понятно, и так этим занимаюсь щас
Пытаюсь сделать так, что бы было
Диалог 1 (проверку на уровень прошел) =>
Диалог 2 (молодец, ты взял квест) => Получи награду
Сообщений: 86
Тем: 2
Зарегистрирован: Sep 2010
Репутация:
757
GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.
Сообщений: 1,640
Тем: 82
Зарегистрирован: Feb 2012
Репутация:
4,234
Цитата:GOODPower, вопрос не понял. не хотите if .. elsif, берите switch ... case, но ИМХО лучше сначала язык выучите.
Вот на примерах и учу сразу.
Сообщений: 265
Тем: 2
Зарегистрирован: Jan 2010
Репутация:
4,770
Смотри, при взятии квеста у тебя выставляет конд = 1 и стейт квест как STARTED. Тут всё верно, но дальше в обработке разговора с нпс, ты указываешь cond == 0, что уже не может быть. А первоначальный диалог с нпс, обрабатывается не по конду, а по стейту CREATED =)
Вот как примерно должно выглядить
Код: @Override
public String onEvent(String event, QuestState qs, L2NpcInstance npc)
{
String htmltext = "noquest";
if(event.equalsIgnoreCase("31540-02.htm"))
{
qs.setCond(1);
qs.setState(STARTED);
qs.playSound(SOUND_ACCEPT);
}
return htmltext;
}
@Override
public String onTalk(L2NpcInstance npc, QuestState st)
{
String htmltext = "noquest";
int npcId = npc.getNpcId();
int cond = st.getCond();
int id = st.getState();
if(id == CREATED)
if(npcId == Klein)
if(st.getPlayer().getLevel() == 1)
{
st.exitCurrentQuest(true);
htmltext = "31540-nolevel.htm";
}
else
htmltext = "31540-01.htm";
else if(id == STARTED)
if(npcId == Klein)
if(cond == 1)
htmltext = "31540-03.htm";
else if(cond == 2)
{
st.getPlayer().addExpAndSp((5672), (446), false, false);
st.exitCurrentQuest(false);
htmltext = "31540-04.htm";
}
return htmltext;
}
Только не пойму одного, как он получит награду если cond нигде не меняется на 2ой?
open-team.ru
Сообщений: 1,640
Тем: 82
Зарегистрирован: Feb 2012
Репутация:
4,234
05-05-2012, 12:57 AM
(Сообщение последний раз редактировалось: 05-05-2012, 12:59 AM GOODPower.)
Так
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)
Агааааа!
и
Пошел развивать эту тему ^^,
Сообщений: 197
Тем: 4
Зарегистрирован: Aug 2011
Репутация:
948
В чем вопрос то?
Зачем вообще проверять на cond == 0? Если квест не взят, то нужно if (st.getState() == CREATED). Лично мне удобнее стейты, в больших квестах с большим количеством нпц обрабатывать через case switch.
htmltext = "31540-03.htm"; // Какого-то Х... тут дают начало диалога,
onTalk обрабатывается после нажатия на Quest. Нпц нужно понимать что ему отвечать. если квест взяли, поставили cond == 1, то выдаем эту хтмлку.
Например, поговорили с нпц. Согласились делать квест. Выставляем State.STARTED, cond == 1. Согласились на квест, но не выполнили задание (cond == 1) то нпц снова посылает бить мобов. Убили мобов, поставили cond == 2. Нпц уже выдает другой диалог.
Сообщений: 1,640
Тем: 82
Зарегистрирован: Feb 2012
Репутация:
4,234
05-05-2012, 01:28 AM
(Сообщение последний раз редактировалось: 05-05-2012, 11:12 AM GOODPower.)
В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?
Добавлено через 9 часов 44 минуты
По какому принципу работает
Цитата: public _11111_TestQuest()
{
super(false);
addStartNpc(Klein);
addTalkId(Klein);
Каждый шаг разговора надо отписывать ?
И что обозначает (super(false)) ?
Сообщений: 1,053
Тем: 33
Зарегистрирован: Sep 2011
Репутация:
12,172
05-05-2012, 08:34 PM
(Сообщение последний раз редактировалось: 05-05-2012, 08:42 PM L2CCCP.)
GOODPower Написал:В некоторых квестах замечаю особенность, что return идет не по htmltext, а по event.
event значит автоматов вернет следующий диалог ?
Добавлено через 9 часов 44 минуты
По какому принципу работает
Каждый шаг разговора надо отписывать ?
И что обозначает (super(false)) ?
super() - Квест выполняется патей или нет, то есть если поставить (true) = Квест\Итемы или сам cond, зачтется всей пати (У кого есть данный кв)
(flase) = Одиночный, только для добившего.
Добавлено через 5 минут
Также можно писать
super(PARTY_ONE); = Cлучайно по пати
super(PARTY_ALL); = Всей пати
super(PARTY_NONE); = По ластхиту (Кто добил цель последний)
|