mirror of
https://github.com/mangosfour/server.git
synced 2025-12-30 10:37:12 +00:00
Many fixes made to get the server to run again
Many, many fixes had to be made due to server failing to start up after last major implementation of cmangos comits.
This commit is contained in:
parent
b75ccd56a9
commit
cb8c076be9
15 changed files with 132 additions and 154 deletions
|
|
@ -657,24 +657,54 @@ void BattleGround::EndBattleGround(Team winner)
|
|||
{
|
||||
this->RemoveFromBGFreeSlotQueue();
|
||||
|
||||
ArenaTeam* winner_arena_team = NULL;
|
||||
ArenaTeam* loser_arena_team = NULL;
|
||||
ArenaTeam* winner_arena_team = nullptr;
|
||||
ArenaTeam* loser_arena_team = nullptr;
|
||||
uint32 loser_rating = 0;
|
||||
uint32 winner_rating = 0;
|
||||
WorldPacket data;
|
||||
int32 winmsg_id = 0;
|
||||
|
||||
uint32 bgScoresWinner = TEAM_INDEX_NEUTRAL;
|
||||
uint64 battleground_id = 1;
|
||||
|
||||
if (winner == ALLIANCE)
|
||||
{
|
||||
winmsg_id = isBattleGround() ? LANG_BG_A_WINS : LANG_ARENA_GOLD_WINS;
|
||||
PlaySoundToAll(SOUND_ALLIANCE_WINS);
|
||||
|
||||
PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound
|
||||
// reversed index for the bg score storage system
|
||||
bgScoresWinner = TEAM_INDEX_HORDE;
|
||||
}
|
||||
else if (winner == HORDE)
|
||||
{
|
||||
winmsg_id = isBattleGround() ? LANG_BG_H_WINS : LANG_ARENA_GREEN_WINS;
|
||||
PlaySoundToAll(SOUND_HORDE_WINS);
|
||||
|
||||
PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound
|
||||
// reversed index for the bg score storage system
|
||||
bgScoresWinner = TEAM_INDEX_ALLIANCE;
|
||||
}
|
||||
|
||||
// store battleground scores
|
||||
if (isBattleGround() && sWorld.getConfig(CONFIG_BOOL_BATTLEGROUND_SCORE_STATISTICS))
|
||||
{
|
||||
static SqlStatementID insPvPstatsBattleground;
|
||||
QueryResult* result;
|
||||
|
||||
SqlStatement stmt = CharacterDatabase.CreateStatement(insPvPstatsBattleground, "INSERT INTO pvpstats_battlegrounds (id, winner_team, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())");
|
||||
|
||||
uint8 battleground_bracket = GetMinLevel() / 10;
|
||||
uint8 battleground_type = (uint8)GetTypeID();
|
||||
|
||||
// query next id
|
||||
result = CharacterDatabase.Query("SELECT MAX(id) FROM pvpstats_battlegrounds");
|
||||
if (result)
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
battleground_id = fields[0].GetUInt64() + 1;
|
||||
delete result;
|
||||
}
|
||||
|
||||
stmt.PExecute(battleground_id, bgScoresWinner, battleground_bracket, battleground_type);
|
||||
}
|
||||
|
||||
SetWinner(winner);
|
||||
|
|
@ -686,22 +716,30 @@ void BattleGround::EndBattleGround(Team winner)
|
|||
// arena rating calculation
|
||||
if (isArena() && isRated())
|
||||
{
|
||||
winner_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(winner));
|
||||
loser_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner)));
|
||||
if (winner_arena_team && loser_arena_team)
|
||||
if (winner != TEAM_NONE)
|
||||
{
|
||||
loser_rating = loser_arena_team->GetStats().rating;
|
||||
winner_rating = winner_arena_team->GetStats().rating;
|
||||
int32 winner_change = winner_arena_team->WonAgainst(loser_rating);
|
||||
int32 loser_change = loser_arena_team->LostAgainst(winner_rating);
|
||||
DEBUG_LOG("--- Winner rating: %u, Loser rating: %u, Winner change: %i, Loser change: %i ---", winner_rating, loser_rating, winner_change, loser_change);
|
||||
SetArenaTeamRatingChangeForTeam(winner, winner_change);
|
||||
SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loser_change);
|
||||
winner_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(winner));
|
||||
loser_arena_team = sObjectMgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner)));
|
||||
if (winner_arena_team && loser_arena_team)
|
||||
{
|
||||
loser_rating = loser_arena_team->GetStats().rating;
|
||||
winner_rating = winner_arena_team->GetStats().rating;
|
||||
int32 winner_change = winner_arena_team->WonAgainst(loser_rating);
|
||||
int32 loser_change = loser_arena_team->LostAgainst(winner_rating);
|
||||
DEBUG_LOG("--- Winner rating: %u, Loser rating: %u, Winner change: %i, Loser change: %i ---", winner_rating, loser_rating, winner_change, loser_change);
|
||||
SetArenaTeamRatingChangeForTeam(winner, winner_change);
|
||||
SetArenaTeamRatingChangeForTeam(GetOtherTeam(winner), loser_change);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetArenaTeamRatingChangeForTeam(ALLIANCE, 0);
|
||||
SetArenaTeamRatingChangeForTeam(HORDE, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SetArenaTeamRatingChangeForTeam(ALLIANCE, 0);
|
||||
SetArenaTeamRatingChangeForTeam(HORDE, 0);
|
||||
SetArenaTeamRatingChangeForTeam(ALLIANCE, ARENA_TIMELIMIT_POINTS_LOSS);
|
||||
SetArenaTeamRatingChangeForTeam(HORDE, ARENA_TIMELIMIT_POINTS_LOSS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -776,6 +814,30 @@ void BattleGround::EndBattleGround(Team winner)
|
|||
}
|
||||
}
|
||||
|
||||
// store battleground score statistics for each player
|
||||
if (isBattleGround() && sWorld.getConfig(CONFIG_BOOL_BATTLEGROUND_SCORE_STATISTICS))
|
||||
{
|
||||
static SqlStatementID insPvPstatsPlayer;
|
||||
BattleGroundScoreMap::iterator score = m_PlayerScores.find(itr->first);
|
||||
SqlStatement stmt = CharacterDatabase.CreateStatement(insPvPstatsPlayer, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||
|
||||
stmt.addUInt32(battleground_id);
|
||||
stmt.addUInt32(plr->GetGUIDLow());
|
||||
stmt.addUInt32(score->second->GetKillingBlows());
|
||||
stmt.addUInt32(score->second->GetDeaths());
|
||||
stmt.addUInt32(score->second->GetHonorableKills());
|
||||
stmt.addUInt32(score->second->GetBonusHonor());
|
||||
stmt.addUInt32(score->second->GetDamageDone());
|
||||
stmt.addUInt32(score->second->GetHealingDone());
|
||||
stmt.addUInt32(score->second->GetAttr1());
|
||||
stmt.addUInt32(score->second->GetAttr2());
|
||||
stmt.addUInt32(score->second->GetAttr3());
|
||||
stmt.addUInt32(score->second->GetAttr4());
|
||||
stmt.addUInt32(score->second->GetAttr5());
|
||||
|
||||
stmt.Execute();
|
||||
}
|
||||
|
||||
if (team == winner)
|
||||
{
|
||||
RewardMark(plr, ITEM_WINNER_COUNT);
|
||||
|
|
@ -800,9 +862,6 @@ void BattleGround::EndBattleGround(Team winner)
|
|||
|
||||
if (isArena() && isRated() && winner_arena_team && loser_arena_team)
|
||||
{
|
||||
// update arena points only after increasing the player's match count!
|
||||
// obsolete: winner_arena_team->UpdateArenaPointsHelper();
|
||||
// obsolete: loser_arena_team->UpdateArenaPointsHelper();
|
||||
// save the stat changes
|
||||
winner_arena_team->SaveToDB();
|
||||
loser_arena_team->SaveToDB();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue