Skip to content

Commit 343ab05

Browse files
committed
Add more stats
1 parent ddcbc34 commit 343ab05

File tree

12 files changed

+103
-63
lines changed

12 files changed

+103
-63
lines changed

src/engine/server/databases/connection.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,11 @@ void IDbConnection::FormatCreateStats(char *aBuf, unsigned int BufferSize) const
9696
str_format(aBuf, BufferSize,
9797
"CREATE TABLE IF NOT EXISTS %s_stats ("
9898
" Name VARCHAR(%d) COLLATE %s NOT NULL, "
99-
" RoundsWon INT DEFAULT 0, "
100-
" RoundsPlayed INT DEFAULT 0, "
99+
" GamesWon INT DEFAULT 0, "
100+
" GamesPlayed INT DEFAULT 0, "
101+
" RoundsSurvived INT DEFAULT 0, "
102+
" CollateralKills INT DEFAULT 0, "
103+
" HammerKills INT DEFAULT 0, "
101104
" PRIMARY KEY (Name)"
102105
")",
103106
GetPrefix(), MAX_NAME_LENGTH_SQL, BinaryCollate());

src/engine/server/databases/connection.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class IDbConnection
8787

8888
// SQL statements, that can't be abstracted, has side effects to the result
8989
virtual bool AddPoints(const char *pPlayer, int Points, char *pError, int ErrorSize) = 0;
90-
virtual bool SaveStats(const char *pPlayer, bool RoundWin, char *pError, int ErrorSize) = 0;
90+
virtual bool SaveStats(const char *pPlayer, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived, char *pError, int ErrorSize) = 0;
9191

9292
private:
9393
char m_aPrefix[64];

src/engine/server/databases/mysql.cpp

+14-8
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class CMysqlConnection : public IDbConnection
103103
int GetBlob(int Col, unsigned char *pBuffer, int BufferSize) override;
104104

105105
bool AddPoints(const char *pPlayer, int Points, char *pError, int ErrorSize) override;
106-
bool SaveStats(const char *pPlayer, bool RoundWin, char *pError, int ErrorSize) override;
106+
bool SaveStats(const char *pPlayer, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived, char *pError, int ErrorSize) override;
107107

108108
private:
109109
class CStmtDeleter
@@ -709,22 +709,28 @@ bool CMysqlConnection::AddPoints(const char *pPlayer, int Points, char *pError,
709709
return ExecuteUpdate(&NumUpdated, pError, ErrorSize);
710710
}
711711

712-
bool CMysqlConnection::SaveStats(const char *pPlayer, bool RoundWin, char *pError, int ErrorSize)
712+
bool CMysqlConnection::SaveStats(const char *pPlayer, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived, char *pError, int ErrorSize)
713713
{
714-
printf("test: %s\n", pPlayer);
715714
char aBuf[512];
716715
str_format(aBuf, sizeof(aBuf),
717-
"INSERT INTO %s_stats(Name, RoundsWon, RoundsPlayed) "
718-
"VALUES (?, ?, 1) "
719-
"ON DUPLICATE KEY UPDATE RoundsWon=RoundsWon+?, RoundsPlayed=RoundsPlayed+1",
716+
"INSERT INTO %s_stats(Name, GamesWon, GamesPlayed, HammerKills, CollateralKills, RoundsSurvived) "
717+
"VALUES (?, ?, 1, ?, ?, ?) "
718+
"ON DUPLICATE KEY UPDATE GamesWon=GamesWon+?, GamesPlayed=GamesPlayed+1, HammerKills=HammerKills+?,"
719+
" CollateralKills=CollateralKills+?, RoundsSurvived=RoundsSurvived+?",
720720
GetPrefix());
721721
if(PrepareStatement(aBuf, pError, ErrorSize))
722722
{
723723
return true;
724724
}
725725
BindString(1, pPlayer);
726-
BindInt(2, RoundWin);
727-
BindInt(3, RoundWin);
726+
BindInt(2, Winner);
727+
BindInt(3, HammerKills);
728+
BindInt(4, CollateralKills);
729+
BindInt(5, RoundsSurvived);
730+
BindInt(6, Winner);
731+
BindInt(7, HammerKills);
732+
BindInt(8, CollateralKills);
733+
BindInt(9, RoundsSurvived);
728734
int NumUpdated;
729735
return ExecuteUpdate(&NumUpdated, pError, ErrorSize);
730736
}

