aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <none@none>2009-08-21 02:46:48 -0500
committermegamage <none@none>2009-08-21 02:46:48 -0500
commit457f7971de361f05ff02ee2f9552be55867e6bf3 (patch)
treeeb6db3eb086e07ed83f7406b0f330adbbc344ad4
parentf8bec55205af170e0ca6c112e6b25067115a35fc (diff)
*Fix the bug that Eye of Acherus does not fly in some servers.
--HG-- branch : trunk
-rw-r--r--src/game/Player.cpp7
-rw-r--r--src/game/SpellAuras.cpp9
-rw-r--r--src/game/Unit.cpp14
-rw-r--r--src/game/Unit.h1
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);