Please or Регистрация to create posts and topics.

Несколько динамичных вариантов в диалоге

Дратути!
Хочу поделиться таким вариантом отыгрыша, когда, например, нам нужно спросить персонажа несколько вопросов, и так, чтобы реплики удалялись, после того как были нажаты.

Напоминаю, что я пользуюсь Свитчером //switch() {} чтобы минимизировать количество параграфов.

Допустим, у нас есть абзац диалога:

\ - Спрашивай о чем угодно!
\ [[Вопрос 1|параграф{выбор= 1;}]]
\ [[Вопрос 2|параграф{выбор= 2;}]]
\ [[Вопрос 3|параграф{выбор= 3;}]]

Ссылки ведут на тот же параграф, в котором с помощью switch(выбор) {} отображаются варианты. (Покопайтесь в руководстве, это удобнее чем If/else if)

И вот как нам сделать так, чтобы после перехода отображались только те вопросы, которых игрок еще не задавал.

Перед ссылками задаем глобальный массив:
реплики = [1,2,3];
реплик может быть и больше, сколько угодно. Не забывайте их правильно потом обрабатывать

Далее выводим ссылки:
реплики.forEach(function(item) {         //более простая форма цикла for для выполнения функции для каждого члена массива.
switch(item) {
case 1:
\ [[Вопрос 1|параграф{выбор= 1;}]]
break;
case 2:
\ [[Вопрос 2|параграф{выбор= 2;}]]
break;
case 3:
\ [[Вопрос 3|параграф{выбор= 3;}]]
break;
default:
// код, если иное значение
}
})

Они ведут на реплику, допустим:
\Вопрос номер 1, как дела?

далее какой-то ответ:

Тут было бы хорошо вставить и оставшиеся реплики. Но что если игрок пришел к этому вопросу, спросив уже о другом. Некоторые вопросы будут лишними. А если этот вопрос был последним? Значит, нам надо удалить нажатую реплику, вывести оставшиеся либо перевести на конец разговора.

Удаляем реплику:
for(var i=0; i<реплики.length; i++) {      //проверяем по количеству активных реплик еще активные
if(реплики[i]==1) {                        //теперь, если это была реплика 1, следует код
var удалённые = реплики.splice(i,1);             //удаляем реплику из массива под ее номером, в количестве 1.
}
}

Далее выводим оставшиеся:

if(реплики.length>0) {         //мы проверяем, если игрок еще не нажал какую-то реплику, то выводим оставшиеся
реплики.forEach(function(item) {
switch(item) {
case 1:
\ [[Вопрос 1|параграф{выбор= 1;}]]
break;
case 2:
\ [[Вопрос 2|параграф{выбор= 2;}]]
break;
case 3:
\ [[Вопрос 3|параграф{выбор= 3;}]]
break;
default:
// код, если иное значение
}
})
} else {           // код, если все реплики были нажаты
\ [[Продолжить|параграф{выбор=4;}]]
}

По итогу, у нас такая логика. Есть массив из нескольких цифр - номеров реплик. Мы выводим их, если номер присутствует в массиве, удаляем после перехода, а если вообще ничего не осталось - переводим в другой параграф/диалог.

 

Примерный код, как все получилось:
Извините, только авторизованные пользователи могут видеть спойлеры.

Спасибо большое, вы святой человек!!! Очень помогли!!! )))