· 8 years ago · Jan 27, 2018, 10:48 AM
1#include <amxmodx>
2#include <amxmisc>
3#include <fakemeta>
4#include <sqlx>
5#include <zombieplague>
6#include <colorchat>
7
8#define MAX_PLAYERS 32
9
10new PLUGIN_NAME[] = "[ZP]Addons: Bank SQL";
11new PLUGIN_VERSION[] = "0.9.1";
12new PLUGIN_AUTHOR[] = "Epmak";
13new PLUGIN_PREFIX[] = "[ZP][Bank]";
14
15enum vars_struct {
16 mode=0,
17 annonce,
18
19 save_limit,
20 save_viplimit,
21 save_days,
22 save_type,
23
24 block_cname,
25 startedammo,
26 allow_passwd,
27 allow_donate,
28
29 _pw_str[32],
30 table[32],
31 config_dir[128]
32};
33
34enum bank_struct {
35 bool:ingame,
36 bool:async,
37 bool:loggin,
38 auth[36],
39 passwd[32],
40 amount
41}
42
43new g_vars[vars_struct];
44new g_Bank[MAX_PLAYERS+1][bank_struct];
45new Handle:g_Sql = Empty_Handle,Handle:g_SqlTuple = Empty_Handle;
46
47public plugin_init() {
48 register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
49 register_cvar("zp_bank_sql", PLUGIN_VERSION, FCVAR_SERVER);
50
51 register_dictionary("zp_bank.txt");
52 register_dictionary("common.txt");
53
54 register_clcmd("say", "handle_say");
55 register_clcmd("say_team", "handle_say");
56
57 register_concmd("zp_bank_show", "cmdBankShow", ADMIN_ADMIN);
58 register_concmd("zp_bank_set", "cmdBankSet", ADMIN_RCON, "<name or #userid> <+ or ->amount");
59
60 register_srvcmd("zp_bank_connect", "db_connect");
61
62 g_vars[startedammo] = get_cvar_pointer("zp_starting_ammo_packs");
63
64 register_forward(FM_ClientUserInfoChanged, "fwClientUserInfoChanged");
65
66 server_cmd("zp_bank_connect");
67}
68
69public plugin_precache() {
70 get_configsdir(g_vars[config_dir], 127);
71
72 g_vars[mode] = register_cvar("zp_bank", "2");
73 g_vars[annonce] = register_cvar("zp_bank_annonce", "60.0");
74 g_vars[save_limit] = register_cvar("zp_bank_save_limit", "20");
75 g_vars[save_viplimit] = register_cvar("zp_bank_save_viplimit", "1000");
76 g_vars[save_days] = register_cvar("zp_bank_save_days", "365");
77 g_vars[save_type] = register_cvar("zp_bank_save_type", "3");
78 g_vars[block_cname] = register_cvar("zp_bank_block_name_change", "1");
79 g_vars[allow_passwd] = register_cvar("zp_bank_allow_passwd", "1");
80 g_vars[allow_donate] = register_cvar("zp_bank_allow_donate", "0");
81
82 register_cvar("zp_bank_host", "127.0.0.1");
83 register_cvar("zp_bank_user", "amxbans");
84 register_cvar("zp_bank_pass", "");
85 register_cvar("zp_bank_db", "amxbans");
86 register_cvar("zp_bank_type", "mysql");
87 register_cvar("zp_bank_table", "zp_bank");
88 register_cvar("zp_bank_pw_str", "_bpw");
89
90 server_cmd("exec %s/zp_bank.cfg", g_vars[config_dir]);
91 server_exec();
92}
93
94public plugin_cfg() {
95 g_vars[mode] = get_pcvar_num(g_vars[mode]);
96 g_vars[save_limit] = get_pcvar_num(g_vars[save_limit]);
97 g_vars[save_viplimit] = get_pcvar_num(g_vars[save_viplimit])
98 g_vars[save_days] = get_pcvar_num(g_vars[save_days]);
99 g_vars[save_type] = get_pcvar_num(g_vars[save_type]);
100 g_vars[block_cname] = get_pcvar_num(g_vars[block_cname]);
101 g_vars[allow_passwd] = get_pcvar_num(g_vars[allow_passwd]);
102 g_vars[allow_donate] = get_pcvar_num(g_vars[allow_donate]);
103
104 if(g_vars[save_limit] < 0) g_vars[save_limit] = 0;
105
106 if(get_pcvar_num(g_vars[annonce])) set_task(get_pcvar_float(g_vars[annonce]), "print_annonce",_,_,_,"b");
107
108 get_cvar_string("zp_bank_pw_str", g_vars[_pw_str], 31);
109}
110
111public plugin_end() {
112 if(g_Sql != Empty_Handle) SQL_FreeHandle(g_Sql);
113 if(g_SqlTuple != Empty_Handle) SQL_FreeHandle(g_SqlTuple);
114}
115
116public zp_round_started(zpmode, id) {
117 if (!g_vars[mode] || g_Sql == Empty_Handle)
118 return ;
119
120 static i;
121 for(i=1;i<=MAX_PLAYERS;i++) {
122 if(!g_Bank[i][ingame] || !g_Bank[i][loggin] || !g_Bank[i][async]) continue;
123
124 SaveClientBank(i);
125 }
126}
127
128public client_authorized(id) {
129 if (!g_vars[mode])
130 return ;
131
132 GetAuthId(id,g_Bank[id][auth],35);
133
134 g_Bank[id][amount] = 0;
135 g_Bank[id][async] = false;
136 g_Bank[id][loggin] = false;
137
138 if(g_vars[mode] == 2)
139 zp_set_user_ammo_packs(id, get_pcvar_num(g_vars[startedammo]));
140
141 LoadClientBank(id);
142}
143
144public client_putinserver(id) {
145 g_Bank[id][ingame] = true;
146
147 if(g_Bank[id][async] == true && g_Bank[id][loggin] == true)
148 SetAmmoBank(id, g_Bank[id][amount]);
149}
150
151public client_disconnect(id) {
152 if (!g_vars[mode] || g_Sql == Empty_Handle)
153 return ;
154
155 if(g_Bank[id][async] == true && g_Bank[id][loggin] == true)
156 SaveClientBank(id);
157
158 g_Bank[id][ingame] = false;
159 g_Bank[id][auth][0] = '^0';
160 g_Bank[id][passwd][0] = '^0';
161}
162
163public cmdBankShow(id, level, cid) {
164 if (!cmd_access(id, level, cid, 1))
165 return PLUGIN_HANDLED;
166
167 static pl_name[32], pl_amount[11], i;
168 console_print(id, "%33s amount","name");
169 for(i=1;i<=MAX_PLAYERS;i++) {
170 if(!g_Bank[i][ingame]) continue;
171
172 get_user_name(i,pl_name,31);
173
174 if(!g_Bank[i][async])
175 pl_amount = "not loaded";
176 else if(!g_Bank[i][loggin])
177 pl_amount = "not loggin";
178 else
179 num_to_str(GetAmmoBank(i),pl_amount,10);
180
181 console_print(id, "%33s %s", pl_name, pl_amount);
182 }
183
184 return PLUGIN_HANDLED;
185}
186
187public cmdBankSet(id, level, cid) {
188 if (!cmd_access(id, level, cid, 3))
189 return PLUGIN_HANDLED;
190
191 static s_player[32], player, s_amount[12], i_amount;
192 read_argv(1, s_player, 31);
193 player = cmd_target(id, s_player, CMDTARGET_ALLOW_SELF);
194
195 if (!player)
196 return PLUGIN_HANDLED;
197
198 get_user_name(player,s_player,31);
199 if(!g_Bank[player][async]) {
200 console_print(id,"The player '%s' has not loaded bank", s_player);
201 return PLUGIN_HANDLED;
202 }
203 else if(!g_Bank[player][loggin]) {
204 console_print(id,"The player '%s' has not loggin bank", s_player);
205 return PLUGIN_HANDLED;
206 }
207
208 read_argv(2, s_amount, 11);
209 remove_quotes(s_amount);
210 i_amount = str_to_num(s_amount);
211
212 switch(s_amount[0]) {
213 case '+':
214 SetAmmoBank(player, GetAmmoBank(player)+i_amount);
215 case '-':
216 SetAmmoBank(player, GetAmmoBank(player)-(0-i_amount));
217 default:
218 SetAmmoBank(player,i_amount);
219 }
220
221 return PLUGIN_HANDLED;
222}
223
224public print_annonce() {
225 if (!g_vars[mode] || g_Sql == Empty_Handle)
226 return ;
227
228 ColorChat(0, GREEN, "%L", LANG_PLAYER, "BANK_ANNOUNCE1");
229 if(g_vars[mode] == 1) {
230 ColorChat(0, GREEN, "%L", LANG_PLAYER, "BANK_ANNOUNCE2");
231 ColorChat(0, GREEN, "%L", LANG_PLAYER, "BANK_ANNOUNCE3");
232 }
233}
234
235public db_loadcurrent() {
236 for(new i=1;i<=MAX_PLAYERS;i++) {
237 if(g_Bank[i][async] || !g_Bank[i][ingame]) continue;
238
239 LoadClientBank(i);
240 }
241}
242
243public db_connect(count) {
244 if(!g_vars[mode]) return ;
245
246 new host[64], user[32], pass[32], db[128];
247 new get_type[13], set_type[12];
248 new error[128], errno;
249
250 get_cvar_string("zp_bank_host", host, 63);
251 get_cvar_string("zp_bank_user", user, 31);
252 get_cvar_string("zp_bank_pass", pass, 31);
253 get_cvar_string("zp_bank_type", set_type, 11);
254 get_cvar_string("zp_bank_db", db, 127);
255 get_cvar_string("zp_bank_table", g_vars[table], 31);
256
257 if(is_module_loaded(set_type) == -1) {
258 server_print("^r^n%s error: module '%s' not loaded.^r^n%s Add line %s to %s/modules.ini and restart server^r^n", PLUGIN_PREFIX, set_type, PLUGIN_PREFIX, set_type, g_vars[config_dir]);
259 return ;
260 }
261
262 SQL_GetAffinity(get_type, 12);
263
264 if (!equali(get_type, set_type))
265 if (!SQL_SetAffinity(set_type))
266 log_amx("Failed to set affinity from %s to %s.", get_type, set_type);
267
268 g_SqlTuple = SQL_MakeDbTuple(host, user, pass, db);
269
270 g_Sql = SQL_Connect(g_SqlTuple, errno, error, 127);
271
272 if (g_Sql == Empty_Handle) {
273 server_print("%s SQL Error #%d - %s", PLUGIN_PREFIX, errno, error);
274
275 count += 1;
276 set_task(10.0, "db_connect", count);
277
278 return ;
279 }
280
281 SQL_QueryAndIgnore(g_Sql, "SET NAMES utf8");
282
283 if (equali(set_type, "sqlite") && !sqlite_TableExists(g_Sql, g_vars[table])) SQL_QueryAndIgnore(g_Sql, "CREATE TABLE ^"%s^" (^"auth^" VARCHAR NOT NULL PRIMARY KEY, ^"password^" VARCHAR NOT NULL DEFAULT '', ^"amount^" INTEGER DEFAULT 0, ^"timestamp^" INTEGER NOT NULL DEFAULT 0)",g_vars[table]);
284 else if (equali(set_type, "mysql")) SQL_QueryAndIgnore(g_Sql,"CREATE TABLE IF NOT EXISTS `%s` (auth VARCHAR(36) NOT NULL PRIMARY KEY, password VARCHAR(36) NOT NULL DEFAULT '', amount INT(10) NOT NULL DEFAULT 0, timestamp INT(10) NOT NULL DEFAULT 0 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", g_vars[table]);
285
286 CleanDataBase();
287 if(count > 1) db_loadcurrent();
288
289 server_print("%s connected to: '%s://%s:****@%s/%s/%s'",PLUGIN_PREFIX, set_type, user, host, db, g_vars[table]);
290}
291
292public CleanDataBase() {
293 SQL_QueryAndIgnore(g_Sql, "DELETE FROM %s WHERE amount='0' AND password = '';", g_vars[table]);
294
295 if (!g_vars[save_days]) return ;
296
297 new curTime = get_systime();
298 curTime -= ((g_vars[save_days] * 24) * 3600);
299
300 SQL_QueryAndIgnore(g_Sql,"DELETE FROM %s WHERE timestamp < '%d';", g_vars[table], curTime);
301}
302
303public fwClientUserInfoChanged(id, buffer) {
304 if (!g_vars[mode] || !is_user_connected(id))
305 return FMRES_IGNORED;
306
307 new name[32], val[32], name_1[] = "name";
308 get_user_name(id, name, 31);
309 engfunc(EngFunc_InfoKeyValue, buffer, name_1, val, 31);
310 if (equal(val, name))
311 return FMRES_IGNORED;
312
313 if(g_vars[block_cname]) {
314 engfunc(EngFunc_SetClientKeyValue, id, buffer, name_1, name);
315 client_cmd(id, "name ^"%s^"; setinfo name ^"%s^"", name, name);
316 console_print(id, "%L", id ,"NO_NAME_CHANGE");
317 }
318 else {
319 GetAuthId(id,g_Bank[id][auth],35);
320 return FMRES_IGNORED;
321 }
322
323 return FMRES_SUPERCEDE;
324}
325
326public handle_say(id) {
327 if(!g_vars[mode]) {
328 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_DISABLED");
329
330 return PLUGIN_CONTINUE;
331 }
332 else if(g_Sql == Empty_Handle) {
333 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_ERR");
334
335 return PLUGIN_CONTINUE;
336 }
337 else if (!g_Bank[id][async])
338 return PLUGIN_CONTINUE;
339
340 new text[60], command[16], command2[32], password[32], set_packs;
341 read_args(text, 59);
342 remove_quotes(text);
343
344 command[0] = '^0';
345 command2[0] = '^0';
346 password[0] = '^0';
347 parse(text, command, 15, command2, 31, password, 31);
348
349 if (equali(command, "/", 1))
350 format(command, 15, command[1]);
351
352 if (g_vars[allow_donate] && equali(command, "donate", 6)) {
353 donate(id, command2, str_to_num(password));
354 }
355 else if (equali(command, "mybank", 6) || equali(command, "bank", 4)) {
356 if(g_vars[save_type] == 2 && g_vars[allow_passwd]) {
357 if(equali(command2, "login", 5)) {
358 if(g_Bank[id][loggin]) {
359 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_ALREADY");
360 return PLUGIN_HANDLED;
361 }
362
363 if(g_Bank[id][passwd][0] && equal(password, g_Bank[id][passwd])) {
364 g_Bank[id][loggin] = true;
365 SetAmmoBank(id, g_Bank[id][amount]);
366 client_cmd(id, "setinfo %s ^"%s^"", g_vars[_pw_str], password);
367 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_SUCCESS");
368 }
369 else {
370 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_BAD");
371 }
372
373 return PLUGIN_HANDLED;
374 }
375 else if(!g_Bank[id][loggin]) {
376 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN");
377 return PLUGIN_HANDLED;
378 }
379 else if(equali(command2, "password", 8)) {
380 if(password[0]) {
381 g_Bank[id][passwd] = password;
382 client_cmd(id, "setinfo %s ^"%s^"", g_vars[_pw_str], password);
383 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_PASSWORD_SET", g_Bank[id][passwd]);
384 }
385 else {
386 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_PASSWORD", g_Bank[id][passwd]);
387 }
388 return PLUGIN_HANDLED;
389 }
390 else if(!g_Bank[id][passwd][0])
391 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_LOGIN_PASSWORD_SETHELP");
392 }
393
394 if(g_vars[mode] == 2)
395 return PLUGIN_CONTINUE;
396
397 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK", g_Bank[id][amount]);
398 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_ANNOUNCE2");
399 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_ANNOUNCE3");
400 }
401 else if (g_vars[mode] == 2)
402 return PLUGIN_CONTINUE;
403 else if (equali(command, "deposit", 7) || equali(command, "send", 4) || equali(command, "store", 5)) {
404 new user_ammo_packs = zp_get_user_ammo_packs(id);
405
406 if (equali(command2, "all")) set_packs = user_ammo_packs;
407 else set_packs = str_to_num(command2);
408
409 new limit_exceeded=false;
410
411 if(get_user_flags(id) & ADMIN_RESERVATION)
412 {
413 if (g_vars[save_viplimit] && set_packs > 0 && g_Bank[id][amount] + set_packs > g_vars[save_viplimit]) {
414
415 new overflow = g_Bank[id][amount] + set_packs - g_vars[save_viplimit];
416 set_packs -= overflow;
417
418 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "DEPOSIT_MAX", g_vars[save_viplimit]);
419
420 limit_exceeded = true;
421 }
422 } else {
423 if (g_vars[save_limit] && set_packs > 0 && g_Bank[id][amount] + set_packs > g_vars[save_limit]) {
424
425 new overflow = g_Bank[id][amount] + set_packs - g_vars[save_limit];
426 set_packs -= overflow;
427
428 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "DEPOSIT_MAX", g_vars[save_limit]);
429
430 limit_exceeded = true;
431 }
432 }
433
434 if (set_packs > 0) {
435 if (user_ammo_packs >= set_packs) {
436 g_Bank[id][amount] += set_packs;
437 zp_set_user_ammo_packs(id, user_ammo_packs - set_packs);
438 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "DEPOSIT", set_packs, g_Bank[id][amount]);
439 }
440 else
441 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "DEPOSIT_ERR", set_packs, user_ammo_packs);
442
443 return PLUGIN_HANDLED;
444 }
445 else if(!limit_exceeded)
446 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_ANNOUNCE2");
447 }
448 else if (equali(command, "withdraw", 8) || equali(command, "take", 4) || equali(command, "retrieve", 8) || equali(command, "wd", 2)) {
449 new user_ammo_packs = zp_get_user_ammo_packs(id);
450
451 if (equali(command2, "all")) set_packs = g_Bank[id][amount];
452 else set_packs = str_to_num(command2);
453
454 if (set_packs > 0) {
455 if (g_Bank[id][amount] >= set_packs) {
456 zp_set_user_ammo_packs(id, user_ammo_packs + set_packs);
457 g_Bank[id][amount] -= set_packs;
458 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "WITHDRAW", set_packs, g_Bank[id][amount]);
459 }
460 else
461 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "WITHDRAW_ERR", set_packs, g_Bank[id][amount]);
462
463 return PLUGIN_HANDLED;
464 }
465 else
466 ColorChat(id, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_ANNOUNCE3");
467 }
468
469 return PLUGIN_CONTINUE;
470}
471
472public donate(donater, const reciever_name[], ammo) {
473 if(!reciever_name[0] || ammo <= 0 || zp_get_user_ammo_packs(donater) < ammo) {
474 ColorChat(donater, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "BANK_DONATE_USAGE");
475 return ;
476 }
477
478 new reciever = cmd_target(donater, reciever_name, CMDTARGET_ALLOW_SELF);
479 if (!reciever/* || reciever == donater*/) {
480 ColorChat(donater, GREEN, "%s %L", PLUGIN_PREFIX, LANG_PLAYER, "CL_NOT_FOUND");
481 return ;
482 }
483
484 zp_set_user_ammo_packs(donater, zp_get_user_ammo_packs(donater)-ammo);
485 zp_set_user_ammo_packs(reciever, zp_get_user_ammo_packs(reciever)+ammo);
486}
487
488public LoadClientBank(id) {
489 if (g_SqlTuple == Empty_Handle || g_Sql == Empty_Handle || g_Bank[id][async] == true) return ;
490
491 new szQuery[120];
492 format(szQuery, 119,"SELECT amount,password FROM %s WHERE auth='%s';", g_vars[table], g_Bank[id][auth]);
493
494 new szData[2];
495 szData[0] = id;
496 szData[1] = get_user_userid(id);
497
498 SQL_ThreadQuery(g_SqlTuple, "LoadClient_QueryHandler", szQuery, szData, 2);
499}
500
501public LoadClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, szData[], iSize, Float:fQueueTime) {
502 if(iFailState != TQUERY_SUCCESS) {
503 log_amx("%s SQL Error #%d - %s", PLUGIN_PREFIX, iErrnum, szError);
504 return ;
505 }
506
507 new id = szData[0];
508
509 if (szData[1] != get_user_userid(id))
510 return ;
511
512 new packs=0,info_pw[32];
513
514 if(g_vars[mode] == 2)
515 packs = get_pcvar_num(g_vars[startedammo]);
516
517 if(SQL_NumResults(hQuery)) {
518 packs = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "amount"));
519 SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "password"), g_Bank[id][passwd], 31);
520 }
521
522 if( get_user_flags(id) & ADMIN_RESERVATION )
523 {
524 g_Bank[id][amount] = CheckLimitVip(packs);
525 } else {
526 g_Bank[id][amount] = CheckLimit(packs)
527 }
528 if(g_vars[allow_passwd] && g_Bank[id][passwd][0]) {
529 get_user_info(id,g_vars[_pw_str],info_pw,31);
530 if(equal(info_pw, g_Bank[id][passwd])) {
531 g_Bank[id][loggin] = true;
532 }
533 }
534 else
535 g_Bank[id][loggin] = true;
536
537 if(g_Bank[id][ingame] == true && g_Bank[id][loggin] == true) {
538 SetAmmoBank(id, g_Bank[id][amount]);
539 }
540 g_Bank[id][async] = true;
541}
542
543public SaveClientBank(id) {
544 if (g_Sql == Empty_Handle) return ;
545
546 new packs = GetAmmoBank(id);
547 if( get_user_flags(id) & ADMIN_RESERVATION )
548 {
549 packs = CheckLimitVip(packs)
550 } else {
551 packs = CheckLimit(packs)
552 }
553
554 SQL_QuoteString(g_Sql, g_Bank[id][passwd], 31, g_Bank[id][passwd]);
555 SQL_QueryAndIgnore(g_Sql, "REPLACE INTO %s (auth,password,amount,timestamp) VALUES('%s', '%s', %d, %d);", g_vars[table], g_Bank[id][auth], g_Bank[id][passwd], packs, get_systime());
556}
557
558stock GetAuthId(id, Buffer[]="", BufferSize=0) {
559 switch(g_vars[save_type]) {
560 case 1: get_user_authid(id,Buffer,BufferSize);
561 case 2: {
562 new name[32];
563 get_user_name(id,name,31);
564 SQL_QuoteString(g_Sql, Buffer, BufferSize, name);
565 }
566 case 3: get_user_ip(id,Buffer,BufferSize,true);
567 }
568}
569
570public CheckLimitVip(packs) {
571 if(g_vars[save_viplimit] && packs > g_vars[save_viplimit] ) {
572 packs = g_vars[save_viplimit];
573 }
574 return packs;
575}
576
577public CheckLimit(packs) {
578 if(g_vars[save_limit] && packs > g_vars[save_limit] ) {
579 packs = g_vars[save_limit];
580 }
581 return packs;
582}
583
584public SetAmmoBank(id, packs) {
585 if(g_vars[mode] == 2)
586 zp_set_user_ammo_packs(id,packs);
587 else
588 g_Bank[id][amount] = packs;
589}
590
591public GetAmmoBank(id) {
592 if(g_vars[mode] == 2)
593 return zp_get_user_ammo_packs(id);
594
595 return g_Bank[id][amount];
596}