|
Здесь описаны основные изменения в QSP 5.9.4:
Основные изменения в версии QSP 5.9.4:
Новый упрощенный синтаксис вызова локаций как операторов
Дополняет упрощенный синтаксис вызова локаций как функций (@loc), но скобки для аргументов можно не указывать.
Синтаксис: @@имя_локации [параметр 1], [параметр 2], [параметр 3], ...
Имя локации не может содержать символы-разделители (аналогично вызовам @loc).
Параметры локации могут отсутствовать или быть записаны со скобками (аналогично обычным операторам).
Если локация записывает что-либо в переменную RESULT, то это значение будет проигнорировано.
Примеры:
@@loc1 'text', var1, $var2
@@loc2
@@loc3('param1')
@@loc4(123, 'test')
Оператор MODOBJ
Позволяет изменять то, как будут отображаться предметы с заданным именем. Само имя предмета не изменяется.
Это может быть полезно, если сам предмет фактически остается тем же самым, но нужно изменить его отображение в инвентаре.
Синтаксис: MODOBJ [$имя предмета], [$описание предмета], [$изображение предмета]
Изображение предмета опционально - если этот параметр не указан, то сохраняется предыдущее указанное изображение.
Данный оператор меняет свойства всех предметов с указанным именем.
Для изменения свойств предметов необходимо, чтобы в инвентаре был хотя бы один указанный предмет. Далее, при добавлении новых предметов с тем же именем, их свойства будут соответствовать указанным в MODOBJ.
Обратите внимание, что этот оператор крайне не рекомендуется использовать для замены предметов (когда нужно отобразить новый/другой предмет в той же позиции инвентаря).
Примеры:
ADDOBJ 'sword'
ADDOBJ 'sword'
ADDOBJ 'keyboard'
MODOBJ 'sword', 'Sword (sheathed)'
MODOBJ 'keyboard', 'Keyboard (black)'
ADDOBJ 'sword' &! будет отображен как 'Sword (sheathed)'
MODOBJ 'sword', 'Sword (sharp)' &! изменит отображение всех предметов 'sword'
Оператор RESETOBJ
Этот оператор отменяет все изменения, произведенные с помощью MODOBJ.
Синтаксис: RESETOBJ [$имя предмета]
Если имя предмета не указано, то сбрасывает изменения для всех предметов инвентаря.
Функция/операция OBJ возвращает количество предметов с указанным именем
Позволяет упростить работу с инвентарем в некоторых случаях.
Следующий код добавит несколько предметов и выведет их количество:
ADDOBJ 'sword'
ADDOBJ 'sword'
ADDOBJ 'keyboard'
PL 'Swords: ' + OBJ "sword"
PL 'Keyboards: ' + OBJ "keyboard"
В то же время, при использовании OBJ в условиях, сохраняется совместимость с предыдущими версиями:
IF OBJ 'sword': PL 'you have a sword'
IF NO OBJ 'sword': PL 'you don't have a sword'
В оператор DELOBJ добавлен опциональный параметр - количество предметов для удаления
Позволяет упростить работу с инвентарем в некоторых случаях.
Синтаксис: DELOBJ [$название предмета], [#количество для удаления]
Параметр [#количество для удаления] указывает максимальное количество предметов, которые нужно удалить.
Если он не указан, то удаляется 1 предмет (как и раньше).
Поддержка переносов строк внутри скобок [ ] и ( )
Теперь можно записывать кортежи, вызовы операторов / функций, выражения для индексов массивов на нескольких строках, что, в некоторых случаях, позволяет сделать код более читаемым.
Примеры:
%test = [
[ 'key1', 'value1' ],
[ 'key2', 'value2' ],
[ 'key3', 'value3' ],
]
max(
'val1',
'val2',
'val3',
'val4'
)
pl (a +
(b * 2) -
(c + 2)
) * 2
$arr[
'key1',
'key2',
$key3
] = 'value'
pl $arr['key1',
'key2',
$key3]
Аргументы локаций сохраняются при выполнении кода ссылок
Значения в массиве ARGS, которые были актуальны для кода локации, сохраняются и для кода HTML-ссылок. Ранее ARGS сохранялись только для действий (ACTs) на локации.
Логические конвертации для разных типов данных
Добавлена конвертация в булевые значения (истина/ложь) для типов, отличных от чисел.
Это позволяет улучшить читаемость кода в некоторых случаях.
Булевые значения используются для логических операций (OR / AND / NO / IIF), а также для некоторых операторов (например, в условиях для IF / ELSEIF / LOOP).
Преобразования следующие:
Число является "истиной", если оно не равно 0. Если равно 0, то это ложь. Это то же самое поведение, что было ранее.
Строка является "истиной", если ее длина больше 0 (в строке что-то записано). Пустые строки являются "ложью".
Кортеж является "истиной", если в кортеже есть какие-либо элементы (в т.ч. вложенный пустой кортеж). Пустые кортежи являются "ложью".
Исправление функций LCASE / UCASE
Предыдущие версии были не совсем корректны. Новая реализация учитывает последний стандарт Unicode.
Различные технические изменения, в т.ч. новая реализация локальных переменных |