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

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


help:objs

Различия

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

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

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:objs [2014/07/20 15:41]
admin
help:objs [2024/10/14 07:22] (текущий)
aleks_versus проба обновления до 5.9.0
Строка 1: Строка 1:
 [[help:​acts|Назад:​ Действия]] [[help:​acts|Назад:​ Действия]]
-=====Предметы (инвентарь)===== 
  
-Предметы ​главный герой носит с собой, чтобы применить куда-нибудь. На деньги можно купить оружие,​ оружием кого-нибудь победить,​ ключом открыть дверь, и так далее. Герой может ​нести предметы в руках, в карманах, в заплечном мешке, даже катить, в общем случае говорят "​инвентарь"​. Таким образом,​ инвентарь - это список всех предметов,​ что есть у героя в данный момент.+====== ​Предметы ​(инвентарь) ======
  
-В названиях предметов не важен регистр букв, т.е. еньГи" и "деньги"​ - один и тот же предмет.+Очень часто главному герою даётся возможность носить с собой разные ​предметы, которые можно по разному применять ​в различных ситуациях. Например, на деньги можно купить оружие, оружием кого-нибудь победить, ​ключом открыть дверьи так далее. Герой может ​нести предметы в руках, в карманах,​ в заплечном мешке, ​даже катить, но в общем случае говорят,​ что ​предметы помещаются в "​инвентарь"​.
  
-====Команды====+Иными словами, инвентарь - это список всех предметов, что есть у героя в данный момент.
  
-  ​* **SHOWOBJS** //[#выражение]// - если значение выражения отлично от 0, то показывает список предметов,​ иначе скрывает его.+В **QSP** предусмотрено отдельное окно для ​вывода списка предметов, которое так и называется **Окно предметов** (в плеере — **Предметы**). Иногда его называют **Списком предметов****Инвентарём** ​или **Рюкзаком**. С этим окном, в зависимости от нужд вашей игрывы можете ​проделывать разные манипуляцииВы можете:​
  
-  * **ADD OBJ** //[$название]//**,**//[$путь к файлу изображения]//**,**//[#индекс]// или +  * Отключать и включать ​**Окно предметов** по своему желанию 
-  * **ADDOBJ** ​//[$название]//**,**//[$путь к файлу изображения]//**,**//[#​индекс]// - добавление предмета с названием ​//[$название]// и изображением ​//[$путь к файлу изображения]// в инвентарь на место с номером ​//[#​индекс]//​. +  * Добавлять предметы в **Окно предметов** 
-    * Параметр ​//[$индекс]// может отсутствовать. По умолчанию предметы добавляются в конец списка. +  * Удалять предметы из **Окна предметов** 
-    * Индексация предметов ​рюкзака ведётся с 1. +  * Полностью очищать **Окно предметов** 
-    * Параметр ​//[$путь к файлу изображения]// может отсутствовать,​ значение по умолчанию - %%''​%%+ 
-    * Обратите внимание - для использования одинаковых предметов инвентаря,​ например денег, патронов и т.п., лучше использовать дополнительную переменную,​ обозначающую количество этих предметов,​ чтобы не загромождать инвентарь списком из 137 предметов Рубль / Патрон. Для хранения числа предметов можно использовать массивы,​ индексируемые через строки:<​sxh 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['​деньги'​] = 12
 OBJECTS['​патроны'​] = 137 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.
 +
 +==== Команды очистки Окна предметов ====
  
-'Количество: <<​OBJECTS[$getobj(countobj)]>>'+  * **''​KILLOBJ''​** - данная команда без указания параметров удаляет все предметы ​из **Окна предметов**. <sxh qsp> 
 +killobj & ! очищаем Окно предметов 
 +</​sxh>​ 
 +    * Можно указать номер предмета,​ тогда данная команда удалит предмет в указанной позиции: <sxh qsp> 
 +killobj 5 & ! удаляем из списка пятый предмет
 </​sxh>​ </​sxh>​
