· 10 years ago · Sep 11, 2016, 07:42 PM
1#include a_samp
2#include sscanf2
3#include zcmd
4
5#define DATABASE "Vip.db"
6
7static DB: Database;
8new DBResult: Resultado;
9
10enum vInfo
11{
12 pLevel,
13 pKey[11],
14 pDias,
15 pGetTime
16}
17new Vip[MAX_PLAYERS][vInfo];
18
19new Str[256], Key[11], gNome[MAX_PLAYER_NAME], GetData[50];
20
21public 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
30public OnFilterScriptExit()
31{
32 db_close(Database);
33
34 return 1;
35}
36
37public 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
75CMD: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
107CMD: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
150CMD: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
180CMD: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
210CMD: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, "NOME", 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
234CMD: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
288CMD: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
321stock VipLevel(playerid)
322{
323 return Vip[playerid][pLevel];
324}
325
326stock 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
354stock 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
364forward VerificarVIP();
365public 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}