diff options
author | megamage <none@none> | 2009-08-21 02:46:48 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-08-21 02:46:48 -0500 |
commit | 457f7971de361f05ff02ee2f9552be55867e6bf3 (patch) | |
tree | eb6db3eb086e07ed83f7406b0f330adbbc344ad4 | |
parent | f8bec55205af170e0ca6c112e6b25067115a35fc (diff) |
*Fix the bug that Eye of Acherus does not fly in some servers.
--HG--
branch : trunk
-rw-r--r-- | src/game/Player.cpp | 7 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 9 | ||||
-rw-r--r-- | src/game/Unit.cpp | 14 | ||||
-rw-r--r-- | src/game/Unit.h | 1 |
4 files changed, 27 insertions, 4 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8f704de84a5..753483100b3 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -20199,6 +20199,13 @@ void Player::SetClientControl(Unit* target, uint8 allowMove) GetSession()->SendPacket(&data); if(target == this) SetMover(this); + else if(target->canFly()) + { + WorldPacket data(SMSG_MOVE_SET_CAN_FLY, 12); + data.append(target->GetPackGUID()); + data << uint32(0); + SendDirectMessage(&data); + } } void Player::UpdateZoneDependentAuras( uint32 newZone ) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index b0c8e75d14a..283847e70c0 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5454,7 +5454,9 @@ void AuraEffect::HandleAuraAllowFlight(bool apply, bool Real, bool /*changeAmoun if(m_target->GetTypeId() == TYPEID_UNIT) m_target->SetFlying(apply); - + + if(Player *plr = m_target->GetMoverSource()) + { // allow fly WorldPacket data; if(apply) @@ -5463,7 +5465,10 @@ void AuraEffect::HandleAuraAllowFlight(bool apply, bool Real, bool /*changeAmoun data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12); data.append(m_target->GetPackGUID()); data << uint32(0); // unk - m_target->SendMessageToSet(&data, true); + plr->SendDirectMessage(&data); + } + + //m_target->SendMessageToSet(&data, true); } void AuraEffect::HandleModRating(bool apply, bool Real, bool changeAmount) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a38ea3cc0ca..b0c8262df0c 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8860,6 +8860,16 @@ Unit* Unit::GetNextRandomRaidMemberOrPet(float radius) return nearMembers[randTarget]; } +Player * Unit::GetMoverSource() const +{ + if(GetTypeId() == TYPEID_PLAYER && ((Player*)this)->m_mover == this) + return (Player*)this; + if(Unit *charmer = GetCharmer()) + if(charmer->GetTypeId() == TYPEID_PLAYER && ((Player*)charmer)->m_mover == this) + return (Player*)charmer; + return NULL; +} + //only called in Player::SetSeer void Unit::AddPlayerToVision(Player* plr) { @@ -14725,12 +14735,12 @@ void Unit::SetFlying(bool apply) if(apply) { SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x02); - AddUnitMovementFlag(MOVEMENTFLAG_FLYING); + AddUnitMovementFlag(MOVEMENTFLAG_FLY_MODE + MOVEMENTFLAG_FLYING); } else { RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x02); - RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING); + RemoveUnitMovementFlag(MOVEMENTFLAG_FLY_MODE + MOVEMENTFLAG_FLYING); } } diff --git a/src/game/Unit.h b/src/game/Unit.h index d654c948ef4..a2e02a9910f 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1431,6 +1431,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject CharmInfo* InitCharmInfo(); void DeleteCharmInfo(); void UpdateCharmAI(); + Player * GetMoverSource() const; SharedVisionList const& GetSharedVisionList() { return m_sharedVision; } void AddPlayerToVision(Player* plr); void RemovePlayerFromVision(Player* plr); |