Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
14.13. Как сделать многоуровневый рюкзак?
В: Как сделать многоуровневый рюкзак?
В: Как сделать предметы в предметах?
Например, щёлкаешь по предмету "Рюкзак", и в окне инвентаря появляется список предметов в рюкзаке.
О:
Списки предметов можно хранить в разных массивах. Например:
! верхний уровень предметов
$ур0_предметы[0]="Дневник заданий"
$ур0_предметы[1]="Рюкзак"
$ур0_предметы[2]="Книга заклинаний"
$ур0_предметы[3]="Кошелёк"
! предметы в рюкзаке
$ур1_предметы[0]="Отвёртка"
$ур1_предметы[1]="Хрустальный шар"
$ур1_предметы[2]="Агар-Агар"
$ур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
! если кликнули по предмету рюкзак
! удаляем список предметов верхнего уровня
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
killobj
! выводим предметы текущего уровня в окно предметов
loop local i=0 while i<arrsize("$предмет_название") step i+=1:
! пока счётчик не превысил номер последней ячейки массива
if $предмет_расположение[i]=$уровень_вложений:
! если предмет находится на текущем уровне
! выводим в окно предметов предмет, записанный в массив
addobj $предмет_название[i]
end
end