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

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


help:objs

Различия

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

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

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