Skip to content

Commit

Permalink
[12760] Extend pvp team indexes to global use
Browse files Browse the repository at this point in the history
Close #139

Signed-off-by: Xfurry <xfurry@scriptdev2.com>
  • Loading branch information
Dramacydal authored and xfurry committed Nov 4, 2014
1 parent 9485dd3 commit 5c3b410
Show file tree
Hide file tree
Showing 14 changed files with 264 additions and 263 deletions.
46 changes: 23 additions & 23 deletions src/game/BattleGround/BattleGround.cpp
Expand Up @@ -196,32 +196,32 @@ BattleGround::BattleGround()
m_MapId = 0;
m_Map = NULL;

m_TeamStartLocX[BG_TEAM_ALLIANCE] = 0;
m_TeamStartLocX[BG_TEAM_HORDE] = 0;
m_TeamStartLocX[TEAM_INDEX_ALLIANCE] = 0;
m_TeamStartLocX[TEAM_INDEX_HORDE] = 0;

m_TeamStartLocY[BG_TEAM_ALLIANCE] = 0;
m_TeamStartLocY[BG_TEAM_HORDE] = 0;
m_TeamStartLocY[TEAM_INDEX_ALLIANCE] = 0;
m_TeamStartLocY[TEAM_INDEX_HORDE] = 0;

m_TeamStartLocZ[BG_TEAM_ALLIANCE] = 0;
m_TeamStartLocZ[BG_TEAM_HORDE] = 0;
m_TeamStartLocZ[TEAM_INDEX_ALLIANCE] = 0;
m_TeamStartLocZ[TEAM_INDEX_HORDE] = 0;

m_TeamStartLocO[BG_TEAM_ALLIANCE] = 0;
m_TeamStartLocO[BG_TEAM_HORDE] = 0;
m_TeamStartLocO[TEAM_INDEX_ALLIANCE] = 0;
m_TeamStartLocO[TEAM_INDEX_HORDE] = 0;

m_ArenaTeamIds[BG_TEAM_ALLIANCE] = 0;
m_ArenaTeamIds[BG_TEAM_HORDE] = 0;
m_ArenaTeamIds[TEAM_INDEX_ALLIANCE] = 0;
m_ArenaTeamIds[TEAM_INDEX_HORDE] = 0;

m_ArenaTeamRatingChanges[BG_TEAM_ALLIANCE] = 0;
m_ArenaTeamRatingChanges[BG_TEAM_HORDE] = 0;
m_ArenaTeamRatingChanges[TEAM_INDEX_ALLIANCE] = 0;
m_ArenaTeamRatingChanges[TEAM_INDEX_HORDE] = 0;

m_BgRaids[BG_TEAM_ALLIANCE] = NULL;
m_BgRaids[BG_TEAM_HORDE] = NULL;
m_BgRaids[TEAM_INDEX_ALLIANCE] = NULL;
m_BgRaids[TEAM_INDEX_HORDE] = NULL;

m_PlayersCount[BG_TEAM_ALLIANCE] = 0;
m_PlayersCount[BG_TEAM_HORDE] = 0;
m_PlayersCount[TEAM_INDEX_ALLIANCE] = 0;
m_PlayersCount[TEAM_INDEX_HORDE] = 0;

m_TeamScores[BG_TEAM_ALLIANCE] = 0;
m_TeamScores[BG_TEAM_HORDE] = 0;
m_TeamScores[TEAM_INDEX_ALLIANCE] = 0;
m_TeamScores[TEAM_INDEX_HORDE] = 0;

m_PrematureCountDown = false;
m_PrematureCountDownTimer = 0;
Expand Down Expand Up @@ -450,7 +450,7 @@ void BattleGround::Update(uint32 diff)

