mirror of
https://github.com/mangosfour/server.git
synced 2025-12-17 07:37:03 +00:00
changed battleground code for every bg
BattleGroundWS: changed warsong code for db-move BattleGroundAB: changed arathi basin code for db-move BattleGroundEY: changed eye of the storm code for db move also some cleanup like: renaming POINTS_MAX to NODES_MAX renamed "m_" -> should only be used for classmember BattleGroundAA: changed arena code for db move
This commit is contained in:
parent
c77683afbb
commit
d249e9550a
12 changed files with 278 additions and 867 deletions
|
|
@ -31,7 +31,6 @@ BattleGroundAB::BattleGroundAB()
|
||||||
{
|
{
|
||||||
m_BuffChange = true;
|
m_BuffChange = true;
|
||||||
m_BgObjects.resize(BG_AB_OBJECT_MAX);
|
m_BgObjects.resize(BG_AB_OBJECT_MAX);
|
||||||
m_BgCreatures.resize(BG_AB_ALL_NODES_COUNT);
|
|
||||||
|
|
||||||
m_StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_AB_START_TWO_MINUTES;
|
m_StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_AB_START_TWO_MINUTES;
|
||||||
m_StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_AB_START_ONE_MINUTE;
|
m_StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_AB_START_ONE_MINUTE;
|
||||||
|
|
@ -51,7 +50,7 @@ void BattleGroundAB::Update(uint32 diff)
|
||||||
{
|
{
|
||||||
int team_points[BG_TEAMS_COUNT] = { 0, 0 };
|
int team_points[BG_TEAMS_COUNT] = { 0, 0 };
|
||||||
|
|
||||||
for (int node = 0; node < BG_AB_DYNAMIC_NODES_COUNT; ++node)
|
for (int node = 0; node < BG_AB_NODES_MAX; ++node)
|
||||||
{
|
{
|
||||||
// 3 sec delay to spawn new banner instead previous despawned one
|
// 3 sec delay to spawn new banner instead previous despawned one
|
||||||
if (m_BannerTimers[node].timer)
|
if (m_BannerTimers[node].timer)
|
||||||
|
|
@ -77,8 +76,6 @@ void BattleGroundAB::Update(uint32 diff)
|
||||||
uint8 teamIndex = m_Nodes[node]-1;
|
uint8 teamIndex = m_Nodes[node]-1;
|
||||||
m_prevNodes[node] = m_Nodes[node];
|
m_prevNodes[node] = m_Nodes[node];
|
||||||
m_Nodes[node] += 2;
|
m_Nodes[node] += 2;
|
||||||
// burn current contested banner
|
|
||||||
_DelBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex);
|
|
||||||
// create new occupied banner
|
// create new occupied banner
|
||||||
_CreateBanner(node, BG_AB_NODE_TYPE_OCCUPIED, teamIndex, true);
|
_CreateBanner(node, BG_AB_NODE_TYPE_OCCUPIED, teamIndex, true);
|
||||||
_SendNodeUpdate(node);
|
_SendNodeUpdate(node);
|
||||||
|
|
@ -87,13 +84,11 @@ void BattleGroundAB::Update(uint32 diff)
|
||||||
|
|
||||||
if (teamIndex == 0)
|
if (teamIndex == 0)
|
||||||
{
|
{
|
||||||
// FIXME: team and node names not localized
|
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_ALLIANCE,NULL,LANG_BG_AB_ALLY,_GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_ALLIANCE,NULL,LANG_BG_AB_ALLY,_GetNodeNameId(node));
|
||||||
PlaySoundToAll(BG_AB_SOUND_NODE_CAPTURED_ALLIANCE);
|
PlaySoundToAll(BG_AB_SOUND_NODE_CAPTURED_ALLIANCE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// FIXME: team and node names not localized
|
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_HORDE,NULL,LANG_BG_AB_HORDE,_GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_HORDE,NULL,LANG_BG_AB_HORDE,_GetNodeNameId(node));
|
||||||
PlaySoundToAll(BG_AB_SOUND_NODE_CAPTURED_HORDE);
|
PlaySoundToAll(BG_AB_SOUND_NODE_CAPTURED_HORDE);
|
||||||
}
|
}
|
||||||
|
|
@ -164,36 +159,20 @@ void BattleGroundAB::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundAB::StartingEventCloseDoors()
|
void BattleGroundAB::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
// despawn banners, auras and buffs
|
// despawn buffs
|
||||||
for (int obj = BG_AB_OBJECT_BANNER_NEUTRAL; obj < BG_AB_DYNAMIC_NODES_COUNT * 8; ++obj)
|
for (int i = 0; i < BG_AB_NODES_MAX * 3; ++i)
|
||||||
SpawnBGObject(m_BgObjects[obj], RESPAWN_ONE_DAY);
|
|
||||||
for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT * 3; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + i], RESPAWN_ONE_DAY);
|
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + i], RESPAWN_ONE_DAY);
|
||||||
|
|
||||||
// Starting doors
|
|
||||||
DoorClose(m_BgObjects[BG_AB_OBJECT_GATE_A]);
|
|
||||||
DoorClose(m_BgObjects[BG_AB_OBJECT_GATE_H]);
|
|
||||||
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_GATE_A], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_GATE_H], RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
// Starting base spirit guides
|
|
||||||
_NodeOccupied(BG_AB_SPIRIT_ALIANCE,ALLIANCE);
|
|
||||||
_NodeOccupied(BG_AB_SPIRIT_HORDE,HORDE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundAB::StartingEventOpenDoors()
|
void BattleGroundAB::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
// spawn neutral banners
|
for (int i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
for (int banner = BG_AB_OBJECT_BANNER_NEUTRAL, i = 0; i < 5; banner += 8, ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[banner], RESPAWN_IMMEDIATELY);
|
|
||||||
for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
|
||||||
{
|
{
|
||||||
//randomly select buff to spawn
|
//randomly select buff to spawn
|
||||||
uint8 buff = urand(0, 2);
|
uint8 buff = urand(0, 2);
|
||||||
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + buff + i * 3], RESPAWN_IMMEDIATELY);
|
SpawnBGObject(m_BgObjects[BG_AB_OBJECT_SPEEDBUFF_STABLES + buff + i * 3], RESPAWN_IMMEDIATELY);
|
||||||
}
|
}
|
||||||
DoorOpen(m_BgObjects[BG_AB_OBJECT_GATE_A]);
|
OpenDoorEvent(BG_EVENT_DOOR);
|
||||||
DoorOpen(m_BgObjects[BG_AB_OBJECT_GATE_H]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundAB::AddPlayer(Player *plr)
|
void BattleGroundAB::AddPlayer(Player *plr)
|
||||||
|
|
@ -257,27 +236,12 @@ void BattleGroundAB::_CreateBanner(uint8 node, uint8 type, uint8 teamIndex, bool
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 obj = node*8 + type + teamIndex;
|
// cause the node-type is in the generic form
|
||||||
|
// please see in the headerfile for the ids
|
||||||
|
if (type != BG_AB_NODE_TYPE_NEUTRAL)
|
||||||
|
type += teamIndex;
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[obj], RESPAWN_IMMEDIATELY);
|
SpawnEvent(node, type, true); // will automaticly despawn other events
|
||||||
|
|
||||||
// handle aura with banner
|
|
||||||
if (!type)
|
|
||||||
return;
|
|
||||||
obj = node * 8 + ((type == BG_AB_NODE_TYPE_OCCUPIED) ? (5 + teamIndex) : 7);
|
|
||||||
SpawnBGObject(m_BgObjects[obj], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BattleGroundAB::_DelBanner(uint8 node, uint8 type, uint8 teamIndex)
|
|
||||||
{
|
|
||||||
uint8 obj = node*8 + type + teamIndex;
|
|
||||||
SpawnBGObject(m_BgObjects[obj], RESPAWN_ONE_DAY);
|
|
||||||
|
|
||||||
// handle aura with banner
|
|
||||||
if (!type)
|
|
||||||
return;
|
|
||||||
obj = node * 8 + ((type == BG_AB_NODE_TYPE_OCCUPIED) ? (5 + teamIndex) : 7);
|
|
||||||
SpawnBGObject(m_BgObjects[obj], RESPAWN_ONE_DAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 BattleGroundAB::_GetNodeNameId(uint8 node)
|
int32 BattleGroundAB::_GetNodeNameId(uint8 node)
|
||||||
|
|
@ -300,17 +264,17 @@ void BattleGroundAB::FillInitialWorldStates(WorldPacket& data)
|
||||||
const uint8 plusArray[] = {0, 2, 3, 0, 1};
|
const uint8 plusArray[] = {0, 2, 3, 0, 1};
|
||||||
|
|
||||||
// Node icons
|
// Node icons
|
||||||
for (uint8 node = 0; node < BG_AB_DYNAMIC_NODES_COUNT; ++node)
|
for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node)
|
||||||
data << uint32(BG_AB_OP_NODEICONS[node]) << uint32((m_Nodes[node]==0)?1:0);
|
data << uint32(BG_AB_OP_NODEICONS[node]) << uint32((m_Nodes[node]==0)?1:0);
|
||||||
|
|
||||||
// Node occupied states
|
// Node occupied states
|
||||||
for (uint8 node = 0; node < BG_AB_DYNAMIC_NODES_COUNT; ++node)
|
for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node)
|
||||||
for (uint8 i = 1; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (uint8 i = 1; i < BG_AB_NODES_MAX; ++i)
|
||||||
data << uint32(BG_AB_OP_NODESTATES[node] + plusArray[i]) << uint32((m_Nodes[node]==i)?1:0);
|
data << uint32(BG_AB_OP_NODESTATES[node] + plusArray[i]) << uint32((m_Nodes[node]==i)?1:0);
|
||||||
|
|
||||||
// How many bases each team owns
|
// How many bases each team owns
|
||||||
uint8 ally = 0, horde = 0;
|
uint8 ally = 0, horde = 0;
|
||||||
for (uint8 node = 0; node < BG_AB_DYNAMIC_NODES_COUNT; ++node)
|
for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node)
|
||||||
if (m_Nodes[node] == BG_AB_NODE_STATUS_ALLY_OCCUPIED)
|
if (m_Nodes[node] == BG_AB_NODE_STATUS_ALLY_OCCUPIED)
|
||||||
++ally;
|
++ally;
|
||||||
else if (m_Nodes[node] == BG_AB_NODE_STATUS_HORDE_OCCUPIED)
|
else if (m_Nodes[node] == BG_AB_NODE_STATUS_HORDE_OCCUPIED)
|
||||||
|
|
@ -343,7 +307,7 @@ void BattleGroundAB::_SendNodeUpdate(uint8 node)
|
||||||
|
|
||||||
// How many bases each team owns
|
// How many bases each team owns
|
||||||
uint8 ally = 0, horde = 0;
|
uint8 ally = 0, horde = 0;
|
||||||
for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
if (m_Nodes[i] == BG_AB_NODE_STATUS_ALLY_OCCUPIED)
|
if (m_Nodes[i] == BG_AB_NODE_STATUS_ALLY_OCCUPIED)
|
||||||
++ally;
|
++ally;
|
||||||
else if (m_Nodes[i] == BG_AB_NODE_STATUS_HORDE_OCCUPIED)
|
else if (m_Nodes[i] == BG_AB_NODE_STATUS_HORDE_OCCUPIED)
|
||||||
|
|
@ -355,12 +319,8 @@ void BattleGroundAB::_SendNodeUpdate(uint8 node)
|
||||||
|
|
||||||
void BattleGroundAB::_NodeOccupied(uint8 node,Team team)
|
void BattleGroundAB::_NodeOccupied(uint8 node,Team team)
|
||||||
{
|
{
|
||||||
if (!AddSpiritGuide(node, BG_AB_SpiritGuidePos[node][0], BG_AB_SpiritGuidePos[node][1], BG_AB_SpiritGuidePos[node][2], BG_AB_SpiritGuidePos[node][3], team))
|
|
||||||
sLog.outError("Failed to spawn spirit guide! point: %u, team: %u,", node, team);
|
|
||||||
// SpawnBGCreature(node,RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
uint8 capturedNodes = 0;
|
uint8 capturedNodes = 0;
|
||||||
for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i])
|
if (m_Nodes[node] == GetTeamIndexByTeamId(team) + BG_AB_NODE_TYPE_OCCUPIED && !m_NodeTimers[i])
|
||||||
++capturedNodes;
|
++capturedNodes;
|
||||||
|
|
@ -371,78 +331,39 @@ void BattleGroundAB::_NodeOccupied(uint8 node,Team team)
|
||||||
CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team);
|
CastSpellOnTeam(SPELL_AB_QUEST_REWARD_4_BASES, team);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundAB::_NodeDeOccupied(uint8 node)
|
|
||||||
{
|
|
||||||
if (node >= BG_AB_DYNAMIC_NODES_COUNT)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Those who are waiting to resurrect at this node are taken to the closest own node's graveyard
|
|
||||||
std::vector<uint64> ghost_list = m_ReviveQueue[m_BgCreatures[node]];
|
|
||||||
if (!ghost_list.empty())
|
|
||||||
{
|
|
||||||
WorldSafeLocsEntry const *ClosestGrave = NULL;
|
|
||||||
for (std::vector<uint64>::const_iterator itr = ghost_list.begin(); itr != ghost_list.end(); ++itr)
|
|
||||||
{
|
|
||||||
Player* plr = objmgr.GetPlayer(*itr);
|
|
||||||
if (!plr)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!ClosestGrave) // cache
|
|
||||||
ClosestGrave = GetClosestGraveYard(plr);
|
|
||||||
|
|
||||||
if (ClosestGrave)
|
|
||||||
plr->TeleportTo(GetMapId(), ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, plr->GetOrientation());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_BgCreatures[node])
|
|
||||||
DelCreature(node);
|
|
||||||
|
|
||||||
// buff object isn't despawned
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Invoked if a player used a banner as a gameobject */
|
/* Invoked if a player used a banner as a gameobject */
|
||||||
void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*target_obj*/)
|
void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* target_obj)
|
||||||
{
|
{
|
||||||
if (GetStatus() != STATUS_IN_PROGRESS)
|
if (GetStatus() != STATUS_IN_PROGRESS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint8 node = BG_AB_NODE_STABLES;
|
uint8 event = (sBattleGroundMgr.GetGameObjectEventIndex(target_obj->GetDBTableGUIDLow())).event1;
|
||||||
GameObject* obj=HashMapHolder<GameObject>::Find(m_BgObjects[node*8+7]);
|
if (event >= BG_AB_NODES_MAX) // not a node
|
||||||
while ( (node < BG_AB_DYNAMIC_NODES_COUNT) && ((!obj) || (!source->IsWithinDistInMap(obj,10))))
|
|
||||||
{
|
|
||||||
++node;
|
|
||||||
obj=HashMapHolder<GameObject>::Find(m_BgObjects[node*8+BG_AB_OBJECT_AURA_CONTESTED]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node == BG_AB_DYNAMIC_NODES_COUNT)
|
|
||||||
{
|
|
||||||
// this means our player isn't close to any of banners - maybe cheater ??
|
|
||||||
return;
|
return;
|
||||||
}
|
BG_AB_Nodes node = BG_AB_Nodes(event);
|
||||||
|
|
||||||
BattleGroundTeamId teamIndex = GetTeamIndexByTeamId(source->GetTeam());
|
BattleGroundTeamId teamIndex = GetTeamIndexByTeamId(source->GetTeam());
|
||||||
|
|
||||||
// Check if player really could use this banner, not cheated
|
// Check if player really could use this banner, not cheated
|
||||||
if (!(m_Nodes[node] == 0 || teamIndex == m_Nodes[node]%2))
|
if (!(m_Nodes[node] == 0 || teamIndex == m_Nodes[node] % 2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT);
|
source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT);
|
||||||
uint32 sound = 0;
|
uint32 sound = 0;
|
||||||
|
|
||||||
|
// TODO in the following code we should restructure a bit to avoid
|
||||||
|
// duplication (or maybe write functions?)
|
||||||
// If node is neutral, change to contested
|
// If node is neutral, change to contested
|
||||||
if (m_Nodes[node] == BG_AB_NODE_TYPE_NEUTRAL)
|
if (m_Nodes[node] == BG_AB_NODE_TYPE_NEUTRAL)
|
||||||
{
|
{
|
||||||
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
||||||
m_prevNodes[node] = m_Nodes[node];
|
m_prevNodes[node] = m_Nodes[node];
|
||||||
m_Nodes[node] = teamIndex + 1;
|
m_Nodes[node] = teamIndex + 1;
|
||||||
// burn current neutral banner
|
|
||||||
_DelBanner(node, BG_AB_NODE_TYPE_NEUTRAL, 0);
|
|
||||||
// create new contested banner
|
// create new contested banner
|
||||||
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
||||||
_SendNodeUpdate(node);
|
_SendNodeUpdate(node);
|
||||||
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
||||||
|
|
||||||
// FIXME: team and node names not localized
|
|
||||||
if (teamIndex == 0)
|
if (teamIndex == 0)
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_CLAIMED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node), LANG_BG_AB_ALLY);
|
SendMessage2ToAll(LANG_BG_AB_NODE_CLAIMED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node), LANG_BG_AB_ALLY);
|
||||||
else
|
else
|
||||||
|
|
@ -459,14 +380,11 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*targ
|
||||||
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
||||||
m_prevNodes[node] = m_Nodes[node];
|
m_prevNodes[node] = m_Nodes[node];
|
||||||
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_CONTESTED;
|
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_CONTESTED;
|
||||||
// burn current contested banner
|
|
||||||
_DelBanner(node, BG_AB_NODE_TYPE_CONTESTED, !teamIndex);
|
|
||||||
// create new contested banner
|
// create new contested banner
|
||||||
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
||||||
_SendNodeUpdate(node);
|
_SendNodeUpdate(node);
|
||||||
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
||||||
|
|
||||||
// FIXME: node names not localized
|
|
||||||
if (teamIndex == BG_TEAM_ALLIANCE)
|
if (teamIndex == BG_TEAM_ALLIANCE)
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
||||||
else
|
else
|
||||||
|
|
@ -478,15 +396,12 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*targ
|
||||||
UpdatePlayerScore(source, SCORE_BASES_DEFENDED, 1);
|
UpdatePlayerScore(source, SCORE_BASES_DEFENDED, 1);
|
||||||
m_prevNodes[node] = m_Nodes[node];
|
m_prevNodes[node] = m_Nodes[node];
|
||||||
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_OCCUPIED;
|
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_OCCUPIED;
|
||||||
// burn current contested banner
|
|
||||||
_DelBanner(node, BG_AB_NODE_TYPE_CONTESTED, !teamIndex);
|
|
||||||
// create new occupied banner
|
// create new occupied banner
|
||||||
_CreateBanner(node, BG_AB_NODE_TYPE_OCCUPIED, teamIndex, true);
|
_CreateBanner(node, BG_AB_NODE_TYPE_OCCUPIED, teamIndex, true);
|
||||||
_SendNodeUpdate(node);
|
_SendNodeUpdate(node);
|
||||||
m_NodeTimers[node] = 0;
|
m_NodeTimers[node] = 0;
|
||||||
_NodeOccupied(node,(teamIndex == BG_TEAM_ALLIANCE) ? ALLIANCE:HORDE);
|
_NodeOccupied(node,(teamIndex == BG_TEAM_ALLIANCE) ? ALLIANCE:HORDE);
|
||||||
|
|
||||||
// FIXME: node names not localized
|
|
||||||
if (teamIndex == BG_TEAM_ALLIANCE)
|
if (teamIndex == BG_TEAM_ALLIANCE)
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_DEFENDED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_DEFENDED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
||||||
else
|
else
|
||||||
|
|
@ -500,15 +415,11 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*targ
|
||||||
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
UpdatePlayerScore(source, SCORE_BASES_ASSAULTED, 1);
|
||||||
m_prevNodes[node] = m_Nodes[node];
|
m_prevNodes[node] = m_Nodes[node];
|
||||||
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_CONTESTED;
|
m_Nodes[node] = teamIndex + BG_AB_NODE_TYPE_CONTESTED;
|
||||||
// burn current occupied banner
|
|
||||||
_DelBanner(node, BG_AB_NODE_TYPE_OCCUPIED, !teamIndex);
|
|
||||||
// create new contested banner
|
// create new contested banner
|
||||||
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
_CreateBanner(node, BG_AB_NODE_TYPE_CONTESTED, teamIndex, true);
|
||||||
_SendNodeUpdate(node);
|
_SendNodeUpdate(node);
|
||||||
_NodeDeOccupied(node);
|
|
||||||
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;
|
||||||
|
|
||||||
// FIXME: node names not localized
|
|
||||||
if (teamIndex == BG_TEAM_ALLIANCE)
|
if (teamIndex == BG_TEAM_ALLIANCE)
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED,CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
|
||||||
else
|
else
|
||||||
|
|
@ -520,7 +431,6 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*targ
|
||||||
// If node is occupied again, send "X has taken the Y" msg.
|
// If node is occupied again, send "X has taken the Y" msg.
|
||||||
if (m_Nodes[node] >= BG_AB_NODE_TYPE_OCCUPIED)
|
if (m_Nodes[node] >= BG_AB_NODE_TYPE_OCCUPIED)
|
||||||
{
|
{
|
||||||
// FIXME: team and node names not localized
|
|
||||||
if (teamIndex == BG_TEAM_ALLIANCE)
|
if (teamIndex == BG_TEAM_ALLIANCE)
|
||||||
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL, LANG_BG_AB_ALLY, _GetNodeNameId(node));
|
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN,CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL, LANG_BG_AB_ALLY, _GetNodeNameId(node));
|
||||||
else
|
else
|
||||||
|
|
@ -531,31 +441,8 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player *source, GameObject* /*targ
|
||||||
|
|
||||||
bool BattleGroundAB::SetupBattleGround()
|
bool BattleGroundAB::SetupBattleGround()
|
||||||
{
|
{
|
||||||
for (int i = 0 ; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
|
||||||
{
|
|
||||||
if (!AddObject(BG_AB_OBJECT_BANNER_NEUTRAL + 8*i,BG_AB_OBJECTID_NODE_BANNER_0 + i,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_BANNER_CONT_A + 8*i,BG_AB_OBJECTID_BANNER_CONT_A,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_BANNER_CONT_H + 8*i,BG_AB_OBJECTID_BANNER_CONT_H,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_BANNER_ALLY + 8*i,BG_AB_OBJECTID_BANNER_A,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_BANNER_HORDE + 8*i,BG_AB_OBJECTID_BANNER_H,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_AURA_ALLY + 8*i,BG_AB_OBJECTID_AURA_A,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_AURA_HORDE + 8*i,BG_AB_OBJECTID_AURA_H,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_AURA_CONTESTED + 8*i,BG_AB_OBJECTID_AURA_C,BG_AB_NodePositions[i][0],BG_AB_NodePositions[i][1],BG_AB_NodePositions[i][2],BG_AB_NodePositions[i][3], 0, 0, sin(BG_AB_NodePositions[i][3]/2), cos(BG_AB_NodePositions[i][3]/2),RESPAWN_ONE_DAY)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundAB: Failed to spawn some object BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!AddObject(BG_AB_OBJECT_GATE_A,BG_AB_OBJECTID_GATE_A,BG_AB_DoorPositions[0][0],BG_AB_DoorPositions[0][1],BG_AB_DoorPositions[0][2],BG_AB_DoorPositions[0][3],BG_AB_DoorPositions[0][4],BG_AB_DoorPositions[0][5],BG_AB_DoorPositions[0][6],BG_AB_DoorPositions[0][7],RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_AB_OBJECT_GATE_H,BG_AB_OBJECTID_GATE_H,BG_AB_DoorPositions[1][0],BG_AB_DoorPositions[1][1],BG_AB_DoorPositions[1][2],BG_AB_DoorPositions[1][3],BG_AB_DoorPositions[1][4],BG_AB_DoorPositions[1][5],BG_AB_DoorPositions[1][6],BG_AB_DoorPositions[1][7],RESPAWN_IMMEDIATELY)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundAB: Failed to spawn door object BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//buffs
|
//buffs
|
||||||
for (int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (int i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
if (!AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i, Buff_Entries[0], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, sin(BG_AB_BuffPositions[i][3]/2), cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
|
if (!AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i, Buff_Entries[0], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, sin(BG_AB_BuffPositions[i][3]/2), cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
|
||||||
|| !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 1, Buff_Entries[1], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, sin(BG_AB_BuffPositions[i][3]/2), cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
|
|| !AddObject(BG_AB_OBJECT_SPEEDBUFF_STABLES + 3 * i + 1, Buff_Entries[1], BG_AB_BuffPositions[i][0], BG_AB_BuffPositions[i][1], BG_AB_BuffPositions[i][2], BG_AB_BuffPositions[i][3], 0, 0, sin(BG_AB_BuffPositions[i][3]/2), cos(BG_AB_BuffPositions[i][3]/2), RESPAWN_ONE_DAY)
|
||||||
|
|
@ -572,32 +459,31 @@ void BattleGroundAB::Reset()
|
||||||
//call parent's class reset
|
//call parent's class reset
|
||||||
BattleGround::Reset();
|
BattleGround::Reset();
|
||||||
|
|
||||||
m_TeamScores[BG_TEAM_ALLIANCE] = 0;
|
for (uint8 i = 0; i <= BG_TEAMS_COUNT; ++i)
|
||||||
m_TeamScores[BG_TEAM_HORDE] = 0;
|
{
|
||||||
m_lastTick[BG_TEAM_ALLIANCE] = 0;
|
m_TeamScores[i] = 0;
|
||||||
m_lastTick[BG_TEAM_HORDE] = 0;
|
m_lastTick[i] = 0;
|
||||||
m_HonorScoreTics[BG_TEAM_ALLIANCE] = 0;
|
m_HonorScoreTics[i] = 0;
|
||||||
m_HonorScoreTics[BG_TEAM_HORDE] = 0;
|
m_ReputationScoreTics[i] = 0;
|
||||||
m_ReputationScoreTics[BG_TEAM_ALLIANCE] = 0;
|
m_TeamScores500Disadvantage[i] = false;
|
||||||
m_ReputationScoreTics[BG_TEAM_HORDE] = 0;
|
}
|
||||||
|
|
||||||
m_IsInformedNearVictory = false;
|
m_IsInformedNearVictory = false;
|
||||||
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
||||||
m_HonorTics = (isBGWeekend) ? BG_AB_ABBGWeekendHonorTicks : BG_AB_NotABBGWeekendHonorTicks;
|
m_HonorTics = (isBGWeekend) ? BG_AB_ABBGWeekendHonorTicks : BG_AB_NotABBGWeekendHonorTicks;
|
||||||
m_ReputationTics = (isBGWeekend) ? BG_AB_ABBGWeekendReputationTicks : BG_AB_NotABBGWeekendReputationTicks;
|
m_ReputationTics = (isBGWeekend) ? BG_AB_ABBGWeekendReputationTicks : BG_AB_NotABBGWeekendReputationTicks;
|
||||||
m_TeamScores500Disadvantage[BG_TEAM_ALLIANCE] = false;
|
|
||||||
m_TeamScores500Disadvantage[BG_TEAM_HORDE] = false;
|
|
||||||
|
|
||||||
for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
m_Nodes[i] = 0;
|
m_Nodes[i] = 0;
|
||||||
m_prevNodes[i] = 0;
|
m_prevNodes[i] = 0;
|
||||||
m_NodeTimers[i] = 0;
|
m_NodeTimers[i] = 0;
|
||||||
m_BannerTimers[i].timer = 0;
|
m_BannerTimers[i].timer = 0;
|
||||||
|
|
||||||
|
// all nodes owned by neutral team at beginning
|
||||||
|
m_ActiveEvents[i] = BG_AB_NODE_TYPE_NEUTRAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8 i = 0; i < BG_AB_ALL_NODES_COUNT; ++i)
|
|
||||||
if (m_BgCreatures[i])
|
|
||||||
DelCreature(i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundAB::EndBattleGround(uint32 winner)
|
void BattleGroundAB::EndBattleGround(uint32 winner)
|
||||||
|
|
@ -620,7 +506,7 @@ WorldSafeLocsEntry const* BattleGroundAB::GetClosestGraveYard(Player* player)
|
||||||
|
|
||||||
// Is there any occupied node for this team?
|
// Is there any occupied node for this team?
|
||||||
std::vector<uint8> nodes;
|
std::vector<uint8> nodes;
|
||||||
for (uint8 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (uint8 i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
if (m_Nodes[i] == teamIndex + 3)
|
if (m_Nodes[i] == teamIndex + 3)
|
||||||
nodes.push_back(i);
|
nodes.push_back(i);
|
||||||
|
|
||||||
|
|
@ -676,10 +562,10 @@ void BattleGroundAB::UpdatePlayerScore(Player *Source, uint32 type, uint32 value
|
||||||
bool BattleGroundAB::IsAllNodesConrolledByTeam(uint32 team) const
|
bool BattleGroundAB::IsAllNodesConrolledByTeam(uint32 team) const
|
||||||
{
|
{
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
for(int i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i)
|
for (int i = 0; i < BG_AB_NODES_MAX; ++i)
|
||||||
if ((team == ALLIANCE && m_Nodes[i] == BG_AB_NODE_STATUS_ALLY_OCCUPIED) ||
|
if ((team == ALLIANCE && m_Nodes[i] == BG_AB_NODE_STATUS_ALLY_OCCUPIED) ||
|
||||||
(team == HORDE && m_Nodes[i] == BG_AB_NODE_STATUS_HORDE_OCCUPIED))
|
(team == HORDE && m_Nodes[i] == BG_AB_NODE_STATUS_HORDE_OCCUPIED))
|
||||||
++count;
|
++count;
|
||||||
|
|
||||||
return count == BG_AB_DYNAMIC_NODES_COUNT;
|
return count == BG_AB_NODES_MAX;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,64 +62,32 @@ const uint32 BG_AB_OP_NODESTATES[5] = {1767, 1782, 1772, 1792, 1787};
|
||||||
|
|
||||||
const uint32 BG_AB_OP_NODEICONS[5] = {1842, 1846, 1845, 1844, 1843};
|
const uint32 BG_AB_OP_NODEICONS[5] = {1842, 1846, 1845, 1844, 1843};
|
||||||
|
|
||||||
/* Note: code uses that these IDs follow each other */
|
|
||||||
enum BG_AB_NodeObjectId
|
|
||||||
{
|
|
||||||
BG_AB_OBJECTID_NODE_BANNER_0 = 180087, // Stables banner
|
|
||||||
BG_AB_OBJECTID_NODE_BANNER_1 = 180088, // Blacksmith banner
|
|
||||||
BG_AB_OBJECTID_NODE_BANNER_2 = 180089, // Farm banner
|
|
||||||
BG_AB_OBJECTID_NODE_BANNER_3 = 180090, // Lumber mill banner
|
|
||||||
BG_AB_OBJECTID_NODE_BANNER_4 = 180091 // Gold mine banner
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BG_AB_ObjectType
|
enum BG_AB_ObjectType
|
||||||
{
|
{
|
||||||
// for all 5 node points 8*5=40 objects
|
// TODO drop them (pool-system should be used for this)
|
||||||
BG_AB_OBJECT_BANNER_NEUTRAL = 0,
|
|
||||||
BG_AB_OBJECT_BANNER_CONT_A = 1,
|
|
||||||
BG_AB_OBJECT_BANNER_CONT_H = 2,
|
|
||||||
BG_AB_OBJECT_BANNER_ALLY = 3,
|
|
||||||
BG_AB_OBJECT_BANNER_HORDE = 4,
|
|
||||||
BG_AB_OBJECT_AURA_ALLY = 5,
|
|
||||||
BG_AB_OBJECT_AURA_HORDE = 6,
|
|
||||||
BG_AB_OBJECT_AURA_CONTESTED = 7,
|
|
||||||
//gates
|
|
||||||
BG_AB_OBJECT_GATE_A = 40,
|
|
||||||
BG_AB_OBJECT_GATE_H = 41,
|
|
||||||
//buffs
|
//buffs
|
||||||
BG_AB_OBJECT_SPEEDBUFF_STABLES = 42,
|
BG_AB_OBJECT_SPEEDBUFF_STABLES = 1,
|
||||||
BG_AB_OBJECT_REGENBUFF_STABLES = 43,
|
BG_AB_OBJECT_REGENBUFF_STABLES = 2,
|
||||||
BG_AB_OBJECT_BERSERKBUFF_STABLES = 44,
|
BG_AB_OBJECT_BERSERKBUFF_STABLES = 3,
|
||||||
BG_AB_OBJECT_SPEEDBUFF_BLACKSMITH = 45,
|
BG_AB_OBJECT_SPEEDBUFF_BLACKSMITH = 4,
|
||||||
BG_AB_OBJECT_REGENBUFF_BLACKSMITH = 46,
|
BG_AB_OBJECT_REGENBUFF_BLACKSMITH = 5,
|
||||||
BG_AB_OBJECT_BERSERKBUFF_BLACKSMITH = 47,
|
BG_AB_OBJECT_BERSERKBUFF_BLACKSMITH = 6,
|
||||||
BG_AB_OBJECT_SPEEDBUFF_FARM = 48,
|
BG_AB_OBJECT_SPEEDBUFF_FARM = 7,
|
||||||
BG_AB_OBJECT_REGENBUFF_FARM = 49,
|
BG_AB_OBJECT_REGENBUFF_FARM = 8,
|
||||||
BG_AB_OBJECT_BERSERKBUFF_FARM = 50,
|
BG_AB_OBJECT_BERSERKBUFF_FARM = 9,
|
||||||
BG_AB_OBJECT_SPEEDBUFF_LUMBER_MILL = 51,
|
BG_AB_OBJECT_SPEEDBUFF_LUMBER_MILL = 10,
|
||||||
BG_AB_OBJECT_REGENBUFF_LUMBER_MILL = 52,
|
BG_AB_OBJECT_REGENBUFF_LUMBER_MILL = 11,
|
||||||
BG_AB_OBJECT_BERSERKBUFF_LUMBER_MILL = 53,
|
BG_AB_OBJECT_BERSERKBUFF_LUMBER_MILL = 12,
|
||||||
BG_AB_OBJECT_SPEEDBUFF_GOLD_MINE = 54,
|
BG_AB_OBJECT_SPEEDBUFF_GOLD_MINE = 13,
|
||||||
BG_AB_OBJECT_REGENBUFF_GOLD_MINE = 55,
|
BG_AB_OBJECT_REGENBUFF_GOLD_MINE = 14,
|
||||||
BG_AB_OBJECT_BERSERKBUFF_GOLD_MINE = 56,
|
BG_AB_OBJECT_BERSERKBUFF_GOLD_MINE = 15,
|
||||||
BG_AB_OBJECT_MAX = 57,
|
BG_AB_OBJECT_MAX = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Object id templates from DB */
|
|
||||||
enum BG_AB_ObjectTypes
|
|
||||||
{
|
|
||||||
BG_AB_OBJECTID_BANNER_A = 180058,
|
|
||||||
BG_AB_OBJECTID_BANNER_CONT_A = 180059,
|
|
||||||
BG_AB_OBJECTID_BANNER_H = 180060,
|
|
||||||
BG_AB_OBJECTID_BANNER_CONT_H = 180061,
|
|
||||||
|
|
||||||
BG_AB_OBJECTID_AURA_A = 180100,
|
/* node events */
|
||||||
BG_AB_OBJECTID_AURA_H = 180101,
|
// node-events are just event1=BG_AB_Nodes, event2=BG_AB_NodeStatus
|
||||||
BG_AB_OBJECTID_AURA_C = 180102,
|
// so we don't need to define the constants here :)
|
||||||
|
|
||||||
BG_AB_OBJECTID_GATE_A = 180255,
|
|
||||||
BG_AB_OBJECTID_GATE_H = 180256
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BG_AB_Timers
|
enum BG_AB_Timers
|
||||||
{
|
{
|
||||||
|
|
@ -133,22 +101,18 @@ enum BG_AB_Score
|
||||||
};
|
};
|
||||||
|
|
||||||
/* do NOT change the order, else wrong behaviour */
|
/* do NOT change the order, else wrong behaviour */
|
||||||
enum BG_AB_BattleGroundNodes
|
enum BG_AB_Nodes
|
||||||
{
|
{
|
||||||
BG_AB_NODE_STABLES = 0,
|
BG_AB_NODE_STABLES = 0,
|
||||||
BG_AB_NODE_BLACKSMITH = 1,
|
BG_AB_NODE_BLACKSMITH = 1,
|
||||||
BG_AB_NODE_FARM = 2,
|
BG_AB_NODE_FARM = 2,
|
||||||
BG_AB_NODE_LUMBER_MILL = 3,
|
BG_AB_NODE_LUMBER_MILL = 3,
|
||||||
BG_AB_NODE_GOLD_MINE = 4,
|
BG_AB_NODE_GOLD_MINE = 4,
|
||||||
|
BG_AB_NODES_ERROR = 255
|
||||||
BG_AB_DYNAMIC_NODES_COUNT = 5, // dynamic nodes that can be captured
|
|
||||||
|
|
||||||
BG_AB_SPIRIT_ALIANCE = 5,
|
|
||||||
BG_AB_SPIRIT_HORDE = 6,
|
|
||||||
|
|
||||||
BG_AB_ALL_NODES_COUNT = 7, // all nodes (dynamic and static)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define BG_AB_NODES_MAX 5
|
||||||
|
|
||||||
enum BG_AB_NodeStatus
|
enum BG_AB_NodeStatus
|
||||||
{
|
{
|
||||||
BG_AB_NODE_TYPE_NEUTRAL = 0,
|
BG_AB_NODE_TYPE_NEUTRAL = 0,
|
||||||
|
|
@ -175,30 +139,15 @@ enum BG_AB_Sounds
|
||||||
#define BG_AB_NotABBGWeekendReputationTicks 200
|
#define BG_AB_NotABBGWeekendReputationTicks 200
|
||||||
#define BG_AB_ABBGWeekendReputationTicks 150
|
#define BG_AB_ABBGWeekendReputationTicks 150
|
||||||
|
|
||||||
// x, y, z, o
|
|
||||||
const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4] = {
|
|
||||||
{1166.785f, 1200.132f, -56.70859f, 0.9075713f}, // stables
|
|
||||||
{977.0156f, 1046.616f, -44.80923f, -2.600541f}, // blacksmith
|
|
||||||
{806.1821f, 874.2723f, -55.99371f, -2.303835f}, // farm
|
|
||||||
{856.1419f, 1148.902f, 11.18469f, -2.303835f}, // lumber mill
|
|
||||||
{1146.923f, 848.1782f, -110.917f, -0.7330382f} // gold mine
|
|
||||||
};
|
|
||||||
|
|
||||||
// x, y, z, o, rot0, rot1, rot2, rot3
|
|
||||||
const float BG_AB_DoorPositions[2][8] = {
|
|
||||||
{1284.597f, 1281.167f, -15.97792f, 0.7068594f, 0.012957f, -0.060288f, 0.344959f, 0.93659f},
|
|
||||||
{708.0903f, 708.4479f, -17.8342f, -2.391099f, 0.050291f, 0.015127f, 0.929217f, -0.365784f}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Tick intervals and given points: case 0,1,2,3,4,5 captured nodes
|
// Tick intervals and given points: case 0,1,2,3,4,5 captured nodes
|
||||||
const uint32 BG_AB_TickIntervals[6] = {0, 12000, 9000, 6000, 3000, 1000};
|
const uint32 BG_AB_TickIntervals[6] = {0, 12000, 9000, 6000, 3000, 1000};
|
||||||
const uint32 BG_AB_TickPoints[6] = {0, 10, 10, 10, 10, 30};
|
const uint32 BG_AB_TickPoints[6] = {0, 10, 10, 10, 10, 30};
|
||||||
|
|
||||||
// WorldSafeLocs ids for 5 nodes, and for ally, and horde starting location
|
// WorldSafeLocs ids for 5 nodes, and for ally, and horde starting location
|
||||||
const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT] = {895, 894, 893, 897, 896, 898, 899};
|
const uint32 BG_AB_GraveyardIds[7] = {895, 894, 893, 897, 896, 898, 899};
|
||||||
|
|
||||||
// x, y, z, o
|
// x, y, z, o
|
||||||
const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4] = {
|
const float BG_AB_BuffPositions[BG_AB_NODES_MAX][4] = {
|
||||||
{1185.71f, 1185.24f, -56.36f, 2.56f}, // stables
|
{1185.71f, 1185.24f, -56.36f, 2.56f}, // stables
|
||||||
{990.75f, 1008.18f, -42.60f, 2.43f}, // blacksmith
|
{990.75f, 1008.18f, -42.60f, 2.43f}, // blacksmith
|
||||||
{817.66f, 843.34f, -56.54f, 3.01f}, // farm
|
{817.66f, 843.34f, -56.54f, 3.01f}, // farm
|
||||||
|
|
@ -206,17 +155,6 @@ const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4] = {
|
||||||
{1146.62f, 816.94f, -98.49f, 6.14f} // gold mine
|
{1146.62f, 816.94f, -98.49f, 6.14f} // gold mine
|
||||||
};
|
};
|
||||||
|
|
||||||
// x, y, z, o
|
|
||||||
const float BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT][4] = {
|
|
||||||
{1200.03f, 1171.09f, -56.47f, 5.15f}, // stables
|
|
||||||
{1017.43f, 960.61f, -42.95f, 4.88f}, // blacksmith
|
|
||||||
{833.00f, 793.00f, -57.25f, 5.27f}, // farm
|
|
||||||
{775.17f, 1206.40f, 15.79f, 1.90f}, // lumber mill
|
|
||||||
{1207.48f, 787.00f, -83.36f, 5.51f}, // gold mine
|
|
||||||
{1354.05f, 1275.48f, -11.30f, 4.77f}, // alliance starting base
|
|
||||||
{714.61f, 646.15f, -10.87f, 4.34f} // horde starting base
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BG_AB_BannerTimer
|
struct BG_AB_BannerTimer
|
||||||
{
|
{
|
||||||
uint32 timer;
|
uint32 timer;
|
||||||
|
|
@ -272,7 +210,6 @@ class BattleGroundAB : public BattleGround
|
||||||
/* Creature spawning/despawning */
|
/* Creature spawning/despawning */
|
||||||
// TODO: working, scripted peons spawning
|
// TODO: working, scripted peons spawning
|
||||||
void _NodeOccupied(uint8 node,Team team);
|
void _NodeOccupied(uint8 node,Team team);
|
||||||
void _NodeDeOccupied(uint8 node);
|
|
||||||
|
|
||||||
int32 _GetNodeNameId(uint8 node);
|
int32 _GetNodeNameId(uint8 node);
|
||||||
|
|
||||||
|
|
@ -282,10 +219,10 @@ class BattleGroundAB : public BattleGround
|
||||||
2: horde contested
|
2: horde contested
|
||||||
3: ally occupied
|
3: ally occupied
|
||||||
4: horde occupied */
|
4: horde occupied */
|
||||||
uint8 m_Nodes[BG_AB_DYNAMIC_NODES_COUNT];
|
uint8 m_Nodes[BG_AB_NODES_MAX];
|
||||||
uint8 m_prevNodes[BG_AB_DYNAMIC_NODES_COUNT];
|
uint8 m_prevNodes[BG_AB_NODES_MAX]; // used for performant wordlstate-updating
|
||||||
BG_AB_BannerTimer m_BannerTimers[BG_AB_DYNAMIC_NODES_COUNT];
|
BG_AB_BannerTimer m_BannerTimers[BG_AB_NODES_MAX];
|
||||||
uint32 m_NodeTimers[BG_AB_DYNAMIC_NODES_COUNT];
|
uint32 m_NodeTimers[BG_AB_NODES_MAX];
|
||||||
uint32 m_lastTick[BG_TEAMS_COUNT];
|
uint32 m_lastTick[BG_TEAMS_COUNT];
|
||||||
uint32 m_HonorScoreTics[BG_TEAMS_COUNT];
|
uint32 m_HonorScoreTics[BG_TEAMS_COUNT];
|
||||||
uint32 m_ReputationScoreTics[BG_TEAMS_COUNT];
|
uint32 m_ReputationScoreTics[BG_TEAMS_COUNT];
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
|
|
||||||
BattleGroundBE::BattleGroundBE()
|
BattleGroundBE::BattleGroundBE()
|
||||||
{
|
{
|
||||||
m_BgObjects.resize(BG_BE_OBJECT_MAX);
|
|
||||||
|
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
||||||
|
|
@ -56,20 +54,11 @@ void BattleGroundBE::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundBE::StartingEventCloseDoors()
|
void BattleGroundBE::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_BE_OBJECT_DOOR_1; i <= BG_BE_OBJECT_DOOR_4; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
for(uint32 i = BG_BE_OBJECT_BUFF_1; i <= BG_BE_OBJECT_BUFF_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_ONE_DAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundBE::StartingEventOpenDoors()
|
void BattleGroundBE::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_BE_OBJECT_DOOR_1; i <= BG_BE_OBJECT_DOOR_2; ++i)
|
OpenDoorEvent(BG_EVENT_DOOR);
|
||||||
DoorOpen(m_BgObjects[i]);
|
|
||||||
|
|
||||||
for(uint32 i = BG_BE_OBJECT_BUFF_1; i <= BG_BE_OBJECT_BUFF_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], 60);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundBE::AddPlayer(Player *plr)
|
void BattleGroundBE::AddPlayer(Player *plr)
|
||||||
|
|
@ -161,19 +150,6 @@ void BattleGroundBE::Reset()
|
||||||
|
|
||||||
bool BattleGroundBE::SetupBattleGround()
|
bool BattleGroundBE::SetupBattleGround()
|
||||||
{
|
{
|
||||||
// gates
|
|
||||||
if (!AddObject(BG_BE_OBJECT_DOOR_1, BG_BE_OBJECT_TYPE_DOOR_1, 6287.277f, 282.1877f, 3.810925f, -2.260201f, 0, 0, 0.9044551f, -0.4265689f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_BE_OBJECT_DOOR_2, BG_BE_OBJECT_TYPE_DOOR_2, 6189.546f, 241.7099f, 3.101481f, 0.8813917f, 0, 0, 0.4265689f, 0.9044551f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_BE_OBJECT_DOOR_3, BG_BE_OBJECT_TYPE_DOOR_3, 6299.116f, 296.5494f, 3.308032f, 0.8813917f, 0, 0, 0.4265689f, 0.9044551f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_BE_OBJECT_DOOR_4, BG_BE_OBJECT_TYPE_DOOR_4, 6177.708f, 227.3481f, 3.604374f, -2.260201f, 0, 0, 0.9044551f, -0.4265689f, RESPAWN_IMMEDIATELY)
|
|
||||||
// buffs
|
|
||||||
|| !AddObject(BG_BE_OBJECT_BUFF_1, BG_BE_OBJECT_TYPE_BUFF_1, 6249.042f, 275.3239f, 11.22033f, -1.448624f, 0, 0, 0.6626201f, -0.7489557f, 120)
|
|
||||||
|| !AddObject(BG_BE_OBJECT_BUFF_2, BG_BE_OBJECT_TYPE_BUFF_2, 6228.26f, 249.566f, 11.21812f, -0.06981307f, 0, 0, 0.03489945f, -0.9993908f, 120))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundBE: Failed to spawn some object!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,27 +20,6 @@
|
||||||
|
|
||||||
class BattleGround;
|
class BattleGround;
|
||||||
|
|
||||||
enum BattleGroundBEObjectTypes
|
|
||||||
{
|
|
||||||
BG_BE_OBJECT_DOOR_1 = 0,
|
|
||||||
BG_BE_OBJECT_DOOR_2 = 1,
|
|
||||||
BG_BE_OBJECT_DOOR_3 = 2,
|
|
||||||
BG_BE_OBJECT_DOOR_4 = 3,
|
|
||||||
BG_BE_OBJECT_BUFF_1 = 4,
|
|
||||||
BG_BE_OBJECT_BUFF_2 = 5,
|
|
||||||
BG_BE_OBJECT_MAX = 6
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BattleGroundBEObjects
|
|
||||||
{
|
|
||||||
BG_BE_OBJECT_TYPE_DOOR_1 = 183971,
|
|
||||||
BG_BE_OBJECT_TYPE_DOOR_2 = 183973,
|
|
||||||
BG_BE_OBJECT_TYPE_DOOR_3 = 183970,
|
|
||||||
BG_BE_OBJECT_TYPE_DOOR_4 = 183972,
|
|
||||||
BG_BE_OBJECT_TYPE_BUFF_1 = 184663,
|
|
||||||
BG_BE_OBJECT_TYPE_BUFF_2 = 184664
|
|
||||||
};
|
|
||||||
|
|
||||||
class BattleGroundBEScore : public BattleGroundScore
|
class BattleGroundBEScore : public BattleGroundScore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ BattleGroundEY::BattleGroundEY()
|
||||||
{
|
{
|
||||||
m_BuffChange = true;
|
m_BuffChange = true;
|
||||||
m_BgObjects.resize(BG_EY_OBJECT_MAX);
|
m_BgObjects.resize(BG_EY_OBJECT_MAX);
|
||||||
m_BgCreatures.resize(BG_EY_CREATURES_MAX);
|
|
||||||
m_Points_Trigger[FEL_REALVER] = TR_FEL_REALVER_BUFF;
|
m_Points_Trigger[FEL_REALVER] = TR_FEL_REALVER_BUFF;
|
||||||
m_Points_Trigger[BLOOD_ELF] = TR_BLOOD_ELF_BUFF;
|
m_Points_Trigger[BLOOD_ELF] = TR_BLOOD_ELF_BUFF;
|
||||||
m_Points_Trigger[DRAENEI_RUINS] = TR_DRAENEI_RUINS_BUFF;
|
m_Points_Trigger[DRAENEI_RUINS] = TR_DRAENEI_RUINS_BUFF;
|
||||||
|
|
@ -95,21 +95,14 @@ void BattleGroundEY::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundEY::StartingEventCloseDoors()
|
void BattleGroundEY::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_DOOR_A], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_DOOR_H], RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
for(uint32 i = BG_EY_OBJECT_A_BANNER_FEL_REALVER_CENTER; i < BG_EY_OBJECT_MAX; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_ONE_DAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundEY::StartingEventOpenDoors()
|
void BattleGroundEY::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_DOOR_A], RESPAWN_ONE_DAY);
|
// eye-doors are despawned, not opened
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_DOOR_H], RESPAWN_ONE_DAY);
|
SpawnEvent(BG_EVENT_DOOR, 0, false);
|
||||||
|
|
||||||
for(uint32 i = BG_EY_OBJECT_N_BANNER_FEL_REALVER_CENTER; i <= BG_EY_OBJECT_FLAG_NETHERSTORM; ++i)
|
for(uint32 i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
|
||||||
for(uint32 i = 0; i < EY_POINTS_MAX; ++i)
|
|
||||||
{
|
{
|
||||||
//randomly spawn buff
|
//randomly spawn buff
|
||||||
uint8 buff = urand(0, 2);
|
uint8 buff = urand(0, 2);
|
||||||
|
|
@ -132,37 +125,33 @@ void BattleGroundEY::AddPoints(uint32 Team, uint32 Points)
|
||||||
|
|
||||||
void BattleGroundEY::CheckSomeoneJoinedPoint()
|
void BattleGroundEY::CheckSomeoneJoinedPoint()
|
||||||
{
|
{
|
||||||
GameObject *obj = NULL;
|
for (uint8 i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
|
|
||||||
{
|
{
|
||||||
obj = HashMapHolder<GameObject>::Find(m_BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REALVER + i]);
|
uint8 j = 0;
|
||||||
if (obj)
|
while (j < m_PlayersNearPoint[BG_EY_NODES_MAX].size())
|
||||||
{
|
{
|
||||||
uint8 j = 0;
|
Player *plr = objmgr.GetPlayer(m_PlayersNearPoint[BG_EY_NODES_MAX][j]);
|
||||||
while (j < m_PlayersNearPoint[EY_POINTS_MAX].size())
|
if (!plr)
|
||||||
{
|
{
|
||||||
Player *plr = objmgr.GetPlayer(m_PlayersNearPoint[EY_POINTS_MAX][j]);
|
sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[BG_EY_NODES_MAX][j]));
|
||||||
if (!plr)
|
++j;
|
||||||
{
|
continue;
|
||||||
sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[EY_POINTS_MAX][j]));
|
|
||||||
++j;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (plr->CanCaptureTowerPoint() && plr->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
|
|
||||||
{
|
|
||||||
//player joined point!
|
|
||||||
//show progress bar
|
|
||||||
UpdateWorldStateForPlayer(PROGRESS_BAR_PERCENT_GREY, BG_EY_PROGRESS_BAR_PERCENT_GREY, plr);
|
|
||||||
UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[i], plr);
|
|
||||||
UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_SHOW, plr);
|
|
||||||
//add player to point
|
|
||||||
m_PlayersNearPoint[i].push_back(m_PlayersNearPoint[EY_POINTS_MAX][j]);
|
|
||||||
//remove player from "free space"
|
|
||||||
m_PlayersNearPoint[EY_POINTS_MAX].erase(m_PlayersNearPoint[EY_POINTS_MAX].begin() + j);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
++j;
|
|
||||||
}
|
}
|
||||||
|
if (plr->CanCaptureTowerPoint() &&
|
||||||
|
plr->IsWithinDist3d(BG_EY_NodePositions[i][0], BG_EY_NodePositions[i][1], BG_EY_NodePositions[i][2], BG_EY_POINT_RADIUS))
|
||||||
|
{
|
||||||
|
//player joined point!
|
||||||
|
//show progress bar
|
||||||
|
UpdateWorldStateForPlayer(PROGRESS_BAR_PERCENT_GREY, BG_EY_PROGRESS_BAR_PERCENT_GREY, plr);
|
||||||
|
UpdateWorldStateForPlayer(PROGRESS_BAR_STATUS, m_PointBarStatus[i], plr);
|
||||||
|
UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_SHOW, plr);
|
||||||
|
//add player to point
|
||||||
|
m_PlayersNearPoint[i].push_back(m_PlayersNearPoint[BG_EY_NODES_MAX][j]);
|
||||||
|
//remove player from "free space"
|
||||||
|
m_PlayersNearPoint[BG_EY_NODES_MAX].erase(m_PlayersNearPoint[BG_EY_NODES_MAX].begin() + j);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
++j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -170,40 +159,36 @@ void BattleGroundEY::CheckSomeoneJoinedPoint()
|
||||||
void BattleGroundEY::CheckSomeoneLeftPoint()
|
void BattleGroundEY::CheckSomeoneLeftPoint()
|
||||||
{
|
{
|
||||||
//reset current point counts
|
//reset current point counts
|
||||||
for (uint8 i = 0; i < 2*EY_POINTS_MAX; ++i)
|
for (uint8 i = 0; i < 2*BG_EY_NODES_MAX; ++i)
|
||||||
m_CurrentPointPlayersCount[i] = 0;
|
m_CurrentPointPlayersCount[i] = 0;
|
||||||
GameObject *obj = NULL;
|
for(uint8 i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
for(uint8 i = 0; i < EY_POINTS_MAX; ++i)
|
|
||||||
{
|
{
|
||||||
obj = HashMapHolder<GameObject>::Find(m_BgObjects[BG_EY_OBJECT_TOWER_CAP_FEL_REALVER + i]);
|
uint8 j = 0;
|
||||||
if (obj)
|
while (j < m_PlayersNearPoint[i].size())
|
||||||
{
|
{
|
||||||
uint8 j = 0;
|
Player *plr = objmgr.GetPlayer(m_PlayersNearPoint[i][j]);
|
||||||
while (j < m_PlayersNearPoint[i].size())
|
if (!plr)
|
||||||
{
|
{
|
||||||
Player *plr = objmgr.GetPlayer(m_PlayersNearPoint[i][j]);
|
sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j]));
|
||||||
if (!plr)
|
//move not existed player to "free space" - this will cause many error showing in log, but it is a very important bug
|
||||||
{
|
m_PlayersNearPoint[BG_EY_NODES_MAX].push_back(m_PlayersNearPoint[i][j]);
|
||||||
sLog.outError("BattleGroundEY: Player (GUID: %u) not found!", GUID_LOPART(m_PlayersNearPoint[i][j]));
|
m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
|
||||||
//move not existed player to "free space" - this will cause many error showing in log, but it is a very important bug
|
++j;
|
||||||
m_PlayersNearPoint[EY_POINTS_MAX].push_back(m_PlayersNearPoint[i][j]);
|
continue;
|
||||||
m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
|
}
|
||||||
++j;
|
if (!plr->CanCaptureTowerPoint() ||
|
||||||
continue;
|
!plr->IsWithinDist3d(BG_EY_NodePositions[i][0], BG_EY_NodePositions[i][1], BG_EY_NodePositions[i][2], BG_EY_POINT_RADIUS))
|
||||||
}
|
//move player out of point (add him to players that are out of points
|
||||||
if (!plr->CanCaptureTowerPoint() || !plr->IsWithinDistInMap(obj, BG_EY_POINT_RADIUS))
|
{
|
||||||
//move player out of point (add him to players that are out of points
|
m_PlayersNearPoint[BG_EY_NODES_MAX].push_back(m_PlayersNearPoint[i][j]);
|
||||||
{
|
m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
|
||||||
m_PlayersNearPoint[EY_POINTS_MAX].push_back(m_PlayersNearPoint[i][j]);
|
UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_DONT_SHOW, plr);
|
||||||
m_PlayersNearPoint[i].erase(m_PlayersNearPoint[i].begin() + j);
|
}
|
||||||
UpdateWorldStateForPlayer(PROGRESS_BAR_SHOW, BG_EY_PROGRESS_BAR_DONT_SHOW, plr);
|
else
|
||||||
}
|
{
|
||||||
else
|
//player is neat flag, so update count:
|
||||||
{
|
m_CurrentPointPlayersCount[2 * i + GetTeamIndexByTeamId(plr->GetTeam())]++;
|
||||||
//player is neat flag, so update count:
|
++j;
|
||||||
m_CurrentPointPlayersCount[2 * i + GetTeamIndexByTeamId(plr->GetTeam())]++;
|
|
||||||
++j;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -211,7 +196,7 @@ void BattleGroundEY::CheckSomeoneLeftPoint()
|
||||||
|
|
||||||
void BattleGroundEY::UpdatePointStatuses()
|
void BattleGroundEY::UpdatePointStatuses()
|
||||||
{
|
{
|
||||||
for(uint8 point = 0; point < EY_POINTS_MAX; ++point)
|
for(uint8 point = 0; point < BG_EY_NODES_MAX; ++point)
|
||||||
{
|
{
|
||||||
if (m_PlayersNearPoint[point].empty())
|
if (m_PlayersNearPoint[point].empty())
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -309,19 +294,19 @@ void BattleGroundEY::UpdatePointsIcons(uint32 Team, uint32 Point)
|
||||||
//we MUST firstly send 0, after that we can send 1!!!
|
//we MUST firstly send 0, after that we can send 1!!!
|
||||||
if (m_PointState[Point] == EY_POINT_UNDER_CONTROL)
|
if (m_PointState[Point] == EY_POINT_UNDER_CONTROL)
|
||||||
{
|
{
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateControlIndex, 0);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateControlIndex, 0);
|
||||||
if (Team == ALLIANCE)
|
if (Team == ALLIANCE)
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateAllianceControlledIndex, 1);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateAllianceControlledIndex, 1);
|
||||||
else
|
else
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateHordeControlledIndex, 1);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateHordeControlledIndex, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Team == ALLIANCE)
|
if (Team == ALLIANCE)
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateAllianceControlledIndex, 0);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateAllianceControlledIndex, 0);
|
||||||
else
|
else
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateHordeControlledIndex, 0);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateHordeControlledIndex, 0);
|
||||||
UpdateWorldState(m_PointsIconStruct[Point].WorldStateControlIndex, 1);
|
UpdateWorldState(PointsIconStruct[Point].WorldStateControlIndex, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -331,7 +316,7 @@ void BattleGroundEY::AddPlayer(Player *plr)
|
||||||
//create score and add it to map
|
//create score and add it to map
|
||||||
BattleGroundEYScore* sc = new BattleGroundEYScore;
|
BattleGroundEYScore* sc = new BattleGroundEYScore;
|
||||||
|
|
||||||
m_PlayersNearPoint[EY_POINTS_MAX].push_back(plr->GetGUID());
|
m_PlayersNearPoint[BG_EY_NODES_MAX].push_back(plr->GetGUID());
|
||||||
|
|
||||||
m_PlayerScores[plr->GetGUID()] = sc;
|
m_PlayerScores[plr->GetGUID()] = sc;
|
||||||
}
|
}
|
||||||
|
|
@ -339,7 +324,7 @@ void BattleGroundEY::AddPlayer(Player *plr)
|
||||||
void BattleGroundEY::RemovePlayer(Player *plr, uint64 guid)
|
void BattleGroundEY::RemovePlayer(Player *plr, uint64 guid)
|
||||||
{
|
{
|
||||||
// sometimes flag aura not removed :(
|
// sometimes flag aura not removed :(
|
||||||
for (int j = EY_POINTS_MAX; j >= 0; --j)
|
for (int j = BG_EY_NODES_MAX; j >= 0; --j)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < m_PlayersNearPoint[j].size(); ++i)
|
for(size_t i = 0; i < m_PlayersNearPoint[j].size(); ++i)
|
||||||
if (m_PlayersNearPoint[j][i] == guid)
|
if (m_PlayersNearPoint[j][i] == guid)
|
||||||
|
|
@ -373,22 +358,22 @@ void BattleGroundEY::HandleAreaTrigger(Player *Source, uint32 Trigger)
|
||||||
case TR_BLOOD_ELF_POINT:
|
case TR_BLOOD_ELF_POINT:
|
||||||
if (m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BLOOD_ELF] == Source->GetTeam())
|
if (m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BLOOD_ELF] == Source->GetTeam())
|
||||||
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
||||||
EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_BLOOD_ELF);
|
EventPlayerCapturedFlag(Source, BG_EY_NODE_BLOOD_ELF);
|
||||||
break;
|
break;
|
||||||
case TR_FEL_REALVER_POINT:
|
case TR_FEL_REALVER_POINT:
|
||||||
if (m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[FEL_REALVER] == Source->GetTeam())
|
if (m_PointState[FEL_REALVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[FEL_REALVER] == Source->GetTeam())
|
||||||
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
||||||
EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_FEL_REALVER);
|
EventPlayerCapturedFlag(Source, BG_EY_NODE_FEL_REALVER);
|
||||||
break;
|
break;
|
||||||
case TR_MAGE_TOWER_POINT:
|
case TR_MAGE_TOWER_POINT:
|
||||||
if (m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[MAGE_TOWER] == Source->GetTeam())
|
if (m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[MAGE_TOWER] == Source->GetTeam())
|
||||||
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
||||||
EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_MAGE_TOWER);
|
EventPlayerCapturedFlag(Source, BG_EY_NODE_MAGE_TOWER);
|
||||||
break;
|
break;
|
||||||
case TR_DRAENEI_RUINS_POINT:
|
case TR_DRAENEI_RUINS_POINT:
|
||||||
if (m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[DRAENEI_RUINS] == Source->GetTeam())
|
if (m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[DRAENEI_RUINS] == Source->GetTeam())
|
||||||
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID())
|
||||||
EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_DRAENEI_RUINS);
|
EventPlayerCapturedFlag(Source, BG_EY_NODE_DRAENEI_RUINS);
|
||||||
break;
|
break;
|
||||||
case 4512:
|
case 4512:
|
||||||
case 4515:
|
case 4515:
|
||||||
|
|
@ -410,67 +395,8 @@ void BattleGroundEY::HandleAreaTrigger(Player *Source, uint32 Trigger)
|
||||||
|
|
||||||
bool BattleGroundEY::SetupBattleGround()
|
bool BattleGroundEY::SetupBattleGround()
|
||||||
{
|
{
|
||||||
// doors
|
|
||||||
if (!AddObject(BG_EY_OBJECT_DOOR_A, BG_OBJECT_A_DOOR_EY_ENTRY, 2527.6f, 1596.91f, 1262.13f, -3.12414f, -0.173642f, -0.001515f, 0.98477f, -0.008594f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_DOOR_H, BG_OBJECT_H_DOOR_EY_ENTRY, 1803.21f, 1539.49f, 1261.09f, 3.14159f, 0.173648f, 0, 0.984808f, 0, RESPAWN_IMMEDIATELY)
|
|
||||||
// banners (alliance)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REALVER_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REALVER_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_FEL_REALVER_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_A_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_A_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_A_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_A_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
|
|
||||||
// banners (horde)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REALVER_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REALVER_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_FEL_REALVER_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_H_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_H_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_H_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_H_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
|
|
||||||
// banners (natural)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REALVER_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2057.46f, 1735.07f, 1187.91f, -0.925024f, 0, 0, 0.446198f, -0.894934f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REALVER_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2032.25f, 1729.53f, 1190.33f, 1.8675f, 0, 0, 0.803857f, 0.594823f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_FEL_REALVER_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2092.35f, 1775.46f, 1187.08f, -0.401426f, 0, 0, 0.199368f, -0.979925f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2047.19f, 1349.19f, 1189.0f, -1.62316f, 0, 0, 0.725374f, -0.688354f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2074.32f, 1385.78f, 1194.72f, 0.488692f, 0, 0, 0.241922f, 0.970296f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2025.13f, 1386.12f, 1192.74f, 2.3911f, 0, 0, 0.930418f, 0.366501f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2276.8f, 1400.41f, 1196.33f, 2.44346f, 0, 0, 0.939693f, 0.34202f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2305.78f, 1404.56f, 1199.38f, 1.74533f, 0, 0, 0.766044f, 0.642788f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2245.4f, 1366.41f, 1195.28f, 2.21657f, 0, 0, 0.894934f, 0.446198f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_OBJECT_N_BANNER_EY_ENTRY, 2270.84f, 1784.08f, 1186.76f, 2.42601f, 0, 0, 0.936672f, 0.350207f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_LEFT, BG_OBJECT_N_BANNER_EY_ENTRY, 2269.13f, 1737.7f, 1186.66f, 0.994838f, 0, 0, 0.477159f, 0.878817f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_RIGHT, BG_OBJECT_N_BANNER_EY_ENTRY, 2300.86f, 1741.25f, 1187.7f, -0.785398f, 0, 0, 0.382683f, -0.92388f, RESPAWN_ONE_DAY)
|
|
||||||
// flags
|
|
||||||
|| !AddObject(BG_EY_OBJECT_FLAG_NETHERSTORM, BG_OBJECT_FLAG2_EY_ENTRY, 2174.782227f, 1569.054688f, 1160.361938f, -1.448624f, 0, 0, 0.662620f, -0.748956f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_FLAG_FEL_REALVER, BG_OBJECT_FLAG1_EY_ENTRY, 2044.28f, 1729.68f, 1189.96f, -0.017453f, 0, 0, 0.008727f, -0.999962f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_FLAG_BLOOD_ELF, BG_OBJECT_FLAG1_EY_ENTRY, 2048.83f, 1393.65f, 1194.49f, 0.20944f, 0, 0, 0.104528f, 0.994522f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_FLAG_DRAENEI_RUINS, BG_OBJECT_FLAG1_EY_ENTRY, 2286.56f, 1402.36f, 1197.11f, 3.72381f, 0, 0, 0.957926f, -0.287016f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_FLAG_MAGE_TOWER, BG_OBJECT_FLAG1_EY_ENTRY, 2284.48f, 1731.23f, 1189.99f, 2.89725f, 0, 0, 0.992546f, 0.121869f, RESPAWN_ONE_DAY)
|
|
||||||
// tower cap
|
|
||||||
|| !AddObject(BG_EY_OBJECT_TOWER_CAP_FEL_REALVER, BG_OBJECT_FR_TOWER_CAP_EY_ENTRY, 2024.600708f, 1742.819580f, 1195.157715f, 2.443461f, 0, 0, 0.939693f, 0.342020f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_TOWER_CAP_BLOOD_ELF, BG_OBJECT_BE_TOWER_CAP_EY_ENTRY, 2050.493164f, 1372.235962f, 1194.563477f, 1.710423f, 0, 0, 0.754710f, 0.656059f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_TOWER_CAP_DRAENEI_RUINS, BG_OBJECT_DR_TOWER_CAP_EY_ENTRY, 2301.010498f, 1386.931641f, 1197.183472f, 1.570796f, 0, 0, 0.707107f, 0.707107f, RESPAWN_ONE_DAY)
|
|
||||||
|| !AddObject(BG_EY_OBJECT_TOWER_CAP_MAGE_TOWER, BG_OBJECT_HU_TOWER_CAP_EY_ENTRY, 2282.121582f, 1760.006958f, 1189.707153f, 1.919862f, 0, 0, 0.819152f, 0.573576f, RESPAWN_ONE_DAY)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundEY: Failed to spawn some object BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//buffs
|
//buffs
|
||||||
for (int i = 0; i < EY_POINTS_MAX; ++i)
|
for (int i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
AreaTriggerEntry const* at = sAreaTriggerStore.LookupEntry(m_Points_Trigger[i]);
|
AreaTriggerEntry const* at = sAreaTriggerStore.LookupEntry(m_Points_Trigger[i]);
|
||||||
if (!at)
|
if (!at)
|
||||||
|
|
@ -485,21 +411,6 @@ bool BattleGroundEY::SetupBattleGround()
|
||||||
sLog.outError("BattleGroundEY: Cannot spawn buff");
|
sLog.outError("BattleGroundEY: Cannot spawn buff");
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldSafeLocsEntry const *sg = NULL;
|
|
||||||
sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_ALLIANCE);
|
|
||||||
if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundEY: Failed to spawn spirit guide! BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_HORDE);
|
|
||||||
if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundEY: Failed to spawn spirit guide! BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -515,7 +426,6 @@ void BattleGroundEY::Reset()
|
||||||
m_HonorScoreTics[BG_TEAM_ALLIANCE] = 0;
|
m_HonorScoreTics[BG_TEAM_ALLIANCE] = 0;
|
||||||
m_HonorScoreTics[BG_TEAM_HORDE] = 0;
|
m_HonorScoreTics[BG_TEAM_HORDE] = 0;
|
||||||
m_FlagState = BG_EY_FLAG_STATE_ON_BASE;
|
m_FlagState = BG_EY_FLAG_STATE_ON_BASE;
|
||||||
m_FlagCapturedBgObjectType = 0;
|
|
||||||
m_FlagKeeper = 0;
|
m_FlagKeeper = 0;
|
||||||
m_DroppedFlagGUID = 0;
|
m_DroppedFlagGUID = 0;
|
||||||
m_PointAddingTimer = 0;
|
m_PointAddingTimer = 0;
|
||||||
|
|
@ -523,26 +433,27 @@ void BattleGroundEY::Reset()
|
||||||
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
||||||
m_HonorTics = (isBGWeekend) ? BG_EY_EYWeekendHonorTicks : BG_EY_NotEYWeekendHonorTicks;
|
m_HonorTics = (isBGWeekend) ? BG_EY_EYWeekendHonorTicks : BG_EY_NotEYWeekendHonorTicks;
|
||||||
|
|
||||||
for(uint8 i = 0; i < EY_POINTS_MAX; ++i)
|
for(uint8 i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
m_PointOwnedByTeam[i] = EY_POINT_NO_OWNER;
|
m_PointOwnedByTeam[i] = EY_POINT_NO_OWNER;
|
||||||
m_PointState[i] = EY_POINT_STATE_UNCONTROLLED;
|
m_PointState[i] = EY_POINT_STATE_UNCONTROLLED;
|
||||||
m_PointBarStatus[i] = BG_EY_PROGRESS_BAR_STATE_MIDDLE;
|
m_PointBarStatus[i] = BG_EY_PROGRESS_BAR_STATE_MIDDLE;
|
||||||
m_PlayersNearPoint[i].clear();
|
m_PlayersNearPoint[i].clear();
|
||||||
m_PlayersNearPoint[i].reserve(15); //tip size
|
m_PlayersNearPoint[i].reserve(15); //tip size
|
||||||
|
m_ActiveEvents[i] = BG_EYE_NEUTRAL_TEAM; // neutral team owns every node
|
||||||
}
|
}
|
||||||
|
// the flag in the middle is spawned at beginning
|
||||||
|
m_ActiveEvents[BG_EY_EVENT_CAPTURE_FLAG] = BG_EY_EVENT2_FLAG_CENTER;
|
||||||
|
|
||||||
m_PlayersNearPoint[EY_PLAYERS_OUT_OF_POINTS].clear();
|
m_PlayersNearPoint[EY_PLAYERS_OUT_OF_POINTS].clear();
|
||||||
m_PlayersNearPoint[EY_PLAYERS_OUT_OF_POINTS].reserve(30);
|
m_PlayersNearPoint[EY_PLAYERS_OUT_OF_POINTS].reserve(30);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundEY::RespawnFlag(bool send_message)
|
void BattleGroundEY::RespawnFlag(bool send_message)
|
||||||
{
|
{
|
||||||
if (m_FlagCapturedBgObjectType > 0)
|
|
||||||
SpawnBGObject(m_BgObjects[m_FlagCapturedBgObjectType], RESPAWN_ONE_DAY);
|
|
||||||
|
|
||||||
m_FlagCapturedBgObjectType = 0;
|
|
||||||
m_FlagState = BG_EY_FLAG_STATE_ON_BASE;
|
m_FlagState = BG_EY_FLAG_STATE_ON_BASE;
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_FLAG_NETHERSTORM], RESPAWN_IMMEDIATELY);
|
// will despawn captured flags at the node and spawn in center
|
||||||
|
SpawnEvent(BG_EY_EVENT_CAPTURE_FLAG, BG_EY_EVENT2_FLAG_CENTER, true);
|
||||||
|
|
||||||
if (send_message)
|
if (send_message)
|
||||||
{
|
{
|
||||||
|
|
@ -631,7 +542,9 @@ void BattleGroundEY::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
UpdateWorldState(NETHERSTORM_FLAG, 0);
|
UpdateWorldState(NETHERSTORM_FLAG, 0);
|
||||||
m_FlagState = BG_EY_FLAG_STATE_ON_PLAYER;
|
m_FlagState = BG_EY_FLAG_STATE_ON_PLAYER;
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[BG_EY_OBJECT_FLAG_NETHERSTORM], RESPAWN_ONE_DAY);
|
// despawn center-flag
|
||||||
|
SpawnEvent(BG_EY_EVENT_CAPTURE_FLAG, BG_EY_EVENT2_FLAG_CENTER, false);
|
||||||
|
|
||||||
SetFlagPicker(Source->GetGUID());
|
SetFlagPicker(Source->GetGUID());
|
||||||
//get flag aura on player
|
//get flag aura on player
|
||||||
Source->CastSpell(Source, BG_EY_NETHERSTORM_FLAG_SPELL, true);
|
Source->CastSpell(Source, BG_EY_NETHERSTORM_FLAG_SPELL, true);
|
||||||
|
|
@ -648,40 +561,30 @@ void BattleGroundEY::EventTeamLostPoint(Player *Source, uint32 Point)
|
||||||
if (GetStatus() != STATUS_IN_PROGRESS)
|
if (GetStatus() != STATUS_IN_PROGRESS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Natural point
|
// neutral node
|
||||||
uint32 Team = m_PointOwnedByTeam[Point];
|
uint32 Team = m_PointOwnedByTeam[Point];
|
||||||
|
|
||||||
if (!Team)
|
if (!Team)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (Team == ALLIANCE)
|
if (Team == ALLIANCE)
|
||||||
{
|
|
||||||
m_TeamPointsCount[BG_TEAM_ALLIANCE]--;
|
m_TeamPointsCount[BG_TEAM_ALLIANCE]--;
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeAlliance], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeAlliance + 1], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeAlliance + 2], RESPAWN_ONE_DAY);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
m_TeamPointsCount[BG_TEAM_HORDE]--;
|
m_TeamPointsCount[BG_TEAM_HORDE]--;
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeHorde], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeHorde + 1], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].DespawnObjectTypeHorde + 2], RESPAWN_ONE_DAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].SpawnNeutralObjectType], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].SpawnNeutralObjectType + 1], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_LoosingPointTypes[Point].SpawnNeutralObjectType + 2], RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
//buff isn't despawned
|
|
||||||
|
|
||||||
|
// it's important to set the OwnedBy before despawning spiritguides, else
|
||||||
|
// player won't get teleported away
|
||||||
m_PointOwnedByTeam[Point] = EY_POINT_NO_OWNER;
|
m_PointOwnedByTeam[Point] = EY_POINT_NO_OWNER;
|
||||||
m_PointState[Point] = EY_POINT_NO_OWNER;
|
m_PointState[Point] = EY_POINT_NO_OWNER;
|
||||||
|
|
||||||
|
SpawnEvent(Point, BG_EYE_NEUTRAL_TEAM, true); // will despawn alliance/horde
|
||||||
|
|
||||||
|
//buff isn't despawned
|
||||||
|
|
||||||
if (Team == ALLIANCE)
|
if (Team == ALLIANCE)
|
||||||
SendMessageToAll(m_LoosingPointTypes[Point].MessageIdAlliance,CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
SendMessageToAll(LoosingPointTypes[Point].MessageIdAlliance,CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
||||||
else
|
else
|
||||||
SendMessageToAll(m_LoosingPointTypes[Point].MessageIdHorde,CHAT_MSG_BG_SYSTEM_HORDE, Source);
|
SendMessageToAll(LoosingPointTypes[Point].MessageIdHorde,CHAT_MSG_BG_SYSTEM_HORDE, Source);
|
||||||
|
|
||||||
UpdatePointsIcons(Team, Point);
|
UpdatePointsIcons(Team, Point);
|
||||||
UpdatePointsCount(Team);
|
UpdatePointsCount(Team);
|
||||||
|
|
@ -694,24 +597,8 @@ void BattleGroundEY::EventTeamCapturedPoint(Player *Source, uint32 Point)
|
||||||
|
|
||||||
uint32 Team = Source->GetTeam();
|
uint32 Team = Source->GetTeam();
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].DespawnNeutralObjectType], RESPAWN_ONE_DAY);
|
m_TeamPointsCount[GetTeamIndexByTeamId(Team)]++;
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].DespawnNeutralObjectType + 1], RESPAWN_ONE_DAY);
|
SpawnEvent(Point, GetTeamIndexByTeamId(Team), true);
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].DespawnNeutralObjectType + 2], RESPAWN_ONE_DAY);
|
|
||||||
|
|
||||||
if (Team == ALLIANCE)
|
|
||||||
{
|
|
||||||
m_TeamPointsCount[BG_TEAM_ALLIANCE]++;
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeAlliance], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeAlliance + 1], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeAlliance + 2], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_TeamPointsCount[BG_TEAM_HORDE]++;
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeHorde], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeHorde + 1], RESPAWN_IMMEDIATELY);
|
|
||||||
SpawnBGObject(m_BgObjects[m_CapturingPointTypes[Point].SpawnObjectTypeHorde + 2], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
|
||||||
|
|
||||||
//buff isn't respawned
|
//buff isn't respawned
|
||||||
|
|
||||||
|
|
@ -719,26 +606,15 @@ void BattleGroundEY::EventTeamCapturedPoint(Player *Source, uint32 Point)
|
||||||
m_PointState[Point] = EY_POINT_UNDER_CONTROL;
|
m_PointState[Point] = EY_POINT_UNDER_CONTROL;
|
||||||
|
|
||||||
if (Team == ALLIANCE)
|
if (Team == ALLIANCE)
|
||||||
SendMessageToAll(m_CapturingPointTypes[Point].MessageIdAlliance,CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
SendMessageToAll(CapturingPointTypes[Point].MessageIdAlliance,CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
||||||
else
|
else
|
||||||
SendMessageToAll(m_CapturingPointTypes[Point].MessageIdHorde,CHAT_MSG_BG_SYSTEM_HORDE, Source);
|
SendMessageToAll(CapturingPointTypes[Point].MessageIdHorde,CHAT_MSG_BG_SYSTEM_HORDE, Source);
|
||||||
|
|
||||||
if (m_BgCreatures[Point])
|
|
||||||
DelCreature(Point);
|
|
||||||
|
|
||||||
WorldSafeLocsEntry const *sg = NULL;
|
|
||||||
sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[Point].GraveYardId);
|
|
||||||
if (!sg || !AddSpiritGuide(Point, sg->x, sg->y, sg->z, 3.124139f, Team))
|
|
||||||
sLog.outError("BatteGroundEY: Failed to spawn spirit guide! point: %u, team: %u, graveyard_id: %u",
|
|
||||||
Point, Team, m_CapturingPointTypes[Point].GraveYardId);
|
|
||||||
|
|
||||||
// SpawnBGCreature(Point,RESPAWN_IMMEDIATELY);
|
|
||||||
|
|
||||||
UpdatePointsIcons(Team, Point);
|
UpdatePointsIcons(Team, Point);
|
||||||
UpdatePointsCount(Team);
|
UpdatePointsCount(Team);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundEY::EventPlayerCapturedFlag(Player *Source, uint32 BgObjectType)
|
void BattleGroundEY::EventPlayerCapturedFlag(Player *Source, BG_EY_Nodes node)
|
||||||
{
|
{
|
||||||
if (GetStatus() != STATUS_IN_PROGRESS || GetFlagPickerGUID() != Source->GetGUID())
|
if (GetStatus() != STATUS_IN_PROGRESS || GetFlagPickerGUID() != Source->GetGUID())
|
||||||
return;
|
return;
|
||||||
|
|
@ -754,10 +630,9 @@ void BattleGroundEY::EventPlayerCapturedFlag(Player *Source, uint32 BgObjectType
|
||||||
else
|
else
|
||||||
PlaySoundToAll(BG_EY_SOUND_FLAG_CAPTURED_HORDE);
|
PlaySoundToAll(BG_EY_SOUND_FLAG_CAPTURED_HORDE);
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[BgObjectType], RESPAWN_IMMEDIATELY);
|
SpawnEvent(BG_EY_EVENT_CAPTURE_FLAG, node, true);
|
||||||
|
|
||||||
m_FlagsTimer = BG_EY_FLAG_RESPAWN_TIME;
|
m_FlagsTimer = BG_EY_FLAG_RESPAWN_TIME;
|
||||||
m_FlagCapturedBgObjectType = BgObjectType;
|
|
||||||
|
|
||||||
uint8 team_id = 0;
|
uint8 team_id = 0;
|
||||||
if (Source->GetTeam() == ALLIANCE)
|
if (Source->GetTeam() == ALLIANCE)
|
||||||
|
|
@ -876,13 +751,13 @@ WorldSafeLocsEntry const *BattleGroundEY::GetClosestGraveYard(Player* player)
|
||||||
distance = (entry->x - plr_x)*(entry->x - plr_x) + (entry->y - plr_y)*(entry->y - plr_y) + (entry->z - plr_z)*(entry->z - plr_z);
|
distance = (entry->x - plr_x)*(entry->x - plr_x) + (entry->y - plr_y)*(entry->y - plr_y) + (entry->z - plr_z)*(entry->z - plr_z);
|
||||||
nearestDistance = distance;
|
nearestDistance = distance;
|
||||||
|
|
||||||
for(uint8 i = 0; i < EY_POINTS_MAX; ++i)
|
for(uint8 i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
if (m_PointOwnedByTeam[i]==player->GetTeam() && m_PointState[i]==EY_POINT_UNDER_CONTROL)
|
if (m_PointOwnedByTeam[i]==player->GetTeam() && m_PointState[i]==EY_POINT_UNDER_CONTROL)
|
||||||
{
|
{
|
||||||
entry = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[i].GraveYardId);
|
entry = sWorldSafeLocsStore.LookupEntry(CapturingPointTypes[i].GraveYardId);
|
||||||
if (!entry)
|
if (!entry)
|
||||||
sLog.outError("BattleGroundEY: Not found graveyard: %u",m_CapturingPointTypes[i].GraveYardId);
|
sLog.outError("BattleGroundEY: Not found graveyard: %u",CapturingPointTypes[i].GraveYardId);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
distance = (entry->x - plr_x)*(entry->x - plr_x) + (entry->y - plr_y)*(entry->y - plr_y) + (entry->z - plr_z)*(entry->z - plr_z);
|
distance = (entry->x - plr_x)*(entry->x - plr_x) + (entry->y - plr_y)*(entry->y - plr_y) + (entry->z - plr_z)*(entry->z - plr_z);
|
||||||
|
|
@ -901,9 +776,9 @@ WorldSafeLocsEntry const *BattleGroundEY::GetClosestGraveYard(Player* player)
|
||||||
bool BattleGroundEY::IsAllNodesConrolledByTeam(uint32 team) const
|
bool BattleGroundEY::IsAllNodesConrolledByTeam(uint32 team) const
|
||||||
{
|
{
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
for(int i = 0; i < EY_POINTS_MAX; ++i)
|
for(int i = 0; i < BG_EY_NODES_MAX; ++i)
|
||||||
if (m_PointOwnedByTeam[i] == team && m_PointState[i] == EY_POINT_UNDER_CONTROL)
|
if (m_PointOwnedByTeam[i] == team && m_PointState[i] == EY_POINT_UNDER_CONTROL)
|
||||||
++count;
|
++count;
|
||||||
|
|
||||||
return count == EY_POINTS_MAX;
|
return count == BG_EY_NODES_MAX;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,22 +83,6 @@ enum BG_EY_Spells
|
||||||
BG_EY_PLAYER_DROPPED_FLAG_SPELL = 34991
|
BG_EY_PLAYER_DROPPED_FLAG_SPELL = 34991
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EYBattleGroundObjectEntry
|
|
||||||
{
|
|
||||||
BG_OBJECT_A_DOOR_EY_ENTRY = 184719, //Alliance door
|
|
||||||
BG_OBJECT_H_DOOR_EY_ENTRY = 184720, //Horde door
|
|
||||||
BG_OBJECT_FLAG1_EY_ENTRY = 184493, //Netherstorm flag (generic)
|
|
||||||
BG_OBJECT_FLAG2_EY_ENTRY = 184141, //Netherstorm flag (flagstand)
|
|
||||||
BG_OBJECT_FLAG3_EY_ENTRY = 184142, //Netherstorm flag (flagdrop)
|
|
||||||
BG_OBJECT_A_BANNER_EY_ENTRY = 184381, //Visual Banner (Alliance)
|
|
||||||
BG_OBJECT_H_BANNER_EY_ENTRY = 184380, //Visual Banner (Horde)
|
|
||||||
BG_OBJECT_N_BANNER_EY_ENTRY = 184382, //Visual Banner (Neutral)
|
|
||||||
BG_OBJECT_BE_TOWER_CAP_EY_ENTRY = 184080, //BE Tower Cap Pt
|
|
||||||
BG_OBJECT_FR_TOWER_CAP_EY_ENTRY = 184081, //Fel Reaver Cap Pt
|
|
||||||
BG_OBJECT_HU_TOWER_CAP_EY_ENTRY = 184082, //Human Tower Cap Pt
|
|
||||||
BG_OBJECT_DR_TOWER_CAP_EY_ENTRY = 184083 //Draenei Tower Cap Pt
|
|
||||||
};
|
|
||||||
|
|
||||||
enum EYBattleGroundPointsTrigger
|
enum EYBattleGroundPointsTrigger
|
||||||
{
|
{
|
||||||
TR_BLOOD_ELF_POINT = 4476,
|
TR_BLOOD_ELF_POINT = 4476,
|
||||||
|
|
@ -121,6 +105,7 @@ enum EYBattleGroundGaveyards
|
||||||
EY_GRAVEYARD_MAGE_TOWER = 1108
|
EY_GRAVEYARD_MAGE_TOWER = 1108
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// deprecated
|
||||||
enum EYBattleGroundPoints
|
enum EYBattleGroundPoints
|
||||||
{
|
{
|
||||||
FEL_REALVER = 0,
|
FEL_REALVER = 0,
|
||||||
|
|
@ -129,84 +114,49 @@ enum EYBattleGroundPoints
|
||||||
MAGE_TOWER = 3,
|
MAGE_TOWER = 3,
|
||||||
|
|
||||||
EY_PLAYERS_OUT_OF_POINTS = 4,
|
EY_PLAYERS_OUT_OF_POINTS = 4,
|
||||||
EY_POINTS_MAX = 4
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EYBattleGroundCreaturesTypes
|
enum BG_EY_Nodes
|
||||||
{
|
{
|
||||||
EY_SPIRIT_FEL_REALVER = 0,
|
BG_EY_NODE_FEL_REALVER = 0,
|
||||||
EY_SPIRIT_BLOOD_ELF = 1,
|
BG_EY_NODE_BLOOD_ELF = 1,
|
||||||
EY_SPIRIT_DRAENEI_RUINS = 2,
|
BG_EY_NODE_DRAENEI_RUINS = 2,
|
||||||
EY_SPIRIT_MAGE_TOWER = 3,
|
BG_EY_NODE_MAGE_TOWER = 3,
|
||||||
EY_SPIRIT_MAIN_ALLIANCE = 4,
|
BG_EY_NODES_ERROR = 255
|
||||||
EY_SPIRIT_MAIN_HORDE = 5,
|
};
|
||||||
|
#define BG_EY_NODES_MAX 4
|
||||||
|
|
||||||
BG_EY_CREATURES_MAX = 6
|
// node-events work like this: event1:nodeid, event2:state (0alliance,1horde,2neutral)
|
||||||
|
#define BG_EYE_NEUTRAL_TEAM 2
|
||||||
|
#define BG_EY_EVENT_CAPTURE_FLAG 4 // event1=4, event2=nodeid or 4 for the default center spawn
|
||||||
|
#define BG_EY_EVENT2_FLAG_CENTER 4 // maximum node is 3 so 4 for center is ok
|
||||||
|
// all other event2 are just nodeids, i won't define something here
|
||||||
|
|
||||||
|
// x, y, z
|
||||||
|
// used to check, when player is in range of a node
|
||||||
|
const float BG_EY_NodePositions[BG_EY_NODES_MAX][4] = {
|
||||||
|
{2024.600708f, 1742.819580f, 1195.157715f}, // FEL_REALVER
|
||||||
|
{2050.493164f, 1372.235962f, 1194.563477f}, // BLOOD_ELF
|
||||||
|
{2301.010498f, 1386.931641f, 1197.183472f}, // DRAENEI_RUINS
|
||||||
|
{2282.121582f, 1760.006958f, 1189.707153f} // MAGE_TOWER
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EYBattleGroundObjectTypes
|
enum EYBattleGroundObjectTypes
|
||||||
{
|
{
|
||||||
BG_EY_OBJECT_DOOR_A = 0,
|
|
||||||
BG_EY_OBJECT_DOOR_H = 1,
|
|
||||||
BG_EY_OBJECT_A_BANNER_FEL_REALVER_CENTER = 2,
|
|
||||||
BG_EY_OBJECT_A_BANNER_FEL_REALVER_LEFT = 3,
|
|
||||||
BG_EY_OBJECT_A_BANNER_FEL_REALVER_RIGHT = 4,
|
|
||||||
BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER = 5,
|
|
||||||
BG_EY_OBJECT_A_BANNER_BLOOD_ELF_LEFT = 6,
|
|
||||||
BG_EY_OBJECT_A_BANNER_BLOOD_ELF_RIGHT = 7,
|
|
||||||
BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER = 8,
|
|
||||||
BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_LEFT = 9,
|
|
||||||
BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_RIGHT = 10,
|
|
||||||
BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER = 11,
|
|
||||||
BG_EY_OBJECT_A_BANNER_MAGE_TOWER_LEFT = 12,
|
|
||||||
BG_EY_OBJECT_A_BANNER_MAGE_TOWER_RIGHT = 13,
|
|
||||||
BG_EY_OBJECT_H_BANNER_FEL_REALVER_CENTER = 14,
|
|
||||||
BG_EY_OBJECT_H_BANNER_FEL_REALVER_LEFT = 15,
|
|
||||||
BG_EY_OBJECT_H_BANNER_FEL_REALVER_RIGHT = 16,
|
|
||||||
BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER = 17,
|
|
||||||
BG_EY_OBJECT_H_BANNER_BLOOD_ELF_LEFT = 18,
|
|
||||||
BG_EY_OBJECT_H_BANNER_BLOOD_ELF_RIGHT = 19,
|
|
||||||
BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER = 20,
|
|
||||||
BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_LEFT = 21,
|
|
||||||
BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_RIGHT = 22,
|
|
||||||
BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER = 23,
|
|
||||||
BG_EY_OBJECT_H_BANNER_MAGE_TOWER_LEFT = 24,
|
|
||||||
BG_EY_OBJECT_H_BANNER_MAGE_TOWER_RIGHT = 25,
|
|
||||||
BG_EY_OBJECT_N_BANNER_FEL_REALVER_CENTER = 26,
|
|
||||||
BG_EY_OBJECT_N_BANNER_FEL_REALVER_LEFT = 27,
|
|
||||||
BG_EY_OBJECT_N_BANNER_FEL_REALVER_RIGHT = 28,
|
|
||||||
BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER = 29,
|
|
||||||
BG_EY_OBJECT_N_BANNER_BLOOD_ELF_LEFT = 30,
|
|
||||||
BG_EY_OBJECT_N_BANNER_BLOOD_ELF_RIGHT = 31,
|
|
||||||
BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER = 32,
|
|
||||||
BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_LEFT = 33,
|
|
||||||
BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_RIGHT = 34,
|
|
||||||
BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER = 35,
|
|
||||||
BG_EY_OBJECT_N_BANNER_MAGE_TOWER_LEFT = 36,
|
|
||||||
BG_EY_OBJECT_N_BANNER_MAGE_TOWER_RIGHT = 37,
|
|
||||||
BG_EY_OBJECT_TOWER_CAP_FEL_REALVER = 38,
|
|
||||||
BG_EY_OBJECT_TOWER_CAP_BLOOD_ELF = 39,
|
|
||||||
BG_EY_OBJECT_TOWER_CAP_DRAENEI_RUINS = 40,
|
|
||||||
BG_EY_OBJECT_TOWER_CAP_MAGE_TOWER = 41,
|
|
||||||
BG_EY_OBJECT_FLAG_NETHERSTORM = 42,
|
|
||||||
BG_EY_OBJECT_FLAG_FEL_REALVER = 43,
|
|
||||||
BG_EY_OBJECT_FLAG_BLOOD_ELF = 44,
|
|
||||||
BG_EY_OBJECT_FLAG_DRAENEI_RUINS = 45,
|
|
||||||
BG_EY_OBJECT_FLAG_MAGE_TOWER = 46,
|
|
||||||
//buffs
|
//buffs
|
||||||
BG_EY_OBJECT_SPEEDBUFF_FEL_REALVER = 47,
|
BG_EY_OBJECT_SPEEDBUFF_FEL_REALVER = 1,
|
||||||
BG_EY_OBJECT_REGENBUFF_FEL_REALVER = 48,
|
BG_EY_OBJECT_REGENBUFF_FEL_REALVER = 2,
|
||||||
BG_EY_OBJECT_BERSERKBUFF_FEL_REALVER = 49,
|
BG_EY_OBJECT_BERSERKBUFF_FEL_REALVER = 3,
|
||||||
BG_EY_OBJECT_SPEEDBUFF_BLOOD_ELF = 50,
|
BG_EY_OBJECT_SPEEDBUFF_BLOOD_ELF = 4,
|
||||||
BG_EY_OBJECT_REGENBUFF_BLOOD_ELF = 51,
|
BG_EY_OBJECT_REGENBUFF_BLOOD_ELF = 5,
|
||||||
BG_EY_OBJECT_BERSERKBUFF_BLOOD_ELF = 52,
|
BG_EY_OBJECT_BERSERKBUFF_BLOOD_ELF = 6,
|
||||||
BG_EY_OBJECT_SPEEDBUFF_DRAENEI_RUINS = 53,
|
BG_EY_OBJECT_SPEEDBUFF_DRAENEI_RUINS = 7,
|
||||||
BG_EY_OBJECT_REGENBUFF_DRAENEI_RUINS = 54,
|
BG_EY_OBJECT_REGENBUFF_DRAENEI_RUINS = 8,
|
||||||
BG_EY_OBJECT_BERSERKBUFF_DRAENEI_RUINS = 55,
|
BG_EY_OBJECT_BERSERKBUFF_DRAENEI_RUINS = 9,
|
||||||
BG_EY_OBJECT_SPEEDBUFF_MAGE_TOWER = 56,
|
BG_EY_OBJECT_SPEEDBUFF_MAGE_TOWER = 10,
|
||||||
BG_EY_OBJECT_REGENBUFF_MAGE_TOWER = 57,
|
BG_EY_OBJECT_REGENBUFF_MAGE_TOWER = 11,
|
||||||
BG_EY_OBJECT_BERSERKBUFF_MAGE_TOWER = 58,
|
BG_EY_OBJECT_BERSERKBUFF_MAGE_TOWER = 12,
|
||||||
BG_EY_OBJECT_MAX = 59
|
BG_EY_OBJECT_MAX = 13
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BG_EY_NotEYWeekendHonorTicks 330
|
#define BG_EY_NotEYWeekendHonorTicks 330
|
||||||
|
|
@ -244,60 +194,48 @@ struct BattleGroundEYPointIconsStruct
|
||||||
|
|
||||||
struct BattleGroundEYLoosingPointStruct
|
struct BattleGroundEYLoosingPointStruct
|
||||||
{
|
{
|
||||||
BattleGroundEYLoosingPointStruct(uint32 _SpawnNeutralObjectType, uint32 _DespawnObjectTypeAlliance, uint32 _MessageIdAlliance, uint32 _DespawnObjectTypeHorde, uint32 _MessageIdHorde)
|
BattleGroundEYLoosingPointStruct(uint32 _MessageIdAlliance, uint32 _MessageIdHorde)
|
||||||
: SpawnNeutralObjectType(_SpawnNeutralObjectType),
|
: MessageIdAlliance(_MessageIdAlliance), MessageIdHorde(_MessageIdHorde)
|
||||||
DespawnObjectTypeAlliance(_DespawnObjectTypeAlliance), MessageIdAlliance(_MessageIdAlliance),
|
|
||||||
DespawnObjectTypeHorde(_DespawnObjectTypeHorde), MessageIdHorde(_MessageIdHorde)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
uint32 SpawnNeutralObjectType;
|
|
||||||
uint32 DespawnObjectTypeAlliance;
|
|
||||||
uint32 MessageIdAlliance;
|
uint32 MessageIdAlliance;
|
||||||
uint32 DespawnObjectTypeHorde;
|
|
||||||
uint32 MessageIdHorde;
|
uint32 MessageIdHorde;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BattleGroundEYCapturingPointStruct
|
struct BattleGroundEYCapturingPointStruct
|
||||||
{
|
{
|
||||||
BattleGroundEYCapturingPointStruct(uint32 _DespawnNeutralObjectType, uint32 _SpawnObjectTypeAlliance, uint32 _MessageIdAlliance, uint32 _SpawnObjectTypeHorde, uint32 _MessageIdHorde, uint32 _GraveYardId)
|
BattleGroundEYCapturingPointStruct(uint32 _MessageIdAlliance, uint32 _MessageIdHorde, uint32 _GraveYardId)
|
||||||
: DespawnNeutralObjectType(_DespawnNeutralObjectType),
|
: MessageIdAlliance(_MessageIdAlliance), MessageIdHorde(_MessageIdHorde), GraveYardId(_GraveYardId)
|
||||||
SpawnObjectTypeAlliance(_SpawnObjectTypeAlliance), MessageIdAlliance(_MessageIdAlliance),
|
|
||||||
SpawnObjectTypeHorde(_SpawnObjectTypeHorde), MessageIdHorde(_MessageIdHorde),
|
|
||||||
GraveYardId(_GraveYardId)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
uint32 DespawnNeutralObjectType;
|
|
||||||
uint32 SpawnObjectTypeAlliance;
|
|
||||||
uint32 MessageIdAlliance;
|
uint32 MessageIdAlliance;
|
||||||
uint32 SpawnObjectTypeHorde;
|
|
||||||
uint32 MessageIdHorde;
|
uint32 MessageIdHorde;
|
||||||
uint32 GraveYardId;
|
uint32 GraveYardId;
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8 BG_EY_TickPoints[EY_POINTS_MAX] = {1, 2, 5, 10};
|
const uint8 BG_EY_TickPoints[BG_EY_NODES_MAX] = {1, 2, 5, 10};
|
||||||
const uint32 BG_EY_FlagPoints[EY_POINTS_MAX] = {75, 85, 100, 500};
|
const uint32 BG_EY_FlagPoints[BG_EY_NODES_MAX] = {75, 85, 100, 500};
|
||||||
|
|
||||||
//constant arrays:
|
//constant arrays:
|
||||||
const BattleGroundEYPointIconsStruct m_PointsIconStruct[EY_POINTS_MAX] =
|
const BattleGroundEYPointIconsStruct PointsIconStruct[BG_EY_NODES_MAX] =
|
||||||
{
|
{
|
||||||
BattleGroundEYPointIconsStruct(FEL_REAVER_UNCONTROL, FEL_REAVER_ALLIANCE_CONTROL, FEL_REAVER_HORDE_CONTROL),
|
BattleGroundEYPointIconsStruct(FEL_REAVER_UNCONTROL, FEL_REAVER_ALLIANCE_CONTROL, FEL_REAVER_HORDE_CONTROL),
|
||||||
BattleGroundEYPointIconsStruct(BLOOD_ELF_UNCONTROL, BLOOD_ELF_ALLIANCE_CONTROL, BLOOD_ELF_HORDE_CONTROL),
|
BattleGroundEYPointIconsStruct(BLOOD_ELF_UNCONTROL, BLOOD_ELF_ALLIANCE_CONTROL, BLOOD_ELF_HORDE_CONTROL),
|
||||||
BattleGroundEYPointIconsStruct(DRAENEI_RUINS_UNCONTROL, DRAENEI_RUINS_ALLIANCE_CONTROL, DRAENEI_RUINS_HORDE_CONTROL),
|
BattleGroundEYPointIconsStruct(DRAENEI_RUINS_UNCONTROL, DRAENEI_RUINS_ALLIANCE_CONTROL, DRAENEI_RUINS_HORDE_CONTROL),
|
||||||
BattleGroundEYPointIconsStruct(MAGE_TOWER_UNCONTROL, MAGE_TOWER_ALLIANCE_CONTROL, MAGE_TOWER_HORDE_CONTROL)
|
BattleGroundEYPointIconsStruct(MAGE_TOWER_UNCONTROL, MAGE_TOWER_ALLIANCE_CONTROL, MAGE_TOWER_HORDE_CONTROL)
|
||||||
};
|
};
|
||||||
const BattleGroundEYLoosingPointStruct m_LoosingPointTypes[EY_POINTS_MAX] =
|
const BattleGroundEYLoosingPointStruct LoosingPointTypes[BG_EY_NODES_MAX] =
|
||||||
{
|
{
|
||||||
BattleGroundEYLoosingPointStruct(BG_EY_OBJECT_N_BANNER_FEL_REALVER_CENTER, BG_EY_OBJECT_A_BANNER_FEL_REALVER_CENTER, LANG_BG_EY_HAS_LOST_A_F_RUINS, BG_EY_OBJECT_H_BANNER_FEL_REALVER_CENTER, LANG_BG_EY_HAS_LOST_H_F_RUINS),
|
BattleGroundEYLoosingPointStruct(LANG_BG_EY_HAS_LOST_A_F_RUINS, LANG_BG_EY_HAS_LOST_H_F_RUINS),
|
||||||
BattleGroundEYLoosingPointStruct(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER, BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER, LANG_BG_EY_HAS_LOST_A_B_TOWER, BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER, LANG_BG_EY_HAS_LOST_H_B_TOWER),
|
BattleGroundEYLoosingPointStruct(LANG_BG_EY_HAS_LOST_A_B_TOWER, LANG_BG_EY_HAS_LOST_H_B_TOWER),
|
||||||
BattleGroundEYLoosingPointStruct(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER, BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER, LANG_BG_EY_HAS_LOST_A_D_RUINS, BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER, LANG_BG_EY_HAS_LOST_H_D_RUINS),
|
BattleGroundEYLoosingPointStruct(LANG_BG_EY_HAS_LOST_A_D_RUINS, LANG_BG_EY_HAS_LOST_H_D_RUINS),
|
||||||
BattleGroundEYLoosingPointStruct(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_LOST_A_M_TOWER, BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_LOST_H_M_TOWER)
|
BattleGroundEYLoosingPointStruct(LANG_BG_EY_HAS_LOST_A_M_TOWER, LANG_BG_EY_HAS_LOST_H_M_TOWER)
|
||||||
};
|
};
|
||||||
const BattleGroundEYCapturingPointStruct m_CapturingPointTypes[EY_POINTS_MAX] =
|
const BattleGroundEYCapturingPointStruct CapturingPointTypes[BG_EY_NODES_MAX] =
|
||||||
{
|
{
|
||||||
BattleGroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_FEL_REALVER_CENTER, BG_EY_OBJECT_A_BANNER_FEL_REALVER_CENTER, LANG_BG_EY_HAS_TAKEN_A_F_RUINS, BG_EY_OBJECT_H_BANNER_FEL_REALVER_CENTER, LANG_BG_EY_HAS_TAKEN_H_F_RUINS, EY_GRAVEYARD_FEL_REALVER),
|
BattleGroundEYCapturingPointStruct(LANG_BG_EY_HAS_TAKEN_A_F_RUINS, LANG_BG_EY_HAS_TAKEN_H_F_RUINS, EY_GRAVEYARD_FEL_REALVER),
|
||||||
BattleGroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_BLOOD_ELF_CENTER, BG_EY_OBJECT_A_BANNER_BLOOD_ELF_CENTER, LANG_BG_EY_HAS_TAKEN_A_B_TOWER, BG_EY_OBJECT_H_BANNER_BLOOD_ELF_CENTER, LANG_BG_EY_HAS_TAKEN_H_B_TOWER, EY_GRAVEYARD_BLOOD_ELF),
|
BattleGroundEYCapturingPointStruct(LANG_BG_EY_HAS_TAKEN_A_B_TOWER, LANG_BG_EY_HAS_TAKEN_H_B_TOWER, EY_GRAVEYARD_BLOOD_ELF),
|
||||||
BattleGroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_DRAENEI_RUINS_CENTER, BG_EY_OBJECT_A_BANNER_DRAENEI_RUINS_CENTER, LANG_BG_EY_HAS_TAKEN_A_D_RUINS, BG_EY_OBJECT_H_BANNER_DRAENEI_RUINS_CENTER, LANG_BG_EY_HAS_TAKEN_H_D_RUINS, EY_GRAVEYARD_DRAENEI_RUINS),
|
BattleGroundEYCapturingPointStruct(LANG_BG_EY_HAS_TAKEN_A_D_RUINS, LANG_BG_EY_HAS_TAKEN_H_D_RUINS, EY_GRAVEYARD_DRAENEI_RUINS),
|
||||||
BattleGroundEYCapturingPointStruct(BG_EY_OBJECT_N_BANNER_MAGE_TOWER_CENTER, BG_EY_OBJECT_A_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_A_M_TOWER, BG_EY_OBJECT_H_BANNER_MAGE_TOWER_CENTER, LANG_BG_EY_HAS_TAKEN_H_M_TOWER, EY_GRAVEYARD_MAGE_TOWER)
|
BattleGroundEYCapturingPointStruct(LANG_BG_EY_HAS_TAKEN_A_M_TOWER, LANG_BG_EY_HAS_TAKEN_H_M_TOWER, EY_GRAVEYARD_MAGE_TOWER)
|
||||||
};
|
};
|
||||||
|
|
||||||
class BattleGroundEYScore : public BattleGroundScore
|
class BattleGroundEYScore : public BattleGroundScore
|
||||||
|
|
@ -350,8 +288,9 @@ class BattleGroundEY : public BattleGround
|
||||||
|
|
||||||
/* achievement req. */
|
/* achievement req. */
|
||||||
bool IsAllNodesConrolledByTeam(uint32 team) const;
|
bool IsAllNodesConrolledByTeam(uint32 team) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void EventPlayerCapturedFlag(Player *Source, uint32 BgObjectType);
|
void EventPlayerCapturedFlag(Player *Source, BG_EY_Nodes node);
|
||||||
void EventTeamCapturedPoint(Player *Source, uint32 Point);
|
void EventTeamCapturedPoint(Player *Source, uint32 Point);
|
||||||
void EventTeamLostPoint(Player *Source, uint32 Point);
|
void EventTeamLostPoint(Player *Source, uint32 Point);
|
||||||
void UpdatePointsCount(uint32 Team);
|
void UpdatePointsCount(uint32 Team);
|
||||||
|
|
@ -372,21 +311,20 @@ class BattleGroundEY : public BattleGround
|
||||||
uint32 m_HonorScoreTics[2];
|
uint32 m_HonorScoreTics[2];
|
||||||
uint32 m_TeamPointsCount[2];
|
uint32 m_TeamPointsCount[2];
|
||||||
|
|
||||||
uint32 m_Points_Trigger[EY_POINTS_MAX];
|
uint32 m_Points_Trigger[BG_EY_NODES_MAX];
|
||||||
|
|
||||||
uint64 m_FlagKeeper; // keepers guid
|
uint64 m_FlagKeeper; // keepers guid
|
||||||
uint64 m_DroppedFlagGUID;
|
uint64 m_DroppedFlagGUID;
|
||||||
uint32 m_FlagCapturedBgObjectType; // type that should be despawned when flag is captured
|
|
||||||
uint8 m_FlagState; // for checking flag state
|
uint8 m_FlagState; // for checking flag state
|
||||||
int32 m_FlagsTimer;
|
int32 m_FlagsTimer;
|
||||||
int32 m_TowerCapCheckTimer;
|
int32 m_TowerCapCheckTimer;
|
||||||
|
|
||||||
uint32 m_PointOwnedByTeam[EY_POINTS_MAX];
|
uint32 m_PointOwnedByTeam[BG_EY_NODES_MAX];
|
||||||
uint8 m_PointState[EY_POINTS_MAX];
|
uint8 m_PointState[BG_EY_NODES_MAX];
|
||||||
int32 m_PointBarStatus[EY_POINTS_MAX];
|
int32 m_PointBarStatus[BG_EY_NODES_MAX];
|
||||||
typedef std::vector<uint64> PlayersNearPointType;
|
typedef std::vector<uint64> PlayersNearPointType;
|
||||||
PlayersNearPointType m_PlayersNearPoint[EY_POINTS_MAX + 1];
|
PlayersNearPointType m_PlayersNearPoint[BG_EY_NODES_MAX + 1];
|
||||||
uint8 m_CurrentPointPlayersCount[2*EY_POINTS_MAX];
|
uint8 m_CurrentPointPlayersCount[2*BG_EY_NODES_MAX];
|
||||||
|
|
||||||
int32 m_PointAddingTimer;
|
int32 m_PointAddingTimer;
|
||||||
uint32 m_HonorTics;
|
uint32 m_HonorTics;
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
|
|
||||||
BattleGroundNA::BattleGroundNA()
|
BattleGroundNA::BattleGroundNA()
|
||||||
{
|
{
|
||||||
m_BgObjects.resize(BG_NA_OBJECT_MAX);
|
|
||||||
|
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
||||||
|
|
@ -56,17 +54,11 @@ void BattleGroundNA::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundNA::StartingEventCloseDoors()
|
void BattleGroundNA::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_4; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundNA::StartingEventOpenDoors()
|
void BattleGroundNA::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_NA_OBJECT_DOOR_1; i <= BG_NA_OBJECT_DOOR_2; ++i)
|
OpenDoorEvent(BG_EVENT_DOOR);
|
||||||
DoorOpen(m_BgObjects[i]);
|
|
||||||
|
|
||||||
for(uint32 i = BG_NA_OBJECT_BUFF_1; i <= BG_NA_OBJECT_BUFF_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], 60);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundNA::AddPlayer(Player *plr)
|
void BattleGroundNA::AddPlayer(Player *plr)
|
||||||
|
|
@ -154,19 +146,6 @@ void BattleGroundNA::Reset()
|
||||||
|
|
||||||
bool BattleGroundNA::SetupBattleGround()
|
bool BattleGroundNA::SetupBattleGround()
|
||||||
{
|
{
|
||||||
// gates
|
|
||||||
if (!AddObject(BG_NA_OBJECT_DOOR_1, BG_NA_OBJECT_TYPE_DOOR_1, 4031.854, 2966.833, 12.6462, -2.648788, 0, 0, 0.9697962, -0.2439165, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_NA_OBJECT_DOOR_2, BG_NA_OBJECT_TYPE_DOOR_2, 4081.179, 2874.97, 12.39171, 0.4928045, 0, 0, 0.2439165, 0.9697962, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_NA_OBJECT_DOOR_3, BG_NA_OBJECT_TYPE_DOOR_3, 4023.709, 2981.777, 10.70117, -2.648788, 0, 0, 0.9697962, -0.2439165, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_NA_OBJECT_DOOR_4, BG_NA_OBJECT_TYPE_DOOR_4, 4090.064, 2858.438, 10.23631, 0.4928045, 0, 0, 0.2439165, 0.9697962, RESPAWN_IMMEDIATELY)
|
|
||||||
// buffs
|
|
||||||
|| !AddObject(BG_NA_OBJECT_BUFF_1, BG_NA_OBJECT_TYPE_BUFF_1, 4009.189941, 2895.250000, 13.052700, -1.448624, 0, 0, 0.6626201, -0.7489557, 120)
|
|
||||||
|| !AddObject(BG_NA_OBJECT_BUFF_2, BG_NA_OBJECT_TYPE_BUFF_2, 4103.330078, 2946.350098, 13.051300, -0.06981307, 0, 0, 0.03489945, -0.9993908, 120))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundNA: Failed to spawn some object!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,27 +20,6 @@
|
||||||
|
|
||||||
class BattleGround;
|
class BattleGround;
|
||||||
|
|
||||||
enum BattleGroundNAObjectTypes
|
|
||||||
{
|
|
||||||
BG_NA_OBJECT_DOOR_1 = 0,
|
|
||||||
BG_NA_OBJECT_DOOR_2 = 1,
|
|
||||||
BG_NA_OBJECT_DOOR_3 = 2,
|
|
||||||
BG_NA_OBJECT_DOOR_4 = 3,
|
|
||||||
BG_NA_OBJECT_BUFF_1 = 4,
|
|
||||||
BG_NA_OBJECT_BUFF_2 = 5,
|
|
||||||
BG_NA_OBJECT_MAX = 6
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BattleGroundNAObjects
|
|
||||||
{
|
|
||||||
BG_NA_OBJECT_TYPE_DOOR_1 = 183978,
|
|
||||||
BG_NA_OBJECT_TYPE_DOOR_2 = 183980,
|
|
||||||
BG_NA_OBJECT_TYPE_DOOR_3 = 183977,
|
|
||||||
BG_NA_OBJECT_TYPE_DOOR_4 = 183979,
|
|
||||||
BG_NA_OBJECT_TYPE_BUFF_1 = 184663,
|
|
||||||
BG_NA_OBJECT_TYPE_BUFF_2 = 184664
|
|
||||||
};
|
|
||||||
|
|
||||||
class BattleGroundNAScore : public BattleGroundScore
|
class BattleGroundNAScore : public BattleGroundScore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@
|
||||||
|
|
||||||
BattleGroundRL::BattleGroundRL()
|
BattleGroundRL::BattleGroundRL()
|
||||||
{
|
{
|
||||||
m_BgObjects.resize(BG_RL_OBJECT_MAX);
|
|
||||||
|
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
m_StartDelayTimes[BG_STARTING_EVENT_FIRST] = BG_START_DELAY_1M;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
m_StartDelayTimes[BG_STARTING_EVENT_SECOND] = BG_START_DELAY_30S;
|
||||||
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
m_StartDelayTimes[BG_STARTING_EVENT_THIRD] = BG_START_DELAY_15S;
|
||||||
|
|
@ -56,17 +54,11 @@ void BattleGroundRL::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundRL::StartingEventCloseDoors()
|
void BattleGroundRL::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundRL::StartingEventOpenDoors()
|
void BattleGroundRL::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_RL_OBJECT_DOOR_1; i <= BG_RL_OBJECT_DOOR_2; ++i)
|
OpenDoorEvent(BG_EVENT_DOOR);
|
||||||
DoorOpen(m_BgObjects[i]);
|
|
||||||
|
|
||||||
for(uint32 i = BG_RL_OBJECT_BUFF_1; i <= BG_RL_OBJECT_BUFF_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], 60);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundRL::AddPlayer(Player *plr)
|
void BattleGroundRL::AddPlayer(Player *plr)
|
||||||
|
|
@ -155,17 +147,6 @@ void BattleGroundRL::Reset()
|
||||||
|
|
||||||
bool BattleGroundRL::SetupBattleGround()
|
bool BattleGroundRL::SetupBattleGround()
|
||||||
{
|
{
|
||||||
// gates
|
|
||||||
if (!AddObject(BG_RL_OBJECT_DOOR_1, BG_RL_OBJECT_TYPE_DOOR_1, 1293.561, 1601.938, 31.60557, -1.457349, 0, 0, -0.6658813, 0.7460576, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_RL_OBJECT_DOOR_2, BG_RL_OBJECT_TYPE_DOOR_2, 1278.648, 1730.557, 31.60557, 1.684245, 0, 0, 0.7460582, 0.6658807, RESPAWN_IMMEDIATELY)
|
|
||||||
// buffs
|
|
||||||
|| !AddObject(BG_RL_OBJECT_BUFF_1, BG_RL_OBJECT_TYPE_BUFF_1, 1328.719971, 1632.719971, 36.730400, -1.448624, 0, 0, 0.6626201, -0.7489557, 120)
|
|
||||||
|| !AddObject(BG_RL_OBJECT_BUFF_2, BG_RL_OBJECT_TYPE_BUFF_2, 1243.300049, 1699.170044, 34.872601, -0.06981307, 0, 0, 0.03489945, -0.9993908, 120))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundRL: Failed to spawn some object!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,23 +20,6 @@
|
||||||
|
|
||||||
class BattleGround;
|
class BattleGround;
|
||||||
|
|
||||||
enum BattleGroundRLObjectTypes
|
|
||||||
{
|
|
||||||
BG_RL_OBJECT_DOOR_1 = 0,
|
|
||||||
BG_RL_OBJECT_DOOR_2 = 1,
|
|
||||||
BG_RL_OBJECT_BUFF_1 = 2,
|
|
||||||
BG_RL_OBJECT_BUFF_2 = 3,
|
|
||||||
BG_RL_OBJECT_MAX = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BattleGroundRLObjects
|
|
||||||
{
|
|
||||||
BG_RL_OBJECT_TYPE_DOOR_1 = 185918,
|
|
||||||
BG_RL_OBJECT_TYPE_DOOR_2 = 185917,
|
|
||||||
BG_RL_OBJECT_TYPE_BUFF_1 = 184663,
|
|
||||||
BG_RL_OBJECT_TYPE_BUFF_2 = 184664
|
|
||||||
};
|
|
||||||
|
|
||||||
class BattleGroundRLScore : public BattleGroundScore
|
class BattleGroundRLScore : public BattleGroundScore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,6 @@
|
||||||
|
|
||||||
BattleGroundWS::BattleGroundWS()
|
BattleGroundWS::BattleGroundWS()
|
||||||
{
|
{
|
||||||
m_BgObjects.resize(BG_WS_OBJECT_MAX);
|
|
||||||
m_BgCreatures.resize(BG_CREATURES_MAX_WS);
|
|
||||||
|
|
||||||
m_StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_WS_START_TWO_MINUTES;
|
m_StartMessageIds[BG_STARTING_EVENT_FIRST] = LANG_BG_WS_START_TWO_MINUTES;
|
||||||
m_StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_WS_START_ONE_MINUTE;
|
m_StartMessageIds[BG_STARTING_EVENT_SECOND] = LANG_BG_WS_START_ONE_MINUTE;
|
||||||
m_StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_BG_WS_START_HALF_MINUTE;
|
m_StartMessageIds[BG_STARTING_EVENT_THIRD] = LANG_BG_WS_START_HALF_MINUTE;
|
||||||
|
|
@ -93,29 +90,16 @@ void BattleGroundWS::Update(uint32 diff)
|
||||||
|
|
||||||
void BattleGroundWS::StartingEventCloseDoors()
|
void BattleGroundWS::StartingEventCloseDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_WS_OBJECT_DOOR_A_1; i <= BG_WS_OBJECT_DOOR_H_4; ++i)
|
|
||||||
{
|
|
||||||
DoorClose(m_BgObjects[i]);
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
|
||||||
}
|
|
||||||
for(uint32 i = BG_WS_OBJECT_A_FLAG; i <= BG_WS_OBJECT_BERSERKBUFF_2; ++i)
|
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_ONE_DAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundWS::StartingEventOpenDoors()
|
void BattleGroundWS::StartingEventOpenDoors()
|
||||||
{
|
{
|
||||||
for(uint32 i = BG_WS_OBJECT_DOOR_A_1; i <= BG_WS_OBJECT_DOOR_A_4; ++i)
|
OpenDoorEvent(BG_EVENT_DOOR);
|
||||||
DoorOpen(m_BgObjects[i]);
|
|
||||||
for(uint32 i = BG_WS_OBJECT_DOOR_H_1; i <= BG_WS_OBJECT_DOOR_H_2; ++i)
|
|
||||||
DoorOpen(m_BgObjects[i]);
|
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_DOOR_A_5], RESPAWN_ONE_DAY);
|
// TODO implement timer to despawn doors after a short while
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_DOOR_A_6], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_DOOR_H_3], RESPAWN_ONE_DAY);
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_DOOR_H_4], RESPAWN_ONE_DAY);
|
|
||||||
|
|
||||||
for(uint32 i = BG_WS_OBJECT_A_FLAG; i <= BG_WS_OBJECT_BERSERKBUFF_2; ++i)
|
SpawnEvent(WS_EVENT_FLAG_A, 0, true);
|
||||||
SpawnBGObject(m_BgObjects[i], RESPAWN_IMMEDIATELY);
|
SpawnEvent(WS_EVENT_FLAG_H, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundWS::AddPlayer(Player *plr)
|
void BattleGroundWS::AddPlayer(Player *plr)
|
||||||
|
|
@ -133,18 +117,20 @@ void BattleGroundWS::RespawnFlag(uint32 Team, bool captured)
|
||||||
{
|
{
|
||||||
sLog.outDebug("Respawn Alliance flag");
|
sLog.outDebug("Respawn Alliance flag");
|
||||||
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_BASE;
|
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_BASE;
|
||||||
|
SpawnEvent(WS_EVENT_FLAG_A, 0, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sLog.outDebug("Respawn Horde flag");
|
sLog.outDebug("Respawn Horde flag");
|
||||||
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_BASE;
|
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_BASE;
|
||||||
|
SpawnEvent(WS_EVENT_FLAG_H, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (captured)
|
if (captured)
|
||||||
{
|
{
|
||||||
//when map_update will be allowed for battlegrounds this code will be useless
|
//when map_update will be allowed for battlegrounds this code will be useless
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], RESPAWN_IMMEDIATELY);
|
SpawnEvent(WS_EVENT_FLAG_A, 0, true);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], RESPAWN_IMMEDIATELY);
|
SpawnEvent(WS_EVENT_FLAG_H, 0, true);
|
||||||
SendMessageToAll(LANG_BG_WS_F_PLACED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
SendMessageToAll(LANG_BG_WS_F_PLACED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
||||||
PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED); // flag respawned sound...
|
PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED); // flag respawned sound...
|
||||||
}
|
}
|
||||||
|
|
@ -155,17 +141,11 @@ void BattleGroundWS::RespawnFlagAfterDrop(uint32 team)
|
||||||
if (GetStatus() != STATUS_IN_PROGRESS)
|
if (GetStatus() != STATUS_IN_PROGRESS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RespawnFlag(team,false);
|
RespawnFlag(team, false);
|
||||||
if (team == ALLIANCE)
|
if (team == ALLIANCE)
|
||||||
{
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], RESPAWN_IMMEDIATELY);
|
|
||||||
SendMessageToAll(LANG_BG_WS_ALLIANCE_FLAG_RESPAWNED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
SendMessageToAll(LANG_BG_WS_ALLIANCE_FLAG_RESPAWNED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], RESPAWN_IMMEDIATELY);
|
|
||||||
SendMessageToAll(LANG_BG_WS_HORDE_FLAG_RESPAWNED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
SendMessageToAll(LANG_BG_WS_HORDE_FLAG_RESPAWNED, CHAT_MSG_BG_SYSTEM_NEUTRAL);
|
||||||
}
|
|
||||||
|
|
||||||
PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED);
|
PlaySoundToAll(BG_WS_SOUND_FLAGS_RESPAWNED);
|
||||||
|
|
||||||
|
|
@ -217,8 +197,9 @@ void BattleGroundWS::EventPlayerCapturedFlag(Player *Source)
|
||||||
//for flag capture is reward 2 honorable kills
|
//for flag capture is reward 2 honorable kills
|
||||||
RewardHonorToTeam(GetBonusHonorFromKill(2), Source->GetTeam());
|
RewardHonorToTeam(GetBonusHonorFromKill(2), Source->GetTeam());
|
||||||
|
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], BG_WS_FLAG_RESPAWN_TIME);
|
// despawn flags
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], BG_WS_FLAG_RESPAWN_TIME);
|
SpawnEvent(WS_EVENT_FLAG_A, 0, false);
|
||||||
|
SpawnEvent(WS_EVENT_FLAG_H, 0, false);
|
||||||
|
|
||||||
if (Source->GetTeam() == ALLIANCE)
|
if (Source->GetTeam() == ALLIANCE)
|
||||||
SendMessageToAll(LANG_BG_WS_CAPTURED_HF, CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
SendMessageToAll(LANG_BG_WS_CAPTURED_HF, CHAT_MSG_BG_SYSTEM_ALLIANCE, Source);
|
||||||
|
|
@ -337,14 +318,16 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
int32 message_id = 0;
|
int32 message_id = 0;
|
||||||
ChatMsg type;
|
ChatMsg type;
|
||||||
|
|
||||||
|
uint8 event = (sBattleGroundMgr.GetGameObjectEventIndex(target_obj->GetDBTableGUIDLow())).event1;
|
||||||
|
|
||||||
//alliance flag picked up from base
|
//alliance flag picked up from base
|
||||||
if(Source->GetTeam() == HORDE && GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_BASE
|
if(Source->GetTeam() == HORDE && GetFlagState(ALLIANCE) == BG_WS_FLAG_STATE_ON_BASE
|
||||||
&& m_BgObjects[BG_WS_OBJECT_A_FLAG] == target_obj->GetGUID())
|
&& event == WS_EVENT_FLAG_A)
|
||||||
{
|
{
|
||||||
message_id = LANG_BG_WS_PICKEDUP_AF;
|
message_id = LANG_BG_WS_PICKEDUP_AF;
|
||||||
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
||||||
PlaySoundToAll(BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP);
|
PlaySoundToAll(BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], RESPAWN_ONE_DAY);
|
SpawnEvent(WS_EVENT_FLAG_A, 0, false);
|
||||||
SetAllianceFlagPicker(Source->GetGUID());
|
SetAllianceFlagPicker(Source->GetGUID());
|
||||||
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
||||||
//update world state to show correct flag carrier
|
//update world state to show correct flag carrier
|
||||||
|
|
@ -355,12 +338,12 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
|
|
||||||
//horde flag picked up from base
|
//horde flag picked up from base
|
||||||
if (Source->GetTeam() == ALLIANCE && GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_BASE
|
if (Source->GetTeam() == ALLIANCE && GetFlagState(HORDE) == BG_WS_FLAG_STATE_ON_BASE
|
||||||
&& m_BgObjects[BG_WS_OBJECT_H_FLAG] == target_obj->GetGUID())
|
&& event == WS_EVENT_FLAG_H)
|
||||||
{
|
{
|
||||||
message_id = LANG_BG_WS_PICKEDUP_HF;
|
message_id = LANG_BG_WS_PICKEDUP_HF;
|
||||||
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
||||||
PlaySoundToAll(BG_WS_SOUND_HORDE_FLAG_PICKED_UP);
|
PlaySoundToAll(BG_WS_SOUND_HORDE_FLAG_PICKED_UP);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], RESPAWN_ONE_DAY);
|
SpawnEvent(WS_EVENT_FLAG_H, 0, false);
|
||||||
SetHordeFlagPicker(Source->GetGUID());
|
SetHordeFlagPicker(Source->GetGUID());
|
||||||
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
||||||
//update world state to show correct flag carrier
|
//update world state to show correct flag carrier
|
||||||
|
|
@ -378,7 +361,6 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
||||||
UpdateFlagState(HORDE, BG_WS_FLAG_STATE_WAIT_RESPAWN);
|
UpdateFlagState(HORDE, BG_WS_FLAG_STATE_WAIT_RESPAWN);
|
||||||
RespawnFlag(ALLIANCE, false);
|
RespawnFlag(ALLIANCE, false);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], RESPAWN_IMMEDIATELY);
|
|
||||||
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
|
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
|
||||||
UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1);
|
UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -387,7 +369,7 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
message_id = LANG_BG_WS_PICKEDUP_AF;
|
message_id = LANG_BG_WS_PICKEDUP_AF;
|
||||||
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
||||||
PlaySoundToAll(BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP);
|
PlaySoundToAll(BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_A_FLAG], RESPAWN_ONE_DAY);
|
SpawnEvent(WS_EVENT_FLAG_A, 0, false);
|
||||||
SetAllianceFlagPicker(Source->GetGUID());
|
SetAllianceFlagPicker(Source->GetGUID());
|
||||||
Source->CastSpell(Source, BG_WS_SPELL_SILVERWING_FLAG, true);
|
Source->CastSpell(Source, BG_WS_SPELL_SILVERWING_FLAG, true);
|
||||||
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
||||||
|
|
@ -407,7 +389,6 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
type = CHAT_MSG_BG_SYSTEM_HORDE;
|
||||||
UpdateFlagState(ALLIANCE, BG_WS_FLAG_STATE_WAIT_RESPAWN);
|
UpdateFlagState(ALLIANCE, BG_WS_FLAG_STATE_WAIT_RESPAWN);
|
||||||
RespawnFlag(HORDE, false);
|
RespawnFlag(HORDE, false);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], RESPAWN_IMMEDIATELY);
|
|
||||||
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
|
PlaySoundToAll(BG_WS_SOUND_FLAG_RETURNED);
|
||||||
UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1);
|
UpdatePlayerScore(Source, SCORE_FLAG_RETURNS, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -416,7 +397,7 @@ void BattleGroundWS::EventPlayerClickedOnFlag(Player *Source, GameObject* target
|
||||||
message_id = LANG_BG_WS_PICKEDUP_HF;
|
message_id = LANG_BG_WS_PICKEDUP_HF;
|
||||||
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
type = CHAT_MSG_BG_SYSTEM_ALLIANCE;
|
||||||
PlaySoundToAll(BG_WS_SOUND_HORDE_FLAG_PICKED_UP);
|
PlaySoundToAll(BG_WS_SOUND_HORDE_FLAG_PICKED_UP);
|
||||||
SpawnBGObject(m_BgObjects[BG_WS_OBJECT_H_FLAG], RESPAWN_ONE_DAY);
|
SpawnEvent(WS_EVENT_FLAG_H, 0, false);
|
||||||
SetHordeFlagPicker(Source->GetGUID());
|
SetHordeFlagPicker(Source->GetGUID());
|
||||||
Source->CastSpell(Source, BG_WS_SPELL_WARSONG_FLAG, true);
|
Source->CastSpell(Source, BG_WS_SPELL_WARSONG_FLAG, true);
|
||||||
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_PLAYER;
|
||||||
|
|
@ -532,50 +513,6 @@ void BattleGroundWS::HandleAreaTrigger(Player *Source, uint32 Trigger)
|
||||||
|
|
||||||
bool BattleGroundWS::SetupBattleGround()
|
bool BattleGroundWS::SetupBattleGround()
|
||||||
{
|
{
|
||||||
// flags
|
|
||||||
if (!AddObject(BG_WS_OBJECT_A_FLAG, BG_OBJECT_A_FLAG_WS_ENTRY, 1540.423f, 1481.325f, 351.8284f, 3.089233f, 0, 0, 0.9996573f, 0.02617699f, BG_WS_FLAG_RESPAWN_TIME/1000)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_H_FLAG, BG_OBJECT_H_FLAG_WS_ENTRY, 916.0226f, 1434.405f, 345.413f, 0.01745329f, 0, 0, 0.008726535f, 0.9999619f, BG_WS_FLAG_RESPAWN_TIME/1000)
|
|
||||||
// buffs
|
|
||||||
|| !AddObject(BG_WS_OBJECT_SPEEDBUFF_1, BG_OBJECTID_SPEEDBUFF_ENTRY, 1449.93f, 1470.71f, 342.6346f, -1.64061f, 0, 0, 0.7313537f, -0.6819983f, BUFF_RESPAWN_TIME)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_SPEEDBUFF_2, BG_OBJECTID_SPEEDBUFF_ENTRY, 1005.171f, 1447.946f, 335.9032f, 1.64061f, 0, 0, 0.7313537f, 0.6819984f, BUFF_RESPAWN_TIME)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_REGENBUFF_1, BG_OBJECTID_REGENBUFF_ENTRY, 1317.506f, 1550.851f, 313.2344f, -0.2617996f, 0, 0, 0.1305263f, -0.9914448f, BUFF_RESPAWN_TIME)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_REGENBUFF_2, BG_OBJECTID_REGENBUFF_ENTRY, 1110.451f, 1353.656f, 316.5181f, -0.6806787f, 0, 0, 0.333807f, -0.9426414f, BUFF_RESPAWN_TIME)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_BERSERKBUFF_1, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1320.09f, 1378.79f, 314.7532f, 1.186824f, 0, 0, 0.5591929f, 0.8290376f, BUFF_RESPAWN_TIME)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_BERSERKBUFF_2, BG_OBJECTID_BERSERKERBUFF_ENTRY, 1139.688f, 1560.288f, 306.8432f, -2.443461f, 0, 0, 0.9396926f, -0.3420201f, BUFF_RESPAWN_TIME)
|
|
||||||
// alliance gates
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_1, BG_OBJECT_DOOR_A_1_WS_ENTRY, 1503.335f, 1493.466f, 352.1888f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_2, BG_OBJECT_DOOR_A_2_WS_ENTRY, 1492.478f, 1457.912f, 342.9689f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_3, BG_OBJECT_DOOR_A_3_WS_ENTRY, 1468.503f, 1494.357f, 351.8618f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_4, BG_OBJECT_DOOR_A_4_WS_ENTRY, 1471.555f, 1458.778f, 362.6332f, 3.115414f, 0, 0, 0.9999143f, 0.01308903f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_5, BG_OBJECT_DOOR_A_5_WS_ENTRY, 1492.347f, 1458.34f, 342.3712f, -0.03490669f, 0, 0, 0.01745246f, -0.9998477f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_A_6, BG_OBJECT_DOOR_A_6_WS_ENTRY, 1503.466f, 1493.367f, 351.7352f, -0.03490669f, 0, 0, 0.01745246f, -0.9998477f, RESPAWN_IMMEDIATELY)
|
|
||||||
// horde gates
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_H_1, BG_OBJECT_DOOR_H_1_WS_ENTRY, 949.1663f, 1423.772f, 345.6241f, -0.5756807f, -0.01673368f, -0.004956111f, -0.2839723f, 0.9586737f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_H_2, BG_OBJECT_DOOR_H_2_WS_ENTRY, 953.0507f, 1459.842f, 340.6526f, -1.99662f, -0.1971825f, 0.1575096f, -0.8239487f, 0.5073641f, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_H_3, BG_OBJECT_DOOR_H_3_WS_ENTRY, 949.9523f, 1422.751f, 344.9273f, 0.0f, 0, 0, 0, 1, RESPAWN_IMMEDIATELY)
|
|
||||||
|| !AddObject(BG_WS_OBJECT_DOOR_H_4, BG_OBJECT_DOOR_H_4_WS_ENTRY, 950.7952f, 1459.583f, 342.1523f, 0.05235988f, 0, 0, 0.02617695f, 0.9996573f, RESPAWN_IMMEDIATELY)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundWS: Failed to spawn some object BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
WorldSafeLocsEntry const *sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE);
|
|
||||||
if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->x, sg->y, sg->z, 3.124139f, ALLIANCE))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundWS: Failed to spawn Alliance spirit guide! BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE);
|
|
||||||
if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->x, sg->y, sg->z, 3.193953f, HORDE))
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("BatteGroundWS: Failed to spawn Horde spirit guide! BattleGround not created!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
sLog.outDebug("BatteGroundWS: BG objects and spirit guides spawned");
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -584,25 +521,23 @@ void BattleGroundWS::Reset()
|
||||||
//call parent's class reset
|
//call parent's class reset
|
||||||
BattleGround::Reset();
|
BattleGround::Reset();
|
||||||
|
|
||||||
m_FlagKeepers[BG_TEAM_ALLIANCE] = 0;
|
// spiritguides and flags not spawned at beginning
|
||||||
m_FlagKeepers[BG_TEAM_HORDE] = 0;
|
m_ActiveEvents[WS_EVENT_SPIRITGUIDES_SPAWN] = BG_EVENT_NONE;
|
||||||
m_DroppedFlagGUID[BG_TEAM_ALLIANCE] = 0;
|
m_ActiveEvents[WS_EVENT_FLAG_A] = BG_EVENT_NONE;
|
||||||
m_DroppedFlagGUID[BG_TEAM_HORDE] = 0;
|
m_ActiveEvents[WS_EVENT_FLAG_H] = BG_EVENT_NONE;
|
||||||
m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_BASE;
|
|
||||||
m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_BASE;
|
for(uint32 i = 0; i < BG_TEAMS_COUNT; ++i)
|
||||||
m_TeamScores[BG_TEAM_ALLIANCE] = 0;
|
{
|
||||||
m_TeamScores[BG_TEAM_HORDE] = 0;
|
m_DroppedFlagGUID[i] = 0;
|
||||||
|
m_FlagKeepers[i] = 0;
|
||||||
|
m_FlagState[i] = BG_WS_FLAG_STATE_ON_BASE;
|
||||||
|
m_TeamScores[i] = 0;
|
||||||
|
}
|
||||||
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
bool isBGWeekend = sBattleGroundMgr.IsBGWeekend(GetTypeID());
|
||||||
m_ReputationCapture = (isBGWeekend) ? 45 : 35;
|
m_ReputationCapture = (isBGWeekend) ? 45 : 35;
|
||||||
m_HonorWinKills = (isBGWeekend) ? 3 : 1;
|
m_HonorWinKills = (isBGWeekend) ? 3 : 1;
|
||||||
m_HonorEndKills = (isBGWeekend) ? 4 : 2;
|
m_HonorEndKills = (isBGWeekend) ? 4 : 2;
|
||||||
|
|
||||||
/* Spirit nodes is static at this BG and then not required deleting at BG reset.
|
|
||||||
if (m_BgCreatures[WS_SPIRIT_MAIN_ALLIANCE])
|
|
||||||
DelCreature(WS_SPIRIT_MAIN_ALLIANCE);
|
|
||||||
if (m_BgCreatures[WS_SPIRIT_MAIN_HORDE])
|
|
||||||
DelCreature(WS_SPIRIT_MAIN_HORDE);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BattleGroundWS::EndBattleGround(uint32 winner)
|
void BattleGroundWS::EndBattleGround(uint32 winner)
|
||||||
|
|
|
||||||
|
|
@ -56,45 +56,6 @@ enum BG_WS_WorldStates
|
||||||
BG_WS_FLAG_STATE_ALLIANCE = 2339
|
BG_WS_FLAG_STATE_ALLIANCE = 2339
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BG_WS_ObjectTypes
|
|
||||||
{
|
|
||||||
BG_WS_OBJECT_DOOR_A_1 = 0,
|
|
||||||
BG_WS_OBJECT_DOOR_A_2 = 1,
|
|
||||||
BG_WS_OBJECT_DOOR_A_3 = 2,
|
|
||||||
BG_WS_OBJECT_DOOR_A_4 = 3,
|
|
||||||
BG_WS_OBJECT_DOOR_A_5 = 4,
|
|
||||||
BG_WS_OBJECT_DOOR_A_6 = 5,
|
|
||||||
BG_WS_OBJECT_DOOR_H_1 = 6,
|
|
||||||
BG_WS_OBJECT_DOOR_H_2 = 7,
|
|
||||||
BG_WS_OBJECT_DOOR_H_3 = 8,
|
|
||||||
BG_WS_OBJECT_DOOR_H_4 = 9,
|
|
||||||
BG_WS_OBJECT_A_FLAG = 10,
|
|
||||||
BG_WS_OBJECT_H_FLAG = 11,
|
|
||||||
BG_WS_OBJECT_SPEEDBUFF_1 = 12,
|
|
||||||
BG_WS_OBJECT_SPEEDBUFF_2 = 13,
|
|
||||||
BG_WS_OBJECT_REGENBUFF_1 = 14,
|
|
||||||
BG_WS_OBJECT_REGENBUFF_2 = 15,
|
|
||||||
BG_WS_OBJECT_BERSERKBUFF_1 = 16,
|
|
||||||
BG_WS_OBJECT_BERSERKBUFF_2 = 17,
|
|
||||||
BG_WS_OBJECT_MAX = 18
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BG_WS_ObjectEntry
|
|
||||||
{
|
|
||||||
BG_OBJECT_DOOR_A_1_WS_ENTRY = 179918,
|
|
||||||
BG_OBJECT_DOOR_A_2_WS_ENTRY = 179919,
|
|
||||||
BG_OBJECT_DOOR_A_3_WS_ENTRY = 179920,
|
|
||||||
BG_OBJECT_DOOR_A_4_WS_ENTRY = 179921,
|
|
||||||
BG_OBJECT_DOOR_A_5_WS_ENTRY = 180322,
|
|
||||||
BG_OBJECT_DOOR_A_6_WS_ENTRY = 180322,
|
|
||||||
BG_OBJECT_DOOR_H_1_WS_ENTRY = 179916,
|
|
||||||
BG_OBJECT_DOOR_H_2_WS_ENTRY = 179917,
|
|
||||||
BG_OBJECT_DOOR_H_3_WS_ENTRY = 180322,
|
|
||||||
BG_OBJECT_DOOR_H_4_WS_ENTRY = 180322,
|
|
||||||
BG_OBJECT_A_FLAG_WS_ENTRY = 179830,
|
|
||||||
BG_OBJECT_H_FLAG_WS_ENTRY = 179831
|
|
||||||
};
|
|
||||||
|
|
||||||
enum BG_WS_FlagState
|
enum BG_WS_FlagState
|
||||||
{
|
{
|
||||||
BG_WS_FLAG_STATE_ON_BASE = 0,
|
BG_WS_FLAG_STATE_ON_BASE = 0,
|
||||||
|
|
@ -111,14 +72,6 @@ enum BG_WS_Graveyards
|
||||||
WS_GRAVEYARD_MAIN_HORDE = 772
|
WS_GRAVEYARD_MAIN_HORDE = 772
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BG_WS_CreatureTypes
|
|
||||||
{
|
|
||||||
WS_SPIRIT_MAIN_ALLIANCE = 0,
|
|
||||||
WS_SPIRIT_MAIN_HORDE = 1,
|
|
||||||
|
|
||||||
BG_CREATURES_MAX_WS = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
class BattleGroundWGScore : public BattleGroundScore
|
class BattleGroundWGScore : public BattleGroundScore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -128,6 +81,15 @@ class BattleGroundWGScore : public BattleGroundScore
|
||||||
uint32 FlagReturns;
|
uint32 FlagReturns;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum BG_WS_Events
|
||||||
|
{
|
||||||
|
WS_EVENT_FLAG_A = 0,
|
||||||
|
WS_EVENT_FLAG_H = 1,
|
||||||
|
// spiritguides will spawn (same moment, like WS_EVENT_DOOR_OPEN)
|
||||||
|
WS_EVENT_SPIRITGUIDES_SPAWN = 2
|
||||||
|
};
|
||||||
|
|
||||||
class BattleGroundWS : public BattleGround
|
class BattleGroundWS : public BattleGround
|
||||||
{
|
{
|
||||||
friend class BattleGroundMgr;
|
friend class BattleGroundMgr;
|
||||||
|
|
@ -180,11 +142,12 @@ class BattleGroundWS : public BattleGround
|
||||||
void SetTeamPoint(uint32 TeamID, uint32 Points = 0) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] = Points; }
|
void SetTeamPoint(uint32 TeamID, uint32 Points = 0) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] = Points; }
|
||||||
void RemovePoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] -= Points; }
|
void RemovePoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] -= Points; }
|
||||||
private:
|
private:
|
||||||
uint64 m_FlagKeepers[2]; // 0 - alliance, 1 - horde
|
uint64 m_FlagKeepers[BG_TEAMS_COUNT];
|
||||||
uint64 m_DroppedFlagGUID[2];
|
|
||||||
uint8 m_FlagState[2]; // for checking flag state
|
uint64 m_DroppedFlagGUID[BG_TEAMS_COUNT];
|
||||||
int32 m_FlagsTimer[2];
|
uint8 m_FlagState[BG_TEAMS_COUNT];
|
||||||
int32 m_FlagsDropTimer[2];
|
int32 m_FlagsTimer[BG_TEAMS_COUNT];
|
||||||
|
int32 m_FlagsDropTimer[BG_TEAMS_COUNT];
|
||||||
|
|
||||||
uint32 m_ReputationCapture;
|
uint32 m_ReputationCapture;
|
||||||
uint32 m_HonorWinKills;
|
uint32 m_HonorWinKills;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue