Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Выбор в диалогах

Выбор в диалогах 4 года 7 мес. назад #116486

  • Artem521
  • Artem521 аватар
  • Вне сайта
  • Познающий
  • Сообщений: 10
  • Спасибо получено: 2
Приветствую всех читателей этой статьи. Хочу создать игру в которой, выборы в диалогах будут играть большую роль. Отношение NPC к игроку можно сделать через переменные. Но как расширить выбор? Допустим:

►Игрок подходит к NPC и начинает взаимодействовать с ним,
►У игрока есть выбор, что спросить у NPC: "Кто ты?" и "Где мы находимся?",
►Если игрок выбирает первый вариант, то в ходе диалога NPC рассказывает о себе,
►После, вопрос "Кто ты?" исчезает и на его место приходит новый- "Как ты себя чувствуешь?", но второй вопрос не пропадает.
►Теперь, если выбрать второй вопрос, то NPC начнёт диалог, после которого предыдущий вопрос "Как ты себя чувствуешь?" останется и заместо второго появится новый "Где находится ближайший магазин?".
►Если игрок снова выберет второй вопрос, то после диалога останется только одни вариант и это будет "Как ты себя чувствуешь?"
►Если игрок выберет последний вопрос и NPC ответит ему, то сработает переключатель и у NPC нельзя будет задавать вопросы.
Не знал как объяснить, поэтому расписал суть чего я ищу. И простите за тавтологию, не знал как по другому написать :mad:. Пожалуйста не пишити что всё можно сделать на базе самого движка, выходит всё криво и не так как я задумывал.
Готов даже заплатить, если вы напишите плагин :blush:.
Администратор запретил публиковать записи гостям.

Выбор в диалогах 4 года 7 мес. назад #116491

  • WhitePaper
  • WhitePaper аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 378
  • Спасибо получено: 996
  • Проект месяца 2 местоПисатель 3 местоПроект месяца 3 местоРазработчик
Уже есть такой плагин, бесплатный: himeworks.com/2015/11/hidden-choice-conditions/

В списке выборов нужно сделать все вопросы, которые можно будет задать, независимо от условий.
А условия прописываем с помощью скрипта:
hide_choice(1, "$gameSwitches.value(4) === true")
1 - номер выбора (начиная с 1), который нужно спрятать
"$gameSwitches.value(4) === true" - спрятать, если переключатель 4 включён.

Под спойлером - то, что внутри события.

В кратце: после ответа на каждый вопрос включаем переменную, которая выключает доступ к этому вопросу и, возможно, включает доступ к другому.
В начале проверка, узнали ли мы ответы на все вопросы. Можно, конечно, без неё обойтись, но пустой список выборов может показаться... Странным.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Можно сделать немного по-другому, но это уже дело вкуса.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Cabbit, akito66, Milkwilk, Artem521, Alx_Yago

Выбор в диалогах 4 года 7 мес. назад #116502

  • Artem521
  • Artem521 аватар
  • Вне сайта
  • Познающий
  • Сообщений: 10
  • Спасибо получено: 2
С работой плагина разобрался, всё работает как надо. Но заметил одну проблему: "Hidden Choice Conditions" не работает вместе "YEP_ExtMesPack1". Если ставить первый плагин ниже второго, то перед появлением выбора игра намертво зависает, даже консоль не открывается. Если поставить их на оборот, то ничего не происходит, что должно скрыться вовсе не скрывается
Администратор запретил публиковать записи гостям.

Выбор в диалогах 4 года 7 мес. назад #116509

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2478
  • За 2 место на конкурсе маппингаУчительПроект месяца 3 местоПоддержка ФондаДаритель СтимкеяПрограммист RubyВетеранОратор2 место Разработчик
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 и т.д. В этих пунктах можно выбрать переключатель для каждого пункта выборов:

choice-switches.png


Я советую выбрать какие-то номера, которые идут подряд. Например, от 11 до 30 (как у меня на скриншоте). Или от 101 до 120. Потом, если выбранный переключатель ВКЛючён, то выбор будет показываться. Если выключен — то не будет.

То есть проверка идёт наоборот. Если у Hime надо писать условие скрытия, то тут переключатель надо включать для появления.

Переключатель можно включить таким кодом
$gameSwitches.setValue(11, УСЛОВИЕ);
//вместо 11 надо написать номер переключателя, связанного с первым выбором


В примере WhitePaper был такой скрипт:
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):
$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);

Ну или так (это одно и то же, просто мне такой код больше нравится — он короче):
$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 (жирным выделено то, что изменилось):
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 4 года 7 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Cabbit, Artem521, Okorok.S, Alx_Yago
Модераторы: NeKotZima
Время создания страницы: 0.235 секунд