Код:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#define PLUGIN "Map_stats"
#define VERSION "1.3"
#define AUTHOR "Svoloch aka tavot"
new const Version[] = "1.3"
new Handle: SQL_connection
new Handle: SQLTuple
new g_ct_win
new g_t_win
new g_mapname[32]
new no_players
new g_online_r
new table[32]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("map_stats_host", "localhost")
register_cvar("map_stats_db", "map_stats")
register_cvar("map_stats_user", "login")
register_cvar("map_stats_password", "pass")
register_cvar("map_stats_table", "public")
register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")
register_cvar("Map stats", Version, FCVAR_SERVER|FCVAR_SPONLY)
}
public plugin_cfg(){
new host[32], db[32], user[32], password[32]
get_cvar_string("map_stats_host", host, 31)
get_cvar_string("map_stats_db", db, 31)
get_cvar_string("map_stats_user", user, 31)
get_cvar_string("map_stats_password", password, 31)
get_cvar_string("map_stats_table", table, 31)
SQLTuple = SQL_MakeDbTuple(host,user,password,db)
new err, error[256]
SQL_connection = SQL_Connect(SQLTuple, err, error, charsmax(error))
if(SQL_connection != Empty_Handle)
{
server_print("%s","[MAP]Stats: MySQL connect is ok")
new zapros[2048]
formatex(zapros, charsmax(zapros),"CREATE TABLE IF NOT EXISTS `%s`(",table)
add(zapros,charsmax(zapros),"`id` int(11) NOT NULL auto_increment,`map` varchar(32) NOT NULL,\
`ct_win` int(11) NOT NULL default '0',`t_win` int(11) NOT NULL default '0',\
`games` int(11) NOT NULL default '1',`online_time` int(15) NOT NULL default '0',\
`timestamp` int(12) default '0',");
add(zapros,charsmax(zapros),"`time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,\
`dead` int(10) NOT NULL default '0',`dead_count` int(10) NOT NULL default '0',\
`first_date` int(15) NOT NULL default '0',PRIMARY KEY (`id`),\
UNIQUE KEY `map` (`map`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;");
SQL_QueryAndIgnore(SQL_connection,"%s",zapros)
new current_time = get_systime()
g_online_r = current_time;
//log_amx("%s",LANG_SERVER, "[MAP]Stats: Connect sucsessful.")
get_mapname(g_mapname, 31)
SQL_QueryAndIgnore(SQL_connection, "INSERT INTO `%s` (`map`,`first_date`) VALUES ('%s','%d') ON DUPLICATE KEY UPDATE `games` = `games` + 1", table, g_mapname,current_time)
// report of crashe server in map
new Handle:query
query = SQL_PrepareQuery(SQL_connection,"SELECT `dead` FROM `%s` WHERE `map` = '%s' ",table,g_mapname)
SQL_Execute(query)
if (SQL_MoreResults(query)){
new dead = SQL_ReadResult(query, 0)
if(dead == 0){
server_print("%s","[MAP]Stats: Server chenched map - is ok")
}else{
server_print("%s","[MAP]Stats: Server crashed - restart server")
SQL_QueryAndIgnore(SQL_connection, "INSERT INTO `%s` (`map`) VALUES ('%s') ON DUPLICATE KEY UPDATE `dead_count` = `dead_count` + 1", table, g_mapname)
}
}
SQL_QueryAndIgnore(SQL_connection, "INSERT INTO `%s` (`map`) VALUES ('%s') ON DUPLICATE KEY UPDATE `dead` = 1", table, g_mapname)
}
else
{
server_print("%s","[MAP]Stats: MySQL error")
//server_cmd("restart")
pause("a")
}
}
public ct_win()
{
no_players = get_playersnum()
if(no_players >=2)
g_ct_win++
}
public t_win()
{
no_players = get_playersnum()
if(no_players >=2)
g_t_win++
}
public plugin_end(){
new current_time = get_systime()
new online_time
online_time = current_time - g_online_r;
new Handle:query
query = SQL_PrepareQuery(SQL_connection, "UPDATE `%s` SET `ct_win` = `ct_win` + '%d' , `t_win`=`t_win`+ '%d',`timestamp`='%d', `online_time` = `online_time` + '%d' WHERE `map` = '%s'", table, g_ct_win, g_t_win , current_time,online_time, g_mapname )
//server_print("[MAP]Stats: %d plugin_end - map stats",current_time)
SQL_QueryAndIgnore(SQL_connection, "INSERT INTO `%s` (`map`) VALUES ('%s') ON DUPLICATE KEY UPDATE `dead` = 0", table, g_mapname)
SQL_Execute(query)
SQL_FreeHandle(SQL_connection)
}