aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/TaxiHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-04-06 23:39:34 +0200
committerShauren <shauren.trinity@gmail.com>2017-04-06 23:39:34 +0200
commitd20dedebd6a322e1204fa911b4a2ddc7e2c3e67a (patch)
tree02f823f14e41a8481dc3d46f94bbca4404988e38 /src/server/game/Handlers/TaxiHandler.cpp
parent886e9e839b304b7567dd655e4fa3afb2251c96ca (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.cpp22
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);