diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-04-06 00:40:56 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-04-06 00:40:56 +0200 |
| commit | 01cc5d8c05bbf2180d4577974b0e39cea7aed876 (patch) | |
| tree | 7d687916bec244b5da08f1bf1698b64f16e9809f /src/server/game/Entities | |
| parent | 38fcea46dad9445be791777be718619624934319 (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')
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 42 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.h | 4 |
5 files changed, 37 insertions, 22 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 5ee5e64a7b2..61be7790ba1 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1012,7 +1012,7 @@ void Creature::SaveToDB(uint32 mapid, uint32 spawnMask, uint32 phaseMask) data.npcflag = npcflag; data.unit_flags = unit_flags; data.dynamicflags = dynamicflags; - + data.phaseid = GetDBPhase() > 0 ? GetDBPhase() : 0; data.phaseGroup = GetDBPhase() < 0 ? abs(GetDBPhase()) : 0; @@ -1220,7 +1220,7 @@ bool Creature::CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, Creatu } if (vehId) - CreateVehicleKit(vehId, entry); + CreateVehicleKit(vehId, entry, true); return true; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f2f0bc0f5a0..7e49ddd007d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -97,6 +97,7 @@ #include "QuestPackets.h" #include "LootPackets.h" #include "TradePackets.h" +#include "VehiclePackets.h" #define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS) @@ -20298,8 +20299,7 @@ bool Player::RemoveMItem(ObjectGuid::LowType id) void Player::SendOnCancelExpectedVehicleRideAura() { - WorldPacket data(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, 0); - GetSession()->SendPacket(&data); + GetSession()->SendPacket(WorldPackets::Vehicle::OnCancelExpectedRideVehicleAura().Write()); } void Player::PetSpellInitialize() 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; } diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index edec4ea161c..a08827cf9a9 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -32,10 +32,10 @@ class VehicleJoinEvent; class Vehicle : public TransportBase { protected: - friend bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry); + friend bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry, bool); Vehicle(Unit* unit, VehicleEntry const* vehInfo, uint32 creatureEntry); - friend void Unit::RemoveVehicleKit(); + friend void Unit::RemoveVehicleKit(bool); ~Vehicle(); public: |
