diff --git a/src/game/server/score/sql_score.cpp b/src/game/server/score/sql_score.cpp
index 2c7249483..1c23b863c 100644
--- a/src/game/server/score/sql_score.cpp
+++ b/src/game/server/score/sql_score.cpp
@@ -20,6 +20,8 @@ CGameContext *CSqlData::ms_pGameServer = 0;
IServer *CSqlData::ms_pServer = 0;
CPlayerData *CSqlData::ms_pPlayerData = 0;
const char *CSqlData::ms_pMap = 0;
+CSqlServer *CSqlData::ms_pSqlServer = 0;
+CSqlServer **CSqlData::ms_pMasterSqlServers = 0;
CSqlScore::CSqlScore(CGameContext *pGameServer) : m_pGameServer(pGameServer),
m_pServer(pGameServer->Server()),
@@ -32,6 +34,8 @@ CSqlScore::CSqlScore(CGameContext *pGameServer) : m_pGameServer(pGameServer),
CSqlData::ms_pServer = m_pServer;
CSqlData::ms_pPlayerData = PlayerData(0);
CSqlData::ms_pMap = m_aMap;
+ CSqlData::ms_pSqlServer = &m_SqlServer;
+ CSqlData::ms_pMasterSqlServers = m_apMasterSqlServers;
if(gs_SqlLock == 0)
gs_SqlLock = lock_create();
@@ -142,7 +146,7 @@ void CSqlScore::LoadScoreThread(void *pUser)
void CSqlScore::LoadScore(int ClientID)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, Server()->ClientName(ClientID), MAX_NAME_LENGTH);
@@ -273,7 +277,7 @@ void CSqlScore::SaveTeamScoreThread(void *pUser)
void CSqlScore::MapVote(int ClientID, const char* MapName)
{
- CSqlMapData *Tmp = new CSqlMapData(&m_SqlServer);
+ CSqlMapData *Tmp = new CSqlMapData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aMap, MapName, 128);
@@ -370,7 +374,7 @@ void CSqlScore::MapVoteThread(void *pUser)
void CSqlScore::MapInfo(int ClientID, const char* MapName)
{
- CSqlMapData *Tmp = new CSqlMapData(&m_SqlServer);
+ CSqlMapData *Tmp = new CSqlMapData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aMap, MapName, 128);
@@ -534,7 +538,7 @@ void CSqlScore::SaveScore(int ClientID, float Time, float CpTime[NUM_CHECKPOINTS
CConsole* pCon = (CConsole*)GameServer()->Console();
if(pCon->m_Cheated)
return;
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, Server()->ClientName(ClientID), MAX_NAME_LENGTH);
Tmp->m_Time = Time;
@@ -550,7 +554,7 @@ void CSqlScore::SaveTeamScore(int* aClientIDs, unsigned int Size, float Time)
CConsole* pCon = (CConsole*)GameServer()->Console();
if(pCon->m_Cheated)
return;
- CSqlTeamScoreData *Tmp = new CSqlTeamScoreData(&m_SqlServer);
+ CSqlTeamScoreData *Tmp = new CSqlTeamScoreData();
for(unsigned int i = 0; i < Size; i++)
{
Tmp->m_aClientIDs[i] = aClientIDs[i];
@@ -810,7 +814,7 @@ void CSqlScore::ShowRankThread(void *pUser)
void CSqlScore::ShowTeamRank(int ClientID, const char* pName, bool Search)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, pName, MAX_NAME_LENGTH);
Tmp->m_Search = Search;
@@ -822,7 +826,7 @@ void CSqlScore::ShowTeamRank(int ClientID, const char* pName, bool Search)
void CSqlScore::ShowRank(int ClientID, const char* pName, bool Search)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, pName, MAX_NAME_LENGTH);
Tmp->m_Search = Search;
@@ -969,7 +973,7 @@ void CSqlScore::ShowTimesThread(void *pUser)
void CSqlScore::ShowTeamTop5(IConsole::IResult *pResult, int ClientID, void *pUserData, int Debut)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = Debut;
Tmp->m_ClientID = ClientID;
@@ -979,7 +983,7 @@ void CSqlScore::ShowTeamTop5(IConsole::IResult *pResult, int ClientID, void *pUs
void CSqlScore::ShowTop5(IConsole::IResult *pResult, int ClientID, void *pUserData, int Debut)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = Debut;
Tmp->m_ClientID = ClientID;
@@ -989,7 +993,7 @@ void CSqlScore::ShowTop5(IConsole::IResult *pResult, int ClientID, void *pUserDa
void CSqlScore::ShowTimes(int ClientID, int Debut)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = Debut;
Tmp->m_ClientID = ClientID;
Tmp->m_Search = false;
@@ -1000,7 +1004,7 @@ void CSqlScore::ShowTimes(int ClientID, int Debut)
void CSqlScore::ShowTimes(int ClientID, const char* pName, int Debut)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = Debut;
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, pName, MAX_NAME_LENGTH);
@@ -1069,7 +1073,7 @@ void CSqlScore::ShowPointsThread(void *pUser)
void CSqlScore::ShowPoints(int ClientID, const char* pName, bool Search)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, pName, MAX_NAME_LENGTH);
Tmp->m_Search = Search;
@@ -1129,7 +1133,7 @@ void CSqlScore::ShowTopPointsThread(void *pUser)
void CSqlScore::ShowTopPoints(IConsole::IResult *pResult, int ClientID, void *pUserData, int Debut)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = Debut;
Tmp->m_ClientID = ClientID;
@@ -1245,7 +1249,7 @@ void CSqlScore::RandomUnfinishedMapThread(void *pUser)
void CSqlScore::RandomMap(int ClientID, int stars)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = stars;
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, GameServer()->Server()->ClientName(ClientID), MAX_NAME_LENGTH);
@@ -1256,7 +1260,7 @@ void CSqlScore::RandomMap(int ClientID, int stars)
void CSqlScore::RandomUnfinishedMap(int ClientID, int stars)
{
- CSqlScoreData *Tmp = new CSqlScoreData(&m_SqlServer);
+ CSqlScoreData *Tmp = new CSqlScoreData();
Tmp->m_Num = stars;
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_aName, GameServer()->Server()->ClientName(ClientID), MAX_NAME_LENGTH);
@@ -1279,7 +1283,7 @@ void CSqlScore::SaveTeam(int Team, const char* Code, int ClientID, const char* S
return;
}
- CSqlTeamSave *Tmp = new CSqlTeamSave(&m_SqlServer);
+ CSqlTeamSave *Tmp = new CSqlTeamSave();
Tmp->m_Team = Team;
Tmp->m_ClientID = ClientID;
str_copy(Tmp->m_Code, Code, 32);
@@ -1390,7 +1394,7 @@ void CSqlScore::SaveTeamThread(void *pUser)
void CSqlScore::LoadTeam(const char* Code, int ClientID)
{
- CSqlTeamLoad *Tmp = new CSqlTeamLoad(&m_SqlServer);
+ CSqlTeamLoad *Tmp = new CSqlTeamLoad();
str_copy(Tmp->m_Code, Code, 32);
Tmp->m_ClientID = ClientID;
diff --git a/src/game/server/score/sql_score.h b/src/game/server/score/sql_score.h
index 3063fbdce..b25582410 100644
--- a/src/game/server/score/sql_score.h
+++ b/src/game/server/score/sql_score.h
@@ -7,6 +7,10 @@
#include "sqlserver.h"
#include "../score.h"
+enum
+{
+ MAX_SQLMASTERS=10
+};
class CSqlScore: public IScore
{
@@ -20,6 +24,7 @@ class CSqlScore: public IScore
IServer *m_pServer;
CSqlServer m_SqlServer;
+ CSqlServer* m_apMasterSqlServers[MAX_SQLMASTERS];
char m_aMap[64];
@@ -71,7 +76,7 @@ public:
// generic implementation to provide sqlserver, gameserver and server
struct CSqlData
{
- CSqlData(CSqlServer* pSqlServer) : m_pSqlServer(pSqlServer) {}
+ CSqlData() : m_pSqlServer(ms_pSqlServer) {}
CGameContext* GameServer() { return ms_pGameServer; }
IServer* Server() { return ms_pServer; }
@@ -83,21 +88,20 @@ struct CSqlData
static IServer *ms_pServer;
static CPlayerData *ms_pPlayerData;
static const char *ms_pMap;
+ static CSqlServer *ms_pSqlServer;
+ static CSqlServer **ms_pMasterSqlServers;
+
CSqlServer *m_pSqlServer;
};
struct CSqlMapData : CSqlData
{
- CSqlMapData(CSqlServer* pSqlServer) : CSqlData(pSqlServer) {}
-
int m_ClientID;
char m_aMap[128];
};
struct CSqlScoreData : CSqlData
{
- CSqlScoreData(CSqlServer* pSqlServer) : CSqlData(pSqlServer) {}
-
int m_ClientID;
#if defined(CONF_FAMILY_WINDOWS)
char m_aName[16]; // Don't edit this, or all your teeth will fall http://bugs.mysql.com/bug.php?id=50046
@@ -114,8 +118,6 @@ struct CSqlScoreData : CSqlData
struct CSqlTeamScoreData : CSqlData
{
- CSqlTeamScoreData(CSqlServer* pSqlServer) : CSqlData(pSqlServer) {}
-
unsigned int m_Size;
int m_aClientIDs[MAX_CLIENTS];
#if defined(CONF_FAMILY_WINDOWS)
@@ -133,8 +135,6 @@ struct CSqlTeamScoreData : CSqlData
struct CSqlTeamSave : CSqlData
{
- CSqlTeamSave(CSqlServer* pSqlServer) : CSqlData(pSqlServer) {}
-
int m_Team;
int m_ClientID;
char m_Code[128];
@@ -143,8 +143,6 @@ struct CSqlTeamSave : CSqlData
struct CSqlTeamLoad : CSqlData
{
- CSqlTeamLoad(CSqlServer* pSqlServer) : CSqlData(pSqlServer) {}
-
char m_Code[128];
int m_ClientID;
};
diff --git a/src/game/server/score/sqlserver.cpp b/src/game/server/score/sql_server.cpp
similarity index 99%
rename from src/game/server/score/sqlserver.cpp
rename to src/game/server/score/sql_server.cpp
index 20ef5b8de..413c76534 100644
--- a/src/game/server/score/sqlserver.cpp
+++ b/src/game/server/score/sql_server.cpp
@@ -1,8 +1,10 @@
+#if defined(CONF_SQL)
+
#include
#include
#include
-#include "sqlserver.h"
+#include "sql_server.h"
CSqlServer::CSqlServer(const char* pDatabase, const char* pPrefix, const char* pUser, const char* pPass, const char* pIp, int Port) :
@@ -192,3 +194,5 @@ const char* CSqlServer::GetPrefix()
{
return m_pPrefix;
}
+
+#endif
diff --git a/src/game/server/score/sqlserver.h b/src/game/server/score/sql_server.h
similarity index 92%
rename from src/game/server/score/sqlserver.h
rename to src/game/server/score/sql_server.h
index e59b97875..b0765f6d2 100644
--- a/src/game/server/score/sqlserver.h
+++ b/src/game/server/score/sql_server.h
@@ -1,5 +1,5 @@
-#ifndef GAME_SERVER_SQLSERVER_H
-#define GAME_SERVER_SQLSERVER_H
+#ifndef GAME_SERVER_SQL_SERVER_H
+#define GAME_SERVER_SQL_SERVER_H
#include