src/engine/server/databases/sqlite.cpp

+14-7
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class CSqliteConnection : public IDbConnection
5252
int GetBlob(int Col, unsigned char *pBuffer, int BufferSize) override;
5353

5454
bool AddPoints(const char *pPlayer, int Points, char *pError, int ErrorSize) override;
55-
bool SaveStats(const char *pPlayer, bool RoundWin, char *pError, int ErrorSize) override;
55+
bool SaveStats(const char *pPlayer, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived, char *pError, int ErrorSize) override;
5656

5757
// fail safe
5858
bool CreateFailsafeTables();
@@ -416,21 +416,28 @@ bool CSqliteConnection::AddPoints(const char *pPlayer, int Points, char *pError,
416416
return Step(&End, pError, ErrorSize);
417417
}
418418

419-
bool CSqliteConnection::SaveStats(const char *pPlayer, bool RoundWin, char *pError, int ErrorSize)
419+
bool CSqliteConnection::SaveStats(const char *pPlayer, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived, char *pError, int ErrorSize)
420420
{
421421
char aBuf[512];
422422
str_format(aBuf, sizeof(aBuf),
423-
"INSERT INTO %s_stats(Name, RoundsWon, RoundsPlayed) "
424-
"VALUES (?, ?, 1) "
425-
"ON CONFLICT(Name) DO UPDATE SET RoundsWon=RoundsWon+?, RoundsPlayed=RoundsPlayed+1",
423+
"INSERT INTO %s_stats(Name, GamesWon, GamesPlayed, HammerKills, CollateralKills, RoundsSurvived) "
424+
"VALUES (?, ?, 1, ?, ?, ?) "
425+
"ON CONFLICT(Name) DO UPDATE SET GamesWon=GamesWon+?, GamesPlayed=GamesPlayed+1, HammerKills=HammerKills+?,"
426+
" CollateralKills=CollateralKills+?, RoundsSurvived=RoundsSurvived+?",
426427
GetPrefix());
427428
if(PrepareStatement(aBuf, pError, ErrorSize))
428429
{
429430
return true;
430431
}
431432
BindString(1, pPlayer);
432-
BindInt(2, RoundWin);
433-
BindInt(3, RoundWin);
433+
BindInt(2, Winner);
434+
BindInt(3, HammerKills);
435+
BindInt(4, CollateralKills);
436+
BindInt(5, RoundsSurvived);
437+
BindInt(6, Winner);
438+
BindInt(7, HammerKills);
439+
BindInt(8, CollateralKills);
440+
BindInt(9, RoundsSurvived);
434441
bool End;
435442
return Step(&End, pError, ErrorSize);
436443
}

