F1N4L_

Sistema de Ban temporário - SQLite

Mar 29th, 2016
533
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.41 KB | None | 0 0
  1. /* ______________________________________
  2. |___FILTERSCRIPT_TK_TEMP_BAN_SYSTEM__|
  3. |______________BY_F1N4L______________|
  4. |_______Initialized_29_03_2016_______|
  5. |_________Updated_30_03_2016_________|
  6. |___________v_0.3z__v.2.0____________|
  7.  
  8. STOCKS:
  9. BanirPlayer(Nome[], IP[], Banido_Por[], Data[], Motivo[], GetTime, Tempo[])
  10. BanirIpPlayer(Nome[], IP[], Banido_Por[], Data[], Motivo[], GetTime, Tempo[])
  11. DesbanirPlayer(Conta[])
  12. */
  13.  
  14. #include a_samp // By SA:MP Team
  15. #include sscanf2 // By Y_Less
  16. #include zcmd // By Zeex
  17.  
  18. #define BAN_TABLE "BANIMENTOS"
  19. #define BAN_DB "Bans.db"
  20.  
  21. #define DIALOG_BAN 222
  22.  
  23. new
  24. DB:Ban_Database
  25. ;
  26.  
  27. public OnFilterScriptInit()
  28. {
  29. new
  30. BAN_STR[500]
  31. ;
  32.  
  33. Ban_Database = db_open(BAN_DB);
  34. strcat(BAN_STR, "CREATE TABLE IF NOT EXISTS `"BAN_TABLE"` (");
  35. strcat(BAN_STR, "`ID` INTEGER PRIMARY KEY AUTOINCREMENT,");
  36. strcat(BAN_STR, "`NOME` TEXT DEFAULT 'N/A',");
  37. strcat(BAN_STR, "`IP` TEXT DEFAULT '0.0.0.0',");
  38. strcat(BAN_STR, "`BANIDO POR` TEXT DEFAULT 'N/A',");
  39. strcat(BAN_STR, "`DATA` TEXT DEFAULT 'N/A',");
  40. strcat(BAN_STR, "`MOTIVO` TEXT DEFAULT 'N/A',");
  41. strcat(BAN_STR, "`GETTIME` NUMERIC DEFAULT '0',");
  42. strcat(BAN_STR, "`TEMPO` TEXT DEFAULT 'N/A')");
  43. db_free_result(db_query(Ban_Database, BAN_STR));
  44.  
  45. return 1;
  46. }
  47.  
  48. public OnFilterScriptExit()
  49. {
  50. db_close(Ban_Database);
  51. return 1;
  52. }
  53.  
  54. public OnPlayerConnect(playerid)
  55. {
  56. new
  57. String[350],
  58. Strcat[500],
  59. GetTime,
  60. GetIp[30],
  61. DBResult:Resultado
  62. ;
  63.  
  64. format(String,sizeof(String),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", GetIP(playerid), GetName(playerid));
  65. Resultado = db_query(Ban_Database,String);
  66. if(db_num_rows(Resultado))
  67. {
  68. db_get_field_assoc(Resultado, "GETTIME", String, 40);
  69. GetTime = strval(String);
  70. if(GetTime > gettime())
  71. {
  72. format(String,sizeof(String), "NOME: %s\n", GetName(playerid));strcat(Strcat, String);
  73. db_get_field_assoc(Resultado, "IP", GetIp, 30);
  74. format(String,sizeof(String), "IP: %s\n", GetIp);strcat(Strcat, String);
  75. db_get_field_assoc(Resultado, "BANIDO POR", String, 30);
  76. format(String,sizeof(String), "BANIDO POR: %s\n", String);strcat(Strcat, String);
  77. db_get_field_assoc(Resultado, "MOTIVO", String, 40);
  78. format(String,sizeof(String), "MOTIVO: %s\n", String);strcat(Strcat, String);
  79. db_get_field_assoc(Resultado, "DATA", String, 40);
  80. format(String,sizeof(String), "DATA: %s\n", String);strcat(Strcat, String);
  81. db_get_field_assoc(Resultado, "TEMPO", String, 50);
  82. format(String,sizeof(String), "TEMPO: %s\n", String);strcat(Strcat, String);
  83. format(String,sizeof(String), "TEMPO RESTANTE: %s", ConvertTime(GetTime - gettime()));strcat(Strcat, String);
  84. ShowPlayerDialog(playerid, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", Strcat, "SAIR","");
  85.  
  86. SetTimerEx("Kickar", 500, false, "i", playerid);
  87. }
  88. else if(GetTime < gettime())
  89. {
  90. format(String,sizeof(String),"DELETE FROM `"BAN_TABLE"` WHERE `NOME` = '%s'", GetName(playerid));
  91. Resultado = db_query(Ban_Database,String);
  92.  
  93. SendClientMessage(playerid, 0xFF0000FF, "Sua conta foi desbanida.");
  94. }
  95. }
  96. db_free_result(db_query(Ban_Database, String));
  97.  
  98. return 1;
  99. }
  100.  
  101. public OnPlayerSpawn(playerid)
  102. {
  103. return 1;
  104. }
  105.  
  106. CMD:ban(playerid, params[])
  107. {
  108. new
  109. TARGET,
  110. MOTIVO[30],
  111. DATA[50],
  112. STRING[300],
  113. Data[3],
  114. Hora[3],
  115. GetTime,
  116. TEMPO
  117. ;
  118.  
  119. if(!IsPlayerAdmin(playerid))
  120. return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
  121.  
  122. if(sscanf(params, "us[30]s[300]i", TARGET, MOTIVO, STRING, TEMPO))
  123. return SendClientMessage(playerid, -1, "/BAN [ID] [MOTIVO] [DIAS ou HORAS ou MINUTOS] [TEMPO]");
  124.  
  125. if(strlen(MOTIVO) < 3 || strlen(MOTIVO) > 30)
  126. return SendClientMessage(playerid, -1, "Motivo inválido. Utilize entre 3 - 30 caracteres.");
  127.  
  128. if(TEMPO < 1 || TEMPO > 1000)
  129. return SendClientMessage(playerid, -1, "Tempo inválido. Utilize entre 1 - 1000 minutos/horas/dias.");
  130.  
  131. if(!IsPlayerConnected(TARGET))
  132. return SendClientMessage(playerid, -1, "Player não está conectado.");
  133.  
  134. getdate(Data[0], Data[1], Data[2]);
  135. gettime(Hora[0], Hora[1], Hora[2]);
  136.  
  137. format(DATA, sizeof(DATA), "%02i/%02i/%02i | %02i:%02i:%02i", Data[2], Data[1], Data[0], Hora[0], Hora[1], Hora[2]);
  138.  
  139. if(strcmp(STRING, "DIAS", true) == 0)
  140. GetTime = TEMPO * 24 * 60 * 60,
  141. BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  142. db_free_result(db_query(Ban_Database, STRING));
  143. else if(strcmp(STRING, "HORAS", true) == 0)
  144. GetTime = TEMPO * 60 * 60,
  145. BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  146. db_free_result(db_query(Ban_Database, STRING));
  147. else if(strcmp(STRING, "MINUTOS", true) == 0)
  148. GetTime = TEMPO * 60,
  149. BanirPlayer(GetName(TARGET), GetIP(TARGET), GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  150. db_free_result(db_query(Ban_Database, STRING));
  151. else return SendClientMessage(playerid, -1, "/BAN [ID] [MOTIVO] [DIAS ou HORAS ou MINUTOS] [TEMPO]");
  152.  
  153. format(STRING,sizeof(STRING), "Admin '%s' baniu temporariamente o jogador '%s [ID: %i]'. Motivo: '%s'. TEMPO: '%s'", GetName(playerid), GetName(TARGET), TARGET, MOTIVO, ConvertTime(GetTime));
  154. SendClientMessageToAll(-1, STRING);
  155.  
  156. return 1;
  157. }
  158.  
  159. CMD:banip(playerid, params[])
  160. {
  161. new
  162. IP[30],
  163. MOTIVO[30],
  164. DATA[50],
  165. STRING[300],
  166. Data[3],
  167. Hora[3],
  168. GetTime,
  169. TEMPO
  170. ;
  171.  
  172. if(!IsPlayerAdmin(playerid))
  173. return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
  174.  
  175. if(sscanf(params, "s[30]s[30]s[300]i", IP, MOTIVO, STRING, TEMPO))
  176. return SendClientMessage(playerid, -1, "/BANIP [IP] [MOTIVO] [DIAS ou HORAS ou MINUTOS] [TEMPO]");
  177.  
  178. if(strlen(MOTIVO) < 3 || strlen(MOTIVO) > 30)
  179. return SendClientMessage(playerid, -1, "Motivo inválido. Utilize entre 3 - 30 caracteres.");
  180.  
  181. if(strlen(IP) < 1 || strlen(IP) > 30)
  182. return SendClientMessage(playerid, -1, "Tamanho de IP inválido.");
  183.  
  184. if(TEMPO < 1 || TEMPO > 1000)
  185. return SendClientMessage(playerid, -1, "Tempo inválido. Utilize entre 1 - 1000 minutos/horas/dias.");
  186.  
  187. getdate(Data[0], Data[1], Data[2]);
  188. gettime(Hora[0], Hora[1], Hora[2]);
  189.  
  190. format(DATA, sizeof(DATA), "%02i/%02i/%02i | %02i:%02i:%02i", Data[2], Data[1], Data[0], Hora[0], Hora[1], Hora[2]);
  191.  
  192. if(strcmp(STRING, "DIAS", true) == 0)
  193. GetTime = TEMPO * 24 * 60 * 60,
  194. BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  195. db_free_result(db_query(Ban_Database, STRING));
  196. else if(strcmp(STRING, "HORAS", true) == 0)
  197. GetTime = TEMPO * 60 * 60,
  198. BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  199. db_free_result(db_query(Ban_Database, STRING));
  200. else if(strcmp(STRING, "MINUTOS", true) == 0)
  201. GetTime = TEMPO * 60,
  202. BanirIpPlayer("N/A", IP, GetName(playerid), DATA, MOTIVO, GetTime, ConvertTime(GetTime)),
  203. db_free_result(db_query(Ban_Database, STRING));
  204. else return SendClientMessage(playerid, -1, "/BAN [ID] [MOTIVO] [DIAS ou HORAS ou MINUTOS] [TEMPO]");
  205.  
  206. format(STRING,sizeof(STRING), "Admin '%s' baniu temporariamente o IP '%s'. Motivo: '%s'. TEMPO: '%s'", GetName(playerid), IP, MOTIVO, ConvertTime(GetTime));
  207. SendClientMessageToAll(-1, STRING);
  208.  
  209. return 1;
  210. }
  211.  
  212. CMD:desban(playerid, params[])
  213. {
  214. new
  215. DESBAN[30],
  216. CONTA[30],
  217. STRING[200],
  218. DBResult:Resultado
  219. ;
  220.  
  221. if(!IsPlayerAdmin(playerid))
  222. return SendClientMessage(playerid, -1, "Você precisa ser Admin RCON para realizar esta ação.");
  223.  
  224. if(sscanf(params, "s[30]s[30]", DESBAN, CONTA))
  225. return SendClientMessage(playerid, -1, "/DESBAN IP [IP] | /DESBAN NOME [NOME]");
  226.  
  227. if(strcmp(DESBAN, "IP", true) == 0)
  228. {
  229. format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s'", CONTA);
  230. Resultado = db_query(Ban_Database, STRING);
  231. if(db_num_rows(Resultado))
  232. DesbanirPlayer(CONTA),
  233. SendClientMessage(playerid, -1, "Conta desbanida com sucesso.");
  234. else return SendClientMessage(playerid, -1, "Conta inexistente no Banco de Dados.");
  235. }
  236. else if(strcmp(DESBAN, "NOME", true) == 0)
  237. {
  238. format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `NOME` = '%s' COLLATE NOCASE", CONTA);
  239. Resultado = db_query(Ban_Database, STRING);
  240. if(db_num_rows(Resultado))
  241. DesbanirPlayer(CONTA),
  242. SendClientMessage(playerid, -1, "Conta desbanida com sucesso.");
  243. else return SendClientMessage(playerid, -1, "Conta inexistente no Banco de Dados.");
  244. }
  245. db_free_result(db_query(Ban_Database, STRING));
  246.  
  247. return 1;
  248. }
  249.  
  250. stock BanirPlayer(xNome[], xIP[], xBanido_Por[], xData[], xMotivo[], xGetTime, xTempo[])
  251. {
  252. new
  253. STRING[500],
  254. STRCAT[300],
  255. DBResult:Resultado
  256. ;
  257.  
  258. format(STRING,sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `NOME` = '%s' COLLATE NOCASE", xNome);
  259. Resultado = db_query(Ban_Database,STRING);
  260. if(!db_num_rows(Resultado))
  261. format(STRING, sizeof(STRING), "INSERT INTO `"BAN_TABLE"` (`NOME`, `IP`, `BANIDO POR`, `DATA`, `MOTIVO`, `GETTIME`, `TEMPO`)VALUES('%s', '%s', '%s', '%s', '%s', '%i', '%s')", xNome, xIP, xBanido_Por, xData, xMotivo, xGetTime + gettime(), xTempo);
  262. db_free_result(db_query(Ban_Database, STRING));
  263.  
  264. for(new i = 0; i < MAX_PLAYERS; i++)
  265. {
  266. if(strcmp(GetName(i), xNome, false) == 0)
  267. {
  268. format(STRING, sizeof(STRING), "NOME: %s\n", xNome);strcat(STRCAT, STRING);
  269. format(STRING, sizeof(STRING), "IP: %s\n", xIP);strcat(STRCAT, STRING);
  270. format(STRING, sizeof(STRING), "BANIDO POR: %s\n", xBanido_Por);strcat(STRCAT, STRING);
  271. format(STRING, sizeof(STRING), "MOTIVO: %s\n", xMotivo);strcat(STRCAT, STRING);
  272. format(STRING, sizeof(STRING), "DATA: %s\n", xData);strcat(STRCAT, STRING);
  273. format(STRING, sizeof(STRING), "TEMPO: %s\n", ConvertTime(xGetTime));strcat(STRCAT, STRING);
  274. format(STRING, sizeof(STRING), "TEMPO RESTANTE: %s", ConvertTime(xGetTime));strcat(STRCAT, STRING);
  275. ShowPlayerDialog(i, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", STRCAT, "SAIR","");
  276.  
  277. SetTimerEx("Kickar", 500, false, "i", i);
  278. }
  279. }
  280.  
  281. return 1;
  282. }
  283.  
  284. stock BanirIpPlayer(xNome[], xIP[], xBanido_Por[], xData[], xMotivo[], xGetTime, xTempo[])
  285. {
  286. new
  287. STRING[500],
  288. STRCAT[300],
  289. DBResult:Resultado
  290. ;
  291.  
  292. format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s'", xIP);
  293. Resultado = db_query(Ban_Database, STRING);
  294. if(db_num_rows(Resultado))
  295. format(STRING, sizeof(STRING), "UPDATE `"BAN_TABLE"` SET `DATA` = '%s', `MOTIVO` = '%s', `GETTIME` = '%i', `TEMPO` = '%s' WHERE `IP` = '%s'", xData, xMotivo, xGetTime + gettime(), xTempo, xIP);
  296. else
  297. format(STRING, sizeof(STRING), "INSERT INTO `"BAN_TABLE"` (`NOME`, `IP`, `BANIDO POR`, `DATA`, `MOTIVO`, `GETTIME`, `TEMPO`)VALUES('%s', '%s', '%s', '%s', '%s', '%i', '%s')", xNome, xIP, xBanido_Por, xData, xMotivo, xGetTime + gettime(), xTempo);
  298. db_free_result(db_query(Ban_Database, STRING));
  299.  
  300. for(new i = 0; i < MAX_PLAYERS; i++)
  301. {
  302. if(strcmp(GetIP(i), xIP, true) == 0)
  303. {
  304. format(STRING, sizeof(STRING), "NOME: %s\n", GetName(i));strcat(STRCAT, STRING);
  305. format(STRING, sizeof(STRING), "IP: %s\n", xIP);strcat(STRCAT, STRING);
  306. format(STRING, sizeof(STRING), "BANIDO POR: %s\n", xBanido_Por);strcat(STRCAT, STRING);
  307. format(STRING, sizeof(STRING), "MOTIVO: %s\n", xMotivo);strcat(STRCAT, STRING);
  308. format(STRING, sizeof(STRING), "DATA: %s\n", xData);strcat(STRCAT, STRING);
  309. format(STRING, sizeof(STRING), "TEMPO: %s\n", ConvertTime(xGetTime));strcat(STRCAT, STRING);
  310. format(STRING, sizeof(STRING), "TEMPO RESTANTE: %s", ConvertTime(xGetTime));strcat(STRCAT, STRING);
  311. ShowPlayerDialog(i, DIALOG_BAN, DIALOG_STYLE_MSGBOX, "Painel de Banimento:", STRCAT, "SAIR","");
  312.  
  313. SetTimerEx("Kickar", 500, false, "i", i);
  314. }
  315. }
  316.  
  317. return 1;
  318. }
  319.  
  320. stock DesbanirPlayer(xConta[])
  321. {
  322. new
  323. STRING[500],
  324. DBResult:Resultado
  325. ;
  326.  
  327. format(STRING, sizeof(STRING),"SELECT * FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", xConta, xConta);
  328. Resultado = db_query(Ban_Database, STRING);
  329. if(db_num_rows(Resultado))
  330. format(STRING, sizeof(STRING), "DELETE FROM `"BAN_TABLE"` WHERE `IP` = '%s' OR `NOME` = '%s' COLLATE NOCASE", xConta, xConta),
  331. db_free_result(db_query(Ban_Database, STRING));
  332.  
  333. return 1;
  334. }
  335.  
  336. forward Kickar(playerid);
  337. public Kickar(playerid)
  338. {
  339. return Kick(playerid);
  340. }
  341.  
  342. stock ConvertTime(SEGUNDOS)
  343. {
  344. new
  345. MINUTOS,
  346. HORAS,
  347. DIAS,
  348. String[200]
  349. ;
  350.  
  351. if(SEGUNDOS > 59)
  352. {
  353. MINUTOS = SEGUNDOS / 60;
  354. SEGUNDOS = SEGUNDOS - MINUTOS * 60;
  355. }
  356. if(MINUTOS > 59)
  357. {
  358. HORAS = MINUTOS / 60;
  359. MINUTOS = MINUTOS - HORAS * 60;
  360. }
  361. if(HORAS > 23)
  362. {
  363. DIAS = HORAS / 24;
  364. HORAS = HORAS - DIAS * 24;
  365. }
  366.  
  367. format(String, sizeof(String), "%02d Dias e %02d Horas e %02d Minutos e %02d Segundos", DIAS, HORAS, MINUTOS, SEGUNDOS);
  368. if(DIAS == 0) format(String, sizeof(String),"%02d Horas e %02d Minutos e %02d Segundos", HORAS, MINUTOS, SEGUNDOS);
  369. if(DIAS == 0 && HORAS == 0) format(String, sizeof(String),"%02d Minutos e %02d Segundos", MINUTOS, SEGUNDOS);
  370. if(DIAS == 0 && HORAS == 0 && MINUTOS == 0) format(String, sizeof(String),"%02d Segundos", SEGUNDOS);
  371. return String;
  372. }
  373.  
  374. stock GetName(playerid)
  375. {
  376. new
  377. GetName_[24]
  378. ;
  379.  
  380. GetPlayerName(playerid, GetName_, sizeof(GetName_));
  381.  
  382. return GetName_;
  383. }
  384.  
  385. stock GetIP(playerid)
  386. {
  387. new
  388. GetIP_[30]
  389. ;
  390.  
  391. GetPlayerIp(playerid, GetIP_, sizeof(GetIP_));
  392.  
  393. return GetIP_;
  394. }
Advertisement
Add Comment
Please, Sign In to add comment