diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-04-06 23:39:34 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-04-06 23:39:34 +0200 |
commit | d20dedebd6a322e1204fa911b4a2ddc7e2c3e67a (patch) | |
tree | 02f823f14e41a8481dc3d46f94bbca4404988e38 /src/server/game/Handlers/TaxiHandler.cpp | |
parent | 886e9e839b304b7567dd655e4fa3afb2251c96ca (diff) |
Core/DataStores: Updated db2 structures to 7.2.0
Diffstat (limited to 'src/server/game/Handlers/TaxiHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/TaxiHandler.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index 8160c1290a4..d878a406909 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -17,7 +17,10 @@ */ #include "Common.h" +#include "ConditionMgr.h" +#include "Containers.h" #include "DatabaseEnv.h" +#include "DB2Stores.h" #include "WorldPacket.h" #include "WorldSession.h" #include "Opcodes.h" @@ -184,8 +187,25 @@ void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& ac uint32 preferredMountDisplay = 0; if (MountEntry const* mount = sMountStore.LookupEntry(activateTaxi.FlyingMountID)) + { if (GetPlayer()->HasSpell(mount->SpellId)) - preferredMountDisplay = mount->DisplayId; + { + if (DB2Manager::MountXDisplayContainer const* mountDisplays = sDB2Manager.GetMountDisplays(mount->ID)) + { + DB2Manager::MountXDisplayContainer usableDisplays; + std::copy_if(mountDisplays->begin(), mountDisplays->end(), std::back_inserter(usableDisplays), [this](MountXDisplayEntry const* mountDisplay) + { + if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mountDisplay->PlayerConditionID)) + return sConditionMgr->IsPlayerMeetingCondition(GetPlayer(), playerCondition); + + return true; + }); + + if (!usableDisplays.empty()) + preferredMountDisplay = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID; + } + } + } std::vector<uint32> nodes; sTaxiPathGraph.GetCompleteNodeRoute(from, to, GetPlayer(), nodes); |