void BattleGround::SetTeamStartLoc(Team team, float X, float Y, float Z, float O)
{
BattleGroundTeamIndex teamIdx = GetTeamIndexByTeamId(team);
PvpTeamIndex teamIdx = GetTeamIndexByTeamId(team);
m_TeamStartLocX[teamIdx] = X;
m_TeamStartLocY[teamIdx] = Y;
m_TeamStartLocZ[teamIdx] = Z;
Expand Down Expand Up @@ -629,20 +629,20 @@ void BattleGround::EndBattleGround(Team winner)
WorldPacket data;
int32 winmsg_id = 0;

uint32 winner_team = 0;
uint32 winner_team = TEAM_INDEX_NEUTRAL;
uint64 battleground_id = 1;

if (winner == ALLIANCE)
{
winmsg_id = isBattleGround() ? LANG_BG_A_WINS : LANG_ARENA_GOLD_WINS;
winner_team = BG_TEAM_ALLIANCE;
winner_team = TEAM_INDEX_ALLIANCE;

PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound
}
else if (winner == HORDE)
{
winmsg_id = isBattleGround() ? LANG_BG_H_WINS : LANG_ARENA_GREEN_WINS;
winner_team = BG_TEAM_HORDE;
winner_team = TEAM_INDEX_HORDE;

PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound
}
Expand Down Expand Up @@ -1729,7 +1729,7 @@ WorldSafeLocsEntry const* BattleGround::GetClosestGraveYard(Player* player)

bool BattleGround::IsTeamScoreInRange(Team team, uint32 minScore, uint32 maxScore) const
{
BattleGroundTeamIndex team_idx = GetTeamIndexByTeamId(team);
PvpTeamIndex team_idx = GetTeamIndexByTeamId(team);
uint32 score = (m_TeamScores[team_idx] < 0) ? 0 : uint32(m_TeamScores[team_idx]);
return score >= minScore && score <= maxScore;
}
Expand Down
32 changes: 12 additions & 20 deletions src/game/BattleGround/BattleGround.h
Expand Up @@ -200,14 +200,6 @@ enum BattleGroundType
TYPE_ARENA = 4
};

enum BattleGroundTeamIndex
{
BG_TEAM_ALLIANCE = 0,
BG_TEAM_HORDE = 1
};

#define BG_TEAMS_COUNT 2

