Skip to content

Commit

Permalink
Adding XP Gains to Battlegrounds (Warsong Gulch) (#197)
Browse files Browse the repository at this point in the history
* Add RewardXPToTeam Function

* Add RewardXPToTeam Function

* Add RewardXPToTeam Calls for WSG Flag/Win

* Remove whitespace
  • Loading branch information
i-am-fyre authored Aug 27, 2024
1 parent 3ac82c2 commit f89125c
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
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

0 comments on commit f89125c

Please sign in to comment.