aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2015_06_27_00_world.sql91
-rw-r--r--src/server/game/Entities/Vehicle/VehicleDefines.h1
-rw-r--r--src/server/game/Garrison/Garrison.cpp71
-rw-r--r--src/server/game/Garrison/Garrison.h1
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
5 files changed, 167 insertions, 1 deletions
diff --git a/sql/updates/world/2015_06_27_00_world.sql b/sql/updates/world/2015_06_27_00_world.sql
new file mode 100644
index 00000000000..b281002c7d6
--- /dev/null
+++ b/sql/updates/world/2015_06_27_00_world.sql
@@ -0,0 +1,91 @@
+DELETE FROM `gameobject_template` WHERE `entry` IN (231217,233249,236187,236186,231964,236188,236177,236176,233248,236175,236185,230867);
+INSERT INTO `gameobject_template` (`entry`,`type`,`displayId`,`name`,`IconName`,`castBarCaption`,`unk1`,`faction`,`flags`,`size`,`Data0`,`Data1`,`Data2`,`Data3`,`Data4`,`Data5`,`Data6`,`Data7`,`Data8`,`Data9`,`Data10`,`Data11`,`Data12`,`Data13`,`Data14`,`Data15`,`Data16`,`Data17`,`Data18`,`Data19`,`Data20`,`Data21`,`Data22`,`Data23`,`Data24`,`Data25`,`Data26`,`Data27`,`Data28`,`Data29`,`Data30`,`Data31`,`Data32`,`unkInt32`,`AIName`,`ScriptName`,`VerifiedBuild`) VALUES
+(231217,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,162743,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(233249,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,166877,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236187,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172105,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236186,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172104,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(231964,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,164610,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236188,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172414,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236177,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172056,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236176,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172043,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(233248,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,163215,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236175,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172040,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(236185,10,18018,'Finalize Garrison Plot','architect','Finalizing','',0,0,2,1691,0,0,3000,0,0,0,0,0,0,172083,0,0,0,83562,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,'','',19865),
+(230867,5,16265,'Under Construction Cloud','','','',0,32,0.35,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','',19865);
+
+UPDATE `creature_template` SET `minlevel`=90,`maxlevel`=90,`faction`=714,`unit_flags`=0x8000 WHERE `entry`=78467;
+UPDATE `creature_model_info` SET `BoundingRadius`=0.372,`CombatReach`=1.5 WHERE `DisplayID`=59254;
+
+SET @PEON := 228;
+DELETE FROM `creature` WHERE `guid` BETWEEN @PEON AND @PEON+28;
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseId`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`MovementType`) VALUES
+(@PEON+00,78467,1353,2,0,-1.037787,0.272035,2.163010,3.930394,7200,0,0),
+(@PEON+01,78467,1353,2,0,-2.149102,3.247060,2.163010,2.693754,7200,0,0),
+(@PEON+02,78467,1353,2,0,1.758662,8.978440,2.163010,3.050084,7200,0,0),
+(@PEON+03,78467,1353,2,0,10.771531,2.919150,2.163010,2.724154,7200,0,0),
+(@PEON+04,78467,1353,2,0,10.959270,-2.766289,2.163010,3.920824,7200,0,0),
+(@PEON+05,78467,1353,2,0,13.544037,-6.562311,8.610001,5.424888,7200,0,0),
+(@PEON+06,78467,1353,2,0,15.100115,-6.952090,11.637009,3.331964,7200,0,0),
+(@PEON+07,78467,1353,2,0,2.979650,-9.391919,2.161011,2.745454,7200,0,0),
+(@PEON+08,78467,1353,2,0,6.507762,-14.418222,2.163010,4.573184,7200,0,0),
+(@PEON+09,78467,1353,2,0,6.980373,21.202633,8.955002,0.177844,7200,0,0),
+(@PEON+10,78467,1353,2,0,9.172408,12.214418,2.163010,1.355784,7200,0,0),
+(@PEON+11,78467,1354,2,0,-2.376850,-1.938201,1.178009,3.765444,7200,0,0),
+(@PEON+12,78467,1354,2,0,-3.979343,-6.312402,7.108002,2.176954,7200,0,0),
+(@PEON+13,78467,1354,2,0,-4.827291,4.064543,1.178009,4.593574,7200,0,0),
+(@PEON+14,78467,1354,2,0,10.152680,0.077213,1.178009,2.171654,7200,0,0),
+(@PEON+15,78467,1354,2,0,14.417463,0.781982,1.178009,2.831924,7200,0,0),
+(@PEON+16,78467,1354,2,0,15.252268,-3.258279,1.178009,4.914564,7200,0,0),
+(@PEON+17,78467,1354,2,0,3.077893,-9.743636,1.163010,3.424174,7200,0,0),
+(@PEON+18,78467,1354,2,0,3.734778,9.195932,7.473999,4.934684,7200,0,0),
+(@PEON+19,78467,1354,2,0,5.343877,2.729449,1.178009,2.157304,7200,0,0),
+(@PEON+20,78467,1354,2,0,6.048157,-6.359730,1.178009,5.548074,7200,0,0),
+(@PEON+21,78467,1354,2,0,6.890800,-10.220474,4.296005,1.145594,7200,0,0),
+(@PEON+22,78467,1371,2,0,-3.689185,-1.491618,3.751007,3.119459,7200,0,0),
+(@PEON+23,78467,1371,2,0,-5.583674,-3.473835,6.037003,4.445419,7200,0,0),
+(@PEON+24,78467,1371,2,0,0.410911,-1.188165,1.052002,3.581499,7200,0,0),
+(@PEON+25,78467,1371,2,0,1.241397,5.063163,1.052002,2.175249,7200,0,0),
+(@PEON+26,78467,1371,2,0,1.437477,8.185573,1.174004,5.726631,7200,0,0),
+(@PEON+27,78467,1371,2,0,2.748763,-6.646344,1.052002,4.194179,7200,0,0),
+(@PEON+28,78467,1371,2,0,4.704940,-7.203648,6.174004,0.718819,7200,0,0);
+
+DELETE FROM `creature_addon` WHERE `guid` IN (@PEON+6,@PEON+12,@PEON+23,@PEON+28);
+INSERT INTO `creature_addon` (`guid`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES
+(@PEON+06,0,0x1000003,0x1,'55474'), -- Frostwall Peon - Cosmetic - Sleep Zzz
+(@PEON+12,0,0x1000003,0x1,'55474'), -- Frostwall Peon - Cosmetic - Sleep Zzz
+(@PEON+23,0,0x1000003,0x1,'55474'), -- Frostwall Peon - Cosmetic - Sleep Zzz
+(@PEON+28,0,0x8,0x1,''); -- Frostwall Peon
+
+DELETE FROM `creature_template_addon` WHERE `entry`=78467;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
+(78467,0,0x0,0x1,173,''); -- Frostwall Peon
+
+DELETE FROM `creature_equip_template` WHERE `CreatureID`=78467;
+INSERT INTO `creature_equip_template` (`CreatureID`,`ID`,`ItemID1`,`ItemID2`,`ItemID3`) VALUES
+(78467,1,5956,0,0); -- Frostwall Peon
+
+SET @CLOUD := 22;
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @CLOUD AND @CLOUD+21;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseId`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(@CLOUD+00,230867,1353,2,0,-1.602455,-0.805748,2.080002,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+01,230867,1353,2,0,-2.184269,4.333852,3.819000,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+02,230867,1353,2,0,-3.610352,3.829465,3.322998,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+03,230867,1353,2,0,0.507770,9.083573,2.085007,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+04,230867,1353,2,0,1.141878,-8.836224,2.078003,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+05,230867,1353,2,0,2.937370,-8.619312,2.079010,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+06,230867,1353,2,0,7.302363,-16.362539,2.080002,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+07,230867,1353,2,0,8.685335,3.850828,3.316010,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+08,230867,1353,2,0,9.477190,-3.942071,3.108002,0.000001,0,0,0,1,7200,255,1),
+(@CLOUD+09,230867,1354,2,0,-2.885510,-3.267375,2.942001,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+10,230867,1354,2,0,-5.703460,-2.703973,2.419006,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+11,230867,1354,2,0,12.723060,2.317318,7.229004,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+12,230867,1354,2,0,13.395262,1.437059,2.212997,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+13,230867,1354,2,0,2.362132,-5.047787,0.326996,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+14,230867,1354,2,0,4.062244,-9.205985,5.154999,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+15,230867,1354,2,0,6.416709,-7.086459,2.380005,6.195914,0,0,0,1,7200,255,1),
+(@CLOUD+16,230867,1371,2,0,-0.286411,5.867835,2.477005,0.000000,0,0,0,1,7200,255,1),
+(@CLOUD+17,230867,1371,2,0,-0.435432,-1.463116,2.343002,0.000000,0,0,0,1,7200,255,1),
+(@CLOUD+18,230867,1371,2,0,-5.173488,-1.854540,4.764000,0.000000,0,0,0,1,7200,255,1),
+(@CLOUD+19,230867,1371,2,0,2.071243,8.033276,2.346001,0.000000,0,0,0,1,7200,255,1),
+(@CLOUD+20,230867,1371,2,0,2.267101,-7.889375,2.452003,0.000000,0,0,0,1,7200,255,1),
+(@CLOUD+21,230867,1371,2,0,5.497054,-5.979848,6.371002,0.000000,0,0,0,1,7200,255,1);
diff --git a/src/server/game/Entities/Vehicle/VehicleDefines.h b/src/server/game/Entities/Vehicle/VehicleDefines.h
index 5569fcbf353..d0221e3e812 100644
--- a/src/server/game/Entities/Vehicle/VehicleDefines.h
+++ b/src/server/game/Entities/Vehicle/VehicleDefines.h
@@ -129,7 +129,6 @@ public:
/// This method transforms supplied global coordinates into local offsets
virtual void CalculatePassengerOffset(float& x, float& y, float& z, float* o = NULL) const = 0;
-protected:
static void CalculatePassengerPosition(float& x, float& y, float& z, float* o, float transX, float transY, float transZ, float transO)
{
float inx = x, iny = y, inz = z;
diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp
index 47cefda447c..e5aa0aab5cd 100644
--- a/src/server/game/Garrison/Garrison.cpp
+++ b/src/server/game/Garrison/Garrison.cpp
@@ -16,10 +16,12 @@
*/
#include "Garrison.h"
+#include "Creature.h"
#include "GameObject.h"
#include "GarrisonMgr.h"
#include "MapManager.h"
#include "ObjectMgr.h"
+#include "VehicleDefines.h"
Garrison::Garrison(Player* owner) : _owner(owner), _siteLevel(nullptr), _followerActivationsRemainingToday(1)
{
@@ -645,6 +647,40 @@ GarrisonError Garrison::CheckBuildingRemoval(uint32 garrPlotInstanceId) const
return GARRISON_SUCCESS;
}
+template<class T, void(T::*SecondaryRelocate)(float,float,float,float)>
+T* BuildingSpawnHelper(GameObject* building, ObjectGuid::LowType spawnId, Map* map)
+{
+ T* spawn = new T();
+ if (!spawn->LoadFromDB(spawnId, map))
+ {
+ delete spawn;
+ return nullptr;
+ }
+
+ float x = spawn->GetPositionX();
+ float y = spawn->GetPositionY();
+ float z = spawn->GetPositionZ();
+ float o = spawn->GetOrientation();
+ TransportBase::CalculatePassengerPosition(x, y, z, &o, building->GetPositionX(), building->GetPositionY(), building->GetPositionZ(), building->GetOrientation());
+
+ spawn->Relocate(x, y, z, o);
+ (spawn->*SecondaryRelocate)(x, y, z, o);
+
+ if (!spawn->IsPositionValid())
+ {
+ delete spawn;
+ return nullptr;
+ }
+
+ if (!map->AddToMap(spawn))
+ {
+ delete spawn;
+ return nullptr;
+ }
+
+ return spawn;
+}
+
GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex faction)
{
uint32 entry = EmptyGameObjectId;
@@ -697,6 +733,20 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact
}
}
+ if (building->GetGoType() == GAMEOBJECT_TYPE_GARRISON_BUILDING && building->GetGOInfo()->garrisonBuilding.mapID)
+ {
+ for (CellObjectGuidsMap::value_type const& cellGuids : sObjectMgr->GetMapObjectGuids(building->GetGOInfo()->garrisonBuilding.mapID, map->GetSpawnMode()))
+ {
+ for (ObjectGuid::LowType spawnId : cellGuids.second.creatures)
+ if (Creature* spawn = BuildingSpawnHelper<Creature, &Creature::SetHomePosition>(building, spawnId, map))
+ BuildingInfo.Spawns.insert(spawn->GetGUID());
+
+ for (ObjectGuid::LowType spawnId : cellGuids.second.gameobjects)
+ if (GameObject* spawn = BuildingSpawnHelper<GameObject, &GameObject::RelocateStationaryPosition>(building, spawnId, map))
+ BuildingInfo.Spawns.insert(spawn->GetGUID());
+ }
+ }
+
BuildingInfo.Guid = building->GetGUID();
return building;
}
@@ -706,6 +756,27 @@ void Garrison::Plot::DeleteGameObject(Map* map)
if (BuildingInfo.Guid.IsEmpty())
return;
+ for (ObjectGuid const& guid : BuildingInfo.Spawns)
+ {
+ WorldObject* object = nullptr;
+ switch (guid.GetHigh())
+ {
+ case HighGuid::Creature:
+ object = map->GetCreature(guid);
+ break;
+ case HighGuid::GameObject:
+ object = map->GetGameObject(guid);
+ break;
+ default:
+ continue;
+ }
+
+ if (object)
+ object->AddObjectToRemoveList();
+ }
+
+ BuildingInfo.Spawns.clear();
+
if (GameObject* oldBuilding = map->GetGameObject(BuildingInfo.Guid))
oldBuilding->Delete();
diff --git a/src/server/game/Garrison/Garrison.h b/src/server/game/Garrison/Garrison.h
index e6e44d5f83a..7123854cbc6 100644
--- a/src/server/game/Garrison/Garrison.h
+++ b/src/server/game/Garrison/Garrison.h
@@ -82,6 +82,7 @@ public:
bool CanActivate() const;
ObjectGuid Guid;
+ std::unordered_set<ObjectGuid> Spawns;
Optional<WorldPackets::Garrison::GarrisonBuildingInfo> PacketInfo;
};
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index bdfd66429cb..fd160532616 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -6678,6 +6678,10 @@ void ObjectMgr::LoadGameObjectTemplate()
case GAMEOBJECT_TYPE_BARBER_CHAIR: //32
CheckAndFixGOChairHeightId(&got, got.barberChair.chairheight, 0);
break;
+ case GAMEOBJECT_TYPE_GARRISON_BUILDING:
+ if (uint32 transportMap = got.garrisonBuilding.mapID)
+ _transportMaps.insert(transportMap);
+ break;
}
++count;