Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
20.18. Как сделать склад, сундук, тайник, место, в котором можно выкладывать и хранить предметы?
В: Как сделать склад, сундук, тайник, место, в котором можно выкладывать и хранить предметы?
О:
Решение данного вопроса состоит из двух частей.
Первая часть — это непосредственно создание тайника. Тайник можно реализовать на отдельной локации.
Создаём новую локацию и называем её "тайник". Затем, на локации, где мы располагаем тайник, нужно добавить действие или гиперссылку, которая ведёт на локацию тайник:
goto "тайник"
end
Само собой на локации "тайник" необходимо создать гиперссылку или действие, ведущие на предыдущую локацию.
На этом первая часть решения нашего вопроса окончена. Переходим ко второй части. Непосредственно сброс предметов на локации.
Для того, чтобы игрок мог взаимодействовать с предметами, необходимо завести локацию-обработчик выделения предмета (более подробно об этом прочитайте в разделе "Предметы") и на этой локации прописать код взаимодействия. Тут тоже есть варианты. Вы можете организовать меню предметов, одним из пунктов которого может быть пункт "Выбросить", можете добавить в окно действий действие "Выбросить" на каждый предмет (если их не много), либо (если на локации "тайник" можно только сбрасывать предметы) воспользоваться нижеследующим решением, которое позволяет сбрасывать предметы по клику на них.
Для того, чтобы каждый предмет на локации "тайник" сбрасывался по клику, на локации-обработчике выделения предмета необходимо прописать следующий код:
! если текущая локация — "тайник"
! записываем текущий предмет в новую ячейку массива $secretbox
$secretbox[]=$selobj
! удаляем предмет из списка
delobj $selobj
! перезаходим на локацию тайник
goto $curloc
end
Чтобы сброшенные предметы воспроизводились на локации "тайник" в виде действий, нужно на локации "тайник" прописать такой код:
! пока значение счётчика не превысило номер последней ячейки массива
! с помощью команды dynamic генерируем действие
dynamic "
act 'Поднять <<$secretbox[i]>>:
addobj '<<$secretbox[i]>>'
killvar '$secretbox',<<i>>
goto $curloc
end'
"
end
Это универсальный код, позволяющий сбрасывать и поднимать любые предметы, если не требуется учитывать их количество.