BF/Wintergrasp: Removed harcoded Workshops related spawns, db data is used now.

This commit is contained in:
Manuel Carrasco
2012-08-20 13:48:47 -04:00
committed by Kandera
parent d7a7a9800b
commit 27bfafe0e1
5 changed files with 215 additions and 281 deletions
+10
View File
@@ -1,3 +1,13 @@
-- Before pushing to master check if guids are free.
-- Spawns Workshop Capture Points
SET @GUID := 4594;
DELETE FROM gameobject WHERE guid IN (@GUID+1,@GUID+2,@GUID+3,@GUID+4);
INSERT INTO gameobject (guid,id,position_x,position_y,position_z,orientation,map) VALUES
(@GUID+1, 190475, 4949.344238, 2432.585693, 320.176971, 1.386214, 571), -- ne
(@GUID+2, 190487, 4948.524414, 3342.337891, 376.875366, 4.400566, 571), -- nw
(@GUID+3, 194959, 4398.076660, 2356.503662, 376.190491, 0.525406, 571), -- se
(@GUID+4, 194962, 4390.776367, 3304.094482, 372.429077, 6.097023, 571); -- sw
-- EVERYTHING UNDER HERE IS WIP -- EVERYTHING UNDER HERE IS WIP
/* /*
SET @OGUID := XXXXX; SET @OGUID := XXXXX;
+11 -11
View File
@@ -944,26 +944,28 @@ void BfCapturePoint::SendChangePhase()
SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct); SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
} }
bool BfCapturePoint::SetCapturePointData(uint32 entry, uint32 /*map */ , float x, float y, float z, float o) bool BfCapturePoint::SetCapturePointData(GameObject* capturePoint)
{ {
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Creating capture point %u", entry); ASSERT(capturePoint);
sLog->outDebug(LOG_FILTER_BATTLEFIELD, "Creating capture point %u", capturePoint->GetEntry());
m_capturePoint = capturePoint;
// check info existence // check info existence
GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry); GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(capturePoint->GetEntry());
if (!goinfo || goinfo->type != GAMEOBJECT_TYPE_CAPTURE_POINT) if (!goinfo || goinfo->type != GAMEOBJECT_TYPE_CAPTURE_POINT)
{ {
sLog->outError("OutdoorPvP: GO %u is not capture point!", entry); sLog->outError("OutdoorPvP: GO %u is not capture point!", capturePoint->GetEntry());
return false; return false;
} }
m_capturePoint = m_Bf->SpawnGameObject(entry, x, y, z, o);
if (m_capturePoint)
{
// get the needed values from goinfo // get the needed values from goinfo
m_maxValue = goinfo->capturePoint.maxTime; m_maxValue = goinfo->capturePoint.maxTime;
m_maxSpeed = m_maxValue / (goinfo->capturePoint.minTime ? goinfo->capturePoint.minTime : 60); m_maxSpeed = m_maxValue / (goinfo->capturePoint.minTime ? goinfo->capturePoint.minTime : 60);
m_neutralValuePct = goinfo->capturePoint.neutralPercent; m_neutralValuePct = goinfo->capturePoint.neutralPercent;
m_minValue = m_maxValue * goinfo->capturePoint.neutralPercent / 100; m_minValue = m_maxValue * goinfo->capturePoint.neutralPercent / 100;
m_capturePointEntry = entry; m_capturePointEntry = capturePoint->GetEntry();
if (m_team == TEAM_ALLIANCE) if (m_team == TEAM_ALLIANCE)
{ {
m_value = m_maxValue; m_value = m_maxValue;
@@ -974,10 +976,8 @@ bool BfCapturePoint::SetCapturePointData(uint32 entry, uint32 /*map */ , float x
m_value = -m_maxValue; m_value = -m_maxValue;
m_State = BF_CAPTUREPOINT_OBJECTIVESTATE_HORDE; m_State = BF_CAPTUREPOINT_OBJECTIVESTATE_HORDE;
} }
return true;
}
return false; return true;
} }
bool BfCapturePoint::DelCapturePoint() bool BfCapturePoint::DelCapturePoint()
+2 -2
View File
@@ -100,8 +100,8 @@ public:
virtual void ChangeTeam(TeamId /*oldTeam */ ) {} virtual void ChangeTeam(TeamId /*oldTeam */ ) {}
virtual void SendChangePhase(); virtual void SendChangePhase();
bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o); bool SetCapturePointData(GameObject* capturePoint);
GameObject *GetCapturePointGo() { return m_capturePoint; } GameObject* GetCapturePointGo() { return m_capturePoint; }
TeamId GetTeamId() {return m_team;} TeamId GetTeamId() {return m_team;}
protected: protected:
@@ -99,37 +99,21 @@ bool BattlefieldWG::SetupBattlefield()
m_GraveYardList[i] = gy; m_GraveYardList[i] = gy;
} }
// Spawn workshop creatures and gameobjects // Spawn workshop creatures and gameobjects
for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++) for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++)
{ {
BfWGWorkShopData *ws = new BfWGWorkShopData(this); // Create new object WGWorkshop* workshop = new WGWorkshop(this, i);
// Init:setup variable if (i < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
ws->Init(WGWorkShopDataBase[i].worldstate, WGWorkShopDataBase[i].type, WGWorkShopDataBase[i].nameid); workshop->ChangeControl(GetAttackerTeam(), true);
// Spawn associate npc on this point (Guard/Engineer)
for (uint8 c = 0; c < WGWorkShopDataBase[i].nbcreature; c++)
ws->AddCreature(WGWorkShopDataBase[i].CreatureData[c]);
// Spawn associate gameobject on this point (Horde/Alliance flags)
for (uint8 g = 0; g < WGWorkShopDataBase[i].nbgob; g++)
ws->AddGameObject(WGWorkShopDataBase[i].GameObjectData[g]);
// Create PvPCapturePoint
if (WGWorkShopDataBase[i].type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
{
ws->ChangeControl(GetAttackerTeam(), true); // Update control of this point
// Create Object
BfCapturePointWG *workshop = new BfCapturePointWG(this, GetAttackerTeam());
// Spawn gameobject associate (see in OnGameObjectCreate, of OutdoorPvP for see association)
workshop->SetCapturePointData(WGWorkShopDataBase[i].CapturePoint.entryh, 571,
WGWorkShopDataBase[i].CapturePoint.x, WGWorkShopDataBase[i].CapturePoint.y, WGWorkShopDataBase[i].CapturePoint.z, 0);
workshop->LinkToWorkShop(ws); // Link our point to the capture point (for faction changement)
AddCapturePoint(workshop); // Add this capture point to list for update this (view in Update() of OutdoorPvP)
}
else else
ws->ChangeControl(GetDefenderTeam(), true); // Update control of this point (Keep workshop= to deffender team) workshop->ChangeControl(GetDefenderTeam(), true);
WorkShopList.insert(ws); //Note: Capture point is added once the gameobject is created.
WorkshopsList.insert(workshop);
} }
// Spawning npc in keep // Spawning npc in keep
for (uint8 i = 0; i < WG_MAX_KEEP_NPC; i++) for (uint8 i = 0; i < WG_MAX_KEEP_NPC; i++)
{ {
@@ -285,7 +269,7 @@ void BattlefieldWG::OnBattleStart()
m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF] = 0; m_Data32[BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF] = 0;
// Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base) // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base)
for (WorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
{ {
if (*itr) if (*itr)
(*itr)->UpdateGraveYardAndWorkshop(); (*itr)->UpdateGraveYardAndWorkshop();
@@ -320,13 +304,13 @@ void BattlefieldWG::UpdateCounterVehicle(bool init)
m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] = 0; m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] = 0;
m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] = 0; m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] = 0;
for (WorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
{ {
if (BfWGWorkShopData* workshop = *itr) if (WGWorkshop* workshop = (*itr))
{ {
if (workshop->m_TeamControl == TEAM_ALLIANCE) if (workshop->teamControl == TEAM_ALLIANCE)
m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] = m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] + 4; m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] = m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_A] + 4;
else if (workshop->m_TeamControl == TEAM_HORDE) else if (workshop->teamControl == TEAM_HORDE)
m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] = m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] + 4; m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] = m_Data32[BATTLEFIELD_WG_DATA_MAX_VEHICLE_H] + 4;
} }
} }
@@ -408,7 +392,7 @@ void BattlefieldWG::OnBattleEnd(bool endbytimer)
// Saving data // Saving data
for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr)
(*itr)->Save(); (*itr)->Save();
for (WorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
(*itr)->Save(); (*itr)->Save();
uint32 WinHonor = 0; uint32 WinHonor = 0;
@@ -702,6 +686,52 @@ void BattlefieldWG::OnCreatureRemove(Creature* creature)
} }
} }
void BattlefieldWG::OnGameObjectCreate(GameObject* go)
{
bool isWorkshop = false;
uint8 workshopId = 0;
switch (go->GetEntry())
{
case BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NE:
isWorkshop = true;
workshopId = BATTLEFIELD_WG_WORKSHOP_NE;
break;
case BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NW:
isWorkshop = true;
workshopId = BATTLEFIELD_WG_WORKSHOP_NW;
break;
case BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SE:
isWorkshop = true;
workshopId = BATTLEFIELD_WG_WORKSHOP_SE;
break;
case BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SW:
isWorkshop = true;
workshopId = BATTLEFIELD_WG_WORKSHOP_SW;
break;
}
if (isWorkshop)
{
for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
{
if (WGWorkshop* workshop = (*itr))
{
if (workshop->workshopId == workshopId)
{
BfCapturePointWG* capturePoint = new BfCapturePointWG(this, GetAttackerTeam());
capturePoint->SetCapturePointData(go);
capturePoint->LinkToWorkShop(workshop);
AddCapturePoint(capturePoint);
break;
}
}
}
}
}
// Called when player kill a unit in wg zone // Called when player kill a unit in wg zone
void BattlefieldWG::HandleKill(Player* killer, Unit* victim) void BattlefieldWG::HandleKill(Player* killer, Unit* victim)
{ {
@@ -924,12 +954,12 @@ uint32 BattlefieldWG::GetData(uint32 data)
// Method sending worldsate to player // Method sending worldsate to player
WorldPacket BattlefieldWG::BuildInitWorldStates() WorldPacket BattlefieldWG::BuildInitWorldStates()
{ {
WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkShopList.size() * 8))); WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8)));
data << uint32(m_MapId); data << uint32(m_MapId);
data << uint32(m_ZoneId); data << uint32(m_ZoneId);
data << uint32(0); data << uint32(0);
data << uint16(4 + 2 + 4 + BuildingsInZone.size() + WorkShopList.size()); data << uint16(4 + 2 + 4 + BuildingsInZone.size() + WorkshopsList.size());
data << uint32(BATTLEFIELD_WG_WORLD_STATE_ATTACKER) << uint32(GetAttackerTeam()); data << uint32(BATTLEFIELD_WG_WORLD_STATE_ATTACKER) << uint32(GetAttackerTeam());
data << uint32(BATTLEFIELD_WG_WORLD_STATE_DEFENDER) << uint32(GetDefenderTeam()); data << uint32(BATTLEFIELD_WG_WORLD_STATE_DEFENDER) << uint32(GetDefenderTeam());
@@ -948,9 +978,12 @@ WorldPacket BattlefieldWG::BuildInitWorldStates()
{ {
data << (*itr)->m_WorldState << (*itr)->m_State; data << (*itr)->m_WorldState << (*itr)->m_State;
} }
for (WorkShop::const_iterator itr = WorkShopList.begin(); itr != WorkShopList.end(); ++itr) for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr)
{ {
data << (*itr)->m_WorldState << (*itr)->m_State; if (!*itr)
continue;
data << WorkshopsData[(*itr)->workshopId].worldstate << (*itr)->state;
} }
return data; return data;
} }
+111 -220
View File
@@ -36,11 +36,11 @@ class BattlefieldWG;
class BfCapturePointWG; class BfCapturePointWG;
struct BfWGGameObjectBuilding; struct BfWGGameObjectBuilding;
struct BfWGWorkShopData; struct WGWorkshop;
typedef std::set<GameObject *>GameObjectSet; typedef std::set<GameObject *>GameObjectSet;
typedef std::set<BfWGGameObjectBuilding *> GameObjectBuilding; typedef std::set<BfWGGameObjectBuilding *> GameObjectBuilding;
typedef std::set<BfWGWorkShopData *> WorkShop; typedef std::set<WGWorkshop*> Workshop;
//typedef std::set<BfCapturePointWG *> CapturePointSet; unused ? //typedef std::set<BfCapturePointWG *> CapturePointSet; unused ?
typedef std::set<Group *> GroupSet; typedef std::set<Group *> GroupSet;
@@ -260,9 +260,9 @@ const BfWGCoordGY WGGraveYard[BATTLEFIELD_WG_GY_MAX] = {
class BfCapturePointWG : public BfCapturePoint class BfCapturePointWG : public BfCapturePoint
{ {
public: public:
BfCapturePointWG(BattlefieldWG *bf, TeamId control); BfCapturePointWG(BattlefieldWG* bf, TeamId control);
void LinkToWorkShop(BfWGWorkShopData *ws) void LinkToWorkShop(WGWorkshop* ws)
{ {
m_WorkShop = ws; m_WorkShop = ws;
} }
@@ -274,7 +274,7 @@ class BfCapturePointWG : public BfCapturePoint
} }
protected: protected:
BfWGWorkShopData *m_WorkShop; WGWorkshop *m_WorkShop;
}; };
/*######################### /*#########################
@@ -361,6 +361,8 @@ class BattlefieldWG : public Battlefield
*/ */
void OnCreatureRemove(Creature* creature); void OnCreatureRemove(Creature* creature);
void OnGameObjectCreate(GameObject* go);
/** /**
* \brief Called when a wall/tower is broken * \brief Called when a wall/tower is broken
* -Update quest * -Update quest
@@ -436,7 +438,7 @@ class BattlefieldWG : public Battlefield
GameObjectBuilding BuildingsInZone; GameObjectBuilding BuildingsInZone;
GuidSet KeepCreature[2]; GuidSet KeepCreature[2];
GuidSet OutsideCreature[2]; GuidSet OutsideCreature[2];
WorkShop WorkShopList; Workshop WorkshopsList;
GuidSet CanonList; GuidSet CanonList;
GameObjectSet DefenderPortalList; GameObjectSet DefenderPortalList;
GameObjectSet m_KeepGameObject[2]; GameObjectSet m_KeepGameObject[2];
@@ -471,7 +473,7 @@ enum eWGGameObjectState
BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY, BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY,
}; };
enum eWGWorkShopType enum WGWorkshopId
{ {
BATTLEFIELD_WG_WORKSHOP_NE, BATTLEFIELD_WG_WORKSHOP_NE,
BATTLEFIELD_WG_WORKSHOP_NW, BATTLEFIELD_WG_WORKSHOP_NW,
@@ -481,6 +483,15 @@ enum eWGWorkShopType
BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, BATTLEFIELD_WG_WORKSHOP_KEEP_EAST,
}; };
enum WGWorldstate
{
WORLDSTATE_WORKSHOP_NE = 3701,
WORLDSTATE_WORKSHOP_NW = 3700,
WORLDSTATE_WORKSHOP_SE = 3703,
WORLDSTATE_WORKSHOP_SW = 3702,
WORLDSTATE_WORKSHOP_K_W = 3698,
WORLDSTATE_WORKSHOP_K_E = 3699
};
enum eWGTeamControl enum eWGTeamControl
{ {
BATTLEFIELD_WG_TEAM_ALLIANCE, BATTLEFIELD_WG_TEAM_ALLIANCE,
@@ -518,7 +529,7 @@ enum eWGText
// *INDENT-ON* // *INDENT-ON*
}; };
enum eWGObject enum WGObject
{ {
// *INDENT-OFF* // *INDENT-OFF*
BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NE = 190475, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NE = 190475,
@@ -1100,219 +1111,29 @@ const BfWGTurretData TowerTurret[WG_MAX_TOWERTURRET] =
// *****************WorkShop Data & Element***************** // *****************WorkShop Data & Element*****************
// ********************************************************* // *********************************************************
struct BfWGWorkShopDataBase
{
uint32 entry;
uint32 worldstate;
uint32 type;
uint32 nameid;
BfWGObjectPosition CapturePoint;
uint8 nbcreature;
BfWGObjectPosition CreatureData[10];
uint8 nbgob;
BfWGObjectPosition GameObjectData[10];
};
// 6 engineer per faction in sql / 6 engineer per faction in header
#define WG_MAX_WORKSHOP 6 #define WG_MAX_WORKSHOP 6
const BfWGWorkShopDataBase WGWorkShopDataBase[WG_MAX_WORKSHOP] = {
{ struct WGWorkshopData
192031, {
3701, uint8 id;
BATTLEFIELD_WG_WORKSHOP_NE, uint32 worldstate;
BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE, uint32 text;
{ 4949.344238f, 2432.585693f, 320.176971f, 1.386214f, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NE, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NE }, };
1,
{ const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] =
{ 4939.759766f, 2389.060059f, 326.153015f, 3.263770f, 30400, 30499 }, {
{ 0, 0, 0, 0, 0, 0 }, // NE
{ 0, 0, 0, 0, 0, 0 }, {BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE},
{ 0, 0, 0, 0, 0, 0 }, // NW
{ 0, 0, 0, 0, 0, 0 }, {BATTLEFIELD_WG_WORKSHOP_NW, WORLDSTATE_WORKSHOP_NW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW},
{ 0, 0, 0, 0, 0, 0 }, // SE
{ 0, 0, 0, 0, 0, 0 }, {BATTLEFIELD_WG_WORKSHOP_SE, WORLDSTATE_WORKSHOP_SE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE},
{ 0, 0, 0, 0, 0, 0 }, // SW
{ 0, 0, 0, 0, 0, 0 }, {BATTLEFIELD_WG_WORKSHOP_SW, WORLDSTATE_WORKSHOP_SW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW},
{ 0, 0, 0, 0, 0, 0 } // KEEP WEST - It can't be taken, so it doesn't have a textid
}, {BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, NULL},
6, // KEEP EAST - It can't be taken, so it doesn't have a textid
{ {BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, WORLDSTATE_WORKSHOP_K_E, NULL}
{ 4778.189f, 2438.060f, 345.644f, -2.940f, 192280, 192274 },
{ 5024.569f, 2532.750f, 344.023f, -1.937f, 192280, 192274 },
{ 4811.399f, 2441.899f, 358.207f, -2.003f, 192435, 192406 },
{ 4805.669f, 2407.479f, 358.191f, 1.780f, 192435, 192406 },
{ 5004.350f, 2486.360f, 358.449f, 2.172f, 192435, 192406 },
{ 4983.279f, 2503.090f, 358.177f, -0.427f, 192435, 192406 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
}
},
{
192030,
3700,
BATTLEFIELD_WG_WORKSHOP_NW,
BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW,
{ 4948.524414f, 3342.337891f, 376.875366f, 4.400566f, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NW, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_NW },
1,
{
{ 4964.890137f, 3383.060059f, 382.911011f, 6.126110f, 30400, 30499 },
{ 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, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
},
4,
{
{ 5006.339f, 3280.399f, 371.162f, 2.225f, 192280, 192274 },
{ 5041.609f, 3294.399f, 382.149f, -1.631f, 192434, 192406 },
{ 4857.970f, 3335.439f, 368.881f, -2.945f, 192280, 192274 },
{ 4855.629f, 3297.620f, 376.739f, -3.132f, 192435, 192406 },
{ 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, 0, 0, 0, 0, 0 }
}
},
{
192033,
3703,
BATTLEFIELD_WG_WORKSHOP_SE,
BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE,
{ 4398.076660f, 2356.503662f, 376.190491f, 0.525406f, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SE, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SE },
9,
{
{ 4417.919922f, 2331.239990f, 370.919006f, 5.846850f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4418.609863f, 2355.290039f, 372.490997f, 6.021390f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4391.669922f, 2300.610107f, 374.743011f, 4.921830f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4349.120117f, 2299.280029f, 374.743011f, 4.904380f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4333.549805f, 2333.909912f, 376.156006f, 0.973007f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4413.430176f, 2393.449951f, 376.359985f, 1.064650f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4388.129883f, 2411.979980f, 374.743011f, 1.640610f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4349.540039f, 2411.260010f, 374.743011f, 2.059490f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4357.669922f, 2357.989990f, 382.006989f, 1.675520f, 30400, 30499 },
{ 0, 0, 0, 0, 0, 0 }
},
2,
{
{ 4417.250f, 2301.139f, 377.213f, 0.026f, 192435, 192406 },
{ 4417.939f, 2324.810f, 371.576f, 3.080f, 192280, 192274 },
{ 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, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
}
},
{
192032,
3702,
BATTLEFIELD_WG_WORKSHOP_SW,
BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW,
{ 4390.776367f, 3304.094482f, 372.429077f, 6.097023f, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SW, BATTLEFIELD_WG_GAMEOBJECT_FACTORY_BANNER_SW },
9,
{
{ 4425.290039f, 3291.510010f, 370.773987f, 0.122173f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4424.609863f, 3321.100098f, 369.800995f, 0.034907f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4392.399902f, 3354.610107f, 369.597992f, 1.570800f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4370.979980f, 3355.020020f, 371.196991f, 1.675520f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4394.660156f, 3231.989990f, 369.721985f, 4.625120f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4366.979980f, 3233.560059f, 371.584991f, 4.939280f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4337.029785f, 3261.659912f, 373.524994f, 3.263770f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4323.779785f, 3287.100098f, 378.894989f, 2.862340f, BATTLEFIELD_WG_NPC_GUARD_H, BATTLEFIELD_WG_NPC_GUARD_A },
{ 4354.149902f, 3312.820068f, 378.045990f, 1.675520f, 30400, 30499 },
{ 0, 0, 0, 0, 0, 0 }
},
3,
{
{ 4438.299f, 3361.080f, 371.567f, -0.017f, 192435, 192406 },
{ 4448.169f, 3235.629f, 370.411f, -1.562f, 192435, 192406 },
{ 4424.149f, 3286.540f, 371.545f, 3.124f, 192280, 192274 },
{ 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, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
}
},
{
192028,
3698,
BATTLEFIELD_WG_WORKSHOP_KEEP_WEST,
0,
{ 0, 0, 0, 0, 0, 0 },
1,
{
{ 5392.910156f, 2975.260010f, 415.222992f, 4.555310f, 30400, 30499 },
{ 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, 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, 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, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
}
},
{
192029,
3699,
BATTLEFIELD_WG_WORKSHOP_KEEP_EAST,
0,
{ 0, 0, 0, 0, 0, 0 },
1,
{
{ 5391.609863f, 2707.719971f, 415.050995f, 4.555310f, 30400, 30499 },
{ 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, 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, 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, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 }
}
}
}; };
// ******************************************************************** // ********************************************************************
@@ -1771,6 +1592,76 @@ struct BfWGGameObjectBuilding
} }
}; };
struct WGWorkshop
{
// pointer to the battlefield that the workshop belongs to
BattlefieldWG* bf;
// id of the workshop, useful to retrieve data of the WorkshopsData array
uint8 workshopId;
// team that controls the node
uint8 teamControl;
// for worldstate
uint32 state;
WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId)
{
ASSERT(bf);
ASSERT(_workshopId < WG_MAX_WORKSHOP);
bf = _bf;
workshopId = _workshopId;
}
void ChangeControl(uint8 team, bool init /* for first call in setup */ )
{
switch (team)
{
case BATTLEFIELD_WG_TEAM_NEUTRAL:
{
// Send warning message to all player to inform a faction attack to a workshop
// alliance / horde attacking a workshop
bf->SendWarningToAllInZone(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1);
break;
}
case BATTLEFIELD_WG_TEAM_ALLIANCE:
case BATTLEFIELD_WG_TEAM_HORDE:
{
// Updating worldstate
state = team == BATTLEFIELD_WG_TEAM_ALLIANCE ? BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT : BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT;
bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state);
// Warning message
if (!init) // workshop taken - alliance
bf->SendWarningToAllInZone(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text+1);
// Found associate graveyard and update it
if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
if (bf->GetGraveYardById(workshopId))
bf->GetGraveYardById(workshopId)->ChangeControl(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE);
teamControl = team;
break;
}
}
if (!init)
bf->UpdateCounterVehicle(false);
}
void UpdateGraveYardAndWorkshop()
{
if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST)
bf->GetGraveYardById(workshopId)->ChangeControl(TeamId(teamControl));
else
ChangeControl(bf->GetDefenderTeam(), true);
}
void Save()
{
sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state);
}
};
// Structure for the 6 workshop // Structure for the 6 workshop
struct BfWGWorkShopData struct BfWGWorkShopData
{ {