src/game/server/gamecontext.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2647,7 +2647,7 @@ void CGameContext::OnChangeInfoNetMessage(const CNetMsg_Cl_ChangeInfo *pMsg, int
26472647

26482648
// reload scores
26492649
m_apPlayers[ClientId]->m_Score.reset();
2650-
Score()->LoadPlayerRoundsWon(ClientId, Server()->ClientName(ClientId));
2650+
Score()->LoadPlayerGamesWon(ClientId, Server()->ClientName(ClientId));
26512651

26522652
SixupNeedsUpdate = true;
26532653

src/game/server/gamemodes/Bomb.cpp

+21-11
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ int CGameControllerBomb::OnCharacterDeath(CCharacter *pVictim, CPlayer *pKiller,
6969
void CGameControllerBomb::OnPlayerConnect(CPlayer *pPlayer)
7070
{
7171
IGameController::OnPlayerConnect(pPlayer);
72-
GameServer()->Score()->LoadPlayerRoundsWon(pPlayer->GetCid(), Server()->ClientName(pPlayer->GetCid()));
72+
GameServer()->Score()->LoadPlayerGamesWon(pPlayer->GetCid(), Server()->ClientName(pPlayer->GetCid()));
7373
int ClientId = pPlayer->GetCid();
7474

7575
if(pPlayer->GetTeam() == TEAM_SPECTATORS && m_aPlayers[ClientId].m_State != STATE_ACTIVE)
@@ -107,6 +107,9 @@ void CGameControllerBomb::OnReset()
107107
{
108108
aPlayer.m_State = STATE_ACTIVE;
109109
aPlayer.m_Bomb = false;
110+
aPlayer.m_CollateralKills = 0;
111+
aPlayer.m_RoundsSurvived = 0;
112+
aPlayer.m_HammerKills = 0;
110113
}
111114
m_RoundActive = false;
112115
}
@@ -365,11 +368,17 @@ void CGameControllerBomb::OnTakeDamage(int Dmg, int From, int To, int Weapon)
365368
pNewBombChr->SetWeapon(g_Config.m_BombtagBombWeapon);
366369
}
367370
}
368-
else if(!m_aPlayers[From].m_Bomb && m_aPlayers[To].m_Bomb)
371+
else if(!m_aPlayers[From].m_Bomb && m_aPlayers[To].m_Bomb && m_aPlayers[To].m_Tick > 0)
369372
{
370373
// damage to bomb
371374
m_aPlayers[To].m_Tick -= g_Config.m_BombtagBombDamage * SERVER_TICK_SPEED;
372375
UpdateTimer();
376+
377+
// Increase stats if they killed the player
378+
if(m_aPlayers[To].m_Tick <= 0)
379+
{
380+
m_aPlayers[From].m_HammerKills++;
381+
}
373382
}
374383
else if(!m_aPlayers[From].m_Bomb && !m_aPlayers[To].m_Bomb && g_Config.m_BombtagHammerFreeze)
375384
{
@@ -468,18 +477,16 @@ void CGameControllerBomb::EndBombRound(bool RealEnd)
468477

469478
int Alive = 0;
470479
for(auto &aPlayer : m_aPlayers)
480+
{
471481
if(aPlayer.m_State == STATE_ALIVE && !aPlayer.m_Bomb)
482+
{
472483
Alive++;
484+
aPlayer.m_RoundsSurvived++;
485+
}
486+
}
473487

474488
if(!RealEnd)
475489
{
476-
// for(int i = 0; i < MAX_CLIENTS; i++)
477-
// {
478-
// if(m_aPlayers[i].m_State == STATE_ALIVE)
479-
// {
480-
// GameServer()->m_apPlayers[i]->m_Score = GameServer()->m_apPlayers[i]->m_Score.value_or(0) + 1;
481-
// }
482-
// }
483490
const int BombsPerPlayer = g_Config.m_BombtagBombsPerPlayer;
484491
MakeRandomBomb(std::ceil((Alive / (float)BombsPerPlayer) - (BombsPerPlayer == 1 ? 1 : 0)));
485492
}
@@ -494,7 +501,8 @@ void CGameControllerBomb::EndBombRound(bool RealEnd)
494501
str_format(aBuf, sizeof(aBuf), "'%s' won the round!", Server()->ClientName(i));
495502
GameServer()->SendChat(-1, TEAM_ALL, aBuf);
496503
GameServer()->m_apPlayers[i]->m_Score = GameServer()->m_apPlayers[i]->m_Score.value_or(0) + 1;
497-
GameServer()->Score()->SaveStats(Server()->ClientName(i), true);
504+
auto pPlayer = m_aPlayers[i];
505+
GameServer()->Score()->SaveStats(Server()->ClientName(i), true, pPlayer.m_HammerKills, pPlayer.m_CollateralKills, pPlayer.m_RoundsSurvived);
498506
WinnerAnnounced = true;
499507
break;
500508
}
@@ -580,6 +588,7 @@ void CGameControllerBomb::ExplodeBomb(int ClientId)
580588
{
581589
pPlayer->KillCharacter();
582590
EliminatePlayer(pPlayer->GetCid(), true);
591+
m_aPlayers[ClientId].m_CollateralKills++;
583592
}
584593
}
585594
GameServer()->m_apPlayers[ClientId]->KillCharacter();
@@ -591,7 +600,8 @@ void CGameControllerBomb::EliminatePlayer(int ClientId, bool Collateral)
591600
char aBuf[128];
592601
str_format(aBuf, sizeof(aBuf), "'%s' eliminated%s!", Server()->ClientName(ClientId), Collateral ? " by collateral damage" : "");
593602
GameServer()->SendChat(-1, TEAM_ALL, aBuf);
594-
GameServer()->Score()->SaveStats(Server()->ClientName(ClientId), false);
603+
auto pPlayer = m_aPlayers[ClientId];
604+
GameServer()->Score()->SaveStats(Server()->ClientName(ClientId), false, pPlayer.m_HammerKills, pPlayer.m_CollateralKills, pPlayer.m_RoundsSurvived);
595605

