Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <hamsandwich>
- #include <fakemeta>
- #include <sqlx>
- #include <ttt>
- #define m_bitsDamageType 76
- new Handle:g_pSqlTuple, pluginon;
- new g_szError[512], g_szUserIP[33][20];
- new g_iWarnings[33][3], g_iUserBanned[33], g_iUserPunish[33]; // 0 = special, 1 = innocent, 2 = continued
- new cvar_ar_warnings_innocent, cvar_ar_warnings_special, cvar_ar_warnings_punish, cvar_ar_warnings_bantime,
- cvar_ar_on, cvar_ar_warnings_continued, cvar_ar_warnings_players;
- public plugin_init()
- {
- register_plugin("[TTT] AntiRetry & Warning system", TTT_VERSION, TTT_AUTHOR);
- cvar_ar_on = register_cvar("ttt_ar_on", "1");
- cvar_ar_warnings_special = register_cvar("ttt_ar_warnings_special", "3");
- cvar_ar_warnings_innocent = register_cvar("ttt_ar_warnings_innocent", "5");
- cvar_ar_warnings_continued = register_cvar("ttt_ar_warnings_continued", "3");
- cvar_ar_warnings_punish = register_cvar("ttt_ar_warnings_punish", "3");
- cvar_ar_warnings_bantime = register_cvar("ttt_ar_warnings_bantime", "60");
- cvar_ar_warnings_players = register_cvar("ttt_ar_warnings_players", "5");
- register_clcmd("say /tttwarns", "check_warnings");
- register_clcmd("say_team /tttwarns", "check_warnings");
- RegisterHam(Ham_Killed, "player", "Ham_Killed_post", 1);
- RegisterHam(Ham_Spawn, "player", "Ham_Spawn_pre", 0);
- pluginon = get_pcvar_num(cvar_ar_on);
- }
- public plugin_cfg()
- set_task(1.0, "check_plugin");
- public check_plugin()
- {
- pluginon = get_pcvar_num(cvar_ar_on);
- if(pluginon)
- MySQL_Init();
- }
- public plugin_end()
- {
- if(pluginon)
- {
- table_clear();
- SQL_FreeHandle(g_pSqlTuple);
- }
- }
- public client_putinserver(id)
- {
- if(pluginon)
- {
- reset_client(id);
- get_user_ip(id, g_szUserIP[id], charsmax(g_szUserIP[]), 1);
- MySQL_Load(id);
- }
- }
- public client_disconnect(id)
- {
- if(pluginon)
- {
- MySQL_Save(id);
- reset_client(id);
- }
- }
- public ttt_gamemode(gamemode)
- {
- if(gamemode == RESTARTING && pluginon)
- {
- table_clear();
- new num, id;
- static players[32];
- get_players(players, num);
- for(--num; num >= 0; num--)
- {
- id = players[num];
- table_insert(id);
- }
- }
- }
- public Ham_Spawn_pre(id)
- {
- if(pluginon)
- {
- if(g_iUserPunish[id])
- {
- ttt_set_playerdata(id, PD_KARMA, 1);
- ttt_set_playerdata(id, PD_KARMATEMP, 1);
- ColorChat(id, NORMAL, "%s %L", TTT_TAG, id, "TTT_PUNISHMENT1");
- reset_client(id);
- }
- check_warnings(id);
- }
- }
- public Ham_Killed_post(victim, killer, shouldgib)
- {
- if(!is_user_alive(killer) || ttt_return_check(victim)|| ttt_get_ds_kill(victim) || killer == victim
- || (get_pdata_int(victim, m_bitsDamageType, 5) & DMG_BLAST) || !pluginon)
- return HAM_IGNORED;
- new state_killer = ttt_get_special_state(killer), state_victim = ttt_get_playerdata(victim, PD_KILLEDSTATE);
- if(state_killer == TRAITOR && state_victim == TRAITOR)
- add_warnings(killer, state_killer, state_victim, 0);
- else if((state_killer == DETECTIVE && state_victim == DETECTIVE) || (state_killer == INNOCENT && state_victim == DETECTIVE))
- add_warnings(killer, state_killer, state_victim, 0);
- else if((state_killer == INNOCENT && state_victim == INNOCENT) || (state_killer == DETECTIVE && state_victim == INNOCENT))
- add_warnings(killer, state_killer, state_victim, 1);
- else g_iWarnings[killer][2] = 0;
- return HAM_HANDLED;
- }
- public MySQL_Init()
- {
- static host[64], user[33], pass[32], db[32];
- get_cvar_string("amx_sql_host", host, charsmax(host));
- get_cvar_string("amx_sql_user", user, charsmax(user));
- get_cvar_string("amx_sql_pass", pass, charsmax(pass));
- get_cvar_string("amx_sql_db", db, charsmax(db));
- g_pSqlTuple = SQL_MakeDbTuple(host, user, pass, db);
- new errorCode, Handle:SqlConnection = SQL_Connect(g_pSqlTuple, errorCode, g_szError, charsmax(g_szError));
- if(SqlConnection == Empty_Handle)
- set_fail_state(g_szError);
- new Handle:queries = SQL_PrepareQuery(SqlConnection, "CREATE TABLE IF NOT EXISTS ttt_antiretry (id int(8) unsigned NOT NULL auto_increment, ip varchar(20) UNIQUE NOT NULL default '', karma int(8), warnings_s int(3), warnings_i int(3), punish int(3), PRIMARY KEY (id))");
- if(!SQL_Execute(queries))
- {
- SQL_QueryError(queries, g_szError, charsmax(g_szError));
- set_fail_state(g_szError);
- }
- SQL_FreeHandle(queries);
- SQL_FreeHandle(SqlConnection);
- }
- public MySQL_Load(id)
- {
- if(!is_user_connected(id))
- return;
- static data[2];
- data[0] = id;
- static temp[512];
- format(temp, charsmax(temp), "SELECT * FROM ttt_antiretry WHERE ip = '%s'", g_szUserIP[id]);
- SQL_ThreadQuery(g_pSqlTuple, "register_client", temp, data, 1);
- }
- public MySQL_Save(id)
- {
- if(!is_user_connected(id))
- return;
- static temp[512];
- if(g_iUserBanned[id])
- format(temp, charsmax(temp), "UPDATE ttt_antiretry SET karma = '500', warnings_s = '0', warnings_i = '0', punish = '0' WHERE ip = '%s'", g_szUserIP[id]);
- else format(temp, charsmax(temp), "UPDATE ttt_antiretry SET karma = '%d', warnings_s = '%d', warnings_i = '%d', punish = '%d' WHERE ip = '%s'", ttt_get_playerdata(id, PD_KARMATEMP), g_iWarnings[id][0], g_iWarnings[id][1], g_iUserPunish[id], g_szUserIP[id]);
- SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
- }
- public register_client(failstate, Handle:query, error[], errcode, data[], datasize)
- {
- if(failstate == TQUERY_CONNECT_FAILED)
- log_amx("%s Load - Could not connect to SQL database. [%d] %s", TTT_TAG, errcode, error);
- else if(failstate == TQUERY_QUERY_FAILED)
- log_amx("%s Load query failed. [%d] %s", TTT_TAG, errcode, error);
- new id = data[0];
- if(!is_user_connected(id))
- return PLUGIN_HANDLED;
- if(SQL_NumResults(query) > 0)
- {
- new karma = SQL_ReadResult(query, 2);
- new warnings_s = SQL_ReadResult(query, 3);
- new warnings_i = SQL_ReadResult(query, 4);
- new punish = SQL_ReadResult(query, 4);
- if(karma > 0)
- {
- ttt_set_playerdata(id, PD_KARMATEMP, karma);
- ttt_set_playerdata(id, PD_KARMA, karma);
- }
- if(warnings_s > 0)
- g_iWarnings[id][0] = warnings_s;
- if(warnings_i > 0)
- g_iWarnings[id][1] = warnings_i;
- if(punish > 0)
- g_iUserPunish[id] = true;
- }
- else table_insert(id);
- return PLUGIN_HANDLED;
- }
- public IgnoreHandle(failstate, Handle:query, error[], errcode, data[], datasize)
- {
- SQL_FreeHandle(query);
- return PLUGIN_HANDLED;
- }
- public add_warnings(killer, state_killer, state_victim, type)
- {
- new num;
- static players[32];
- get_players(players, num);
- if(num-1 < get_pcvar_num(cvar_ar_warnings_players))
- return;
- if(type)
- g_iWarnings[killer][1]++;
- else g_iWarnings[killer][0]++;
- g_iWarnings[killer][2]++;
- ttt_set_player_stat(killer, STATS_RDM, ttt_get_player_stat(killer, STATS_RDM)+1);
- new special = get_pcvar_num(cvar_ar_warnings_special), innocent = get_pcvar_num(cvar_ar_warnings_innocent), continued = get_pcvar_num(cvar_ar_warnings_continued);
- if(g_iWarnings[killer][0] >= special || g_iWarnings[killer][1] >= innocent || g_iWarnings[killer][2] >= continued)
- {
- switch(get_pcvar_num(cvar_ar_warnings_punish))
- {
- case 1: server_cmd("kick #%d ^"You have been kicked from server for killing teammates!^"", get_user_userid(killer));
- case 2:
- {
- static reason[20];
- if(g_iWarnings[killer][0] >= special)
- formatex(reason, charsmax(reason), "SPECIAL %d/%d", g_iWarnings[killer][0], g_iWarnings[killer][0]);
- else if(g_iWarnings[killer][1] >= innocent)
- formatex(reason, charsmax(reason), "INNOCENT %d/%d", g_iWarnings[killer][1], g_iWarnings[killer][1]);
- else if(g_iWarnings[killer][2] >= continued)
- formatex(reason, charsmax(reason), "CONTINUED %d/%d", g_iWarnings[killer][2], g_iWarnings[killer][2]);
- server_cmd("amx_banip %d #%d TK:%s", get_pcvar_num(cvar_ar_warnings_bantime), get_user_userid(killer), reason);
- g_iUserBanned[killer] = true;
- }
- case 3: g_iUserPunish[killer] = true;
- default: return;
- }
- }
- else if(type == 0)
- {
- ColorChat(killer, NORMAL, "%s %L", TTT_TAG, killer, "TTT_WARNING1", killer, special_names[state_killer], killer, special_names[state_victim]);
- check_warnings(killer);
- }
- }
- public check_warnings(id)
- {
- if(ttt_get_special_state(id) != INNOCENT && pluginon)
- {
- new specialKill = get_pcvar_num(cvar_ar_warnings_special), innocentKill = get_pcvar_num(cvar_ar_warnings_innocent), continued = get_pcvar_num(cvar_ar_warnings_continued);
- ColorChat(id, NORMAL, "%s %L", TTT_TAG, id, "TTT_WARNING2", g_iWarnings[id][0], specialKill, id, special_names[SPECIAL], g_iWarnings[id][1], innocentKill, id, special_names[INNOCENT], g_iWarnings[id][2], continued);
- }
- }
- stock reset_client(id)
- {
- g_iWarnings[id][0] = false;
- g_iWarnings[id][1] = false;
- g_iWarnings[id][2] = false;
- g_iUserPunish[id] = false;
- g_iUserBanned[id] = false;
- }
- stock table_clear()
- {
- static temp[512];
- format(temp, charsmax(temp), "TRUNCATE TABLE ttt_antiretry");
- SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
- }
- stock table_insert(id)
- {
- static temp[512];
- format(temp, charsmax(temp), "INSERT INTO ttt_antiretry (ip, karma, warnings_s, warnings_i, punish) VALUES ('%s', '%d', '%d', '%d', '%d');", g_szUserIP[id], ttt_get_playerdata(id, PD_KARMATEMP), g_iWarnings[id][0], g_iWarnings[id][1], g_iUserPunish[id]);
- SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
- }
- stock escape_mysql(string[], len)
- {
- replace_all(string, len, "\\", "\\\\");
- replace_all(string, len, "\0", "\\0");
- replace_all(string, len, "\n", "\\n");
- replace_all(string, len, "\r", "\\r");
- replace_all(string, len, "\x1a", "\Z");
- replace_all(string, len, "'", "\'");
- replace_all(string, len, "^"", "\^"");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement