aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-04-06 00:40:56 +0200
committerShauren <shauren.trinity@gmail.com>2015-04-06 00:40:56 +0200
commit01cc5d8c05bbf2180d4577974b0e39cea7aed876 (patch)
tree7d687916bec244b5da08f1bf1698b64f16e9809f /src/server/game/Entities/Unit
parent38fcea46dad9445be791777be718619624934319 (diff)
Core/PacketIO: Updated and enabled SMSG_SET_VEHICLE_REC_ID and SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA
* Implemented SMSG_MOVE_SET_VEHICLE_REC_ID and CMSG_MOVE_SET_VEHICLE_REC_ID_ACK
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp42
-rw-r--r--src/server/game/Entities/Unit/Unit.h5
2 files changed, 31 insertions, 16 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index f0e4907a93a..6a17f4f34c8 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -67,6 +67,7 @@
#include "MovementPackets.h"
#include "CombatPackets.h"
#include "CombatLogPackets.h"
+#include "VehiclePackets.h"
#include <cmath>
@@ -9546,12 +9547,6 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
{
if (CreateVehicleKit(VehicleId, creatureEntry))
{
- // Send others that we now have a vehicle
- WorldPacket data(SMSG_SET_VEHICLE_REC_ID, GetPackGUID().size() + 4);
- data << GetPackGUID();
- data << uint32(VehicleId);
- SendMessageToSet(&data, true);
-
player->SendOnCancelExpectedVehicleRideAura();
// mounts can also have accessories
@@ -9595,11 +9590,6 @@ void Unit::Dismount()
// dismount as a vehicle
if (GetTypeId() == TYPEID_PLAYER && GetVehicleKit())
{
- // Send other players that we are no longer a vehicle
- data.Initialize(SMSG_SET_VEHICLE_REC_ID, 8 + 4);
- data << GetPackGUID();
- data << uint32(0);
- ToPlayer()->SendMessageToSet(&data, true);
// Remove vehicle from player
RemoveVehicleKit();
}
@@ -11585,7 +11575,7 @@ void Unit::RemoveFromWorld()
{
m_duringRemoveFromWorld = true;
if (IsVehicle())
- RemoveVehicleKit();
+ RemoveVehicleKit(true);
RemoveCharmAuras();
RemoveBindSightAuras();
@@ -14163,7 +14153,7 @@ Unit* Unit::GetRedirectThreatTarget()
return !_redirectThreadInfo.GetTargetGUID().IsEmpty() ? ObjectAccessor::GetUnit(*this, _redirectThreadInfo.GetTargetGUID()) : NULL;
}
-bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry)
+bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry, bool loading /*= false*/)
{
VehicleEntry const* vehInfo = sVehicleStore.LookupEntry(id);
if (!vehInfo)
@@ -14172,14 +14162,21 @@ bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry)
m_vehicleKit = new Vehicle(this, vehInfo, creatureEntry);
m_updateFlag |= UPDATEFLAG_VEHICLE;
m_unitTypeMask |= UNIT_MASK_VEHICLE;
+
+ if (!loading)
+ SendSetVehicleRecId(id);
+
return true;
}
-void Unit::RemoveVehicleKit()
+void Unit::RemoveVehicleKit(bool onRemoveFromWorld /*= false*/)
{
if (!m_vehicleKit)
return;
+ if (!onRemoveFromWorld)
+ SendSetVehicleRecId(0);
+
m_vehicleKit->Uninstall();
delete m_vehicleKit;
@@ -15972,6 +15969,23 @@ bool Unit::SetHover(bool enable, bool packetOnly /*= false*/)
return true;
}
+void Unit::SendSetVehicleRecId(uint32 vehicleId)
+{
+ if (Player* player = ToPlayer())
+ {
+ WorldPackets::Vehicle::MoveSetVehicleRecID moveSetVehicleRec;
+ moveSetVehicleRec.MoverGUID = GetGUID();
+ moveSetVehicleRec.SequenceIndex = m_movementCounter++;
+ moveSetVehicleRec.VehicleRecID = vehicleId;
+ player->SendDirectMessage(moveSetVehicleRec.Write());
+ }
+
+ WorldPackets::Vehicle::SetVehicleRecID setVehicleRec;
+ setVehicleRec.VehicleGUID = GetGUID();
+ setVehicleRec.VehicleRecID = vehicleId;
+ SendMessageToSet(setVehicleRec.Write(), true);
+}
+
void Unit::SendSetPlayHoverAnim(bool enable)
{
ObjectGuid guid = GetGUID();
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index b009fd7a0a6..87254d230e6 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1661,6 +1661,7 @@ class Unit : public WorldObject
bool SetWaterWalking(bool enable, bool packetOnly = false);
bool SetFeatherFall(bool enable, bool packetOnly = false);
bool SetHover(bool enable, bool packetOnly = false);
+ void SendSetVehicleRecId(uint32 vehicleId);
void SetInFront(WorldObject const* target);
void SetFacingTo(float ori);
@@ -2135,8 +2136,8 @@ class Unit : public WorldObject
friend class VehicleJoinEvent;
bool IsAIEnabled, NeedChangeAI;
ObjectGuid LastCharmerGUID;
- bool CreateVehicleKit(uint32 id, uint32 creatureEntry);
- void RemoveVehicleKit();
+ bool CreateVehicleKit(uint32 id, uint32 creatureEntry, bool loading = false);
+ void RemoveVehicleKit(bool onRemoveFromWorld = false);
Vehicle* GetVehicleKit()const { return m_vehicleKit; }
Vehicle* GetVehicle() const { return m_vehicle; }
void SetVehicle(Vehicle* vehicle) { m_vehicle = vehicle; }