596606
m_aPlayers[ClientId].m_Bomb = false;
597607
m_aPlayers[ClientId].m_State = STATE_ACTIVE;

src/game/server/gamemodes/Bomb.h

+3
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ class CGameControllerBomb : public IGameController
5353
int m_TicksAfk = 0;
5454
int m_AfkHash = 0;
5555
bool m_Bomb = false;
56+
int m_CollateralKills = 0;
57+
int m_HammerKills = 0;
58+
int m_RoundsSurvived = 0;
5659
CSkinInfo m_RealSkin;
5760
} m_aPlayers[MAX_CLIENTS];
5861

src/game/server/player.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -930,8 +930,8 @@ void CPlayer::ProcessScoreResult(CScorePlayerResult &Result)
930930
str_format(aBuf, sizeof(aBuf), "Showing the checkpoint times for '%s' with a race time of %s", Result.m_Data.m_Info.m_aRequestedPlayer, aTime);
931931
GameServer()->SendChatTarget(m_ClientId, aBuf);
932932
break;
933-
case CScorePlayerResult::PLAYER_ROUNDSWON:
934-
GameServer()->m_apPlayers[m_ClientId]->m_Score = Result.m_Data.m_Info.m_RoundsWon;
933+
case CScorePlayerResult::PLAYER_GAMESWON:
934+
GameServer()->m_apPlayers[m_ClientId]->m_Score = Result.m_Data.m_Info.m_GamesWon;
935935
break;
936936
}
937937
}

src/game/server/score.cpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -395,18 +395,21 @@ void CScore::GetSaves(int ClientId)
395395
ExecPlayerThread(CScoreWorker::GetSaves, "get saves", ClientId, "", 0);
396396
}
397397

398-
void CScore::SaveStats(const char *pName, bool RoundWin)
398+
void CScore::SaveStats(const char *pName, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived)
399399
{
400400
auto Tmp = std::make_unique<CSqlSaveStats>();
401401
str_copy(Tmp->m_aName, pName);
402-
Tmp->m_RoundWin = RoundWin;
402+
Tmp->m_Winner = Winner;
403+
Tmp->m_HammerKills = HammerKills;
404+
Tmp->m_CollateralKills = CollateralKills;
405+
Tmp->m_RoundsSurvived = RoundsSurvived;
403406

404407
m_pPool->ExecuteWrite(CScoreWorker::SaveStats, std::move(Tmp), "save score");
405408
}
406409

407-
void CScore::LoadPlayerRoundsWon(int ClientId, const char *pName)
410+
void CScore::LoadPlayerGamesWon(int ClientId, const char *pName)
408411
{
409-
ExecPlayerThread(CScoreWorker::LoadPlayerRoundsWon, "load player data", ClientId, pName, 0);
412+
ExecPlayerThread(CScoreWorker::LoadPlayerGamesWon, "load games won data", ClientId, pName, 0);
410413
}
411414

412415
void CScore::ShowStats(int ClientId, const char *pName)
@@ -420,5 +423,5 @@ void CScore::ShowTopWins(int ClientId, int Offset)
420423
{
421424
if(RateLimitPlayer(ClientId))
422425
return;
423-
ExecPlayerThread(CScoreWorker::ShowTopWins, "show top points", ClientId, "", Offset);
426+
ExecPlayerThread(CScoreWorker::ShowTopWins, "show top wins", ClientId, "", Offset);
424427
}

src/game/server/score.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ class CScore
7373
void LoadTeam(const char *pCode, int ClientId);
7474
void GetSaves(int ClientId);
7575

