diff --git a/data/sql/updates/pending_db_world/rev_1771989601546823271.sql b/data/sql/updates/pending_db_world/rev_1771989601546823271.sql new file mode 100644 index 000000000..16cc99283 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1771989601546823271.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `command` WHERE `name` IN ('spellinfo', 'spellinfo attributes', 'spellinfo effects', 'spellinfo targets', 'spellinfo all'); +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('spellinfo', 2, 'Syntax: .spellinfo $subcommand\n\nType .spellinfo to see a list of subcommands or .help spellinfo $subcommand to see info on subcommands.'), +('spellinfo attributes', 2, 'Syntax: .spellinfo attributes #spellid\n\nDisplays basic info and attribute flags for spell #spellid including SpellAttr0-7, custom attributes, stances, dispel type and mechanic.'), +('spellinfo effects', 2, 'Syntax: .spellinfo effects #spellid\n\nDisplays effect data for spell #spellid including effect type, aura type, base points, multipliers, misc values, mechanic, trigger spell, amplitude and class mask per effect.'), +('spellinfo targets', 2, 'Syntax: .spellinfo targets #spellid\n\nDisplays target data for spell #spellid including target mask, creature type, max affected targets, and per-effect TargetA, TargetB, radius and chain targets.'), +('spellinfo all', 2, 'Syntax: .spellinfo all #spellid\n\nDisplays all available data for spell #spellid including attributes, general properties, effects and targets.'); diff --git a/src/server/scripts/Commands/cs_script_loader.cpp b/src/server/scripts/Commands/cs_script_loader.cpp index 7e667a66c..68bd683f7 100644 --- a/src/server/scripts/Commands/cs_script_loader.cpp +++ b/src/server/scripts/Commands/cs_script_loader.cpp @@ -56,6 +56,7 @@ void AddSC_reset_commandscript(); void AddSC_send_commandscript(); void AddSC_server_commandscript(); void AddSC_spectator_commandscript(); +void AddSC_spellinfo_commandscript(); void AddSC_tele_commandscript(); void AddSC_ticket_commandscript(); void AddSC_titles_commandscript(); @@ -109,6 +110,7 @@ void AddCommandsScripts() AddSC_send_commandscript(); AddSC_server_commandscript(); AddSC_spectator_commandscript(); + AddSC_spellinfo_commandscript(); AddSC_tele_commandscript(); AddSC_ticket_commandscript(); AddSC_titles_commandscript(); diff --git a/src/server/scripts/Commands/cs_spellinfo.cpp b/src/server/scripts/Commands/cs_spellinfo.cpp new file mode 100644 index 000000000..46bf55b2e --- /dev/null +++ b/src/server/scripts/Commands/cs_spellinfo.cpp @@ -0,0 +1,988 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Chat.h" +#include "CommandScript.h" +#include "DBCStructure.h" +#include "Language.h" +#include "SmartEnum.h" +#include "SpellAuraDefines.h" +#include "SpellInfo.h" +#include "SpellMgr.h" + +using namespace Acore::ChatCommands; + +class spellinfo_commandscript : public CommandScript +{ +public: + spellinfo_commandscript() : CommandScript("spellinfo_commandscript") { } + + ChatCommandTable GetCommands() const override + { + static ChatCommandTable spellinfoCommandTable = + { + { "attributes", HandleSpellInfoAttributesCommand, SEC_GAMEMASTER, Console::Yes }, + { "effects", HandleSpellInfoEffectsCommand, SEC_GAMEMASTER, Console::Yes }, + { "targets", HandleSpellInfoTargetsCommand, SEC_GAMEMASTER, Console::Yes }, + { "all", HandleSpellInfoAllCommand, SEC_GAMEMASTER, Console::Yes } + }; + + static ChatCommandTable commandTable = + { + { "spellinfo", spellinfoCommandTable } + }; + + return commandTable; + } + + static char const* GetSpellEffectName(uint32 effect) + { + switch (effect) + { + case SPELL_EFFECT_INSTAKILL: return "SPELL_EFFECT_INSTAKILL"; + case SPELL_EFFECT_SCHOOL_DAMAGE: return "SPELL_EFFECT_SCHOOL_DAMAGE"; + case SPELL_EFFECT_DUMMY: return "SPELL_EFFECT_DUMMY"; + case SPELL_EFFECT_PORTAL_TELEPORT: return "SPELL_EFFECT_PORTAL_TELEPORT"; + case SPELL_EFFECT_TELEPORT_UNITS: return "SPELL_EFFECT_TELEPORT_UNITS"; + case SPELL_EFFECT_APPLY_AURA: return "SPELL_EFFECT_APPLY_AURA"; + case SPELL_EFFECT_ENVIRONMENTAL_DAMAGE: return "SPELL_EFFECT_ENVIRONMENTAL_DAMAGE"; + case SPELL_EFFECT_POWER_DRAIN: return "SPELL_EFFECT_POWER_DRAIN"; + case SPELL_EFFECT_HEALTH_LEECH: return "SPELL_EFFECT_HEALTH_LEECH"; + case SPELL_EFFECT_HEAL: return "SPELL_EFFECT_HEAL"; + case SPELL_EFFECT_BIND: return "SPELL_EFFECT_BIND"; + case SPELL_EFFECT_PORTAL: return "SPELL_EFFECT_PORTAL"; + case SPELL_EFFECT_RITUAL_BASE: return "SPELL_EFFECT_RITUAL_BASE"; + case SPELL_EFFECT_RITUAL_SPECIALIZE: return "SPELL_EFFECT_RITUAL_SPECIALIZE"; + case SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL: return "SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL"; + case SPELL_EFFECT_QUEST_COMPLETE: return "SPELL_EFFECT_QUEST_COMPLETE"; + case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL: return "SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL"; + case SPELL_EFFECT_RESURRECT: return "SPELL_EFFECT_RESURRECT"; + case SPELL_EFFECT_ADD_EXTRA_ATTACKS: return "SPELL_EFFECT_ADD_EXTRA_ATTACKS"; + case SPELL_EFFECT_DODGE: return "SPELL_EFFECT_DODGE"; + case SPELL_EFFECT_EVADE: return "SPELL_EFFECT_EVADE"; + case SPELL_EFFECT_PARRY: return "SPELL_EFFECT_PARRY"; + case SPELL_EFFECT_BLOCK: return "SPELL_EFFECT_BLOCK"; + case SPELL_EFFECT_CREATE_ITEM: return "SPELL_EFFECT_CREATE_ITEM"; + case SPELL_EFFECT_WEAPON: return "SPELL_EFFECT_WEAPON"; + case SPELL_EFFECT_DEFENSE: return "SPELL_EFFECT_DEFENSE"; + case SPELL_EFFECT_PERSISTENT_AREA_AURA: return "SPELL_EFFECT_PERSISTENT_AREA_AURA"; + case SPELL_EFFECT_SUMMON: return "SPELL_EFFECT_SUMMON"; + case SPELL_EFFECT_LEAP: return "SPELL_EFFECT_LEAP"; + case SPELL_EFFECT_ENERGIZE: return "SPELL_EFFECT_ENERGIZE"; + case SPELL_EFFECT_WEAPON_PERCENT_DAMAGE: return "SPELL_EFFECT_WEAPON_PERCENT_DAMAGE"; + case SPELL_EFFECT_TRIGGER_MISSILE: return "SPELL_EFFECT_TRIGGER_MISSILE"; + case SPELL_EFFECT_OPEN_LOCK: return "SPELL_EFFECT_OPEN_LOCK"; + case SPELL_EFFECT_SUMMON_CHANGE_ITEM: return "SPELL_EFFECT_SUMMON_CHANGE_ITEM"; + case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: return "SPELL_EFFECT_APPLY_AREA_AURA_PARTY"; + case SPELL_EFFECT_LEARN_SPELL: return "SPELL_EFFECT_LEARN_SPELL"; + case SPELL_EFFECT_SPELL_DEFENSE: return "SPELL_EFFECT_SPELL_DEFENSE"; + case SPELL_EFFECT_DISPEL: return "SPELL_EFFECT_DISPEL"; + case SPELL_EFFECT_LANGUAGE: return "SPELL_EFFECT_LANGUAGE"; + case SPELL_EFFECT_DUAL_WIELD: return "SPELL_EFFECT_DUAL_WIELD"; + case SPELL_EFFECT_JUMP: return "SPELL_EFFECT_JUMP"; + case SPELL_EFFECT_JUMP_DEST: return "SPELL_EFFECT_JUMP_DEST"; + case SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER: return "SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER"; + case SPELL_EFFECT_SKILL_STEP: return "SPELL_EFFECT_SKILL_STEP"; + case SPELL_EFFECT_ADD_HONOR: return "SPELL_EFFECT_ADD_HONOR"; + case SPELL_EFFECT_SPAWN: return "SPELL_EFFECT_SPAWN"; + case SPELL_EFFECT_TRADE_SKILL: return "SPELL_EFFECT_TRADE_SKILL"; + case SPELL_EFFECT_STEALTH: return "SPELL_EFFECT_STEALTH"; + case SPELL_EFFECT_DETECT: return "SPELL_EFFECT_DETECT"; + case SPELL_EFFECT_TRANS_DOOR: return "SPELL_EFFECT_TRANS_DOOR"; + case SPELL_EFFECT_FORCE_CRITICAL_HIT: return "SPELL_EFFECT_FORCE_CRITICAL_HIT"; + case SPELL_EFFECT_GUARANTEE_HIT: return "SPELL_EFFECT_GUARANTEE_HIT"; + case SPELL_EFFECT_ENCHANT_ITEM: return "SPELL_EFFECT_ENCHANT_ITEM"; + case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY: return "SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY"; + case SPELL_EFFECT_TAMECREATURE: return "SPELL_EFFECT_TAMECREATURE"; + case SPELL_EFFECT_SUMMON_PET: return "SPELL_EFFECT_SUMMON_PET"; + case SPELL_EFFECT_LEARN_PET_SPELL: return "SPELL_EFFECT_LEARN_PET_SPELL"; + case SPELL_EFFECT_WEAPON_DAMAGE: return "SPELL_EFFECT_WEAPON_DAMAGE"; + case SPELL_EFFECT_CREATE_RANDOM_ITEM: return "SPELL_EFFECT_CREATE_RANDOM_ITEM"; + case SPELL_EFFECT_PROFICIENCY: return "SPELL_EFFECT_PROFICIENCY"; + case SPELL_EFFECT_SEND_EVENT: return "SPELL_EFFECT_SEND_EVENT"; + case SPELL_EFFECT_POWER_BURN: return "SPELL_EFFECT_POWER_BURN"; + case SPELL_EFFECT_THREAT: return "SPELL_EFFECT_THREAT"; + case SPELL_EFFECT_TRIGGER_SPELL: return "SPELL_EFFECT_TRIGGER_SPELL"; + case SPELL_EFFECT_APPLY_AREA_AURA_RAID: return "SPELL_EFFECT_APPLY_AREA_AURA_RAID"; + case SPELL_EFFECT_CREATE_MANA_GEM: return "SPELL_EFFECT_CREATE_MANA_GEM"; + case SPELL_EFFECT_HEAL_MAX_HEALTH: return "SPELL_EFFECT_HEAL_MAX_HEALTH"; + case SPELL_EFFECT_INTERRUPT_CAST: return "SPELL_EFFECT_INTERRUPT_CAST"; + case SPELL_EFFECT_DISTRACT: return "SPELL_EFFECT_DISTRACT"; + case SPELL_EFFECT_PULL: return "SPELL_EFFECT_PULL"; + case SPELL_EFFECT_PICKPOCKET: return "SPELL_EFFECT_PICKPOCKET"; + case SPELL_EFFECT_ADD_FARSIGHT: return "SPELL_EFFECT_ADD_FARSIGHT"; + case SPELL_EFFECT_UNTRAIN_TALENTS: return "SPELL_EFFECT_UNTRAIN_TALENTS"; + case SPELL_EFFECT_APPLY_GLYPH: return "SPELL_EFFECT_APPLY_GLYPH"; + case SPELL_EFFECT_HEAL_MECHANICAL: return "SPELL_EFFECT_HEAL_MECHANICAL"; + case SPELL_EFFECT_SUMMON_OBJECT_WILD: return "SPELL_EFFECT_SUMMON_OBJECT_WILD"; + case SPELL_EFFECT_SCRIPT_EFFECT: return "SPELL_EFFECT_SCRIPT_EFFECT"; + case SPELL_EFFECT_ATTACK: return "SPELL_EFFECT_ATTACK"; + case SPELL_EFFECT_SANCTUARY: return "SPELL_EFFECT_SANCTUARY"; + case SPELL_EFFECT_ADD_COMBO_POINTS: return "SPELL_EFFECT_ADD_COMBO_POINTS"; + case SPELL_EFFECT_CREATE_HOUSE: return "SPELL_EFFECT_CREATE_HOUSE"; + case SPELL_EFFECT_BIND_SIGHT: return "SPELL_EFFECT_BIND_SIGHT"; + case SPELL_EFFECT_DUEL: return "SPELL_EFFECT_DUEL"; + case SPELL_EFFECT_STUCK: return "SPELL_EFFECT_STUCK"; + case SPELL_EFFECT_SUMMON_PLAYER: return "SPELL_EFFECT_SUMMON_PLAYER"; + case SPELL_EFFECT_ACTIVATE_OBJECT: return "SPELL_EFFECT_ACTIVATE_OBJECT"; + case SPELL_EFFECT_GAMEOBJECT_DAMAGE: return "SPELL_EFFECT_GAMEOBJECT_DAMAGE"; + case SPELL_EFFECT_GAMEOBJECT_REPAIR: return "SPELL_EFFECT_GAMEOBJECT_REPAIR"; + case SPELL_EFFECT_GAMEOBJECT_SET_DESTRUCTION_STATE: return "SPELL_EFFECT_GAMEOBJECT_SET_DESTRUCTION_STATE"; + case SPELL_EFFECT_KILL_CREDIT: return "SPELL_EFFECT_KILL_CREDIT"; + case SPELL_EFFECT_THREAT_ALL: return "SPELL_EFFECT_THREAT_ALL"; + case SPELL_EFFECT_ENCHANT_HELD_ITEM: return "SPELL_EFFECT_ENCHANT_HELD_ITEM"; + case SPELL_EFFECT_FORCE_DESELECT: return "SPELL_EFFECT_FORCE_DESELECT"; + case SPELL_EFFECT_SELF_RESURRECT: return "SPELL_EFFECT_SELF_RESURRECT"; + case SPELL_EFFECT_SKINNING: return "SPELL_EFFECT_SKINNING"; + case SPELL_EFFECT_CHARGE: return "SPELL_EFFECT_CHARGE"; + case SPELL_EFFECT_CAST_BUTTON: return "SPELL_EFFECT_CAST_BUTTON"; + case SPELL_EFFECT_KNOCK_BACK: return "SPELL_EFFECT_KNOCK_BACK"; + case SPELL_EFFECT_DISENCHANT: return "SPELL_EFFECT_DISENCHANT"; + case SPELL_EFFECT_INEBRIATE: return "SPELL_EFFECT_INEBRIATE"; + case SPELL_EFFECT_FEED_PET: return "SPELL_EFFECT_FEED_PET"; + case SPELL_EFFECT_DISMISS_PET: return "SPELL_EFFECT_DISMISS_PET"; + case SPELL_EFFECT_REPUTATION: return "SPELL_EFFECT_REPUTATION"; + case SPELL_EFFECT_SUMMON_OBJECT_SLOT1: return "SPELL_EFFECT_SUMMON_OBJECT_SLOT1"; + case SPELL_EFFECT_SUMMON_OBJECT_SLOT2: return "SPELL_EFFECT_SUMMON_OBJECT_SLOT2"; + case SPELL_EFFECT_SUMMON_OBJECT_SLOT3: return "SPELL_EFFECT_SUMMON_OBJECT_SLOT3"; + case SPELL_EFFECT_SUMMON_OBJECT_SLOT4: return "SPELL_EFFECT_SUMMON_OBJECT_SLOT4"; + case SPELL_EFFECT_DISPEL_MECHANIC: return "SPELL_EFFECT_DISPEL_MECHANIC"; + case SPELL_EFFECT_RESURRECT_PET: return "SPELL_EFFECT_RESURRECT_PET"; + case SPELL_EFFECT_DESTROY_ALL_TOTEMS: return "SPELL_EFFECT_DESTROY_ALL_TOTEMS"; + case SPELL_EFFECT_DURABILITY_DAMAGE: return "SPELL_EFFECT_DURABILITY_DAMAGE"; + case SPELL_EFFECT_112: return "SPELL_EFFECT_112"; + case SPELL_EFFECT_RESURRECT_NEW: return "SPELL_EFFECT_RESURRECT_NEW"; + case SPELL_EFFECT_ATTACK_ME: return "SPELL_EFFECT_ATTACK_ME"; + case SPELL_EFFECT_DURABILITY_DAMAGE_PCT: return "SPELL_EFFECT_DURABILITY_DAMAGE_PCT"; + case SPELL_EFFECT_SKIN_PLAYER_CORPSE: return "SPELL_EFFECT_SKIN_PLAYER_CORPSE"; + case SPELL_EFFECT_SPIRIT_HEAL: return "SPELL_EFFECT_SPIRIT_HEAL"; + case SPELL_EFFECT_SKILL: return "SPELL_EFFECT_SKILL"; + case SPELL_EFFECT_APPLY_AREA_AURA_PET: return "SPELL_EFFECT_APPLY_AREA_AURA_PET"; + case SPELL_EFFECT_TELEPORT_GRAVEYARD: return "SPELL_EFFECT_TELEPORT_GRAVEYARD"; + case SPELL_EFFECT_NORMALIZED_WEAPON_DMG: return "SPELL_EFFECT_NORMALIZED_WEAPON_DMG"; + case SPELL_EFFECT_122: return "SPELL_EFFECT_122"; + case SPELL_EFFECT_SEND_TAXI: return "SPELL_EFFECT_SEND_TAXI"; + case SPELL_EFFECT_PULL_TOWARDS: return "SPELL_EFFECT_PULL_TOWARDS"; + case SPELL_EFFECT_MODIFY_THREAT_PERCENT: return "SPELL_EFFECT_MODIFY_THREAT_PERCENT"; + case SPELL_EFFECT_STEAL_BENEFICIAL_BUFF: return "SPELL_EFFECT_STEAL_BENEFICIAL_BUFF"; + case SPELL_EFFECT_PROSPECTING: return "SPELL_EFFECT_PROSPECTING"; + case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: return "SPELL_EFFECT_APPLY_AREA_AURA_FRIEND"; + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: return "SPELL_EFFECT_APPLY_AREA_AURA_ENEMY"; + case SPELL_EFFECT_REDIRECT_THREAT: return "SPELL_EFFECT_REDIRECT_THREAT"; + case SPELL_EFFECT_PLAY_SOUND: return "SPELL_EFFECT_PLAY_SOUND"; + case SPELL_EFFECT_PLAY_MUSIC: return "SPELL_EFFECT_PLAY_MUSIC"; + case SPELL_EFFECT_UNLEARN_SPECIALIZATION: return "SPELL_EFFECT_UNLEARN_SPECIALIZATION"; + case SPELL_EFFECT_KILL_CREDIT2: return "SPELL_EFFECT_KILL_CREDIT2"; + case SPELL_EFFECT_CALL_PET: return "SPELL_EFFECT_CALL_PET"; + case SPELL_EFFECT_HEAL_PCT: return "SPELL_EFFECT_HEAL_PCT"; + case SPELL_EFFECT_ENERGIZE_PCT: return "SPELL_EFFECT_ENERGIZE_PCT"; + case SPELL_EFFECT_LEAP_BACK: return "SPELL_EFFECT_LEAP_BACK"; + case SPELL_EFFECT_CLEAR_QUEST: return "SPELL_EFFECT_CLEAR_QUEST"; + case SPELL_EFFECT_FORCE_CAST: return "SPELL_EFFECT_FORCE_CAST"; + case SPELL_EFFECT_FORCE_CAST_WITH_VALUE: return "SPELL_EFFECT_FORCE_CAST_WITH_VALUE"; + case SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE: return "SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE"; + case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: return "SPELL_EFFECT_APPLY_AREA_AURA_OWNER"; + case SPELL_EFFECT_KNOCK_BACK_DEST: return "SPELL_EFFECT_KNOCK_BACK_DEST"; + case SPELL_EFFECT_PULL_TOWARDS_DEST: return "SPELL_EFFECT_PULL_TOWARDS_DEST"; + case SPELL_EFFECT_ACTIVATE_RUNE: return "SPELL_EFFECT_ACTIVATE_RUNE"; + case SPELL_EFFECT_QUEST_FAIL: return "SPELL_EFFECT_QUEST_FAIL"; + case SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE: return "SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE"; + case SPELL_EFFECT_CHARGE_DEST: return "SPELL_EFFECT_CHARGE_DEST"; + case SPELL_EFFECT_QUEST_START: return "SPELL_EFFECT_QUEST_START"; + case SPELL_EFFECT_TRIGGER_SPELL_2: return "SPELL_EFFECT_TRIGGER_SPELL_2"; + case SPELL_EFFECT_SUMMON_RAF_FRIEND: return "SPELL_EFFECT_SUMMON_RAF_FRIEND"; + case SPELL_EFFECT_CREATE_TAMED_PET: return "SPELL_EFFECT_CREATE_TAMED_PET"; + case SPELL_EFFECT_DISCOVER_TAXI: return "SPELL_EFFECT_DISCOVER_TAXI"; + case SPELL_EFFECT_TITAN_GRIP: return "SPELL_EFFECT_TITAN_GRIP"; + case SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC: return "SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC"; + case SPELL_EFFECT_CREATE_ITEM_2: return "SPELL_EFFECT_CREATE_ITEM_2"; + case SPELL_EFFECT_MILLING: return "SPELL_EFFECT_MILLING"; + case SPELL_EFFECT_ALLOW_RENAME_PET: return "SPELL_EFFECT_ALLOW_RENAME_PET"; + case SPELL_EFFECT_FORCE_CAST_2: return "SPELL_EFFECT_FORCE_CAST_2"; + case SPELL_EFFECT_TALENT_SPEC_COUNT: return "SPELL_EFFECT_TALENT_SPEC_COUNT"; + case SPELL_EFFECT_TALENT_SPEC_SELECT: return "SPELL_EFFECT_TALENT_SPEC_SELECT"; + case SPELL_EFFECT_163: return "SPELL_EFFECT_163"; + case SPELL_EFFECT_REMOVE_AURA: return "SPELL_EFFECT_REMOVE_AURA"; + default: return "UNKNOWN_EFFECT"; + } + } + + static char const* GetAuraTypeName(uint32 aura) + { + switch (aura) + { + case SPELL_AURA_NONE: return "SPELL_AURA_NONE"; + case SPELL_AURA_BIND_SIGHT: return "SPELL_AURA_BIND_SIGHT"; + case SPELL_AURA_MOD_POSSESS: return "SPELL_AURA_MOD_POSSESS"; + case SPELL_AURA_PERIODIC_DAMAGE: return "SPELL_AURA_PERIODIC_DAMAGE"; + case SPELL_AURA_DUMMY: return "SPELL_AURA_DUMMY"; + case SPELL_AURA_MOD_CONFUSE: return "SPELL_AURA_MOD_CONFUSE"; + case SPELL_AURA_MOD_CHARM: return "SPELL_AURA_MOD_CHARM"; + case SPELL_AURA_MOD_FEAR: return "SPELL_AURA_MOD_FEAR"; + case SPELL_AURA_PERIODIC_HEAL: return "SPELL_AURA_PERIODIC_HEAL"; + case SPELL_AURA_MOD_ATTACKSPEED: return "SPELL_AURA_MOD_ATTACKSPEED"; + case SPELL_AURA_MOD_THREAT: return "SPELL_AURA_MOD_THREAT"; + case SPELL_AURA_MOD_TAUNT: return "SPELL_AURA_MOD_TAUNT"; + case SPELL_AURA_MOD_STUN: return "SPELL_AURA_MOD_STUN"; + case SPELL_AURA_MOD_DAMAGE_DONE: return "SPELL_AURA_MOD_DAMAGE_DONE"; + case SPELL_AURA_MOD_DAMAGE_TAKEN: return "SPELL_AURA_MOD_DAMAGE_TAKEN"; + case SPELL_AURA_DAMAGE_SHIELD: return "SPELL_AURA_DAMAGE_SHIELD"; + case SPELL_AURA_MOD_STEALTH: return "SPELL_AURA_MOD_STEALTH"; + case SPELL_AURA_MOD_STEALTH_DETECT: return "SPELL_AURA_MOD_STEALTH_DETECT"; + case SPELL_AURA_MOD_INVISIBILITY: return "SPELL_AURA_MOD_INVISIBILITY"; + case SPELL_AURA_MOD_INVISIBILITY_DETECT: return "SPELL_AURA_MOD_INVISIBILITY_DETECT"; + case SPELL_AURA_OBS_MOD_HEALTH: return "SPELL_AURA_OBS_MOD_HEALTH"; + case SPELL_AURA_OBS_MOD_POWER: return "SPELL_AURA_OBS_MOD_POWER"; + case SPELL_AURA_MOD_RESISTANCE: return "SPELL_AURA_MOD_RESISTANCE"; + case SPELL_AURA_PERIODIC_TRIGGER_SPELL: return "SPELL_AURA_PERIODIC_TRIGGER_SPELL"; + case SPELL_AURA_PERIODIC_ENERGIZE: return "SPELL_AURA_PERIODIC_ENERGIZE"; + case SPELL_AURA_MOD_PACIFY: return "SPELL_AURA_MOD_PACIFY"; + case SPELL_AURA_MOD_ROOT: return "SPELL_AURA_MOD_ROOT"; + case SPELL_AURA_MOD_SILENCE: return "SPELL_AURA_MOD_SILENCE"; + case SPELL_AURA_REFLECT_SPELLS: return "SPELL_AURA_REFLECT_SPELLS"; + case SPELL_AURA_MOD_STAT: return "SPELL_AURA_MOD_STAT"; + case SPELL_AURA_MOD_SKILL: return "SPELL_AURA_MOD_SKILL"; + case SPELL_AURA_MOD_INCREASE_SPEED: return "SPELL_AURA_MOD_INCREASE_SPEED"; + case SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED: return "SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED"; + case SPELL_AURA_MOD_DECREASE_SPEED: return "SPELL_AURA_MOD_DECREASE_SPEED"; + case SPELL_AURA_MOD_INCREASE_HEALTH: return "SPELL_AURA_MOD_INCREASE_HEALTH"; + case SPELL_AURA_MOD_INCREASE_ENERGY: return "SPELL_AURA_MOD_INCREASE_ENERGY"; + case SPELL_AURA_MOD_SHAPESHIFT: return "SPELL_AURA_MOD_SHAPESHIFT"; + case SPELL_AURA_EFFECT_IMMUNITY: return "SPELL_AURA_EFFECT_IMMUNITY"; + case SPELL_AURA_STATE_IMMUNITY: return "SPELL_AURA_STATE_IMMUNITY"; + case SPELL_AURA_SCHOOL_IMMUNITY: return "SPELL_AURA_SCHOOL_IMMUNITY"; + case SPELL_AURA_DAMAGE_IMMUNITY: return "SPELL_AURA_DAMAGE_IMMUNITY"; + case SPELL_AURA_DISPEL_IMMUNITY: return "SPELL_AURA_DISPEL_IMMUNITY"; + case SPELL_AURA_PROC_TRIGGER_SPELL: return "SPELL_AURA_PROC_TRIGGER_SPELL"; + case SPELL_AURA_PROC_TRIGGER_DAMAGE: return "SPELL_AURA_PROC_TRIGGER_DAMAGE"; + case SPELL_AURA_TRACK_CREATURES: return "SPELL_AURA_TRACK_CREATURES"; + case SPELL_AURA_TRACK_RESOURCES: return "SPELL_AURA_TRACK_RESOURCES"; + case SPELL_AURA_46: return "SPELL_AURA_46"; + case SPELL_AURA_MOD_PARRY_PERCENT: return "SPELL_AURA_MOD_PARRY_PERCENT"; + case SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT: return "SPELL_AURA_PERIODIC_TRIGGER_SPELL_FROM_CLIENT"; + case SPELL_AURA_MOD_DODGE_PERCENT: return "SPELL_AURA_MOD_DODGE_PERCENT"; + case SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT: return "SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT"; + case SPELL_AURA_MOD_BLOCK_PERCENT: return "SPELL_AURA_MOD_BLOCK_PERCENT"; + case SPELL_AURA_MOD_WEAPON_CRIT_PERCENT: return "SPELL_AURA_MOD_WEAPON_CRIT_PERCENT"; + case SPELL_AURA_PERIODIC_LEECH: return "SPELL_AURA_PERIODIC_LEECH"; + case SPELL_AURA_MOD_HIT_CHANCE: return "SPELL_AURA_MOD_HIT_CHANCE"; + case SPELL_AURA_MOD_SPELL_HIT_CHANCE: return "SPELL_AURA_MOD_SPELL_HIT_CHANCE"; + case SPELL_AURA_TRANSFORM: return "SPELL_AURA_TRANSFORM"; + case SPELL_AURA_MOD_SPELL_CRIT_CHANCE: return "SPELL_AURA_MOD_SPELL_CRIT_CHANCE"; + case SPELL_AURA_MOD_INCREASE_SWIM_SPEED: return "SPELL_AURA_MOD_INCREASE_SWIM_SPEED"; + case SPELL_AURA_MOD_DAMAGE_DONE_CREATURE: return "SPELL_AURA_MOD_DAMAGE_DONE_CREATURE"; + case SPELL_AURA_MOD_PACIFY_SILENCE: return "SPELL_AURA_MOD_PACIFY_SILENCE"; + case SPELL_AURA_MOD_SCALE: return "SPELL_AURA_MOD_SCALE"; + case SPELL_AURA_PERIODIC_HEALTH_FUNNEL: return "SPELL_AURA_PERIODIC_HEALTH_FUNNEL"; + case SPELL_AURA_63: return "SPELL_AURA_63"; + case SPELL_AURA_PERIODIC_MANA_LEECH: return "SPELL_AURA_PERIODIC_MANA_LEECH"; + case SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK: return "SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK"; + case SPELL_AURA_FEIGN_DEATH: return "SPELL_AURA_FEIGN_DEATH"; + case SPELL_AURA_MOD_DISARM: return "SPELL_AURA_MOD_DISARM"; + case SPELL_AURA_MOD_STALKED: return "SPELL_AURA_MOD_STALKED"; + case SPELL_AURA_SCHOOL_ABSORB: return "SPELL_AURA_SCHOOL_ABSORB"; + case SPELL_AURA_EXTRA_ATTACKS: return "SPELL_AURA_EXTRA_ATTACKS"; + case SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL: return "SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL"; + case SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT: return "SPELL_AURA_MOD_POWER_COST_SCHOOL_PCT"; + case SPELL_AURA_MOD_POWER_COST_SCHOOL: return "SPELL_AURA_MOD_POWER_COST_SCHOOL"; + case SPELL_AURA_REFLECT_SPELLS_SCHOOL: return "SPELL_AURA_REFLECT_SPELLS_SCHOOL"; + case SPELL_AURA_MOD_LANGUAGE: return "SPELL_AURA_MOD_LANGUAGE"; + case SPELL_AURA_FAR_SIGHT: return "SPELL_AURA_FAR_SIGHT"; + case SPELL_AURA_MECHANIC_IMMUNITY: return "SPELL_AURA_MECHANIC_IMMUNITY"; + case SPELL_AURA_MOUNTED: return "SPELL_AURA_MOUNTED"; + case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE: return "SPELL_AURA_MOD_DAMAGE_PERCENT_DONE"; + case SPELL_AURA_MOD_PERCENT_STAT: return "SPELL_AURA_MOD_PERCENT_STAT"; + case SPELL_AURA_SPLIT_DAMAGE_PCT: return "SPELL_AURA_SPLIT_DAMAGE_PCT"; + case SPELL_AURA_WATER_BREATHING: return "SPELL_AURA_WATER_BREATHING"; + case SPELL_AURA_MOD_BASE_RESISTANCE: return "SPELL_AURA_MOD_BASE_RESISTANCE"; + case SPELL_AURA_MOD_REGEN: return "SPELL_AURA_MOD_REGEN"; + case SPELL_AURA_MOD_POWER_REGEN: return "SPELL_AURA_MOD_POWER_REGEN"; + case SPELL_AURA_CHANNEL_DEATH_ITEM: return "SPELL_AURA_CHANNEL_DEATH_ITEM"; + case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN: return "SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN"; + case SPELL_AURA_MOD_HEALTH_REGEN_PERCENT: return "SPELL_AURA_MOD_HEALTH_REGEN_PERCENT"; + case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: return "SPELL_AURA_PERIODIC_DAMAGE_PERCENT"; + case SPELL_AURA_90: return "SPELL_AURA_90"; + case SPELL_AURA_MOD_DETECT_RANGE: return "SPELL_AURA_MOD_DETECT_RANGE"; + case SPELL_AURA_PREVENTS_FLEEING: return "SPELL_AURA_PREVENTS_FLEEING"; + case SPELL_AURA_MOD_UNATTACKABLE: return "SPELL_AURA_MOD_UNATTACKABLE"; + case SPELL_AURA_INTERRUPT_REGEN: return "SPELL_AURA_INTERRUPT_REGEN"; + case SPELL_AURA_GHOST: return "SPELL_AURA_GHOST"; + case SPELL_AURA_SPELL_MAGNET: return "SPELL_AURA_SPELL_MAGNET"; + case SPELL_AURA_MANA_SHIELD: return "SPELL_AURA_MANA_SHIELD"; + case SPELL_AURA_MOD_SKILL_TALENT: return "SPELL_AURA_MOD_SKILL_TALENT"; + case SPELL_AURA_MOD_ATTACK_POWER: return "SPELL_AURA_MOD_ATTACK_POWER"; + case SPELL_AURA_AURAS_VISIBLE: return "SPELL_AURA_AURAS_VISIBLE"; + case SPELL_AURA_MOD_RESISTANCE_PCT: return "SPELL_AURA_MOD_RESISTANCE_PCT"; + case SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS: return "SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS"; + case SPELL_AURA_MOD_TOTAL_THREAT: return "SPELL_AURA_MOD_TOTAL_THREAT"; + case SPELL_AURA_WATER_WALK: return "SPELL_AURA_WATER_WALK"; + case SPELL_AURA_FEATHER_FALL: return "SPELL_AURA_FEATHER_FALL"; + case SPELL_AURA_HOVER: return "SPELL_AURA_HOVER"; + case SPELL_AURA_ADD_FLAT_MODIFIER: return "SPELL_AURA_ADD_FLAT_MODIFIER"; + case SPELL_AURA_ADD_PCT_MODIFIER: return "SPELL_AURA_ADD_PCT_MODIFIER"; + case SPELL_AURA_ADD_TARGET_TRIGGER: return "SPELL_AURA_ADD_TARGET_TRIGGER"; + case SPELL_AURA_MOD_POWER_REGEN_PERCENT: return "SPELL_AURA_MOD_POWER_REGEN_PERCENT"; + case SPELL_AURA_ADD_CASTER_HIT_TRIGGER: return "SPELL_AURA_ADD_CASTER_HIT_TRIGGER"; + case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS: return "SPELL_AURA_OVERRIDE_CLASS_SCRIPTS"; + case SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN: return "SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN"; + case SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT: return "SPELL_AURA_MOD_RANGED_DAMAGE_TAKEN_PCT"; + case SPELL_AURA_MOD_HEALING: return "SPELL_AURA_MOD_HEALING"; + case SPELL_AURA_MOD_REGEN_DURING_COMBAT: return "SPELL_AURA_MOD_REGEN_DURING_COMBAT"; + case SPELL_AURA_MOD_MECHANIC_RESISTANCE: return "SPELL_AURA_MOD_MECHANIC_RESISTANCE"; + case SPELL_AURA_MOD_HEALING_PCT: return "SPELL_AURA_MOD_HEALING_PCT"; + case SPELL_AURA_119: return "SPELL_AURA_119"; + case SPELL_AURA_UNTRACKABLE: return "SPELL_AURA_UNTRACKABLE"; + case SPELL_AURA_EMPATHY: return "SPELL_AURA_EMPATHY"; + case SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT: return "SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT"; + case SPELL_AURA_MOD_TARGET_RESISTANCE: return "SPELL_AURA_MOD_TARGET_RESISTANCE"; + case SPELL_AURA_MOD_RANGED_ATTACK_POWER: return "SPELL_AURA_MOD_RANGED_ATTACK_POWER"; + case SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN: return "SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN"; + case SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT: return "SPELL_AURA_MOD_MELEE_DAMAGE_TAKEN_PCT"; + case SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS: return "SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS"; + case SPELL_AURA_MOD_POSSESS_PET: return "SPELL_AURA_MOD_POSSESS_PET"; + case SPELL_AURA_MOD_SPEED_ALWAYS: return "SPELL_AURA_MOD_SPEED_ALWAYS"; + case SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS: return "SPELL_AURA_MOD_MOUNTED_SPEED_ALWAYS"; + case SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS: return "SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS"; + case SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT: return "SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT"; + case SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT: return "SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT"; + case SPELL_AURA_MOD_MANA_REGEN_INTERRUPT: return "SPELL_AURA_MOD_MANA_REGEN_INTERRUPT"; + case SPELL_AURA_MOD_HEALING_DONE: return "SPELL_AURA_MOD_HEALING_DONE"; + case SPELL_AURA_MOD_HEALING_DONE_PERCENT: return "SPELL_AURA_MOD_HEALING_DONE_PERCENT"; + case SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE: return "SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE"; + case SPELL_AURA_MOD_MELEE_HASTE: return "SPELL_AURA_MOD_MELEE_HASTE"; + case SPELL_AURA_FORCE_REACTION: return "SPELL_AURA_FORCE_REACTION"; + case SPELL_AURA_MOD_RANGED_HASTE: return "SPELL_AURA_MOD_RANGED_HASTE"; + case SPELL_AURA_MOD_RANGED_AMMO_HASTE: return "SPELL_AURA_MOD_RANGED_AMMO_HASTE"; + case SPELL_AURA_MOD_BASE_RESISTANCE_PCT: return "SPELL_AURA_MOD_BASE_RESISTANCE_PCT"; + case SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE: return "SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE"; + case SPELL_AURA_SAFE_FALL: return "SPELL_AURA_SAFE_FALL"; + case SPELL_AURA_MOD_PET_TALENT_POINTS: return "SPELL_AURA_MOD_PET_TALENT_POINTS"; + case SPELL_AURA_ALLOW_TAME_PET_TYPE: return "SPELL_AURA_ALLOW_TAME_PET_TYPE"; + case SPELL_AURA_MECHANIC_IMMUNITY_MASK: return "SPELL_AURA_MECHANIC_IMMUNITY_MASK"; + case SPELL_AURA_RETAIN_COMBO_POINTS: return "SPELL_AURA_RETAIN_COMBO_POINTS"; + case SPELL_AURA_REDUCE_PUSHBACK: return "SPELL_AURA_REDUCE_PUSHBACK"; + case SPELL_AURA_MOD_SHIELD_BLOCKVALUE_PCT: return "SPELL_AURA_MOD_SHIELD_BLOCKVALUE_PCT"; + case SPELL_AURA_TRACK_STEALTHED: return "SPELL_AURA_TRACK_STEALTHED"; + case SPELL_AURA_MOD_DETECTED_RANGE: return "SPELL_AURA_MOD_DETECTED_RANGE"; + case SPELL_AURA_SPLIT_DAMAGE_FLAT: return "SPELL_AURA_SPLIT_DAMAGE_FLAT"; + case SPELL_AURA_MOD_STEALTH_LEVEL: return "SPELL_AURA_MOD_STEALTH_LEVEL"; + case SPELL_AURA_MOD_WATER_BREATHING: return "SPELL_AURA_MOD_WATER_BREATHING"; + case SPELL_AURA_MOD_REPUTATION_GAIN: return "SPELL_AURA_MOD_REPUTATION_GAIN"; + case SPELL_AURA_PET_DAMAGE_MULTI: return "SPELL_AURA_PET_DAMAGE_MULTI"; + case SPELL_AURA_MOD_SHIELD_BLOCKVALUE: return "SPELL_AURA_MOD_SHIELD_BLOCKVALUE"; + case SPELL_AURA_NO_PVP_CREDIT: return "SPELL_AURA_NO_PVP_CREDIT"; + case SPELL_AURA_MOD_AOE_AVOIDANCE: return "SPELL_AURA_MOD_AOE_AVOIDANCE"; + case SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT: return "SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT"; + case SPELL_AURA_POWER_BURN: return "SPELL_AURA_POWER_BURN"; + case SPELL_AURA_MOD_CRIT_DAMAGE_BONUS: return "SPELL_AURA_MOD_CRIT_DAMAGE_BONUS"; + case SPELL_AURA_164: return "SPELL_AURA_164"; + case SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS: return "SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS"; + case SPELL_AURA_MOD_ATTACK_POWER_PCT: return "SPELL_AURA_MOD_ATTACK_POWER_PCT"; + case SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT: return "SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT"; + case SPELL_AURA_MOD_DAMAGE_DONE_VERSUS: return "SPELL_AURA_MOD_DAMAGE_DONE_VERSUS"; + case SPELL_AURA_MOD_CRIT_PERCENT_VERSUS: return "SPELL_AURA_MOD_CRIT_PERCENT_VERSUS"; + case SPELL_AURA_DETECT_AMORE: return "SPELL_AURA_DETECT_AMORE"; + case SPELL_AURA_MOD_SPEED_NOT_STACK: return "SPELL_AURA_MOD_SPEED_NOT_STACK"; + case SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK: return "SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK"; + case SPELL_AURA_173: return "SPELL_AURA_173"; + case SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT: return "SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT"; + case SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT: return "SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT"; + case SPELL_AURA_SPIRIT_OF_REDEMPTION: return "SPELL_AURA_SPIRIT_OF_REDEMPTION"; + case SPELL_AURA_AOE_CHARM: return "SPELL_AURA_AOE_CHARM"; + case SPELL_AURA_MOD_DEBUFF_RESISTANCE: return "SPELL_AURA_MOD_DEBUFF_RESISTANCE"; + case SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE"; + case SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS: return "SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS"; + case SPELL_AURA_181: return "SPELL_AURA_181"; + case SPELL_AURA_MOD_RESISTANCE_OF_STAT_PERCENT: return "SPELL_AURA_MOD_RESISTANCE_OF_STAT_PERCENT"; + case SPELL_AURA_MOD_CRITICAL_THREAT: return "SPELL_AURA_MOD_CRITICAL_THREAT"; + case SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE"; + case SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE"; + case SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE"; + case SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_CHANCE"; + case SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_CHANCE"; + case SPELL_AURA_MOD_RATING: return "SPELL_AURA_MOD_RATING"; + case SPELL_AURA_MOD_FACTION_REPUTATION_GAIN: return "SPELL_AURA_MOD_FACTION_REPUTATION_GAIN"; + case SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED: return "SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED"; + case SPELL_AURA_MOD_MELEE_RANGED_HASTE: return "SPELL_AURA_MOD_MELEE_RANGED_HASTE"; + case SPELL_AURA_MELEE_SLOW: return "SPELL_AURA_MELEE_SLOW"; + case SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL: return "SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL"; + case SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL: return "SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL"; + case SPELL_AURA_MOD_COOLDOWN: return "SPELL_AURA_MOD_COOLDOWN"; + case SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE: return "SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE"; + case SPELL_AURA_198: return "SPELL_AURA_198"; + case SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT: return "SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT"; + case SPELL_AURA_MOD_XP_PCT: return "SPELL_AURA_MOD_XP_PCT"; + case SPELL_AURA_FLY: return "SPELL_AURA_FLY"; + case SPELL_AURA_IGNORE_COMBAT_RESULT: return "SPELL_AURA_IGNORE_COMBAT_RESULT"; + case SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE: return "SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE"; + case SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE: return "SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE"; + case SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN: return "SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN"; + case SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED: return "SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED"; + case SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED: return "SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED"; + case SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS: return "SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS"; + case SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS: return "SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS"; + case SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING: return "SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACKING"; + case SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING: return "SPELL_AURA_MOD_FLIGHT_SPEED_MOUNTED_NOT_STACKING"; + case SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT: return "SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT"; + case SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT: return "SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT"; + case SPELL_AURA_214: return "SPELL_AURA_214"; + case SPELL_AURA_ARENA_PREPARATION: return "SPELL_AURA_ARENA_PREPARATION"; + case SPELL_AURA_HASTE_SPELLS: return "SPELL_AURA_HASTE_SPELLS"; + case SPELL_AURA_MOD_MELEE_HASTE_2: return "SPELL_AURA_MOD_MELEE_HASTE_2"; + case SPELL_AURA_HASTE_RANGED: return "SPELL_AURA_HASTE_RANGED"; + case SPELL_AURA_MOD_MANA_REGEN_FROM_STAT: return "SPELL_AURA_MOD_MANA_REGEN_FROM_STAT"; + case SPELL_AURA_MOD_RATING_FROM_STAT: return "SPELL_AURA_MOD_RATING_FROM_STAT"; + case SPELL_AURA_IGNORED: return "SPELL_AURA_IGNORED"; + case SPELL_AURA_222: return "SPELL_AURA_222"; + case SPELL_AURA_RAID_PROC_FROM_CHARGE: return "SPELL_AURA_RAID_PROC_FROM_CHARGE"; + case SPELL_AURA_224: return "SPELL_AURA_224"; + case SPELL_AURA_RAID_PROC_FROM_CHARGE_WITH_VALUE: return "SPELL_AURA_RAID_PROC_FROM_CHARGE_WITH_VALUE"; + case SPELL_AURA_PERIODIC_DUMMY: return "SPELL_AURA_PERIODIC_DUMMY"; + case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: return "SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE"; + case SPELL_AURA_DETECT_STEALTH: return "SPELL_AURA_DETECT_STEALTH"; + case SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE: return "SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE"; + case SPELL_AURA_230: return "SPELL_AURA_230"; + case SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE: return "SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE"; + case SPELL_AURA_MECHANIC_DURATION_MOD: return "SPELL_AURA_MECHANIC_DURATION_MOD"; + case SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS: return "SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS"; + case SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK: return "SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK"; + case SPELL_AURA_MOD_DISPEL_RESIST: return "SPELL_AURA_MOD_DISPEL_RESIST"; + case SPELL_AURA_CONTROL_VEHICLE: return "SPELL_AURA_CONTROL_VEHICLE"; + case SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER: return "SPELL_AURA_MOD_SPELL_DAMAGE_OF_ATTACK_POWER"; + case SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER: return "SPELL_AURA_MOD_SPELL_HEALING_OF_ATTACK_POWER"; + case SPELL_AURA_MOD_SCALE_2: return "SPELL_AURA_MOD_SCALE_2"; + case SPELL_AURA_MOD_EXPERTISE: return "SPELL_AURA_MOD_EXPERTISE"; + case SPELL_AURA_FORCE_MOVE_FORWARD: return "SPELL_AURA_FORCE_MOVE_FORWARD"; + case SPELL_AURA_MOD_SPELL_DAMAGE_FROM_HEALING: return "SPELL_AURA_MOD_SPELL_DAMAGE_FROM_HEALING"; + case SPELL_AURA_MOD_FACTION: return "SPELL_AURA_MOD_FACTION"; + case SPELL_AURA_COMPREHEND_LANGUAGE: return "SPELL_AURA_COMPREHEND_LANGUAGE"; + case SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL: return "SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL"; + case SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK: return "SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK"; + case SPELL_AURA_CLONE_CASTER: return "SPELL_AURA_CLONE_CASTER"; + case SPELL_AURA_MOD_COMBAT_RESULT_CHANCE: return "SPELL_AURA_MOD_COMBAT_RESULT_CHANCE"; + case SPELL_AURA_CONVERT_RUNE: return "SPELL_AURA_CONVERT_RUNE"; + case SPELL_AURA_MOD_INCREASE_HEALTH_2: return "SPELL_AURA_MOD_INCREASE_HEALTH_2"; + case SPELL_AURA_MOD_ENEMY_DODGE: return "SPELL_AURA_MOD_ENEMY_DODGE"; + case SPELL_AURA_MOD_SPEED_SLOW_ALL: return "SPELL_AURA_MOD_SPEED_SLOW_ALL"; + case SPELL_AURA_MOD_BLOCK_CRIT_CHANCE: return "SPELL_AURA_MOD_BLOCK_CRIT_CHANCE"; + case SPELL_AURA_MOD_DISARM_OFFHAND: return "SPELL_AURA_MOD_DISARM_OFFHAND"; + case SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT: return "SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT"; + case SPELL_AURA_NO_REAGENT_USE: return "SPELL_AURA_NO_REAGENT_USE"; + case SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS: return "SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS"; + case SPELL_AURA_258: return "SPELL_AURA_258"; + case SPELL_AURA_MOD_HOT_PCT: return "SPELL_AURA_MOD_HOT_PCT"; + case SPELL_AURA_SCREEN_EFFECT: return "SPELL_AURA_SCREEN_EFFECT"; + case SPELL_AURA_PHASE: return "SPELL_AURA_PHASE"; + case SPELL_AURA_ABILITY_IGNORE_AURASTATE: return "SPELL_AURA_ABILITY_IGNORE_AURASTATE"; + case SPELL_AURA_ALLOW_ONLY_ABILITY: return "SPELL_AURA_ALLOW_ONLY_ABILITY"; + case SPELL_AURA_264: return "SPELL_AURA_264"; + case SPELL_AURA_265: return "SPELL_AURA_265"; + case SPELL_AURA_266: return "SPELL_AURA_266"; + case SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL: return "SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL"; + case SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT: return "SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT"; + case SPELL_AURA_MOD_IGNORE_TARGET_RESIST: return "SPELL_AURA_MOD_IGNORE_TARGET_RESIST"; + case SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST: return "SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST"; + case SPELL_AURA_MOD_DAMAGE_FROM_CASTER: return "SPELL_AURA_MOD_DAMAGE_FROM_CASTER"; + case SPELL_AURA_IGNORE_MELEE_RESET: return "SPELL_AURA_IGNORE_MELEE_RESET"; + case SPELL_AURA_X_RAY: return "SPELL_AURA_X_RAY"; + case SPELL_AURA_ABILITY_CONSUME_NO_AMMO: return "SPELL_AURA_ABILITY_CONSUME_NO_AMMO"; + case SPELL_AURA_MOD_IGNORE_SHAPESHIFT: return "SPELL_AURA_MOD_IGNORE_SHAPESHIFT"; + case SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC: return "SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC"; + case SPELL_AURA_MOD_MAX_AFFECTED_TARGETS: return "SPELL_AURA_MOD_MAX_AFFECTED_TARGETS"; + case SPELL_AURA_MOD_DISARM_RANGED: return "SPELL_AURA_MOD_DISARM_RANGED"; + case SPELL_AURA_INITIALIZE_IMAGES: return "SPELL_AURA_INITIALIZE_IMAGES"; + case SPELL_AURA_MOD_ARMOR_PENETRATION_PCT: return "SPELL_AURA_MOD_ARMOR_PENETRATION_PCT"; + case SPELL_AURA_MOD_HONOR_GAIN_PCT: return "SPELL_AURA_MOD_HONOR_GAIN_PCT"; + case SPELL_AURA_MOD_BASE_HEALTH_PCT: return "SPELL_AURA_MOD_BASE_HEALTH_PCT"; + case SPELL_AURA_MOD_HEALING_RECEIVED: return "SPELL_AURA_MOD_HEALING_RECEIVED"; + case SPELL_AURA_LINKED: return "SPELL_AURA_LINKED"; + case SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR: return "SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR"; + case SPELL_AURA_ABILITY_PERIODIC_CRIT: return "SPELL_AURA_ABILITY_PERIODIC_CRIT"; + case SPELL_AURA_DEFLECT_SPELLS: return "SPELL_AURA_DEFLECT_SPELLS"; + case SPELL_AURA_IGNORE_HIT_DIRECTION: return "SPELL_AURA_IGNORE_HIT_DIRECTION"; + case SPELL_AURA_PREVENT_DURABILITY_LOSS: return "SPELL_AURA_PREVENT_DURABILITY_LOSS"; + case SPELL_AURA_MOD_CRIT_PCT: return "SPELL_AURA_MOD_CRIT_PCT"; + case SPELL_AURA_MOD_XP_QUEST_PCT: return "SPELL_AURA_MOD_XP_QUEST_PCT"; + case SPELL_AURA_OPEN_STABLE: return "SPELL_AURA_OPEN_STABLE"; + case SPELL_AURA_OVERRIDE_SPELLS: return "SPELL_AURA_OVERRIDE_SPELLS"; + case SPELL_AURA_PREVENT_REGENERATE_POWER: return "SPELL_AURA_PREVENT_REGENERATE_POWER"; + case SPELL_AURA_295: return "SPELL_AURA_295"; + case SPELL_AURA_SET_VEHICLE_ID: return "SPELL_AURA_SET_VEHICLE_ID"; + case SPELL_AURA_BLOCK_SPELL_FAMILY: return "SPELL_AURA_BLOCK_SPELL_FAMILY"; + case SPELL_AURA_STRANGULATE: return "SPELL_AURA_STRANGULATE"; + case SPELL_AURA_299: return "SPELL_AURA_299"; + case SPELL_AURA_SHARE_DAMAGE_PCT: return "SPELL_AURA_SHARE_DAMAGE_PCT"; + case SPELL_AURA_SCHOOL_HEAL_ABSORB: return "SPELL_AURA_SCHOOL_HEAL_ABSORB"; + case SPELL_AURA_302: return "SPELL_AURA_302"; + case SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE: return "SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE"; + case SPELL_AURA_MOD_FAKE_INEBRIATE: return "SPELL_AURA_MOD_FAKE_INEBRIATE"; + case SPELL_AURA_MOD_MINIMUM_SPEED: return "SPELL_AURA_MOD_MINIMUM_SPEED"; + case SPELL_AURA_306: return "SPELL_AURA_306"; + case SPELL_AURA_HEAL_ABSORB_TEST: return "SPELL_AURA_HEAL_ABSORB_TEST"; + case SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER: return "SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER"; + case SPELL_AURA_309: return "SPELL_AURA_309"; + case SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE: return "SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE"; + case SPELL_AURA_311: return "SPELL_AURA_311"; + case SPELL_AURA_312: return "SPELL_AURA_312"; + case SPELL_AURA_313: return "SPELL_AURA_313"; + case SPELL_AURA_PREVENT_RESURRECTION: return "SPELL_AURA_PREVENT_RESURRECTION"; + case SPELL_AURA_UNDERWATER_WALKING: return "SPELL_AURA_UNDERWATER_WALKING"; + case SPELL_AURA_PERIODIC_HASTE: return "SPELL_AURA_PERIODIC_HASTE"; + default: return "UNKNOWN_AURA"; + } + } + + static char const* GetTargetName(uint32 target) + { + switch (target) + { + case TARGET_UNIT_CASTER: return "TARGET_UNIT_CASTER"; + case TARGET_UNIT_NEARBY_ENEMY: return "TARGET_UNIT_NEARBY_ENEMY"; + case TARGET_UNIT_NEARBY_ALLY: return "TARGET_UNIT_NEARBY_ALLY"; + case TARGET_UNIT_NEARBY_PARTY: return "TARGET_UNIT_NEARBY_PARTY"; + case TARGET_UNIT_PET: return "TARGET_UNIT_PET"; + case TARGET_UNIT_TARGET_ENEMY: return "TARGET_UNIT_TARGET_ENEMY"; + case TARGET_UNIT_SRC_AREA_ENTRY: return "TARGET_UNIT_SRC_AREA_ENTRY"; + case TARGET_UNIT_DEST_AREA_ENTRY: return "TARGET_UNIT_DEST_AREA_ENTRY"; + case TARGET_DEST_HOME: return "TARGET_DEST_HOME"; + case TARGET_UNIT_SRC_AREA_UNK_11: return "TARGET_UNIT_SRC_AREA_UNK_11"; + case TARGET_UNIT_SRC_AREA_ENEMY: return "TARGET_UNIT_SRC_AREA_ENEMY"; + case TARGET_UNIT_DEST_AREA_ENEMY: return "TARGET_UNIT_DEST_AREA_ENEMY"; + case TARGET_DEST_DB: return "TARGET_DEST_DB"; + case TARGET_DEST_CASTER: return "TARGET_DEST_CASTER"; + case TARGET_UNIT_CASTER_AREA_PARTY: return "TARGET_UNIT_CASTER_AREA_PARTY"; + case TARGET_UNIT_TARGET_ALLY: return "TARGET_UNIT_TARGET_ALLY"; + case TARGET_SRC_CASTER: return "TARGET_SRC_CASTER"; + case TARGET_GAMEOBJECT_TARGET: return "TARGET_GAMEOBJECT_TARGET"; + case TARGET_UNIT_CONE_ENEMY_24: return "TARGET_UNIT_CONE_ENEMY_24"; + case TARGET_UNIT_TARGET_ANY: return "TARGET_UNIT_TARGET_ANY"; + case TARGET_GAMEOBJECT_ITEM_TARGET: return "TARGET_GAMEOBJECT_ITEM_TARGET"; + case TARGET_UNIT_MASTER: return "TARGET_UNIT_MASTER"; + case TARGET_DEST_DYNOBJ_ENEMY: return "TARGET_DEST_DYNOBJ_ENEMY"; + case TARGET_DEST_DYNOBJ_ALLY: return "TARGET_DEST_DYNOBJ_ALLY"; + case TARGET_UNIT_SRC_AREA_ALLY: return "TARGET_UNIT_SRC_AREA_ALLY"; + case TARGET_UNIT_DEST_AREA_ALLY: return "TARGET_UNIT_DEST_AREA_ALLY"; + case TARGET_DEST_CASTER_SUMMON: return "TARGET_DEST_CASTER_SUMMON"; + case TARGET_UNIT_SRC_AREA_PARTY: return "TARGET_UNIT_SRC_AREA_PARTY"; + case TARGET_UNIT_DEST_AREA_PARTY: return "TARGET_UNIT_DEST_AREA_PARTY"; + case TARGET_UNIT_TARGET_PARTY: return "TARGET_UNIT_TARGET_PARTY"; + case TARGET_DEST_CASTER_36: return "TARGET_DEST_CASTER_36"; + case TARGET_UNIT_LASTTARGET_AREA_PARTY: return "TARGET_UNIT_LASTTARGET_AREA_PARTY"; + case TARGET_UNIT_NEARBY_ENTRY: return "TARGET_UNIT_NEARBY_ENTRY"; + case TARGET_DEST_CASTER_FISHING: return "TARGET_DEST_CASTER_FISHING"; + case TARGET_GAMEOBJECT_NEARBY_ENTRY: return "TARGET_GAMEOBJECT_NEARBY_ENTRY"; + case TARGET_DEST_CASTER_FRONT_RIGHT: return "TARGET_DEST_CASTER_FRONT_RIGHT"; + case TARGET_DEST_CASTER_BACK_RIGHT: return "TARGET_DEST_CASTER_BACK_RIGHT"; + case TARGET_DEST_CASTER_BACK_LEFT: return "TARGET_DEST_CASTER_BACK_LEFT"; + case TARGET_DEST_CASTER_FRONT_LEFT: return "TARGET_DEST_CASTER_FRONT_LEFT"; + case TARGET_UNIT_TARGET_CHAINHEAL_ALLY: return "TARGET_UNIT_TARGET_CHAINHEAL_ALLY"; + case TARGET_DEST_NEARBY_ENTRY: return "TARGET_DEST_NEARBY_ENTRY"; + case TARGET_DEST_CASTER_FRONT: return "TARGET_DEST_CASTER_FRONT"; + case TARGET_DEST_CASTER_BACK: return "TARGET_DEST_CASTER_BACK"; + case TARGET_DEST_CASTER_RIGHT: return "TARGET_DEST_CASTER_RIGHT"; + case TARGET_DEST_CASTER_LEFT: return "TARGET_DEST_CASTER_LEFT"; + case TARGET_GAMEOBJECT_SRC_AREA: return "TARGET_GAMEOBJECT_SRC_AREA"; + case TARGET_GAMEOBJECT_DEST_AREA: return "TARGET_GAMEOBJECT_DEST_AREA"; + case TARGET_DEST_TARGET_ENEMY: return "TARGET_DEST_TARGET_ENEMY"; + case TARGET_UNIT_CONE_ENEMY_54: return "TARGET_UNIT_CONE_ENEMY_54"; + case TARGET_DEST_CASTER_FRONT_LEAP: return "TARGET_DEST_CASTER_FRONT_LEAP"; + case TARGET_UNIT_CASTER_AREA_RAID: return "TARGET_UNIT_CASTER_AREA_RAID"; + case TARGET_UNIT_TARGET_RAID: return "TARGET_UNIT_TARGET_RAID"; + case TARGET_UNIT_NEARBY_RAID: return "TARGET_UNIT_NEARBY_RAID"; + case TARGET_UNIT_CONE_ALLY: return "TARGET_UNIT_CONE_ALLY"; + case TARGET_UNIT_CONE_ENTRY: return "TARGET_UNIT_CONE_ENTRY"; + case TARGET_UNIT_TARGET_AREA_RAID_CLASS: return "TARGET_UNIT_TARGET_AREA_RAID_CLASS"; + case TARGET_UNK_62: return "TARGET_UNK_62"; + case TARGET_DEST_TARGET_ANY: return "TARGET_DEST_TARGET_ANY"; + case TARGET_DEST_TARGET_FRONT: return "TARGET_DEST_TARGET_FRONT"; + case TARGET_DEST_TARGET_BACK: return "TARGET_DEST_TARGET_BACK"; + case TARGET_DEST_TARGET_RIGHT: return "TARGET_DEST_TARGET_RIGHT"; + case TARGET_DEST_TARGET_LEFT: return "TARGET_DEST_TARGET_LEFT"; + case TARGET_DEST_TARGET_FRONT_RIGHT: return "TARGET_DEST_TARGET_FRONT_RIGHT"; + case TARGET_DEST_TARGET_BACK_RIGHT: return "TARGET_DEST_TARGET_BACK_RIGHT"; + case TARGET_DEST_TARGET_BACK_LEFT: return "TARGET_DEST_TARGET_BACK_LEFT"; + case TARGET_DEST_TARGET_FRONT_LEFT: return "TARGET_DEST_TARGET_FRONT_LEFT"; + case TARGET_DEST_CASTER_RANDOM: return "TARGET_DEST_CASTER_RANDOM"; + case TARGET_DEST_CASTER_RADIUS: return "TARGET_DEST_CASTER_RADIUS"; + case TARGET_DEST_TARGET_RANDOM: return "TARGET_DEST_TARGET_RANDOM"; + case TARGET_DEST_TARGET_RADIUS: return "TARGET_DEST_TARGET_RADIUS"; + case TARGET_DEST_CHANNEL_TARGET: return "TARGET_DEST_CHANNEL_TARGET"; + case TARGET_UNIT_CHANNEL_TARGET: return "TARGET_UNIT_CHANNEL_TARGET"; + case TARGET_DEST_DEST_FRONT: return "TARGET_DEST_DEST_FRONT"; + case TARGET_DEST_DEST_BACK: return "TARGET_DEST_DEST_BACK"; + case TARGET_DEST_DEST_RIGHT: return "TARGET_DEST_DEST_RIGHT"; + case TARGET_DEST_DEST_LEFT: return "TARGET_DEST_DEST_LEFT"; + case TARGET_DEST_DEST_FRONT_RIGHT: return "TARGET_DEST_DEST_FRONT_RIGHT"; + case TARGET_DEST_DEST_BACK_RIGHT: return "TARGET_DEST_DEST_BACK_RIGHT"; + case TARGET_DEST_DEST_BACK_LEFT: return "TARGET_DEST_DEST_BACK_LEFT"; + case TARGET_DEST_DEST_FRONT_LEFT: return "TARGET_DEST_DEST_FRONT_LEFT"; + case TARGET_DEST_DEST_RANDOM: return "TARGET_DEST_DEST_RANDOM"; + case TARGET_DEST_DEST: return "TARGET_DEST_DEST"; + case TARGET_DEST_DYNOBJ_NONE: return "TARGET_DEST_DYNOBJ_NONE"; + case TARGET_DEST_TRAJ: return "TARGET_DEST_TRAJ"; + case TARGET_UNIT_TARGET_MINIPET: return "TARGET_UNIT_TARGET_MINIPET"; + case TARGET_DEST_DEST_RADIUS: return "TARGET_DEST_DEST_RADIUS"; + case TARGET_UNIT_SUMMONER: return "TARGET_UNIT_SUMMONER"; + case TARGET_CORPSE_SRC_AREA_ENEMY: return "TARGET_CORPSE_SRC_AREA_ENEMY"; + case TARGET_UNIT_VEHICLE: return "TARGET_UNIT_VEHICLE"; + case TARGET_UNIT_TARGET_PASSENGER: return "TARGET_UNIT_TARGET_PASSENGER"; + case TARGET_UNIT_PASSENGER_0: return "TARGET_UNIT_PASSENGER_0"; + case TARGET_UNIT_PASSENGER_1: return "TARGET_UNIT_PASSENGER_1"; + case TARGET_UNIT_PASSENGER_2: return "TARGET_UNIT_PASSENGER_2"; + case TARGET_UNIT_PASSENGER_3: return "TARGET_UNIT_PASSENGER_3"; + case TARGET_UNIT_PASSENGER_4: return "TARGET_UNIT_PASSENGER_4"; + case TARGET_UNIT_PASSENGER_5: return "TARGET_UNIT_PASSENGER_5"; + case TARGET_UNIT_PASSENGER_6: return "TARGET_UNIT_PASSENGER_6"; + case TARGET_UNIT_PASSENGER_7: return "TARGET_UNIT_PASSENGER_7"; + case TARGET_UNIT_CONE_ENEMY_104: return "TARGET_UNIT_CONE_ENEMY_104"; + case TARGET_UNIT_UNK_105: return "TARGET_UNIT_UNK_105"; + case TARGET_DEST_CHANNEL_CASTER: return "TARGET_DEST_CHANNEL_CASTER"; + case TARGET_UNK_DEST_AREA_UNK_107: return "TARGET_UNK_DEST_AREA_UNK_107"; + case TARGET_GAMEOBJECT_CONE: return "TARGET_GAMEOBJECT_CONE"; + case TARGET_DEST_UNK_110: return "TARGET_DEST_UNK_110"; + default: return "TARGET_NONE"; + } + } + + static char const* GetDispelName(uint32 dispel) + { + switch (dispel) + { + case DISPEL_NONE: return "DISPEL_NONE"; + case DISPEL_MAGIC: return "DISPEL_MAGIC"; + case DISPEL_CURSE: return "DISPEL_CURSE"; + case DISPEL_DISEASE: return "DISPEL_DISEASE"; + case DISPEL_POISON: return "DISPEL_POISON"; + case DISPEL_STEALTH: return "DISPEL_STEALTH"; + case DISPEL_INVISIBILITY: return "DISPEL_INVISIBILITY"; + case DISPEL_ALL: return "DISPEL_ALL"; + case DISPEL_SPE_NPC_ONLY: return "DISPEL_SPE_NPC_ONLY"; + case DISPEL_ENRAGE: return "DISPEL_ENRAGE"; + case DISPEL_ZG_TICKET: return "DISPEL_ZG_TICKET"; + case DESPEL_OLD_UNUSED: return "DESPEL_OLD_UNUSED"; + default: return "UNKNOWN_DISPEL"; + } + } + + static char const* GetPowerName(uint32 power) + { + switch (power) + { + case POWER_MANA: return "POWER_MANA"; + case POWER_RAGE: return "POWER_RAGE"; + case POWER_FOCUS: return "POWER_FOCUS"; + case POWER_ENERGY: return "POWER_ENERGY"; + case POWER_HAPPINESS: return "POWER_HAPPINESS"; + case POWER_RUNE: return "POWER_RUNE"; + case POWER_RUNIC_POWER: return "POWER_RUNIC_POWER"; + case POWER_HEALTH: return "POWER_HEALTH"; + default: return "UNKNOWN_POWER"; + } + } + + static char const* GetDmgClassName(uint32 dmgClass) + { + switch (dmgClass) + { + case SPELL_DAMAGE_CLASS_NONE: return "SPELL_DAMAGE_CLASS_NONE"; + case SPELL_DAMAGE_CLASS_MAGIC: return "SPELL_DAMAGE_CLASS_MAGIC"; + case SPELL_DAMAGE_CLASS_MELEE: return "SPELL_DAMAGE_CLASS_MELEE"; + case SPELL_DAMAGE_CLASS_RANGED: return "SPELL_DAMAGE_CLASS_RANGED"; + default: return "UNKNOWN_DMG_CLASS"; + } + } + + static char const* GetPreventionTypeName(uint32 type) + { + switch (type) + { + case SPELL_PREVENTION_TYPE_NONE: return "SPELL_PREVENTION_TYPE_NONE"; + case SPELL_PREVENTION_TYPE_SILENCE: return "SPELL_PREVENTION_TYPE_SILENCE"; + case SPELL_PREVENTION_TYPE_PACIFY: return "SPELL_PREVENTION_TYPE_PACIFY"; + default: return "UNKNOWN_PREVENTION_TYPE"; + } + } + + static char const* GetSpellFamilyName(uint32 family) + { + switch (family) + { + case SPELLFAMILY_GENERIC: return "SPELLFAMILY_GENERIC"; + case SPELLFAMILY_UNK1: return "SPELLFAMILY_UNK1"; + case SPELLFAMILY_MAGE: return "SPELLFAMILY_MAGE"; + case SPELLFAMILY_WARRIOR: return "SPELLFAMILY_WARRIOR"; + case SPELLFAMILY_WARLOCK: return "SPELLFAMILY_WARLOCK"; + case SPELLFAMILY_PRIEST: return "SPELLFAMILY_PRIEST"; + case SPELLFAMILY_DRUID: return "SPELLFAMILY_DRUID"; + case SPELLFAMILY_ROGUE: return "SPELLFAMILY_ROGUE"; + case SPELLFAMILY_HUNTER: return "SPELLFAMILY_HUNTER"; + case SPELLFAMILY_PALADIN: return "SPELLFAMILY_PALADIN"; + case SPELLFAMILY_SHAMAN: return "SPELLFAMILY_SHAMAN"; + case SPELLFAMILY_UNK2: return "SPELLFAMILY_UNK2"; + case SPELLFAMILY_POTION: return "SPELLFAMILY_POTION"; + case SPELLFAMILY_DEATHKNIGHT: return "SPELLFAMILY_DEATHKNIGHT"; + case SPELLFAMILY_PET: return "SPELLFAMILY_PET"; + default: return "UNKNOWN_FAMILY"; + } + } + + template + static void PrintSpellAttrFlags(ChatHandler* handler, char const* label, uint32 flags) + { + handler->PSendSysMessage("{}: 0x{:08X}", label, flags); + for (auto attr : EnumUtils::Iterate()) + if (flags & static_cast(attr)) + handler->PSendSysMessage(" - {}", EnumUtils::ToConstant(attr)); + } + + static void PrintBasicInfo(ChatHandler* handler, SpellInfo const* spell) + { + int locale = handler->GetSessionDbcLocale(); + + handler->PSendSysMessage("ID: {}", spell->Id); + handler->PSendSysMessage("Name: {}", spell->SpellName[locale]); + if (spell->Rank[locale] && spell->Rank[locale][0] != '\0') + handler->PSendSysMessage("Rank: {}", spell->Rank[locale]); + + handler->PSendSysMessage("Dispel: {} ({})", spell->Dispel, GetDispelName(spell->Dispel)); + handler->PSendSysMessage("Mechanic: {} ({})", spell->Mechanic, EnumUtils::ToConstant(static_cast(spell->Mechanic))); + } + + static void PrintAttributes(ChatHandler* handler, SpellInfo const* spell) + { + PrintSpellAttrFlags(handler, "Attributes", spell->Attributes); + PrintSpellAttrFlags(handler, "AttributesEx", spell->AttributesEx); + PrintSpellAttrFlags(handler, "AttributesEx2", spell->AttributesEx2); + PrintSpellAttrFlags(handler, "AttributesEx3", spell->AttributesEx3); + PrintSpellAttrFlags(handler, "AttributesEx4", spell->AttributesEx4); + PrintSpellAttrFlags(handler, "AttributesEx5", spell->AttributesEx5); + PrintSpellAttrFlags(handler, "AttributesEx6", spell->AttributesEx6); + PrintSpellAttrFlags(handler, "AttributesEx7", spell->AttributesEx7); + + handler->PSendSysMessage("AttributesCu: 0x{:08X}", spell->AttributesCu); + if (spell->AttributesCu) + { + if (spell->AttributesCu & SPELL_ATTR0_CU_ENCHANT_PROC) handler->PSendSysMessage(" - SPELL_ATTR0_CU_ENCHANT_PROC"); + if (spell->AttributesCu & SPELL_ATTR0_CU_CONE_BACK) handler->PSendSysMessage(" - SPELL_ATTR0_CU_CONE_BACK"); + if (spell->AttributesCu & SPELL_ATTR0_CU_CONE_LINE) handler->PSendSysMessage(" - SPELL_ATTR0_CU_CONE_LINE"); + if (spell->AttributesCu & SPELL_ATTR0_CU_SHARE_DAMAGE) handler->PSendSysMessage(" - SPELL_ATTR0_CU_SHARE_DAMAGE"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NO_INITIAL_THREAT) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NO_INITIAL_THREAT"); + if (spell->AttributesCu & SPELL_ATTR0_CU_AURA_CC) handler->PSendSysMessage(" - SPELL_ATTR0_CU_AURA_CC"); + if (spell->AttributesCu & SPELL_ATTR0_CU_DONT_BREAK_STEALTH) handler->PSendSysMessage(" - SPELL_ATTR0_CU_DONT_BREAK_STEALTH"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NO_PVP_FLAG) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NO_PVP_FLAG"); + if (spell->AttributesCu & SPELL_ATTR0_CU_DIRECT_DAMAGE) handler->PSendSysMessage(" - SPELL_ATTR0_CU_DIRECT_DAMAGE"); + if (spell->AttributesCu & SPELL_ATTR0_CU_CHARGE) handler->PSendSysMessage(" - SPELL_ATTR0_CU_CHARGE"); + if (spell->AttributesCu & SPELL_ATTR0_CU_PICKPOCKET) handler->PSendSysMessage(" - SPELL_ATTR0_CU_PICKPOCKET"); + if (spell->AttributesCu & SPELL_ATTR0_CU_IGNORE_EVADE) handler->PSendSysMessage(" - SPELL_ATTR0_CU_IGNORE_EVADE"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF0) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NEGATIVE_EFF0"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF1) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NEGATIVE_EFF1"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF2) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NEGATIVE_EFF2"); + if (spell->AttributesCu & SPELL_ATTR0_CU_IGNORE_ARMOR) handler->PSendSysMessage(" - SPELL_ATTR0_CU_IGNORE_ARMOR"); + if (spell->AttributesCu & SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER) handler->PSendSysMessage(" - SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER"); + if (spell->AttributesCu & SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET) handler->PSendSysMessage(" - SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET"); + if (spell->AttributesCu & SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET) handler->PSendSysMessage(" - SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NEEDS_AMMO_DATA) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NEEDS_AMMO_DATA"); + if (spell->AttributesCu & SPELL_ATTR0_CU_BINARY_SPELL) handler->PSendSysMessage(" - SPELL_ATTR0_CU_BINARY_SPELL"); + if (spell->AttributesCu & SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS) handler->PSendSysMessage(" - SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS"); + if (spell->AttributesCu & SPELL_ATTR0_CU_SINGLE_AURA_STACK) handler->PSendSysMessage(" - SPELL_ATTR0_CU_SINGLE_AURA_STACK"); + if (spell->AttributesCu & SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC) handler->PSendSysMessage(" - SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC"); + if (spell->AttributesCu & SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED) handler->PSendSysMessage(" - SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED"); + if (spell->AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF0) handler->PSendSysMessage(" - SPELL_ATTR0_CU_POSITIVE_EFF0"); + if (spell->AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF1) handler->PSendSysMessage(" - SPELL_ATTR0_CU_POSITIVE_EFF1"); + if (spell->AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF2) handler->PSendSysMessage(" - SPELL_ATTR0_CU_POSITIVE_EFF2"); + if (spell->AttributesCu & SPELL_ATTR0_CU_FORCE_SEND_CATEGORY_COOLDOWNS) handler->PSendSysMessage(" - SPELL_ATTR0_CU_FORCE_SEND_CATEGORY_COOLDOWNS"); + if (spell->AttributesCu & SPELL_ATTR0_CU_ONLY_ONE_AREA_AURA) handler->PSendSysMessage(" - SPELL_ATTR0_CU_ONLY_ONE_AREA_AURA"); + if (spell->AttributesCu & SPELL_ATTR0_CU_ENCOUNTER_REWARD) handler->PSendSysMessage(" - SPELL_ATTR0_CU_ENCOUNTER_REWARD"); + if (spell->AttributesCu & SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY) handler->PSendSysMessage(" - SPELL_ATTR0_CU_BYPASS_MECHANIC_IMMUNITY"); + } + + handler->PSendSysMessage("Stances: 0x{:08X}", spell->Stances); + handler->PSendSysMessage("StancesNot: 0x{:08X}", spell->StancesNot); + } + + static void PrintEffects(ChatHandler* handler, SpellInfo const* spell) + { + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + SpellEffectInfo const& eff = spell->Effects[i]; + + if (!eff.Effect) + continue; + + handler->PSendSysMessage("--- Effect {} ---", i); + handler->PSendSysMessage(" Effect: {} ({})", eff.Effect, GetSpellEffectName(eff.Effect)); + handler->PSendSysMessage(" Aura: {} ({})", static_cast(eff.ApplyAuraName), GetAuraTypeName(static_cast(eff.ApplyAuraName))); + handler->PSendSysMessage(" BasePoints: {}", eff.BasePoints); + handler->PSendSysMessage(" DieSides: {}", eff.DieSides); + handler->PSendSysMessage(" RealPointsPerLevel: {:.4f}", eff.RealPointsPerLevel); + handler->PSendSysMessage(" PointsPerComboPoint: {:.2f}", eff.PointsPerComboPoint); + handler->PSendSysMessage(" ValueMultiplier: {:.4f}", eff.ValueMultiplier); + handler->PSendSysMessage(" DamageMultiplier: {:.4f}", eff.DamageMultiplier); + handler->PSendSysMessage(" BonusMultiplier: {:.4f}", eff.BonusMultiplier); + handler->PSendSysMessage(" MiscValue: {}", eff.MiscValue); + handler->PSendSysMessage(" MiscValueB: {}", eff.MiscValueB); + handler->PSendSysMessage(" Mechanic: {} ({})", static_cast(eff.Mechanic), EnumUtils::ToConstant(eff.Mechanic)); + handler->PSendSysMessage(" TriggerSpell: {}", eff.TriggerSpell); + handler->PSendSysMessage(" Amplitude: {}", eff.Amplitude); + handler->PSendSysMessage(" ItemType: {}", eff.ItemType); + handler->PSendSysMessage(" SpellClassMask: 0x{:08X} 0x{:08X} 0x{:08X}", eff.SpellClassMask[0], eff.SpellClassMask[1], eff.SpellClassMask[2]); + } + } + + static void PrintTargets(ChatHandler* handler, SpellInfo const* spell) + { + handler->PSendSysMessage("Targets: 0x{:08X}", spell->Targets); + handler->PSendSysMessage("TargetCreatureType: 0x{:08X}", spell->TargetCreatureType); + handler->PSendSysMessage("MaxAffectedTargets: {}", spell->MaxAffectedTargets); + handler->PSendSysMessage("MaxTargetLevel: {}", spell->MaxTargetLevel); + + for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { + SpellEffectInfo const& eff = spell->Effects[i]; + + if (!eff.Effect) + continue; + + Targets targetA = eff.TargetA.GetTarget(); + Targets targetB = eff.TargetB.GetTarget(); + + handler->PSendSysMessage("--- Effect {} ---", i); + handler->PSendSysMessage(" TargetA: {} ({})", static_cast(targetA), GetTargetName(static_cast(targetA))); + handler->PSendSysMessage(" TargetB: {} ({})", static_cast(targetB), GetTargetName(static_cast(targetB))); + + if (eff.RadiusEntry) + handler->PSendSysMessage(" Radius: {:.1f}", eff.RadiusEntry->RadiusMax); + handler->PSendSysMessage(" ChainTarget: {}", eff.ChainTarget); + } + } + + static void PrintGeneralInfo(ChatHandler* handler, SpellInfo const* spell) + { + if (spell->CastTimeEntry) + handler->PSendSysMessage("CastTime: {} ms", spell->CastTimeEntry->CastTime); + + if (spell->DurationEntry) + handler->PSendSysMessage("Duration: {} / {} / {} ms", spell->DurationEntry->Duration[0], spell->DurationEntry->Duration[1], spell->DurationEntry->Duration[2]); + + if (spell->RangeEntry) + handler->PSendSysMessage("Range: {:.1f}-{:.1f} (hostile), {:.1f}-{:.1f} (friendly)", + spell->RangeEntry->RangeMin[0], spell->RangeEntry->RangeMax[0], + spell->RangeEntry->RangeMin[1], spell->RangeEntry->RangeMax[1]); + + handler->PSendSysMessage("RecoveryTime: {} ms", spell->RecoveryTime); + handler->PSendSysMessage("CategoryRecoveryTime: {} ms", spell->CategoryRecoveryTime); + handler->PSendSysMessage("StartRecoveryTime: {} ms (Category: {})", spell->StartRecoveryTime, spell->StartRecoveryCategory); + + handler->PSendSysMessage("InterruptFlags: 0x{:08X}", spell->InterruptFlags); + handler->PSendSysMessage("AuraInterruptFlags: 0x{:08X}", spell->AuraInterruptFlags); + handler->PSendSysMessage("ChannelInterruptFlags: 0x{:08X}", spell->ChannelInterruptFlags); + + handler->PSendSysMessage("ProcFlags: 0x{:08X}", spell->ProcFlags); + handler->PSendSysMessage("ProcChance: {}%", spell->ProcChance); + handler->PSendSysMessage("ProcCharges: {}", spell->ProcCharges); + + handler->PSendSysMessage("SpellLevel: {}, BaseLevel: {}, MaxLevel: {}", spell->SpellLevel, spell->BaseLevel, spell->MaxLevel); + + handler->PSendSysMessage("PowerType: {} ({})", spell->PowerType, GetPowerName(spell->PowerType)); + handler->PSendSysMessage("ManaCost: {}", spell->ManaCost); + handler->PSendSysMessage("ManaCostPercentage: {}", spell->ManaCostPercentage); + handler->PSendSysMessage("ManaPerSecond: {}", spell->ManaPerSecond); + + handler->PSendSysMessage("Speed: {:.2f}", spell->Speed); + + handler->PSendSysMessage("StackAmount: {}", spell->StackAmount); + + if (spell->EquippedItemClass >= 0) + handler->PSendSysMessage("EquippedItemClass: {}, SubClassMask: 0x{:08X}, InvTypeMask: 0x{:08X}", + spell->EquippedItemClass, static_cast(spell->EquippedItemSubClassMask), static_cast(spell->EquippedItemInventoryTypeMask)); + + handler->PSendSysMessage("SpellFamilyName: {} ({})", spell->SpellFamilyName, GetSpellFamilyName(spell->SpellFamilyName)); + handler->PSendSysMessage("SpellFamilyFlags: 0x{:08X} 0x{:08X} 0x{:08X}", spell->SpellFamilyFlags[0], spell->SpellFamilyFlags[1], spell->SpellFamilyFlags[2]); + + handler->PSendSysMessage("DmgClass: {} ({})", spell->DmgClass, GetDmgClassName(spell->DmgClass)); + handler->PSendSysMessage("PreventionType: {} ({})", spell->PreventionType, GetPreventionTypeName(spell->PreventionType)); + handler->PSendSysMessage("SchoolMask: 0x{:02X}", spell->SchoolMask); + } + + static bool HandleSpellInfoAttributesCommand(ChatHandler* handler, SpellInfo const* spell) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + handler->PSendSysMessage("===== SPELL ATTRIBUTES ====="); + PrintBasicInfo(handler, spell); + PrintAttributes(handler, spell); + handler->PSendSysMessage("============================"); + return true; + } + + static bool HandleSpellInfoEffectsCommand(ChatHandler* handler, SpellInfo const* spell) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + handler->PSendSysMessage("====== SPELL EFFECTS ======"); + PrintBasicInfo(handler, spell); + PrintEffects(handler, spell); + handler->PSendSysMessage("==========================="); + return true; + } + + static bool HandleSpellInfoTargetsCommand(ChatHandler* handler, SpellInfo const* spell) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + handler->PSendSysMessage("====== SPELL TARGETS ======"); + PrintBasicInfo(handler, spell); + PrintTargets(handler, spell); + handler->PSendSysMessage("==========================="); + return true; + } + + static bool HandleSpellInfoAllCommand(ChatHandler* handler, SpellInfo const* spell) + { + if (!spell) + { + handler->SendErrorMessage(LANG_COMMAND_NOSPELLFOUND); + return false; + } + + handler->PSendSysMessage("========== SPELL INFO =========="); + PrintBasicInfo(handler, spell); + PrintAttributes(handler, spell); + PrintGeneralInfo(handler, spell); + PrintEffects(handler, spell); + PrintTargets(handler, spell); + handler->PSendSysMessage("================================"); + return true; + } +}; + +void AddSC_spellinfo_commandscript() +{ + new spellinfo_commandscript(); +}