aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-08-08 20:59:30 -0500
committerSubv <s.v.h21@hotmail.com>2012-08-08 21:01:33 -0500
commit0434d3ab6960e1ca0945e8bb33b7c72088954aa5 (patch)
treee4480d1c83b4384ea89983e4d4bdb8ef240fa73b /src
parentd904fd54b04aa687c8e6e1653547a36a23b63abd (diff)
Core/PacketIO: Enabled/Fixed more opcodes
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp141
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h4
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp17
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h1
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
6 files changed, 110 insertions, 65 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c9f17e8e485..3d4250d5a44 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1274,8 +1274,7 @@ uint32 Player::EnvironmentalDamage(EnviromentalDamage type, uint32 damage)
sLog->outDebug(LOG_FILTER_PLAYER, "We are fall to death, loosing 10 percents durability");
DurabilityLossAll(0.10f, false);
// durability lost message
- WorldPacket data2(SMSG_DURABILITY_DAMAGE_DEATH, 0);
- GetSession()->SendPacket(&data2);
+ SendDurabilityLoss(this, 10);
}
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM, 1, type);
@@ -22153,12 +22152,7 @@ void Player::SendInitialPacketsAfterAddToMap()
// manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied.
if (HasAuraType(SPELL_AURA_MOD_ROOT))
- {
- WorldPacket data2(SMSG_MOVE_ROOT, 10);
- data2.append(GetPackGUID());
- data2 << (uint32)2;
- SendMessageToSet(&data2, true);
- }
+ SendMoveRoot(2);
SendAurasForTarget(this);
SendEnchantmentDurations(); // must be after add to map
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 19d5ef5b3cd..7efe90a392d 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12979,27 +12979,27 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
break;
case MOVE_RUN:
data.Initialize(SMSG_MOVE_SET_RUN_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteBit(bytes[6]);
data.WriteBit(bytes[1]);
- data.WriteBit(bytes[0]);
- data.WriteBit(bytes[7]);
data.WriteBit(bytes[5]);
data.WriteBit(bytes[2]);
- data.WriteBit(bytes[4]);
+ data.WriteBit(bytes[7]);
+ data.WriteBit(bytes[0]);
data.WriteBit(bytes[3]);
- data.WriteBit(bytes[6]);
+ data.WriteBit(bytes[4]);
+ data.WriteByteSeq(bytes[5]);
+ data.WriteByteSeq(bytes[3]);
data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[4]);
+ data << uint32(0);
data << float(GetSpeed(mtype));
data.WriteByteSeq(bytes[6]);
- data.WriteByteSeq(bytes[2]);
- data.WriteByteSeq(bytes[3]);
- data.WriteByteSeq(bytes[7]);
- data.WriteByteSeq(bytes[4]);
data.WriteByteSeq(bytes[0]);
- data.WriteByteSeq(bytes[5]);
- data << uint32(0);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[2]);
break;
case MOVE_RUN_BACK:
data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4 + 4 );
@@ -13026,25 +13026,25 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
break;
case MOVE_SWIM:
data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 1 + 8 + 4 + 4 );
+ data.WriteBit(bytes[5]);
+ data.WriteBit(bytes[4]);
data.WriteBit(bytes[7]);
- data.WriteBit(bytes[2]);
data.WriteBit(bytes[3]);
- data.WriteBit(bytes[4]);
- data.WriteBit(bytes[5]);
- data.WriteBit(bytes[6]);
- data.WriteBit(bytes[1]);
+ data.WriteBit(bytes[2]);
data.WriteBit(bytes[0]);
+ data.WriteBit(bytes[1]);
+ data.WriteBit(bytes[6]);
- data.WriteByteSeq(bytes[6]);
- data.WriteByteSeq(bytes[4]);
- data.WriteByteSeq(bytes[7]);
data.WriteByteSeq(bytes[0]);
- data << float(GetSpeed(mtype));
+ data << uint32(0);
+ data.WriteByteSeq(bytes[6]);
data.WriteByteSeq(bytes[3]);
- data.WriteByteSeq(bytes[1]);
data.WriteByteSeq(bytes[5]);
data.WriteByteSeq(bytes[2]);
- data << uint32(0);
+ data << float(GetSpeed(mtype));
+ data.WriteByteSeq(bytes[1]);
+ data.WriteByteSeq(bytes[7]);
+ data.WriteByteSeq(bytes[4]);
break;
case MOVE_SWIM_BACK:
data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4 + 4 );
@@ -15892,6 +15892,13 @@ bool Unit::HandleAuraRaidProcFromCharge(AuraEffect* triggeredByAura)
return true;
}
+void Unit::SendDurabilityLoss(Player* receiver, uint32 percent)
+{
+ WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 4);
+ data << uint32(percent);
+ receiver->GetSession()->SendPacket(percent);
+}
+
void Unit::Kill(Unit* victim, bool durabilityLoss)
{
// Prevent killing unit twice (and giving reward from kill twice)
@@ -16047,11 +16054,13 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
// only if not player and not controlled by player pet. And not at BG
if ((durabilityLoss && !player && !victim->ToPlayer()->InBattleground()) || (player && sWorld->getBoolConfig(CONFIG_DURABILITY_LOSS_IN_PVP)))
{
- sLog->outDebug(LOG_FILTER_UNITS, "We are dead, losing %f percent durability", sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH));
- plrVictim->DurabilityLossAll(sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH), false);
+ double baseLoss = sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH);
+ uint32 loss = uint32(baseLoss - (baseLoss * plrVictim->GetTotalAuraMultiplier(MSPELL_AURA_MOD_DURABILITY_LOSS)));
+ sLog->outDebug(LOG_FILTER_UNITS, "We are dead, losing %u percent durability", loss);
+ // Durability loss is calculated more accurately again for each item in Player::DurabilityLoss
+ plrVictim->DurabilityLossAll(baseLoss, false);
// durability lost message
- WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0);
- plrVictim->GetSession()->SendPacket(&data);
+ SendDurabilityLoss(plrVictim, loss);
}
// Call KilledUnit for creatures
if (GetTypeId() == TYPEID_UNIT && IsAIEnabled)
@@ -16236,6 +16245,63 @@ void Unit::SetControlled(bool apply, UnitState state)
}
}
+void Unit::SendMoveRoot(uint32 value)
+{
+ ObjectGuid guid = GetGUID();
+ WorldPacket data(SMSG_MOVE_ROOT, 1 + 8 + 4);
+ data.WriteBit(guid[2]);
+ data.WriteBit(guid[7]);
+ data.WriteBit(guid[6]);
+ data.WriteBit(guid[0]);
+ data.WriteBit(guid[5]);
+ data.WriteBit(guid[4]);
+ data.WriteBit(guid[1]);
+ data.WriteBit(guid[3]);
+
+ data.WriteByteSeq(guid[1]);
+ data.WriteByteSeq(guid[0]);
+ data.WriteByteSeq(guid[2]);
+ data.WriteByteSeq(guid[5]);
+
+ data << uint32(value);
+
+
+ data.WriteByteSeq(guid[3]);
+ data.WriteByteSeq(guid[4]);
+ data.WriteByteSeq(guid[7]);
+ data.WriteByteSeq(guid[6]);
+
+ SendMessageToSet(&data, true);
+}
+
+void Unit::SendMoveUnroot(uint32 value)
+{
+ ObjectGuid guid = GetGUID();
+ WorldPacket data(SMSG_MOVE_UNROOT, 1 + 8 + 4);
+ data.WriteBit(guid[0]);
+ data.WriteBit(guid[1]);
+ data.WriteBit(guid[3]);
+ data.WriteBit(guid[7]);
+ data.WriteBit(guid[5]);
+ data.WriteBit(guid[2]);
+ data.WriteBit(guid[4]);
+ data.WriteBit(guid[6]);
+
+ data.WriteByteSeq(guid[3]);
+ data.WriteByteSeq(guid[6]);
+ data.WriteByteSeq(guid[1]);
+
+ data << uint32(value);
+
+ data.WriteByteSeq(guid[2]);
+ data.WriteByteSeq(guid[0]);
+ data.WriteByteSeq(guid[7]);
+ data.WriteByteSeq(guid[4]);
+ data.WriteByteSeq(guid[5]);
+
+ SendMessageToSet(&data, true);
+}
+
void Unit::SetStunned(bool apply)
{
if (apply)
@@ -16255,10 +16321,7 @@ void Unit::SetStunned(bool apply)
else
SetStandState(UNIT_STAND_STATE_STAND);
- WorldPacket data(SMSG_MOVE_ROOT, 8);
- data.append(GetPackGUID());
- data << uint32(0);
- SendMessageToSet(&data, true);
+ SendMoveRoot(0);
CastStop();
}
@@ -16274,11 +16337,7 @@ void Unit::SetStunned(bool apply)
if (!HasUnitState(UNIT_STATE_ROOT)) // prevent moving if it also has root effect
{
- WorldPacket data(SMSG_MOVE_UNROOT, 8+4);
- data.append(GetPackGUID());
- data << uint32(0);
- SendMessageToSet(&data, true);
-
+ SendMoveUnroot(0);
RemoveUnitMovementFlag(MOVEMENTFLAG_ROOT);
}
}
@@ -16298,12 +16357,7 @@ void Unit::SetRooted(bool apply)
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
if (GetTypeId() == TYPEID_PLAYER)
- {
- WorldPacket data(SMSG_MOVE_ROOT, 10);
- data.append(GetPackGUID());
- data << m_rootTimes;
- SendMessageToSet(&data, true);
- }
+ SendMoveRoot(m_rootTimes);
else
{
ObjectGuid guid = GetGUID();
@@ -16334,12 +16388,7 @@ void Unit::SetRooted(bool apply)
if (!HasUnitState(UNIT_STATE_STUNNED)) // prevent moving if it also has stun effect
{
if (GetTypeId() == TYPEID_PLAYER)
- {
- WorldPacket data(SMSG_MOVE_UNROOT, 10);
- data.append(GetPackGUID());
- data << ++m_rootTimes;
- SendMessageToSet(&data, true);
- }
+ SendMoveUnroot(++m_rootTimes);
else
{
ObjectGuid guid = GetGUID();
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 8fee3ed74e0..cf2f25898b6 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1406,6 +1406,8 @@ class Unit : public WorldObject
void Dismount();
MountCapabilityEntry const* GetMountCapability(uint32 mountType) const;
+ void SendDurabilityLoss(Player* receiver, uint32 percent);
+
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
void DealDamageMods(Unit* victim, uint32 &damage, uint32* absorb);
uint32 DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDamage = NULL, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = NULL, bool durabilityLoss = true);
@@ -2323,6 +2325,8 @@ class Unit : public WorldObject
uint32 GetCombatRatingDamageReduction(CombatRating cr, float rate, float cap, uint32 damage) const;
protected:
+ void SendMoveRoot(uint32 value);
+ void SendMoveUnroot(uint32 value);
void SetFeared(bool apply);
void SetConfused(bool apply);
void SetStunned(bool apply);
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 38340e61f10..4e7b7647a1f 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -580,7 +580,6 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(MSG_MOVE_TELEPORT_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_TIME_SKIPPED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(MSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -752,7 +751,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_DAMAGE_CALC_LOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DANCE_QUERY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_DB_REPLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_DEATH_RELEASE_LOC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_DEATH_RELEASE_LOC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEBUG_RUNE_REGEN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEFENSE_MESSAGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_DESTROY_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -772,12 +771,12 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_DUEL_REQUESTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_DUEL_WINNER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DUMP_RIDE_TICKETS_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_DURABILITY_DAMAGE_DEATH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_DURABILITY_DAMAGE_DEATH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_ECHO_PARTY_SQUELCH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_EMOTE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_EMOTE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_ENABLE_BARBER_SHOP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_ENCHANTMENTLOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_ENVIRONMENTALDAMAGELOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_ENVIRONMENTALDAMAGELOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_LIST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_SAVED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_USE_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -979,7 +978,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_KNOCK_BACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_LAND_WALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -990,12 +989,12 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_BACK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index c54e77890f1..6184cf9b788 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -651,7 +651,6 @@ enum Opcodes
MSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x7B04,
MSG_MOVE_TOGGLE_FALL_LOGGING = 0x0000,
MSG_MOVE_TOGGLE_LOGGING = 0x0000,
- MSG_MOVE_UNROOT = 0x7DB4,
MSG_MOVE_UPDATE_CAN_FLY = 0x0000,
MSG_MOVE_UPDATE_FLIGHT_SPEED = 0x30B1,
MSG_MOVE_UPDATE_MOUSE = 0x0000,
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index eb81e1f7412..f7afab7ceb0 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -391,7 +391,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //335 SPELL_AURA_335
&AuraEffect::HandleNULL, //336 SPELL_AURA_MOD_FLYING_RESTRICTIONS
&AuraEffect::HandleNULL, //337 SPELL_AURA_MOD_VENDOR_ITEMS_PRICES
- &AuraEffect::HandleNULL, //338 SPELL_AURA_MOD_DURABILITY_LOSS
+ &AuraEffect::HandleNoImmediateEffect, //338 SPELL_AURA_MOD_DURABILITY_LOSS
&AuraEffect::HandleNULL, //339 SPELL_AURA_INCREASE_SKILL_GAIN_CHANCE
&AuraEffect::HandleNULL, //340 SPELL_AURA_340
&AuraEffect::HandleNULL, //341 SPELL_AURA_341