enum BattleGroundStartingEvents
{
BG_STARTING_EVENT_NONE = 0x00,
Expand Down Expand Up @@ -398,7 +390,7 @@ class BattleGround
void SetTeamStartLoc(Team team, float X, float Y, float Z, float O);
void GetTeamStartLoc(Team team, float& X, float& Y, float& Z, float& O) const
{
BattleGroundTeamIndex idx = GetTeamIndexByTeamId(team);
PvpTeamIndex idx = GetTeamIndexByTeamId(team);
X = m_TeamStartLocX[idx];
Y = m_TeamStartLocY[idx];
Z = m_TeamStartLocZ[idx];
Expand Down Expand Up @@ -443,7 +435,7 @@ class BattleGround

virtual void UpdatePlayerScore(Player* Source, uint32 type, uint32 value);

static BattleGroundTeamIndex GetTeamIndexByTeamId(Team team) { return team == ALLIANCE ? BG_TEAM_ALLIANCE : BG_TEAM_HORDE; }
static PvpTeamIndex GetTeamIndexByTeamId(Team team) { return team == ALLIANCE ? TEAM_INDEX_ALLIANCE : TEAM_INDEX_HORDE; }
uint32 GetPlayersCountByTeam(Team team) const { return m_PlayersCount[GetTeamIndexByTeamId(team)]; }
uint32 GetAlivePlayersCountByTeam(Team team) const; // used in arenas to correctly handle death in spirit of redemption / last stand etc. (killer = killed) cases
void UpdatePlayersCountByTeam(Team team, bool remove)
Expand Down Expand Up @@ -522,11 +514,11 @@ class BattleGround
// since arenas can be AvA or Hvh, we have to get the "temporary" team of a player
Team GetPlayerTeam(ObjectGuid guid);
static Team GetOtherTeam(Team team) { return team ? ((team == ALLIANCE) ? HORDE : ALLIANCE) : TEAM_NONE; }
static BattleGroundTeamIndex GetOtherTeamIndex(BattleGroundTeamIndex teamIdx) { return teamIdx == BG_TEAM_ALLIANCE ? BG_TEAM_HORDE : BG_TEAM_ALLIANCE; }
static PvpTeamIndex GetOtherTeamIndex(PvpTeamIndex teamIdx) { return teamIdx == TEAM_INDEX_ALLIANCE ? TEAM_INDEX_HORDE : TEAM_INDEX_ALLIANCE; }
bool IsPlayerInBattleGround(ObjectGuid guid);

/* virtual score-array - get's used in bg-subclasses */
int32 m_TeamScores[BG_TEAMS_COUNT];
int32 m_TeamScores[PVP_TEAM_COUNT];

struct EventObjects
{
Expand Down Expand Up @@ -597,15 +589,15 @@ class BattleGround
uint32 m_InvitedHorde;

/* Raid Group */
Group* m_BgRaids[BG_TEAMS_COUNT]; // 0 - alliance, 1 - horde
Group* m_BgRaids[PVP_TEAM_COUNT]; // 0 - alliance, 1 - horde

/* Players count by team */
uint32 m_PlayersCount[BG_TEAMS_COUNT];
uint32 m_PlayersCount[PVP_TEAM_COUNT];

/* Arena team ids by team */
uint32 m_ArenaTeamIds[BG_TEAMS_COUNT];
uint32 m_ArenaTeamIds[PVP_TEAM_COUNT];

int32 m_ArenaTeamRatingChanges[BG_TEAMS_COUNT];
int32 m_ArenaTeamRatingChanges[PVP_TEAM_COUNT];

/* Limits */
uint32 m_LevelMin;
Expand All @@ -618,10 +610,10 @@ class BattleGround
/* Start location */
uint32 m_MapId;
BattleGroundMap* m_Map;
float m_TeamStartLocX[BG_TEAMS_COUNT];
float m_TeamStartLocY[BG_TEAMS_COUNT];
float m_TeamStartLocZ[BG_TEAMS_COUNT];
float m_TeamStartLocO[BG_TEAMS_COUNT];
float m_TeamStartLocX[PVP_TEAM_COUNT];
float m_TeamStartLocY[PVP_TEAM_COUNT];
float m_TeamStartLocZ[PVP_TEAM_COUNT];
float m_TeamStartLocO[PVP_TEAM_COUNT];
};

// helper functions for world state list fill
Expand Down
46 changes: 23 additions & 23 deletions src/game/BattleGround/BattleGroundAB.cpp
Expand Up @@ -47,7 +47,7 @@ void BattleGroundAB::Update(uint32 diff)

if (GetStatus() == STATUS_IN_PROGRESS)
{
int team_points[BG_TEAMS_COUNT] = { 0, 0 };
int team_points[PVP_TEAM_COUNT] = { 0, 0 };

for (uint8 node = 0; node < BG_AB_NODES_MAX; ++node)
{
Expand Down Expand Up @@ -94,13 +94,13 @@ void BattleGroundAB::Update(uint32 diff)
}
}

for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (uint8 team = 0; team < PVP_TEAM_COUNT; ++team)
if (m_Nodes[node] == team + BG_AB_NODE_TYPE_OCCUPIED)
++team_points[team];
}

// Accumulate points
for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (uint8 team = 0; team < PVP_TEAM_COUNT; ++team)
{
int points = team_points[team];
if (!points)
Expand All @@ -114,17 +114,17 @@ void BattleGroundAB::Update(uint32 diff)
m_ReputationScoreTics[team] += BG_AB_TickPoints[points];
if (m_ReputationScoreTics[team] >= m_ReputationTics)
{
(team == BG_TEAM_ALLIANCE) ? RewardReputationToTeam(509, 10, ALLIANCE) : RewardReputationToTeam(510, 10, HORDE);
(team == TEAM_INDEX_ALLIANCE) ? RewardReputationToTeam(509, 10, ALLIANCE) : RewardReputationToTeam(510, 10, HORDE);
m_ReputationScoreTics[team] -= m_ReputationTics;
}
if (m_honorScoreTicks[team] >= m_honorTicks)
{
RewardHonorToTeam(GetBonusHonorFromKill(1), (team == BG_TEAM_ALLIANCE) ? ALLIANCE : HORDE);
RewardHonorToTeam(GetBonusHonorFromKill(1), (team == TEAM_INDEX_ALLIANCE) ? ALLIANCE : HORDE);
m_honorScoreTicks[team] -= m_honorTicks;
}
if (!m_IsInformedNearVictory && m_TeamScores[team] > BG_AB_WARNING_NEAR_VICTORY_SCORE)
{
if (team == BG_TEAM_ALLIANCE)
if (team == TEAM_INDEX_ALLIANCE)
SendMessageToAll(LANG_BG_AB_A_NEAR_VICTORY, CHAT_MSG_BG_SYSTEM_NEUTRAL);
else
SendMessageToAll(LANG_BG_AB_H_NEAR_VICTORY, CHAT_MSG_BG_SYSTEM_NEUTRAL);
Expand All @@ -134,24 +134,24 @@ void BattleGroundAB::Update(uint32 diff)

if (m_TeamScores[team] > BG_AB_MAX_TEAM_SCORE)
m_TeamScores[team] = BG_AB_MAX_TEAM_SCORE;
if (team == BG_TEAM_ALLIANCE)
if (team == TEAM_INDEX_ALLIANCE)
UpdateWorldState(BG_AB_OP_RESOURCES_ALLY, m_TeamScores[team]);
if (team == BG_TEAM_HORDE)
if (team == TEAM_INDEX_HORDE)
UpdateWorldState(BG_AB_OP_RESOURCES_HORDE, m_TeamScores[team]);

// update achievement flags
// we increased m_TeamScores[team] so we just need to check if it is 500 more than other teams resources
// horde will be a bit disadvantaged, but we can assume that points aren't updated for both team in same Update() call
uint8 otherTeam = (team + 1) % BG_TEAMS_COUNT;
uint8 otherTeam = (team + 1) % PVP_TEAM_COUNT;
if (m_TeamScores[team] > m_TeamScores[otherTeam] + 500)
m_TeamScores500Disadvantage[otherTeam] = true;
}
}

// Test win condition
if (m_TeamScores[BG_TEAM_ALLIANCE] >= BG_AB_MAX_TEAM_SCORE)
if (m_TeamScores[TEAM_INDEX_ALLIANCE] >= BG_AB_MAX_TEAM_SCORE)
EndBattleGround(ALLIANCE);
if (m_TeamScores[BG_TEAM_HORDE] >= BG_AB_MAX_TEAM_SCORE)
if (m_TeamScores[TEAM_INDEX_HORDE] >= BG_AB_MAX_TEAM_SCORE)
EndBattleGround(HORDE);
}
}
Expand Down Expand Up @@ -271,8 +271,8 @@ void BattleGroundAB::FillInitialWorldStates(WorldPacket& data, uint32& count)
// Team scores
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_MAX, BG_AB_MAX_TEAM_SCORE);
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_WARNING, BG_AB_WARNING_NEAR_VICTORY_SCORE);
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_ALLY, m_TeamScores[BG_TEAM_ALLIANCE]);
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_HORDE, m_TeamScores[BG_TEAM_HORDE]);
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_ALLY, m_TeamScores[TEAM_INDEX_ALLIANCE]);
FillInitialWorldState(data, count, BG_AB_OP_RESOURCES_HORDE, m_TeamScores[TEAM_INDEX_HORDE]);

