Senior Member
|
11-30-2008
, 08:52
|
#1
|
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <hamsandwich>
#include <sqlx>
#define PLUGIN "customrank"
#define VERSION "1.00"
#define AUTHOR "Kyto"
#define MINPLAYERS 2
#pragma semicolon 1
// Server values
new startpts, pts_kill, pts_headshot;
new pts_bomb_plant, pts_bomb_explode;
new pts_bomb_defuse_attempt, pts_bomb_defuse;
new pts_hostage_rescue_attempt, pts_hostage_rescue;
new mpts_death, mpts_teamkill, mpts_hostagekill;
new Handle:sql_tuple, sql_error[512];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("customrank",VERSION,FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED);
set_task(0.5,"sql_init");
}
stock set_stats(id,const statsd[], hs = 0) {
new Handle:query, sql[256];
new steamid[33];
get_user_authid(id,steamid,32);
new ErrorCode,Handle:SqlConnection = SQL_Connect(sql_tuple,ErrorCode,sql_error,511);
new value[33];
format(value,32,statsd);
if(SqlConnection == Empty_Handle) {
set_fail_state(sql_error);
}
format(sql,255,"SELECT %s FROM crank_stats WHERE steamid='%s'", value, steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
new data[33];
SQL_ReadResult(query,0,data,32);
SQL_FreeHandle(query);
new newpoints;
newpoints = str_to_num(data)+1;
format(sql,255,"UPDATE crank_stats SET %s = %d WHERE steamid='%s'", value, newpoints, steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
SQL_FreeHandle(query);
if(hs) {
format(value,32,"%s_hs",value);
format(sql,255,"SELECT %s FROM crank_stats WHERE steamid='%s'", value, steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
new data[33];
SQL_ReadResult(query,0,data,32);
SQL_FreeHandle(query);
new newpoints;
newpoints = str_to_num(data)+1;
format(sql,255,"UPDATE crank_stats SET %s = %d WHERE steamid='%s'", value, newpoints, steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
SQL_FreeHandle(query);
}
SQL_FreeHandle(SqlConnection);
}
public give_points(id,points,take) {
new Handle:query, sql[256];
new steamid[33];
get_user_authid(id,steamid,32);
new ErrorCode,Handle:SqlConnection = SQL_Connect(sql_tuple,ErrorCode,sql_error,511);
if(SqlConnection == Empty_Handle) {
set_fail_state(sql_error);
}
format(sql,255,"SELECT points FROM crank_stats WHERE steamid='%s'", steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
new data[33];
SQL_ReadResult(query,0,data,32);
SQL_FreeHandle(query);
new newpoints;
if(take) {
newpoints = str_to_num(data)-points;
} else {
newpoints = str_to_num(data)+points;
}
format(sql,255,"UPDATE crank_stats SET points=%d WHERE steamid='%s'", newpoints, steamid);
query = SQL_PrepareQuery(SqlConnection,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
SQL_FreeHandle(query);
SQL_FreeHandle(SqlConnection);
}
public client_authorized(id) {
new steamid[33], name[33];
get_user_authid(id,steamid,32);
get_user_name(id,name,32);
replace_all(name,32,"'","\'");
replace_all(name,32,"^"","\^"");
authorized[id] = true;
//if num of rows by steamid > 0 read stats data, else create row
new ErrorCode,Handle:SqlConnection = SQL_Connect(sql_tuple,ErrorCode,sql_error,511);
if(SqlConnection == Empty_Handle) {
set_fail_state(sql_error);
}
new sql[256];
format(sql,255,"SELECT * FROM crank_rank WHERE steamid='%s'",steamid);
new rows = sql_results(SqlConnection,sql);
if(rows == 0) {
new Handle:query, Handle:query2;
new sql[128];
format(sql,127,"INSERT INTO crank_rank (id, steamid, name, namelist) VALUES (NULL, '%s', '%s', '%s,')", steamid, name, name);
new sql2[128];
format(sql2,127,"INSERT INTO crank_stats (steamid, points) VALUES ('%s', %d)", steamid, 1000);
query = SQL_PrepareQuery(SqlConnection,sql);
query2 = SQL_PrepareQuery(SqlConnection,sql2);
if(!SQL_Execute(query) || !SQL_Execute(query2)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
SQL_FreeHandle(query);
SQL_FreeHandle(query2);
}
SQL_FreeHandle(SqlConnection);
}
public sql_init() {
new host[64], user[64], pass[64], db[64];
get_cvar_string("amx_sql_host", host, 63);
get_cvar_string("amx_sql_user", user, 63);
get_cvar_string("amx_sql_pass", pass, 63);
get_cvar_string("amx_sql_db", db, 63);
sql_tuple = SQL_MakeDbTuple(host, user, pass, db);
new ErrorCode, Handle:SqlConnection = SQL_Connect(sql_tuple,ErrorCode,sql_error,511);
if(SqlConnection == Empty_Handle) {
server_print("%s :: MySQL connection failed", PLUGIN);
set_fail_state(sql_error);
} else {
server_print("%s :: MySQL connection succesful", PLUGIN);
}
// Get the rank settings
server_print("%s :: Loading settings", PLUGIN);
new Handle:query;
query = SQL_PrepareQuery(SqlConnection,"SELECT * FROM crank_settings");
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
server_print("- POINTS -");
new data[33];
SQL_ReadResult(query,0,data,32);
startpts = str_to_num(data);
server_print("Start: %d", startpts);
SQL_ReadResult(query,1,data,32);
pts_kill = str_to_num(data);
server_print("Kill: %d", pts_kill);
SQL_ReadResult(query,2,data,32);
pts_headshot = str_to_num(data);
server_print("Headshot: %d", pts_headshot);
SQL_ReadResult(query,3,data,32);
pts_bomb_plant = str_to_num(data);
server_print("Bomb plant: %d", pts_bomb_plant);
SQL_ReadResult(query,4,data,32);
pts_bomb_explode = str_to_num(data);
server_print("Bomb explode: %d", pts_bomb_explode);
SQL_ReadResult(query,5,data,32);
pts_bomb_defuse_attempt = str_to_num(data);
server_print("Bomb defuse attempt: %d", pts_bomb_defuse_attempt);
SQL_ReadResult(query,6,data,32);
pts_bomb_defuse = str_to_num(data);
server_print("Bomb defuse: %d", pts_bomb_defuse);
SQL_ReadResult(query,7,data,32);
pts_hostage_rescue_attempt = str_to_num(data);
server_print("Hostage rescue attempt: %d", pts_hostage_rescue_attempt);
SQL_ReadResult(query,8,data,32);
pts_hostage_rescue = str_to_num(data);
server_print("Hostage rescue: %d", pts_hostage_rescue);
SQL_ReadResult(query,9,data,32);
mpts_death = str_to_num(data);
server_print("Death: %s%d", "-", mpts_death);
SQL_ReadResult(query,10,data,32);
mpts_teamkill = str_to_num(data);
server_print("Teamkill: %s%d", "-", mpts_teamkill);
SQL_ReadResult(query,11,data,32);
mpts_hostagekill = str_to_num(data);
server_print("Hostagekill: %s%d", "-", mpts_hostagekill);
server_print("- OTHER -");
SQL_FreeHandle(query);
SQL_FreeHandle(SqlConnection);
server_print("%s :: Settings loaded", PLUGIN);
}
stock sql_results(Handle:con,const sql[], cols = 0) {
new Handle:query, result;
query = SQL_PrepareQuery(con,sql);
if(!SQL_Execute(query)) {
server_print("%s :: MySQL query failed, stopping plugin", PLUGIN);
SQL_QueryError(query,sql_error,511);
set_fail_state(sql_error);
}
if(cols == 1) {
result = SQL_NumColumns(query);
} else {
result = SQL_NumResults(query);
}
SQL_FreeHandle(query);
return result;
}
public plugin_end() {
SQL_FreeHandle(sql_tuple);
}
Yeah I thought SQLx got rid of the packet loss problem, but seems I'm still getting it. Then I realised I have to use Threaded Querying and ran into a problem. How do I convert this to use threaded querying?
EDIT:
To put it simple, could someone give me a working example on using Threaded Querying? Hawk's example is somehow complex - I see queries in many places and no idea how to run one simple query.
EDIT: Sorry it's not two weeks, I will not bump this anymore. Just needed to clear out the actual point of the topic. =)
Last edited by YamiKaitou; 12-05-2008 at 14:47.
|
|