Advertisement
Guest User

Untitled

a guest
May 26th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.50 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <hamsandwich>
  3. #include <fakemeta>
  4. #include <sqlx>
  5. #include <ttt>
  6.  
  7. #define m_bitsDamageType 76
  8.  
  9. new Handle:g_pSqlTuple, pluginon;
  10. new g_szError[512], g_szUserIP[33][20];
  11. new g_iWarnings[33][3], g_iUserBanned[33], g_iUserPunish[33]; // 0 = special, 1 = innocent, 2 = continued
  12. new cvar_ar_warnings_innocent, cvar_ar_warnings_special, cvar_ar_warnings_punish, cvar_ar_warnings_bantime,
  13. cvar_ar_on, cvar_ar_warnings_continued, cvar_ar_warnings_players;
  14.  
  15. public plugin_init()
  16. {
  17. register_plugin("[TTT] AntiRetry & Warning system", TTT_VERSION, TTT_AUTHOR);
  18.  
  19. cvar_ar_on = register_cvar("ttt_ar_on", "1");
  20. cvar_ar_warnings_special = register_cvar("ttt_ar_warnings_special", "3");
  21. cvar_ar_warnings_innocent = register_cvar("ttt_ar_warnings_innocent", "5");
  22. cvar_ar_warnings_continued = register_cvar("ttt_ar_warnings_continued", "3");
  23. cvar_ar_warnings_punish = register_cvar("ttt_ar_warnings_punish", "3");
  24. cvar_ar_warnings_bantime = register_cvar("ttt_ar_warnings_bantime", "60");
  25. cvar_ar_warnings_players = register_cvar("ttt_ar_warnings_players", "5");
  26.  
  27. register_clcmd("say /tttwarns", "check_warnings");
  28. register_clcmd("say_team /tttwarns", "check_warnings");
  29.  
  30. RegisterHam(Ham_Killed, "player", "Ham_Killed_post", 1);
  31. RegisterHam(Ham_Spawn, "player", "Ham_Spawn_pre", 0);
  32.  
  33. pluginon = get_pcvar_num(cvar_ar_on);
  34. }
  35.  
  36. public plugin_cfg()
  37. set_task(1.0, "check_plugin");
  38.  
  39. public check_plugin()
  40. {
  41. pluginon = get_pcvar_num(cvar_ar_on);
  42. if(pluginon)
  43. MySQL_Init();
  44. }
  45.  
  46. public plugin_end()
  47. {
  48. if(pluginon)
  49. {
  50. table_clear();
  51. SQL_FreeHandle(g_pSqlTuple);
  52. }
  53. }
  54.  
  55. public client_putinserver(id)
  56. {
  57. if(pluginon)
  58. {
  59. reset_client(id);
  60. get_user_ip(id, g_szUserIP[id], charsmax(g_szUserIP[]), 1);
  61. MySQL_Load(id);
  62. }
  63. }
  64.  
  65. public client_disconnect(id)
  66. {
  67. if(pluginon)
  68. {
  69. MySQL_Save(id);
  70. reset_client(id);
  71. }
  72. }
  73.  
  74. public ttt_gamemode(gamemode)
  75. {
  76. if(gamemode == RESTARTING && pluginon)
  77. {
  78. table_clear();
  79. new num, id;
  80. static players[32];
  81. get_players(players, num);
  82. for(--num; num >= 0; num--)
  83. {
  84. id = players[num];
  85. table_insert(id);
  86. }
  87. }
  88. }
  89.  
  90. public Ham_Spawn_pre(id)
  91. {
  92. if(pluginon)
  93. {
  94. if(g_iUserPunish[id])
  95. {
  96. ttt_set_playerdata(id, PD_KARMA, 1);
  97. ttt_set_playerdata(id, PD_KARMATEMP, 1);
  98. ColorChat(id, NORMAL, "%s %L", TTT_TAG, id, "TTT_PUNISHMENT1");
  99. reset_client(id);
  100. }
  101.  
  102. check_warnings(id);
  103. }
  104. }
  105.  
  106. public Ham_Killed_post(victim, killer, shouldgib)
  107. {
  108. if(!is_user_alive(killer) || ttt_return_check(victim)|| ttt_get_ds_kill(victim) || killer == victim
  109. || (get_pdata_int(victim, m_bitsDamageType, 5) & DMG_BLAST) || !pluginon)
  110. return HAM_IGNORED;
  111.  
  112. new state_killer = ttt_get_special_state(killer), state_victim = ttt_get_playerdata(victim, PD_KILLEDSTATE);
  113. if(state_killer == TRAITOR && state_victim == TRAITOR)
  114. add_warnings(killer, state_killer, state_victim, 0);
  115. else if((state_killer == DETECTIVE && state_victim == DETECTIVE) || (state_killer == INNOCENT && state_victim == DETECTIVE))
  116. add_warnings(killer, state_killer, state_victim, 0);
  117. else if((state_killer == INNOCENT && state_victim == INNOCENT) || (state_killer == DETECTIVE && state_victim == INNOCENT))
  118. add_warnings(killer, state_killer, state_victim, 1);
  119. else g_iWarnings[killer][2] = 0;
  120.  
  121. return HAM_HANDLED;
  122. }
  123.  
  124. public MySQL_Init()
  125. {
  126. static host[64], user[33], pass[32], db[32];
  127. get_cvar_string("amx_sql_host", host, charsmax(host));
  128. get_cvar_string("amx_sql_user", user, charsmax(user));
  129. get_cvar_string("amx_sql_pass", pass, charsmax(pass));
  130. get_cvar_string("amx_sql_db", db, charsmax(db));
  131.  
  132. g_pSqlTuple = SQL_MakeDbTuple(host, user, pass, db);
  133.  
  134. new errorCode, Handle:SqlConnection = SQL_Connect(g_pSqlTuple, errorCode, g_szError, charsmax(g_szError));
  135. if(SqlConnection == Empty_Handle)
  136. set_fail_state(g_szError);
  137.  
  138. 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))");
  139.  
  140. if(!SQL_Execute(queries))
  141. {
  142. SQL_QueryError(queries, g_szError, charsmax(g_szError));
  143. set_fail_state(g_szError);
  144. }
  145.  
  146. SQL_FreeHandle(queries);
  147. SQL_FreeHandle(SqlConnection);
  148. }
  149.  
  150. public MySQL_Load(id)
  151. {
  152. if(!is_user_connected(id))
  153. return;
  154.  
  155. static data[2];
  156. data[0] = id;
  157.  
  158. static temp[512];
  159. format(temp, charsmax(temp), "SELECT * FROM ttt_antiretry WHERE ip = '%s'", g_szUserIP[id]);
  160. SQL_ThreadQuery(g_pSqlTuple, "register_client", temp, data, 1);
  161. }
  162.  
  163. public MySQL_Save(id)
  164. {
  165. if(!is_user_connected(id))
  166. return;
  167.  
  168. static temp[512];
  169. if(g_iUserBanned[id])
  170. format(temp, charsmax(temp), "UPDATE ttt_antiretry SET karma = '500', warnings_s = '0', warnings_i = '0', punish = '0' WHERE ip = '%s'", g_szUserIP[id]);
  171. 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]);
  172.  
  173. SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
  174. }
  175.  
  176. public register_client(failstate, Handle:query, error[], errcode, data[], datasize)
  177. {
  178. if(failstate == TQUERY_CONNECT_FAILED)
  179. log_amx("%s Load - Could not connect to SQL database. [%d] %s", TTT_TAG, errcode, error);
  180. else if(failstate == TQUERY_QUERY_FAILED)
  181. log_amx("%s Load query failed. [%d] %s", TTT_TAG, errcode, error);
  182.  
  183. new id = data[0];
  184. if(!is_user_connected(id))
  185. return PLUGIN_HANDLED;
  186.  
  187. if(SQL_NumResults(query) > 0)
  188. {
  189. new karma = SQL_ReadResult(query, 2);
  190. new warnings_s = SQL_ReadResult(query, 3);
  191. new warnings_i = SQL_ReadResult(query, 4);
  192. new punish = SQL_ReadResult(query, 4);
  193.  
  194. if(karma > 0)
  195. {
  196. ttt_set_playerdata(id, PD_KARMATEMP, karma);
  197. ttt_set_playerdata(id, PD_KARMA, karma);
  198. }
  199.  
  200. if(warnings_s > 0)
  201. g_iWarnings[id][0] = warnings_s;
  202. if(warnings_i > 0)
  203. g_iWarnings[id][1] = warnings_i;
  204. if(punish > 0)
  205. g_iUserPunish[id] = true;
  206. }
  207. else table_insert(id);
  208.  
  209. return PLUGIN_HANDLED;
  210. }
  211.  
  212. public IgnoreHandle(failstate, Handle:query, error[], errcode, data[], datasize)
  213. {
  214. SQL_FreeHandle(query);
  215. return PLUGIN_HANDLED;
  216. }
  217.  
  218. public add_warnings(killer, state_killer, state_victim, type)
  219. {
  220. new num;
  221. static players[32];
  222. get_players(players, num);
  223.  
  224. if(num-1 < get_pcvar_num(cvar_ar_warnings_players))
  225. return;
  226.  
  227. if(type)
  228. g_iWarnings[killer][1]++;
  229. else g_iWarnings[killer][0]++;
  230. g_iWarnings[killer][2]++;
  231.  
  232. ttt_set_player_stat(killer, STATS_RDM, ttt_get_player_stat(killer, STATS_RDM)+1);
  233. 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);
  234.  
  235. if(g_iWarnings[killer][0] >= special || g_iWarnings[killer][1] >= innocent || g_iWarnings[killer][2] >= continued)
  236. {
  237. switch(get_pcvar_num(cvar_ar_warnings_punish))
  238. {
  239. case 1: server_cmd("kick #%d ^"You have been kicked from server for killing teammates!^"", get_user_userid(killer));
  240. case 2:
  241. {
  242. static reason[20];
  243. if(g_iWarnings[killer][0] >= special)
  244. formatex(reason, charsmax(reason), "SPECIAL %d/%d", g_iWarnings[killer][0], g_iWarnings[killer][0]);
  245. else if(g_iWarnings[killer][1] >= innocent)
  246. formatex(reason, charsmax(reason), "INNOCENT %d/%d", g_iWarnings[killer][1], g_iWarnings[killer][1]);
  247. else if(g_iWarnings[killer][2] >= continued)
  248. formatex(reason, charsmax(reason), "CONTINUED %d/%d", g_iWarnings[killer][2], g_iWarnings[killer][2]);
  249.  
  250. server_cmd("amx_banip %d #%d TK:%s", get_pcvar_num(cvar_ar_warnings_bantime), get_user_userid(killer), reason);
  251. g_iUserBanned[killer] = true;
  252. }
  253. case 3: g_iUserPunish[killer] = true;
  254. default: return;
  255. }
  256. }
  257. else if(type == 0)
  258. {
  259. ColorChat(killer, NORMAL, "%s %L", TTT_TAG, killer, "TTT_WARNING1", killer, special_names[state_killer], killer, special_names[state_victim]);
  260. check_warnings(killer);
  261. }
  262. }
  263.  
  264. public check_warnings(id)
  265. {
  266. if(ttt_get_special_state(id) != INNOCENT && pluginon)
  267. {
  268. 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);
  269. 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);
  270. }
  271. }
  272.  
  273. stock reset_client(id)
  274. {
  275. g_iWarnings[id][0] = false;
  276. g_iWarnings[id][1] = false;
  277. g_iWarnings[id][2] = false;
  278. g_iUserPunish[id] = false;
  279. g_iUserBanned[id] = false;
  280. }
  281.  
  282. stock table_clear()
  283. {
  284. static temp[512];
  285. format(temp, charsmax(temp), "TRUNCATE TABLE ttt_antiretry");
  286. SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
  287. }
  288.  
  289. stock table_insert(id)
  290. {
  291. static temp[512];
  292. 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]);
  293. SQL_ThreadQuery(g_pSqlTuple, "IgnoreHandle", temp);
  294. }
  295.  
  296. stock escape_mysql(string[], len)
  297. {
  298. replace_all(string, len, "\\", "\\\\");
  299. replace_all(string, len, "\0", "\\0");
  300. replace_all(string, len, "\n", "\\n");
  301. replace_all(string, len, "\r", "\\r");
  302. replace_all(string, len, "\x1a", "\Z");
  303. replace_all(string, len, "'", "\'");
  304. replace_all(string, len, "^"", "\^"");
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement