aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-12-05 00:33:21 +0200
committerIntel <chemicstry@gmail.com>2014-12-05 00:33:21 +0200
commit0d21ed3f8682b697f088fa44bd25b53a623f1c3a (patch)
treecb2cec2d7bda2fa7ef821d188aed5b3e2f96681f /src
parent60a6a8ba441709a11d548cdc101f86f96ae70915 (diff)
Core/Packets: Implemented SMSG_CAST_FAILED and updated SpellCastResult enum
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h417
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h14
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp72
5 files changed, 282 insertions, 234 deletions
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index ab1c85bbefe..bd91d9321ea 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -1253,7 +1253,7 @@ enum SpellEffectName
TOTAL_SPELL_EFFECTS = 245,
};
-enum SpellCastResult // (6.0)
+enum SpellCastResult // 19116
{
SPELL_FAILED_SUCCESS = 0,
SPELL_FAILED_AFFECTING_COMBAT = 1,
@@ -1299,203 +1299,224 @@ enum SpellCastResult // (6.0)
SPELL_FAILED_GARRISON_OWNED = 41,
SPELL_FAILED_GARRISON_MAX_LEVEL = 42,
SPELL_FAILED_GARRISON_NOT_UPGRADEABLE = 43,
- SPELL_FAILED_HIGHLEVEL = 44,
- SPELL_FAILED_HUNGER_SATIATED = 45,
- SPELL_FAILED_IMMUNE = 46,
- SPELL_FAILED_INCORRECT_AREA = 47,
- SPELL_FAILED_INTERRUPTED = 48,
- SPELL_FAILED_INTERRUPTED_COMBAT = 49,
- SPELL_FAILED_ITEM_ALREADY_ENCHANTED = 50,
- SPELL_FAILED_ITEM_GONE = 51,
- SPELL_FAILED_ITEM_NOT_FOUND = 52,
- SPELL_FAILED_ITEM_NOT_READY = 53,
- SPELL_FAILED_LEVEL_REQUIREMENT = 54,
- SPELL_FAILED_LINE_OF_SIGHT = 55,
- SPELL_FAILED_LOWLEVEL = 56,
- SPELL_FAILED_LOW_CASTLEVEL = 57,
- SPELL_FAILED_MAINHAND_EMPTY = 58,
- SPELL_FAILED_MOVING = 59,
- SPELL_FAILED_NEED_AMMO = 60,
- SPELL_FAILED_NEED_AMMO_POUCH = 61,
- SPELL_FAILED_NEED_EXOTIC_AMMO = 62,
- SPELL_FAILED_NEED_MORE_ITEMS = 63,
- SPELL_FAILED_NOPATH = 64,
- SPELL_FAILED_NOT_BEHIND = 65,
- SPELL_FAILED_NOT_FISHABLE = 66,
- SPELL_FAILED_NOT_FLYING = 67,
- SPELL_FAILED_NOT_HERE = 68,
- SPELL_FAILED_NOT_INFRONT = 69,
- SPELL_FAILED_NOT_IN_CONTROL = 70,
- SPELL_FAILED_NOT_KNOWN = 71,
- SPELL_FAILED_NOT_MOUNTED = 72,
- SPELL_FAILED_NOT_ON_TAXI = 73,
- SPELL_FAILED_NOT_ON_TRANSPORT = 74,
- SPELL_FAILED_NOT_READY = 75,
- SPELL_FAILED_NOT_SHAPESHIFT = 76,
- SPELL_FAILED_NOT_STANDING = 77,
- SPELL_FAILED_NOT_TRADEABLE = 78,
- SPELL_FAILED_NOT_TRADING = 79,
- SPELL_FAILED_NOT_UNSHEATHED = 80,
- SPELL_FAILED_NOT_WHILE_GHOST = 81,
- SPELL_FAILED_NOT_WHILE_LOOTING = 82,
- SPELL_FAILED_NO_AMMO = 83,
- SPELL_FAILED_NO_CHARGES_REMAIN = 84,
- SPELL_FAILED_NO_CHAMPION = 85,
- SPELL_FAILED_NO_COMBO_POINTS = 86,
- SPELL_FAILED_NO_DUELING = 87,
- SPELL_FAILED_NO_ENDURANCE = 88,
- SPELL_FAILED_NO_FISH = 89,
- SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED = 90,
- SPELL_FAILED_NO_MOUNTS_ALLOWED = 91,
- SPELL_FAILED_NO_PET = 92,
- SPELL_FAILED_NO_POWER = 93,
- SPELL_FAILED_NOTHING_TO_DISPEL = 94,
- SPELL_FAILED_NOTHING_TO_STEAL = 95,
- SPELL_FAILED_ONLY_ABOVEWATER = 96,
- SPELL_FAILED_ONLY_DAYTIME = 97,
- SPELL_FAILED_ONLY_INDOORS = 98,
- SPELL_FAILED_ONLY_MOUNTED = 99,
- SPELL_FAILED_ONLY_NIGHTTIME = 100,
- SPELL_FAILED_ONLY_OUTDOORS = 101,
- SPELL_FAILED_ONLY_SHAPESHIFT = 102,
- SPELL_FAILED_ONLY_STEALTHED = 103,
- SPELL_FAILED_ONLY_UNDERWATER = 104,
- SPELL_FAILED_OUT_OF_RANGE = 105,
- SPELL_FAILED_PACIFIED = 106,
- SPELL_FAILED_POSSESSED = 107,
- SPELL_FAILED_REAGENTS = 108,
- SPELL_FAILED_REQUIRES_AREA = 109,
- SPELL_FAILED_REQUIRES_SPELL_FOCUS = 110,
- SPELL_FAILED_ROOTED = 111,
- SPELL_FAILED_SILENCED = 112,
- SPELL_FAILED_SPELL_IN_PROGRESS = 113,
- SPELL_FAILED_SPELL_LEARNED = 114,
- SPELL_FAILED_SPELL_UNAVAILABLE = 115,
- SPELL_FAILED_STUNNED = 116,
- SPELL_FAILED_TARGETS_DEAD = 117,
- SPELL_FAILED_TARGET_AFFECTING_COMBAT = 118,
- SPELL_FAILED_TARGET_AURASTATE = 119,
- SPELL_FAILED_TARGET_DUELING = 120,
- SPELL_FAILED_TARGET_ENEMY = 121,
- SPELL_FAILED_TARGET_ENRAGED = 122,
- SPELL_FAILED_TARGET_FRIENDLY = 123,
- SPELL_FAILED_TARGET_IN_COMBAT = 124,
- SPELL_FAILED_TARGET_IN_PET_BATTLE = 125,
- SPELL_FAILED_TARGET_IS_PLAYER = 126,
- SPELL_FAILED_TARGET_IS_PLAYER_CONTROLLED = 127,
- SPELL_FAILED_TARGET_NOT_DEAD = 128,
- SPELL_FAILED_TARGET_NOT_IN_PARTY = 129,
- SPELL_FAILED_TARGET_NOT_LOOTED = 130,
- SPELL_FAILED_TARGET_NOT_PLAYER = 131,
- SPELL_FAILED_TARGET_NO_POCKETS = 132,
- SPELL_FAILED_TARGET_NO_WEAPONS = 133,
- SPELL_FAILED_TARGET_NO_RANGED_WEAPONS = 134,
- SPELL_FAILED_TARGET_UNSKINNABLE = 135,
- SPELL_FAILED_THIRST_SATIATED = 136,
- SPELL_FAILED_TOO_CLOSE = 137,
- SPELL_FAILED_TOO_MANY_OF_ITEM = 138,
- SPELL_FAILED_TOTEM_CATEGORY = 139,
- SPELL_FAILED_TOTEMS = 140,
- SPELL_FAILED_TRY_AGAIN = 141,
- SPELL_FAILED_UNIT_NOT_BEHIND = 142,
- SPELL_FAILED_UNIT_NOT_INFRONT = 143,
- SPELL_FAILED_VISION_OBSCURED = 144,
- SPELL_FAILED_WRONG_PET_FOOD = 145,
- SPELL_FAILED_NOT_WHILE_FATIGUED = 146,
- SPELL_FAILED_TARGET_NOT_IN_INSTANCE = 147,
- SPELL_FAILED_NOT_WHILE_TRADING = 148,
- SPELL_FAILED_TARGET_NOT_IN_RAID = 149,
- SPELL_FAILED_TARGET_FREEFORALL = 150,
- SPELL_FAILED_NO_EDIBLE_CORPSES = 151,
- SPELL_FAILED_ONLY_BATTLEGROUNDS = 152,
- SPELL_FAILED_TARGET_NOT_GHOST = 153,
- SPELL_FAILED_TRANSFORM_UNUSABLE = 154,
- SPELL_FAILED_WRONG_WEATHER = 155,
- SPELL_FAILED_DAMAGE_IMMUNE = 156,
- SPELL_FAILED_PREVENTED_BY_MECHANIC = 157,
- SPELL_FAILED_PLAY_TIME = 158,
- SPELL_FAILED_REPUTATION = 159,
- SPELL_FAILED_MIN_SKILL = 160,
- SPELL_FAILED_NOT_IN_RATED_BATTLEGROUND = 161,
- SPELL_FAILED_NOT_ON_SHAPESHIFT = 162,
- SPELL_FAILED_NOT_ON_STEALTHED = 163,
- SPELL_FAILED_NOT_ON_DAMAGE_IMMUNE = 164,
- SPELL_FAILED_NOT_ON_MOUNTED = 165,
- SPELL_FAILED_TOO_SHALLOW = 166,
- SPELL_FAILED_TARGET_NOT_IN_SANCTUARY = 167,
- SPELL_FAILED_TARGET_IS_TRIVIAL = 168,
- SPELL_FAILED_BM_OR_INVISGOD = 169,
- SPELL_FAILED_GROUND_MOUNT_NOT_ALLOWED = 170,
- SPELL_FAILED_FLOATING_MOUNT_NOT_ALLOWED = 171,
- SPELL_FAILED_UNDERWATER_MOUNT_NOT_ALLOWED = 172,
- SPELL_FAILED_FLYING_MOUNT_NOT_ALLOWED = 173,
- SPELL_FAILED_APPRENTICE_RIDING_REQUIREMENT = 174,
- SPELL_FAILED_JOURNEYMAN_RIDING_REQUIREMENT = 175,
- SPELL_FAILED_EXPERT_RIDING_REQUIREMENT = 176,
- SPELL_FAILED_ARTISAN_RIDING_REQUIREMENT = 177,
- SPELL_FAILED_MASTER_RIDING_REQUIREMENT = 178,
- SPELL_FAILED_COLD_RIDING_REQUIREMENT = 179,
- SPELL_FAILED_FLIGHT_MASTER_RIDING_REQUIREMENT = 180,
- SPELL_FAILED_CS_RIDING_REQUIREMENT = 181,
- SPELL_FAILED_PANDA_RIDING_REQUIREMENT = 182,
- SPELL_FAILED_MOUNT_NO_FLOAT_HERE = 183,
- SPELL_FAILED_MOUNT_NO_UNDERWATER_HERE = 184,
- SPELL_FAILED_MOUNT_ABOVE_WATER_HERE = 185,
- SPELL_FAILED_MOUNT_COLLECTED_ON_OTHER_CHAR = 186,
- SPELL_FAILED_NOT_IDLE = 187,
- SPELL_FAILED_NOT_INACTIVE = 188,
- SPELL_FAILED_PARTIAL_PLAYTIME = 189,
- SPELL_FAILED_NO_PLAYTIME = 190,
- SPELL_FAILED_NOT_IN_BATTLEGROUND = 191,
- SPELL_FAILED_NOT_IN_RAID_INSTANCE = 192,
- SPELL_FAILED_ONLY_IN_ARENA = 193,
- SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE = 194,
- SPELL_FAILED_ON_USE_ENCHANT = 195,
- SPELL_FAILED_NOT_ON_GROUND = 196,
- SPELL_FAILED_CUSTOM_ERROR = 197,
- SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW = 198,
- SPELL_FAILED_TOO_MANY_SOCKETS = 199,
- SPELL_FAILED_INVALID_GLYPH = 200,
- SPELL_FAILED_UNIQUE_GLYPH = 201,
- SPELL_FAILED_GLYPH_SOCKET_LOCKED = 202,
- SPELL_FAILED_GLYPH_EXCLUSIVE_CATEGORY = 203,
- SPELL_FAILED_GLYPH_INVALID_SPEC = 204,
- SPELL_FAILED_GLYPH_NO_SPEC = 205,
- SPELL_FAILED_NO_VALID_TARGETS = 206,
- SPELL_FAILED_ITEM_AT_MAX_CHARGES = 207,
- SPELL_FAILED_NOT_IN_BARBERSHOP = 208,
- SPELL_FAILED_FISHING_TOO_LOW = 209,
- SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW = 210,
- SPELL_FAILED_SUMMON_PENDING = 211,
- SPELL_FAILED_MAX_SOCKETS = 212,
- SPELL_FAILED_PET_CAN_RENAME = 213,
- SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED = 214,
- SPELL_FAILED_TARGET_HAS_RESURRECT_PENDING = 215,
- SPELL_FAILED_NO_ACTIONS = 216,
- SPELL_FAILED_CURRENCY_WEIGHT_MISMATCH = 217,
- SPELL_FAILED_WEIGHT_NOT_ENOUGH = 218,
- SPELL_FAILED_WEIGHT_TOO_MUCH = 219,
- SPELL_FAILED_NO_VACANT_SEAT = 220,
- SPELL_FAILED_NO_LIQUID = 221,
- SPELL_FAILED_ONLY_NOT_SWIMMING = 222,
- SPELL_FAILED_BY_NOT_MOVING = 223,
- SPELL_FAILED_IN_COMBAT_RES_LIMIT_REACHED = 224,
- SPELL_FAILED_NOT_IN_ARENA = 225,
- SPELL_FAILED_TARGET_NOT_GROUNDED = 226,
- SPELL_FAILED_EXCEEDED_WEEKLY_USAGE = 227,
- SPELL_FAILED_NOT_IN_LFG_DUNGEON = 228,
- SPELL_FAILED_BAD_TARGET_FILTER = 229,
- SPELL_FAILED_NOT_ENOUGH_TARGETS = 230,
- SPELL_FAILED_NO_SPEC = 231,
- SPELL_FAILED_CANT_ADD_BATTLE_PET = 232,
- SPELL_FAILED_CANT_UPGRADE_BATTLE_PET = 233,
- SPELL_FAILED_WRONG_BATTLE_PET_TYPE = 234,
- SPELL_FAILED_NO_DUNGEON_ENCOUNTER = 235,
- SPELL_FAILED_NO_TELEPORT_FROM_DUNGEON = 236,
- SPELL_FAILED_MAX_LEVEL_TOO_LOW = 237,
- SPELL_FAILED_CANT_REPLACE_ITEM_BONUS = 238,
- SPELL_FAILED_UNKNOWN = 254, // custom value, default case
- SPELL_CAST_OK = 255 // custom value, must not be sent to client
+ SPELL_FAILED_GARRISON_FOLLOWER_ON_MISSION = 44,
+ SPELL_FAILED_GARRISON_FOLLOWER_IN_BUILDING = 45,
+ SPELL_FAILED_GARRISON_FOLLOWER_MAX_LEVEL = 46,
+ SPELL_FAILED_GARRISON_FOLLOWER_MAX_ITEM_LEVEL = 47,
+ SPELL_FAILED_GARRISON_FOLLOWER_MAX_QUALITY = 48,
+ SPELL_FAILED_GARRISON_FOLLOWER_NOT_MAX_LEVEL = 49,
+ SPELL_FAILED_GARRISON_FOLLOWER_HAS_ABILITY = 50,
+ SPELL_FAILED_GARRISON_FOLLOWER_NO_OVERRIDEABLE_ABILITY = 51,
+ SPELL_FAILED_HIGHLEVEL = 52,
+ SPELL_FAILED_HUNGER_SATIATED = 53,
+ SPELL_FAILED_IMMUNE = 54,
+ SPELL_FAILED_INCORRECT_AREA = 55,
+ SPELL_FAILED_INTERRUPTED = 56,
+ SPELL_FAILED_INTERRUPTED_COMBAT = 57,
+ SPELL_FAILED_ITEM_ALREADY_ENCHANTED = 58,
+ SPELL_FAILED_ITEM_GONE = 59,
+ SPELL_FAILED_ITEM_NOT_FOUND = 60,
+ SPELL_FAILED_ITEM_NOT_READY = 61,
+ SPELL_FAILED_LEVEL_REQUIREMENT = 62,
+ SPELL_FAILED_LINE_OF_SIGHT = 63,
+ SPELL_FAILED_LOWLEVEL = 64,
+ SPELL_FAILED_LOW_CASTLEVEL = 65,
+ SPELL_FAILED_MAINHAND_EMPTY = 66,
+ SPELL_FAILED_MOVING = 67,
+ SPELL_FAILED_NEED_AMMO = 68,
+ SPELL_FAILED_NEED_AMMO_POUCH = 69,
+ SPELL_FAILED_NEED_EXOTIC_AMMO = 70,
+ SPELL_FAILED_NEED_MORE_ITEMS = 71,
+ SPELL_FAILED_NOPATH = 72,
+ SPELL_FAILED_NOT_BEHIND = 73,
+ SPELL_FAILED_NOT_FISHABLE = 74,
+ SPELL_FAILED_NOT_FLYING = 75,
+ SPELL_FAILED_NOT_HERE = 76,
+ SPELL_FAILED_NOT_INFRONT = 77,
+ SPELL_FAILED_NOT_IN_CONTROL = 78,
+ SPELL_FAILED_NOT_KNOWN = 79,
+ SPELL_FAILED_NOT_MOUNTED = 80,
+ SPELL_FAILED_NOT_ON_TAXI = 81,
+ SPELL_FAILED_NOT_ON_TRANSPORT = 82,
+ SPELL_FAILED_NOT_READY = 83,
+ SPELL_FAILED_NOT_SHAPESHIFT = 84,
+ SPELL_FAILED_NOT_STANDING = 85,
+ SPELL_FAILED_NOT_TRADEABLE = 86,
+ SPELL_FAILED_NOT_TRADING = 87,
+ SPELL_FAILED_NOT_UNSHEATHED = 88,
+ SPELL_FAILED_NOT_WHILE_GHOST = 89,
+ SPELL_FAILED_NOT_WHILE_LOOTING = 90,
+ SPELL_FAILED_NO_AMMO = 91,
+ SPELL_FAILED_NO_CHARGES_REMAIN = 92,
+ SPELL_FAILED_NO_CHAMPION = 93,
+ SPELL_FAILED_NO_COMBO_POINTS = 94,
+ SPELL_FAILED_NO_DUELING = 95,
+ SPELL_FAILED_NO_ENDURANCE = 96,
+ SPELL_FAILED_NO_FISH = 97,
+ SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED = 98,
+ SPELL_FAILED_NO_MOUNTS_ALLOWED = 99,
+ SPELL_FAILED_NO_PET = 100,
+ SPELL_FAILED_NO_POWER = 101,
+ SPELL_FAILED_NOTHING_TO_DISPEL = 102,
+ SPELL_FAILED_NOTHING_TO_STEAL = 103,
+ SPELL_FAILED_ONLY_ABOVEWATER = 104,
+ SPELL_FAILED_ONLY_DAYTIME = 105,
+ SPELL_FAILED_ONLY_INDOORS = 106,
+ SPELL_FAILED_ONLY_MOUNTED = 107,
+ SPELL_FAILED_ONLY_NIGHTTIME = 108,
+ SPELL_FAILED_ONLY_OUTDOORS = 109,
+ SPELL_FAILED_ONLY_SHAPESHIFT = 110,
+ SPELL_FAILED_ONLY_STEALTHED = 111,
+ SPELL_FAILED_ONLY_UNDERWATER = 112,
+ SPELL_FAILED_OUT_OF_RANGE = 113,
+ SPELL_FAILED_PACIFIED = 114,
+ SPELL_FAILED_POSSESSED = 115,
+ SPELL_FAILED_REAGENTS = 116,
+ SPELL_FAILED_REQUIRES_AREA = 117,
+ SPELL_FAILED_REQUIRES_SPELL_FOCUS = 118,
+ SPELL_FAILED_ROOTED = 119,
+ SPELL_FAILED_SILENCED = 120,
+ SPELL_FAILED_SPELL_IN_PROGRESS = 121,
+ SPELL_FAILED_SPELL_LEARNED = 122,
+ SPELL_FAILED_SPELL_UNAVAILABLE = 123,
+ SPELL_FAILED_STUNNED = 124,
+ SPELL_FAILED_TARGETS_DEAD = 125,
+ SPELL_FAILED_TARGET_AFFECTING_COMBAT = 126,
+ SPELL_FAILED_TARGET_AURASTATE = 127,
+ SPELL_FAILED_TARGET_DUELING = 128,
+ SPELL_FAILED_TARGET_ENEMY = 129,
+ SPELL_FAILED_TARGET_ENRAGED = 130,
+ SPELL_FAILED_TARGET_FRIENDLY = 131,
+ SPELL_FAILED_TARGET_IN_COMBAT = 132,
+ SPELL_FAILED_TARGET_IN_PET_BATTLE = 133,
+ SPELL_FAILED_TARGET_IS_PLAYER = 134,
+ SPELL_FAILED_TARGET_IS_PLAYER_CONTROLLED = 135,
+ SPELL_FAILED_TARGET_NOT_DEAD = 136,
+ SPELL_FAILED_TARGET_NOT_IN_PARTY = 137,
+ SPELL_FAILED_TARGET_NOT_LOOTED = 138,
+ SPELL_FAILED_TARGET_NOT_PLAYER = 139,
+ SPELL_FAILED_TARGET_NO_POCKETS = 140,
+ SPELL_FAILED_TARGET_NO_WEAPONS = 141,
+ SPELL_FAILED_TARGET_NO_RANGED_WEAPONS = 142,
+ SPELL_FAILED_TARGET_UNSKINNABLE = 143,
+ SPELL_FAILED_THIRST_SATIATED = 144,
+ SPELL_FAILED_TOO_CLOSE = 145,
+ SPELL_FAILED_TOO_MANY_OF_ITEM = 146,
+ SPELL_FAILED_TOTEM_CATEGORY = 147,
+ SPELL_FAILED_TOTEMS = 148,
+ SPELL_FAILED_TRY_AGAIN = 149,
+ SPELL_FAILED_UNIT_NOT_BEHIND = 150,
+ SPELL_FAILED_UNIT_NOT_INFRONT = 151,
+ SPELL_FAILED_VISION_OBSCURED = 152,
+ SPELL_FAILED_WRONG_PET_FOOD = 153,
+ SPELL_FAILED_NOT_WHILE_FATIGUED = 154,
+ SPELL_FAILED_TARGET_NOT_IN_INSTANCE = 155,
+ SPELL_FAILED_NOT_WHILE_TRADING = 156,
+ SPELL_FAILED_TARGET_NOT_IN_RAID = 157,
+ SPELL_FAILED_TARGET_FREEFORALL = 158,
+ SPELL_FAILED_NO_EDIBLE_CORPSES = 159,
+ SPELL_FAILED_ONLY_BATTLEGROUNDS = 160,
+ SPELL_FAILED_TARGET_NOT_GHOST = 161,
+ SPELL_FAILED_TRANSFORM_UNUSABLE = 162,
+ SPELL_FAILED_WRONG_WEATHER = 163,
+ SPELL_FAILED_DAMAGE_IMMUNE = 164,
+ SPELL_FAILED_PREVENTED_BY_MECHANIC = 165,
+ SPELL_FAILED_PLAY_TIME = 166,
+ SPELL_FAILED_REPUTATION = 167,
+ SPELL_FAILED_MIN_SKILL = 168,
+ SPELL_FAILED_NOT_IN_RATED_BATTLEGROUND = 169,
+ SPELL_FAILED_NOT_ON_SHAPESHIFT = 170,
+ SPELL_FAILED_NOT_ON_STEALTHED = 171,
+ SPELL_FAILED_NOT_ON_DAMAGE_IMMUNE = 172,
+ SPELL_FAILED_NOT_ON_MOUNTED = 173,
+ SPELL_FAILED_TOO_SHALLOW = 174,
+ SPELL_FAILED_TARGET_NOT_IN_SANCTUARY = 175,
+ SPELL_FAILED_TARGET_IS_TRIVIAL = 176,
+ SPELL_FAILED_BM_OR_INVISGOD = 177,
+ SPELL_FAILED_GROUND_MOUNT_NOT_ALLOWED = 178,
+ SPELL_FAILED_FLOATING_MOUNT_NOT_ALLOWED = 179,
+ SPELL_FAILED_UNDERWATER_MOUNT_NOT_ALLOWED = 180,
+ SPELL_FAILED_FLYING_MOUNT_NOT_ALLOWED = 181,
+ SPELL_FAILED_APPRENTICE_RIDING_REQUIREMENT = 182,
+ SPELL_FAILED_JOURNEYMAN_RIDING_REQUIREMENT = 183,
+ SPELL_FAILED_EXPERT_RIDING_REQUIREMENT = 184,
+ SPELL_FAILED_ARTISAN_RIDING_REQUIREMENT = 185,
+ SPELL_FAILED_MASTER_RIDING_REQUIREMENT = 186,
+ SPELL_FAILED_COLD_RIDING_REQUIREMENT = 187,
+ SPELL_FAILED_FLIGHT_MASTER_RIDING_REQUIREMENT = 188,
+ SPELL_FAILED_CS_RIDING_REQUIREMENT = 189,
+ SPELL_FAILED_PANDA_RIDING_REQUIREMENT = 190,
+ SPELL_FAILED_MOUNT_NO_FLOAT_HERE = 191,
+ SPELL_FAILED_MOUNT_NO_UNDERWATER_HERE = 192,
+ SPELL_FAILED_MOUNT_ABOVE_WATER_HERE = 193,
+ SPELL_FAILED_MOUNT_COLLECTED_ON_OTHER_CHAR = 194,
+ SPELL_FAILED_NOT_IDLE = 195,
+ SPELL_FAILED_NOT_INACTIVE = 196,
+ SPELL_FAILED_PARTIAL_PLAYTIME = 197,
+ SPELL_FAILED_NO_PLAYTIME = 198,
+ SPELL_FAILED_NOT_IN_BATTLEGROUND = 199,
+ SPELL_FAILED_NOT_IN_RAID_INSTANCE = 200,
+ SPELL_FAILED_ONLY_IN_ARENA = 201,
+ SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE = 202,
+ SPELL_FAILED_ON_USE_ENCHANT = 203,
+ SPELL_FAILED_NOT_ON_GROUND = 204,
+ SPELL_FAILED_CUSTOM_ERROR = 205,
+ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW = 206,
+ SPELL_FAILED_TOO_MANY_SOCKETS = 207,
+ SPELL_FAILED_INVALID_GLYPH = 208,
+ SPELL_FAILED_UNIQUE_GLYPH = 209,
+ SPELL_FAILED_GLYPH_SOCKET_LOCKED = 210,
+ SPELL_FAILED_GLYPH_EXCLUSIVE_CATEGORY = 211,
+ SPELL_FAILED_GLYPH_INVALID_SPEC = 212,
+ SPELL_FAILED_GLYPH_NO_SPEC = 213,
+ SPELL_FAILED_NO_VALID_TARGETS = 214,
+ SPELL_FAILED_ITEM_AT_MAX_CHARGES = 215,
+ SPELL_FAILED_NOT_IN_BARBERSHOP = 216,
+ SPELL_FAILED_FISHING_TOO_LOW = 217,
+ SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW = 218,
+ SPELL_FAILED_SUMMON_PENDING = 219,
+ SPELL_FAILED_MAX_SOCKETS = 220,
+ SPELL_FAILED_PET_CAN_RENAME = 221,
+ SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED = 222,
+ SPELL_FAILED_TARGET_HAS_RESURRECT_PENDING = 223,
+ SPELL_FAILED_NO_ACTIONS = 224,
+ SPELL_FAILED_CURRENCY_WEIGHT_MISMATCH = 225,
+ SPELL_FAILED_WEIGHT_NOT_ENOUGH = 226,
+ SPELL_FAILED_WEIGHT_TOO_MUCH = 227,
+ SPELL_FAILED_NO_VACANT_SEAT = 228,
+ SPELL_FAILED_NO_LIQUID = 229,
+ SPELL_FAILED_ONLY_NOT_SWIMMING = 230,
+ SPELL_FAILED_BY_NOT_MOVING = 231,
+ SPELL_FAILED_IN_COMBAT_RES_LIMIT_REACHED = 232,
+ SPELL_FAILED_NOT_IN_ARENA = 233,
+ SPELL_FAILED_TARGET_NOT_GROUNDED = 234,
+ SPELL_FAILED_EXCEEDED_WEEKLY_USAGE = 235,
+ SPELL_FAILED_NOT_IN_LFG_DUNGEON = 236,
+ SPELL_FAILED_BAD_TARGET_FILTER = 237,
+ SPELL_FAILED_NOT_ENOUGH_TARGETS = 238,
+ SPELL_FAILED_NO_SPEC = 239,
+ SPELL_FAILED_CANT_ADD_BATTLE_PET = 240,
+ SPELL_FAILED_CANT_UPGRADE_BATTLE_PET = 241,
+ SPELL_FAILED_WRONG_BATTLE_PET_TYPE = 242,
+ SPELL_FAILED_NO_DUNGEON_ENCOUNTER = 243,
+ SPELL_FAILED_NO_TELEPORT_FROM_DUNGEON = 244,
+ SPELL_FAILED_MAX_LEVEL_TOO_LOW = 245,
+ SPELL_FAILED_CANT_REPLACE_ITEM_BONUS = 246,
+ SPELL_FAILED_GRANT_PET_LEVEL_FAIL = 247,
+ SPELL_FAILED_SKILL_LINE_NOT_KNOWN = 248,
+ SPELL_FAILED_BLUEPRINT_KNOWN = 249,
+ SPELL_FAILED_FOLLOWER_KNOWN = 250,
+ SPELL_FAILED_CANT_OVERRIDE_ENCHANT_VISUAL = 251,
+ SPELL_FAILED_ITEM_NOT_A_WEAPON = 252,
+ SPELL_FAILED_SAME_ENCHANT_VISUAL = 253,
+ SPELL_FAILED_TOY_USE_LIMIT_REACHED = 254,
+ SPELL_FAILED_SHIPMENTS_FULL = 255,
+ SPELL_FAILED_HAS_MISSION = 256,
+ SPELL_FAILED_BUILDING_ACTIVATE_NOT_READY = 257,
+ SPELL_FAILED_NOT_SOULBOUND = 258,
+ SPELL_FAILED_RIDING_VEHICLE = 259,
+ SPELL_FAILED_UNKNOWN = 260, // custom value, default case
+ SPELL_CAST_OK = 0xFFFF // custom value, must not be sent to client
};
enum SpellCustomErrors
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index dddcbd3240b..1fe806a03e2 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -447,6 +447,17 @@ WorldPacket const* WorldPackets::Spells::SpellFailedOther::Write()
return &_worldPacket;
}
+WorldPacket const* WorldPackets::Spells::CastFailed::Write()
+{
+ _worldPacket << SpellID;
+ _worldPacket << Reason;
+ _worldPacket << FailedArg1;
+ _worldPacket << FailedArg2;
+ _worldPacket << CastID;
+
+ return &_worldPacket;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellModifierData const& spellModifierData)
{
data << spellModifierData.ModifierValue;
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 6dffc6e2116..4a9cf53c200 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -303,6 +303,20 @@ namespace WorldPackets
uint8 CastID = 0;
};
+ class CastFailed final : public ServerPacket
+ {
+ public:
+ CastFailed(OpcodeServer opcode) : ServerPacket(opcode, 4+4+4+4+1) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Reason = 0;
+ int32 FailedArg1 = -1;
+ int32 FailedArg2 = -1;
+ int32 SpellID = 0;
+ uint8 CastID = 0;
+ };
+
struct SpellModifierData
{
float ModifierValue = 0.0f;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 1601a927555..dc0d80d0a1b 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -799,7 +799,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAMERA_SHAKE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_LIST, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_MEMBER_COUNT, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_UNHANDLED);
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index a056ca958fd..304852b3176 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3764,17 +3764,18 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
if (result == SPELL_CAST_OK)
return;
- WorldPacket data(opcode, (4+1+1));
- data << uint8(cast_count);
- data << uint32(spellInfo->Id);
- data << uint8(result); // problem
+ WorldPackets::Spells::CastFailed packet(opcode);
+ packet.CastID = cast_count;
+ packet.SpellID = spellInfo->Id;
+ packet.Reason = result;
+
switch (result)
{
case SPELL_FAILED_NOT_READY:
- data << uint32(0); // unknown (value 1 update cooldowns on client flag)
+ packet.FailedArg1 = 0; // unknown (value 1 update cooldowns on client flag)
break;
case SPELL_FAILED_REQUIRES_SPELL_FOCUS:
- data << uint32(spellInfo->RequiresSpellFocus); // SpellFocusObject.dbc id
+ packet.FailedArg1 = spellInfo->RequiresSpellFocus; // SpellFocusObject.dbc id
break;
case SPELL_FAILED_REQUIRES_AREA: // AreaTable.dbc id
// hardcode areas limitation case
@@ -3782,71 +3783,71 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
{
case 41617: // Cenarion Mana Salve
case 41619: // Cenarion Healing Salve
- data << uint32(3905);
+ packet.FailedArg1 = 3905;
break;
case 41618: // Bottled Nethergon Energy
case 41620: // Bottled Nethergon Vapor
- data << uint32(3842);
+ packet.FailedArg1 = 3842;
break;
case 45373: // Bloodberry Elixir
- data << uint32(4075);
+ packet.FailedArg1 = 4075;
break;
default: // default case (don't must be)
- data << uint32(0);
+ packet.FailedArg1 = 0;
break;
}
break;
case SPELL_FAILED_TOTEMS:
if (spellInfo->Totem[0])
- data << uint32(spellInfo->Totem[0]);
+ packet.FailedArg1 = spellInfo->Totem[0];
if (spellInfo->Totem[1])
- data << uint32(spellInfo->Totem[1]);
+ packet.FailedArg2 = spellInfo->Totem[1];
break;
case SPELL_FAILED_TOTEM_CATEGORY:
if (spellInfo->TotemCategory[0])
- data << uint32(spellInfo->TotemCategory[0]);
+ packet.FailedArg1 = spellInfo->TotemCategory[0];
if (spellInfo->TotemCategory[1])
- data << uint32(spellInfo->TotemCategory[1]);
+ packet.FailedArg2 = spellInfo->TotemCategory[1];
break;
case SPELL_FAILED_EQUIPPED_ITEM_CLASS:
case SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND:
case SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND:
- data << uint32(spellInfo->EquippedItemClass);
- data << uint32(spellInfo->EquippedItemSubClassMask);
+ packet.FailedArg1 = spellInfo->EquippedItemClass;
+ packet.FailedArg2 = spellInfo->EquippedItemSubClassMask;
break;
case SPELL_FAILED_TOO_MANY_OF_ITEM:
{
- uint32 item = 0;
- for (SpellEffectInfo const* effect : spellInfo->GetEffectsForDifficulty(caster->GetMap()->GetDifficulty()))
- if (effect->ItemType)
- item = effect->ItemType;
- ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item);
- if (proto && proto->ItemLimitCategory)
- data << uint32(proto->ItemLimitCategory);
- break;
+ uint32 item = 0;
+ for (SpellEffectInfo const* effect : spellInfo->GetEffectsForDifficulty(caster->GetMap()->GetDifficulty()))
+ if (effect->ItemType)
+ item = effect->ItemType;
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item);
+ if (proto && proto->ItemLimitCategory)
+ packet.FailedArg1 = proto->ItemLimitCategory;
+ break;
}
case SPELL_FAILED_PREVENTED_BY_MECHANIC:
- data << uint32(spellInfo->GetAllEffectsMechanicMask()); // SpellMechanic.dbc id
+ packet.FailedArg1 = spellInfo->GetAllEffectsMechanicMask(); // SpellMechanic.dbc id
break;
case SPELL_FAILED_NEED_EXOTIC_AMMO:
- data << uint32(spellInfo->EquippedItemSubClassMask); // seems correct...
+ packet.FailedArg1 = spellInfo->EquippedItemSubClassMask; // seems correct...
break;
case SPELL_FAILED_NEED_MORE_ITEMS:
- data << uint32(0); // Item id
- data << uint32(0); // Item count?
+ packet.FailedArg1 = 0; // Item id
+ packet.FailedArg2 = 0; // Item count?
break;
case SPELL_FAILED_MIN_SKILL:
- data << uint32(0); // SkillLine.dbc id
- data << uint32(0); // required skill value
+ packet.FailedArg1 = 0; // SkillLine.dbc id
+ packet.FailedArg2 = 0; // required skill value
break;
case SPELL_FAILED_FISHING_TOO_LOW:
- data << uint32(0); // required fishing skill
+ packet.FailedArg1 = 0; // required fishing skill
break;
case SPELL_FAILED_CUSTOM_ERROR:
- data << uint32(customError);
+ packet.FailedArg1 = customError;
break;
case SPELL_FAILED_SILENCED:
- data << uint32(0); // Unknown
+ packet.FailedArg1 = 0; // Unknown
break;
case SPELL_FAILED_REAGENTS:
{
@@ -3866,14 +3867,15 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cas
}
}
- data << uint32(missingItem); // first missing item
+ packet.FailedArg1 = missingItem; // first missing item
break;
}
// TODO: SPELL_FAILED_NOT_STANDING
default:
break;
}
- caster->GetSession()->SendPacket(&data);
+
+ caster->GetSession()->SendPacket(packet.Write());
}
void Spell::SendSpellStart()