diff options
Diffstat (limited to 'src/server/game/Garrison/GarrisonMgr.cpp')
-rw-r--r-- | src/server/game/Garrison/GarrisonMgr.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/server/game/Garrison/GarrisonMgr.cpp b/src/server/game/Garrison/GarrisonMgr.cpp new file mode 100644 index 00000000000..dd3ff08c0d1 --- /dev/null +++ b/src/server/game/Garrison/GarrisonMgr.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "GarrisonMgr.h" + +void GarrisonMgr::Initialize() +{ + for (GarrSiteLevelPlotInstEntry const* plotInstance : sGarrSiteLevelPlotInstStore) + _garrisonPlotInstBySiteLevel[plotInstance->GarrSiteLevelID].push_back(plotInstance); + + for (GameObjectsEntry const* gameObject : sGameObjectsStore) + if (gameObject->Type == GAMEOBJECT_TYPE_GARRISON_PLOT) + _garrisonPlots[gameObject->MapID][gameObject->Data[0]] = gameObject; + + for (GarrPlotBuildingEntry const* plotBuilding : sGarrPlotBuildingStore) + _garrisonBuildingsByPlot[plotBuilding->GarrPlotID].insert(plotBuilding->GarrBuildingID); + + for (GarrBuildingPlotInstEntry const* buildingPlotInst : sGarrBuildingPlotInstStore) + _garrisonBuildingPlotInstances[MAKE_PAIR64(buildingPlotInst->GarrBuildingID, buildingPlotInst->GarrSiteLevelPlotInstID)] = buildingPlotInst->ID; +} + +GarrSiteLevelEntry const* GarrisonMgr::GetGarrSiteLevelEntry(uint32 garrSiteId, uint32 level) const +{ + for (GarrSiteLevelEntry const* garrSiteLevel : sGarrSiteLevelStore) + if (garrSiteLevel->SiteID == garrSiteId && garrSiteLevel->Level == level) + return garrSiteLevel; + + return nullptr; +} + +std::vector<GarrSiteLevelPlotInstEntry const*> const* GarrisonMgr::GetGarrPlotInstForSiteLevel(uint32 garrSiteLevelId) const +{ + auto itr = _garrisonPlotInstBySiteLevel.find(garrSiteLevelId); + if (itr != _garrisonPlotInstBySiteLevel.end()) + return &itr->second; + + return nullptr; +} + +GameObjectsEntry const* GarrisonMgr::GetPlotGameObject(uint32 mapId, uint32 garrPlotInstanceId) const +{ + auto mapItr = _garrisonPlots.find(mapId); + if (mapItr != _garrisonPlots.end()) + { + auto plotItr = mapItr->second.find(garrPlotInstanceId); + if (plotItr != mapItr->second.end()) + return plotItr->second; + } + + return nullptr; +} + +bool GarrisonMgr::IsPlotMatchingBuilding(uint32 garrPlotId, uint32 garrBuildingId) const +{ + auto plotItr = _garrisonBuildingsByPlot.find(garrPlotId); + if (plotItr != _garrisonBuildingsByPlot.end()) + return plotItr->second.count(garrBuildingId) > 0; + + return false; +} + +uint32 GarrisonMgr::GetGarrBuildingPlotInst(uint32 garrBuildingId, uint32 garrSiteLevelPlotInstId) const +{ + auto itr = _garrisonBuildingPlotInstances.find(MAKE_PAIR64(garrBuildingId, garrSiteLevelPlotInstId)); + if (itr != _garrisonBuildingPlotInstances.end()) + return itr->second; + + return 0; +} |