Инструменты пользователя

Инструменты сайта


help:objs

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:objs [2015/04/01 10:47]
77.245.207.102 PiYAOOBjp
help:objs [2024/10/14 07:22] (текущий)
aleks_versus проба обновления до 5.9.0
Строка 1: Строка 1:
-Great <a href="http://ibuwpeipl.com">arcleit,</athank you again for writing.+[[help:​acts|Назад:​ Действия]] 
 + 
 +====== Предметы (инвентарь) ====== 
 + 
 +Очень часто главному герою даётся возможность носить с собой разные предметы,​ которые можно по разному применять в различных ситуациях. Например,​ на деньги можно купить оружие,​ оружием кого-нибудь победить,​ ключом открыть дверь, и так далее. Герой может нести предметы в руках, в карманах,​ в заплечном мешке, даже катить,​ но в общем случае говорят,​ что предметы помещаются в "​инвентарь"​. 
 + 
 +Иными словами,​ инвентарь - это список всех предметов,​ что есть у героя в данный момент. 
 + 
 +В **QSP** предусмотрено отдельное окно для вывода списка предметов,​ которое так и называется **Окно предметов** (в плеере — **Предметы**). Иногда его называют **Списком предметов**,​ **Инвентарём** или **Рюкзаком**. С этим окном, в зависимости от нужд вашей игры, вы можете проделывать разные манипуляции. Вы можете:​ 
 + 
 +  * Отключать и включать **Окно предметов** по своему желанию 
 +  * Добавлять предметы в **Окно предметов** 
 +  * Удалять предметы из **Окна предметов** 
 +  * Полностью очищать **Окно предметов** 
 + 
 +===== Команды для работы с Окном предметов ===== 
 + 
 +==== Включение и выключение Окна предметов ==== 
 + 
 +  * **''​SHOWOBJS [#​выражение]''​** - если значение выражения отлично от 0, то показывает **Список предметов**,​ иначе скрывает его. Пример: ​<sxh qsp> 
 +showobjs 0 & ! скрываем Окно предметов 
 +showobjs 1 & ! выводим Окно предметов на экран 
 +</​sxh>​ Для удобства чтения кода можно заранее определить переменные **''​on''​** и **''​off''​** с соответствующими значениями:​ <sxh qsp> 
 +on,​off ​1,0 
 +showobjs on & ! включаем Окно предметов 
 +showobjs off & ! выключаем Окно предметов 
 +</​sxh>​ 
 + 
 +==== Команды для управления предметами ==== 
 + 
 +  * ''​**ADDOBJ** [$название],​[$путь к файлу изображения],​[#​индекс]''​ - добавление предмета с названием ''​[$название]''​ и изображением ''​[$путь к файлу изображения]''​ в **Инвентарь**,​ на место с номером ''​[#​индекс]''​. Пример:​ <sxh qsp> 
 +! добавляем в четвёртую позицию предмет с названием ​"Апельсин"​ и картинкой 
 +addobj '​Апельсин','​image/​orange.png',​4 
 +</​sxh>​ 
 +    * Предметы можно добавлять только в уже существующие позиции,​ либо в конец списка. Например,​ если вы уже добавили три предмета в список,​ вы можете указать для добавляения четвёртого предмета только позиции 1, 2, 3 и 4; если вы укажете больший номер позиции,​ то предмет просто не добавится. 
 +    * Параметр ''​[#​индекс]''​ может отсутствовать. По умолчанию предметы добавляются в конец списка. <sxh qsp> 
 +! в конец списка добавляем предмет "​Отвёртка"​ 
 +addobj '​Отвёртка'​ 
 +</​sxh>​ 
 +    * Индексация (нумерация) предметов в **Окне предметов** начинается с 1<sxh qsp> 
 +! добавляем предмет с картинкой в начало списка 
 +addobj '​Гаечный ключ','​image/wrench.png',​1 
 +</sxh> 
 +    * Параметр ''​[$путь к файлу изображения]''​ может отсутствовать,​ значение по умолчанию - ''""''​ (пустая строка). <sxh qsp> 
 +! добавляем предмет без картинки в конец списка 
 +addobj '​Радиоактивный пепел'​ 
 +! добавляем предмет без картинки в начало списка 
 +addobj '​Светящийся шар','',​1 
 +</​sxh>​ 
 +    * В названиях предметов не важен регистр букв, т.е. "ДеньГи"​ и "​деньги"​ - один и тот же предмет. 
 +    * Обратите внимание - для использования одинаковых предметов инвентаря,​ например денег, патронов и т.п., лучше использовать дополнительную переменную,​ обозначающую количество этих предметов,​ чтобы не загромождать инвентарь списком из 137 предметов Рубль/​Патрон. <sxh qsp> 
 +! действиекоторое добавляет предмет "​Патроны"​ лишь в том случае,​ 
 +! если у героя нет ещё ни одного патрона 
 +act "​Взять десять патронов":​ 
 +  if no obj("​Патроны"​):​ 
 +    addobj "​Патроны"​ 
 +  end 
 +  патроны += 10 & ! увеличиваем число патронов у героя 
 +end 
 +</sxhДля хранения числа предметов можно использовать массивы,​ индексируемые через строки:​ <sxh qsp> 
 +! так мы добавляем сами предметы 
 +addobj "​Деньги"​ 
 +addobj "​Патроны"​ 
 +! так мы помещаем число этих предметов в массив 
 +OBJECTS['​деньги'​] = 12 
 +OBJECTS['​патроны'​] = 137 
 +! а так мы выводим предметы и их количество на экран:​ 
 +loop i=1 while i < countobj+1 step i += 1: 
 +  *pl $getobj(i)+'​ (<<​OBJECTS[$lcase($getobj(i))]>>​ шт.)' 
 +end 
 +</​sxh>​ 
 +  * ''​**DELOBJ** [$название]''​ - удаление предмета из **Окна предметов** по названию. Если существует предмет с названием ''​[$название]'',​ он будет удалён. <sxh qsp> 
 +delobj "​Апельсин"​ & ! удаляем предмет с названием "​Апельсин"​ 
 +</​sxh>​ 
 +  * ''​**KILLOBJ** [#​номер]''​ - удаление предмета по номеру в **Списке предметов**. Если параметр ''​[#​номер]''​ не указан,​ то полная очистка **Окна предметов**. <sxh qsp> 
 +killobj 3 & ! удаляем предмет из третьей позиции,​ не важно, как он называется 
 +</​sxh>​ 
 +    * Индексация (нумерация) предметов в **Окне предметов** начинается с 1. 
 + 
 +==== Команды очистки Окна предметов ==== 
 + 
 +  * **''​KILLOBJ''​** - данная команда без указания параметров удаляет все предметы из **Окна предметов**. <sxh qsp> 
 +killobj & ! очищаем Окно предметов 
 +</​sxh>​ 
 +    * Можно указать номер предмета,​ тогда данная команда удалит предмет в указанной позиции:​ <sxh qsp> 
 +killobj 5 & ! удаляем из списка пятый предмет 
 +</​sxh>​ 
 + 
 +  * **''​KILLALL''​** - данная команда эквивалентна конструкции "​**''​KILLVAR & KILLOBJ''​**",​ т.е. очищает **Окно предметов** и уничтожает все переменные игры. 
 + 
 +==== Функции для обработки предметов ==== 
 + 
 +  * **''​$SELOBJ''​** - возвращает название выделенного предмета **в любом месте игры**. Выделение предмета происходит в момент нажатия (щелчка мышью по предмету) и не снимается до применения команды **''​UNSELECT''​**. 
 +  * **''​COUNTOBJ''​** - функция возвращает количество предметов в рюкзаке. 
 +  * ''​**$GETOBJ**([#​номер])''​ - возвращает название предмета в рюкзаке,​ расположенного в заданной позиции. 
 +    * Индексация предметов рюкзака ведётся с 1. 
 +    * Если предмета с заданным индексом не существует,​ возвращается пустая строка (''​%%""​%%''​). 
 +    * Примеры:​ <sxh qsp> 
 +$getobj(1) & ! вернёт название первого предмета в рюкзаке 
 +$getobj(countobj) & ! вернёт название последнего добавленного предмета 
 +</​sxh>​ 
 +  * **''​$CUROBJS''​** - данная функция возвращает список выведенных на экран предметов в виде QSP-кода. 
 +    * Предметы сохраняются в виде набора операторов **''​ADDOBJ''​** с ответствующими параметрами и операциями. 
 +    * Записав возвращённое функцией значение в переменную,​ можно восстановить предметы с помощью оператора **[[help:​dynamical|DYNAMIC]]**. Пример:​ <sxh qsp> 
 +! сохраняем список предметов как код QSP: 
 +$old_objects = $CUROBJS 
 +! удаляем все предметы из окна предметов:​ 
 +KILLOBJ 
 +! восстанавливаем все предметы в окне предметов:​ 
 +DYNAMIC $old_objects 
 +</​sxh>​ 
 + 
 +==== Снять выделение с предмета ==== 
 + 
 +Предметы в **QSP** выделяются с помощью нажатия (щелчка "​мышью"​ по предмету),​ и выделение не снимается до применения специальной команды:​ 
 + 
 +  * **''​UNSELECT''​** — снимает выделение с предмета в **Окне предметов**. Имеет краткую форму **''​UNSEL''​**. 
 + 
 +===== Другие примеры:​ ===== 
 + 
 +Код, подсчитывающий в массиве **OBJECTS** число предметов с одинаковыми названиями:​ 
 + 
 +<sxh qsp> 
 +local i = 1 
 +loop while i <= countobj step i += 1: 
 +  OBJECTS[$GETOBJ(i)] += 1 
 +end 
 +</​sxh>​ 
 + 
 +===== Событие "​Выделение предмета"​ ===== 
 + 
 +Когда вы щёлкаете мышью по предмету,​ в классическом плеере этот предмет подсвечивается голубым цветом,​ и это означает,​ что предмет становится выделенным. При этом функция **''​$SELOBJ''​**,​ вызванная в любом месте игры, будет возвращать название такого выделенного предмета. 
 + 
 +**Выделение предмета** — это событие,​ которое происходит в момент нажатия на предмет,​ и к этому событию вы можете привязать автоматическое выполнение кода. Делается это с помощью системной переменной **''​$ONOBJSEL''​**:​ 
 + 
 +  * **''​$ONOBJSEL''​** — системная переменная,​ куда можно прописать название локации,​ код на которой будет выполняться при очередном выделении предмета. 
 + 
 +Более подробная информация в разделе [[help:​service_locations|"​Служебные локации"​]]. 
 + 
 +Если предмет уже выделен,​ повторное выделение при нажатии не происходит. Чтобы повторно выделить предмет,​ нужно предварительно снять с него выделение с помощью команды **''​UNSELECT''​**. 
 + 
 +[[help:​principle|Вперёд:​ Порядок работы интерпретатора]] 
help/objs.1427885229.txt.gz · Последние изменения: 2015/04/01 13:47 (внешнее изменение)