Creature immunities

Материал из World of WarCraft Developers Wiki
Перейти к навигации Перейти к поиску

Таблица creature_immunities

Таблица creature_immunities из базы данных world хранит **наборы (presets) иммунитетов** для существ: иммунитеты к школам магии, типам диспела, механикам контроля, а также списки иммунитетов к конкретным **типам эффектов** и **типам аур**. Запись в таблице описывает **один “набор иммунитетов”** с идентификатором ID, который затем может применяться к существам/юнитам ядром или скриптами (в зависимости от конкретной реализации в TrinityCore и используемых данных клиента).

Field Type Attributes Key Null Default Extra
ID int PRIMARY NO
SchoolMask tinyint NO 0
DispelTypeMask smallint NO 0
MechanicsMask bigint NO 0
Effects mediumtext NO
Auras mediumtext NO
ImmuneAoE tinyint(1) NO 0
ImmuneChain tinyint(1) NO 0
Comment mediumtext NO

ID

Идентификатор набора иммунитетов. Уникален в рамках таблицы. Используется как ключ для обращения к конкретному набору (например, при назначении иммунитетов скриптами/ядром).

Пример: 1557

SchoolMask

Битовая маска **школ магии**, к которым применяется иммунитет.

Bit value School Комментарий
1 Physical Физическая “школа” (в контексте SpellSchoolMask)
2 Holy Свет
4 Fire Огонь
8 Nature Природа
16 Frost Лёд
32 Shadow Тьма
64 Arcane Тайная магия

Значение поля — сумма нужных битов. Например, Fire + Frost = 4 + 16 = 20.

Пример: 20

DispelTypeMask

Битовая маска **типов диспела**, к которым применяется иммунитет (т.е. эффекты с соответствующим DispelType “не снимаются” или “не применяются” — конкретная логика зависит от проверки в ядре).

Важно: список DispelType зависит от клиента/ветки, поэтому ориентироваться следует на перечисление **SpellDispelType** в клиентских данных (DBC/DB2). На практике чаще всего используют базовые категории:

DispelType (ID) Тип Примечание
0 None Нет типа
1 Magic Магия
2 Curse Проклятие
3 Disease Болезнь
4 Poison Яд
5 Stealth Скрытность (редко как dispel-тип)
6 Invisibility Невидимость (редко как dispel-тип)
7 All “Все” (служебно)
9 Enrage Исступление (часто используется как отдельный dispel-тип в PvE)

Как формируется маска: обычно это (1 << DispelTypeID) для каждого типа, затем суммирование. Например, Magic (1) + Curse (2) → (1<<1) + (1<<2) = 2 + 4 = 6.

Пример: 6

MechanicsMask

Битовая маска **механик (Spell Mechanics)**, к которым применяется иммунитет (стан, страх, немота и т.д.). Значение — сумма битов вида (1 << MechanicID), где MechanicID берётся из клиентского перечисления механик (обычно SpellMechanic).

Практический смысл: если механика закладывается в эффект/ауру (например, “stun mechanic”), то при совпадении бита — цель считается иммунной к этой механике.

Пример: 617299839

Effects

Список (строка) иммунитетов к **типам эффектов** (Spell Effect). Ожидаемый формат — **список числовых ID**, разделённых пробелами (на практике встречаются также запятые; для вики фиксируем рекомендуемый вариант — пробелы).

  • Каждый ID соответствует значению поля “Effect” в клиентских данных эффекта заклинания (условно: SpellEffect).
  • Если иммунитетов по эффектам нет — обычно записывают пустую строку ''' (но поле NOT NULL, поэтому значение должно быть передано при вставке).

Пример: 6 10 27

Auras

Список (строка) иммунитетов к **типам аур** (Spell Aura). Формат аналогичен Effects: список числовых ID, разделённых пробелами.

  • Каждый ID соответствует типу ауры (условно: SpellAura / EffectApplyAuraName в SpellEffect).

Пример: 5 12 79

ImmuneAoE

Флаг (0/1). Дополнительный “грубый” иммунитет к **AoE-воздействиям** (area-of-effect). Обычно используется, когда существо должно игнорировать эффекты, распространяющиеся по области (при соответствующей проверке в ядре/скриптах).

Value Описание
0 AoE-иммунитет не включён
1 AoE-иммунитет включён

Пример: 1

ImmuneChain

Флаг (0/1). Дополнительный иммунитет к **цепным эффектам** (chain-логика — “скачущие/цепные” заклинания и эффекты, если ядро учитывает этот флаг при обработке).

Value Описание
0 Chain-иммунитет не включён
1 Chain-иммунитет включён

Пример: 0

Comment

Текстовый комментарий к набору иммунитетов. Поле NOT NULL', поэтому даже если комментарий не нужен, обычно задают пустую строку '''.

Пример: Boss - control immunities preset