Пожалуйста or Регистрация для создания сообщений и тем.

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

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

Напоминаю, что я пользуюсь Свитчером //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;}]]
}

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

 

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

switch(выбор) {
case 1:
\ - Спрашивай о чем угодно!

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

break;
case 2:
\Как у тебя дела

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

\ [[Ответ на вопрос|параграф{выбор= 5;}]]

 

break;
case 3:
\Какая сегодня погода?

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

\ [[Ответ на вопрос|параграф{выбор= 6;}]]

break;
case 4:
\Сколько тебе лет?

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

\ [[Ответ на вопрос|параграф{выбор= 7;}]]

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

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

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

break;

case 8:
\Вопросы кончились!

break;

default:
};

Sanches_Dach, natallka333 и SIZZZ отреагировали на эту запись.
Sanches_Dachnatallka333SIZZZ