// other unknown
FillInitialWorldState(data, count, 0x745, 0x2); // 37 1861 unk
Expand Down Expand Up @@ -327,7 +327,7 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player* source, GameObject* target
return;
BG_AB_Nodes node = BG_AB_Nodes(event);

BattleGroundTeamIndex teamIndex = GetTeamIndexByTeamId(source->GetTeam());
PvpTeamIndex teamIndex = GetTeamIndexByTeamId(source->GetTeam());

// Check if player really could use this banner, not cheated
if (!(m_Nodes[node] == 0 || teamIndex == m_Nodes[node] % 2))
Expand Down Expand Up @@ -370,7 +370,7 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player* source, GameObject* target
_SendNodeUpdate(node);
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;

if (teamIndex == BG_TEAM_ALLIANCE)
if (teamIndex == TEAM_INDEX_ALLIANCE)
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED, CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
else
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED, CHAT_MSG_BG_SYSTEM_HORDE, source, _GetNodeNameId(node));
Expand All @@ -385,14 +385,14 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player* source, GameObject* target
_CreateBanner(node, BG_AB_NODE_TYPE_OCCUPIED, teamIndex, true);
_SendNodeUpdate(node);
m_NodeTimers[node] = 0;
_NodeOccupied(node, (teamIndex == BG_TEAM_ALLIANCE) ? ALLIANCE : HORDE);
_NodeOccupied(node, (teamIndex == TEAM_INDEX_ALLIANCE) ? ALLIANCE : HORDE);

