aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp20
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraDefines.h2
3 files changed, 15 insertions, 11 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 979c62942f1..975599eae01 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -19923,9 +19923,15 @@ void Player::AddSpellMod(SpellModifier* mod, bool apply)
int i = 0;
flag96 _mask = 0;
+ uint32 modTypeCount = 0; // count of mods per one mod->op
+ WorldPacket data(Opcodes(opcode), 1);
+ data << uint32(1); // count of different mod->op's in packet
+ size_t writePos = data.wpos();
+ data << uint32(modTypeCount);
+ data << uint8(mod->op);
for (int eff = 0; eff < 96; ++eff)
{
- if (eff != 0 && eff % 32 == 0)
+ if (eff != 0 && (eff % 32) == 0)
_mask[i++] = 0;
_mask[i] = uint32(1) << (eff - (32 * i));
@@ -19936,16 +19942,14 @@ void Player::AddSpellMod(SpellModifier* mod, bool apply)
if ((*itr)->type == mod->type && (*itr)->mask & _mask)
val += (*itr)->value;
val += apply ? mod->value : -(mod->value);
- WorldPacket data(Opcodes(opcode), (1+1+4));
+
data << uint8(eff);
- data << uint8(mod->op);
- data << int32(val);
- if (opcode == SMSG_SET_PCT_SPELL_MODIFIER)
- data << uint8(0); // 4.x unk
- SendDirectMessage(&data);
+ data << float(val);
+ ++modTypeCount;
}
}
-
+ data.put<uint32>(writePos, modTypeCount);
+ SendDirectMessage(&data);
if (apply)
m_spellMods[mod->op].push_back(mod);
else
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index d05b45ab718..8324a990170 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -677,8 +677,8 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_SPELLORDAMAGE_IMMUNE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(CMSG_AUCTION_LIST_BIDDER_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListBidderItems );
//DEFINE_OPCODE_HANDLER(SMSG_AUCTION_BIDDER_LIST_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_CORPSE_RECLAIM_DELAY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveMoverOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_PET_CANCEL_AURA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetCancelAuraOpcode );
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 90d77a5e509..c5540052fb3 100755
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -413,7 +413,7 @@ enum AuraType
SPELL_AURA_351 = 351,
SPELL_AURA_352 = 352,
SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI
- TOTAL_AURAS = 354
+ TOTAL_AURAS = 363 // 4.2.2
};
enum AuraObjectType