diff options
| author | Shauren <shauren.trinity@gmail.com> | 2018-01-28 11:37:20 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-03-25 19:28:36 +0300 |
| commit | 91be2332e249147ce3169c46a7da77f0f8c2211d (patch) | |
| tree | eab9e0ab76ae523f7a843fe1c2300eba17f53af2 /src/server/game/Server | |
| parent | 1e62b53c66829dc9820117e17bfb44cb2652f814 (diff) | |
Core/Entities: Phasing rewrite
* Optimized phase visibility checking
* Handle all phase flags
Closes #16758
Closes #21119
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 48 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 29 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/PartyPackets.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
4 files changed, 51 insertions, 40 deletions
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index e5795b6b7f4..a03f1ff35fc 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -376,29 +376,39 @@ WorldPacket const* WorldPackets::Misc::RandomRoll::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Misc::PhaseShift::Write() +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Misc::PhaseShiftDataPhase const& phaseShiftDataPhase) { - _worldPacket << ClientGUID; // CLientGUID - _worldPacket << uint32(PhaseShifts.size() ? 0 : 8); // PhaseShiftFlags - _worldPacket << uint32(PhaseShifts.size()); // PhaseShiftCount - _worldPacket << PersonalGUID; // PersonalGUID - for (uint32 phase : PhaseShifts) - { - _worldPacket << uint16(1); // PhaseFlags - _worldPacket << uint16(phase); // PhaseID - } + data << uint16(phaseShiftDataPhase.PhaseFlags); + data << uint16(phaseShiftDataPhase.Id); + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Misc::PhaseShiftData const& phaseShiftData) +{ + data << uint32(phaseShiftData.PhaseShiftFlags); + data << uint32(phaseShiftData.Phases.size()); + data << phaseShiftData.PersonalGUID; + for (WorldPackets::Misc::PhaseShiftDataPhase const& phaseShiftDataPhase : phaseShiftData.Phases) + data << phaseShiftDataPhase; + + return data; +} - _worldPacket << uint32(VisibleMapIDs.size() * 2); // Active terrain swaps size - for (uint32 map : VisibleMapIDs) - _worldPacket << uint16(map); // Active terrain swap map id +WorldPacket const* WorldPackets::Misc::PhaseShiftChange::Write() +{ + _worldPacket << Client; + _worldPacket << Phaseshift; + _worldPacket << uint32(VisibleMapIDs.size() * 2); // size in bytes + for (uint16 visibleMapId : VisibleMapIDs) + _worldPacket << uint16(visibleMapId); // Active terrain swap map id - _worldPacket << uint32(PreloadMapIDs.size() * 2); // Inactive terrain swaps size - for (uint32 map : PreloadMapIDs) - _worldPacket << uint16(map); // Inactive terrain swap map id + _worldPacket << uint32(PreloadMapIDs.size() * 2); // size in bytes + for (uint16 preloadMapId : PreloadMapIDs) + _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id - _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // UI map swaps size - for (uint32 map : UiWorldMapAreaIDSwaps) - _worldPacket << uint16(map); // UI map id, WorldMapArea.dbc, controls map display + _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // size in bytes + for (uint16 uiWorldMapAreaIDSwap : UiWorldMapAreaIDSwaps) + _worldPacket << uint16(uiWorldMapAreaIDSwap); // UI map id, WorldMapArea.db2, controls map display return &_worldPacket; } diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index e875885864f..26affbaf934 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -28,7 +28,6 @@ #include "SharedDefines.h" #include <array> #include <map> -#include <set> enum MountStatusFlags : uint8; enum UnitStandStateType : uint8; @@ -529,19 +528,31 @@ namespace WorldPackets WorldPacket const* Write() override { return &_worldPacket; } }; - class PhaseShift final : public ServerPacket + struct PhaseShiftDataPhase + { + uint16 PhaseFlags = 0; + uint16 Id = 0; + }; + + struct PhaseShiftData + { + uint32 PhaseShiftFlags = 0; + std::vector<PhaseShiftDataPhase> Phases; + ObjectGuid PersonalGUID; + }; + + class PhaseShiftChange final : public ServerPacket { public: - PhaseShift() : ServerPacket(SMSG_PHASE_SHIFT_CHANGE, 4) { } + PhaseShiftChange() : ServerPacket(SMSG_PHASE_SHIFT_CHANGE, 16 + 4 + 4 + 16 + 4 + 4 + 4) { } WorldPacket const* Write() override; - ObjectGuid ClientGUID; - ObjectGuid PersonalGUID; - std::set<uint32> PhaseShifts; - std::set<uint32> PreloadMapIDs; - std::set<uint32> UiWorldMapAreaIDSwaps; - std::set<uint32> VisibleMapIDs; + ObjectGuid Client; + PhaseShiftData Phaseshift; + std::vector<uint16> PreloadMapIDs; + std::vector<uint16> UiWorldMapAreaIDSwaps; + std::vector<uint16> VisibleMapIDs; }; class ZoneUnderAttack final : public ServerPacket diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index d3d1f45995d..939f0a65db1 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -17,6 +17,7 @@ #include "PartyPackets.h" #include "Pet.h" +#include "PhasingHandler.h" #include "Player.h" #include "Realm.h" #include "SpellAuraEffects.h" @@ -625,16 +626,7 @@ void WorldPackets::Party::PartyMemberState::Initialize(Player const* player) } // Phases - std::set<uint32> const& phases = player->GetPhases(); - MemberStats.Phases.PhaseShiftFlags = 0x08 | (phases.size() ? 0x10 : 0); - MemberStats.Phases.PersonalGUID = ObjectGuid::Empty; - for (uint32 phaseId : phases) - { - WorldPackets::Party::PartyMemberPhase phase; - phase.Id = phaseId; - phase.Flags = 1; - MemberStats.Phases.List.push_back(phase); - } + PhasingHandler::FillPartyMemberPhase(&MemberStats.Phases, player->GetPhaseShift()); // Pet if (player->GetPet()) diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 9de54534f0e..7346b14d312 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -31,7 +31,6 @@ #include "QueryCallbackProcessor.h" #include "SharedDefines.h" #include <array> -#include <set> #include <unordered_map> #include <unordered_set> @@ -908,7 +907,6 @@ class TC_GAME_API WorldSession void SendNotification(uint32 stringId, ...); void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName); void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0); - void SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps, std::set<uint32> const& worldMapAreaSwaps); void SendQueryTimeResponse(); void SendAuthResponse(uint32 code, bool queued, uint32 queuePos = 0); |