if (teamIndex == BG_TEAM_ALLIANCE)
if (teamIndex == TEAM_INDEX_ALLIANCE)
SendMessage2ToAll(LANG_BG_AB_NODE_DEFENDED, CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
else
SendMessage2ToAll(LANG_BG_AB_NODE_DEFENDED, CHAT_MSG_BG_SYSTEM_HORDE, source, _GetNodeNameId(node));
}
sound = (teamIndex == BG_TEAM_ALLIANCE) ? BG_AB_SOUND_NODE_ASSAULTED_ALLIANCE : BG_AB_SOUND_NODE_ASSAULTED_HORDE;
sound = (teamIndex == TEAM_INDEX_ALLIANCE) ? BG_AB_SOUND_NODE_ASSAULTED_ALLIANCE : BG_AB_SOUND_NODE_ASSAULTED_HORDE;
}
// If node is occupied, change to enemy-contested
else
Expand All @@ -405,18 +405,18 @@ void BattleGroundAB::EventPlayerClickedOnFlag(Player* source, GameObject* target
_SendNodeUpdate(node);
m_NodeTimers[node] = BG_AB_FLAG_CAPTURING_TIME;

if (teamIndex == BG_TEAM_ALLIANCE)
if (teamIndex == TEAM_INDEX_ALLIANCE)
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED, CHAT_MSG_BG_SYSTEM_ALLIANCE, source, _GetNodeNameId(node));
else
SendMessage2ToAll(LANG_BG_AB_NODE_ASSAULTED, CHAT_MSG_BG_SYSTEM_HORDE, source, _GetNodeNameId(node));

sound = (teamIndex == BG_TEAM_ALLIANCE) ? BG_AB_SOUND_NODE_ASSAULTED_ALLIANCE : BG_AB_SOUND_NODE_ASSAULTED_HORDE;
sound = (teamIndex == TEAM_INDEX_ALLIANCE) ? BG_AB_SOUND_NODE_ASSAULTED_ALLIANCE : BG_AB_SOUND_NODE_ASSAULTED_HORDE;
}

// If node is occupied again, send "X has taken the Y" msg.
if (m_Nodes[node] >= BG_AB_NODE_TYPE_OCCUPIED)
{
if (teamIndex == BG_TEAM_ALLIANCE)
if (teamIndex == TEAM_INDEX_ALLIANCE)
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL, LANG_BG_ALLY, _GetNodeNameId(node));
else
SendMessage2ToAll(LANG_BG_AB_NODE_TAKEN, CHAT_MSG_BG_SYSTEM_HORDE, NULL, LANG_BG_HORDE, _GetNodeNameId(node));
Expand All @@ -429,7 +429,7 @@ void BattleGroundAB::Reset()
// call parent's class reset
BattleGround::Reset();

for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i)
for (uint8 i = 0; i < PVP_TEAM_COUNT; ++i)
{
m_TeamScores[i] = 0;
m_lastTick[i] = 0;
Expand Down Expand Up @@ -471,7 +471,7 @@ void BattleGroundAB::EndBattleGround(Team winner)

WorldSafeLocsEntry const* BattleGroundAB::GetClosestGraveYard(Player* player)
{
BattleGroundTeamIndex teamIndex = GetTeamIndexByTeamId(player->GetTeam());
PvpTeamIndex teamIndex = GetTeamIndexByTeamId(player->GetTeam());

// Is there any occupied node for this team?
std::vector<uint8> nodes;
Expand Down
8 changes: 4 additions & 4 deletions src/game/BattleGround/BattleGroundAB.h
Expand Up @@ -205,13 +205,13 @@ class BattleGroundAB : public BattleGround
uint8 m_prevNodes[BG_AB_NODES_MAX]; // used for performant wordlstate-updating
BG_AB_BannerTimer m_BannerTimers[BG_AB_NODES_MAX];
uint32 m_NodeTimers[BG_AB_NODES_MAX];
uint32 m_lastTick[BG_TEAMS_COUNT];
uint32 m_honorScoreTicks[BG_TEAMS_COUNT];
uint32 m_ReputationScoreTics[BG_TEAMS_COUNT];
uint32 m_lastTick[PVP_TEAM_COUNT];
uint32 m_honorScoreTicks[PVP_TEAM_COUNT];
uint32 m_ReputationScoreTics[PVP_TEAM_COUNT];
bool m_IsInformedNearVictory;
uint32 m_honorTicks;
uint32 m_ReputationTics;
// need for achievements
bool m_TeamScores500Disadvantage[BG_TEAMS_COUNT];
bool m_TeamScores500Disadvantage[PVP_TEAM_COUNT];
};
#endif

0 comments on commit 5c3b410

Please sign in to comment.