Форум

Уведомления
Очистить все

[MS] Диалоги

 
Джеки Чан
Известный участник Модератор Гильдия переводчиков

Первая часть любого диалога, с которой он начинается, выглядит примерно так:

"[ ...какой-то код... ]"

Это код, отвечающий за проверку условий при вызове диалога. Единственное и главное его назначение – проверять, выполнено ли данное условие или набор условий и возвращать результат. Каждый диалог при вызове проверяет это условие до тех, пока оно не будет выполнено.

Далее идут последующие части диалога, которые выполняются, только в том случае, если проверка условий пройдена успешно и активна именно их ветвь диалога. Поэтому, если вы хотите, чтобы какое-то одно действие выполнялось всегда, когда, игрок, например, встречает Главнокомандующего во вторник, но совершенно другое – когда они встречаются в среду, диалог может выглядеть как-то так:

#Начало диалога
[
#См. header_dialogs, чтобы узнать, какие команды могут быть использованы здесь помимо "anyone".  Но любой диалог обязательно должен иметь строку "start",
anyone, "start",
#Начало стартового блока проверки условий
[ 
(eq, "$g_talk_troop", "trp_generalissimo_evilguy"),#Собеседник игрока – главнокомандущий?
(try_begin),
   (eq, "$g_day_of_week", 2),#Сейчас вторник?
   (assign, "$g_conversation_temp",1),
   (str_store_string, s17, "@Так начинается разговор по вторникам"),
(else_try),
   (eq, "$g_day_of_week", 3),# Сейчас среда?
   (assign, "$g_conversation_temp",2),
   (str_store_string, s17, "@ Так начинается разговор по средам "),
 (else_try), ,# Если сейчас не вторник и не среда
   (assign, "$g_conversation_temp",3)
   (str_store_string, s17, "@ Так начинается разговор во все остальные дни "),
(try_end),
],
#Допустим, проверка пройдена и собеседник игрока – главнокомандующий. Теперь надо вывести нужный текст
"s17",
#Теперь нужно добавить ответные реплики игрока, пускай даже какие-нибудь простейшие типа «Уйти» для выхода из диалога
"player_response_or_responses_here",
#Специальный код, если нужен:
[],
#Конец диалога
],

Но вообще создавать строки диалога, зависящие от классов, в одном блоке условий, как это было сделано выше — довольно плохой тон. Так делать не стоит, поскольку больше вероятность сделать какую-нибудь логическую ошибку. Лучше заключать создание каждой строки в отдельный блок условий, вот так:

[anyone,"start", [(eq, "$g_talk_troop", "trp_player_castellan"),], "Что вам угодно, {playername}?", "castellan_talk",[]],

С помощью такого подхода можно сделать несколько вариантов начала разговора, используя несколько блоков условий:

[code][anyone,"start",
[
(eq, "$g_talk_troop", "trp_player_castellan"),
(eq, "$g_some_game_global", 1),
], "Что вам угодно,{playername}?", "castellan_talk",[]],

[anyone,"start",
[
(eq, "$g_talk_troop", "trp_player_castellan"),
(eq, "$g_some_game_global", 2),
], "А, это снова ты, {playername}! Подлый мерзавец, 

 

ОтветитьЦитата
Автор темы Размещено : 26.01.2022 12:26
Павел Лунный отреагировал

Оставьте ответ

Имя автора

Электронная почта автора

Заголовок *

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Политика конфиденциальности