From 01cc5d8c05bbf2180d4577974b0e39cea7aed876 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 6 Apr 2015 00:40:56 +0200 Subject: 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 --- src/server/game/Entities/Creature/Creature.cpp | 4 +-- src/server/game/Entities/Player/Player.cpp | 4 +-- src/server/game/Entities/Unit/Unit.cpp | 42 +++++++++++++++++--------- src/server/game/Entities/Unit/Unit.h | 5 +-- src/server/game/Entities/Vehicle/Vehicle.h | 4 +-- 5 files changed, 37 insertions(+), 22 deletions(-) (limited to 'src/server/game/Entities') 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 @@ -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: -- cgit v1.2.3