F1N4L_

[FS] Vip System com Chave de ativação [SQLite]

Sep 11th, 2016
978
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.21 KB | None | 0 0
  1. #include a_samp
  2. #include sscanf2
  3. #include zcmd
  4.  
  5. #define DATABASE "Vip.db"
  6.  
  7. static DB: Database;
  8. new DBResult: Resultado;
  9.  
  10. enum vInfo
  11. {
  12. pLevel,
  13. pKey[11],
  14. pDias,
  15. pGetTime
  16. }
  17. new Vip[MAX_PLAYERS][vInfo];
  18.  
  19. new Str[256], Key[11], gNome[MAX_PLAYER_NAME], GetData[50];
  20.  
  21. public OnFilterScriptInit()
  22. {
  23. SetTimer("VerificarVIP", 5000, true);
  24.  
  25. Database = db_open(DATABASE);
  26.  
  27. db_query(Database, "CREATE TABLE IF NOT EXISTS `VIP` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT, `NOME` TEXT, `LEVEL` INTEGER, `KEY` TEXT, `DIAS` INTEGER, `GETTIME` INTEGER)");
  28. }
  29.  
  30. public OnFilterScriptExit()
  31. {
  32. db_close(Database);
  33.  
  34. return 1;
  35. }
  36.  
  37. public OnPlayerConnect(playerid)
  38. {
  39. GetPlayerName(playerid, gNome, sizeof gNome);
  40.  
  41. format(Str, sizeof Str, "SELECT * FROM `VIP` WHERE `NOME` = '%s'", gNome);
  42. Resultado = db_query(Database, Str);
  43.  
  44. if(db_num_rows(Resultado))
  45. {
  46. db_get_field_assoc(Resultado, "LEVEL", GetData, sizeof GetData);
  47. Vip[playerid][pLevel] = strval(GetData);
  48.  
  49. db_get_field_assoc(Resultado, "KEY", Vip[playerid][pKey], 11);
  50.  
  51. db_get_field_assoc(Resultado, "DIAS", GetData, sizeof GetData);
  52. Vip[playerid][pDias] = strval(GetData);
  53.  
  54. db_get_field_assoc(Resultado, "GETTIME", GetData, sizeof GetData);
  55. Vip[playerid][pGetTime] = strval(GetData);
  56.  
  57. if(gettime() > Vip[playerid][pGetTime])
  58. {
  59. format(Str, sizeof Str, "DELETE FROM `VIP` WHERE `NOME` = '%s'", gNome);
  60. db_query(Database, Str);
  61.  
  62. ResetVipStats(playerid);
  63.  
  64. SendClientMessage(playerid, -1, "Seu VIP acabou! Obrigado por adquirir nosso plano.");
  65. }
  66. else
  67. {
  68. SendClientMessage(playerid, -1, "Você é um jogador VIP! Digite /meuvip para mais detalhes.");
  69. }
  70. }
  71.  
  72. return 1;
  73. }
  74.  
  75. CMD:criarkey(playerid, params[])
  76. {
  77. if(!IsPlayerAdmin(playerid)) return 0;
  78.  
  79. new Time, Level;
  80.  
  81. if(sscanf(params, "s[11]iii", Key, Level, Time)) return SendClientMessage(playerid, -1, "/criarkey [KEY (max 10 dígitos)] [LEVEL] [TEMPO (dias)]");
  82.  
  83. if(Level < 1 || Level > 3) return SendClientMessage(playerid, -1, "Level inválido. Deve ser entre 1 e 3.");
  84.  
  85. if(strlen(Key) > 10) return SendClientMessage(playerid, -1, "Insira no máximo 10 caracteres.");
  86.  
  87. format(Str, sizeof Str, "SELECT `KEY` FROM `VIP` WHERE `KEY` = '%s'", Key);
  88. Resultado = db_query(Database, Str);
  89.  
  90. if(db_num_rows(Resultado))
  91. {
  92. SendClientMessage(playerid, -1, "Essa Key já existe, tente outra.");
  93. }
  94. else
  95. {
  96. format(Str, sizeof Str, "INSERT INTO `VIP` (`NOME`, `LEVEL`, `KEY`, `DIAS`, `GETTIME`) VALUES ('N/A', '%i', '%s', '%i', '0')", Level, Key, Time);
  97. db_query(Database, Str);
  98.  
  99. format(Str, sizeof Str, "Key criada com sucesso, repasse-a para um jogador. Key: %s | Tempo: %s", Key, ConvertTime(Time * 60 * 60 * 24));
  100. SendClientMessage(playerid, -1, Str);
  101. }
  102. db_free_result(Resultado);
  103.  
  104. return 1;
  105. }
  106.  
  107. CMD:removerkey(playerid, params[])
  108. {
  109. if(!IsPlayerAdmin(playerid)) return 0;
  110.  
  111. new Nome[MAX_PLAYER_NAME];
  112.  
  113. if(isnull(params)) return SendClientMessage(playerid, -1, "/removerkey [Key]");
  114.  
  115. format(Str, sizeof Str, "SELECT `NOME`, `KEY` FROM `VIP` WHERE `KEY` = '%s'", params);
  116. Resultado = db_query(Database, Str);
  117.  
  118. if(db_num_rows(Resultado))
  119. {
  120. db_get_field_assoc(Resultado, "NOME", Nome, sizeof Nome);
  121.  
  122. format(Str, sizeof Str, "DELETE FROM `VIP` WHERE `KEY` = '%s'", params);
  123. db_query(Database, Str);
  124.  
  125. for(new i = 0; i < MAX_PLAYERS; ++ i)
  126. {
  127. GetPlayerName(i, gNome, sizeof gNome);
  128.  
  129. if(strcmp(gNome, Nome, false) == 0)
  130. {
  131. SendClientMessage(i, -1, "Um administrador removeu a sua Key VIP. Caso houver equívoco, tire um print e passe-o para o administrador.");
  132.  
  133. ResetVipStats(i);
  134.  
  135. break;
  136. }
  137. }
  138.  
  139. SendClientMessage(playerid, -1, "Key removida com sucesso.");
  140. }
  141. else
  142. {
  143. SendClientMessage(playerid, -1, "Essa Key não existe.");
  144. }
  145. db_free_result(Resultado);
  146.  
  147. return 1;
  148. }
  149.  
  150. CMD:keysusadas(playerid)
  151. {
  152. if(!IsPlayerAdmin(playerid)) return 0;
  153.  
  154. static GetKey;
  155.  
  156. SendClientMessage(playerid, -1, "Lista de Keys usadas:");
  157.  
  158. Resultado = db_query(Database, "SELECT `KEY` FROM `VIP` WHERE `NOME` <> 'N/A'");
  159. GetKey = db_num_rows(Resultado);
  160.  
  161. if(GetKey)
  162. {
  163. for(new i = 0; i < GetKey; ++ i)
  164. {
  165. db_get_field_assoc(Resultado, "KEY", GetData, sizeof GetData);
  166.  
  167. SendClientMessage(playerid, -1, GetData);
  168.  
  169. db_next_row(Resultado);
  170. }
  171. }
  172. db_free_result(Resultado);
  173.  
  174. format(Str, sizeof Str, "Verificação completada com sucesso! %i Keys em uso.", GetKey);
  175. SendClientMessage(playerid, -1, Str);
  176.  
  177. return 1;
  178. }
  179.  
  180. CMD:keysnaousadas(playerid)
  181. {
  182. if(!IsPlayerAdmin(playerid)) return 0;
  183.  
  184. static GetKey;
  185.  
  186. SendClientMessage(playerid, -1, "Lista de Keys não usadas:");
  187.  
  188. Resultado = db_query(Database, "SELECT `KEY` FROM `VIP` WHERE `NOME` = 'N/A'");
  189. GetKey = db_num_rows(Resultado);
  190.  
  191. if(GetKey)
  192. {
  193. for(new i = 0; i < GetKey; ++ i)
  194. {
  195. db_get_field_assoc(Resultado, "KEY", GetData, sizeof GetData);
  196.  
  197. SendClientMessage(playerid, -1, GetData);
  198.  
  199. db_next_row(Resultado);
  200. }
  201. }
  202. db_free_result(Resultado);
  203.  
  204. format(Str, sizeof Str, "Verificação completada com sucesso! %i Keys sem uso.", GetKey);
  205. SendClientMessage(playerid, -1, Str);
  206.  
  207. return 1;
  208. }
  209.  
  210. CMD:verkey(playerid, params[])
  211. {
  212. if(!IsPlayerAdmin(playerid)) return 0;
  213.  
  214. if(isnull(params)) return SendClientMessage(playerid, -1, "/verkey [Nome do Jogador]");
  215.  
  216. format(Str, sizeof Str, "SELECT `KEY` FROM `VIP` WHERE `NOME` = '%s'", params);
  217. Resultado = db_query(Database, Str);
  218.  
  219. if(db_num_rows(Resultado))
  220. {
  221. db_get_field_assoc(Resultado, "KEY", GetData, sizeof GetData);
  222.  
  223. format(Str, sizeof Str, "A Key do jogador %s é %s", params, GetData);
  224. SendClientMessage(playerid, -1, Str);
  225. }
  226. else
  227. {
  228. SendClientMessage(playerid, -1, "Este jogador não possui VIP.");
  229. }
  230.  
  231. return 1;
  232. }
  233.  
  234. CMD:servip(playerid, params[])
  235. {
  236. new sDias[6], Nome[MAX_PLAYER_NAME];
  237.  
  238. if(isnull(params)) return SendClientMessage(playerid, -1, "/servip [Key]");
  239.  
  240. if(VipLevel(playerid)) return SendClientMessage(playerid, -1, "Você já é jogador VIP");
  241.  
  242. format(Str, sizeof Str, "SELECT * FROM `VIP` WHERE `KEY` = '%s'", params);
  243. Resultado = db_query(Database, Str);
  244.  
  245. GetPlayerName(playerid, gNome, sizeof gNome);
  246.  
  247. if(db_num_rows(Resultado))
  248. {
  249. db_get_field_assoc(Resultado, "NOME", Nome, sizeof Nome);
  250.  
  251. if(strcmp("N/A", Nome, false) == 0)
  252. {
  253. db_get_field_assoc(Resultado, "DIAS", sDias, sizeof sDias);
  254. Vip[playerid][pDias] = strval(sDias);
  255.  
  256. format(Str, sizeof Str, "UPDATE `VIP` SET `NOME` = '%s', `GETTIME` = '%i' WHERE `KEY` = '%s'", gNome, (Vip[playerid][pDias] * 60 * 60 * 24) + gettime(), params);
  257. db_query(Database, Str);
  258. }
  259. else
  260. {
  261. SendClientMessage(playerid, -1, "Esta Key já foi utilizada.");
  262. }
  263. }
  264. else
  265. {
  266. SendClientMessage(playerid, -1, "Esta Key não existe, verifique-a novamente ou entre em contato com o administrador que a forneceu.");
  267. }
  268. db_free_result(Resultado);
  269.  
  270. format(Str, sizeof Str, "SELECT * FROM `VIP` WHERE `KEY` = '%s'", params);
  271. Resultado = db_query(Database, Str);
  272. {
  273. db_get_field_assoc(Resultado, "KEY", Vip[playerid][pKey], 11);
  274.  
  275. db_get_field_assoc(Resultado, "GETTIME", GetData, sizeof GetData);
  276. Vip[playerid][pGetTime] = strval(GetData);
  277.  
  278. db_get_field_assoc(Resultado, "LEVEL", GetData, sizeof GetData);
  279. Vip[playerid][pLevel] = strval(GetData);
  280.  
  281. format(Str, sizeof Str, "Agora você é um jogador VIP! Level: %i | Key: %s | Dias adquiridos: %i | Tempo restante: %s", Vip[playerid][pLevel], Vip[playerid][pKey], Vip[playerid][pDias], ConvertTime(Vip[playerid][pGetTime] - gettime()));
  282. SendClientMessage(playerid, -1, Str);
  283. }
  284.  
  285. return 1;
  286. }
  287.  
  288. CMD:meuvip(playerid)
  289. {
  290. new sDias[5];
  291.  
  292. if(!VipLevel(playerid)) return SendClientMessage(playerid, -1, "Você não é jogador VIP.");
  293.  
  294. GetPlayerName(playerid, gNome, sizeof gNome);
  295.  
  296. format(Str, sizeof Str, "SELECT * FROM `VIP` WHERE `NOME` = '%s'", gNome);
  297. Resultado = db_query(Database, Str);
  298.  
  299. if(db_num_rows(Resultado))
  300. {
  301. SendClientMessage(playerid, -1, "Seus dados VIP:");
  302.  
  303. db_get_field_assoc(Resultado, "DIAS", sDias, sizeof sDias);
  304. Vip[playerid][pDias] = strval(sDias);
  305.  
  306. db_get_field_assoc(Resultado, "KEY", Vip[playerid][pKey], 11);
  307.  
  308. db_get_field_assoc(Resultado, "LEVEL", GetData, sizeof GetData);
  309. Vip[playerid][pLevel] = strval(GetData);
  310.  
  311. db_get_field_assoc(Resultado, "GETTIME", GetData, sizeof GetData);
  312. Vip[playerid][pGetTime] = strval(GetData);
  313.  
  314. format(Str, sizeof Str, "Level: %i | Key: %s | Dias adquiridos: %i | Tempo restante: %s", Vip[playerid][pLevel], Vip[playerid][pKey], Vip[playerid][pDias], ConvertTime(Vip[playerid][pGetTime] - gettime()));
  315. SendClientMessage(playerid, -1, Str);
  316. }
  317.  
  318. return 1;
  319. }
  320.  
  321. stock VipLevel(playerid)
  322. {
  323. return Vip[playerid][pLevel];
  324. }
  325.  
  326. stock ConvertTime(SEGUNDOS)
  327. {
  328. new MINUTOS_, HORAS_, DIAS_, String[200];
  329.  
  330. if(SEGUNDOS > 59)
  331. {
  332. MINUTOS_ = SEGUNDOS / 60;
  333. SEGUNDOS = SEGUNDOS - MINUTOS_ * 60;
  334. }
  335. if(MINUTOS_ > 59)
  336. {
  337. HORAS_ = MINUTOS_ / 60;
  338. MINUTOS_ = MINUTOS_ - HORAS_ * 60;
  339. }
  340. if(HORAS_ > 23)
  341. {
  342. DIAS_ = HORAS_ / 24;
  343. HORAS_ = HORAS_ - DIAS_ * 24;
  344. }
  345.  
  346. format(String, sizeof(String), "%02d Dias e %02d Horas e %02d Minutos e %02d Segundos", DIAS_, HORAS_, MINUTOS_, SEGUNDOS);
  347. if(DIAS_ < 1) format(String, sizeof(String), "%02d Horas e %02d Minutos e %02d Segundos", HORAS_, MINUTOS_, SEGUNDOS);
  348. if(DIAS_ < 1 && HORAS_ < 1) format(String, sizeof(String), "%02d Minutos e %02d Segundos", MINUTOS_, SEGUNDOS);
  349. if(DIAS_ < 1 && HORAS_ < 1 && MINUTOS_ < 1) format(String, sizeof(String), "%02d Segundos", SEGUNDOS);
  350.  
  351. return String;
  352. }
  353.  
  354. stock ResetVipStats(playerid)
  355. {
  356. Vip[playerid][pLevel] = 0;
  357. Vip[playerid][pKey] = '\0';
  358. Vip[playerid][pDias] = 0;
  359. Vip[playerid][pGetTime] = -1;
  360.  
  361. return 1;
  362. }
  363.  
  364. forward VerificarVIP();
  365. public VerificarVIP()
  366. {
  367. for(new i = 0; i < MAX_PLAYERS; ++ i)
  368. {
  369. if(!IsPlayerConnected(i)) continue;
  370.  
  371. if(gettime() > Vip[i][pGetTime] && VipLevel(i))
  372. {
  373. printf("var: %i | gettime: %i", Vip[i][pGetTime], gettime());
  374.  
  375. GetPlayerName(i, gNome, sizeof gNome);
  376.  
  377. format(Str, sizeof Str, "DELETE FROM `VIP` WHERE `NOME` = '%s'", gNome);
  378. db_query(Database, Str);
  379.  
  380. ResetVipStats(i);
  381.  
  382. SendClientMessage(i, -1, "Seu VIP acabou! Obrigado por adquirir nosso plano.");
  383. }
  384. }
  385.  
  386. return 1;
  387. }
Advertisement
Add Comment
Please, Sign In to add comment