Перейти к основному содержимому

14.13. Как сделать многоуровневый рюкзак?

В: Как сделать многоуровневый рюкзак? В: Как сделать предметы в предметах? Например, щёлкаешь по предмету "Рюкзак", и в окне инвентаря появляется список предметов в рюкзаке.

О: Списки предметов можно хранить в разных массивах. Например:

! верхний уровень предметов

$ур0_предметы[0]="Дневник заданий"
$ур0_предметы[1]="Рюкзак"
$ур0_предметы[2]="Книга заклинаний"
$ур0_предметы[3]="Кошелёк"
! предметы в рюкзаке

$ур1_предметы[0]="Отвёртка"
$ур1_предметы[1]="Хрустальный шар"
$ур1_предметы[2]="Агар-Агар"

С помощью цикла любой из этих списков можно вывести на экран.

На локации-обработчике выделения предмета можно прописать примерно такой код:

if $selobj="Рюкзак":
! если кликнули по предмету рюкзак

! удаляем список предметов верхнего уровня

killobj
! выводим предмет, позволяющий вернуться обратно

! к списку предметов верхнего уровня

addobj "...Назад..."
! выводим предметы в рюкзаке

loop local i=0 while i<arrsize('$ур1_предметы') step i+=1:
addobj $ур1_предметы[i]
end
end

if $selobj="...Назад...":
! если кликнули по предмету Назад

! удаляем старый список с экрана

killobj
! выводим новый (предметы верхнего уровня)

loop local i=0 while i<arrsize('$ур0_предметы') step i+=1:
addobj $ур0_предметы[i]
end
end

Если вам нужно более двух списков предметов, то заводить отдельный массив на каждый неразумно. Проще завести два массива:

  • в одном массиве прописывать сам предмет: $предмет_название[0]="Бутылка кетчупа"
  • во втором массиве прописывать, где этот предмет находится: $предмет_расположение[0]="Рюкзак"

Важно, чтобы индексы и предмета, и его расположения, в каждом массиве совпадали.

Вывести все предметы текущего уровня можно так:

! где-то ранее мы написали, предметы какого уровня нам нужно вывести

$уровень_вложений="Рюкзак"
! очищаем окно предметов от предметов другого уровня

killobj
! выводим предметы текущего уровня в окно предметов

loop local i=0 while i<arrsize("$предмет_название") step i+=1:
! пока счётчик не превысил номер последней ячейки массива

if $предмет_расположение[i]=$уровень_вложений:
! если предмет находится на текущем уровне

! выводим в окно предметов предмет, записанный в массив

addobj $предмет_название[i]
end
end