f0.gg-kreedzsrv/amxmodx/scripting/include/uq_jumpstats_sql.inc
2021-07-25 14:20:46 +02:00

307 lines
11 KiB
PHP

#define TASK_CHECK_SQL_PLAYER 13378
public retrying_getinfo(id) {
id = id - 213134;
player_load_info(id);
}
public player_load_info(id) {
if(is_user_bot(id))
return PLUGIN_HANDLED;
new Handle:query,error[128],sql_query[128],quoted_name[65];
SQL_QuoteString(SqlConnection, quoted_name, 64, g_playername[id]);
if(strlen(g_playerip[id]) < 1) {
log_amx("STEAM BUG; output: %s; player id: %d", g_playersteam[id], get_user_userid(id));
get_user_authid(id, g_playersteam[id], 64);
}
query = SQL_PrepareQuery(SqlConnection, "SELECT `id` FROM kzp_players WHERE auth LIKE '%s'", g_playersteam[id]);
if(!SQL_Execute(query)) {
SQL_QueryError(query, error, 127);
new tmp_error;
SqlConnection = SQL_Connect(DB_TUPLE, tmp_error, g_error, 511);
set_task(2.0, "retrying_getinfo", 213134 + id);
}
else if(!SQL_NumResults(query)) {
new cData[1];
cData[0] = id;
formatex(sql_query, 511, "INSERT INTO kzp_players(name,ip,auth) VALUES('%s','%s','%s')", quoted_name, g_playerip[id], g_playersteam[id]);
SQL_ThreadQuery(DB_TUPLE, "QueryHandle_newPlayer", sql_query, cData, strlen(cData[0]));
}
else {
new cData[1];
cData[0] = id;
g_sql_pid[id] = SQL_ReadResult(query, 0);
format(sql_query, 511, "SELECT type,distance,maxspeed,prestrafe,strafes,sync,ddbh,pspeed,wpn FROM uq_jumps%s WHERE pid=%d", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", g_sql_pid[id]);
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_LoadPlayerTops", sql_query, cData, strlen(cData[0]));
format(sql_query, 511, "SELECT type,distance,jumpoff,block,pspeed,wpn FROM uq_block_tops%s WHERE pid=%d", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", g_sql_pid[id]);
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_LoadPlayerTopsBlock", sql_query, cData, strlen(cData[0]));
format(sql_query, 511, "UPDATE kzp_players SET name='%s',ip='%s',auth='%s' WHERE `id`=%d", quoted_name, g_playerip[id], g_playersteam[id], g_sql_pid[id]);
SQL_ThreadQuery(DB_TUPLE, "QueryHandle", sql_query);
}
return PLUGIN_CONTINUE;
}
public QueryHandle_LoadPlayerTops(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime) {
if(iFailState != TQUERY_SUCCESS) {
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
return PLUGIN_HANDLED;
}
new type[64], distance, maxspeed, prestrafe, strafes, sync, ddbh, tmp_str[12], pspeed, wpn[33];
while(SQL_MoreResults(hQuery)) {
SQL_ReadResult(hQuery,0,type,64);
distance = SQL_ReadResult(hQuery,1);
maxspeed = SQL_ReadResult(hQuery,2);
prestrafe = SQL_ReadResult(hQuery,3);
strafes = SQL_ReadResult(hQuery,4);
sync = SQL_ReadResult(hQuery,5);
ddbh = SQL_ReadResult(hQuery,6);
pspeed = SQL_ReadResult(hQuery,7);
SQL_ReadResult(hQuery,8,wpn,32);
new Trie:JumpStat;
JumpStat = TrieCreate();
TrieSetString(JumpStat, "type", type);
TrieSetCell(JumpStat, "distance", distance);
TrieSetCell(JumpStat, "maxspeed", maxspeed);
TrieSetCell(JumpStat, "prestrafe", prestrafe);
TrieSetCell(JumpStat, "strafes", strafes);
TrieSetCell(JumpStat, "sync", sync);
TrieSetCell(JumpStat, "ddbh", ddbh);
TrieSetCell(JumpStat, "pspeed", pspeed);
TrieSetString(JumpStat, "wpn", wpn);
num_to_str(g_sql_pid[cData[0]],tmp_str,11);
format(type, 64, "%s_%s_%d", tmp_str, type, pspeed);
TrieSetCell(JumpPlayers, type, JumpStat);
SQL_NextRow(hQuery);
}
SQL_FreeHandle(hQuery);
return PLUGIN_CONTINUE;
}
public QueryHandle_LoadPlayerTopsBlock(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime) {
if(iFailState != TQUERY_SUCCESS) {
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
return PLUGIN_HANDLED;
}
new type[65],distance,jumpoff,block,tmp_str[12],pspeed,wpn[33];
while(SQL_MoreResults(hQuery)) {
SQL_ReadResult(hQuery,0,type,64);
distance = SQL_ReadResult(hQuery,1);
jumpoff = SQL_ReadResult(hQuery,2);
block = SQL_ReadResult(hQuery,3);
pspeed = SQL_ReadResult(hQuery,4);
SQL_ReadResult(hQuery,5,wpn,32);
new Trie:JumpStat;
JumpStat = TrieCreate();
TrieSetString(JumpStat, "type", type);
TrieSetCell(JumpStat, "distance", distance);
TrieSetCell(JumpStat, "jumpoff", jumpoff);
TrieSetCell(JumpStat, "block", block);
TrieSetCell(JumpStat, "pspeed", pspeed);
TrieSetString(JumpStat, "wpn", wpn);
num_to_str(g_sql_pid[cData[0]],tmp_str,11);
format(type, 64, "block_%s_%s_%d", tmp_str, type, pspeed);
TrieSetCell(JumpPlayers, type, JumpStat);
SQL_NextRow(hQuery);
}
SQL_FreeHandle(hQuery);
return PLUGIN_CONTINUE;
}
public QueryHandle_newPlayer(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime) {
if(iFailState != TQUERY_SUCCESS) {
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
return PLUGIN_HANDLED;
}
new task_data[2];
task_data[0] = SQL_GetInsertId(hQuery);
task_data[1] = cData[0];
set_task(1.0, "sql_check_reg", TASK_CHECK_SQL_PLAYER + cData[0], task_data, 2);
SQL_FreeHandle(hQuery);
return PLUGIN_CONTINUE;
}
public sql_check_reg(args[]) {
new id = args[1];
new inserted_id = args[0];
if(0 > id || id > get_maxplayers()) {
log_amx("Invalid id (%d) in sql_check_reg()", id);
return PLUGIN_HANDLED;
}
else {
if(inserted_id > 0) {
new tmp_str[12];
new Trie:JumpData;
JumpData = TrieCreate();
g_sql_pid[id] = inserted_id;
num_to_str(inserted_id, tmp_str, 11);
TrieSetCell(JumpPlayers, tmp_str, JumpData);
}
else {
log_amx("Bug? %s sql_id is %d; Retrying.", g_playername[id], inserted_id);
player_load_info(id);
}
}
return PLUGIN_HANDLED;
}
public PlayerSaveData_to_SQL(id, cData[]) {
new jt_str[65], Trie:JS, tmp_str[12], distance, query[512], wpn[33], type[33];
num_to_str(g_sql_pid[id], tmp_str, 11);
if(cData[8]) {
get_weaponname(cData[8], wpn, 32);
replace(wpn, 32, "weapon_", "");
}
else
formatex(wpn, 32, "Unknow");
formatex(type,32,"%s",Type_List[cData[6]]);
formatex(jt_str,64,"%s_%s_%d",tmp_str,Type_List[cData[6]],cData[7]);
if(TrieKeyExists(JumpPlayers, jt_str)) { // player is in trie
TrieGetCell(JumpPlayers, jt_str, JS);
if(TrieKeyExists(JS, "distance")) { // get distance
TrieGetCell(JS, "distance", distance);
if(distance < cData[0]) { // jumpdist > old jumpdist, updating
formatex(query, 511, "UPDATE uq_jumps%s SET distance=%d,maxspeed=%d,prestrafe=%d,strafes=%d,sync=%d,ddbh=%d,pspeed=%d,wpn='%s' WHERE pid=%d AND type LIKE '%s' AND pspeed=%d", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", cData[0], cData[1], cData[2], cData[3], cData[4], cData[5], cData[7], wpn, g_sql_pid[id], type, cData[7]);
SQL_ThreadQuery(DB_TUPLE,"QueryHandle", query);
TrieSetString(JS, "type", type);
TrieSetCell(JS, "distance", cData[0]);
TrieSetCell(JS, "maxspeed", cData[1]);
TrieSetCell(JS, "prestrafe", cData[2]);
TrieSetCell(JS, "strafes", cData[3]);
TrieSetCell(JS, "sync", cData[4]);
TrieSetCell(JS, "ddbh", cData[5]);
TrieSetCell(JS, "pspeed", cData[7]);
TrieSetString(JS, "wpn", wpn);
TrieSetCell(JumpPlayers, jt_str, JS);
}
}
else
log_amx("WTF?!");
}
else { // new jumptype to player, insert
formatex(query, 511, "INSERT INTO uq_jumps%s(pid,type,distance,maxspeed,prestrafe,strafes,sync,ddbh,pspeed,wpn) VALUES(%d,'%s',%d,%d,%d,%d,%d,%d,%d,'%s')", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", g_sql_pid[id], type, cData[0], cData[1], cData[2], cData[3], cData[4], cData[5], cData[7], wpn);
new Trie:JumpStat;
JumpStat = TrieCreate();
SQL_ThreadQuery(DB_TUPLE,"QueryHandle", query);
TrieSetString(JumpStat, "type", type);
TrieSetCell(JumpStat, "distance", cData[0]);
TrieSetCell(JumpStat, "maxspeed", cData[1]);
TrieSetCell(JumpStat, "prestrafe", cData[2]);
TrieSetCell(JumpStat, "strafes", cData[3]);
TrieSetCell(JumpStat, "sync", cData[4]);
TrieSetCell(JumpStat, "ddbh", cData[5]);
TrieSetCell(JumpStat, "pspeed", cData[7]);
TrieSetString(JumpStat, "wpn", wpn);
TrieSetCell(JumpPlayers, jt_str, JumpStat);
}
}
public PlayerSaveData_to_SQL_block(id, cData[]) {
new block,jt_str[65], Trie:JS, tmp_str[12], distance, query[512], wpn[33], type[33];
num_to_str(g_sql_pid[id], tmp_str, 11);
if(cData[5]) {
get_weaponname(cData[5], wpn, 32);
replace(wpn, 32, "weapon_", "");
}
else
formatex(wpn, 32, "Unknown");
if(cData[3] == 6) {
formatex(type, 32, "hj");
formatex(jt_str, 64, "block_%s_hj_%d", tmp_str, cData[4]);
}
else {
formatex(type, 32, "%s", Type_List[cData[3]]);
formatex(jt_str, 64, "block_%s_%s_%d", tmp_str, Type_List[cData[3]], cData[4]);
}
if(TrieKeyExists(JumpPlayers, jt_str)) { // player is in trie
TrieGetCell(JumpPlayers, jt_str, JS);
if(TrieKeyExists(JS, "block")) { // get block
TrieGetCell(JS, "block", block);
if(block <= cData[2]) { // block >= oldblock
if(TrieKeyExists(JS, "distance")) { // get distance
TrieGetCell(JS, "distance", distance);
if((distance < cData[0] && block==cData[2]) || (block<cData[2])) { // jumpdist > old jumpdist if block=oldblock or update if block<oldblock, updating
formatex(query, 511, "UPDATE uq_block_tops%s SET distance=%d,jumpoff=%d,block=%d,pspeed=%d,wpn='%s' WHERE pid=%d AND type LIKE '%s' AND pspeed=%d", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", cData[0], cData[1], cData[2], cData[4], wpn, g_sql_pid[id], type, cData[4]);
SQL_ThreadQuery(DB_TUPLE,"QueryHandle", query);
TrieSetString(JS, "type", type);
TrieSetCell(JS, "distance", cData[0]);
TrieSetCell(JS, "jumpoff", cData[1]);
TrieSetCell(JS, "block", cData[2]);
TrieSetCell(JS, "pspeed", cData[4]);
TrieSetString(JS, "wpn", wpn);
TrieSetCell(JumpPlayers, jt_str, JS);
}
}
else
log_amx("WTF?!");
}
}
else
log_amx("WTF?!");
}
else { // new jumptype to player, insert
formatex(query, 511, "INSERT INTO uq_block_tops%s(pid,type,distance,jumpoff,block,pspeed,wpn) VALUES(%d,'%s',%d,%d,%d,%d,'%s')", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", g_sql_pid[id], type, cData[0], cData[1], cData[2], cData[4], wpn);
new Trie:JumpStat;
JumpStat = TrieCreate();
SQL_ThreadQuery(DB_TUPLE,"QueryHandle", query);
TrieSetString(JumpStat, "type", type);
TrieSetCell(JumpStat, "distance", cData[0]);
TrieSetCell(JumpStat, "jumpoff", cData[1]);
TrieSetCell(JumpStat, "block", cData[2]);
TrieSetCell(JumpStat, "pspeed", cData[4]);
TrieSetString(JumpStat, "wpn", wpn);
TrieSetCell(JumpPlayers, jt_str, JumpStat);
}
}