BF/Wintergrasp: Removed harcoded Workshops related spawns, db data is used now.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ 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;}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
@@ -262,7 +262,7 @@ 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,
|
uint8 id;
|
||||||
3701,
|
uint32 worldstate;
|
||||||
BATTLEFIELD_WG_WORKSHOP_NE,
|
uint32 text;
|
||||||
BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE,
|
};
|
||||||
{ 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 },
|
// 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
|
||||||
{ 0, 0, 0, 0, 0, 0 }
|
{BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, NULL},
|
||||||
},
|
// KEEP EAST - It can't be taken, so it doesn't have a textid
|
||||||
6,
|
{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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user