Как сделать?
…
Спасибо огромное!
Всегда рад :)
Евген:
Всегда рад
Благодарят Некса, а не тебя :)
Мне это не мешает.
Вопрос по поводу диалогов. Как лучше, удобнее и компактнее запрограммировать линейный, многократно ветвящийся диалог с повторением отдельных вариантов ответа? То есть, вот такой:
!Диалог начался
- NPC Talk
- 1answvar
- 2answvar
if 1answvar:
- NPC Talk
- 3answvar
- 4answvar
- 2answvar end
if 2answvar:
- 5answvar
- 4answvar
- 1answvar end
И так далее. Сказав сначала 2answvar, затем 5answvar, получаешь ещё несколько answvar на выбор, среди них новые и старые… То есть, при сложном диалоге, появляется куча вложенных одно в другое if … end, что плохо. Вдобавок, варианты ответов (answvar) дублируются, впустую захламляя код и утяжеляя игру.
Есть ли у кого наработки оптимально решения?
Я вообще ничего не понял
ChainSaw,
Да, наработки присутствуют ещё в обучении, “диалоги”, вот
ссылка
Суть в том, что ты задаёшь тему разговора (ну, отдельный обмен фразами положим).
Таким образом, локация у тебя будет выглядеть примерно так:
CLA
if тема = "тема1":
*NL 'бла-бла?'
act 'вопрос1':
тема = "подтема1"
gs curloc
end
act 'вопрос2':
тема = "подтема2"
gs curloc
end
end
if тема = 'подтема1':
*NL 'Бла-бла!'
end
Вот примерно такой принцип. Я его немного модифицировал и использую, очень удобно.
Antipod,
спасибо, попробую, как протрезвею. Но всё равно при таком способе один и тот же “вопросN” может повториться раз пять в разных “темах”. Много копий одного вопроса засоряют код. Тем более если при выборе этого “вопроса” идут дополнительные инструкции: установка переменных, изменение параметров героя и т.д. Вот и думаю, нельзя ли сократить?
Может, ежели создать $array[N], в который записать все возможные “ответы” и “бла-бла”, а потом по мере необходимости вызывать нужные строки? Тогда код станет выглядеть так:
if тема = "тема1":
*NL '<<$array[1]>>'
act '<<$array[2]>>':
тема = "подтема1"
gs curloc
end
act '<<$array[3]>>':
тема = "подтема2"
gs curloc
end
end
И так далее. Будет работать?
Вот ещё вопрос: если в массив записать инструкции, можно ли их будет потом извлечь оттуда и исполнить?
ChainSaw,
ChainSaw:
Может, ежели создать $array[N], в который записать все возможные “ответы” и “бла-бла”, а потом по мере необходимости вызывать нужные строки?
Если так, то нужно будет создавать базу строк. В конце концов это приведёт к простому разбиению на 2 локации, ещё и с заморочкой вызова и передачи параметров.
В общем-то, по сути, один и тот же вопрос должен приводить к одному и тому же ответу. Ну, может реакция как-либо и может изменится, но это один-два if не больше, просто пара флажков. А вот с бла-бла подход правильный, забил все эти выраженьица в массив и случайно вызывать, и никаких иф-ов не надо.
ChainSaw:
Вот ещё вопрос: если в массив записать инструкции, можно ли их будет потом извлечь оттуда и исполнить?
Хм… Тут нужно обратиться к справке “Динамическое исполнение кода”. Сам таким не пользовался, но тут есть. Ключевое слово DYNAMIC
ChainSaw, Не надо копировать один и тот же вопрос в пяти разных темах, да и базу создавать глупо, если диалог используется только один раз (для одного персонажа), просто перечисли все темы в условии вызова этого вопроса:
if тема='подтема1' or тема='подтема2' or тема='подтема3':
act 'вопрос в подтемах':
...
end
end
Насколько “вместительна” строковая переменная?
Возникла мысль сделать журнал таким образом:
$journal=$journal+'
<font size=+1>Название записи</font>
Содержание записи'
Но не уверен, что весь дневник сможет влезть в переменную)
До 2гб текста. Должно влезть :)
Byte:
До 2гб текста. Должно влезть
Ну нифига себе, объёмчик))) Окей, тогда так и буду реализовывать, раз уж о размере можно не беспокоиться)
Можете пожалуйста хорошо объяснить, как создавать менюшки? В справке что-то не очень понятно написано.