diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-09-17 23:33:29 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-09-17 23:33:29 +0200 |
commit | 68e89e4f7d84c20424f673978e5d3075c7fd52ca (patch) | |
tree | ba19fd07169d2ba0b05069682184599d9c23a729 | |
parent | 1cc4badf06a88e1062db9790455ef87cec41f937 (diff) |
Core/PacketIO: Corrected ActivateTaxiReply structure - fixes "There's no vendor nearby" message when starting flight
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 10 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/PlayerTaxi.cpp | 28 | ||||
-rw-r--r-- | src/server/game/Entities/Player/PlayerTaxi.h | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TaxiPackets.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TaxiPackets.h | 39 |
6 files changed, 41 insertions, 56 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 68658586239..24cd20f7427 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -460,11 +460,11 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) if (sInfo->Effect == SPELL_EFFECT_SEND_TAXI) spellPaths.insert(sInfo->EffectMiscValue); - memset(sTaxiNodesMask, 0, sizeof(sTaxiNodesMask)); - memset(sOldContinentsNodesMask, 0, sizeof(sOldContinentsNodesMask)); - memset(sHordeTaxiNodesMask, 0, sizeof(sHordeTaxiNodesMask)); - memset(sAllianceTaxiNodesMask, 0, sizeof(sAllianceTaxiNodesMask)); - memset(sDeathKnightTaxiNodesMask, 0, sizeof(sDeathKnightTaxiNodesMask)); + sTaxiNodesMask.fill(0); + sOldContinentsNodesMask.fill(0); + sHordeTaxiNodesMask.fill(0); + sAllianceTaxiNodesMask.fill(0); + sDeathKnightTaxiNodesMask.fill(0); for (TaxiNodesEntry const* node : sTaxiNodesStore) { TaxiPathSetBySource::const_iterator src_i = sTaxiPathSetBySource.find(node->ID); diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 9c898ea0101..0544ce82cea 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -1361,6 +1361,6 @@ typedef std::vector<TaxiPathNodeEntry const*> TaxiPathNodeList; typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath; #define TaxiMaskSize 217 -typedef uint8 TaxiMask[TaxiMaskSize]; +typedef std::array<uint8, TaxiMaskSize> TaxiMask; #endif diff --git a/src/server/game/Entities/Player/PlayerTaxi.cpp b/src/server/game/Entities/Player/PlayerTaxi.cpp index b7daa0b61d1..63e3d303129 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.cpp +++ b/src/server/game/Entities/Player/PlayerTaxi.cpp @@ -4,12 +4,6 @@ #include <limits> #include <math.h> - -PlayerTaxi::PlayerTaxi() -{ - memset(m_taximask, 0, sizeof(m_taximask)); -} - void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level) { // class specific initial known nodes @@ -47,7 +41,6 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level SetTaximaskNode(620); // Gol'Bolar Quarry, Dun Morogh SetTaximaskNode(624); // Azure Watch, Azuremyst Isle break; - case RACE_ORC: case RACE_UNDEAD_PLAYER: case RACE_TAUREN: @@ -76,6 +69,7 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level case ALLIANCE: SetTaximaskNode(100); break; case HORDE: SetTaximaskNode(99); break; } + // level dependent taxi hubs if (level >= 68) SetTaximaskNode(213); //Shattered Sun Staging Area @@ -96,24 +90,18 @@ void PlayerTaxi::LoadTaxiMask(std::string const &data) void PlayerTaxi::AppendTaximaskTo(WorldPackets::Taxi::ShowTaxiNodes& data, bool all) { if (all) - { - for (uint8 i = 0; i < TaxiMaskSize; ++i) - data.Nodes.push_back(sTaxiNodesMask[i]); // all existed nodes - } + data.Nodes = &sTaxiNodesMask; // all existed nodes else - { - for (uint8 i = 0; i < TaxiMaskSize; ++i) - data.Nodes.push_back(m_taximask[i]); // known nodes - } + data.Nodes = &m_taximask; // known nodes } bool PlayerTaxi::LoadTaxiDestinationsFromString(const std::string& values, uint32 team) { ClearTaxiDestinations(); - Tokenizer Tokenizer(values, ' '); + Tokenizer tokens(values, ' '); - for (Tokenizer::const_iterator iter = Tokenizer.begin(); iter != Tokenizer.end(); ++iter) + for (Tokenizer::const_iterator iter = tokens.begin(); iter != tokens.end(); ++iter) { uint32 node = atoul(*iter); AddTaxiDestination(node); @@ -130,7 +118,7 @@ bool PlayerTaxi::LoadTaxiDestinationsFromString(const std::string& values, uint3 { uint32 cost; uint32 path; - sObjectMgr->GetTaxiPath(m_TaxiDestinations[i-1], m_TaxiDestinations[i], path, cost); + sObjectMgr->GetTaxiPath(m_TaxiDestinations[i - 1], m_TaxiDestinations[i], path, cost); if (!path) return false; } @@ -149,7 +137,7 @@ std::string PlayerTaxi::SaveTaxiDestinationsToString() std::ostringstream ss; - for (size_t i=0; i < m_TaxiDestinations.size(); ++i) + for (size_t i = 0; i < m_TaxiDestinations.size(); ++i) ss << m_TaxiDestinations[i] << ' '; return ss.str(); @@ -179,7 +167,7 @@ void PlayerTaxi::RequestEarlyLanding() { if (m_TaxiDestinations.empty()) return; - + for (std::deque<uint32>::iterator it = m_TaxiDestinations.begin(); it != m_TaxiDestinations.end(); it++) if (IsTaximaskNodeKnown(*it)) { diff --git a/src/server/game/Entities/Player/PlayerTaxi.h b/src/server/game/Entities/Player/PlayerTaxi.h index 09ef4e53796..6739f5f6ab1 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.h +++ b/src/server/game/Entities/Player/PlayerTaxi.h @@ -9,7 +9,7 @@ class PlayerTaxi { public: - PlayerTaxi(); + PlayerTaxi() { } ~PlayerTaxi() { } // Nodes void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level); @@ -57,7 +57,7 @@ class PlayerTaxi friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); private: - TaxiMask m_taximask; + TaxiMask m_taximask = { }; std::deque<uint32> m_TaxiDestinations; }; diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp index 1223d1c7366..1dfa44d68a0 100644 --- a/src/server/game/Server/Packets/TaxiPackets.cpp +++ b/src/server/game/Server/Packets/TaxiPackets.cpp @@ -36,7 +36,7 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket.WriteBit(WindowInfo.is_initialized()); _worldPacket.FlushBits(); - _worldPacket << uint32(Nodes.size()); + _worldPacket << uint32(Nodes->size()); if (WindowInfo.is_initialized()) { @@ -44,8 +44,7 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket << uint32(WindowInfo->CurrentNode); } - for (uint8 node : Nodes) - _worldPacket << node; + _worldPacket.append(Nodes->data(), Nodes->size()); return &_worldPacket; } @@ -68,11 +67,8 @@ void WorldPackets::Taxi::ActivateTaxi::Read() WorldPacket const* WorldPackets::Taxi::ActivateTaxiReply::Write() { - _worldPacket << Reply; - return &_worldPacket; -} + _worldPacket.WriteBits(Reply, 4); + _worldPacket.FlushBits(); -void WorldPackets::Taxi::TaxiRequestEarlyLanding::Read() -{ - //Noop as it's empty packet + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h index 627854635b8..0c916548bac 100644 --- a/src/server/game/Server/Packets/TaxiPackets.h +++ b/src/server/game/Server/Packets/TaxiPackets.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "ObjectGuid.h" +#include "DB2Structure.h" namespace WorldPackets { @@ -60,64 +61,64 @@ namespace WorldPackets WorldPacket const* Write() override; Optional<ShowTaxiNodesWindowInfo> WindowInfo; - std::vector<uint8> Nodes; + TaxiMask const* Nodes = nullptr; }; - + class EnableTaxiNode final : public ClientPacket { public: EnableTaxiNode(WorldPacket&& packet) : ClientPacket(CMSG_ENABLE_TAXI_NODE, std::move(packet)) { } - + void Read() override; - + ObjectGuid Unit; }; - + class TaxiQueryAvailableNodes final : public ClientPacket { public: TaxiQueryAvailableNodes(WorldPacket&& packet) : ClientPacket(CMSG_TAXI_QUERY_AVAILABLE_NODES, std::move(packet)) { } - + void Read() override; - + ObjectGuid Unit; }; - + class ActivateTaxi final : public ClientPacket { public: ActivateTaxi(WorldPacket&& packet) : ClientPacket(CMSG_ACTIVATE_TAXI, std::move(packet)) { } - + void Read() override; - + ObjectGuid Vendor; uint32 Node; }; - + class NewTaxiPath final : public ServerPacket { public: NewTaxiPath() : ServerPacket(SMSG_NEW_TAXI_PATH, 0) { } - + WorldPacket const* Write() override { return &_worldPacket; } }; - + class ActivateTaxiReply final : public ServerPacket { public: ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 4) { } - + WorldPacket const* Write() override; - - uint32 Reply; + + uint8 Reply; }; - + class TaxiRequestEarlyLanding final : public ClientPacket { public: TaxiRequestEarlyLanding(WorldPacket&& packet) : ClientPacket(CMSG_TAXI_REQUEST_EARLY_LANDING, std::move(packet)) { } - - void Read() override; + + void Read() override { } }; } } |