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