-
Notifications
You must be signed in to change notification settings - Fork 15
OLC: set obj, item flags
Через иммортальскую команду set obj можно менять числовые и строковые поля предметов, а также флаги. Подробный синтаксис покажет команда, набранная без параметров:
set obj
Подробности работы с этой командой, а также значения value0-value4 и флагов описаны в
help set obj
help 'PARAMETERS ПАРАМЕТРЫ'
help flags
Примеры:
- Снять с предмета флаг take, например, чтобы превратить сумку в неподъемный сундук:
set obj bag wear -A
- Добавить предмету гудение (флаг HUM):
set obj bag extra +B
- Сделать мебель, на которой помещается два персонажа (поле value0):
set obj chair value0 2
- Сделать мебель, на которой можно спать:
set obj chair value2 +K
- Посмотреть, какие флаги установлены:
stat obj chair
Аналогичных результатов можно достичь и Феней, меняя поля предмета value0, ... value4, а также extra_flags, wear_flags. Все флаги (extra, wear, флаги мебели, флаги контейнеров и так далее) хранятся в отдельных таблицах. Посмотреть список всех таблиц можно, отпечатав себе вывод функции api():
eval ptc(.tables.api())
Посмотреть список флагов отдельной таблицы можно, выведя ее api:
eval ptc(.tables.furniture_flags.api())
Флаги хранятся в виде битовых масок, в которых можно убирать или устанавливать отдельные биты, а затем присваивать результат обратно полю предмета. Для работы с битовыми масками использутся такие методы корневого объекта:
isset_bit: (mask, b) true если бит b установлен в mask (логическое 'и')
unset_bit: (mask, b) вернет mask со сброшенным битом b
set_bit: (mask, b) вернет mask с установленными битом b (логическое 'или')
Рассмотрим те же примеры:
- Снять с предмета флаг take, например, чтобы превратить сумку в неподъемный сундук:
eval bag=get_obj_carry("bag hero")
eval bag.wear_flags=.unset_bit(bag.wear_flags, .tables.wear_flags.take)
- Добавить предмету гудение (флаг HUM):
eval bag.extra_flags=.set_bit(bag.extra_flags, .tables.extra_flags.hum)
- Сделать мебель, на которой помещается два персонажа (поле value0):
eval chair=get_obj_here("chair")
eval chair.value0=2
- Сделать мебель, на которой можно спать:
eval chair.value2=.set_bit(chair.value2, .tables.furniture_flags.sleep_on)
- Посмотреть, какие флаги установлены, можно через метод таблицы
names
:
eval ptc(.tables.extra_flags.names(bag.extra_flags))
eval ptc(.tables.furniture_flags.names(chair.value2))