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();
+}