aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Garrison/Garrison.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-06-23 00:05:51 +0200
committerShauren <shauren.trinity@gmail.com>2015-06-23 00:05:51 +0200
commit73384e56d48cd0495c4926f163e435d75660624f (patch)
tree0bf711497a4012c1a10d52c9b93723e5ad64d0e0 /src/server/game/Garrison/Garrison.cpp
parent812fa65c613ecaa603dafc708df0088f3b50a90e (diff)
Core/Garrisons: Implemented spawning "Finalize Garrison Plot" gameobjects when building under construction is ready
Diffstat (limited to 'src/server/game/Garrison/Garrison.cpp')
-rw-r--r--src/server/game/Garrison/Garrison.cpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp
index 12c924c1f30..99db2336566 100644
--- a/src/server/game/Garrison/Garrison.cpp
+++ b/src/server/game/Garrison/Garrison.cpp
@@ -649,16 +649,39 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact
}
Position const& pos = PacketInfo.PlotPos;
- GameObject* go = new GameObject();
- if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, 0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(),
- 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_ACTIVE))
+ GameObject* building = new GameObject();
+ if (!building->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, 0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(),
+ 0.0f, 0.0f, 0.0f, 0.0f, 255, GO_STATE_READY))
{
- delete go;
+ delete building;
return nullptr;
}
- BuildingInfo.Guid = go->GetGUID();
- return go;
+ if (BuildingInfo.CanActivate() && BuildingInfo.PacketInfo && !BuildingInfo.PacketInfo->Active)
+ {
+ if (FinalizeGarrisonPlotGOInfo const* finalizeInfo = sGarrisonMgr.GetPlotFinalizeGOInfo(PacketInfo.GarrPlotInstanceID))
+ {
+ Position const& pos2 = finalizeInfo->FactionInfo[faction].Pos;
+ GameObject* finalizer = new GameObject();
+ if (finalizer->Create(map->GenerateLowGuid<HighGuid::GameObject>(), finalizeInfo->FactionInfo[faction].GameObjectId, map, 0, pos2.GetPositionX(), pos2.GetPositionY(),
+ pos2.GetPositionZ(), pos2.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 255, GO_STATE_READY))
+ {
+ // set some spell id to make the object delete itself after use
+ finalizer->SetSpellId(finalizer->GetGOInfo()->goober.spell);
+ finalizer->SetRespawnTime(0);
+
+ if (uint16 animKit = finalizeInfo->FactionInfo[faction].AnimKitId)
+ finalizer->SetAIAnimKitId(animKit);
+
+ map->AddToMap(finalizer);
+ }
+ else
+ delete finalizer;
+ }
+ }
+
+ BuildingInfo.Guid = building->GetGUID();
+ return building;
}
void Garrison::Plot::DeleteGameObject(Map* map)