-  * **DELOBJ** //​[$название]//​ или **DEL OBJ** //​[$название]//​ - удаление предмета из рюкзака,​ если таковой имеется. 
-  * **KILLOBJ** //​[#​номер]//​ - удаление предмета,​ расположенного в заданной позиции. Если параметр [#​номер] не указан,​ то очистка рюкзака. 
-    * Индексация предметов рюкзака ведётся с 1. 
-  * **KILLALL** - эквивалентен конструкции "​KILLVAR & KILLOBJ"​. 
  
-  * **COUNTOBJ** - функция возвращает количество предметов в рюкзаке. +  * **''​KILLALL''​** - данная ​команда эквивалентна конструкции "**''​KILLVAR & KILLOBJ''​**", т.еочищает ​**Окно предметов** и уничтожает ​все переменные игры.
-  ​* **GETOBJ(**//[#номер]//**)** - возвращает название ​предмета в рюкзаке,​ расположенного в заданной позиции. +
-    * Индексация предметов рюкзака ведётся с 1. +
-    * Если ​предмета с заданным индексом не существует,​ возвращается пустая строка (''​). +
-    * //Примеры://<sxh qsp> +
-!Первый предмет в списке +
-GETOBJ(1) ​+
  
-оследний предмет в списке +==== Функции для ​обработки предметов ==== 
-GETOBJ(COUNTOBJ)+ 
 +  * **''​$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>​ </​sxh>​
  
-Код, подсчитывающий в массиве OBJECTS число предметов с одинаковым названием:<sxh qsp> +==== Снять выделение с предмета ==== 
-i = 1 + 
-:loop +Предметы в **QSP** выделяются с помощью нажатия (щелчка "​мышью"​ по предмету),​ и выделение не снимается до применения специальной команды:​ 
-IF i <= COUNTOBJ+ 
-  ​OBJECTS[$GETOBJ(i)] = OBJECTS[$GETOBJ(i)] + +  * **''​UNSELECT''​** — снимает выделение с предмета в **Окне предметов**. Имеет краткую форму **''​UNSEL''​**. 
-  i i + + 
-  JUMP '​loop'​ +===== Другие примеры:​ ===== 
-END+ 
 +Код, подсчитывающий в массиве ​**OBJECTS** число предметов с одинаковыми названиями: 
 + 
 +<sxh qsp> 
 +local i = 1 
 +loop while i <= countobj step i += 1
 +  OBJECTS[$GETOBJ(i)] += 1 
 +end
 </​sxh>​ </​sxh>​
  
-Cм. также [[help:​service_locations|служебные локации]]: [[help:​service_locations|$ONOBJADD]][[help:​service_locations|$ONOBJDEL]], [[help:service_locations|$ONOBJSEL]].+===== Событие "​Выделение предмета"​ ===== 
 + 
 +Когда вы щёлкаете мышью по предмету,​ в классическом плеере этот предмет подсвечивается голубым цветом,​ и это означает,​ что предмет становится выделенным. При этом функция **''​$SELOBJ''​**,​ вызванная в любом месте игры, будет возвращать название ​такого выделенного предмета. 
 + 
 +**Выделение предмета** — это событие,​ которое происходит в момент нажатия на предмет,​ и к этому событию вы можете привязать автоматическое выполнение кода. Делается это с помощью системной переменной **''​$ONOBJSEL''​**:​ 
 + 
 +  * **''​$ONOBJSEL''​** — системная переменная,​ куда можно прописать название локации,​ код на которой будет выполняться при очередном выделении предмета. 
 + 
 +Более подробная информация в разделе [[help:​service_locations|лужебные локации"]]
 + 
 +Если предмет уже выделенповторное выделение при нажатии не происходит. Чтобы повторно выделить предметнужно предварительно снять с него выделение с помощью команды **''​UNSELECT''​**. 
 + 
 +[[help:principle|Вперёд:​ Порядок работы интерпретатора]]
  
----- 
-[[help:​menu|Вперёд:​ Меню]] 
help/objs.1405870865.txt.gz · Последние изменения: 2014/07/20 19:41 (внешнее изменение)