commit c32019f3
WORLD is now a player entry
git-svn-id: http://oastat.googlecode.com/svn/trunk@29 a36be8df-c75f-1e49-46ad-4f0ee64bdc62
Changed files
diff --git a/sql/create_tables/oastat_create_tables_common.sql b/sql/create_tables/oastat_create_tables_common.sql
index 6d4d89c..4b43279 100644
--- a/sql/create_tables/oastat_create_tables_common.sql
+++ b/sql/create_tables/oastat_create_tables_common.sql
@@ -1,4 +1,6 @@
--- oastat. General create table file
+-- oastat. General create table file RESTRICT2MYSQL RESTRICT2POSTGRESQL
+-- oastat. Create table file for PostgreSQL RESTRICT2POSTGRESQL
+-- oastat. Create table file for MySQL RESTRICT2MYSQL
-- Note: Lines containing RESTRICT2MYSQL are MySQL specific
-- Note: Lines containing RESTRICT2POSTGRESQL are PostgreSQL specific
@@ -63,7 +65,7 @@ CREATE TABLE oastat_kills (
eventnumber SERIAL PRIMARY KEY,
gamenumber bigint NOT NULL,
second integer NOT NULL,
- attacker character varying(64) NOT NULL,
+ attacker bigint NOT NULL,
target bigint NOT NULL,
modtype integer NOT NULL
);
@@ -136,7 +138,7 @@ ALTER TABLE oastat_userinfo
-- PRIMARY KEYS START
-
+-- Notice that pRIMARY KEY must not be only uppercase letters or it will be replaced by a script!
ALTER TABLE oastat_players
ADD CONSTRAINT oastat_players_pk pRIMARY KEY (guid);
@@ -196,10 +198,23 @@ set foreign_key_checks = 1 ; -- RESTRICT2MYSQL
-- STANDARD VALUES
+-- default uservars to save:
INSERT INTO oastat_config_uservars2save (thekey) VALUES ('hc');
+-- default cvars to save:
INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('g_instantgib');
INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('g_rockets');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('dmflags');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('g_lms_mode');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('elimination_roundtime');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('capturelimit');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('sv_maxclients');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('fraglimit');
+INSERT INTO oastat_config_gamevars2save (cvar) VALUES ('bot_minplayers');
+
+
+-- default player for WORLD events:
+INSERT INTO oastat_players (guid,playerid,lastseen, isbot, model,headmodel,nickname) VALUES ('WORLD',-1,now(),'n','-','-','-');
COMMIT;
diff --git a/src/db/Db2DbiXX.cpp b/src/db/Db2DbiXX.cpp
index 1e5093f..034bfb9 100644
--- a/src/db/Db2DbiXX.cpp
+++ b/src/db/Db2DbiXX.cpp
@@ -18,18 +18,21 @@
#define STARTGAME_LASTVALUE "INSERT INTO oastat_games(gametype, mapname, basegame,servername,time) VALUES (?,LOWER(?),?,?,?)"
#define PLAYERSINSERT "INSERT INTO oastat_players(guid,nickname,lastseen,isBot, model, headmodel) VALUES (?,?,?,?,?,?)"
#define PLAYERSUPDATE "UPDATE oastat_players SET nickname = ?,lastseen = ?,isBot = ?, model = ?, headmodel = ? WHERE guid = ? AND lastseen < ?"
-#define USERINFOINSERT "INSERT INTO oastat_userinfo(gamenumber,second,player,team,model,skill) VALUES (?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),?,?,?)"
-#define USERINFOUPDATE "UPDATE oastat_userinfo SET team = ?, model = ?, skill = ? WHERE gamenumber = ? AND second = ? AND player IN (SELECT playerid FROM oastat_players WHERE GUID = ?)"
+#define USERINFOINSERT "INSERT INTO oastat_userinfo(gamenumber,second,player,team,model,skill) VALUES (?,?,COALESCE(SELECT playerid FROM oastat_players WHERE guid = ?),0),?,?,?)"
+#define USERINFOUPDATE "UPDATE oastat_userinfo SET team = ?, model = ?, skill = ? WHERE gamenumber = ? AND second = ? AND player = COALESCE((SELECT playerid FROM oastat_players WHERE GUID = ?),0)"
#define ENDGAME "UPDATE oastat_games SET second=? WHERE gamenumber = ?"
-#define KILL "INSERT INTO oastat_kills(gamenumber,second,attacker,target,modtype) VALUES(?,?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),?)"
-#define AWARD "INSERT INTO oastat_awards(gamenumber,second,player,award) VALUES (?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),?)"
-#define POINT "INSERT INTO oastat_points(gamenumber,second,player,score) VALUES (?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),?)"
-#define CTF "INSERT INTO oastat_team_events(gamenumber,second,team,player,gametype,eventtype) VALUES (?,?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),'ctf',?)"
-#define CTF1F "INSERT INTO oastat_team_events(gamenumber,second,team,player,gametype,eventtype) VALUES (?,?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),'1fctf',?)"
+#define KILL "INSERT INTO oastat_kills(gamenumber,second,attacker,target,modtype) VALUES(?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?)"
+#define AWARD "INSERT INTO oastat_awards(gamenumber,second,player,award) VALUES (?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?)"
+#define POINT "INSERT INTO oastat_points(gamenumber,second,player,score) VALUES (?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?)"
+#define CTF "INSERT INTO oastat_team_events(gamenumber,second,team,player,gametype,eventtype) VALUES (?,?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),'ctf',?)"
+#define CTF1F "INSERT INTO oastat_team_events(gamenumber,second,team,player,gametype,eventtype) VALUES (?,?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),'1fctf',?)"
#define ELIMINATION "INSERT INTO oastat_team_events(gamenumber,second,team,eventtype,generic1,gametype) VALUES (?,?,?,?,?,'elimination')"
-#define CTF_ELIM "INSERT INTO oastat_team_events(gamenumber,second,team,player,eventtype,generic1,gametype) VALUES (?,?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),?,?,'ctfelim')"
-#define HARVESTER "INSERT INTO oastat_team_events(gamenumber,second,team,player,player2,eventtype,amount,gametype) VALUES (?,?,?,(SELECT playerid FROM oastat_players WHERE guid = ?),(SELECT playerid FROM oastat_players WHERE guid = ?),?,?,'harvester')"
-#define CHALLENGES "INSERT INTO oastat_challenges(gamenumber,player,challenge,amount) VALUES (?,(SELECT playerid FROM oastat_players WHERE guid = ?),?,?)"
+#define CTF_ELIM "INSERT INTO oastat_team_events(gamenumber,second,team,player,eventtype,generic1,gametype) VALUES (?,?,?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?,?,'ctfelim')"
+#define HARVESTER "INSERT INTO oastat_team_events(gamenumber,second,team,player,player2,eventtype,amount,gametype) VALUES (?,?,?,NVL((SELECT playerid FROM oastat_players WHERE guid = ?),0),COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?,?,'harvester')"
+#define CHALLENGES "INSERT INTO oastat_challenges(gamenumber,player,challenge,amount) VALUES (?,COALESCE((SELECT playerid FROM oastat_players WHERE guid = ?),0),?,?)"
+
+#define SELECT_USERVARS2SAVE "SELECT thekey FROM oastat_config_uservars2save"
+#define SELECT_CVARS2SAVE "SELECT cvar FROM oastat_config_gamevars2save"
static string S_GETLASTGAMENUMBER = GETLASTGAMENUMBER;
static string S_STARTGAME = STARTGAME;
@@ -64,11 +67,28 @@ void Db2DbiXX::InitStrings(string backend) {
sql_backend = backend;
}
+void Db2DbiXX::ReadConfigFromDb() {
+ result res;
+ row r;
+ string value;
+ *sql<<SELECT_USERVARS2SAVE,res;
+ while(res.next(r)) {
+ r >> value;
+ uservars2save.insert(value);
+ }
+ *sql<< SELECT_CVARS2SAVE,res;
+ while(res.next(r)) {
+ r >> value;
+ cvars2save.insert(value);
+ }
+}
+
Db2DbiXX::Db2DbiXX() {
sql = new session("pgsql");
InitStrings("pgsql");
sql->param("dbname","oastat");
sql->connect();
+ ReadConfigFromDb();
commitlock = new transaction(*sql);
debug = true;
}
@@ -90,6 +110,7 @@ Db2DbiXX::Db2DbiXX(string dbargs)
}
}
sql->connect();
+ ReadConfigFromDb();
commitlock = new transaction(*sql);
debug = true;
//sql(dbargs);
@@ -105,7 +126,7 @@ Db2DbiXX::~Db2DbiXX() {
}
void Db2DbiXX::createTables() {
-
+
}
void Db2DbiXX::startGame(int gametype, string mapname, string basegame, string servername, OaStatStruct *oss) {
diff --git a/src/db/Db2DbiXX.hpp b/src/db/Db2DbiXX.hpp
index 7fb1cd8..25f12f1 100644
--- a/src/db/Db2DbiXX.hpp
+++ b/src/db/Db2DbiXX.hpp
@@ -13,6 +13,7 @@
#include <dbixx/dbixx.h>
#include <iostream>
#include <sstream>
+#include <set>
using namespace std;
using namespace dbixx;
@@ -54,8 +55,11 @@ private:
void SetOk(bool ok);
void DebugMessage(string msg);
void InitStrings(string backend);
+ void ReadConfigFromDb();
string sql_backend;
bool last_value;
+ set<string> cvars2save;
+ set<string> uservars2save;
};
#endif /* _DB2DBIXX_HPP */
diff --git a/src/oastat.cpp b/src/oastat.cpp
index 7f67845..37f5e92 100644
--- a/src/oastat.cpp
+++ b/src/oastat.cpp
@@ -165,7 +165,7 @@ static int processStdIn(istream* in_p) {
oss.clear();
oss.parseLine(line);
osslist.push_back(oss);
- if(oss.command=="ShutdownGame")
+ if(true || oss.command=="ShutdownGame")
{
while(!osslist.empty())
{
diff --git a/src/oss2db/Award2Db.cpp b/src/oss2db/Award2Db.cpp
index 897c3be..1ed0596 100644
--- a/src/oss2db/Award2Db.cpp
+++ b/src/oss2db/Award2Db.cpp
@@ -23,6 +23,9 @@ void Award2Db::process(OaStatStruct oss) {
if(!canProcess(oss))
return; //Invalid oss
+ if(oss.parameters.at(0)>-1 && oss.parameters.at(0)<MAX_ID)
+ return; //Not valid player
+
string player = clientIdMap[oss.parameters.at(0)];
dp->addAward(oss.second,player,oss.parameters.at(1));
diff --git a/src/oss2db/Challenge2Db.cpp b/src/oss2db/Challenge2Db.cpp
index eb5631b..593f017 100644
--- a/src/oss2db/Challenge2Db.cpp
+++ b/src/oss2db/Challenge2Db.cpp
@@ -21,6 +21,9 @@ bool Challenge2Db::canProcess(OaStatStruct oss) {
void Challenge2Db::process(OaStatStruct oss) {
if(!canProcess(oss))
return; //Invalid oss
+
+ if(oss.parameters.at(0)>-1 && oss.parameters.at(0)<MAX_ID)
+ return; //Not valid player
string player = clientIdMap[oss.parameters.at(0)];
diff --git a/src/oss2db/Harvester2Db.cpp b/src/oss2db/Harvester2Db.cpp
index 1f01c91..9af7670 100644
--- a/src/oss2db/Harvester2Db.cpp
+++ b/src/oss2db/Harvester2Db.cpp
@@ -26,10 +26,14 @@ void Harvester2Db::process(OaStatStruct oss) {
if(oss.parameters.at(0)>-1 && oss.parameters.at(0)<MAX_ID) {
player1 = clientIdMap[oss.parameters.at(0)];
+ } else {
+ player1 = "WORLD";
}
if(oss.parameters.at(3)>-1 && oss.parameters.at(3)<MAX_ID) {
player2 = clientIdMap[oss.parameters.at(3)];
+ } else {
+ player2 = "WORLD";
}
dp->addHarvester(oss.second,player1,player2,oss.parameters.at(1) /*team*/,oss.parameters.at(2) /*event*/, oss.parameters.at(4) /*score*/ );