- Сообщений: 10
- Спасибо получено: 2
Выбор в диалогах
6 года 1 нед. назад #116486
от Artem521
Artem521 создал тему: Выбор в диалогах
Приветствую всех читателей этой статьи. Хочу создать игру в которой, выборы в диалогах будут играть большую роль. Отношение NPC к игроку можно сделать через переменные. Но как расширить выбор? Допустим:
►Игрок подходит к NPC и начинает взаимодействовать с ним,
►У игрока есть выбор, что спросить у NPC: "Кто ты?" и "Где мы находимся?",
►Если игрок выбирает первый вариант, то в ходе диалога NPC рассказывает о себе,
►После, вопрос "Кто ты?" исчезает и на его место приходит новый- "Как ты себя чувствуешь?", но второй вопрос не пропадает.
►Теперь, если выбрать второй вопрос, то NPC начнёт диалог, после которого предыдущий вопрос "Как ты себя чувствуешь?" останется и заместо второго появится новый "Где находится ближайший магазин?".
►Если игрок снова выберет второй вопрос, то после диалога останется только одни вариант и это будет "Как ты себя чувствуешь?"
►Если игрок выберет последний вопрос и NPC ответит ему, то сработает переключатель и у NPC нельзя будет задавать вопросы.
Не знал как объяснить, поэтому расписал суть чего я ищу. И простите за тавтологию, не знал как по другому написать
. Пожалуйста не пишити что всё можно сделать на базе самого движка, выходит всё криво и не так как я задумывал.
Готов даже заплатить, если вы напишите плагин
.
►Игрок подходит к NPC и начинает взаимодействовать с ним,
►У игрока есть выбор, что спросить у NPC: "Кто ты?" и "Где мы находимся?",
►Если игрок выбирает первый вариант, то в ходе диалога NPC рассказывает о себе,
►После, вопрос "Кто ты?" исчезает и на его место приходит новый- "Как ты себя чувствуешь?", но второй вопрос не пропадает.
►Теперь, если выбрать второй вопрос, то NPC начнёт диалог, после которого предыдущий вопрос "Как ты себя чувствуешь?" останется и заместо второго появится новый "Где находится ближайший магазин?".
►Если игрок снова выберет второй вопрос, то после диалога останется только одни вариант и это будет "Как ты себя чувствуешь?"
►Если игрок выберет последний вопрос и NPC ответит ему, то сработает переключатель и у NPC нельзя будет задавать вопросы.
Не знал как объяснить, поэтому расписал суть чего я ищу. И простите за тавтологию, не знал как по другому написать
Готов даже заплатить, если вы напишите плагин
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
6 года 1 нед. назад #116491
от WhitePaper
WhitePaper ответил в теме Выбор в диалогах
Уже есть такой плагин, бесплатный:
himeworks.com/2015/11/hidden-choice-conditions/
В списке выборов нужно сделать все вопросы, которые можно будет задать, независимо от условий.
А условия прописываем с помощью скрипта:
1 - номер выбора (начиная с 1), который нужно спрятать
"$gameSwitches.value(4) === true" - спрятать, если переключатель 4 включён.
Под спойлером - то, что внутри события.
В кратце: после ответа на каждый вопрос включаем переменную, которая выключает доступ к этому вопросу и, возможно, включает доступ к другому.
В начале проверка, узнали ли мы ответы на все вопросы. Можно, конечно, без неё обойтись, но пустой список выборов может показаться... Странным.
Можно сделать немного по-другому, но это уже дело вкуса.
В списке выборов нужно сделать все вопросы, которые можно будет задать, независимо от условий.
А условия прописываем с помощью скрипта:
Code:
hide_choice(1, "$gameSwitches.value(4) === true")
"$gameSwitches.value(4) === true" - спрятать, если переключатель 4 включён.
Под спойлером - то, что внутри события.
В кратце: после ответа на каждый вопрос включаем переменную, которая выключает доступ к этому вопросу и, возможно, включает доступ к другому.
В начале проверка, узнали ли мы ответы на все вопросы. Можно, конечно, без неё обойтись, но пустой список выборов может показаться... Странным.
ВНИМАНИЕ: Спойлер!
◆Если:Мира: Как ты себя чувствуешь? теперь ВКЛ
◆Если:Мира: Где магазин? теперь ВКЛ
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Переход к метке:no choice
◆
:Конец
◆
:Конец
◆Скрипт:hide_choice(1, "$gameSwitches.value(4) === true")
: :hide_choice(2, "$gameSwitches.value(4) === false || $gameSwitches.value(5) === true")
: :hide_choice(3, "$gameSwitches.value(6) === true")
: :hide_choice(4, "$gameSwitches.value(6) === false || $gameSwitches.value(7) === true")
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Показать выбор:Кто ты?, Как ты себя чувствуешь?, Где мы находимся?, Где находится ближайший магазин? (Окно, Справа, #1, #2)
:Если Кто ты?
◆Сообщение:Midori(0), Окно, Низ
: :Я - Мира.
◆Переключатель:#0004 Мира: Кто ты? = ВКЛ
◆
:Если Как ты себя чувствуешь?
◆Сообщение:Midori(0), Окно, Низ
: :Нормально... А почему спрашиваешь?
◆Переключатель:#0005 Мира: Как ты себя чувствуешь? = ВКЛ
◆
:Если Где мы находимся?
◆Сообщение:Midori(0), Окно, Низ
: :На тестовой карте.
◆Переключатель:#0006 Мира: Где мы? = ВКЛ
◆
:Если Где находится ближайший магазин?
◆Сообщение:Midori(0), Окно, Низ
: :В другой игре.
◆Переключатель:#0007 Мира: Где магазин? = ВКЛ
◆
:Конец
◆Метка:no choice
◆Если:Мира: Где магазин? теперь ВКЛ
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Переход к метке:no choice
◆
:Конец
◆
:Конец
◆Скрипт:hide_choice(1, "$gameSwitches.value(4) === true")
: :hide_choice(2, "$gameSwitches.value(4) === false || $gameSwitches.value(5) === true")
: :hide_choice(3, "$gameSwitches.value(6) === true")
: :hide_choice(4, "$gameSwitches.value(6) === false || $gameSwitches.value(7) === true")
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Показать выбор:Кто ты?, Как ты себя чувствуешь?, Где мы находимся?, Где находится ближайший магазин? (Окно, Справа, #1, #2)
:Если Кто ты?
◆Сообщение:Midori(0), Окно, Низ
: :Я - Мира.
◆Переключатель:#0004 Мира: Кто ты? = ВКЛ
◆
:Если Как ты себя чувствуешь?
◆Сообщение:Midori(0), Окно, Низ
: :Нормально... А почему спрашиваешь?
◆Переключатель:#0005 Мира: Как ты себя чувствуешь? = ВКЛ
◆
:Если Где мы находимся?
◆Сообщение:Midori(0), Окно, Низ
: :На тестовой карте.
◆Переключатель:#0006 Мира: Где мы? = ВКЛ
◆
:Если Где находится ближайший магазин?
◆Сообщение:Midori(0), Окно, Низ
: :В другой игре.
◆Переключатель:#0007 Мира: Где магазин? = ВКЛ
◆
:Конец
◆Метка:no choice
Можно сделать немного по-другому, но это уже дело вкуса.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
6 года 1 нед. назад #116502
от Artem521
Artem521 ответил в теме Выбор в диалогах
С работой плагина разобрался, всё работает как надо. Но заметил одну проблему: "Hidden Choice Conditions" не работает вместе "YEP_ExtMesPack1". Если ставить первый плагин ниже второго, то перед появлением выбора игра намертво зависает, даже консоль не открывается. Если поставить их на оборот, то ничего не происходит, что должно скрыться вовсе не скрывается
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
6 года 1 нед. назад - 6 года 1 нед. назад #116509
от Dmy
В YEP_ExtMesPack1 есть свой код для скрытия пунктов меню, для него плагин от Hime не нужен.
В настройках YEP_ExtMesPack1 есть опция типа Choice 1 Show Switch, Choice 2 Show Switch, Choice 3 Show Switch, Choice 4 Show Switch и т.д. В этих пунктах можно выбрать переключатель для каждого пункта выборов:
Я советую выбрать какие-то номера, которые идут подряд. Например, от 11 до 30 (как у меня на скриншоте). Или от 101 до 120. Потом, если выбранный переключатель ВКЛючён, то выбор будет показываться. Если выключен — то не будет.
То есть проверка идёт наоборот. Если у Hime надо писать условие скрытия, то тут переключатель надо включать для появления.
Переключатель можно включить таким кодом
В примере WhitePaper был такой скрипт:
Если мы будем использовать встроенную функцию из YEP_ExtMesPack1, то код будет таким (если для выборов используются переключатели №11, №12, №13 и №14):
Ну или так (это одно и то же, просто мне такой код больше нравится — он короче):
Ну, надеюсь, принцип понятен.
Вот полный пример от WhitePaper с использованием YEP_ExtMesPack1 вместо HIME_HiddenChoiceConditions (жирным выделено то, что изменилось):
Dmy ответил в теме Выбор в диалогах
Artem521 пишет: С работой плагина разобрался, всё работает как надо. Но заметил одну проблему: "Hidden Choice Conditions" не работает вместе "YEP_ExtMesPack1".
В YEP_ExtMesPack1 есть свой код для скрытия пунктов меню, для него плагин от Hime не нужен.
В настройках YEP_ExtMesPack1 есть опция типа Choice 1 Show Switch, Choice 2 Show Switch, Choice 3 Show Switch, Choice 4 Show Switch и т.д. В этих пунктах можно выбрать переключатель для каждого пункта выборов:
Я советую выбрать какие-то номера, которые идут подряд. Например, от 11 до 30 (как у меня на скриншоте). Или от 101 до 120. Потом, если выбранный переключатель ВКЛючён, то выбор будет показываться. Если выключен — то не будет.
То есть проверка идёт наоборот. Если у Hime надо писать условие скрытия, то тут переключатель надо включать для появления.
Переключатель можно включить таким кодом
Code:
$gameSwitches.setValue(11, УСЛОВИЕ);
//вместо 11 надо написать номер переключателя, связанного с первым выбором
В примере WhitePaper был такой скрипт:
Code:
hide_choice(1, "$gameSwitches.value(4) === true")
hide_choice(2, "$gameSwitches.value(4) === false || $gameSwitches.value(5) === true")
hide_choice(3, "$gameSwitches.value(6) === true")
hide_choice(4, "$gameSwitches.value(6) === false || $gameSwitches.value(7) === true")
Если мы будем использовать встроенную функцию из YEP_ExtMesPack1, то код будет таким (если для выборов используются переключатели №11, №12, №13 и №14):
Code:
$gameSwitches.setValue(11, $gameSwitches.value(4) === false);
$gameSwitches.setValue(12, $gameSwitches.value(4) === true && $gameSwitches.value(5) === false);
$gameSwitches.setValue(13, $gameSwitches.value(6) === false);
$gameSwitches.setValue(14, $gameSwitches.value(6) === true && $gameSwitches.value(7) === false);
Ну или так (это одно и то же, просто мне такой код больше нравится — он короче):
Code:
$gameSwitches.setValue(11, !$gameSwitches.value(4));
$gameSwitches.setValue(12, $gameSwitches.value(4) && !$gameSwitches.value(5));
$gameSwitches.setValue(13, !$gameSwitches.value(6));
$gameSwitches.setValue(14, $gameSwitches.value(6) && !$gameSwitches.value(7));
Ну, надеюсь, принцип понятен.
Вот полный пример от WhitePaper с использованием YEP_ExtMesPack1 вместо HIME_HiddenChoiceConditions (жирным выделено то, что изменилось):
ВНИМАНИЕ: Спойлер!
◆Если:Мира: Как ты себя чувствуешь? теперь ВКЛ
◆Если:Мира: Где магазин? теперь ВКЛ
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Переход к метке:no choice
◆
:Конец
◆
:Конец
◆Скрипт:$gameSwitches.setValue(11, !$gameSwitches.value(4));
: :$gameSwitches.setValue(12, $gameSwitches.value(4) && !$gameSwitches.value(5));
: :$gameSwitches.setValue(13, !$gameSwitches.value(6));
: :$gameSwitches.setValue(14, $gameSwitches.value(6) && !$gameSwitches.value(7));
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Показать выбор:Кто ты?, Как ты себя чувствуешь?, Где мы находимся?, Где находится ближайший магазин? (Окно, Справа, #1, #2)
:Если Кто ты?
◆Сообщение:Midori(0), Окно, Низ
: :Я - Мира.
◆Переключатель:#0004 Мира: Кто ты? = ВКЛ
◆
:Если Как ты себя чувствуешь?
◆Сообщение:Midori(0), Окно, Низ
: :Нормально... А почему спрашиваешь?
◆Переключатель:#0005 Мира: Как ты себя чувствуешь? = ВКЛ
◆
:Если Где мы находимся?
◆Сообщение:Midori(0), Окно, Низ
: :На тестовой карте.
◆Переключатель:#0006 Мира: Где мы? = ВКЛ
◆
:Если Где находится ближайший магазин?
◆Сообщение:Midori(0), Окно, Низ
: :В другой игре.
◆Переключатель:#0007 Мира: Где магазин? = ВКЛ
◆
:Конец
◆Метка:no choice
◆Если:Мира: Где магазин? теперь ВКЛ
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Переход к метке:no choice
◆
:Конец
◆
:Конец
◆Скрипт:$gameSwitches.setValue(11, !$gameSwitches.value(4));
: :$gameSwitches.setValue(12, $gameSwitches.value(4) && !$gameSwitches.value(5));
: :$gameSwitches.setValue(13, !$gameSwitches.value(6));
: :$gameSwitches.setValue(14, $gameSwitches.value(6) && !$gameSwitches.value(7));
◆Сообщение:Midori(0), Окно, Низ
: :Привет!
◆Показать выбор:Кто ты?, Как ты себя чувствуешь?, Где мы находимся?, Где находится ближайший магазин? (Окно, Справа, #1, #2)
:Если Кто ты?
◆Сообщение:Midori(0), Окно, Низ
: :Я - Мира.
◆Переключатель:#0004 Мира: Кто ты? = ВКЛ
◆
:Если Как ты себя чувствуешь?
◆Сообщение:Midori(0), Окно, Низ
: :Нормально... А почему спрашиваешь?
◆Переключатель:#0005 Мира: Как ты себя чувствуешь? = ВКЛ
◆
:Если Где мы находимся?
◆Сообщение:Midori(0), Окно, Низ
: :На тестовой карте.
◆Переключатель:#0006 Мира: Где мы? = ВКЛ
◆
:Если Где находится ближайший магазин?
◆Сообщение:Midori(0), Окно, Низ
: :В другой игре.
◆Переключатель:#0007 Мира: Где магазин? = ВКЛ
◆
:Конец
◆Метка:no choice
Последнее редактирование: 6 года 1 нед. назад пользователем Dmy.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.114 секунд
