diff options
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 417 | ||||
-rw-r--r-- | src/server/game/Server/Packets/SpellPackets.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 14 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 72 |
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() |