can someone updae this plugin?
update:use sqlx instead of dbi.:shock:
PHP Code:
#include <amxmodx> #include <csstats> #include <dbi> #include <amxmisc> #define DEBUG 1 #define MAX_PLAYERS 32 + 1 #define MAX_NAME_LENGTH 31 #define MAX_TEXT_LENGTH 255 #define BUFFER_SIZE 500 //the hour when stats will be processed #define RESET_HOUR "06" //comment if sql_bannedids is not present (else sql server will return error, not major :) #define SQL_BANNEDIDS 1 #define S_KILLS 0 //csstats,csx #define S_DEATHS 1 //csstats,csx #define S_HS 2 //csstats,csx #define S_TK 3 //csstats,csx #define S_SHOTS 4 //csstats,csx #define S_HITS 5 //csstats,csx #define S_TIME 6 //custom #define S_SCORE 7 //custom #define S_EFF 8 //custom #define S_ACC 9 //custom #define S_ACCHS 10 // custom #define S_SIZE 11 // array size //stats vars new g_iPStats[BUFFER_SIZE][S_SIZE] //BUFFER_SIZE: buffer sql queries, saves query info in memory till end of map new g_sPStatsIds[BUFFER_SIZE][MAX_NAME_LENGTH+1] // authids new g_sPStatsNames[BUFFER_SIZE][MAX_NAME_LENGTH+1] // names new g_iMutationcount //tracking stats mutations //sql vars new g_host[MAX_NAME_LENGTH+1], g_user[MAX_NAME_LENGTH+1], g_pass[MAX_NAME_LENGTH+1], g_dbname[MAX_NAME_LENGTH+1], g_error[MAX_NAME_LENGTH+1] new Sql:g_dbc new Result:g_result //sqltable vars new g_sqlstats_table[MAX_NAME_LENGTH+1], g_iStats[8], g_iBodyHits[8] new g_sqlstats_weekly[MAX_NAME_LENGTH+1] new g_sqlstats_monthly[MAX_NAME_LENGTH+1] new g_sqlstats_yearly[MAX_NAME_LENGTH+1] new g_sqlbannedIDs[MAX_NAME_LENGTH+1] //top15sqltable vars new g_sqlstats_top15_dayly[MAX_NAME_LENGTH+1] new g_sqlstats_top15_weekly[MAX_NAME_LENGTH+1] new g_sqlstats_top15_monthly[MAX_NAME_LENGTH+1] new g_sqlstats_top15_yearly[MAX_NAME_LENGTH+1] //time booleans new bool:bYearPassed=false new bool:bMonthPassed=false new bool:bWeekPassed=false new bool:bDayPassed=false new g_iWeekday //file vars new g_date_file[MAX_TEXT_LENGTH+1] new g_tmpsv_lan = 0 // set to 1 to force logging by IP instead of STEAM_ID
/* PLUGIN INIT CALLS */ // plugin init public plugin_init() { //log_amx("[sqlStats] plugin_init") register_plugin("sqlStats","0.1.6","NeverStrike") register_cvar("amx_sqlstats_table", "sqlstatstable",0) register_cvar("amx_sqlstats_weekly", "sqlstats_c_weekly", 0) register_cvar("amx_sqlstats_monthly", "sqlstats_c_monthly", 0) register_cvar("amx_sqlstats_yearly", "sqlstats_c_yearly", 0) // top15 for every day/week/month register_cvar("amx_sqlstats_top15_dayly", "sqlstats_t15_dayly", 0) register_cvar("amx_sqlstats_top15_weekly", "sqlstats_t15_weekly", 0) register_cvar("amx_sqlstats_top15_monthly", "sqlstats_t15_monthly", 0) register_cvar("amx_sqlstats_top15_yearly", "sqlstats_t15_yearly", 0) g_iWeekday = 0 g_iMutationcount = 0 //zero initialize values for (new i = 0; i < BUFFER_SIZE; i++) { g_sPStatsIds[i] = "" for (new j = 0; j < S_SIZE; j++) { g_iPStats[i][j] = 0; } } new dataDir[64] get_datadir(dataDir, 63) format (g_date_file,MAX_TEXT_LENGTH, "%s/date.txt", dataDir) if (! file_exists(g_date_file) ) { write_date_file() new sWeekday[2] num_to_str(g_iWeekday,sWeekday,2) write_file(g_date_file,sWeekday,2) } //reload sql.cfg since some bug won't load the cvars listed above new configsDir[64] get_configsdir(configsDir, 63) server_cmd("exec %s/sql.cfg", configsDir) server_exec() return PLUGIN_CONTINUE } // bug in amxmodx prevents this from executing correctly public plugin_cfg() { // Fetch the database info stated in sql.cfg get_cvar_string("amx_sql_host",g_host,MAX_NAME_LENGTH) get_cvar_string("amx_sql_user",g_user,MAX_NAME_LENGTH) get_cvar_string("amx_sql_pass",g_pass,MAX_NAME_LENGTH) get_cvar_string("amx_sql_db",g_dbname,MAX_NAME_LENGTH) // get sql table vars get_cvar_string("amx_sqlstats_table", g_sqlstats_table, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_weekly", g_sqlstats_weekly, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_monthly", g_sqlstats_monthly, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_yearly", g_sqlstats_yearly, MAX_NAME_LENGTH) #if defined SQL_BANNEDIDS get_cvar_string("amx_sqlbannedids_table", g_sqlbannedIDs, MAX_NAME_LENGTH) #endif // get top15 sql table vars get_cvar_string("amx_sqlstats_top15_dayly", g_sqlstats_top15_dayly, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_top15_weekly", g_sqlstats_top15_weekly, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_top15_monthly", g_sqlstats_top15_monthly, MAX_NAME_LENGTH) get_cvar_string("amx_sqlstats_top15_yearly", g_sqlstats_top15_yearly, MAX_NAME_LENGTH) sql_init_stuff() return PLUGIN_CONTINUE } //required modules public plugin_modules() { //log_amx("[sqlStats] plugin_modules") //require_module("csstats") //amxmodx <0.20 RC7 require_module("csx") // amxmodx >=0.20 RC7 require_module("sql") } public plugin_end() { //log_amx("[sqlStats] plugin_end") //log_amx("[sqlStats] plugin_end mutationcount: %i", g_iMutationcount) for (new id = 1; id < MAX_PLAYERS; id++) gets_user_stats(id) save_user_stats() #if defined SQL_BANNEDIDS remove_bannedids() #endif check_date() if (bDayPassed || bWeekPassed || bMonthPassed || bYearPassed) { g_dbc = dbi_connect(g_host, g_user, g_pass, g_dbname, g_error, MAX_NAME_LENGTH) if (g_dbc == SQL_FAILED) log_amx("[sqlStats-history] SQL Connection Failed") else { if (bDayPassed) { //shift dayly stats to weekly stats (1 day has passed) shifttable(g_sqlstats_table,g_sqlstats_weekly) save_top15(g_sqlstats_table, g_sqlstats_top15_dayly) reset_stats() // reset the dayly stats reset_table(g_sqlstats_table) g_iWeekday+=1 new sWeekday[2] num_to_str(g_iWeekday,sWeekday,2) write_file(g_date_file,sWeekday,2) } if (bWeekPassed) { //shift dayly stats to monthly stats (1 week has passed) shifttable(g_sqlstats_weekly, g_sqlstats_monthly) save_top15(g_sqlstats_weekly, g_sqlstats_top15_weekly) reset_table(g_sqlstats_weekly) g_iWeekday = 0 write_file(g_date_file,"0",2) } if (bMonthPassed) { //shift monthly stats to yearly stats (1 month has passed) shifttable(g_sqlstats_monthly,g_sqlstats_yearly) save_top15(g_sqlstats_monthly, g_sqlstats_top15_monthly) reset_table(g_sqlstats_weekly) } if (bYearPassed) { save_top15(g_sqlstats_yearly, g_sqlstats_top15_yearly) reset_table(g_sqlstats_yearly) } } dbi_close(g_dbc) write_date_file() } return PLUGIN_CONTINUE } /* EVENTS */ // when a player disconnects save his stats public client_disconnect(id) { //log_amx("[sqlStats] client_disconnect") gets_user_stats(id) //save to buffer return PLUGIN_CONTINUE }
/* PLUGIN FUNCTIONS */ // establish a connection with db // create table if not present public sql_init_stuff() { //log_amx("[sqlStats] sql_init_stuff") //debug //log_amx("[sqlStats] sql_init_stuff h:%s, u:%s, p:%s, db:%s, t:%s",g_host,g_user,g_pass,g_dbname,g_sqlstats_table) g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,MAX_NAME_LENGTH) if (g_dbc == SQL_FAILED) log_amx("[sqlStats] SQL Connection Failed") else { dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`authid` VARCHAR( 32 ) NOT NULL, `name` VARCHAR( 32 ) NOT NULL , `date` TIMESTAMP( 10 ) NOT NULL , `score` INT NOT NULL ,`kills` INT NOT NULL , `teamkills` INT NOT NULL, `deaths` INT NOT NULL , `hits` INT NOT NULL , `shots` INT NOT NULL , `headshots` INT NOT NULL , `efficiency` DOUBLE (19,2) DEFAULT NULL, `accuracy` double(19,2) default NULL,`accuracyHS` double(19,2) default NULL, PRIMARY KEY(`authid`))", g_sqlstats_table) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`authid` VARCHAR( 32 ) NOT NULL, `name` VARCHAR( 32 ) NOT NULL , `date` TIMESTAMP( 10 ) NOT NULL , `score` INT NOT NULL ,`kills` INT NOT NULL , `teamkills` INT NOT NULL, `deaths` INT NOT NULL , `hits` INT NOT NULL , `shots` INT NOT NULL , `headshots` INT NOT NULL , `efficiency` DOUBLE (19,2) DEFAULT 0.0, `accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0, PRIMARY KEY(`authid`))", g_sqlstats_weekly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`authid` VARCHAR( 32 ) NOT NULL, `name` VARCHAR( 32 ) NOT NULL , `date` TIMESTAMP( 10 ) NOT NULL , `score` INT NOT NULL ,`kills` INT NOT NULL , `teamkills` INT NOT NULL, `deaths` INT NOT NULL , `hits` INT NOT NULL , `shots` INT NOT NULL , `headshots` INT NOT NULL , `efficiency` DOUBLE (19,2) DEFAULT 0.0, `accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0, PRIMARY KEY(`authid`))", g_sqlstats_monthly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`authid` VARCHAR( 32 ) NOT NULL, `name` VARCHAR( 32 ) NOT NULL , `date` TIMESTAMP( 10 ) NOT NULL , `score` INT NOT NULL ,`kills` INT NOT NULL , `teamkills` INT NOT NULL, `deaths` INT NOT NULL , `hits` INT NOT NULL , `shots` INT NOT NULL , `headshots` INT NOT NULL , `efficiency` DOUBLE (19,2) DEFAULT 0.0, `accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0, PRIMARY KEY(`authid`))", g_sqlstats_yearly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`id` INT NOT NULL AUTO_INCREMENT,`authid` VARCHAR( 32 ) NOT NULL,`name` VARCHAR( 32 ) NOT NULL,`date` TIMESTAMP( 6 ) NOT NULL,`score` INT NOT NULL,`kills` INT NOT NULL,`teamkills` INT NOT NULL,`deaths` INT NOT NULL,`hits` INT NOT NULL,`shots` INT NOT NULL,`headshots` INT NOT NULL,`efficiency` DOUBLE (19,2) DEFAULT 0.0,`accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0,PRIMARY KEY(`id`))", g_sqlstats_top15_dayly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`id` INT NOT NULL AUTO_INCREMENT,`authid` VARCHAR( 32 ) NOT NULL,`name` VARCHAR( 32 ) NOT NULL,`date` TIMESTAMP( 6 ) NOT NULL,`score` INT NOT NULL,`kills` INT NOT NULL,`teamkills` INT NOT NULL,`deaths` INT NOT NULL,`hits` INT NOT NULL,`shots` INT NOT NULL,`headshots` INT NOT NULL,`efficiency` DOUBLE (19,2) DEFAULT 0.0,`accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0,PRIMARY KEY(`id`))", g_sqlstats_top15_weekly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`id` INT NOT NULL AUTO_INCREMENT,`authid` VARCHAR( 32 ) NOT NULL,`name` VARCHAR( 32 ) NOT NULL,`date` TIMESTAMP( 4 ) NOT NULL,`score` INT NOT NULL,`kills` INT NOT NULL,`teamkills` INT NOT NULL,`deaths` INT NOT NULL,`hits` INT NOT NULL,`shots` INT NOT NULL,`headshots` INT NOT NULL,`efficiency` DOUBLE (19,2) DEFAULT 0.0,`accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0,PRIMARY KEY(`id`))", g_sqlstats_top15_monthly) dbi_query(g_dbc, "CREATE TABLE IF NOT EXISTS `%s` (`id` INT NOT NULL AUTO_INCREMENT,`authid` VARCHAR( 32 ) NOT NULL,`name` VARCHAR( 32 ) NOT NULL,`date` TIMESTAMP( 2 ) NOT NULL,`score` INT NOT NULL,`kills` INT NOT NULL,`teamkills` INT NOT NULL,`deaths` INT NOT NULL,`hits` INT NOT NULL,`shots` INT NOT NULL,`headshots` INT NOT NULL,`efficiency` DOUBLE (19,2) DEFAULT 0.0,`accuracy` double(19,2) default 0.0,`accuracyHS` double(19,2) default 0.0,PRIMARY KEY(`id`))", g_sqlstats_top15_yearly) } dbi_close(g_dbc) return PLUGIN_CONTINUE } // saves user info to sql db: // steamid, name, kills, deaths, hits, shots, headshots, +playtime save_user_stats() { //log_amx("[sqlStats] save_user_stats") log_amx("[sqlStats] Saving %i Players", g_iMutationcount) // sql connect g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,MAX_NAME_LENGTH) if (g_dbc == SQL_FAILED) log_amx("[sqlStats] SQL Connection Failed") else{ // process all queries for (new i = 0; i < g_iMutationcount; i++) { // for mysql 4.1.0 use INSERT INTO .... ON DUPLICATE KEY UPDATE, for now, this ugly stuff will do if ( !dbi_query(g_dbc,"UPDATE `%s` SET name='%s',date=NOW(),score=%i,kills=%i,teamkills=%i,deaths=%i,hits=%i,shots=%i,headshots=%i,efficiency=%i,accuracy=%i, accuracyHS=%i WHERE authid='%s'", g_sqlstats_table, g_sPStatsNames[i], g_iPStats[i][S_SCORE], g_iPStats[i][S_KILLS], g_iPStats[i][S_TK], g_iPStats[i][S_DEATHS], g_iPStats[i][S_HITS], g_iPStats[i][S_SHOTS], g_iPStats[i][S_HS], g_iPStats[i][S_EFF], g_iPStats[i][S_ACC], g_iPStats[i][S_ACCHS], g_sPStatsIds[i]) ) dbi_query(g_dbc,"INSERT INTO `%s` (authid, name, date,score,kills,teamkills,deaths,hits,shots,headshots,efficiency,accuracy,accuracyHS) values('%s','%s',NOW(),%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)",g_sqlstats_table,g_sPStatsIds[i],g_sPStatsNames[i],g_iPStats[i][S_SCORE],g_iPStats[i][S_KILLS],g_iPStats[i][S_TK],g_iPStats[i][S_DEATHS],g_iPStats[i][S_HITS], g_iPStats[i][S_SHOTS], g_iPStats[i][S_HS], g_iPStats[i][S_EFF], g_iPStats[i][S_ACC], g_iPStats[i][S_ACCHS]) //log_amx("[sqlStats]: saved %s, %s",g_sPStatsNames[i], g_sPStatsIds[i]) } } // sql close dbi_close(g_dbc) //reset mutationcount g_iMutationcount = 0 } // gets the stats for a player gets_user_stats(iPlayer) { new bad_id[5] = "hltv" new bad_id2[18] = "VALVE_ID_LOOPBACK" new sAuthid[MAX_NAME_LENGTH+1] get_user_authid(iPlayer, sAuthid, MAX_NAME_LENGTH) if ( is_user_connected(iPlayer) && contain( sAuthid, bad_id) == -1 && contain( sAuthid, bad_id2) == -1 ) { //if we're on LAN save by IP, else save by steam_id if ( g_tmpsv_lan == 1 ) get_user_ip(iPlayer, g_sPStatsIds[g_iMutationcount], MAX_NAME_LENGTH, 1) else{ get_user_authid(iPlayer, g_sPStatsIds[g_iMutationcount], MAX_NAME_LENGTH) } get_user_name(iPlayer, g_sPStatsNames[g_iMutationcount], MAX_NAME_LENGTH) get_user_stats( iPlayer, g_iStats, g_iBodyHits ) log_amx("[sqlStats] gets_user_stats %s, %s",g_sPStatsNames[g_iMutationcount], g_sPStatsIds[g_iMutationcount]) g_iPStats[g_iMutationcount][S_KILLS] = g_iStats[S_KILLS] // kills g_iPStats[g_iMutationcount][S_DEATHS] = g_iStats[S_DEATHS] // deaths g_iPStats[g_iMutationcount][S_HS] = g_iStats[S_HS] // headshots g_iPStats[g_iMutationcount][S_TK] = g_iStats[S_TK] // teamkills g_iPStats[g_iMutationcount][S_SHOTS] = g_iStats[S_SHOTS] // shots g_iPStats[g_iMutationcount][S_HITS] = g_iStats[S_HITS] // hits //g_iPStats[g_iMutationcount][S_TIME] = get_user_time(iPlayer) // playing time // dropped query lines are getting too big for the compiler g_iPStats[g_iMutationcount][S_SCORE] = g_iStats[S_KILLS] - g_iStats[S_DEATHS] - g_iStats[S_TK] //FIXME: maybe convert these into floats? now done in integers, db already works with floats (double(19,2)) g_iPStats[g_iMutationcount][S_EFF] = g_iStats[S_KILLS]*100 / (g_iStats[S_KILLS]+g_iStats[S_DEATHS]) g_iPStats[g_iMutationcount][S_ACC] = g_iStats[S_HITS]*100 / g_iStats[S_SHOTS] g_iPStats[g_iMutationcount][S_ACCHS] = g_iStats[S_HS]*100 / g_iStats[S_SHOTS] //one stats mutation added if (g_iMutationcount < BUFFER_SIZE ) g_iMutationcount++ else log_amx("[sqlStats] g_iMutationcount overflow, increase BUFFER_SIZE") // your server can be very busy :) } } //requires connection established reset_table(table[]) { dbi_query(g_dbc, "TRUNCATE TABLE `%s`", table); } reset_stats() { server_cmd("amx_cvar csstats_reset 1") server_exec() } //shifts tables to other tables e.g. dayly scores into weekly scores, or weekly scores into montly scores // insert if entry does not exist, adding(+) values if entry exists //requires connection established shifttable(src[], dst[]) { //log_amx("[sqlStats-history] shifttable: %s -> %s", src, dst) dbi_query(g_dbc,"UPDATE `%s`,`%s` SET `%s`.kills=`%s`.kills+`%s`.kills,`%s`.score=`%s`.score+`%s`.score,`%s`.teamkills=`%s`.teamkills+`%s`.teamkills,`%s`.deaths=`%s`.deaths+`%s`.deaths,`%s`.hits=`%s`.hits+`%s`.hits,`%s`.shots=`%s`.shots+`%s`.shots,`%s`.headshots=`%s`.headshots+`%s`.headshots where `%s`.authid=`%s`.authid",dst,src,dst,dst,src,dst,dst,src,dst,dst,src,dst,dst,src,dst,dst,src,dst,dst,src,dst,dst,src,dst,src) new sName[MAX_NAME_LENGTH+1],sAuthid[MAX_NAME_LENGTH+1] new iKills,iDeaths,iHS,iTK,iShots,iHits,iScore,iEff,iAcc,iAccHS g_result = dbi_query(g_dbc,"SELECT `%s`.* FROM `%s` LEFT JOIN `%s` ON `%s`.authid=`%s`.authid WHERE `%s`.authid IS NULL",src,src,dst,src,dst,dst) while (dbi_nextrow(g_result) > 0 ) { sName = "" sAuthid = "" dbi_result(g_result,"name",sName,31) dbi_result(g_result,"authid",sAuthid,31) iKills = dbi_result(g_result,"kills") iDeaths = dbi_result(g_result,"deaths") iHS = dbi_result(g_result,"headshots") iTK = dbi_result(g_result,"teamkills") iShots = dbi_result(g_result,"shots") iHits = dbi_result(g_result,"hits") iScore = dbi_result(g_result,"score") iEff = dbi_result(g_result,"efficiency") iAcc = dbi_result(g_result,"accuracy") iAccHS = dbi_result(g_result,"accuracyHS") dbi_query(g_dbc,"INSERT INTO `%s` (authid,name,date,score,kills,teamkills,deaths,hits,shots,headshots,efficiency,accuracy,accuracyHS) values('%s','%s',NOW(),%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)", dst, sAuthid, sName, iScore, iKills, iTK, iDeaths, iHits, iShots, iHS, iEff, iAcc, iAccHS) //server_print("INSERT INTO `%s` (authid,name,date,score,kills,teamkills,deaths,hits,shots,headshots,efficiency,accuracy,accuracyHS) values('%s','%s',NOW(),%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)", dst, sAuthid, sName, iScore, iKills, iTK, iDeaths, iHits, iShots, iHS, iEff, iAcc, iAccHS) } dbi_free_result(g_result) } //saves the top15 from active table to top15 table //requires connection established save_top15(src[],dst[]) { //log_amx("[sqlStats-history] shifttable: %s -> %s", src, dst) new sName[MAX_NAME_LENGTH+1],sAuthid[MAX_NAME_LENGTH+1] new iKills,iDeaths,iHS,iTK,iShots,iHits,iScore,iEff,iAcc,iAccHS g_result = dbi_query(g_dbc,"SELECT * FROM `%s` ORDER BY score DESC LIMIT 15",src) while (dbi_nextrow(g_result) > 0 ) { dbi_result(g_result,"name",sName,31) dbi_result(g_result,"authid",sAuthid,31) iKills = dbi_result(g_result,"kills") iDeaths = dbi_result(g_result,"deaths") iHS = dbi_result(g_result,"headshots") iTK = dbi_result(g_result,"teamkills") iShots = dbi_result(g_result,"shots") iHits = dbi_result(g_result,"hits") iScore = dbi_result(g_result,"score") iEff = dbi_result(g_result,"efficiency") iAcc = dbi_result(g_result,"accuracy") iAccHS = dbi_result(g_result,"accuracyHS") dbi_query(g_dbc,"INSERT INTO `%s` (authid,name,date,score,kills,teamkills,deaths,hits,shots,headshots,efficiency,accuracy,accuracyHS) values('%s','%s',NOW(),%i,%i,%i,%i,%i,%i,%i,%i,%i,%i)", dst, sAuthid, sName, iScore, iKills, iTK, iDeaths, iHits, iShots, iHS, iEff, iAcc, iAccHS) } } //write the current-date to file, for future reference write_date_file() { new CurrentTime[17] get_time("%Y %m %d %H:%M",CurrentTime,16) write_file (g_date_file,"//generated by sqlstats, do NOT modify",0) write_file(g_date_file,CurrentTime,1) } //check if last current-date & save-date has mutated day/week/month/year check_date() { new oldTime[17],oldWeekday[2],len new sNewDatefragment[6] read_file(g_date_file,1,oldTime,16,len) get_time("%Y ",sNewDatefragment,5) if (contain(oldTime,sNewDatefragment) == -1) { bYearPassed=true //log_amx("[sqlStats-history] YearPassed=true") } get_time(" %m ",sNewDatefragment,4) if (contain(oldTime,sNewDatefragment) == -1) { bMonthPassed=true //log_amx("[sqlStats-history] MonthPassed=true") } read_file(g_date_file,2,oldWeekday,2,len) g_iWeekday = str_to_num(oldWeekday) if (g_iWeekday > 6 ) { bWeekPassed=true //log_amx("[sqlStats-history] WeekPassed=true") } get_time(" %d ",sNewDatefragment,4) if (contain(oldTime,sNewDatefragment) == -1) { //log_amx("[sqlStats-history] DayPassed=true") get_time("%H",sNewDatefragment,4) if (contain(sNewDatefragment,RESET_HOUR) != -1) { bDayPassed=true //log_amx("[sqlStats-history] HourPassed=true") } } } //purge bannedids from stats remove_bannedids() { //log_amx("[sqlstats] remove_bannedids") new sAuthid[MAX_NAME_LENGTH+1] g_dbc = dbi_connect(g_host, g_user, g_pass, g_dbname, g_error, MAX_NAME_LENGTH) if (g_dbc == SQL_FAILED) log_amx("[sqlStats-history] SQL Connection Failed") else { g_result = dbi_query(g_dbc,"SELECT * FROM `%s`", g_sqlbannedIDs) while (dbi_nextrow(g_result) > 0 ) { dbi_result(g_result,"authid",sAuthid,31) dbi_query(g_dbc, "DELETE FROM `%s` WHERE authid = '%s'", g_sqlstats_table, sAuthid) //server_print("[sqlstats] DELETE FROM `%s` WHERE authid = '%s'", g_sqlstats_table, sAuthid) } } dbi_close(g_dbc) }
|