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

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


help:objs

Различия

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

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

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