Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding XP Gains to Battlegrounds (Warsong Gulch) #197

Merged
merged 4 commits into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions src/game/BattleGround/BattleGround.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,57 @@ void BattleGround::RewardReputationToTeam(uint32 faction_id, uint32 Reputation,
}
}

/// <summary>
/// Rewards the XP to team.
/// </summary>
/// <param name="event">The battleground event.</param>
/// <param name="teamId">The team id.</param>
void BattleGround::RewardXPToTeam(uint8 event, Team teamId)
{
enum BGEvent
{
WS_FLAG_CAPTURE = 1,
WS_WIN = 2,
};

for (BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
{
if (itr->second.OfflineRemoveTime)
{
continue;
}

Player* plr = sObjectMgr.GetPlayer(itr->first);

if (!plr)
{
sLog.outError("BattleGround:RewardXPToTeam: %s not found!", itr->first.GetString().c_str());
continue;
}

Team team = itr->second.PlayerTeam;
if (!team)
{
team = plr->GetTeam();
}

if (team == teamId)
{
uint32 xp;
switch (event)
{
case WS_FLAG_CAPTURE:
xp = 74 + (4.01 * plr->getLevel()) + (1.19 * pow(plr->getLevel(),2)); // This XP curve is a WIP, was established with a limited dataset pulled from various videos. -fyre
break;
case WS_WIN:
xp = (74 + (4.01 * plr->getLevel()) + (1.19 * pow(plr->getLevel(),2)))/2; // Half of a flag capture. Complete guess. -fyre
break;
}
plr->GiveXP(xp, nullptr);
}
}
}

/// <summary>
/// Updates the state of the world.
/// </summary>
Expand Down
7 changes: 7 additions & 0 deletions src/game/BattleGround/BattleGround.h
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,13 @@ class BattleGround
* @param team
*/
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, Team team);
/**
* @brief
*
* @param event
* @param team
*/
void RewardXPToTeam(uint8 event, Team team);
/**
* @brief
*
Expand Down
17 changes: 17 additions & 0 deletions src/game/BattleGround/BattleGroundWS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ void BattleGroundWS::EventPlayerCapturedFlag(Player* source)
}
PlaySoundToAll(BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE);
RewardReputationToTeam(890, m_ReputationCapture, ALLIANCE);
RewardXPToTeam(1, ALLIANCE); // event = WS_FLAG_CAPTURE
}
else
{
Expand All @@ -244,6 +245,7 @@ void BattleGroundWS::EventPlayerCapturedFlag(Player* source)
}
PlaySoundToAll(BG_WS_SOUND_FLAG_CAPTURED_HORDE);
RewardReputationToTeam(889, m_ReputationCapture, HORDE);
RewardXPToTeam(1, HORDE); // event = WS_FLAG_CAPTURE
}
// for flag capture is reward 2 honorable kills
RewardHonorToTeam(GetBonusHonorFromKill(2), source->GetTeam());
Expand Down Expand Up @@ -606,10 +608,25 @@ void BattleGroundWS::EndBattleGround(Team winner)
if (winner == ALLIANCE)
{
RewardHonorToTeam(GetBonusHonorFromKill(m_HonorWinKills), ALLIANCE);

// Earn XP for any remaining flags not captured by the Horde.
for (uint8 i = 0; i < (3 - m_TeamScores[TEAM_INDEX_HORDE]); ++i)
{
RewardXPToTeam(1, ALLIANCE); // event = WS_FLAG_CAPTURE
}
RewardXPToTeam(2, ALLIANCE); // event = WS_WIN
}
if (winner == HORDE)
{
RewardHonorToTeam(GetBonusHonorFromKill(m_HonorWinKills), HORDE);

// Earn XP for any remaining flags not captured by the Horde.
for (uint8 i = 0; i < (3 - m_TeamScores[TEAM_INDEX_ALLIANCE]); ++i)
{
RewardXPToTeam(1, HORDE); // event = WS_FLAG_CAPTURE
}
RewardXPToTeam(2, HORDE); // event = WS_WIN

}
// complete map_end rewards (even if no team wins)
RewardHonorToTeam(GetBonusHonorFromKill(m_HonorEndKills), ALLIANCE);
Expand Down
Loading