From e3f4cca534752851775f5174901fb8a43460cdbb Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 2 Sep 2011 16:09:32 +0200 Subject: Core/Arena: Players online but not in world will now gain their arena points as intended --- src/server/game/Battlegrounds/ArenaTeamMgr.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp index 70be3b52238..59f31e36971 100644 --- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp +++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp @@ -146,18 +146,20 @@ void ArenaTeamMgr::DistributeArenaPoints() if (ArenaTeam * at = teamItr->second) at->UpdateArenaPointsHelper(PlayerPoints); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + // Cycle that gives points to all players for (std::map::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr) { - // Update database - CharacterDatabase.PExecute("UPDATE characters SET arenaPoints = arenaPoints + '%u' WHERE guid = '%u'", playerItr->second, playerItr->first); - // Add points to player if online - Player* pl = ObjectAccessor::FindPlayer(playerItr->first); - if (pl) - pl->ModifyArenaPoints(playerItr->second); + if (Player* player = HashMapHolder::Find(playerItr->first)) + player->ModifyArenaPoints(playerItr->second, &trans); + else // Update database + trans->PAppend("UPDATE characters SET arenaPoints=arenaPoints+%u WHERE guid=%u", playerItr->second, playerItr->first); } + CharacterDatabase.CommitTransaction(trans); + PlayerPoints.clear(); sWorld->SendWorldText(LANG_DIST_ARENA_POINTS_ONLINE_END); -- cgit v1.2.3