Здесь показаны различия между двумя версиями данной страницы.
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|Вперёд: Порядок работы интерпретатора]] | ||