diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlegrounds/ArenaTeamMgr.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
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<uint32, uint32>::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<Player>::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); |