76-
void SaveStats(const char *pName, bool RoundWin);
77-
void LoadPlayerRoundsWon(int ClientId, const char *pName);
76+
void SaveStats(const char *pName, bool Winner, int HammerKills, int CollateralKills, int RoundsSurvived);
77+
void LoadPlayerGamesWon(int ClientId, const char *pName);
7878
void ShowStats(int ClientId, const char *pName);
7979
void ShowTopWins(int ClientId, int Offset);
8080
};

src/game/server/scoreworker.cpp

+25-20
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ void CScorePlayerResult::SetVariant(Variant v)
5050
for(float &TimeCp : m_Data.m_Info.m_aTimeCp)
5151
TimeCp = 0;
5252
break;
53-
case PLAYER_ROUNDSWON:
54-
m_Data.m_Info.m_RoundsWon = 0;
53+
case PLAYER_GAMESWON:
54+
m_Data.m_Info.m_GamesWon = 0;
5555
break;
5656
}
5757
}
@@ -1953,21 +1953,21 @@ bool CScoreWorker::GetSaves(IDbConnection *pSqlServer, const ISqlData *pGameData
19531953
bool CScoreWorker::SaveStats(IDbConnection *pSqlServer, const ISqlData *pGameData, Write w, char *pError, int ErrorSize)
19541954
{
19551955
const auto *pData = dynamic_cast<const CSqlSaveStats *>(pGameData);
1956-
if(pSqlServer->SaveStats(pData->m_aName, pData->m_RoundWin, pError, ErrorSize))
1956+
if(pSqlServer->SaveStats(pData->m_aName, pData->m_Winner, pData->m_HammerKills, pData->m_CollateralKills, pData->m_RoundsSurvived, pError, ErrorSize))
19571957
{
19581958
return true;
19591959
}
19601960
return false;
19611961
}
19621962

1963-
bool CScoreWorker::LoadPlayerRoundsWon(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
1963+
bool CScoreWorker::LoadPlayerGamesWon(IDbConnection *pSqlServer, const ISqlData *pGameData, char *pError, int ErrorSize)
19641964
{
19651965
const auto *pData = dynamic_cast<const CSqlPlayerRequest *>(pGameData);
19661966
auto *pResult = dynamic_cast<CScorePlayerResult *>(pGameData->m_pResult.get());
19671967

19681968
char aBuf[1024];
19691969
str_format(aBuf, sizeof(aBuf),
1970-
"SELECT RoundsWon "
1970+
"SELECT GamesWon "
19711971
"FROM %s_stats "
19721972
"WHERE Name = ? "
19731973
"LIMIT 1",
@@ -1986,8 +1986,8 @@ bool CScoreWorker::LoadPlayerRoundsWon(IDbConnection *pSqlServer, const ISqlData
19861986
}
19871987
if(!End)
19881988
{
1989-
pResult->SetVariant(CScorePlayerResult::PLAYER_ROUNDSWON);
1990-
pResult->m_Data.m_Info.m_RoundsWon = pSqlServer->GetInt(1);
1989+
pResult->SetVariant(CScorePlayerResult::PLAYER_GAMESWON);
1990+
pResult->m_Data.m_Info.m_GamesWon = pSqlServer->GetInt(1);
19911991
}
19921992
return false;
19931993
}
@@ -2000,9 +2000,9 @@ bool CScoreWorker::ShowStats(IDbConnection *pSqlServer, const ISqlData *pGameDat
20002000
char aBuf[256];
20012001
str_format(aBuf, sizeof(aBuf),
20022002
"SELECT ("
2003-
" SELECT COUNT(Name) + 1 FROM %s_stats WHERE RoundsWon > ("
2004-
" SELECT RoundsWon FROM %s_stats WHERE Name = ?"
2005-
")) as Ranking, RoundsWon, RoundsPlayed, Name "
2003+
" SELECT COUNT(Name) + 1 FROM %s_stats WHERE GamesWon > ("
2004+
" SELECT GamesWon FROM %s_stats WHERE Name = ?"
2005+
")) as Ranking, GamesWon, GamesPlayed, HammerKills, CollateralKills, RoundsSurvived, Name "
20062006
"FROM %s_stats WHERE Name = ?",
20072007
pSqlServer->GetPrefix(), pSqlServer->GetPrefix(), pSqlServer->GetPrefix());
20082008

@@ -2022,27 +2022,32 @@ bool CScoreWorker::ShowStats(IDbConnection *pSqlServer, const ISqlData *pGameDat
20222022
if(!End)
20232023
{
20242024
int Ranking = pSqlServer->GetInt(1);
2025-
int RoundsWon = pSqlServer->GetInt(2);
2026-
int RoundsPlayed = pSqlServer->GetInt(3);
2025+
int GamesWon = pSqlServer->GetInt(2);
2026+
int GamesPlayed = pSqlServer->GetInt(3);
2027+
int HammerKills = pSqlServer->GetInt(4);
2028+
int CollateralKills = pSqlServer->GetInt(5);
2029+
int RoundsSurvived = pSqlServer->GetInt(6);
20272030

20282031
if(str_comp_nocase(pData->m_aRequestingPlayer, pData->m_aName) == 0)
20292032
{
20302033
str_format(pResult->m_Data.m_aaMessages[0], sizeof(pResult->m_Data.m_aaMessages[0]),
2031-
"%d. %s has won %d rounds of bombtag and played a total of %d with a win rate of %.02f%%",
2032-
Ranking, pData->m_aName, RoundsWon, RoundsPlayed, ((float)RoundsWon / (float)RoundsPlayed) * 100.0f);
2034+
"%d. %s has won %d games of bombtag and played a total of %d with a win rate of %.02f%%",
2035+
Ranking, pData->m_aName, GamesWon, GamesPlayed, ((float)GamesWon / (float)GamesPlayed) * 100.0f);
20332036
}
20342037
else
20352038
{
20362039
pResult->m_MessageKind = CScorePlayerResult::ALL;
20372040
str_format(pResult->m_Data.m_aaMessages[0], sizeof(pResult->m_Data.m_aaMessages[0]),
2038-
"%d. %s has won %d rounds of bombtag and played a total of %d with a win rate of %.02f%% requested by %s",
2039-
Ranking, pData->m_aName, RoundsWon, RoundsPlayed, ((float)RoundsWon / (float)RoundsPlayed) * 100.0f, pData->m_aRequestingPlayer);
2041+
"%d. %s has won %d games of bombtag and played a total of %d with a win rate of %.02f%% requested by %s",
2042+
Ranking, pData->m_aName, GamesWon, GamesPlayed, ((float)GamesWon / (float)GamesPlayed) * 100.0f, pData->m_aRequestingPlayer);
20402043
}
2044+
str_format(pResult->m_Data.m_aaMessages[1], sizeof(pResult->m_Data.m_aaMessages[1]),
2045+
"Hammer kills: %d - Collateral kills: %d - Total rounds survived: %d", HammerKills, CollateralKills, RoundsSurvived);
20412046
}
20422047
else
20432048
{
20442049
str_format(pResult->m_Data.m_aaMessages[0], sizeof(pResult->m_Data.m_aaMessages[0]),
2045-
"%s has not played any rounds of bombtag", pData->m_aName);
2050+
"%s has not played any games of bombtag", pData->m_aName);
20462051
}
20472052
return false;
20482053
}
@@ -2057,11 +2062,11 @@ bool CScoreWorker::ShowTopWins(IDbConnection *pSqlServer, const ISqlData *pGameD
20572062

20582063
char aBuf[512];
20592064
str_format(aBuf, sizeof(aBuf),
2060-
"SELECT RANK() OVER (ORDER BY a.RoundsWon DESC) as Ranking, RoundsWon, RoundsPlayed, Name "
2065+
"SELECT RANK() OVER (ORDER BY a.GamesWon DESC) as Ranking, GamesWon, GamesPlayed, Name "
20612066
"FROM ("
2062-
" SELECT RoundsWon, Name, RoundsPlayed"
2067+
" SELECT GamesWon, Name, GamesPlayed"
20632068
" FROM %s_stats "
2064-
" ORDER BY RoundsWon DESC LIMIT ?"
2069+
" ORDER BY GamesWon DESC LIMIT ?"
20652070
") as a "
20662071
"ORDER BY Ranking ASC, Name ASC LIMIT ?, 5",
20672072
pSqlServer->GetPrefix());

0 commit comments

Comments
 (0)