Apply affect
Материал из Мир Неронис
Применение:
apply_affect(@victim:mob_data, @arr: array)
Функция apply_affect(@victim:mob_data, @arr: array)
Функция apply_affect служит для применения эффекта к персонажу.
| Аргумент | Тип | Описание |
| @victim | mob_data | Персонаж, на которого накладывается эффект. |
| @arr | array | Массив с описанием параметров накладываемого эффекта. Описание параметров - далее. |
Функция ничего не возвращает.
Параметры эффекта
Немного об эффектах. У каждого персонажа (а также объекта, комнаты и выхода) есть поле эффектов, которое указывает на цепочку примененных к этому (в нашем случае) персонажу эффектов. Эффект — это структура с несколькими полями, которые определенным образом модифицируют характеристики персонажа. Просьба не путать в дальнейшем с битовым полем эффектов — это просто флаговое поле.
Из скриптов доступны следующие параметры эффекта:
- type — хранит sn умения, от имени которого эффект применен. Очень важный флаг. Умения именно по нему проверяют, уже под эффектом персонаж, или еще нет. Также именно это поле определяет, значения какого скилла в скедите смотреть при проверке например на диспелл и так далее (курить skedit).
- level — какого уровня эффект
- duration — на сколько тиков эффект
- flags — флаг эффекта. Сейчас существую следующие флаги:
- AFF_F_DELAY - эффект, использующий для работы систему прекастов.
- AFF_F_NOSHOW - эффект не виден в списке "эф"
- AFF_F_CANCEL - битвектор (описано ниже) не устанавливается в поле where, а сбрасывается
- AFF_F_KEEP_DEATH - эффект не снимается со смертью
- AFF_F_REAL_TIME - эффект висит не игровые тики, а до определенного время реала
- AFF_F_MORPH - эффект морфов.
Во избежание проблем флаги AFF_F_DELAY, AFF_F_REAL_TIME и AFF_F_MORPH заблокированы для этой функции.
- where — второе главное поле, от которого зависит, какие еще поля будут нужны.
Может принимать значения: TO_AFFECTS, TO_OBJECT, TO_IMMUNE, TO_RESIST, TO_VULN, TO_WEAPON, TO_ROOM_FLAGS, TO_SKILLS, TO_RESTRICT, TO_EXITAFF, TO_AFFECTS2, TO_SPELLS, TO_PLR, TO_COMM.
Жирным выделены те, которые могут применяться именно к персонажам.
Для всех TO_* кроме TO_RESTRICT, TO_SPELLS и TO_SKILLS необходимо указать следующие поля:
- location — к чему применяется количественное изменение (см. apply_flags). Может принимать значения:
- APPLY_NONE - не менять ничего
- APPLY_STR - силу
- APPLY_DEX - ловкость
- APPLY_INT - ум
- APPLY_WIS - мудрость
- APPLY_CON - сложение
- APPLY_MAX_STR - максимум силы, который можно получить вещами
- APPLY_MAX_INT - максимум ума, который можно получить вещами
- APPLY_MAX_WIS - максимум мудрости, который можно получить вещами
- APPLY_MAX_DEX - максимум ловкости, который можно получить вещами
- APPLY_MAX_CON - максимум сложения, который можно получить вещами
- APPLY_SEX - пол
- APPLY_CLASS - класс (не работает)
- APPLY_LEVEL - уровень (не работает)
- APPLY_AGE - возраст (не работает)
- APPLY_HEIGHT - рост (не доделано)
- APPLY_WEIGHT - вес (не доделано)
- APPLY_MANA - ману
- APPLY_HP - здоровье
- APPLY_MOVE - шаги
- APPLY_AC - броню
- APPLY_HITROLL - попадание
- APPLY_DAMROLL - урон
- APPLY_SAVES - сейвы
- APPLY_SAVES_FORTITUDE - сейвы на стойкость
- APPLY_SAVES_REFLEX - сейвы на реакцию
- APPLY_SAVES_WILL - сейвы на волю
- APPLY_SAVING_SPELL - сейвы
- APPLY_SPELL_AFFECT - зарезервировано
- APPLY_SIZE - размер
- APPLY_PIERCE - броню от укола
- APPLY_BASH - броню от удара
- APPLY_SLASH - броню от рубки
- APPLY_EXOTIC - броню от магии
- APPLY_INITIATIVE - инициативу
- modifier - на сколько менять поле, описанное выше
- bitvector - флаг, соответствующий полю, указанному в where.
Для TO_SPELLS и TO_SKILLS необходимо указать следующие поля:
- location - sn скилла/спелла, который будем менять
- modifier - на сколько менять
TO_RESTRICT для персонажей не используется.
Пример использования
@arr := array(
'type' => get_sn("oak bark"),
'flags' => AFF_F_NOSHOW|AFF_F_CANCEL,
'where' => to_affects2,
'level' => 55,
'duration' => 27,
'location' => apply_hit,
'modifier' => 34,
'bitvector' => aff2_detect_problems
).
apply_affect(@victim, @arr).
В перспективе функция может быть расширена для работы с объектами, комнатами и выходами.
