This isn't my plugin I just cleaned up the code, add pcvar etc. I need you to futher optimize this plugin since the original author has pretty much abandoned his plugin
Code:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#define PLUGIN "ratemap"
#define VERSION "0.9.6"
#define AUTHOR "sTmN"
new const TAG[] = "[RateMap]"
new filename[256],parsedrate[2],mapname[30]
new Handle:g_SqlTuple
new g_Error[512]
new ErrorCode,Handle:SqlConnection
new cv_RateMap_sql, cv_RateMap_mode
new cv_RateMap_host, cv_RateMap_user, cv_RateMap_pass, cv_RateMap_db
new cv_RateMap_hostname
new g_szRateMap_host[64], g_szRateMap_user[64], g_szRateMap_pass[64], g_szRateMap_db[64]
new g_szRateMap_hostname[64], g_szRateMap_ip[15], g_szRateMap_port[8]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /rate","say_rate")
cv_RateMap_sql = register_cvar("rm_sql","1")
cv_RateMap_mode = register_cvar("rm_mode","1") // 1-steamid, 2-name, 3-ip
cv_RateMap_host = register_cvar("rm_host","localhost")
cv_RateMap_user = register_cvar("rm_user","username")
cv_RateMap_pass = register_cvar("rm_pass","password")
cv_RateMap_db = register_cvar("rm_db","database")
cv_RateMap_hostname = register_cvar("rm_hostname","Your Hostname")
get_pcvar_string(cv_RateMap_host, g_szRateMap_host, charsmax(g_szRateMap_host))
get_pcvar_string(cv_RateMap_user,g_szRateMap_user,charsmax(g_szRateMap_user))
get_pcvar_string(cv_RateMap_pass,g_szRateMap_pass,charsmax(g_szRateMap_pass))
get_pcvar_string(cv_RateMap_db,g_szRateMap_db,charsmax(g_szRateMap_db))
get_pcvar_string(cv_RateMap_hostname,g_szRateMap_hostname,charsmax(g_szRateMap_hostname))
get_cvar_string("ip",g_szRateMap_ip,charsmax(g_szRateMap_ip))
get_cvar_string("port",g_szRateMap_port,charsmax(g_szRateMap_port))
get_mapname(mapname,30)
get_configsdir(filename,255)
format(filename,charsmax(filename),"%s/rate",filename)
if(!get_pcvar_num(cv_RateMap_sql))
{
if(!dir_exists(filename))
{
mkdir(filename)
if(dir_exists(filename))
{
format(filename,charsmax(filename),"%s/%s.ini",filename,mapname)
new fp=fopen(filename,"w"); fclose(fp);
return
}
}
else
{
format(filename,charsmax(filename),"%s/%s.ini",filename,mapname)
if(!file_exists(filename))
{
new fp=fopen(filename,"w"); fclose(fp);
return
}
}
server_print("# File created successfully.")
}
else
{
table_init();
}
}
public sql_connect()
{
SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error)
}
public table_init()
{
g_SqlTuple = SQL_MakeDbTuple(g_szRateMap_host,g_szRateMap_user,g_szRateMap_pass,g_szRateMap_db)
sql_connect();
// tworzy tabele
new Handle:Query = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS rm_rates (steamid TEXT(32),nickname TEXT(32),ip TEXT(32),mapname TEXT(32),rate INT(11),g_szRateMap_ip TEXT(32))")
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
set_fail_state(g_Error)
}
new Handle:Query2 = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS rm_servers (ip TEXT(32),g_szRateMap_hostname TEXT(32))")
if(!SQL_Execute(Query2))
{
SQL_QueryError(Query2,g_Error,511)
set_fail_state(g_Error)
}
server_print("# Connected to database succesfully.")
// dodaje serwer do tabeli 'server'
new Handle:Query3 = SQL_PrepareQuery(SqlConnection,"SELECT ip, hostname FROM rm_servers WHERE ip='%s:%s'",g_szRateMap_ip,g_szRateMap_port)
if(!SQL_Execute(Query3))
{
SQL_QueryError(Query3,g_Error,511)
set_fail_state(g_Error)
}
if(!SQL_MoreResults(Query3))
{
new Handle:Query4 = SQL_PrepareQuery(SqlConnection,"INSERT INTO rm_servers VALUES('%s:%s','%s')",g_szRateMap_ip,g_szRateMap_port,g_szRateMap_hostname)
if(!SQL_Execute(Query4))
{
SQL_QueryError(Query4,g_Error,511)
set_fail_state(g_Error)
}
}
else
{
new hostname_fromsql[60]
hostname_fromsql[0]=SQL_ReadResult(Query3,0)
if(!equal(hostname_fromsql,g_szRateMap_hostname))
{
new Handle:Query5 = SQL_PrepareQuery(SqlConnection,"UPDATE rm_servers SET hostname='%s' WHERE ip='%s:%s'",g_szRateMap_hostname,g_szRateMap_ip,g_szRateMap_port)
if(!SQL_Execute(Query5))
{
SQL_QueryError(Query5,g_Error,511)
set_fail_state(g_Error)
}
}
}
SQL_FreeHandle(SqlConnection)
}
public say_rate(id)
{
new iMode = get_pcvar_num(cv_RateMap_mode)
new steamid[32], name[32], ip[32]
get_user_authid(id,steamid,31)
get_user_name(id,name,32)
get_user_ip(id,ip,32,1)
if(!get_pcvar_num(cv_RateMap_sql))
{
new readdata[128],txtlen
new parsedsteamid[32], parsedname[32], parsedip[32]
new pomocnik=0
new fsize = file_size(filename,1)
for (new line=0;line<=fsize;line++)
{
read_file(filename,line,readdata,127,txtlen)
parse(readdata,parsedsteamid,31,parsedrate,2,parsedname,31,parsedip,31)
// sprawdzanie rm_mode
switch(iMode)
{
case 1:
{
if(equal(steamid,parsedsteamid))
{
fnGreenChat(id,"%s You already rated this map.",TAG)
break
}
else
{
pomocnik=pomocnik+1
if(pomocnik==fsize)
ratemenu(id)
}
}
case 2:
{
if(equal(name,parsedname))
{
fnGreenChat(id,"%s You already rated this map.",TAG)
break
}
else
{
pomocnik=pomocnik+1
if(pomocnik==fsize)
ratemenu(id)
}
}
case 3:
{
if(equal(ip,parsedip))
{
fnGreenChat(id,"%s You already rated this map.",TAG)
break
}
else
{
pomocnik=pomocnik+1
if(pomocnik==fsize)
ratemenu(id)
}
}
}
}
}
else
{
switch(iMode)
{
case 1:
{
// steamid
sql_connect()
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT steamid FROM rm_rates WHERE steamid='%s' AND mapname='%s'",steamid,mapname)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
set_fail_state(g_Error)
}
if(!SQL_MoreResults(Query))
ratemenu(id)
else
fnGreenChat(id,"%s You already rated this map.",TAG)
}
case 2:
{
// nickname
sql_connect();
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT nickname FROM rm_rates WHERE nickname='%s' AND mapname='%s'",name,mapname)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
set_fail_state(g_Error)
}
if(!SQL_MoreResults(Query))
ratemenu(id)
else
fnGreenChat(id,"%s You already rated this map.",TAG)
}
case 3:
{
// ip adress
sql_connect();
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT ip FROM rm_rates WHERE ip='%s' AND mapname='%s'",ip,mapname)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
set_fail_state(g_Error)
}
if(!SQL_MoreResults(Query))
ratemenu(id)
else
fnGreenChat(id,"%s You already rated this map.",TAG)
}
}
SQL_FreeHandle(SqlConnection)
}
}
public ratemenu(id)
{
new Temp[64]
format(Temp, 64, "Rate map:");
new menu = menu_create(Temp,"func_ratemenu")
format(Temp, 64, "Terrible");
menu_additem(menu, Temp,"1",0)
format(Temp, 64, "Poor");
menu_additem(menu, Temp,"2",0)
format(Temp, 64, "Average");
menu_additem(menu, Temp,"3",0)
format(Temp, 64, "Good");
menu_additem(menu, Temp,"4",0)
format(Temp, 64, "Perfect");
menu_additem(menu, Temp,"5",0)
menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
menu_display(id,menu,0)
}
public func_ratemenu(id,menu,item)
{
if(item==MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
if(!get_pcvar_num(cv_RateMap_sql))
{
switch(key)
{
case 1: ratelocal(id,key);
case 2: ratelocal(id,key);
case 3: ratelocal(id,key);
case 4: ratelocal(id,key);
case 5: ratelocal(id,key);
case 6: ratelocal(id,key);
}
}
else
{
switch(key)
{
case 1: ratesql(id,key);
case 2: ratesql(id,key);
case 3: ratesql(id,key);
case 4: ratesql(id,key);
case 5: ratesql(id,key);
case 6: ratesql(id,key);
}
}
return PLUGIN_HANDLED
}
public ratelocal(id,key)
{
new writedata[128], steamid[32], name[32], ip[32]
get_user_authid(id,steamid,31)
get_user_name(id,name,32)
get_user_ip(id,ip,32,1)
new ocenka[15]
num_to_str(key,ocenka,12)
formatex(writedata,127,"^"%s^" ^"%s^" ^"%s^" ^"%s^"",steamid,ocenka,name,ip)
write_file(filename,writedata)
switch(key)
{
case 1: format(ocenka, 15, "Terrible");
case 2: format(ocenka, 15, "Poor");
case 3: format(ocenka, 15, "Average");
case 4: format(ocenka, 15, "Good");
case 5: format(ocenka, 15, "Perfect");
}
fnGreenChat(0,"%s For %s, this map is %s.",TAG,name,ocenka)
}
public ratesql(id,key)
{
new steamid[32],name[32],ip[32]
get_user_authid(id,steamid,32)
get_user_name(id,name,32)
get_user_ip(id,ip,32,1)
new rate[15]
num_to_str(key,rate,12)
sql_connect();
new Handle:Queries = SQL_PrepareQuery(SqlConnection,"INSERT INTO rm_rates VALUES('%s','%s','%s','%s','%s','%s:%s')",steamid,name,ip,mapname,rate,g_szRateMap_ip,g_szRateMap_port)
switch(key)
{
case 1: format(rate, 15, "Terrible");
case 2: format(rate, 15, "Poor");
case 3: format(rate, 15, "Average");
case 4: format(rate, 15, "Good");
case 5: format(rate, 15, "Perfect");
}
fnGreenChat(0,"%s For %s, this map is %s.",TAG,name,rate)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,511)
set_fail_state(g_Error)
}
SQL_FreeHandle(SqlConnection)
}
fnGreenChat( plr, const message[], {Float,Sql,Result,_}:... )
{
static max_players, svc_saytext;
if(!max_players) max_players = get_maxplayers( );
if(!svc_saytext) svc_saytext = get_user_msgid( "SayText" );
static msg[192]; msg[0] = 0x04;
vformat( msg[1], sizeof msg - 2, message, 3 );
if(1 <= plr <= max_players)
{
message_begin( MSG_ONE, svc_saytext, { 0, 0, 0 }, plr );
write_byte( plr );
write_string( msg );
message_end( );
}
else if( plr == 0 )
{
for( new i = 1 ; i <= max_players ; i++ )
{
if( is_user_connected( i ) )
{
message_begin( MSG_ONE, svc_saytext, { 0, 0, 0 }, i );
write_byte( i );
write_string( msg );
message_end( );
}
}
}
return 1;
}