aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Garrison/GarrisonMap.cpp18
-rw-r--r--src/server/game/Garrison/GarrisonMap.h4
-rw-r--r--src/server/game/Garrison/GarrisonMgr.h2
3 files changed, 22 insertions, 2 deletions
diff --git a/src/server/game/Garrison/GarrisonMap.cpp b/src/server/game/Garrison/GarrisonMap.cpp
index 7316504d185..b9cf63140b4 100644
--- a/src/server/game/Garrison/GarrisonMap.cpp
+++ b/src/server/game/Garrison/GarrisonMap.cpp
@@ -97,7 +97,7 @@ void GarrisonGridLoader::Visit(CreatureMapType& /*m*/)
}
GarrisonMap::GarrisonMap(uint32 id, time_t expiry, uint32 instanceId, Map* parent, ObjectGuid const& owner)
- : Map(id, expiry, instanceId, DIFFICULTY_NORMAL, parent), _owner(owner)
+ : Map(id, expiry, instanceId, DIFFICULTY_NORMAL, parent), _owner(owner), _loadingPlayer(nullptr)
{
GarrisonMap::InitVisibilityDistance();
}
@@ -112,6 +112,9 @@ void GarrisonMap::LoadGridObjects(NGridType* grid, Cell const& cell)
Garrison* GarrisonMap::GetGarrison()
{
+ if (_loadingPlayer)
+ return _loadingPlayer->GetGarrison();
+
if (Player* owner = ObjectAccessor::FindConnectedPlayer(_owner))
return owner->GetGarrison();
@@ -124,3 +127,16 @@ void GarrisonMap::InitVisibilityDistance()
m_VisibleDistance = World::GetMaxVisibleDistanceInBGArenas();
m_VisibilityNotifyPeriod = World::GetVisibilityNotifyPeriodInBGArenas();
}
+
+bool GarrisonMap::AddPlayerToMap(Player* player, bool initPlayer /*= true*/)
+{
+ if (player->GetGUID() == _owner)
+ _loadingPlayer = player;
+
+ bool result = Map::AddPlayerToMap(player, initPlayer);
+
+ if (player->GetGUID() == _owner)
+ _loadingPlayer = nullptr;
+
+ return result;
+}
diff --git a/src/server/game/Garrison/GarrisonMap.h b/src/server/game/Garrison/GarrisonMap.h
index 0ccc77b05fa..5f5c9b134b7 100644
--- a/src/server/game/Garrison/GarrisonMap.h
+++ b/src/server/game/Garrison/GarrisonMap.h
@@ -21,6 +21,7 @@
#include "Map.h"
class Garrison;
+class Player;
class GarrisonMap : public Map
{
@@ -32,8 +33,11 @@ public:
void InitVisibilityDistance() override;
+ bool AddPlayerToMap(Player* player, bool initPlayer = true) override;
+
private:
ObjectGuid _owner;
+ Player* _loadingPlayer; ///< @workaround Player is not registered in ObjectAccessor during login
};
#endif // GarrisonMap_h__
diff --git a/src/server/game/Garrison/GarrisonMgr.h b/src/server/game/Garrison/GarrisonMgr.h
index 68514f4a2f3..63810e3c3ab 100644
--- a/src/server/game/Garrison/GarrisonMgr.h
+++ b/src/server/game/Garrison/GarrisonMgr.h
@@ -61,7 +61,7 @@ private:
std::unordered_map<uint32 /*classSpecId*/, std::list<GarrAbilityEntry const*>> _garrisonFollowerClassSpecAbilities;
std::set<GarrAbilityEntry const*> _garrisonFollowerRandomTraits;
- uint64 _followerDbIdGenerator = UI64LIT(0);
+ uint64 _followerDbIdGenerator = UI64LIT(1);
};
#define sGarrisonMgr GarrisonMgr::Instance()