# HG changeset patch # User Zuus # Date 1292358839 -7200 # Branch trunk # Node ID 567b9506d51dd962e1e1570017becacc43763168 # Parent 2d8ad8c446303777643c150505e30d7f66a9fe6d Apply armory arena diff -r 2d8ad8c44630 -r 567b9506d51d src/server/game/Battlegrounds/Battleground.cpp --- a/src/server/game/Battlegrounds/Battleground.cpp Mon Dec 13 23:10:58 2010 +0200 +++ b/src/server/game/Battlegrounds/Battleground.cpp Tue Dec 14 22:33:59 2010 +0200 @@ -763,6 +763,49 @@ winner_matchmaker_rating, loser_matchmaker_rating, winner_change, loser_change); SetArenaTeamRatingChangeForTeam(winner, winner_change); SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loser_change); + + /** World of Warcraft Armory **/ + uint32 maxChartID; + QueryResult result = CharacterDatabase.Query("SELECT MAX(gameid) FROM armory_game_chart"); + if(!result) + maxChartID = 0; + else + { + maxChartID = (*result)[0].GetUInt32(); + result.release(); + } + uint32 gameID = maxChartID+1; + for(BattlegroundScoreMap::const_iterator itr = m_PlayerScores.begin(); itr != m_PlayerScores.end(); ++itr) + { + Player *plr = sObjectMgr.GetPlayer(itr->first); + if (!plr) + continue; + uint32 plTeamID = plr->GetArenaTeamId(winner_arena_team->GetSlot()); + int changeType; + uint32 resultRating; + uint32 resultTeamID; + int32 ratingChange; + if (plTeamID == winner_arena_team->GetId()) + { + changeType = 1; //win + resultRating = winner_team_rating; + resultTeamID = plTeamID; + ratingChange = winner_change; + } + else + { + changeType = 2; //lose + resultRating = loser_team_rating; + resultTeamID = loser_arena_team->GetId(); + ratingChange = loser_change; + } + std::ostringstream sql_query; + // gameid, teamid, guid, changeType, ratingChange, teamRating, damageDone, deaths, healingDone, damageTaken, healingTaken, killingBlows, mapId, start, end + sql_query << "INSERT INTO armory_game_chart VALUES ('" << gameID << "', '" << resultTeamID << "', '" << plr->GetGUID() << "', '" << changeType << "', '" << ratingChange << "', '" << resultRating << "', '" << itr->second->DamageDone << "', '" << itr->second->Deaths << "', '" << itr->second->HealingDone << "', '" << itr->second->DamageTaken << "', '" << itr->second->HealingTaken << "', '" << itr->second->KillingBlows << "', '" << m_MapId << "', '" << m_StartTime << "', '" << m_EndTime << "')"; + CharacterDatabase.Execute(sql_query.str().c_str()); + } + /** World of Warcraft Armory **/ + sLog.outArena("Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[BG_TEAM_ALLIANCE], m_ArenaTeamIds[BG_TEAM_HORDE], winner_arena_team->GetId(), winner_change, loser_change); if (sWorld.getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO)) for (Battleground::BattlegroundScoreMap::const_iterator itr = GetPlayerScoresBegin(); itr != GetPlayerScoresEnd(); itr++) @@ -1404,6 +1447,14 @@ case SCORE_HEALING_DONE: // Healing Done itr->second->HealingDone += value; break; + /** World of Warcraft Armory **/ + case SCORE_DAMAGE_TAKEN: + itr->second->DamageTaken += value; // Damage Taken + break; + case SCORE_HEALING_TAKEN: + itr->second->HealingTaken += value; // Healing Taken + break; + /** World of Warcraft Armory **/ default: sLog.outError("Battleground: Unknown player score type %u", type); break; diff -r 2d8ad8c44630 -r 567b9506d51d src/server/game/Battlegrounds/Battleground.h --- a/src/server/game/Battlegrounds/Battleground.h Mon Dec 13 23:10:58 2010 +0200 +++ b/src/server/game/Battlegrounds/Battleground.h Tue Dec 14 22:33:59 2010 +0200 #ifndef __BATTLEGROUND_H @@ -134,12 +132,12 @@ enum BattlegroundRandomRewards { - BG_REWARD_WINNER_HONOR_FIRST = 20, + BG_REWARD_WINNER_HONOR_FIRST = 30, BG_REWARD_WINNER_ARENA_FIRST = 25, - BG_REWARD_WINNER_HONOR_LAST = 12, + BG_REWARD_WINNER_HONOR_LAST = 15, BG_REWARD_WINNER_ARENA_LAST = 0, - BG_REWARD_LOSER_HONOR_FIRST = 3, - BG_REWARD_LOSER_HONOR_LAST = 3 + BG_REWARD_LOSER_HONOR_FIRST = 5, + BG_REWARD_LOSER_HONOR_LAST = 5 }; const uint32 Buff_Entries[3] = { BG_OBJECTID_SPEEDBUFF_ENTRY, BG_OBJECTID_REGENBUFF_ENTRY, BG_OBJECTID_BERSERKERBUFF_ENTRY }; @@ -210,7 +208,11 @@ SCORE_SECONDARY_OBJECTIVES = 17, //SOTA SCORE_DESTROYED_DEMOLISHER = 18, - SCORE_DESTROYED_WALL = 19 + SCORE_DESTROYED_WALL = 19, + /** World of Warcraft Armory **/ + SCORE_DAMAGE_TAKEN = 20, + SCORE_HEALING_TAKEN = 21 + /** World of Warcraft Armory **/ }; enum ArenaType @@ -302,6 +304,10 @@ uint32 BonusHonor; uint32 DamageDone; uint32 HealingDone; + /** World of Warcraft Armory **/ + uint32 DamageTaken; + uint32 HealingTaken; + /** World of Warcraft Armory **/ }; enum BGHonorMode @@ -454,7 +460,7 @@ void SetBgMap(BattlegroundMap* map) { m_Map = map; } BattlegroundMap* GetBgMap() { -// ASSERT(m_Map); + ASSERT(m_Map); return m_Map; } @@ -519,8 +525,8 @@ int32 GetArenaTeamRatingChangeForTeam(uint32 Team) const { return m_ArenaTeamRatingChanges[GetTeamIndexByTeamId(Team)]; } void SetArenaMatchmakerRating(uint32 Team, uint32 MMR){ m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)] = MMR; } uint32 GetArenaMatchmakerRating(uint32 Team) { return m_ArenaTeamMMR[GetTeamIndexByTeamId(Team)]; } + void CheckArenaAfterTimerConditions(); void CheckArenaWinConditions(); - void CheckArenaAfterTimerConditions(); void UpdateArenaWorldState(); /* Triggers handle */ @@ -635,7 +641,7 @@ bool m_IsRated; // is this battle rated? bool m_PrematureCountDown; uint32 m_PrematureCountDownTimer; - uint32 m_balance; + uint32 m_balance; char const *m_Name; /* Player lists */ diff -r 2d8ad8c44630 -r 567b9506d51d src/server/game/Entities/Unit/Unit.cpp --- a/src/server/game/Entities/Unit/Unit.cpp Mon Dec 13 23:10:58 2010 +0200 +++ b/src/server/game/Entities/Unit/Unit.cpp Tue Dec 14 22:33:59 2010 +0200 @@ -645,6 +645,10 @@ if (pVictim->GetTypeId() == TYPEID_PLAYER) if (Battleground *bg = killer->GetBattleground()) bg->UpdatePlayerScore(killer, SCORE_DAMAGE_DONE, damage); + /** World of Warcraft Armory **/ + if (Battleground *bg = ((Player*)pVictim)->GetBattleground()) + bg->UpdatePlayerScore(((Player*)pVictim), SCORE_DAMAGE_TAKEN, damage); + /** World of Warcraft Armory **/ killer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE, damage, 0, pVictim); killer->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HIT_DEALT, damage); @@ -10405,6 +10409,10 @@ { pVictim->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_TOTAL_HEALING_RECEIVED, gain); pVictim->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALING_RECEIVED, addhealth); + /** World of Warcraft Armory **/ + if (Battleground *bg = pVictim->ToPlayer()->GetBattleground()) + bg->UpdatePlayerScore((Player*)pVictim, SCORE_HEALING_TAKEN, gain); + /** World of Warcraft Armory **/ } return gain;