Conditions
Таблица conditions
Таблица conditions из базы данных world — центральная таблица системы условий TrinityCore (Condition System). Используется для задания требований (conditions) для разных источников: лут, gossip, спеллы, SAI, vendor, phase, areatrigger, conversation line и т.д.
Первичный ключ — составной и включает практически все поля источника и самих условий: (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, ConditionStringValue1).
| Field | Type | Attributes | Key | Null | Default | Extra |
|---|---|---|---|---|---|---|
| SourceTypeOrReferenceId | int | PRIMARY | NO | 0 | ||
| SourceGroup | int | UNSIGNED | PRIMARY | NO | 0 | |
| SourceEntry | int | PRIMARY | NO | 0 | ||
| SourceId | int | PRIMARY | NO | 0 | ||
| ElseGroup | int | UNSIGNED | PRIMARY | NO | 0 | |
| ConditionTypeOrReference | int | PRIMARY | NO | 0 | ||
| ConditionTarget | tinyint | UNSIGNED | PRIMARY | NO | 0 | |
| ConditionValue1 | int | UNSIGNED | PRIMARY | NO | 0 | |
| ConditionValue2 | int | UNSIGNED | PRIMARY | NO | 0 | |
| ConditionValue3 | int | UNSIGNED | PRIMARY | NO | 0 | |
| ConditionStringValue1 | varchar(64) | PRIMARY | NO | |||
| NegativeCondition | tinyint | UNSIGNED | NO | 0 | ||
| ErrorType | int | UNSIGNED | NO | 0 | ||
| ErrorTextId | int | UNSIGNED | NO | 0 | ||
| ScriptName | varchar(64) | NO | ||||
| Comment | varchar(255) | YES | NULL |
SourceTypeOrReferenceId
Тип источника условия (если значение > 0) или ссылка на шаблон-референс (если значение < 0).
- SourceTypeOrReferenceId < 0 — это Reference ID. В этом режиме строка описывает «шаблон условия», на который можно ссылаться из других строк через отрицательное значение в ConditionTypeOrReference.
- SourceTypeOrReferenceId > 0 — это тип источника (Source Type), который определяет, как интерпретировать поля SourceGroup/SourceEntry/SourceId и какие цели допустимы для ConditionTarget.
Возможные значения (SourceType)
| Value | Name | SourceGroup | SourceEntry | SourceId | ConditionTarget | Примечание |
|---|---|---|---|---|---|---|
| 0 | CONDITION_SOURCE_TYPE_NONE | (не используется) | (не используется) | (не используется) | (не используется) | Используется только для reference templates |
| 1 | CONDITION_SOURCE_TYPE_CREATURE_LOOT_TEMPLATE | creature_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Лут существ |
| 2 | CONDITION_SOURCE_TYPE_DISENCHANT_LOOT_TEMPLATE | disenchant_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Дизэнчант |
| 3 | CONDITION_SOURCE_TYPE_FISHING_LOOT_TEMPLATE | fishing_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Рыбалка |
| 4 | CONDITION_SOURCE_TYPE_GAMEOBJECT_LOOT_TEMPLATE | gameobject_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Лут GO |
| 5 | CONDITION_SOURCE_TYPE_ITEM_LOOT_TEMPLATE | item_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Лут из предметов |
| 6 | CONDITION_SOURCE_TYPE_MAIL_LOOT_TEMPLATE | mail_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Вложения письма (loot templates) |
| 7 | CONDITION_SOURCE_TYPE_MILLING_LOOT_TEMPLATE | milling_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Миллинг |
| 8 | CONDITION_SOURCE_TYPE_PICKPOCKETING_LOOT_TEMPLATE | pickpocketing_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Обшаривание карманов |
| 9 | CONDITION_SOURCE_TYPE_PROSPECTING_LOOT_TEMPLATE | prospecting_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Проспектинг |
| 10 | CONDITION_SOURCE_TYPE_REFERENCE_LOOT_TEMPLATE | reference_loot_template.Entry | Item ID | 0 | 0 | Reference loot |
| 11 | CONDITION_SOURCE_TYPE_SKINNING_LOOT_TEMPLATE | skinning_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Снятие шкур |
| 12 | CONDITION_SOURCE_TYPE_SPELL_LOOT_TEMPLATE | spell_loot_template.Entry / reference_loot_template.Entry | Item ID | 0 | 0 | Лут от спеллов |
| 13 | CONDITION_SOURCE_TYPE_SPELL_IMPLICIT_TARGET | Маска эффектов (1=EFFECT_0,2=EFFECT_1,4=EFFECT_2,...) | SpellID | 0 | 0/1 | Условия на неявные цели спелла |
| 14 | CONDITION_SOURCE_TYPE_GOSSIP_MENU | gossip_menu.entry | gossip_menu.text_id | 0 | 0/1 | Условия на меню gossip |
| 15 | CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION | gossip_menu_option.menu_id | gossip_menu_option.id | 0 | 0/1 | Условия на пункт gossip |
| 16 | CONDITION_SOURCE_TYPE_CREATURE_TEMPLATE_VEHICLE | 0 | creature_template.entry | 0 | 0/1 | Условия для vehicle-шаблонов |
| 17 | CONDITION_SOURCE_TYPE_SPELL | 0 | SpellID | 0 | 0/1 | Условия на каст (caster/explicit target) |
| 22 | CONDITION_SOURCE_TYPE_SMART_EVENT | smart_scripts.id + 1 | smart_scripts.entryorguid | smart_scripts.source_type | 0/1 | Условия на SAI event |
| 23 | CONDITION_SOURCE_TYPE_NPC_VENDOR | npc_vendor.entry | npc_vendor.item | 0 | 0/1 | Условия на vendor-позиции |
| 24 | CONDITION_SOURCE_TYPE_SPELL_PROC | 0 | SpellID ауры-прока | 0 | 0/1 | Условия на proc |
| 25 | CONDITION_SOURCE_TYPE_TERRAIN_SWAP | 0 | terrain_swap_defaults.TerrainSwapMap | 0 | 0 | Terrain swap |
| 26 | CONDITION_SOURCE_TYPE_PHASE | phase_area.PhaseId | phase_area.AreaId (0=любой area) | 0 | 0 | Фаза |
| 27 | CONDITION_SOURCE_TYPE_GRAVEYARD | graveyard_zone.GhostZone | graveyard_zone.ID | 0 | 0 | Кладбища |
| 28 | CONDITION_SOURCE_TYPE_AREATRIGGER | areatrigger_template.Id | areatrigger_template.IsCustom | 0 | 0 | Areaatrigger template (server-side) |
| 29 | CONDITION_SOURCE_TYPE_CONVERSATION_LINE | 0 | conversation_line_template.Id | 0 | 0 | Условия на линию диалога (conversation line) |
| 30 | CONDITION_SOURCE_TYPE_AREATRIGGER_CLIENT_TRIGGERED | 0 | AreatriggerID | 0 | 0 | Client-triggered areatrigger |
| 31 | CONDITION_SOURCE_TYPE_TRAINER_SPELL | trainer_spell.TrainerId | trainer_spell.SpellId | 0 | 0 | Тренеры |
| 32 | CONDITION_SOURCE_TYPE_OBJECT_ID_VISIBILITY | ObjectType (5=Unit, 8=GameObject) | CreatureID/GameObjectID | 0 | 0/1 | Visibility по object id |
| 33 | CONDITION_SOURCE_TYPE_SPAWN_GROUP | 0 | spawn_group_template.groupId | 0 | 0 | Spawn groups |
| 34 | CONDITION_SOURCE_TYPE_PLAYER_CONDITION | 0 | PlayerConditionID | 0 | 0 | PlayerCondition.db2 |
| 35 | CONDITION_SOURCE_TYPE_SKILL_LINE_ABILITY | 0 | ID из SkillLineAbility.db2 | 0 | 0 | SkillLineAbility |
| 36 | CONDITION_SOURCE_TYPE_PLAYER_CHOICE_RESPONSE | playerchoice_response.ChoiceId | playerchoice_response.ResponseId | 0 | 0 | PlayerChoice response |
SourceGroup
Параметр источника. Его смысл зависит от SourceTypeOrReferenceId (см. таблицу SourceType выше).
Пример: 50047
SourceEntry
Параметр источника. Его смысл зависит от SourceTypeOrReferenceId (см. таблицу SourceType выше).
Пример: 93072
SourceId
Дополнительный параметр источника (используется не всеми SourceType). Его смысл зависит от SourceTypeOrReferenceId.
Пример: 0
ElseGroup
Группировка условий в логические блоки:
- Внутри одного блока (одинаковые SourceType/SourceGroup/SourceEntry/SourceId и одинаковый ElseGroup) условия объединяются как AND.
- Между блоками с разными ElseGroup объединение как OR.
Пример: 1
ConditionTypeOrReference
Тип условия (если значение > 0) или ссылка на референс (если значение < 0).
- ConditionTypeOrReference < 0 — ссылка на Reference ID (то есть на строку с SourceTypeOrReferenceId = отрицательное значение).
- ConditionTypeOrReference > 0 — тип условия (Condition Type), который определяет смысл полей ConditionValue1..3 и ConditionStringValue1.
Возможные значения (ConditionType)
| Value | Name | ConditionValue1 | ConditionValue2 | ConditionValue3 / Примечание |
|---|---|---|---|---|
| 0 | CONDITION_NONE | (не используется) | (не используется) | (не используется) |
| 1 | CONDITION_AURA | SpellID | Index эффекта (0–31) | 0 |
| 2 | CONDITION_ITEM | item_template.entry | count | 0=не в банке, 1=в банке |
| 3 | CONDITION_ITEM_EQUIPPED | item_template.entry | 0 | 0 |
| 4 | CONDITION_ZONEID | ZoneID | 0 | 0 |
| 5 | CONDITION_REPUTATION_RANK | FactionTemplateID | rankMask | 0 |
| 6 | CONDITION_TEAM | TeamID (Alliance=469, Horde=67) | 0 | 0 |
| 7 | CONDITION_SKILL | SkillLine (SkillLine.db2) | rank | 0 |
| 8 | CONDITION_QUESTREWARDED | QuestID | 0 | 0 |
| 9 | CONDITION_QUESTTAKEN | QuestID | 0 | 0 |
| 10 | CONDITION_DRUNKENSTATE | state (0..3) | 0 | 0 |
| 11 | CONDITION_WORLD_STATE | WorldState index | WorldState value | 0 |
| 12 | CONDITION_ACTIVE_EVENT | game_event.eventEntry | 0 | 0 |
| 13 | CONDITION_INSTANCE_INFO | entry | data | 0=DATA, 1=GUID_DATA, 2=BOSS_STATE, 3=DATA64 |
| 14 | CONDITION_QUEST_NONE | QuestID | 0 | 0 |
| 15 | CONDITION_CLASS | ClassMask | 0 | 0 |
| 16 | CONDITION_RACE | RaceMask | 0 | 0 |
| 17 | CONDITION_ACHIEVEMENT | AchievementID | 0 | 0 |
| 18 | CONDITION_TITLE | CharTitleID | 0 | 0 |
| 19 | CONDITION_SPAWNMASK_DEPRECATED | UNUSED | UNUSED | UNUSED |
| 20 | CONDITION_GENDER | 0=Male, 1=Female, 2=None | 0 | 0 |
| 21 | CONDITION_UNIT_STATE | UnitState (enum Unit.h) | 0 | 0 |
| 22 | CONDITION_MAPID | MapID | 0 | 0 |
| 23 | CONDITION_AREAID | AreaID | 0 | 0 |
| 24 | CONDITION_CREATURE_TYPE | creature_template.type | 0 | 0 |
| 25 | CONDITION_SPELL | SpellID | 0 | 0 |
| 26 | CONDITION_PHASEID | PhaseID | 0 | 0 |
| 27 | CONDITION_LEVEL | level | ComparisonType | 0 |
| 28 | CONDITION_QUEST_COMPLETE | QuestID | 0 | 0 |
| 29 | CONDITION_NEAR_CREATURE | creature_template.entry | distance (yards) | 0=alive, 1=dead |
| 30 | CONDITION_NEAR_GAMEOBJECT | gameobject_template.entry | distance (yards) | 0 |
| 31 | CONDITION_OBJECT_ENTRY_GUID_LEGACY | TypeID | entry | guid / правила legacy |
| 32 | CONDITION_TYPE_MASK_LEGACY | TypeMask | 0 | 0 |
| 33 | CONDITION_RELATION_TO | Target (ConditionValue1) | RelationType | 0 |
| 34 | CONDITION_REACTION_TO | Target (ConditionValue1) | rankMask | 0 |
| 35 | CONDITION_DISTANCE_TO | Target (ConditionValue1) | distance | ComparisonType |
| 36 | CONDITION_ALIVE | 0 | 0 | Используйте NegativeCondition: 0=alive, 1=dead |
| 37 | CONDITION_HP_VAL | HP value | ComparisonType | 0 |
| 38 | CONDITION_HP_PCT | HP percent | ComparisonType | 0 |
| 39 | CONDITION_REALM_ACHIEVEMENT | AchievementID | 0 | 0 |
| 40 | CONDITION_IN_WATER | 0 | 0 | Используйте NegativeCondition (см. описание в документации) |
| 41 | CONDITION_TERRAIN_SWAP | terrainSwap | 0 | 0 |
| 42 | CONDITION_STAND_STATE | stateType | standState | 0 |
| 43 | CONDITION_DAILY_QUEST_DONE | QuestID | 0 | 0 |
| 44 | CONDITION_CHARMED | 0 | 0 | 0 |
| 45 | CONDITION_PET_TYPE | mask | 0 | 0 |
| 46 | CONDITION_TAXI | 0 | 0 | 0 |
| 47 | CONDITION_QUESTSTATE | QuestID | state_mask | 0 |
| 48 | CONDITION_QUEST_OBJECTIVE_PROGRESS | QuestObjectiveID | 0 | Progress value |
| 49 | CONDITION_DIFFICULTY_ID | DifficultyID | 0 | 0 |
| 50 | CONDITION_GAMEMASTER | canBeGM | 0 | 0 |
| 51 | CONDITION_OBJECT_ENTRY_GUID | TypeID | entry | guid |
| 52 | CONDITION_TYPE_MASK | TypeMask | 0 | 0 |
| 53 | CONDITION_BATTLE_PET_COUNT | SpeciesId | count | ComparisonType |
| 54 | CONDITION_SCENARIO_STEP | ScenarioStepId | 0 | 0 |
| 55 | CONDITION_SCENE_IN_PROGRESS | SceneScriptPackageId | 0 | 0 |
| 56 | CONDITION_PLAYER_CONDITION | PlayerConditionId | 0 | 0 |
| 57 | CONDITION_PRIVATE_OBJECT | 0 | 0 | 0 |
| 58 | CONDITION_STRING_ID | 0 | 0 | Используется ConditionStringValue1 |
| 59 | CONDITION_LABEL | Label | 0 | 0 |
ConditionTarget
Цель, к которой применяется условие (выбор объекта проверки). Допустимые значения зависят от SourceType.
Пример: 0
ConditionValue1
Значение №1 условия. Смысл зависит от ConditionTypeOrReference.
Пример: 94562
ConditionValue2
Значение №2 условия. Смысл зависит от ConditionTypeOrReference.
Пример: 0
ConditionValue3
Значение №3 условия. Смысл зависит от ConditionTypeOrReference.
Пример: 0
ConditionStringValue1
Строковый параметр условия (используется некоторыми ConditionType, например CONDITION_STRING_ID). Так как поле входит в PRIMARY KEY, строки с разными ConditionStringValue1 считаются разными условиями даже при совпадении всех остальных полей.
Пример: "my_string_id"
NegativeCondition
Инверсия условия:
| Value | Описание |
|---|---|
| 0 | Условие проверяется «как есть» |
| 1 | Условие инвертируется (NOT) |
Пример: 1
ErrorType
Тип ошибки (Spell Failed Reason), который клиент должен показать, если условие не выполнено. Отображается только для SourceType: CONDITION_SOURCE_TYPE_SPELL (17).
Пример: 211
ErrorTextId
ID кастомной строки ошибки (Spell Custom Error). Отображается только для SourceType: CONDITION_SOURCE_TYPE_SPELL (17), причём ErrorType должен быть SPELL_FAILED_CUSTOM_ERROR (211), иначе ставится 0.
Пример: 123
ScriptName
Имя скрипта, если условие связано с логикой скрипта (используется ядром при необходимости).
Пример: MyConditionScript
Comment
Комментарий/пояснение (для разработчиков/DB team). На логику не влияет.
Пример: "Show option only if player has quest"