· 7 years ago · Sep 14, 2018, 05:06 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <engine>
4#include <fakemeta>
5#include <hamsandwich>
6#include <cstrike>
7#include <sqlx>
8#include <fun>
9#include <reapi>
10#include <supply>
11#include <rcsgo>
12
13new const PLUGIN[] = "Global Offensive";
14new const VERSION[] = "0.4 [ReAPI]";
15new const AUTHOR[] = "Saudyk.LT/REZ.LT";
16
17#if AMXX_VERSION_NUM < 183
18 #include <colorchat>
19
20 #define print_team_default DontChange
21 #define print_team_grey Grey
22 #define print_team_red Red
23 #define print_team_blue Blue
24
25 #define MAX_PLAYERS 32
26 #define MAX_NAME_LENGTH 32
27
28 #define client_disconnected client_disconnect
29
30 new MaxClients;
31#endif
32
33#define ACCESS_VIP ADMIN_CHAT // VIP access
34#define ACCESS_ADMIN ADMIN_BAN // ADMIN access
35#define ACCESS_SADMIN ADMIN_IMMUNITY // SADMIN access
36/*================================================================================
37[MySQLx Vars, other]
38=================================================================================*/
39#define DB_HOST ""
40#define DB_USER ""
41#define DB_PASS ""
42#define DB_DATA ""
43
44#define TABLE_NAME "gamenet_player"
45
46#define SOUND_SOLD "ambience/quail1.wav"
47
48new Handle:g_hTuple;
49new g_msgid_ScreenFade, g_msgid_SyncHud;
50
51#define MAX 200 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
52
53#define CHEST_ID 201
54#define CHEST_COUNT 1
55#define CHESTS_COST 1400
56
57#define KEYS_ID 402
58#define KEYS_COUNT 1
59#define KEYS_COST 1400
60
61#define ACH_COUNT 9
62#define ACH_COST 1400
63
64#define WIN_ROUNDS 7
65#define MAX_ROUNDS 15
66
67#define MIN_POINTS_REWARD 70
68#define MAX_POINTS_REWARD 300
69
70#define MIN_POINTS_ROUNDS 70
71#define MAX_POINTS_ROUNDS 200
72
73#define MIN_POINTS_T 15
74#define MAX_POINTS_T 30
75
76#define MIN_POINTS_CT 15
77#define MAX_POINTS_CT 30
78
79#define ROUND_WIN_POINTS 7
80
81#define MARKET_WAIT_ADD 3
82#define MARKET_MAX_AMOUNT 50
83
84#define MIN_PASSWORD_LENGTH 6
85
86#define TASKID_REMENU 3000
87
88#define MIN_POINTS_ATTACKER 50
89#define MAX_POINTS_ATTACKER 300
90
91#define PLANTER_CHEST 3
92#define DEFUSED_CHEST 3
93#define ATTACKER_CHEST 15
94
95#define TAKE_DAMAGE 100
96
97#define KEYS_MAX_PRICE 1400
98#define KEYS_MIN_PRICE 800
99
100#define CHESTS_MAX_PRICE 1000
101#define CHESTS_MIN_PRICE 700
102
103#define WHITE_MIN_PRICE 200
104#define WHITE_MAX_PRICE 1000
105
106#define BLUE_MIN_PRICE 2500
107#define BLUE_MAX_PRICE 10000
108
109#define RED_MIN_PRICE 12000
110#define RED_MAX_PRICE 50000
111
112#define RARE_MIN_PRICE 25000
113#define RARE_MAX_PRICE 80000
114
115#define MARKET_MIN_PRICE 60000
116#define MARKET_MAX_PRICE 250000
117
118enum _:cvars_num
119{
120 KILL_HS, KILL_FRAG, PLANT, EXPLODE, DEFUSED,
121 HOST_GOT, HOST_KILL, HOST_RESCUE, VIP_KILLED, VIP_ESCAPED
122}
123
124enum _:game_struct
125{
126 DEFENDER, RUSHER, ATTACKER
127};
128
129enum _:player_struct
130{
131 PLAYER_DMG, PLAYER_HS
132}
133
134enum _:
135{
136 TYPE_PURPLE, TYPE_PINK, TYPE_DARKER
137}
138
139#define NEED_PINK 7
140#define NEED_DARKER 10
141#define NEED_PURPLE 10
142
143new g_logfile[64];
144new gWarnings[33] = 0;
145/*================================================================================
146=================================================================================*/
147new const g_weapons[] =
148{
149 CSW_P228, CSW_SCOUT, CSW_XM1014, CSW_MAC10, CSW_AUG, CSW_ELITE, CSW_FIVESEVEN, CSW_UMP45, CSW_SG550, CSW_GALI, CSW_GALIL, CSW_FAMAS, CSW_USP,
150 CSW_GLOCK18, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_DEAGLE, CSW_SG552, CSW_AK47, CSW_P90
151}
152
153new const g_max_clip[] = { 13, 10, 7, 30, 30, 30, 20, 25, 30, 35, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 7, 30, 30, 50 }
154enum _:AmmoIds { ammo_none, ammo_338magnum = 1, ammo_762nato, ammo_556natobox, ammo_556nato, ammo_buckshot, ammo_45acp, ammo_57mm, ammo_50ae, ammo_357sig, ammo_9mm }
155
156new g_iAmmoMax[AmmoIds] = { -1, 30, 90, 200, 90, 32, 100, 100, 35, 52, 120 }
157
158new const g_iAmmoWeaponSharedBitSum[AmmoIds] = { 0,
159 (1<<CSW_AWP), (1<<CSW_SCOUT)|(1<<CSW_G3SG1)|(1<<CSW_AK47), (1<<CSW_M249),
160 (1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M4A1)|(1<<CSW_SG552),
161 (1<<CSW_XM1014)|(1<<CSW_M3), (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_USP),
162 (1<<CSW_P90)|(1<<CSW_FIVESEVEN), (1<<CSW_DEAGLE), (1<<CSW_P228),
163 (1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_ELITE)|(1<<CSW_GLOCK18)
164}
165
166new g_msgid_AmmoX;
167
168#pragma semicolon 1;
169
170new gCanLoad, gCanSave;
171new Password[33][32], SavedPassword[33][32];
172new bool:Loged[33], bool:gLogged[33], bool:gRegistered[33];
173
174new Points[33];
175new aThing[33], aTarget[33], aPoints[33], Prefix[32];
176
177new bUsingGuns[33][CSW_VESTHELM];
178new uWeapon[MAX][33], uWeaponKills[MAX][33];
179new WeaponMdls[MAX][128], WeaponMdlsP[MAX][128], WeaponMdlsW[MAX][128];
180new WeaponNames[MAX][64], Weapons[MAX], WeaponDrop[MAX], WeaponPrice[MAX], weaponRang[MAX], AllWeapon;
181
182new Darker[MAX][33], Mythical[MAX][33], Legendary[MAX][33], uCovert[MAX][33];
183
184new Folder[48], SkinFile[48], MenuMod[33];
185
186new inMarket[33], MarketPoints[33];
187new WeaponinMarket[33], gLastMarketTime[33] = 0;
188
189new Ach[33][ACH_COUNT+1];
190new AchWin[33][ACH_COUNT+1];
191new AchNeed[33][ACH_COUNT+1];
192
193new Keys[33][KEYS_COUNT+1];
194new Chest[33][CHEST_COUNT+1];
195new chestsList[CHEST_COUNT+1][128][512];
196new chestsChance[CHEST_COUNT+1][128];
197
198new BuySkin[33], aAmount[33], mAmount[33];
199
200new cvar[cvars_num], gPlanter;
201new any:winnerteam, RoundCount, scoreT, scoreCT;
202new KillCount[33], Defused[33], Planter[33];
203
204new KilledCount[MAX_PLAYERS+1];
205new game_stats[MAX_PLAYERS+1][game_struct];
206new TakeDamage[MAX_PLAYERS+1][player_struct];
207
208new bool:first;
209new bool:Atlygis[33], pAtlygis;
210
211new csgo_password_field;
212new KeyChoice[33], Kiekis[33];
213
214//WISHES VARS
215new Wishes[33], DoubleXPExpire[33], DropBonusExpire[33], LastDay[33], Day;
216new cvar_BonusXP, cvar_WishesForDoubleXP, cvar_DropBonus, cvar_WishesPerDay, cvar_WishesForDropBonus, cvar_BonusXPLasts, cvar_DropBonusLasts;
217//END
218
219new const eWeapon[][] =
220{
221 "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
222 "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
223 "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy",
224 "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang",
225 "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
226};
227
228new const szWeaponNames[][] =
229{
230 "", "P228", "MP5 Navy", "SSG 08", "HE", "XM1014", "C4", "MAC-10", "Aug", "SG", "Elite",
231 "Five-Seven", "UMP-45", "SG-550", "Galil", "Famas", "USP-S", "Glock-18", "AWP", "MP5 Navy",
232 "M249", "M3", "M4A1-S", "TMP", "G3SG1", "FB", "Deagle", "SG-552", "AK-47", "", "P90"
233};
234
235public plugin_precache()
236{
237 register_dictionary("gamenet_global.txt");
238
239 get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));
240 log_errors("-------------------- == --------------------");
241
242 new Line[512], Data[10][128], Len;
243 AllWeapon++;
244 get_configsdir(Folder, 47);
245
246 new szCurrentMapName[MAX_NAME_LENGTH];
247 rh_get_mapname(szCurrentMapName, charsmax(szCurrentMapName));
248
249 format(SkinFile, 47, "%s/rcsgo/skins.cfg", Folder);
250
251 if(file_exists(SkinFile))
252 {
253 for(new i; i < file_size(SkinFile, 1); i++)
254 {
255 if(AllWeapon >= MAX)
256 {
257 log_errors("[plugin_precache] Increase your MAX define.");
258 break;
259 }
260
261 read_file(SkinFile, i, Line, 512, Len);
262
263 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
264 continue;
265
266 parse(Line, Data[0], 31, Data[1], 36, Data[2], 128, Data[3], 128, Data[4], 128, Data[5], 31, Data[6], 31, Data[7], 31, Data[8], 31, Data[9], 31);
267
268 Weapons[AllWeapon] = str_to_num(Data[0]);
269 copy(WeaponNames[AllWeapon], 63, Data[1]);
270
271 if(ValidMdl(Data[2]))
272 {
273 precache_model(Data[2]);
274 copy(WeaponMdls[AllWeapon], 128, Data[2]);
275
276 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
277 {
278 precache_model(Data[3]);
279 copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
280 }
281
282 if(file_exists(Data[4]) && strlen(Data[3]) > 5)
283 {
284 precache_model(Data[4]);
285 copy(WeaponMdlsW[AllWeapon], 128, Data[4]);
286 }
287 }
288
289 WeaponDrop[AllWeapon] = str_to_num(Data[5]);
290
291 chestsChance[str_to_num(Data[5])][str_to_num(Data[6])] += 1;
292 chestsList[str_to_num(Data[5])][str_to_num(Data[6])][str_to_num(Data[7])] = AllWeapon;
293
294 // log_amx("chestsList[%s][%s][%s] = %d", Data[5], Data[6], Data[7], AllWeapon);
295
296 WeaponPrice[AllWeapon] = str_to_num(Data[8]);
297
298 if(Data[9][0] == 'W') weaponRang[AllWeapon] = 1;
299 else if(Data[9][0] == 'B') weaponRang[AllWeapon] = 2;
300 else if(Data[9][0] == 'R') weaponRang[AllWeapon] = 3;
301 else if(Data[9][0] == 'Y') weaponRang[AllWeapon] = 4;
302 else weaponRang[AllWeapon] = 5; // All
303 AllWeapon++;
304 }
305 }
306 precache_sound(SOUND_SOLD);
307
308 g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);
309
310 new szTables[1280];
311
312 format(szTables, 1280, "CREATE TABLE IF NOT EXISTS `%s` (`username` varchar(128) COLLATE utf8_lithuanian_ci NOT NULL, `password` varchar(64) COLLATE utf8_lithuanian_ci NOT NULL, `points` int(11) NOT NULL, `keys` varchar(512) NOT NULL, `chests` varchar(512) NOT NULL, `skins` varchar(512) NOT NULL, `using_skins` varchar(512) NOT NULL, `skins_kills` varchar(512) NOT NULL, PRIMARY KEY (`username`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci", TABLE_NAME);
313 SQL_ThreadQuery(g_hTuple, "QueryCreateTable", szTables);
314}
315
316public plugin_init()
317{
318 register_plugin(PLUGIN, VERSION, AUTHOR);
319
320 //WISHES STUFF;
321 //INITIALIZING DAY VARIABLE.
322 new CurrentDay[3];
323 get_time("%d", CurrentDay, charsmax(CurrentDay));
324 Day = str_to_num(CurrentDay);
325 //REGISTERING CLIENT COMMANDS
326 register_clcmd("say /wishes", "WishesMenu");
327 register_clcmd("say_team /wishes", "WishesMenu");
328 register_clcmd("say /noras", "WishesMenu");
329 register_clcmd("say_team /noras", "WishesMenu");
330 //REGISTERING CVARS
331 cvar_DropBonus = register_cvar("wishes_dropbonus", "4"); //Kiek didesnis šansas gauti skrynią/raktą nusipirkus Drop Bonus.
332 cvar_BonusXP = register_cvar("wishes_xpbonus", "2"); //Kiek kartų gaus daugiau XP nusipirkus XP Bonus.
333 cvar_WishesPerDay = register_cvar("wishes_perday", "1"); //Kiek gaus norų už prisijungimą kasdien.
334 cvar_WishesForDoubleXP = register_cvar("wishes_xpcost", "3"); //DoubleXP norų kaina.
335 cvar_WishesForDropBonus = register_cvar("wishes_dropcost", "3"); //Drop bonuso norų kaina.
336 cvar_DropBonusLasts = register_cvar("wishes_dropbonuslasts", "86400"); //Kiek laiko bus įjungtas drop bonusas; 86400 = 1 diena;
337 cvar_BonusXPLasts = register_cvar("wishes_bonusxplasts", "604800"); //Kiek laiko bus įjungtas xp bonusas; 604800 = 7 dienos;
338 //WISHES STUFF; END.
339
340 register_box_content("");
341
342 register_clcmd("radio1", "MenuOpen");
343
344 register_clcmd("say menu", "MenuOpen");
345 register_clcmd("say /menu", "MenuOpen");
346
347 register_clcmd("say reg", "RegMenu");
348 register_clcmd("say /reg", "RegMenu");
349
350 register_clcmd("say savepass", "SavePassword");
351 register_clcmd("say /savepass", "SavePassword");
352
353 register_concmd("Cost", "MarketCost");
354 register_concmd("Price", "MarketPrice");
355
356 register_concmd("PriceBlue", "MarketPriceBlue");
357 register_concmd("PriceRed", "MarketPriceRed");
358 register_concmd("PriceRare", "MarketPriceRare");
359
360 register_concmd("Gift", "GiftPoint");
361
362 register_concmd("setKiekis", "setKiekis");
363 register_concmd("setAmount", "SetAmount");
364 register_concmd("setMarketAmount", "SetMarketAmount");
365
366 register_concmd("UserPassword", "PlayerPassword");
367
368 register_forward(FM_SetModel, "SetModel", 1);
369 register_forward(FM_ClientUserInfoChanged, "NameChange");
370
371 RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true);
372 RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_killed", true);
373 RegisterHookChain(RG_CBasePlayer_TakeDamage, "CBasePlayer_TakeDamage", true);
374
375 RegisterHookChain(RG_PlantBomb, "PlantBomb", true);
376 RegisterHookChain(RG_CSGameRules_DeathNotice, "DeathMsg", true);
377 RegisterHookChain(RG_CGrenade_ExplodeBomb, "ExplodeBomb", true);
378 RegisterHookChain(RG_CBasePlayer_AddAccount, "AddAccount", true);
379 RegisterHookChain(RG_CGrenade_DefuseBombEnd, "DefuseBombEnd", true);
380 RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Pre", false);
381
382 register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin");
383 register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin");
384
385 for(new i; i < sizeof(eWeapon); i++)
386 {
387 if(strlen(eWeapon[i]) > 3)
388 {
389 RegisterHam(Ham_Item_Deploy, eWeapon[i], "WeaponSwitch", 1);
390 }
391 }
392
393 cvar[KILL_HS] = register_cvar("frag_hs","2");
394 cvar[KILL_FRAG] = register_cvar("frag_kill","3");
395
396 cvar[PLANT] = register_cvar("c4_plant", "3");
397 cvar[EXPLODE] = register_cvar("c4_explode", "3");
398 cvar[DEFUSED] = register_cvar("c4_defused", "7");
399
400 cvar[HOST_GOT] = register_cvar("hostage_got", "1");
401 cvar[HOST_KILL] = register_cvar("hostage_kill", "-15");
402 cvar[HOST_RESCUE] = register_cvar("hostage_rescue", "1");
403
404 cvar[VIP_KILLED] = register_cvar("vip_frag", "1");
405 cvar[VIP_ESCAPED] = register_cvar("vip_escaped", "3");
406
407 csgo_password_field = register_cvar("sv_password_field", "_rcsgo");
408
409 register_cvar("sv_show_nick", "0");
410
411 g_msgid_SyncHud = CreateHudSyncObj();
412 g_msgid_AmmoX = get_user_msgid("AmmoX");
413 g_msgid_ScreenFade = get_user_msgid("ScreenFade");
414
415 set_task(5.0, "LoadConnected");
416
417 gCanLoad = 0, gCanSave = 0;
418
419 new iEnt = -1;
420
421 while((iEnt = find_ent_by_class(iEnt, "env_sound")))
422 {
423 DispatchKeyValue(iEnt, "roomtype", "0"); DispatchKeyValue(iEnt, "radius", "0");
424 }
425 format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
426
427 #if AMXX_VERSION_NUM < 183
428 MaxClients = get_maxplayers();
429 #endif
430}
431
432public plugin_natives()
433{
434 register_native("get_user_points", "native_get_user_points", 1);
435 register_native("set_user_points", "native_set_user_points", 1);
436}
437
438public native_get_user_points(id)
439{
440 return Points[id];
441}
442
443public native_set_user_points(id, amount)
444{
445 Points[id] = amount;
446 SavePoints(id);
447}
448
449public sb_pickup_event(id)
450{
451 if(!Loged[id]) { RegMenu(id); return; }
452
453 new Float:rNum = random_float((random(5)*1.0), 100.0);
454 new chance = (rNum <= 5.0) ? 5 : (rNum <= 25.0) ? 25 : 100;
455 new cNum = random(CHEST_COUNT)+1, pNum = random_num(MIN_POINTS_REWARD, MAX_POINTS_REWARD);
456
457 if(chance <= 5)
458 {
459 Keys[id][cNum]++;
460 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "PICK_TAKEN_KEYS", Prefix, get_user_name_ex(id), keys_name(cNum));
461 SaveKeys(id);
462 }
463 else if(chance <= 25)
464 {
465 Chest[id][cNum]++;
466 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "PICK_TAKEN_CHEST", Prefix, get_user_name_ex(id), chest_name(cNum));
467 SaveChests(id);
468 }
469 else
470 {
471 Points[id] += pNum;
472 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "PICK_TAKEN_POINTS", Prefix, get_user_name_ex(id), pNum);
473 SavePoints(id);
474 }
475}
476
477public plugin_cfg()
478{
479 if(!g_hTuple)
480 {
481 g_hTuple = SQL_MakeStdTuple();
482 }
483 return 1;
484}
485
486public SavePassword(id)
487{
488 if(!Loged[id])
489 {
490 if(!gRegistered[id])
491 {
492 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
493 } else {
494 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
495 }
496 return PLUGIN_HANDLED;
497 }
498
499 new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
500 set_user_info(id, passfield, SavedPassword[id]);
501
502 client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]);
503 print_color(id, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
504
505 return PLUGIN_HANDLED;
506}
507
508public LoadConnected()
509{
510 gCanLoad = 1;
511 gCanSave = 1;
512
513 for(new i = 1; i <= MaxClients; i++)
514 {
515 if(is_user_connected(i))
516 {
517 add_delay(i);
518 }
519 }
520}
521
522public plugin_end()
523{
524 SQL_FreeHandle(g_hTuple);
525}
526
527public CBasePlayer_Spawn(const id, bool:addDefault, bool:equipGame)
528{
529 if(!is_user_connected(id))
530 return HC_CONTINUE;
531
532 if(!Loged[id] && gRegistered[id])
533 {
534 RegMenu(id);
535 set_user_maxspeed(id, 1.0);
536
537 if(!equal(Password[id], SavedPassword[id]))
538 {
539 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
540 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
541 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
542 }
543
544 if(!gRegistered[id])
545 {
546 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
547 }
548
549 if(get_member(id, m_iTeam) == TEAM_CT && !get_member(id, m_bHasDefuser))
550 rg_give_defusekit(id, true);
551 }
552 return HC_CONTINUE;
553}
554
555public CBasePlayer_TakeDamage(id, inflictor, attacker, Float:damage, damageType)
556{
557 if(id == attacker || attacker < 1 || attacker > MaxClients)
558 {
559 return HC_CONTINUE;
560 }
561
562 if(inflictor != attacker && ~damageType & DMG_GRENADE)
563 {
564 return HC_CONTINUE;
565 }
566
567 if(get_member(id, attacker))
568 {
569 TakeDamage[attacker][PLAYER_DMG] += floatround(damage);
570 }
571
572 if(get_member(id, m_LastHitGroup) == HIT_HEAD)
573 {
574 TakeDamage[attacker][PLAYER_HS]++;
575 }
576 return HC_CONTINUE;
577}
578
579public CBasePlayer_killed(id, killer)
580{
581 if(id == killer || killer < 1 || killer > MaxClients)
582 {
583 return HC_CONTINUE;
584 }
585
586 if(get_playersnum() >= 10)
587 {
588 if(get_member(id, m_iTeam) == TEAM_CT && get_member(killer, m_iTeam) == TEAM_TERRORIST)
589 {
590 KilledCount[killer]++;
591 }
592
593 if(!first && get_member(id, m_iTeam) == TEAM_TERRORIST)
594 {
595 first = true;
596 game_stats[id][RUSHER]++;
597 }
598 game_stats[killer][(get_member(killer, m_iTeam) == TEAM_TERRORIST) ? ATTACKER : DEFENDER]++;
599 }
600 return HC_CONTINUE;
601}
602
603public DeathMsg(const victim, const killer, pevInflictor)
604{
605 if(!(0 < killer <= MaxClients) || killer == victim || !is_user_connected(victim) || !is_user_connected(killer))
606 return;
607
608 if(!gRegistered[victim])
609 {
610 client_print_color(victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
611 client_print_color(victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
612 client_print_color(victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
613 }
614
615 if(!gRegistered[killer])
616 {
617 client_print_color(killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
618 client_print_color(killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
619 client_print_color(killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
620 }
621
622 if(KillCount[killer] == ATTACKER_CHEST)
623 {
624 new cNum = random(CHEST_COUNT+1);
625 Chest[killer][cNum]++;
626 SaveChests(killer);
627
628 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_CHEST", Prefix, get_user_name_ex(killer), chest_name(cNum));
629
630 KillCount[killer] = 0;
631 }
632 else
633 {
634 KillCount[killer]++;
635 }
636
637 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
638
639 if(get_member(victim, m_bHeadshotKilled))
640 {
641 new bool:check = isXPActive(killer);
642 new rNum = get_pcvar_num(cvar[KILL_HS+KILL_FRAG]);
643
644 if(check)
645 {
646 new multiplier = get_pcvar_num(cvar_BonusXP);
647 rNum *= multiplier;
648 }
649
650 Points[killer] += rNum;
651 Ach[killer][1]++;
652
653 show_hudmessage(killer, "%L", LANG_PLAYER, "POINT", rNum);
654 SaveAch(killer);
655 }
656 else
657 {
658 new bool:check = isXPActive(killer);
659 new rNum = get_pcvar_num(cvar[KILL_FRAG]);
660
661 if(check)
662 {
663 new multiplier = get_pcvar_num(cvar_BonusXP);
664 rNum *= multiplier;
665 }
666
667 Points[killer] += rNum;
668 Ach[killer][1]++;
669
670 show_hudmessage(killer, "%L", LANG_PLAYER, "POINT", rNum);
671 SaveAch(killer);
672 }
673
674 new Float:flGameTime = get_gametime();
675
676 if(GetUserFlash(victim) > flGameTime)
677 {
678 Ach[killer][7]++;
679 SaveAch(killer);
680
681 }
682
683 if(GetUserFlash(killer) > flGameTime)
684 {
685 Ach[killer][8]++;
686 SaveAch(killer);
687 }
688}
689
690Float:GetUserFlash(const iPlayer)
691{
692 #define m_flFlashedUntil 514
693 #define m_flFlashHoldTime 516
694
695 new Float:flFlashedUntil = get_pdata_float(iPlayer, m_flFlashedUntil);
696
697 if(!flFlashedUntil)
698 {
699 return 0.0;
700 }
701
702 new Float:flFlashHoldTime = get_pdata_float(iPlayer, m_flFlashHoldTime);
703
704 return flFlashedUntil + (flFlashHoldTime - (flFlashHoldTime * 0.33));
705}
706
707public ExplodeBomb(const this, tracehandle, const bitsDamageType)
708{
709 new rNum = get_pcvar_num(cvar[EXPLODE]);
710 new check = isXPActive(gPlanter);
711
712 if(check)
713 {
714 new multiplier = get_pcvar_num(cvar_BonusXP);
715 rNum *= multiplier;
716 }
717
718 Points[gPlanter] += rNum;
719 SavePoints(gPlanter);
720
721 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
722 show_hudmessage(gPlanter, "%L", LANG_PLAYER, "POINT", rNum);
723
724 KilledCount[gPlanter] += 3;
725
726 Ach[gPlanter][7]++;
727 SaveAch(gPlanter);
728}
729
730public PlantBomb(id, Float:vecStart[3], Float:vecVelocity[3])
731{
732 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
733
734 gPlanter = id;
735
736 Ach[id][2]++;
737 SaveAch(id);
738
739 Planter[id]++;
740
741 if(Planter[id] == PLANTER_CHEST)
742 {
743 new cNum = random(CHEST_COUNT)+1;
744 Chest[id][cNum]++;
745 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_CHEST", Prefix, get_user_name_ex(id), chest_name(cNum));
746 SaveChests(id);
747 }
748 else
749 {
750 new check = isXPActive(id);
751 new rNum = get_pcvar_num(cvar[PLANT]);
752
753 if(check)
754 {
755 new multiplier = get_pcvar_num(cvar_BonusXP);
756 rNum *= multiplier;
757 }
758
759 Points[id] += rNum;
760 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
761 SavePoints(id);
762 }
763}
764
765public DefuseBombEnd(const this, const id, bool:bDefused)
766{
767 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
768
769 if(bDefused)
770 {
771 Ach[id][3]++;
772 SaveAch(id);
773
774 Defused[id]++;
775
776 if(Defused[id] == DEFUSED_CHEST)
777 {
778 new cNum = random(CHEST_COUNT)+1;
779 Chest[id][cNum]++;
780 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_CHEST", Prefix, get_user_name_ex(id), chest_name(cNum));
781 SaveChests(id);
782 }
783 else
784 {
785 new check = isXPActive(id);
786 new rNum = get_pcvar_num(cvar[DEFUSED]);
787
788 if(check)
789 {
790 new multiplier = get_pcvar_num(cvar_BonusXP);
791 rNum *= multiplier;
792 }
793
794 Points[id] += rNum;
795 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
796 SavePoints(id);
797 }
798 }
799}
800
801public AddAccount(const id, amount, RewardType:type, bool:bTrackChange)
802{
803 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
804
805 new check = isXPActive(id);
806 new multiplier = get_pcvar_num(cvar_BonusXP);
807
808 switch(type)
809 {
810 case RT_HOSTAGE_TOOK:
811 {
812 new rNum = get_pcvar_num(cvar[HOST_GOT]);
813
814 if(check)
815 {
816 rNum *= multiplier;
817 }
818
819 Points[id] += rNum;
820 SavePoints(id);
821 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
822 }
823 case RT_HOSTAGE_RESCUED:
824 {
825 new rNum = get_pcvar_num(cvar[HOST_RESCUE]);
826
827 if(check)
828 {
829 rNum *= multiplier;
830 }
831
832 Points[id] += rNum;
833 SavePoints(id);
834 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
835 }
836 case RT_HOSTAGE_KILLED:
837 {
838 new rNum = get_pcvar_num(cvar[HOST_KILL]);
839
840 if(check)
841 {
842 rNum *= multiplier;
843 }
844
845 Points[id] += rNum;
846 SavePoints(id);
847 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
848 }
849 case RT_VIP_KILLED:
850 {
851 new rNum = get_pcvar_num(cvar[VIP_KILLED]);
852
853 if(check)
854 {
855 rNum *= multiplier;
856 }
857
858 Points[id] += rNum;
859 SavePoints(id);
860 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
861 }
862 case RT_VIP_RESCUED_MYSELF:
863 {
864 new rNum = get_pcvar_num(cvar[VIP_ESCAPED]);
865
866 if(check)
867 {
868 rNum *= multiplier;
869 }
870
871 Points[id] += rNum;
872 SavePoints(id);
873 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", rNum);
874 }
875 }
876}
877
878public CSGameRules_RestartRound_Pre()
879{
880 if(get_member_game(m_bCompleteReset))
881 {
882 pAtlygis = 0;
883 RoundCount = 0;
884 arrayset(KilledCount, 0, sizeof(KilledCount));
885 client_print_color(0, print_team_default, "%s HF & GL!", Prefix);
886 }
887
888 if(get_playersnum() >= 4)
889 {
890 if(pAtlygis <= 15) { pAtlygis++; }
891 }
892
893 if(get_playersnum() >= 15)
894 {
895 arrayset(KilledCount, 0, sizeof(KilledCount));
896 first = false;
897
898 if(winnerteam)
899 {
900 display_stats(true);
901 winnerteam = CS_TEAM_UNASSIGNED;
902 }
903 }
904
905 new players[MAX_PLAYERS], pNum, player, i;
906 get_players(players, pNum, "a");
907
908 for(i = 0; i < pNum; i++)
909 {
910 player = players[i];
911
912 if(TakeDamage[player][PLAYER_DMG] > TAKE_DAMAGE)
913 {
914 new szName[MAX_NAME_LENGTH]; get_user_name(player, szName, 31);
915
916 new kNum = random(KEYS_COUNT)+1;
917 Keys[player][kNum]++;
918 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_KEYS_DAMAGE", Prefix, get_user_name_ex(player), keys_name(kNum));
919 arrayset(TakeDamage[player], 0, player_struct);
920 }
921 SaveKeys(player);
922 }
923
924 if(get_playersnum() >= 12)
925 {
926 if(RoundCount == MAX_ROUNDS)
927 {
928 new players[MAX_PLAYERS], count, iNum[3];
929 get_players(players, count, "a");
930
931 for(new i, rNum; i < 3; i++)
932 {
933 rNum = random(count--);
934 iNum[i] = players[rNum];
935 players[rNum] = players[count];
936
937 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
938 new pNum = random_num(MIN_POINTS_ROUNDS, MAX_POINTS_ROUNDS);
939
940 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
941
942 if(!is_user_connected(iNum[i]))
943 {
944 Points[iNum[i]] += pNum;
945 show_hudmessage(i, "%L", LANG_PLAYER, "POINT", pNum);
946 }
947 }
948 RoundCount = 0;
949 }
950 RoundCount++;
951 }
952 else if(get_playersnum() >= 4)
953 {
954 if(RoundCount == MAX_ROUNDS)
955 {
956 new players[MAX_PLAYERS], count, iNum[1];
957 get_players(players, count, "a");
958
959 for(new i, rNum; i < 1; i++)
960 {
961 rNum = random(count--);
962 iNum[i] = players[rNum];
963 players[rNum] = players[count];
964
965 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
966 new pNum = random_num(MIN_POINTS_ROUNDS, MAX_POINTS_ROUNDS);
967
968 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
969
970 if(!is_user_connected(iNum[i]))
971 {
972 Points[iNum[i]] += pNum;
973 show_hudmessage(i, "%L", LANG_PLAYER, "POINT", pNum);
974 }
975 }
976 RoundCount = 0;
977 }
978 RoundCount++;
979 }
980 return HC_CONTINUE;
981}
982
983public t_win(id)
984{
985 if(get_member_game(m_bCompleteReset))
986 {
987 scoreT = 0;
988 }
989
990 if(get_playersnum() >= 15)
991 {
992 if(scoreT == WIN_ROUNDS)
993 {
994 new players[MAX_PLAYERS], count, iNum[3];
995 get_players(players, count, "ceh", "TERRORIST");
996
997 for(new i, rNum; i < 3; i++)
998 {
999 rNum = random(count--);
1000 iNum[i] = players[rNum];
1001 players[rNum] = players[count];
1002
1003 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
1004 new pNum = random_num(MIN_POINTS_T, MAX_POINTS_T);
1005
1006 if(!is_user_alive(iNum[i]))
1007 {
1008 new check = isXPActive(iNum[i]);
1009
1010 if(check)
1011 {
1012 new multiplier = get_pcvar_num(cvar_BonusXP);
1013 pNum *= multiplier;
1014 }
1015
1016 Points[iNum[i]] += pNum;
1017 show_hudmessage(i, "%L", LANG_PLAYER, "POINT", pNum);
1018 }
1019
1020 if(!is_user_connected(iNum[i]))
1021 {
1022 new kNum = random(KEYS_COUNT)+1;
1023 Keys[id][kNum]++;
1024 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_KEYS_RND", Prefix, get_user_name_ex(id), keys_name(kNum));
1025 SaveKeys(i);
1026 }
1027 }
1028 scoreT = 0;
1029 }
1030 }
1031 else if(get_playersnum() >= 4)
1032 {
1033 if(scoreT == WIN_ROUNDS)
1034 {
1035 new players[MAX_PLAYERS], count, iNum[1];
1036 get_players(players, count, "ceh", "TERRORIST");
1037
1038 for(new i, rNum; i < 1; i++)
1039 {
1040 rNum = random(count--);
1041 iNum[i] = players[rNum];
1042 players[rNum] = players[count];
1043
1044 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
1045
1046 if(!is_user_connected(iNum[i]))
1047 {
1048 new kNum = random(KEYS_COUNT)+1;
1049 Keys[id][kNum]++;
1050 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_KEYS_RND", Prefix, get_user_name_ex(id), keys_name(kNum));
1051 SaveKeys(i);
1052 }
1053 }
1054 scoreT = 0;
1055 }
1056 }
1057 else if(scoreT <= WIN_ROUNDS)
1058 {
1059 new iPlayers[32], Num, iNum;
1060 get_players(iPlayers, Num, "ceh", "TERRORIST");
1061
1062 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
1063
1064 for(new i; i < Num; i++)
1065 {
1066 iNum = iPlayers[i];
1067
1068 if(get_member(iNum, m_iTeam) == TEAM_TERRORIST)
1069 {
1070 Points[iNum] += ROUND_WIN_POINTS;
1071 show_hudmessage(iNum, "%L", LANG_PLAYER, "POINT", iNum);
1072 }
1073 }
1074 scoreT = 0;
1075 }
1076
1077 if(scoreT < WIN_ROUNDS)
1078 {
1079 scoreT++;
1080 }
1081 winnerteam = TEAM_TERRORIST;
1082}
1083
1084public ct_win(id)
1085{
1086 if(get_member_game(m_bCompleteReset))
1087 {
1088 scoreCT = 0;
1089 }
1090
1091 if(get_playersnum() >= 15)
1092 {
1093 if(scoreCT == WIN_ROUNDS)
1094 {
1095 new players[MAX_PLAYERS], count, iNum[3];
1096 get_players(players, count, "ceh", "CT");
1097
1098 for(new i, rNum; i < 3; i++)
1099 {
1100 rNum = random(count--);
1101 iNum[i] = players[rNum];
1102 players[rNum] = players[count];
1103
1104 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
1105 new pNum = random_num(MIN_POINTS_T, MAX_POINTS_T);
1106
1107 if(!is_user_alive(iNum[i]))
1108 {
1109 Points[iNum[i]] += pNum;
1110 show_hudmessage(i, "%L", LANG_PLAYER, "POINT", pNum);
1111 }
1112
1113 if(!is_user_connected(iNum[i]))
1114 {
1115 new kNum = random(KEYS_COUNT)+1;
1116 Keys[id][kNum]++;
1117 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_KEYS_RND", Prefix, get_user_name_ex(id), keys_name(kNum));
1118 SaveKeys(i);
1119 }
1120 }
1121 scoreCT = 0;
1122 }
1123 }
1124 else if(get_playersnum() >= 4)
1125 {
1126 if(scoreCT == WIN_ROUNDS)
1127 {
1128 new players[MAX_PLAYERS], count, iNum[1];
1129 get_players(players, count, "ceh", "CT");
1130
1131 for(new i, rNum; i < 1; i++)
1132 {
1133 rNum = random(count--);
1134 iNum[i] = players[rNum];
1135 players[rNum] = players[count];
1136
1137 new szName[MAX_NAME_LENGTH]; get_user_name(iNum[i], szName, 31);
1138
1139 if(!is_user_connected(iNum[i]))
1140 {
1141 new kNum = random(KEYS_COUNT)+1;
1142 Keys[id][kNum]++;
1143 SaveKeys(i);
1144 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "TAKEN_KEYS_RND", Prefix, get_user_name_ex(id), keys_name(kNum));
1145 }
1146 }
1147 scoreCT = 0;
1148 }
1149 }
1150 else if(scoreCT <= WIN_ROUNDS)
1151 {
1152 new iPlayers[32], Num, iNum;
1153 get_players(iPlayers, Num, "ceh", "CT");
1154
1155 set_hudmessage(0, 234, 0, -1.0, 0.15, 0, 6.0, 1.0);
1156
1157 for(new i; i < Num; i++)
1158 {
1159 iNum = iPlayers[i];
1160
1161 if(get_member(iNum, m_iTeam) == TEAM_CT)
1162 {
1163
1164 Points[iNum] += ROUND_WIN_POINTS;
1165 show_hudmessage(iNum, "%L", LANG_PLAYER, "POINT", iNum);
1166 }
1167 }
1168 scoreCT = 0;
1169 }
1170
1171 if(scoreCT < WIN_ROUNDS)
1172 {
1173 scoreCT++;
1174 }
1175 winnerteam = TEAM_CT;
1176}
1177
1178public MenuOpen(id)
1179{
1180 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
1181
1182 aAmount[id] = 1;
1183 MenuMod[id] = 0;
1184 Menu(id);
1185 return PLUGIN_HANDLED;
1186}
1187
1188public MarketPrice(id)
1189{
1190 if(inMarket[id] || !Loged[id])
1191 return PLUGIN_HANDLED;
1192
1193 new Data[32], Price;
1194 read_args(Data, 31);
1195 remove_quotes(Data);
1196
1197 Price = str_to_num(Data);
1198
1199 if(Price < 0)
1200 {
1201 client_cmd(id, "messagemode Price");
1202 return PLUGIN_HANDLED;
1203 }
1204 else if(WHITE_MIN_PRICE > Price)
1205 {
1206 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, WHITE_MIN_PRICE);
1207 client_cmd(id, "messagemode Price");
1208 MarketPoints[id] = WHITE_MIN_PRICE;
1209 Menu(id);
1210 MenuMod[id] = 4;
1211 return PLUGIN_HANDLED;
1212 }
1213 else if(WHITE_MAX_PRICE < Price)
1214 {
1215 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, WHITE_MAX_PRICE);
1216 client_cmd(id, "messagemode Price");
1217 MarketPoints[id] = WHITE_MAX_PRICE;
1218 Menu(id);
1219 MenuMod[id] = 4;
1220 return PLUGIN_HANDLED;
1221 }
1222 else
1223 {
1224 MarketPoints[id] = Price;
1225 Menu(id);
1226 MenuMod[id] = 4;
1227 return PLUGIN_CONTINUE;
1228 }
1229}
1230
1231public MarketPriceBlue(id)
1232{
1233 if(inMarket[id] || !Loged[id])
1234 return PLUGIN_HANDLED;
1235
1236 new Data[32], PriceBlue;
1237 read_args(Data, 31);
1238 remove_quotes(Data);
1239
1240 PriceBlue = str_to_num(Data);
1241
1242 if(PriceBlue < 0)
1243 {
1244 client_cmd(id, "messagemode PriceBlue");
1245 return PLUGIN_HANDLED;
1246 }
1247 else if(BLUE_MIN_PRICE > PriceBlue)
1248 {
1249 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, BLUE_MIN_PRICE);
1250 client_cmd(id, "messagemode PriceBlue");
1251 MarketPoints[id] = BLUE_MIN_PRICE;
1252 Menu(id);
1253 MenuMod[id] = 4;
1254 return PLUGIN_HANDLED;
1255 }
1256 else if(BLUE_MAX_PRICE < PriceBlue)
1257 {
1258 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, BLUE_MAX_PRICE);
1259 client_cmd(id, "messagemode PriceBlue");
1260 MarketPoints[id] = BLUE_MAX_PRICE;
1261 Menu(id);
1262 MenuMod[id] = 4;
1263 return PLUGIN_HANDLED;
1264 }
1265 else
1266 {
1267 MarketPoints[id] = PriceBlue;
1268 Menu(id);
1269 MenuMod[id] = 4;
1270 return PLUGIN_CONTINUE;
1271 }
1272}
1273
1274public MarketPriceRed(id)
1275{
1276 if(inMarket[id] || !Loged[id])
1277 return PLUGIN_HANDLED;
1278
1279 new Data[32], PriceRed;
1280 read_args(Data, 31);
1281 remove_quotes(Data);
1282
1283 PriceRed = str_to_num(Data);
1284
1285 if(PriceRed < 0)
1286 {
1287 client_cmd(id, "messagemode PriceRed");
1288 return PLUGIN_HANDLED;
1289 }
1290 else if(RED_MIN_PRICE > PriceRed)
1291 {
1292 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, RED_MIN_PRICE);
1293 client_cmd(id, "messagemode PriceRed");
1294 MarketPoints[id] = RED_MIN_PRICE;
1295 Menu(id);
1296 MenuMod[id] = 4;
1297 return PLUGIN_HANDLED;
1298 }
1299 else if(RED_MAX_PRICE < PriceRed)
1300 {
1301 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, RED_MAX_PRICE);
1302 client_cmd(id, "messagemode PriceRed");
1303 MarketPoints[id] = RED_MAX_PRICE;
1304 Menu(id);
1305 MenuMod[id] = 4;
1306 return PLUGIN_HANDLED;
1307 }
1308 else
1309 {
1310 MarketPoints[id] = PriceRed;
1311 Menu(id);
1312 MenuMod[id] = 4;
1313 return PLUGIN_CONTINUE;
1314 }
1315}
1316
1317public MarketPriceRare(id)
1318{
1319 if(inMarket[id] || !Loged[id])
1320 return PLUGIN_HANDLED;
1321
1322 new Data[32], PriceRare;
1323 read_args(Data, 31);
1324 remove_quotes(Data);
1325
1326 PriceRare = str_to_num(Data);
1327
1328 if(PriceRare < 0)
1329 {
1330 client_cmd(id, "messagemode PriceRare");
1331 return PLUGIN_HANDLED;
1332 }
1333 else if(RARE_MIN_PRICE > PriceRare)
1334 {
1335 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, RARE_MIN_PRICE);
1336 client_cmd(id, "messagemode PriceRare");
1337 MarketPoints[id] = RARE_MIN_PRICE;
1338 Menu(id);
1339 MenuMod[id] = 4;
1340 return PLUGIN_HANDLED;
1341 }
1342 else if(RARE_MAX_PRICE < PriceRare)
1343 {
1344 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, RARE_MAX_PRICE);
1345 client_cmd(id, "messagemode PriceRare");
1346 MarketPoints[id] = RARE_MAX_PRICE;
1347 Menu(id);
1348 MenuMod[id] = 4;
1349 return PLUGIN_HANDLED;
1350 }
1351 else
1352 {
1353 MarketPoints[id] = PriceRare;
1354 Menu(id);
1355 MenuMod[id] = 4;
1356 return PLUGIN_CONTINUE;
1357 }
1358}
1359
1360public MarketCost(id)
1361{
1362 if(inMarket[id] || !Loged[id])
1363 return PLUGIN_HANDLED;
1364
1365 new Data[32], Cost;
1366 read_args(Data, 31);
1367 remove_quotes(Data);
1368
1369 Cost = str_to_num(Data);
1370
1371 switch(WeaponinMarket[id])
1372 {
1373 case CHEST_ID..(CHEST_ID+CHEST_COUNT):
1374 {
1375 if(Cost < 0)
1376 {
1377 client_cmd(id, "messagemode Cost");
1378 return PLUGIN_HANDLED;
1379 }
1380 else if(CHESTS_MIN_PRICE > Cost)
1381 {
1382 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, CHESTS_MIN_PRICE);
1383 client_cmd(id, "messagemode Cost");
1384 MarketPoints[id] = CHESTS_MIN_PRICE;
1385 Menu(id);
1386 MenuMod[id] = 4;
1387 return PLUGIN_HANDLED;
1388 }
1389 else if(CHESTS_MAX_PRICE < Cost)
1390 {
1391 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, CHESTS_MAX_PRICE);
1392 client_cmd(id, "messagemode Cost");
1393 MarketPoints[id] = CHESTS_MAX_PRICE;
1394 Menu(id);
1395 MenuMod[id] = 4;
1396 return PLUGIN_HANDLED;
1397 }
1398 else
1399 {
1400 MarketPoints[id] = Cost;
1401 Menu(id);
1402 MenuMod[id] = 4;
1403 return PLUGIN_CONTINUE;
1404 }
1405 }
1406 case KEYS_ID..(KEYS_ID+KEYS_COUNT):
1407 {
1408 if(Cost < 0)
1409 {
1410 client_cmd(id, "messagemode Cost");
1411 return PLUGIN_HANDLED;
1412 }
1413 else if(KEYS_MIN_PRICE > Cost)
1414 {
1415 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, KEYS_MIN_PRICE);
1416 client_cmd(id, "messagemode Cost");
1417 MarketPoints[id] = KEYS_MIN_PRICE;
1418 Menu(id);
1419 MenuMod[id] = 4;
1420 return PLUGIN_HANDLED;
1421 }
1422 else if(KEYS_MAX_PRICE < Cost)
1423 {
1424 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, KEYS_MAX_PRICE);
1425 client_cmd(id, "messagemode Cost");
1426 MarketPoints[id] = KEYS_MAX_PRICE;
1427 Menu(id);
1428 MenuMod[id] = 4;
1429 return PLUGIN_HANDLED;
1430 }
1431 else
1432 {
1433 MarketPoints[id] = Cost;
1434 Menu(id);
1435 MenuMod[id] = 4;
1436 return PLUGIN_CONTINUE;
1437 }
1438 }
1439 default:
1440 {
1441 if(Cost < 0)
1442 {
1443 client_cmd(id, "messagemode Cost");
1444 return PLUGIN_HANDLED;
1445 }
1446 else if(MARKET_MIN_PRICE > Cost)
1447 {
1448 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
1449 client_cmd(id, "messagemode Cost");
1450 MarketPoints[id] = MARKET_MIN_PRICE;
1451 Menu(id);
1452 MenuMod[id] = 4;
1453 return PLUGIN_HANDLED;
1454 }
1455 else if(MARKET_MAX_PRICE < Cost)
1456 {
1457 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ENOUGHTMAXMARKET", Prefix, MARKET_MAX_PRICE);
1458 client_cmd(id, "messagemode Cost");
1459 MarketPoints[id] = MARKET_MAX_PRICE;
1460 Menu(id);
1461 MenuMod[id] = 4;
1462 return PLUGIN_HANDLED;
1463 }
1464 else
1465 {
1466 MarketPoints[id] = Cost;
1467 Menu(id);
1468 MenuMod[id] = 4;
1469 return PLUGIN_CONTINUE;
1470 }
1471 }
1472 }
1473 return PLUGIN_CONTINUE;
1474}
1475
1476public SetMarketAmount(const id)
1477{
1478 if(!Loged[id])
1479 return PLUGIN_HANDLED;
1480
1481 new Data[32], Cost;
1482 read_args(Data, 31);
1483 remove_quotes(Data);
1484
1485 Cost = str_to_num(Data);
1486
1487 switch(WeaponinMarket[id])
1488 {
1489 case CHEST_ID..(CHEST_ID+CHEST_COUNT):
1490 {
1491 if(Cost < 1)
1492 {
1493 client_cmd(id, "messagemode setMarketAmount");
1494 return PLUGIN_HANDLED;
1495 }
1496 else if(Chest[id][id] < Cost)
1497 {
1498 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CHESTS_ENOUGH", Prefix, Chest[id][id]);
1499 client_cmd(id, "messagemode setMarketAmount");
1500 mAmount[id] = Chest[id][id];
1501 Menu(id);
1502 MenuMod[id] = 4;
1503 return PLUGIN_HANDLED;
1504 }
1505 else
1506 {
1507 mAmount[id] = Cost;
1508 Menu(id);
1509 MenuMod[id] = 4;
1510 }
1511 }
1512 case KEYS_ID..(KEYS_ID+KEYS_COUNT):
1513 {
1514 if(Cost < 1)
1515 {
1516 client_cmd(id, "messagemode setMarketAmount");
1517 return PLUGIN_HANDLED;
1518 }
1519 else if(Keys[id][id] < Cost)
1520 {
1521 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KEYS_ENOUGH", Prefix, Keys[id][id]);
1522 client_cmd(id, "messagemode setMarketAmount");
1523 mAmount[id] = Keys[id][id];
1524 Menu(id);
1525 MenuMod[id] = 4;
1526 return PLUGIN_HANDLED;
1527 }
1528 else
1529 {
1530 mAmount[id] = Cost;
1531 Menu(id);
1532 MenuMod[id] = 4;
1533 }
1534 }
1535 default:
1536 {
1537 if(Cost < 1)
1538 {
1539 client_cmd(id, "messagemode setMarketAmount");
1540 return PLUGIN_HANDLED;
1541 }
1542 else
1543 {
1544 mAmount[id] = Cost;
1545 Menu(id);
1546 MenuMod[id] = 4;
1547 }
1548 }
1549 }
1550 return PLUGIN_CONTINUE;
1551}
1552
1553public SetAmount(const id)
1554{
1555 if(!Loged[id])
1556 return PLUGIN_HANDLED;
1557
1558 new Data[32], Cost;
1559 read_args(Data, 31);
1560 remove_quotes(Data);
1561
1562 Cost = str_to_num(Data);
1563
1564 if(Cost < 0)
1565 {
1566 client_cmd(id, "messagemode setAmount");
1567 return PLUGIN_HANDLED;
1568 }
1569 else
1570 {
1571 aAmount[id] = Cost;
1572 Menu(id);
1573 MenuMod[id] = 7;
1574 }
1575 return PLUGIN_HANDLED;
1576}
1577
1578public setKiekis(id)
1579{
1580 if(!Loged[id])
1581 return PLUGIN_HANDLED;
1582
1583 new Data[32], Cost;
1584 read_args(Data, 31);
1585 remove_quotes(Data);
1586
1587 Cost = str_to_num(Data);
1588
1589 if(Cost < 0 && Cost > 1000)
1590 {
1591 client_cmd(id, "messagemode setKiekis");
1592 return PLUGIN_HANDLED;
1593 }
1594 else
1595 {
1596 Kiekis[id] = Cost;
1597 return PLUGIN_CONTINUE;
1598 }
1599}
1600
1601public GiftPoint(const id)
1602{
1603 if(inMarket[id] || !Loged[id])
1604 return PLUGIN_HANDLED;
1605
1606 new Data[32], Cost;
1607 read_args(Data, 31);
1608 remove_quotes(Data);
1609
1610 Cost = str_to_num(Data);
1611
1612 if(Cost < 0 || Points[id] < Cost)
1613 {
1614 client_cmd(id, "messagemode Gift");
1615 return PLUGIN_HANDLED;
1616 }
1617 else
1618 {
1619 aPoints[id] = Cost;
1620 Menu(id);
1621 MenuMod[id] = 7;
1622 return PLUGIN_CONTINUE;
1623 }
1624}
1625
1626public SetModel(entity, const model[])
1627{
1628 if(!pev_valid(entity))
1629 return FMRES_IGNORED;
1630
1631 new classname[32]; pev(entity, pev_classname, classname, sizeof(classname));
1632
1633 if(!equal(classname, "weaponbox"))
1634 return FMRES_IGNORED;
1635
1636 new id; id = pev(entity, pev_owner);
1637 new wid; wid = get_user_weapon(id, _, _);
1638 new weapon; weapon = find_ent_by_owner(-1, eWeapon[wid], id);
1639
1640 if(!is_user_connected(id))
1641 {
1642 return FMRES_SUPERCEDE;
1643 }
1644
1645 set_pev(weapon, pev_impulse, bUsingGuns[id][wid]);
1646
1647 if(!pev(weapon, pev_impulse))
1648 {
1649 set_pev(weapon, pev_impulse, bUsingGuns[id][wid]);
1650
1651 if(strlen(WeaponMdlsW[pev(weapon, pev_impulse)]) > 5)
1652 {
1653 engfunc(EngFunc_SetModel, entity, WeaponMdlsW[bUsingGuns[id][wid]]);
1654 }
1655 return FMRES_SUPERCEDE;
1656 }
1657 else if(bUsingGuns[id][wid])
1658 {
1659 set_pev(weapon, pev_impulse, bUsingGuns[id][wid]);
1660
1661 if(strlen(WeaponMdlsW[bUsingGuns[id][wid]]) > 5)
1662 {
1663 engfunc(EngFunc_SetModel, entity, WeaponMdlsW[bUsingGuns[id][wid]]);
1664 }
1665 return FMRES_SUPERCEDE;
1666 }
1667 return FMRES_IGNORED;
1668}
1669
1670public WeaponSwitch(Weapon)
1671{
1672 new id = get_pdata_cbase(Weapon, 41, 4);
1673 new wid = cs_get_weapon_id(Weapon);
1674
1675 if(id > 32 || id < 1)
1676 {
1677 return HAM_SUPERCEDE;
1678 }
1679
1680 if(!is_user_connected(id))
1681 {
1682 return HAM_SUPERCEDE;
1683 }
1684
1685 if(pev(Weapon, pev_impulse))
1686 {
1687 set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
1688
1689 if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5)
1690 {
1691 set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
1692 }
1693 }
1694 else if(bUsingGuns[id][wid])
1695 {
1696 set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
1697
1698 if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5)
1699 {
1700 set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
1701 }
1702
1703 set_task(0.1, "UpdateStatusText", id);
1704 }
1705 else { set_task(0.1, "UpdateStatusText", id); }
1706 return HAM_IGNORED;
1707}
1708
1709public Menu(id)
1710{
1711 if(!Loged[id]) { RegMenu(id); return; }
1712
1713 new sMenu, szText[512];
1714
1715 switch(MenuMod[id])
1716 {
1717 case -2:
1718 {
1719 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w -\r %L %L", LANG_PLAYER, "MARKETPLACE", LANG_PLAYER, "YPOINT", Points[id]);
1720 sMenu = menu_create(szText, "MenuHandler");
1721
1722 new String[32], All;
1723
1724 for(new i = 1; i < AllWeapon; i++)
1725 {
1726 if(uWeapon[i][id] <= 0)
1727 continue;
1728
1729 num_to_str(i, String, 31);
1730 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1731 menu_additem(sMenu, szText, String);
1732 All++;
1733 }
1734
1735 for(new i = 1; i <= CHEST_COUNT; i++)
1736 {
1737 if(Chest[id][i] > 0)
1738 {
1739 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1740
1741 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
1742 menu_additem(sMenu, szText, szButton);
1743 All++;
1744 }
1745 }
1746
1747 for(new i = 1; i <= KEYS_COUNT; i++)
1748 {
1749 if(Keys[id][i] > 0)
1750 {
1751 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", keys_name(i), Keys[id][i]);
1752
1753 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", KEYS_ID+i);
1754 menu_additem(sMenu, szText, szButton);
1755 All++;
1756 }
1757 }
1758
1759 if(All == 0)
1760 {
1761 MenuMod[id] = 0;
1762 Menu(id);
1763 }
1764 }
1765 case -1: // Deti i turgu
1766 {
1767 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w -\r %L %L", LANG_PLAYER, "MARKETPLACE", LANG_PLAYER, "YPOINT", Points[id]);
1768 sMenu = menu_create(szText, "MenuHandler");
1769
1770 new String[32], All;
1771
1772 for(new i = 1; i < AllWeapon; i++)
1773 {
1774 if(uWeapon[i][id] <= 0)
1775 continue;
1776
1777 num_to_str(i, String, 31);
1778 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1779 menu_additem(sMenu, szText, String);
1780 All++;
1781 }
1782
1783 for(new i = 1; i <= CHEST_COUNT; i++)
1784 {
1785 if(Chest[id][i] > 0)
1786 {
1787 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1788
1789 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
1790 menu_additem(sMenu, szText, szButton);
1791
1792 All++;
1793 }
1794 }
1795
1796 for(new i = 1; i <= KEYS_COUNT; i++)
1797 {
1798 if(Keys[id][i] > 0)
1799 {
1800 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", keys_name(i), Keys[id][i]);
1801
1802 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", KEYS_ID+i-1);
1803 menu_additem(sMenu, szText, szButton);
1804
1805 All++;
1806 }
1807 }
1808
1809 if(All == 0)
1810 {
1811 MenuMod[id] = 0;
1812 Menu(id);
1813 }
1814 }
1815 case 0:
1816 {
1817 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
1818 sMenu = menu_create(szText, "MenuHandler");
1819
1820 formatex(szText, sizeof(szText), "%L^n\r------------", LANG_PLAYER, "MAINTOSKINS", LANG_PLAYER);
1821 menu_additem(sMenu, szText, "1");
1822
1823 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOCASES", LANG_PLAYER);
1824 menu_additem(sMenu, szText, "2");
1825
1826 if(!Atlygis[id] && pAtlygis >= MAX_ROUNDS)
1827 {
1828 formatex(szText, sizeof(szText), "Atlygis \w[\rAtsiimti Atlygį\w]^n\r------------");
1829 menu_additem(sMenu, szText, "3");
1830 }
1831 else if(Atlygis[id])
1832 {
1833 formatex(szText, sizeof(szText), "\dAtlygis \w[\rJau Atsiėmei Atlygį\w]^n\r------------");
1834 menu_additem(sMenu, szText, "0");
1835 }
1836 else
1837 {
1838 formatex(szText, sizeof(szText), "\dAtlygis \w[\r%d/%d\w]^n\r------------", pAtlygis, MAX_ROUNDS);
1839 menu_additem(sMenu, szText, "0");
1840 }
1841
1842 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINMARKETS");
1843 menu_additem(sMenu, szText, "4");
1844
1845 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOTRASH");
1846 menu_additem(sMenu, szText, "5");
1847
1848 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINUPTRADE");
1849 menu_additem(sMenu, szText, "6");
1850
1851 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOGIFTS");
1852 menu_additem(sMenu, szText, "7");
1853
1854 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOSSHOP");
1855 menu_additem(sMenu, szText, "8");
1856
1857 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOMISSIONS");
1858 menu_additem(sMenu, szText, "9");
1859
1860 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOCLAN");
1861 menu_additem(sMenu, szText, "10");
1862
1863 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MAINTOFLIP");
1864 menu_additem(sMenu, szText, "11");
1865 }
1866 case 1:
1867 {
1868 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w - \r%L", LANG_PLAYER, "MAINTOSKINS");
1869 sMenu = menu_create(szText, "MenuHandler");
1870
1871 new String[32], All;
1872
1873 for(new i = 1; i < AllWeapon; i++)
1874 {
1875 if(uWeapon[i][id] <= 0)
1876 continue;
1877
1878 formatex(String, 31, "%d %d", i, Weapons[i]);
1879 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1880 menu_additem(sMenu, szText, String);
1881
1882 All++;
1883 }
1884
1885 if(All == 0)
1886 {
1887 MenuMod[id] = 0;
1888 Menu(id);
1889 }
1890 }
1891 case 2:
1892 {
1893 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w - \r%L", LANG_PLAYER, "MAINTOCASES");
1894 sMenu = menu_create(szText, "MenuHandler");
1895
1896 new call = menu_makecallback("Call_Back");
1897
1898 for(new i = 1; i <= CHEST_COUNT; i++)
1899 {
1900 formatex(szText, sizeof(szText), "%L Raktu \r- \w%d", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i], Keys[id][i]);
1901 menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && Keys[id][i] > 0) ? -1 : call);
1902 }
1903 }
1904 case 3:
1905 {
1906 new Float:rNum = random_float((random(5)*1.0), 100.0);
1907 new chance = (rNum <= 5.0) ? 5 : (rNum <= 25.0) ? 25 : 100;
1908 new cNum = random(CHEST_COUNT-4), pNum = random_num(MIN_POINTS_REWARD, MAX_POINTS_REWARD);
1909 new kNum = random(KEYS_COUNT-4);
1910
1911 if(chance <= 5)
1912 {
1913 Keys[id][kNum]++;
1914 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "REWARDS_TAKEN_KEYS", Prefix, get_user_name_ex(id), keys_name(kNum));
1915 SaveKeys(id);
1916 }
1917 else if(chance <= 25)
1918 {
1919 Chest[id][cNum]++;
1920 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "REWARDS_TAKEN_CHEST", Prefix, get_user_name_ex(id), chest_name(cNum));
1921 SaveChests(id);
1922 }
1923 else
1924 {
1925 Points[id] += pNum;
1926 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "REWARDS_TAKEN_POINTS", Prefix, get_user_name_ex(id), pNum);
1927 SavePoints(id);
1928 }
1929 Atlygis[id] = true;
1930 }
1931 case 4: // Turgus
1932 {
1933 aThing[id] = 0;
1934
1935 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w -\r %L %L", LANG_PLAYER, "MAINMARKETS", LANG_PLAYER, "YPOINT", Points[id]);
1936 sMenu = menu_create(szText, "MenuHandler");
1937 new call = menu_makecallback("Call_Back");
1938
1939 aThing[32] = 0;
1940
1941 new String[32], All;
1942 new Name[MAX_NAME_LENGTH]; get_user_name(id, Name, 31);
1943
1944 if(!inMarket[id])
1945 {
1946 for(new i = 1; i < AllWeapon; i++)
1947 {
1948 if(i == WeaponinMarket[id] && uWeapon[i][id] > 0)
1949 {
1950 formatex(szText, sizeof(szText), "%L\r^n--------------", LANG_PLAYER, "MARKETPLACES", szWeaponNames[Weapons[i]], WeaponNames[i], MarketPoints[id]);
1951 All = 50;
1952 }
1953 }
1954 // log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
1955 if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1956 {
1957 for(new i = 1; i <= CHEST_COUNT+1; i++)
1958 {
1959 // log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
1960 if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
1961 {
1962 formatex(szText, sizeof(szText), "%L\r^n--------------", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
1963 All++;
1964 break;
1965 }
1966 }
1967 }
1968
1969
1970 // log_amx("Turgus. Rodo. %d <= %d <= %d && Keys[id][%d] > 0", CHEST_ID, WeaponinMarket[id], KEYS_ID+KEYS_COUNT, (WeaponinMarket[id]-KEYS_ID)+1);
1971 if(KEYS_ID <= WeaponinMarket[id] <= KEYS_ID+KEYS_COUNT && Keys[id][(WeaponinMarket[id]-KEYS_ID)+1] > 0)
1972 {
1973 for(new i = 1; i <= KEYS_COUNT+1; i++)
1974 {
1975 // log_amx("Keys[id][%d] && %d == %d", i, (KEYS_ID+i-1), WeaponinMarket[id]);
1976 if(Keys[id][i] > 0 && ((KEYS_ID+i-1) == WeaponinMarket[id]))
1977 {
1978 formatex(szText, sizeof(szText), "%L\r^n--------------", LANG_PLAYER, "MARKETPLACEK", keys_name(i), MarketPoints[id], mAmount[id]);
1979 All++;
1980 break;
1981 }
1982 }
1983 }
1984
1985 if(All == 0)
1986
1987 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
1988 menu_additem(sMenu, szText, "-1");
1989
1990 if(KEYS_ID <= WeaponinMarket[id] <= KEYS_ID+KEYS_COUNT && Keys[id][(WeaponinMarket[id]-KEYS_ID)+1] > 0)
1991 {
1992 formatex(szText, sizeof(szText), "Kiekis: \r%d\r^n--------------", mAmount[id]);
1993 menu_additem(sMenu, szText, "-8");
1994 }
1995 else if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1996 {
1997 formatex(szText, sizeof(szText), "Kiekis: \r%d\r^n--------------", mAmount[id]);
1998 menu_additem(sMenu, szText, "-8");
1999 }
2000 }
2001
2002 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, (!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
2003 menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
2004
2005 new mName[MAX_NAME_LENGTH]; get_user_name(id, mName, 31);
2006
2007 for(new x = 1; x <= MaxClients; x++)
2008 {
2009 if(!is_user_connected(x) || is_user_bot(x)/* || x == id*/)
2010 continue;
2011
2012 if(inMarket[x] && MarketPoints[x] > 0)
2013 {
2014 num_to_str(x, String, 31);
2015
2016 if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
2017 {
2018 // log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
2019 new chId = (WeaponinMarket[x]-CHEST_ID)+1;
2020
2021 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERC_TURGUS", chest_name((WeaponinMarket[x]-CHEST_ID)+1), MarketPoints[x], mAmount[x] > Chest[x][chId] ? Chest[x][chId] : mAmount[x], mName[x]);
2022 menu_additem(sMenu, szText, String);
2023 }
2024 else if(KEYS_ID <= WeaponinMarket[x] <= KEYS_ID+KEYS_COUNT)
2025 {
2026 // log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], KEYS_ID, WeaponinMarket[x]-KEYS_ID);
2027 new keyId = (WeaponinMarket[x]-KEYS_ID)+1;
2028
2029 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK_TURGUS", keys_name((WeaponinMarket[x]-KEYS_ID)+1), MarketPoints[x], mAmount[x] > Keys[x][keyId] ? Keys[x][keyId] : mAmount[x], mName[x]);
2030 menu_additem(sMenu, szText, String);
2031 }
2032 else
2033 {
2034 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS_TURGUS", szWeaponNames[Weapons[WeaponinMarket[x]]], WeaponNames[WeaponinMarket[x]], MarketPoints[x], mName[x]);
2035 menu_additem(sMenu, szText, String);
2036 }
2037 }
2038 }
2039 }
2040 case 5:
2041 {
2042 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w Normal %L", LANG_PLAYER, "MAINTOTRASH");
2043 sMenu = menu_create(szText, "MenuHandler");
2044
2045 new String[32], All;
2046
2047 for(new i = 1; i < AllWeapon; i++)
2048 {
2049 if(uWeapon[i][id] == 0 || weaponRang[i] == 5 || weaponRang[i] == 6)
2050 continue;
2051
2052 num_to_str(i, String, 31);
2053 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
2054 menu_additem(sMenu, szText, String);
2055 All++;
2056 }
2057
2058 if(All == 0)
2059 {
2060 MenuMod[id] = 0;
2061 Menu(id);
2062 }
2063 }
2064 case 6:
2065 {
2066 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w %L", LANG_PLAYER, "MAINUPTRADE");
2067 sMenu = menu_create(szText, "MenuHandler");
2068
2069 formatex(szText, sizeof(szText), "%L^n%L\r^n--------------", LANG_PLAYER, "TRADEUP", LANG_PLAYER, "TRADEUPCOVERT", get_contract(id, TYPE_DARKER), NEED_DARKER, get_contract(id, TYPE_PURPLE), NEED_PURPLE, get_contract(id, TYPE_PINK), NEED_PINK);
2070 menu_additem(sMenu, szText, "1");
2071
2072 menu_additem(sMenu, "\yAtsiimti skinÄ…", "2");
2073 menu_additem(sMenu, "\yPeržiūrėti atliktus kontraktus^n\r------------", "3");
2074
2075 new All, String[32];
2076
2077 for(new i = 1; i < AllWeapon; i++)
2078 {
2079 if(uWeapon[i][id] == 0)
2080 continue;
2081
2082 num_to_str(i, String, 31);
2083 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
2084 menu_additem(sMenu, szText, String);
2085 All++;
2086 }
2087 }
2088 case 7:
2089 {
2090 new All, Name[126], String[32]; get_user_name(aTarget[id], Name, 31);
2091 new call = menu_makecallback("Call_Back");
2092
2093 if(aTarget[id] > 0)
2094 {
2095 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w -\r %L %L", LANG_PLAYER, "MAINTOGIFTS", LANG_PLAYER, "YPOINT", Points[id]);
2096 sMenu = menu_create(szText, "MenuHandler");
2097
2098 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
2099 menu_additem(sMenu, szText, "-1");
2100
2101 for(new i = 1; i < AllWeapon; i++)
2102 {
2103 if(i == aThing[id] && uWeapon[i][id] > 0)
2104 {
2105 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", szWeaponNames[Weapons[i]], WeaponNames[i]);
2106 menu_additem(sMenu, szText, "-2");
2107 All++;
2108 }
2109 }
2110 if(aThing[id] <= MAX && All == 0)
2111 {
2112 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
2113 menu_additem(sMenu, szText, "-2");
2114 }
2115 else if(aThing[id] > MAX)
2116 {
2117 if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
2118 if(KEYS_ID <= aThing[id] <= KEYS_ID+KEYS_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK", keys_name((aThing[id]-KEYS_ID))); }
2119 menu_additem(sMenu, szText, "-2");
2120 }
2121
2122 if(aThing[id] > MAX)
2123 {
2124 formatex(szText, sizeof(szText), "Kiekis: \r%d", aAmount[id]);
2125 menu_additem(sMenu, szText, "-7");
2126 }
2127 else
2128 {
2129 formatex(szText, sizeof(szText), "Kiekis: \r0");
2130 menu_additem(sMenu, szText, "");
2131 }
2132
2133 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
2134 menu_additem(sMenu, szText, "-4");
2135
2136 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
2137 menu_additem(sMenu, szText, "-3");
2138 }
2139 else
2140 {
2141 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w - \r%L", LANG_PLAYER, "MENUTOPLACECH");
2142 sMenu = menu_create(szText, "MenuHandler");
2143
2144 for(new i = 1; i <= MaxClients; i++)
2145 {
2146 new szName[MAX_NAME_LENGTH]; get_user_name(i, szName, 31);
2147
2148 if(!is_user_connected(i) || is_user_bot(i)/* || i == id*/)
2149 continue;
2150
2151 if(!Loged[i]) { format(szName, charsmax(szName), "%s", szName); }
2152 num_to_str(i, String, 31);
2153 menu_additem(sMenu, szName, String, _, (!Loged[i]) ? call : -1);
2154 }
2155 }
2156 }
2157 case 8:
2158 {
2159 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAINTOSSHOP", LANG_PLAYER, "YPOINT", Points[id]);
2160 sMenu = menu_create(szText, "MenuHandler");
2161
2162 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEY_SHOP");
2163 menu_additem(sMenu, szText, _, _, -1);
2164
2165 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CASE_SHOP");
2166 menu_additem(sMenu, szText, _, _, -1);
2167 }
2168 case 9:
2169 {
2170 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w - \r%L", LANG_PLAYER, "MAINTOMISSIONS");
2171 sMenu = menu_create(szText, "MenuHandler");
2172
2173 new call = menu_makecallback("Call_Back");
2174
2175 for(new i = 1; i <= ACH_COUNT; i++)
2176 {
2177 formatex(szText, sizeof(szText), "%s \r[\y%d/%d\r]\w Atlygis \r[\y%d Taškų\r]", ach_name(i), Ach[id][i], AchNeed[id][i], AchWin[id][i]);
2178 menu_additem(sMenu, szText, _, _, (Ach[id][i] < AchNeed[id][i]) ? call : -1);
2179 }
2180 }
2181 case 10:
2182 {
2183 client_cmd(id, "say /clan"); return;
2184 }
2185 case 11:
2186 {
2187 client_cmd(id, "say /bet"); return;
2188 }
2189 }
2190 menu_display(id, sMenu);
2191}
2192
2193public Call_Back(id, menu, item)
2194{
2195 return ITEM_DISABLED;
2196}
2197
2198public PlaySound(id)
2199{
2200 client_cmd(0, "spk misc/bilalconnect.wav");
2201}
2202
2203public MenuHandler(id, gMenu, item)
2204{
2205 if(item == MENU_EXIT)
2206 {
2207 MenuMod[id] = 0;
2208 menu_destroy(gMenu);
2209 return PLUGIN_HANDLED;
2210 }
2211
2212 new aMenu[2], Data[4][32], sKey[32], Name[MAX_NAME_LENGTH], mName[MAX_NAME_LENGTH], Key;
2213 menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2214 parse(Data[0], sKey, 31);
2215 Key = str_to_num(sKey);
2216
2217 switch(MenuMod[id])
2218 {
2219 case -2:
2220 {
2221 MenuMod[id] = 7;
2222 aThing[id] = Key;
2223 Menu(id);
2224 }
2225 case -1:
2226 {
2227 MenuMod[id] = 4;
2228 WeaponinMarket[id] = Key;
2229 client_cmd(id, "messagemode Cost");
2230
2231 if(uWeapon[Key][id] && weaponRang[Key] > 0)
2232 {
2233 if(weaponRang[Key] == 5)
2234 {
2235 WeaponinMarket[id] = Key;
2236 client_cmd(id, "messagemode Price");
2237 }
2238 else if(weaponRang[Key] == 4)
2239 {
2240 WeaponinMarket[id] = Key;
2241 client_cmd(id, "messagemode PriceBlue");
2242 }
2243 else if(weaponRang[Key] == 3)
2244 {
2245 WeaponinMarket[id] = Key;
2246 client_cmd(id, "messagemode PriceRed");
2247
2248 }
2249 else if(weaponRang[Key] == 1)
2250 {
2251 WeaponinMarket[id] = Key;
2252 client_cmd(id, "messagemode PriceRare");
2253 }
2254 }
2255 }
2256 case 0:
2257 {
2258 MenuMod[id] = Key;
2259 Menu(id);
2260 }
2261 case 1:
2262 {
2263 parse(Data[0], Data[2], 31, Data[3], 31);
2264
2265 if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2]))
2266 {
2267 bUsingGuns[id][str_to_num(Data[3])] = 0;
2268 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SKIN_REMOVED", Prefix, szWeaponNames[str_to_num(Data[3])], WeaponNames[str_to_num(Data[2])]);
2269 } else {
2270 bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
2271 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SKIN_CHANGED", Prefix, szWeaponNames[str_to_num(Data[3])], WeaponNames[str_to_num(Data[2])]);
2272 }
2273
2274 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2275 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2276
2277 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2278
2279 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2280 log_errors("[SKIN CHANGE] %s", szQuery);
2281
2282 Menu(id);
2283 MenuMod[id] = 1;
2284 }
2285 case 2:
2286 {
2287 if(Chest[id][(item+1)] && Keys[id][(item+1)] <= 0)
2288 {
2289 Keys[id][(item+1)] = 0;
2290 Chest[id][(item+1)] = 0;
2291 return PLUGIN_CONTINUE;
2292 }
2293
2294 Ach[id][6]++;
2295 Keys[id][(item+1)]--;
2296 Chest[id][(item+1)]--;
2297
2298 new chest = item+1;
2299 new Float:rNum;
2300
2301 if(get_user_flags(id) & ACCESS_ADMIN)
2302 {
2303 rNum = random_float((random(5)*2.0), 200.0);
2304 }
2305 else if(get_user_flags(id) & ACCESS_VIP)
2306 {
2307 rNum = random_float((random(5)*2.0), 300.0);
2308 }
2309 else
2310 {
2311 rNum = random_float((random(5)*2.0), 350.0);
2312 }
2313 //new chance = (rNum <= 1.0) ? 1 : (rNum <= 5.0) ? 5 : (rNum <= 25.0) ? 25 : (rNum <= 45.0) ? 45 : (rNum <= 75.0) ? 75 : 100;
2314 if(rNum <= 1.0) { chance = 1; }
2315 else if(rNum <= 5.0) { chance = 5; }
2316 else if(rNum <= 255.0) { chance = 25; }
2317 else if(rNum <= 45.0) { chance = 45; }
2318 else if(rNum <= 75.0) { chance = 75; }
2319 else { chance = 100; }
2320
2321 new skinsCnt, skinNum, skinId;
2322 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, 31);
2323
2324
2325 //Ark'xes optimization #SkinAnnouncement;
2326 skinsCnt = chestsChance[chest][chance]; //chest = pasirinktas skaiÄius iÅ¡ meniu // chance = kokio retumo skinas // 1 | 5 | 25 | 45 | 75 | 100 //
2327 skinNum = random(skinsCnt);
2328 skinId = chestsList[chest][chance][skinNum]; //skinNum = skino ID
2329
2330 switch(chance) {
2331 case 1, 5, 25: {
2332 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_ALL", Prefix, szName, WeaponNames[skinId]);
2333 SaveAch(skinId);
2334 }
2335 case 45, 75, 100: {
2336 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_SELF", Prefix, szName, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2337 }
2338 }
2339 //END #SkinAnnouncement;
2340
2341 //Terror bullshit
2342 /*if(chance <= 1)
2343 {
2344 skinsCnt = chestsChance[0][1];
2345 skinNum = random(skinsCnt);
2346 skinId = chestsList[0][1][skinNum];
2347
2348 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_ALL", Prefix, szName, WeaponNames[skinId]);
2349
2350 SaveAch(skinId);
2351 }
2352 else if(5 <= chance <= 25)
2353 {
2354 skinsCnt = chestsChance[0][5];
2355 skinNum = random(skinsCnt);
2356 skinId = chestsList[0][5][skinNum];
2357
2358 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_ALL", Prefix, szName, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2359 }
2360 else if(45 <= chance <= 75)
2361 {
2362 skinsCnt = chestsChance[chest][chance];
2363 skinNum = random(skinsCnt);
2364 skinId = chestsList[0][chance][skinNum];
2365
2366 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_SELF", Prefix, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2367 }
2368 else
2369 {
2370 skinsCnt = chestsChance[0][100];
2371 skinNum = random(skinsCnt);
2372 skinId = chestsList[0][100][skinNum];
2373
2374 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUND_ITEM_SELF", Prefix, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2375 }*/
2376 log_errors("[SKINLOG FOUND] %s rado ^1[^4%s | %s^1]^4 skinÄ…!", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2377 uWeapon[skinId][id]++;
2378 SaveData(id);
2379 Menu(id);
2380 }
2381 case 4:
2382 {
2383 if(Key == -1)
2384 {
2385 MenuMod[id] = -1;
2386 Menu(id);
2387 }
2388 else if(Key == 0)
2389 {
2390 if(inMarket[id])
2391 {
2392 inMarket[id] = false;
2393 }
2394 else if(MarketPoints[id] > 0)
2395 {
2396 if(mAmount[id] < 1) mAmount[id] = 1;
2397 get_user_name(id, Name, 31);
2398
2399 switch(WeaponinMarket[id])
2400 {
2401 case CHEST_ID..(CHEST_ID+CHEST_COUNT): { print_color(0, "%L", LANG_PLAYER, "TOMARKET_CHEST", Prefix, Name, chest_name((WeaponinMarket[id]-CHEST_ID)+1), MarketPoints[id]); }
2402 case KEYS_ID..(KEYS_ID+KEYS_COUNT): { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, keys_name((WeaponinMarket[id]-KEYS_ID)+1), MarketPoints[id]); }
2403 default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, szWeaponNames[Weapons[WeaponinMarket[id]]], WeaponNames[WeaponinMarket[id]], MarketPoints[id]); }
2404 }
2405 inMarket[id] = true;
2406 }
2407 gLastMarketTime[id] = get_systime();
2408 Menu(id);
2409 }
2410 else if(Key == -8)
2411 {
2412 client_cmd(id, "messagemode setMarketAmount");
2413 }
2414 else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
2415 {
2416 get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
2417
2418 if(WeaponinMarket[Key] < CHEST_ID)
2419 {
2420 BuySkin[id] = Key;
2421 SkinBuy(id);
2422 return PLUGIN_HANDLED;
2423 }
2424 else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
2425 {
2426 new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
2427
2428 if(Chest[Key][chId] <= 0)
2429 {
2430 inMarket[Key] = false;
2431 MarketPoints[Key] = 0;
2432 WeaponinMarket[Key] = 0;
2433
2434 return PLUGIN_CONTINUE;
2435 }
2436 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);
2437 Chest[id][chId]++;
2438 Chest[Key][chId]--;
2439 }
2440 else if(KEYS_ID <= WeaponinMarket[Key] <= KEYS_ID+KEYS_COUNT)
2441 {
2442 new kId = (WeaponinMarket[Key]-KEYS_ID)+1;
2443
2444 if(Keys[Key][kId] <= 0)
2445 {
2446 inMarket[Key] = false;
2447 MarketPoints[Key] = 0;
2448 WeaponinMarket[Key] = 0;
2449
2450 return PLUGIN_CONTINUE;
2451 }
2452 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, keys_name(kId), MarketPoints[Key], Name);
2453 Keys[id][kId]++;
2454 Keys[Key][kId]--;
2455 }
2456
2457 rg_send_audio(Key, SOUND_SOLD, PITCH_NORM);
2458
2459 Points[Key] += MarketPoints[Key];
2460 Points[id] -= MarketPoints[Key];
2461 SaveData(Key);
2462 SaveData(id);
2463 mAmount[Key]--;
2464
2465 if(mAmount[Key] <= 0)
2466 {
2467 inMarket[Key] = false;
2468 MarketPoints[Key] = 0;
2469 WeaponinMarket[Key] = 0;
2470 }
2471 Menu(id);
2472 }
2473 }
2474 case 5:
2475 {
2476 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
2477 {
2478 uWeapon[Key][id]--;
2479
2480 bUsingGuns[id][Weapons[Key]] = 0;
2481
2482 new chest = random_num(1, 3);
2483
2484 new Float:rNum = random_float((random(5)*5.0), 400.0);
2485 new chance = (rNum <= 1.0) ? 1 : (rNum <= 5.0) ? 5 : (rNum <= 25.0) ? 25 : (rNum <= 45.0) ? 45 : (rNum <= 75.0) ? 75 : 100;
2486 ///////////////////////////////////////////
2487 new skinsCnt, skinNum, skinId;
2488 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, 31);
2489 ///////////////////////////////////////////
2490
2491 if(chance <= 1)
2492 {
2493 skinsCnt = chestsChance[0][1];
2494 skinNum = random(skinsCnt);
2495 skinId = chestsList[0][1][skinNum];
2496
2497 client_print_color(0, print_team_default, "%s ^3%L", Prefix, LANG_PLAYER, "MENUTODUSTTRASH", get_user_name_ex(id), WeaponNames[skinId]);
2498
2499 uWeapon[skinId][id]++;
2500 }
2501 else if(5 <= chance <= 25)
2502 {
2503 skinsCnt = chestsChance[chest][chance];
2504 skinNum = random(skinsCnt);
2505 skinId = chestsList[chest][chance][skinNum];
2506
2507 client_print_color(0, print_team_default, "%s ^3%L", Prefix, LANG_PLAYER, "MENUTODUSTTRASH", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2508
2509 uWeapon[skinId][id]++;
2510 }
2511 else if(45 <= chance <= 75)
2512 {
2513 skinsCnt = chestsChance[chest][chance];
2514 skinNum = random(skinsCnt);
2515 skinId = chestsList[chest][chance][skinNum];
2516
2517 client_print_color(0, print_team_default, "%s ^3%L", Prefix, LANG_PLAYER, "MENUTODUSTTRASH", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2518
2519 uWeapon[skinId][id]++;
2520 }
2521 else
2522 {
2523 new rNum = random_num(50, 500);
2524 Points[id] += rNum;
2525 client_print_color(id, print_team_default, "%s ^4%L", Prefix, LANG_PLAYER, "POINT", rNum);
2526 }
2527 log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
2528
2529 SaveData(id);
2530 } else {
2531 uWeapon[Key][id] = 0;
2532 SaveData(id);
2533 }
2534 Menu(id);
2535 }
2536 case 6:
2537 {
2538 switch(item)
2539 {
2540 case 0:
2541 {
2542 if(get_contract(id, TYPE_PINK) >= NEED_PINK && get_contract(id, TYPE_PURPLE) >= NEED_PURPLE && get_contract(id, TYPE_DARKER) >= NEED_DARKER)
2543 {
2544 new chestNum = random_num(1, 9), chest = chestNum;
2545
2546 new chance = 25;
2547 new skinsCnt = chestsChance[chest][chance];
2548 new skinNum = random(skinsCnt);
2549 new skinCovert = chestsList[chest][chance][skinNum];
2550
2551 client_print_color(0, print_team_default, "%s %L", Prefix, LANG_PLAYER, "TRADEUPGETSKINS", get_user_name_ex(id), szWeaponNames[Weapons[skinCovert]], WeaponNames[skinCovert]);
2552
2553 for(new i = 1; i < AllWeapon; i++) Darker[i][id] = 0;
2554 for(new i = 1; i < AllWeapon; i++) Mythical[i][id] = 0;
2555 for(new i = 1; i < AllWeapon; i++) Legendary[i][id] = 0;
2556
2557 Ach[id][5]++;
2558 uWeapon[skinCovert][id]++;
2559 uCovert[skinCovert][id]++;
2560 SaveData(id);
2561 }
2562 else
2563 {
2564 client_print_color(id, print_team_default, "%s Kontraktas nepavyko. Trūksta skinų kontraktui atlikti.", Prefix);
2565 }
2566 Menu(id);
2567 }
2568 case 1:
2569 {
2570 viewTradeSkins(id);
2571 return PLUGIN_HANDLED;
2572 }
2573 case 2:
2574 {
2575 viewGetSkins(id);
2576 return PLUGIN_HANDLED;
2577 }
2578 default:
2579 {
2580 new bool:skinAdded = false;
2581
2582 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
2583 {
2584 if(weaponRang[Key] == 5)
2585 {
2586 if(get_contract(id, TYPE_DARKER) < NEED_DARKER)
2587 {
2588 Darker[Key][id]++;
2589 skinAdded = true;
2590 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Darker[Key][id]);
2591 }
2592 }
2593 else if(weaponRang[Key] == 1)
2594 {
2595 if(get_contract(id, TYPE_PURPLE) < NEED_PURPLE)
2596 {
2597 Mythical[Key][id]++;
2598 skinAdded = true;
2599 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Mythical[Key][id]);
2600 }
2601 }
2602 else if(weaponRang[Key] == 2)
2603 {
2604 if(get_contract(id, TYPE_PINK) < NEED_PINK)
2605 {
2606 Legendary[Key][id]++;
2607 skinAdded = true;
2608 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Legendary[Key][id]);
2609 }
2610 }
2611 Menu(id);
2612 }
2613 if(skinAdded)
2614 {
2615 uWeapon[Key][id]--;
2616
2617 bUsingGuns[id][Weapons[Key]] = 0;
2618
2619 if(!uWeapon[Key][id])
2620 uWeaponKills[Key][id] = 0;
2621
2622 log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
2623 }
2624 Menu(id);
2625 SaveData(id);
2626 MenuMod[id] = 6;
2627 }
2628 }
2629 MenuMod[id] = 6;
2630 }
2631 case 7:
2632 {
2633 if(Key == -1) { aTarget[id] = 0; }
2634 if(Key == -2) { MenuMod[id] = -2; }
2635 if(Key == -3)
2636 {
2637 if(!is_user_connected(aTarget[id])) { return PLUGIN_CONTINUE; }
2638
2639 if(aThing[id] < CHEST_ID)
2640 {
2641 if(uWeapon[aThing[id]][id] > 0)
2642 {
2643 uWeapon[aThing[id]][aTarget[id]]++;
2644 uWeapon[aThing[id]][id]--;
2645
2646 if(!uWeapon[aThing[id]][id])
2647 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
2648
2649 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2650
2651 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2652
2653 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2654 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2655
2656 log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
2657 log_errors("[SKIN GIFT] %s", szQuery);
2658
2659 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN");
2660 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), szWeaponNames[Weapons[aThing[id]]], WeaponNames[aThing[id]]);
2661 }
2662 }
2663 else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
2664 {
2665 new cId = aThing[id]-CHEST_ID;
2666
2667 if(Chest[id][cId] >= aAmount[id])
2668 {
2669 Chest[aTarget[id]][cId]+=aAmount[id];
2670 Chest[id][cId]-=aAmount[id];
2671
2672 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST");
2673 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), chest_name((aThing[id]-CHEST_ID)), aAmount[id]);
2674 }
2675 else client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CHESTS_ENOUGH", Prefix);
2676 }
2677 else if(KEYS_ID <= aThing[id] <= KEYS_ID+KEYS_COUNT)
2678 {
2679 new kId = aThing[id]-KEYS_ID;
2680
2681 if(Keys[id][kId] >= aAmount[id])
2682 {
2683 Keys[aTarget[id]][kId]+=aAmount[id];
2684 Keys[id][kId]-=aAmount[id];
2685
2686 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
2687 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), keys_name((aThing[id]-KEYS_ID)), aAmount[id]);
2688 }
2689 else client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CHESTS_ENOUGH", Prefix);
2690 }
2691
2692 if(aPoints[id] > 0 && Points[id] >= aPoints[id])
2693 {
2694 Points[aTarget[id]] += aPoints[id];
2695 Points[id] -= aPoints[id];
2696
2697 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_PTS");
2698 client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
2699 log_errors("[SKINLOG PTS] %s padovanojo %s - %d tasku", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
2700 }
2701 SaveData(aTarget[id]);
2702 SaveData(id);
2703
2704 aThing[id] = 0;
2705 aTarget[id] = 0;
2706 aPoints[id] = 0;
2707 }
2708 if(Key == -7) { client_cmd(id, "messagemode setAmount"); }
2709 if(Key == -4) { client_cmd(id, "messagemode Gift"); }
2710 if(Key > 0) { aTarget[id] = Key; }
2711 Menu(id);
2712 }
2713 case 8:
2714 {
2715 switch(item)
2716 {
2717 case 0:
2718 {
2719 Raktai(id);
2720 }
2721 case 1:
2722 {
2723 Skrynios(id);
2724 }
2725 }
2726 }
2727 case 9:
2728 {
2729 switch(item)
2730 {
2731 case 0..(ACH_COUNT):
2732 {
2733 Ach[id][item+1] = 0;
2734 Points[id] += AchWin[id][item+1];
2735 client_print_color(0, print_team_default, "%s ^4%s ^1Atsiėmė^3 %d taškų atlygį.", Prefix, get_user_name_ex(id), AchWin[id][item+1]);
2736 SaveAch(id);
2737 }
2738 }
2739 Menu(id);
2740 }
2741 case 10:
2742 {
2743 client_cmd(id, "say /clan");
2744 return PLUGIN_HANDLED;
2745 }
2746 case 11:
2747 {
2748 client_cmd(id, "say /bet");
2749 return PLUGIN_HANDLED;
2750 }
2751 default: { MenuMod[id] = 0; }
2752 }
2753 menu_destroy(gMenu); return PLUGIN_CONTINUE;
2754}
2755
2756public viewTradeSkins(id)
2757{
2758 new szText[256], target[32];
2759 formatex(szText, charsmax(szText), "\y[\rGameNet\y] \wAtsimti skinÄ…");
2760 new menu = menu_create(szText, "viewTradeHandler");
2761
2762 for(new i = 1; i < AllWeapon; i++)
2763 {
2764 if(Darker[i][id] > 0)
2765 {
2766 formatex(target, charsmax(target), "%d %d", i, TYPE_DARKER);
2767 formatex(szText, charsmax(szText), "\w%s | %s \r[\w%d\r] \w| \yMil-Spec", szWeaponNames[Weapons[i]], WeaponNames[i], Darker[i][id]);
2768 menu_additem(menu, szText, target);
2769 }
2770 if(Mythical[i][id] > 0)
2771 {
2772 formatex(target, charsmax(target), "%d %d", i, TYPE_PURPLE);
2773 formatex(szText, charsmax(szText), "\w%s | %s \r[\w%d\r] \w| \yRestricted", szWeaponNames[Weapons[i]], WeaponNames[i], Mythical[i][id]);
2774 menu_additem(menu, szText, target);
2775 }
2776 if(Legendary[i][id] > 0)
2777 {
2778 formatex(target, charsmax(target), "%d %d", i, TYPE_PINK);
2779 formatex(szText, charsmax(szText), "\w%s | %s \r[\w%d\r] \w| \yClassified", szWeaponNames[Weapons[i]], WeaponNames[i], Legendary[i][id]);
2780 menu_additem(menu, szText, target);
2781 }
2782 }
2783 if(menu_items(menu)) menu_display(id, menu, 0);
2784 else Menu(id);
2785}
2786
2787public viewTradeHandler(id, menu, item)
2788{
2789 if(item == MENU_EXIT)
2790 {
2791 Menu(id);
2792 return PLUGIN_HANDLED;
2793 }
2794
2795 new aMenu[2], Data[4][32], sKey[32], sType[32], key, type;
2796 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2797 parse(Data[0], sKey, 31, sType, 31);
2798 key = str_to_num(sKey);
2799 type = str_to_num(sType);
2800
2801 switch(type)
2802 {
2803 case TYPE_DARKER:
2804 {
2805 if(Darker[key][id] > 0)
2806 {
2807 Darker[key][id]--;
2808 uWeapon[key][id]++;
2809
2810 SaveData(id);
2811 }
2812 }
2813 case TYPE_PURPLE:
2814 {
2815 if(Mythical[key][id] > 0)
2816 {
2817 Mythical[key][id]--;
2818 uWeapon[key][id]++;
2819
2820 SaveData(id);
2821 }
2822 }
2823 case TYPE_PINK:
2824 {
2825 if(Legendary[key][id] > 0)
2826 {
2827 Legendary[key][id]--;
2828 uWeapon[key][id]++;
2829
2830 SaveData(id);
2831 }
2832 }
2833 }
2834 viewTradeSkins(id);
2835 return PLUGIN_HANDLED;
2836}
2837
2838stock get_contract(id, type)
2839{
2840 new rNum = 0;
2841
2842 switch(type)
2843 {
2844 case TYPE_DARKER:
2845 {
2846 for(new i = 1; i < AllWeapon; i++)
2847 {
2848 rNum += Darker[i][id];
2849 }
2850 }
2851 case TYPE_PURPLE:
2852 {
2853 for(new i = 1; i < AllWeapon; i++)
2854 {
2855 rNum += Mythical[i][id];
2856 }
2857 }
2858 case TYPE_PINK:
2859 {
2860 for(new i = 1; i < AllWeapon; i++)
2861 {
2862 rNum += Legendary[i][id];
2863 }
2864 }
2865 }
2866 return rNum;
2867}
2868
2869public viewGetSkins(id)
2870{
2871 new szText[256];
2872 formatex(szText, charsmax(szText), "\y[\rGameNet\y] \w");
2873 new menu = menu_create(szText, "viewGetHandler");
2874
2875 for(new i = 1; i < AllWeapon; i++)
2876 {
2877 if(uCovert[i][id] > 0)
2878 {
2879 formatex(szText, charsmax(szText), "\r[\w%s | %s\r] \r[\w%d\r] \w| \yCovert", szWeaponNames[Weapons[i]], WeaponNames[i], uCovert[i][id]);
2880 menu_additem(menu, szText);
2881 }
2882 }
2883 if(menu_items(menu)) menu_display(id, menu, 0);
2884 else Menu(id);
2885}
2886
2887public viewGetHandler(id, menu, item)
2888{
2889 if(item == MENU_EXIT)
2890 {
2891 Menu(id);
2892 return PLUGIN_HANDLED;
2893 }
2894
2895 new aMenu[2], Data[4][32], sKey[32], sType[32];
2896 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2897 parse(Data[0], sKey, 31, sType, 31);
2898
2899 switch(MenuMod[id])
2900 {
2901 default:
2902 {
2903 MenuMod[id] = 5;
2904 }
2905 }
2906 Menu(id);
2907 return PLUGIN_HANDLED;
2908}
2909
2910public Skrynios(id)
2911{
2912 new menu, szText[256];
2913 formatex(szText, sizeof(szText), "\y[\rGameNet\y] \w- \r%L %L", LANG_PLAYER, "CASE_SHOP", LANG_PLAYER, "YPOINT", Points[id]);
2914 menu = menu_create(szText, "ChestsHandler");
2915
2916 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "BUY");
2917 menu_additem(menu, szText, _, _, -1);
2918
2919 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CASE", chest_name(KeyChoice[id]));
2920 menu_additem(menu, szText, _, _, -1);
2921
2922 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "QUANTITY", Kiekis[id]);
2923 menu_additem(menu, szText, _, _, -1);
2924
2925 menu_display(id, menu, 0);
2926 return PLUGIN_CONTINUE;
2927}
2928
2929public ChestsHandler(id, menu, item)
2930{
2931 if(item == MENU_EXIT)
2932 {
2933 menu_destroy(menu);
2934 return PLUGIN_HANDLED;
2935 }
2936 switch(item)
2937 {
2938 case 0:
2939 {
2940 if(!KeyChoice[id])
2941 {
2942 print_color(id, "%L", LANG_PLAYER, "CHOOSE_CASE", Prefix);
2943 Skrynios(id);
2944 }
2945 else if(Kiekis[id] == 0)
2946 {
2947 print_color(id, "%L", LANG_PLAYER, "CHOOSE_QUANTITY", Prefix);
2948 Skrynios(id);
2949 }
2950 else if(Points[id] >= Kiekis[id]*1400)
2951 {
2952 Chest[id][KeyChoice[id]] += Kiekis[id];
2953 Points[id] -= Kiekis[id]*1400;
2954 print_color(id, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, Kiekis[id], chest_name(KeyChoice[id]));
2955 SavePoints(id);
2956 SaveChests(id);
2957 KeyChoice[id] = 0;
2958 Kiekis[id] = 0;
2959 Skrynios(id);
2960 }
2961 else
2962 {
2963 print_color(id, "%L", LANG_PLAYER, "ENOUGH_POINT", Prefix, Kiekis[id]*1400, Points[id]);
2964 Skrynios(id);
2965 }
2966 }
2967 case 1:
2968 {
2969 ChestsList(id);
2970 }
2971 case 2:
2972 {
2973 client_cmd(id, "messagemode setKiekis");
2974 Skrynios(id);
2975 set_task(2.4, "Skrynios", id);
2976 }
2977 }
2978
2979 menu_destroy(menu);
2980 return PLUGIN_HANDLED;
2981}
2982
2983public ChestsList(id)
2984{
2985 new menu, szText[256];
2986 formatex(szText, sizeof(szText), "\y[\rGameNet\y] \w- \r%L %L", LANG_PLAYER, "CASE_SHOP", LANG_PLAYER, "YPOINT", Points[id]);
2987 menu = menu_create(szText, "ChestsBuy");
2988
2989 for(new i = 1; i <= CHEST_COUNT; i++)
2990 {
2991 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), 1400);
2992 menu_additem(menu, szText, "0");
2993 }
2994
2995 menu_display(id, menu, 0);
2996 return PLUGIN_CONTINUE;
2997}
2998
2999public ChestsBuy(id, menu, item)
3000{
3001 if(item == MENU_EXIT)
3002 {
3003 menu_destroy(menu);
3004 return PLUGIN_HANDLED;
3005 }
3006
3007 KeyChoice[id] = item+1;
3008 Skrynios(id);
3009
3010 menu_destroy(menu);
3011 return PLUGIN_HANDLED;
3012}
3013
3014public client_disconnected(id)
3015{
3016 for(new i; i <= ACH_COUNT; i++) { Ach[id][i] = 0; }
3017 for(new i; i <= KEYS_COUNT; i++) { Keys[id][i] = 0; }
3018 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
3019 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
3020
3021 for(new i; i < AllWeapon; i++)
3022 {
3023 uWeapon[i][id] = 0;
3024 Darker[i][id] = 0, Mythical[i][id] = 0, Legendary[i][id] = 0;
3025 }
3026
3027 gWarnings[id] = 0;
3028 WeaponinMarket[id] = 0;
3029 MarketPoints[id] = 0;
3030 inMarket[id] = 0;
3031 Password[id] = "";
3032 SavedPassword[id] = "";
3033 Loged[id] = false;
3034 gLogged[id] = false;
3035 gRegistered[id] = false;
3036
3037 Points[id] = 0;
3038 KillCount[id] = 0;
3039
3040 arrayset(TakeDamage[id], 0, player_struct);
3041
3042 AchNeed[id][1] = 20, AchNeed[id][2] = 25, AchNeed[id][3] = 30, AchNeed[id][4] = 150;
3043 AchNeed[id][5] = 20, AchNeed[id][6] = 20, AchNeed[id][7] = 50, AchNeed[id][8] = 25, AchNeed[id][9] = 30;
3044}
3045
3046public client_putinserver(id)
3047{
3048 for(new i; i <= KEYS_COUNT; i++) { Keys[id][i] = 0; }
3049 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
3050 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
3051
3052 for(new i; i < AllWeapon; i++)
3053 {
3054 uWeapon[i][id] = 0, uCovert[i][id] = 0;
3055 Darker[i][id] = 0, Mythical[i][id] = 0, Legendary[i][id] = 0;
3056 }
3057
3058 gWarnings[id] = 0;
3059 Password[id] = "";
3060 SavedPassword[id] = "";
3061 Loged[id] = false;
3062 gLogged[id] = false;
3063 gRegistered[id] = false;
3064 gLastMarketTime[id] = get_systime();
3065
3066 Points[id] = 0;
3067 KillCount[id] = 0;
3068
3069 if(gCanLoad) { set_task(1.5, "Registered", id); }
3070 arrayset(TakeDamage[id], 0, player_struct);
3071
3072 AchNeed[id][1] = 20, AchNeed[id][2] = 25, AchNeed[id][3] = 30, AchNeed[id][4] = 150;
3073 AchNeed[id][5] = 20, AchNeed[id][6] = 20, AchNeed[id][7] = 50, AchNeed[id][8] = 25, AchNeed[id][9] = 30;
3074
3075 AchWin[id][1] = 100, AchWin[id][2] = 200, AchWin[id][3] = 300, AchWin[id][4] = 400;
3076 AchWin[id][5] = 500, AchWin[id][6] = 700, AchWin[id][7] = 700, AchWin[id][8] = 800, AchWin[id][9] = 1500;
3077}
3078
3079public Raktai(id)
3080{
3081 new menu, szText[256];
3082 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "KEY_SHOP", LANG_PLAYER, "YPOINT", Points[id]);
3083 menu = menu_create(szText, "KeysHandler");
3084
3085 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "BUY");
3086 menu_additem(menu, szText, _, _, -1);
3087
3088 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEY", chest_name(KeyChoice[id]));
3089 menu_additem(menu, szText, _, _, -1);
3090
3091 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "QUANTITY", Kiekis[id]);
3092 menu_additem(menu, szText, _, _, -1);
3093
3094 menu_display(id, menu, 0);
3095 return PLUGIN_CONTINUE;
3096}
3097
3098public KeysHandler(id, menu, item)
3099{
3100 if(item == MENU_EXIT)
3101 {
3102 menu_destroy(menu);
3103 return PLUGIN_HANDLED;
3104 }
3105
3106 switch(item)
3107 {
3108 case 0:
3109 {
3110 if(!KeyChoice[id])
3111 {
3112 print_color(id, "%L", LANG_PLAYER, "CHOOSE_KEY", Prefix);
3113 Raktai(id);
3114 }
3115 else if(Kiekis[id] == 0)
3116 {
3117 print_color(id, "%L", LANG_PLAYER, "CHOOSE_QUANTITY", Prefix);
3118 Raktai(id);
3119 }
3120 else if(Points[id] >= Kiekis[id]*1700)
3121 {
3122 Keys[id][KeyChoice[id]] += Kiekis[id];
3123 Points[id] -= Kiekis[id]*1700;
3124 print_color(id, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix, Kiekis[id], keys_name(KeyChoice[id]));
3125 SavePoints(id);
3126 SaveKeys(id);
3127 KeyChoice[id] = 0;
3128 Kiekis[id] = 0;
3129 Raktai(id);
3130
3131 }
3132 else
3133 {
3134 print_color(id, "%L", LANG_PLAYER, "ENOUGH_POINT", Prefix, Kiekis[id]*1700, Points[id]);
3135 Raktai(id);
3136 }
3137 }
3138 case 1:
3139 {
3140 KeysList(id);
3141 }
3142 case 2:
3143 {
3144 client_cmd(id, "messagemode setKiekis");
3145 Raktai(id);
3146 set_task(2.4, "Raktai", id);
3147 }
3148 }
3149
3150 menu_destroy(menu);
3151 return PLUGIN_HANDLED;
3152}
3153
3154public KeysList(id)
3155{
3156 new menu, szText[256];
3157 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "KEY_SHOP", LANG_PLAYER, "YPOINT", Points[id]);
3158 menu = menu_create(szText, "KeysBuy");
3159
3160 for(new i = 1; i <= KEYS_COUNT; i++)
3161 {
3162 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", keys_name(i), 1700);
3163 menu_additem(menu, szText, "0");
3164 }
3165
3166 menu_display(id, menu, 0);
3167 return PLUGIN_CONTINUE;
3168}
3169
3170public KeysBuy(id, menu, item)
3171{
3172 if(item == MENU_EXIT)
3173 {
3174 menu_destroy(menu);
3175 return PLUGIN_HANDLED;
3176 }
3177 KeyChoice[id] = item+1;
3178 Raktai(id);
3179 menu_destroy(menu);
3180 return PLUGIN_HANDLED;
3181}
3182
3183public add_delay(id)
3184{
3185 switch(id)
3186 {
3187 case 1..8: set_task(0.1, "Registered", id);
3188 case 9..16: set_task(0.2, "Registered", id);
3189 case 17..24: set_task(0.3, "Registered", id);
3190 case 25..32: set_task(0.4, "Registered", id);
3191 }
3192}
3193//============================================================//
3194// [~ Saving / Loading datas ~] //
3195//============================================================//
3196public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
3197{
3198 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
3199 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
3200}
3201
3202public Login(id)
3203{
3204 if(!is_user_connected(id) || is_user_bot(id))
3205 return;
3206
3207 static szQuery[256], iData[1]; iData[0] = id;
3208 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
3209
3210 SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
3211
3212 log_errors("[LOGIN] %s", szQuery);
3213}
3214
3215public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
3216{
3217 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
3218 else
3219 {
3220 new id = iData[0];
3221
3222 if(1 <= id <= 32)
3223 {
3224 static szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256];
3225 static szCovert[512+MAX], szMythical[512+MAX], szLegendary[512+MAX];
3226 static szDarker[512+MAX];
3227
3228 static szKeys[256], szChests[256], szAch[256];
3229
3230 if(SQL_NumResults(hQuery))
3231 {
3232 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
3233
3234 Points[id] = SQL_ReadResult(hQuery, 2);
3235
3236 SQL_ReadResult(hQuery, 3, szKeys, sizeof(szKeys));
3237 SQL_ReadResult(hQuery, 4, szChests, sizeof(szChests));
3238 SQL_ReadResult(hQuery, 5, szAch, sizeof(szAch));
3239 SQL_ReadResult(hQuery, 6, szSkins, sizeof(szSkins));
3240 SQL_ReadResult(hQuery, 7, szUGuns, sizeof(szUGuns));
3241 SQL_ReadResult(hQuery, 8, szKSkins, sizeof(szKSkins));
3242 SQL_ReadResult(hQuery, 9, szCovert, sizeof(szCovert));
3243 SQL_ReadResult(hQuery, 10, szDarker, sizeof(szDarker));
3244 SQL_ReadResult(hQuery, 11, szMythical, sizeof(szMythical));
3245 SQL_ReadResult(hQuery, 12, szLegendary, sizeof(szLegendary));
3246
3247 Wishes[id] = SQL_ReadResult(hQuery, 13);
3248 LastDay[id] = SQL_ReadResult(hQuery, 14);
3249 DoubleXPExpire[id] = SQL_ReadResult(hQuery, 15);
3250 DropBonusExpire[id] = SQL_ReadResult(hQuery, 16);
3251
3252 SQL_NextRow(hQuery);
3253
3254 new myNumbers[512+MAX];
3255
3256 new count = ExplodeString(szSkins, myNumbers);
3257
3258 if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
3259 count = ExplodeString(szKSkins, myNumbers);
3260
3261 if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
3262 count = ExplodeString(szUGuns, myNumbers);
3263
3264 if(count)
3265 {
3266 for(new i = 1; i < CSW_VESTHELM; i++)
3267 {
3268 if(myNumbers[i] <= MAX)
3269 {
3270 if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
3271 {
3272 bUsingGuns[id][i] = myNumbers[i];
3273 }
3274 }
3275 }
3276 }
3277
3278 count = ExplodeString(szCovert, myNumbers);
3279
3280 if(count) { for(new i = 1; i < MAX; i++) { uCovert[i][id] = myNumbers[i]; } }
3281 count = ExplodeString(szDarker, myNumbers);
3282
3283 if(count) { for(new i = 1; i < MAX; i++) { Darker[i][id] = myNumbers[i]; } }
3284 count = ExplodeString(szMythical, myNumbers);
3285
3286 if(count) { for(new i = 1; i < MAX; i++) { Mythical[i][id] = myNumbers[i]; } }
3287 count = ExplodeString(szLegendary, myNumbers);
3288
3289 if(count) { for(new i = 1; i < MAX; i++) { Legendary[i][id] = myNumbers[i]; } }
3290
3291 count = ExplodeString(szKeys, myNumbers);
3292
3293 if(count) { for(new i = 1; i <= KEYS_COUNT; i++) { Keys[id][i] = myNumbers[i]; } }
3294
3295 count = ExplodeString(szChests, myNumbers);
3296
3297 if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
3298
3299 count = ExplodeString(szAch, myNumbers);
3300
3301 if(count) { for(new i = 1; i <= ACH_COUNT; i++) { Ach[id][i] = myNumbers[i]; } }
3302
3303 if(!equal(Password[id], SavedPassword[id]))
3304 {
3305 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
3306 }
3307 }
3308 Loged[id] = true;
3309 UnsetBlack(id);
3310 set_task(3.0, "GiveWishes", id);
3311 }
3312 }
3313}
3314
3315//WISHES FUNCTIONS; START.
3316public GiveWishes(id)
3317{
3318 if(LastDay[id] != Day)
3319 {
3320 Wishes[id]++;
3321 LastDay[id] = Day;
3322 SaveWishes(id);
3323 client_print_color(id, print_team_default, "%s ^1Už apsilankymą mūsų serveryje gavote papildomą norą!", Prefix);
3324 }
3325}
3326
3327public WishesMenu(id)
3328{
3329 new szText[256], xpcost, dropcost;
3330
3331 formatex(szText, sizeof(szText), "\r[\yGameNET\r]\w - Norai \r[\y%d\r]", Wishes[id]);
3332 new menu = menu_create(szText, "WishesHandler");
3333 new call = menu_makecallback("Call_Back");
3334
3335 xpcost = get_pcvar_num(cvar_WishesForDoubleXP);
3336 dropcost = get_pcvar_num(cvar_WishesForDropBonus);
3337
3338 formatex(szText, sizeof(szText), "XP Bonusas | TrukmÄ— 7d. | Kaina \r%d\w norai", xpcost);
3339 menu_additem(menu, szText, _, _, (Wishes[id] >= xpcost) ? 0 : call);
3340
3341 formatex(szText, sizeof(szText), "Drop Bonusas | TrukmÄ— 1d. | Kaina \r%d\w norai", dropcost);
3342 menu_additem(menu, szText, _, _, (Wishes[id] >= dropcost) ? 0 : call);
3343
3344 menu_display(id, menu);
3345 return PLUGIN_HANDLED;
3346}
3347
3348public WishesHandler(id, menu, item)
3349{
3350 if(item == MENU_EXIT)
3351 {
3352 menu_destroy(menu);
3353 return PLUGIN_HANDLED;
3354 }
3355
3356 new xpcost, dropcost, currenttime, xplasts, droplasts;
3357 xpcost = get_pcvar_num(cvar_WishesForDoubleXP);
3358 dropcost = get_pcvar_num(cvar_WishesForDropBonus);
3359 xplasts = get_pcvar_num(cvar_BonusXPLasts);
3360 droplasts = get_pcvar_num(cvar_DropBonusLasts);
3361 currenttime = get_systime();
3362
3363 switch(item)
3364 {
3365 case 0:
3366 {
3367 if(currenttime > DoubleXPExpire[id])
3368 {
3369 Wishes[id] -= xpcost;
3370 DoubleXPExpire[id] = currenttime + xplasts;
3371 SaveWishes(id);
3372 }
3373 else
3374 {
3375 client_print_color(id, print_team_default, "%s Jūs jau naudojates šia paslauga.", Prefix);
3376 }
3377 }
3378 case 1:
3379 {
3380 if(currenttime > DropBonusExpire[id])
3381 {
3382 Wishes[id] -= dropcost;
3383 DropBonusExpire[id] = currenttime + droplasts;
3384 SaveWishes(id);
3385 }
3386 else
3387 {
3388 client_print_color(id, print_team_default, "%s Jūs jau naudojates šia paslauga.", Prefix);
3389 }
3390 }
3391 }
3392 WishesMenu(id);
3393 return PLUGIN_HANDLED;
3394}
3395
3396bool:isXPActive(id)
3397{
3398 new currenttime;
3399 currenttime = get_systime();
3400
3401 if(currenttime < DoubleXPExpire[id])
3402 {
3403 return true;
3404 }
3405 else
3406 {
3407 return false;
3408 }
3409}
3410
3411bool:isDropActive(id)
3412{
3413 new currenttime;
3414 currenttime = get_systime();
3415
3416 if(currenttime < DropBonusExpire[id])
3417 {
3418 return true;
3419 }
3420 else
3421 {
3422 return false;
3423 }
3424}
3425//WISHES FUNCTIONS; END.
3426public SaveData(id)
3427{
3428 if(Loged[id] && gRegistered[id] && gCanSave)
3429 {
3430 static szQuery[3512], szSkins[512], szKSkins[512], szUGuns[128];
3431 static szMythical[512], szLegendary[512], szCovert[128];
3432 static szDarker[512];
3433
3434 static szKeys[256], szChests[256], szAch[256];
3435
3436 format(szKeys, sizeof(szKeys), "");
3437 format(szChests, sizeof(szChests), "");
3438 format(szAch, sizeof(szAch), "");
3439 format(szSkins, sizeof(szSkins), "");
3440 format(szKSkins, sizeof(szKSkins), "");
3441 format(szUGuns, sizeof(szUGuns), "");
3442
3443 format(szCovert, sizeof(szCovert), "");
3444 format(szDarker, sizeof(szDarker), "");
3445 format(szMythical, sizeof(szMythical), "");
3446 format(szLegendary, sizeof(szLegendary), "");
3447
3448 for(new i; i <= KEYS_COUNT; i++) { format(szKeys, sizeof(szKeys), "%s%d ", szKeys, Keys[id][i]); }
3449 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
3450 for(new i; i <= ACH_COUNT; i++) { format(szAch, sizeof(szAch), "%s%d ", szAch, Ach[id][i]); }
3451
3452 for(new i; i < MAX; i++) { format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]); }
3453 for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
3454
3455 for(new i; i < MAX; i++) { format(szCovert, sizeof(szCovert), "%s%d ", szCovert, uCovert[i][id]); }
3456
3457 for(new i; i < MAX; i++) { format(szDarker, sizeof(szDarker), "%s%d ", szDarker, Darker[i][id]); }
3458 for(new i; i < MAX; i++) { format(szMythical, sizeof(szMythical), "%s%d ", szMythical, Mythical[i][id]); }
3459 for(new i; i < MAX; i++) { format(szLegendary, sizeof(szLegendary), "%s%d ", szLegendary, Legendary[i][id]); }
3460
3461 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
3462
3463 formatex(szQuery, sizeof(szQuery), "REPLACE INTO `%s` SET `username` = '%s', `password` = '%s', `points` = '%d', `keys` = '%s', `chests` = '%s', `ach` = '%s', `skins` = '%s', `using_skins` = '%s', `skins_kills` = '%s', `get_covert` = '%s', `using_darker` = '%s', `using_mythical` = '%s', `using_legendary` = '%s', `wishes` = '%d', `last_day` = '%d', `doublexp_expire` = '%d', `dropbonus_expire` = '%d';", TABLE_NAME, get_user_name_ex(id), SavedPassword[id], Points[id], szKeys, szChests, szAch, szSkins, szUGuns, szKSkins, szCovert, szDarker, szMythical, szLegendary, Wishes[id], LastDay[id], DoubleXPExpire[id], DropBonusExpire[id]);
3464 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3465
3466 log_errors("[SAVE LOG'S] %s", szQuery);
3467 }
3468}
3469
3470public QuerySetData(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
3471{
3472 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
3473 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
3474}
3475
3476public UnsetBlack(id)
3477{
3478 rg_reset_maxspeed(id);
3479 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
3480 write_short(1<<10);
3481 write_short(1<<10);
3482 write_short(0x0000);
3483 write_byte(255);
3484 write_byte(255);
3485 write_byte(255);
3486 write_byte(50);
3487 message_end();
3488}
3489
3490public RegMenu(id)
3491{
3492 static sId; sId = id;
3493 id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
3494
3495 if(Loged[id])
3496 {
3497 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
3498 Menu(id);
3499 return PLUGIN_HANDLED;
3500 }
3501
3502 if(!gLogged[id] || !gCanLoad)
3503 {
3504 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
3505 remove_task(id+TASKID_REMENU);
3506 set_task(1.0, "RegMenu", id+TASKID_REMENU);
3507 return PLUGIN_HANDLED;
3508 }
3509 remove_task(id+TASKID_REMENU);
3510
3511 if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
3512 {
3513 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
3514 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
3515 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
3516
3517 UnsetBlack(id);
3518 return PLUGIN_HANDLED;
3519 }
3520
3521 if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
3522 {
3523 Login(id);
3524 /* client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix); */
3525 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
3526 return PLUGIN_HANDLED;
3527 }
3528
3529 new szString[128], Name[MAX_NAME_LENGTH];
3530 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMMAIN");
3531
3532 new rMenu = menu_create(szString, "rMenuHandler");
3533 get_user_name(id, Name, 31);
3534
3535 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name); // Client name
3536 menu_additem(rMenu, szString, "0");
3537
3538 new szPassword[126];
3539 for(new i; i < strlen(Password[id]); i++) { format(szPassword, charsmax(szPassword), "%s*", szPassword); }
3540
3541 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
3542 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword); // Client password
3543
3544 menu_additem(rMenu, szString, "1");
3545
3546 if(!gRegistered[id]) // Not registered
3547 {
3548 format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
3549 menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
3550 }
3551 else
3552 {
3553 if(!Loged[id]) // Registered, but not logged
3554 {
3555 new gPassCheck = equal(SavedPassword[id], Password[id]);
3556
3557 format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
3558 menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
3559 }
3560 else { Menu(id); }
3561 }
3562
3563 menu_display(id, rMenu);
3564 return PLUGIN_HANDLED;
3565}
3566
3567public rMenuHandler(id, gMenu, item)
3568{
3569 if(item == MENU_EXIT)
3570 {
3571 menu_destroy(gMenu);
3572 return PLUGIN_CONTINUE;
3573 }
3574
3575 new data[9], Name[64], Key;
3576 new access, callback;
3577 menu_item_getinfo(gMenu, item, access, data, charsmax(data), Name, charsmax(Name), callback);
3578 Key = str_to_num(data);
3579
3580 switch(Key)
3581 {
3582 case 0: { RegMenu(id); }
3583 case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
3584 case 2:
3585 {
3586 if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
3587 {
3588 copy(SavedPassword[id], 31, Password[id]);
3589 Loged[id] = true;
3590 gRegistered[id] = true;
3591 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix);
3592
3593 SaveData(id);
3594 UnsetBlack(id);
3595
3596 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, 31);
3597 log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
3598
3599 gWarnings[id] = 0;
3600 print_color(id, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
3601
3602 return PLUGIN_CONTINUE;
3603 } else {
3604 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
3605 return PLUGIN_HANDLED;
3606 }
3607 }
3608 case 3:
3609 {
3610 if(!Loged[id])
3611 {
3612 gWarnings[id] = 0;
3613 Login(id);
3614 }
3615 }
3616 }
3617 return PLUGIN_CONTINUE;
3618}
3619
3620public PlayerPassword(id)
3621{
3622 if(Loged[id]) { return PLUGIN_HANDLED; }
3623
3624 new Data[32]; read_args(Data, 31); remove_quotes(Data);
3625
3626 if(strlen(Data) < MIN_PASSWORD_LENGTH)
3627 {
3628 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
3629 client_cmd(id, "messagemode UserPassword");
3630 return PLUGIN_HANDLED;
3631 }
3632 else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
3633 {
3634 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
3635 gWarnings[id]++;
3636
3637 if(gWarnings[id] >= 3)
3638 {
3639 gWarnings[id] = 0;
3640 server_cmd("fb_ban #%d 15^"Trying to hack other account!^"", get_user_userid(id));
3641 }
3642 }
3643 copy(Password[id], 31, Data);
3644 RegMenu(id);
3645 return PLUGIN_CONTINUE;
3646}
3647
3648public NameChange(id)
3649{
3650 if(get_cvar_num("sv_show_nick"))
3651 return FMRES_IGNORED;
3652
3653 if(!is_user_connected(id) || is_user_bot(id))
3654 return FMRES_IGNORED;
3655
3656 new dName[MAX_NAME_LENGTH], NewName[MAX_NAME_LENGTH], Name[MAX_NAME_LENGTH];
3657 get_user_name(id, Name, 31);
3658 pev(id, pev_netname, dName, charsmax(dName));
3659
3660 if(dName[0])
3661 {
3662 get_user_info(id, "name", NewName, charsmax(NewName));
3663
3664 if(!equal(dName, NewName))
3665 {
3666 set_user_info(id, "name", dName);
3667 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
3668 return FMRES_HANDLED;
3669 }
3670 }
3671 return FMRES_IGNORED;
3672}
3673
3674public Registered(id)
3675{
3676 if(!is_user_connected(id) || is_user_bot(id))
3677 return;
3678
3679 static szQuery[256], iData[1]; iData[0] = id;
3680
3681 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
3682 SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
3683
3684 log_errors("[REGISTERED] %s", szQuery);
3685}
3686
3687public QuerySelectReg(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
3688{
3689 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
3690 {
3691 log_errors("[QuerySelectReg] %s", szError); return;
3692 }
3693 else
3694 {
3695 new id = iData[0];
3696
3697 if(SQL_NumResults(hQuery))
3698 {
3699 gLogged[id] = true;
3700 gRegistered[id] = true;
3701
3702 new passfield[32], password[32];
3703 get_pcvar_string(csgo_password_field, passfield, 31);
3704 get_user_info(id, passfield, password, 31);
3705
3706 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
3707
3708 if(equal(password, SavedPassword[id]))
3709 {
3710 Password[id] = password;
3711 }
3712
3713 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, 31);
3714 log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
3715 }
3716 else
3717 {
3718 gLogged[id] = true;
3719 gRegistered[id] = false;
3720
3721 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, 31);
3722 log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
3723 }
3724 }
3725}
3726
3727public UpdateStatusText(id)
3728{
3729 new szText[256], wid = get_user_weapon(id, _, _);
3730 if(bUsingGuns[id][wid])
3731 {
3732 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wid]][id], WeaponNames[bUsingGuns[id][wid]]);
3733 }
3734 else
3735 {
3736 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK", WeaponNames[bUsingGuns[id][wid]]);
3737 }
3738 set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
3739 ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
3740}
3741
3742public SkinBuy(id)
3743{
3744 new szText[256];
3745 new Key = BuySkin[id];
3746
3747 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CONFIRM_BUY_SKIN", szWeaponNames[Weapons[WeaponinMarket[Key]]], WeaponNames[WeaponinMarket[Key]]);
3748 new menu = menu_create(szText, "BuySkinHandler");
3749
3750 menu_additem(menu, "Taip");
3751 menu_additem(menu, "Ne");
3752
3753 menu_display(id, menu, 0);
3754}
3755
3756public BuySkinHandler(id, menu, item)
3757{
3758 MenuMod[id] = 4;
3759
3760 if(item == MENU_EXIT)
3761 {
3762 Menu(id);
3763 return PLUGIN_HANDLED;
3764 }
3765
3766 if(item == 0)
3767 {
3768 new Key = BuySkin[id];
3769 new Name[MAX_NAME_LENGTH]; get_user_name(Key, Name, 31);
3770 new mName[MAX_NAME_LENGTH]; get_user_name(id, mName, 31);
3771
3772 if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
3773 {
3774 inMarket[Key] = false;
3775 MarketPoints[Key] = 0;
3776 WeaponinMarket[Key] = 0;
3777
3778 return PLUGIN_CONTINUE;
3779 }
3780 print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, szWeaponNames[Weapons[WeaponinMarket[Key]]], WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
3781
3782 uWeapon[WeaponinMarket[Key]][id]++;
3783 uWeapon[WeaponinMarket[Key]][Key]--;
3784
3785 if(!uWeapon[WeaponinMarket[Key]][Key])
3786 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
3787
3788 static szQuery[512], szUGuns[128];
3789
3790 format(szUGuns, sizeof(szUGuns), "");
3791 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
3792
3793 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
3794 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3795
3796 log_errors("[SKIN SHOP] %s", szQuery);
3797
3798 format(szUGuns, sizeof(szUGuns), "");
3799 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
3800
3801 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
3802 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3803
3804 log_errors("[SKIN SHOP] %s", szQuery);
3805
3806 rg_send_audio(Key, SOUND_SOLD, PITCH_NORM);
3807
3808 Points[Key] += MarketPoints[Key];
3809 Points[id] -= MarketPoints[Key];
3810 SaveData(Key);
3811 SaveData(id);
3812
3813 mAmount[Key] = 0;
3814 inMarket[Key] = false;
3815 MarketPoints[Key] = 0;
3816 WeaponinMarket[Key] = 0;
3817 }
3818 Menu(id);
3819 return PLUGIN_HANDLED;
3820}
3821
3822stock ach_name(iNum)
3823{
3824 new szReturn[1024];
3825
3826 switch(iNum)
3827 {
3828 case 1: { formatex(szReturn, charsmax(szReturn), "Nužudyk %d priešų", 20); }
3829 case 2: { formatex(szReturn, charsmax(szReturn), "PadÄ—k %d C4", 25); }
3830 case 3: { formatex(szReturn, charsmax(szReturn), "Išminuok %d C4", 30); }
3831 case 4: { formatex(szReturn, charsmax(szReturn), "Išgyvenk %d Raundų", 150); }
3832 case 5: { formatex(szReturn, charsmax(szReturn), "Sudaryti %d Kontraktų", 20); }
3833 case 6: { formatex(szReturn, charsmax(szReturn), "Atidaryti %d Skrynių", 20); }
3834 case 7: { formatex(szReturn, charsmax(szReturn), "Susprogdink %d C4", 40); }
3835 case 8: { formatex(szReturn, charsmax(szReturn), "Nužudyk %d priešus kai jie paveikti flashbango", 25); }
3836 case 9: { formatex(szReturn, charsmax(szReturn), "Nužudyk %d priešų būdamas paveiktas flashbango", 30); }
3837 }
3838
3839 return szReturn;
3840}
3841
3842stock chest_name(iNum)
3843{
3844 new szReturn[126];
3845
3846 switch(iNum)
3847 {
3848 case 1: { formatex(szReturn, charsmax(szReturn), "GameNET"); }
3849 }
3850 return szReturn;
3851}
3852
3853stock keys_name(iNum)
3854{
3855 new szReturn[126];
3856
3857 switch(iNum)
3858 {
3859 case 1: { formatex(szReturn, charsmax(szReturn), "GameNET"); }
3860 }
3861 return szReturn;
3862}
3863
3864stock get_access(id)
3865{
3866 if(get_user_flags(id) & ACCESS_SADMIN)
3867 {
3868 return 3;
3869 }
3870 else if(get_user_flags(id) & ACCESS_ADMIN)
3871 {
3872 return 2;
3873 }
3874 else if(get_user_flags(id) & ACCESS_VIP)
3875 {
3876 return 1;
3877 }
3878 return 0;
3879}
3880
3881stock display_stats(bool:reset = false)
3882{
3883 new statsmessage[512], len, defender, defender_count, rusher, rusher_count, attacker, attacker_count;
3884
3885 for(new id = 1; id <= MaxClients; id++)
3886 {
3887 if(!is_user_connected(id)) { continue; }
3888
3889 if(game_stats[id][DEFENDER] > defender_count)
3890 {
3891 defender = id;
3892 defender_count = game_stats[id][DEFENDER];
3893 }
3894
3895 if(game_stats[id][RUSHER] > rusher_count)
3896 {
3897 rusher = id;
3898 rusher_count = game_stats[id][RUSHER];
3899 }
3900
3901 if(game_stats[id][ATTACKER] > attacker_count)
3902 {
3903 attacker = id;
3904 attacker_count = game_stats[id][ATTACKER];
3905 }
3906 }
3907
3908 new rNum = random(CHEST_COUNT)+1, pNum = random_num(MIN_POINTS_ATTACKER, MAX_POINTS_ATTACKER);
3909 new defender_name[MAX_NAME_LENGTH], rusher_name[MAX_NAME_LENGTH], attacker_name[MAX_NAME_LENGTH];
3910 get_user_name(defender, defender_name, charsmax(defender_name));
3911 get_user_name(rusher, rusher_name, charsmax(rusher_name));
3912 get_user_name(attacker, attacker_name, charsmax(attacker_name));
3913
3914 Keys[defender][rNum]++;
3915 SaveKeys(defender);
3916
3917 Chest[rusher][rNum]++;
3918 SaveChests(rusher);
3919
3920 Points[attacker] += pNum;
3921 SavePoints(attacker);
3922
3923 client_print_color(0, print_team_default, "^1[^4Public^1] ^3Best defender ^1%s^4 LaimÄ—jo ^1%s ^1raktÄ….", defender_name, keys_name(rNum));
3924 client_print_color(0, print_team_default, "^1[^4Public^1] ^3Best attacker ^1%s^4 Laimėjo ^1%d taškū.", attacker_name, pNum);
3925 client_print_color(0, print_team_default, "^1[^4Public^1] ^3Best rusher ^1%s^4 LaimÄ—jo ^1%s skryniÄ….", rusher_name, chest_name(rNum));
3926
3927 set_hudmessage(192, 192, 192, 0.65, 0.2, 0, 6.0, 15.0, reset ? 0.0 : 1.0, 1.0);
3928
3929 for(new id = 1; id <= MaxClients; id++)
3930 {
3931 if(!is_user_connected(id)) { continue; }
3932
3933 len = formatex(statsmessage, charsmax(statsmessage), "%L", id, "RUSH_STATS_DEFENDER", defender_name, defender_count);
3934 len += formatex(statsmessage[len], charsmax(statsmessage) - len, "^n^n%L", id, "RUSH_STATS_RUSHER", rusher_name, rusher_count);
3935 formatex(statsmessage[len], charsmax(statsmessage) - len, "^n^n%L", id, "RUSH_STATS_ATTACKER", attacker_name, attacker_count);
3936
3937 show_hudmessage(id, "%s", statsmessage);
3938 }
3939
3940 if(reset)
3941 {
3942 for(new id = 1; id <= MaxClients; id++)
3943 {
3944 arrayset(game_stats[id], 0, sizeof(game_stats[]));
3945 }
3946 }
3947}
3948
3949stock screen_color(id)
3950{
3951 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
3952 write_short(1<<10);
3953 write_short(1<<10);
3954 write_short(0x0000);
3955 write_byte(255);
3956 write_byte(0);
3957 write_byte(0);
3958 write_byte(75);
3959}
3960
3961stock ExplodeString(const string[], output[], olen = sizeof output)
3962{
3963 new len = strlen(string); // We retrieve the length of the current string passed.
3964
3965 if (!len) { return 0; } // If the string is empty we stop there.
3966
3967 new i, c, j, count;
3968 new number[12];
3969
3970 do {
3971 while (string[i] == ' ') i++; // One or more spaces can be used between 2 numbers, so we move forward until we find a number.
3972 while ((number[j++] = c = string[i++]) && c != ' ') {} // We loop and save the number found until the next space found or end of string.
3973
3974 output[count++] = str_to_num(number); // We convert the number saved previously into a number and we stored in output at the slot count.
3975 j = 0; }
3976
3977 while (i < len && count < olen); // We should looping while we have not cross the string length.
3978
3979 return count;
3980}
3981
3982stock get_user_name_ex(id)
3983{
3984 new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, charsmax(szName));
3985
3986 replace_all(szName, charsmax(szName), "'", "\'");
3987 replace_all(szName, charsmax(szName), "^"", "\^"");
3988 return szName;
3989}
3990
3991stock print_color(const id, const input[], any:...)
3992{
3993 new Count = 1, Players[32];
3994 static Msg[260]; vformat(Msg, 260, input, 3);
3995
3996 replace_all(Msg, 260, "!g", "^4");
3997 replace_all(Msg, 260, "!y", "^1");
3998 replace_all(Msg, 260, "!t", "^3");
3999
4000 if(id) Players[0] = id; else get_players(Players, Count, "ch"); {
4001
4002 for(new i = 0; i < Count; i++)
4003 {
4004 if(is_user_connected(Players[i]))
4005 {
4006 message_begin(MSG_ONE, get_user_msgid("SayText"), _, Players[i]);
4007 write_byte(Players[i]);
4008 write_string(Msg);
4009 message_end();
4010 }
4011 }
4012 }
4013 return PLUGIN_HANDLED;
4014}
4015
4016stock bool:ValidMdl(Mdl[])
4017{
4018 return (containi(Mdl, ".mdl") != -1) ? true : false;
4019}
4020
4021stock get_weapon_maxclip(wpnid = 0)
4022{
4023 for(new a = 0; a < sizeof (g_weapons); a++)
4024 {
4025 if(wpnid == g_weapons[a])
4026 {
4027 return g_max_clip[a];
4028 }
4029 }
4030 return false;
4031}
4032
4033stock SetFullBpAmmo(id, iWeaponID)
4034{
4035 new iFullbpammo, iAmmoId;
4036
4037 for(new i = 1; i < AmmoIds; i++)
4038 {
4039 if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
4040 {
4041 iAmmoId = i;
4042 iFullbpammo = g_iAmmoMax[i];
4043 break;
4044 }
4045 }
4046
4047 if(!iAmmoId)
4048 return;
4049
4050 cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
4051
4052 message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
4053 write_byte(iAmmoId);
4054 write_byte(iFullbpammo);
4055 message_end();
4056}
4057
4058stock has_user_weapon(id, iCswId, iSlot = 0)
4059{
4060 new iWeapon;
4061
4062 if(!iSlot)
4063 {
4064 static const iWeaponsSlots[] =
4065 {
4066 -1,
4067 2, // CSW_P228
4068 -1,
4069 1, // CSW_SCOUT
4070 4, // CSW_HEGRENADE
4071 1, // CSW_XM1014
4072 5, // CSW_C4
4073 1, // CSW_MAC10
4074 1, // CSW_AUG
4075 4, // CSW_SMOKEGRENADE
4076 2, // CSW_ELITE
4077 2, // CSW_FIVESEVEN
4078 1, // CSW_UMP45
4079 1, // CSW_SG550
4080 1, // CSW_GALIL
4081 1, // CSW_FAMAS
4082 2, // CSW_USP
4083 2, // CSW_GLOCK18
4084 1, // CSW_AWP
4085 1, // CSW_MP5NAVY
4086 1, // CSW_M249
4087 1, // CSW_M3
4088 1, // CSW_M4A1
4089 1, // CSW_TMP
4090 1, // CSW_G3SG1
4091 4, // CSW_FLASHBANG
4092 2, // CSW_DEAGLE
4093 1, // CSW_SG552
4094 1, // CSW_AK47
4095 3, // CSW_KNIFE
4096 1 // CSW_P90
4097 }; iSlot = iWeaponsSlots[iCswId];
4098 }
4099
4100 const XO_PLAYER = 5;
4101 const m_rgpPlayerItems_Slot0 = 367;
4102
4103 iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
4104
4105 const XO_WEAPON = 4;
4106 const m_pNext = 42;
4107 const m_iId = 43;
4108
4109 while(iWeapon > 0)
4110 {
4111 if(get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId)
4112 return iWeapon;
4113
4114 iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
4115 }
4116 return 0;
4117}
4118
4119stock GiveCredits(id)
4120{
4121 if(Loged[id] && gRegistered[id] && gCanSave)
4122 {
4123 new szQuery[1024];
4124
4125 formatex(szQuery, sizeof(szQuery), "UPDATE `web_users` SET `kreditai` = kreditai + 1 WHERE `username` = '%s';", get_user_name_ex(id));
4126 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4127
4128 log_errors("[SAVE WARKILLS] %s", szQuery);
4129 }
4130}
4131
4132stock SavePoints(id)
4133{
4134 if(Points[id] < 0)
4135 Points[id] = 0;
4136
4137 if(Loged[id] && gRegistered[id] && gCanSave)
4138 {
4139 new szQuery[1024];
4140
4141 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d' WHERE `username` = '%s';", TABLE_NAME, Points[id], get_user_name_ex(id));
4142 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4143
4144 log_errors("[SAVE POINTS] %s", szQuery);
4145 }
4146}
4147
4148stock SaveWishes(id)
4149{
4150 if(Loged[id] && gRegistered[id] && gCanSave)
4151 {
4152 new szQuery[1024];
4153
4154 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `wishes` = '%d', `last_day` = '%d', `doublexp_expire` = '%d', `dropbonus_expire` = '%d' WHERE `username` = '%s';", TABLE_NAME, Wishes[id], LastDay[id], DoubleXPExpire[id], DropBonusExpire[id], get_user_name_ex(id));
4155 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4156
4157 log_errors("[SAVE WISHES] %s", szQuery);
4158 }
4159}
4160
4161stock SaveAch(id)
4162{
4163 if(Loged[id] && gRegistered[id] && gCanSave)
4164 {
4165 new szQuery[1024], szAch[256];
4166 for(new i; i <= ACH_COUNT; i++) { format(szAch, sizeof(szAch), "%s%d ", szAch, Ach[id][i]); }
4167
4168 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `ach` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szAch, get_user_name_ex(id));
4169 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4170
4171 log_errors("[SAVE ACH] %s", szQuery);
4172 }
4173}
4174
4175stock SaveTime(id)
4176{
4177 if(Loged[id] && gRegistered[id] && gCanSave)
4178 {
4179 new szQuery[1024];
4180
4181 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `reward` = '%d', `player` = '%d', `laikas` = '%d' WHERE `username` = '%s';", TABLE_NAME, Reward[id], PlayerXP[id], PradinisLaikas[id], get_user_name_ex(id));
4182 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4183
4184 log_errors("[SAVE TIME] %s", szQuery);
4185 }
4186}
4187
4188stock SaveChests(id)
4189{
4190 if(Loged[id] && gRegistered[id] && gCanSave)
4191 {
4192 new szQuery[1024], szChests[256];
4193 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
4194
4195 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
4196 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4197
4198 log_errors("[SAVE CHESTS] %s", szQuery);
4199 }
4200}
4201
4202stock SaveKeys(id)
4203{
4204 if(Loged[id] && gRegistered[id] && gCanSave)
4205 {
4206 new szQuery[1024], szKeys[256];
4207 for(new i; i <= KEYS_COUNT; i++) { format(szKeys, sizeof(szKeys), "%s%d ", szKeys, Keys[id][i]); }
4208
4209 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `keys` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szKeys, get_user_name_ex(id));
4210 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4211
4212 log_errors("[SAVE KEY'S] %s", szQuery);
4213 }
4214}
4215
4216stock SaveGunsKills(id)
4217{
4218 if(Loged[id] && gRegistered[id] && gCanSave)
4219 {
4220 new szQuery[1024], szKSkins[1024];
4221 for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
4222
4223 formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
4224 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
4225
4226 log_errors("[SAVE GUNS KILLS] %s", szQuery);
4227 }
4228}
4229
4230stock log_errors(const szText[], any:...)
4231{
4232 static szMessage[256]; vformat(szMessage, 256, szText, 2);
4233 log_to_file(g_logfile, szMessage);
4234 return PLUGIN_HANDLED;
4235}