· 7 years ago · Mar 04, 2019, 04:34 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <cstrike>
4#include <hamsandwich>
5#include <fakemeta>
6#include <fun>
7#include <nvault>
8#include <engine>
9#include <fakemeta_util>
10#include <csx>
11#include <sqlx>
12#include <supply>
13#include <xs>
14
15#define MAX_PARTY_SLOTS 5
16#define SLOT_COST 7500
17
18new time_delete,g_Vault;
19new const Tag[] = "CS:GO Unlimited Week Login";
20
21enum
22{
23 TYPE_CONTRACT,
24 TYPE_CONTRACTS,
25 TYPE_COVERT
26}
27
28new PartySlots[33], bool:PartyCreated[33], bool:PartyInvites[33][33], InParty[33];
29// # Project by DeRoiD https://forums.alliedmods.net/showthread.php?t=265653
30// # Author by Psychical https://www.supergames.lt/topic/244152-hot-csgo-modas-amxx-100€-1-ip/
31
32new const PLUGIN[] = "1.2.1a";
33new const VERSION[] = "BETA";
34new const AUTHOR1[] = "NsN";
35new const AUTHOR2[] = "LycaNiaN";
36/*================================================================================
37[MySQLx Vars, other]
38=================================================================================*/
39#define DB_HOST "185.223.59.140"
40#define DB_USER "admin_lyca"
41#define DB_PASS "Uh8gXEUXWb"
42#define DB_DATA "admin_lyca"
43
44#define TABLE_NAME "rcsgo_player"
45
46#define EVENT "^1[^4CS:GO Unlimited^1]" // Prefix'as prie tekstų Event
47
48#define ACCESS_VIP ADMIN_LEVEL_C // VIP access
49#define ACCESS_ADMIN ADMIN_BAN // ADMIN access
50#define ACCESS_SADMIN ADMIN_IMMUNITY //SADMIN access
51
52#define SOUND_SOLD "ambience/quail1.wav"
53
54new Handle:g_hTuple;
55new g_msgid_ScreenFade, g_msgid_SyncHud;
56
57#define MAX 400 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
58#define MAX_RANGS 30
59
60#define CHEST_ID 500
61#define CHEST_COUNT 9
62#define CHESTS_COST 1400
63
64#define KEY_ID 600
65#define KEY_ID_TEXT "600"
66
67#define MAX_CONTRACT 1
68#define CONTRACT_COST 5000
69
70#define DROP_RATE_KEYS 1000
71#define DROP_RATE_CHEST 1000
72
73#define POINTS_KILL_MIN 3
74#define POINTS_KILL_MAX 6
75#define POINTS_KILL_HS 3
76
77#define POINTS_KILL_VIP_FLAG ACCESS_VIP
78#define POINTS_KILL_MIN_VIP 2
79#define POINTS_KILL_MAX_VIP 5
80
81#define POINTS_KILL_ADMIN_FLAG ACCESS_ADMIN
82#define POINTS_KILL_MIN_ADMIN 4
83#define POINTS_KILL_MAX_ADMIN 6
84
85#define PATIRTIS_KILL_MIN 7
86#define PATIRTIS_KILL_MAX 14
87#define PATIRTIS_KILL_HS 5
88
89#define DROP_RATE_DEF_KEY 16
90#define DROP_RATE_DEF_KEY_VIP 21
91#define DROP_RATE_DEF_KEY_ADMIN 32
92
93#define DROP_RATE_PLANT_KEY 16
94#define DROP_RATE_PLANT_KEY_VIP 21
95#define DROP_RATE_PLANT_KEY_ADMIN 32
96
97#define DROP_RATE_HOSTAGE_KEY 12
98#define DROP_RATE_HOSTAGE_KEY_VIP 12
99#define DROP_RATE_HOSTAGE_KEY_ADMIN 12
100
101#define DROP_RATE_KILL 8
102#define DROP_RATE_PLANT 8
103#define DROP_RATE_DEF 8
104#define DROP_RATE_HOSTAGE 8
105
106#define DROP_RATE_VIP_FLAG ACCESS_VIP
107#define DROP_RATE_KILL_VIP 12
108#define DROP_RATE_PLANT_VIP 12
109#define DROP_RATE_DEF_VIP 12
110#define DROP_RATE_HOSTAGE_VIP 12
111
112#define DROP_RATE_ADMIN_FLAG ACCESS_ADMIN
113#define DROP_RATE_KILL_ADMIN 16
114#define DROP_RATE_PLANT_ADMIN 16
115#define DROP_RATE_DEF_ADMIN 16
116#define DROP_RATE_HOSTAGE_ADMIN 16
117
118#define MIN_PASSWORD_LENGTH 4
119#define MIN_CODE_LENGTH 6
120
121#define MARKET_MIN_PRICE 200
122#define MARKET_WAIT_ADD 3
123
124#define HOSTAGE_ESCAPE 3
125#define HOSTAGE_ESCAPE_VIP 5
126#define HOSTAGE_ESCAPE_ADMIN 9
127
128#define HOSTAGE_KILL_PENALTY 15 // Reduce Points
129
130#define BOMB_PLANTED_POINTS 3
131#define BOMB_DEFUSED_POINTS 7
132
133#define BOMB_PLANTED_POINTS_VIP 3
134#define BOMB_DEFUSED_POINTS_VIP 6
135
136#define BOMB_PLANTED_POINTS_ADMIN 3
137#define BOMB_DEFUSED_POINTS_ADMIN 6
138
139#define ROUND_WIN_POINTS 10
140#define ROUND_WIN_PATIRTIS 5
141
142#define NEED_PLAYER 20
143#define NEED_PLAYERS 10
144#define NEED_MIN_PLAYERS 2
145
146new g_logfile[64];
147new bool:gEnd = false;
148
149#define TASKID_REMENU 100
150
151new csgo_password_field;
152
153new colchar[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ }
154
155new cvar_refill_spawn;
156
157// Cvar pointers
158new p_allchat, p_alltalk, p_hidestat, p_teamchat;
159
160// Vars to check if message has already been duplicated
161new alv_sndr, alv_str2[26], alv_str4[101];
162new msg[513];
163new gWarnings[33] = 0;
164
165/*================================================================================
166=================================================================================*/
167new const g_weapons[] =
168{
169 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,
170 CSW_GLOCK18, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_DEAGLE, CSW_SG552, CSW_AK47, CSW_P90
171}
172new const g_other_weapons[] = { CSW_KNIFE, CSW_HEGRENADE, CSW_C4 }
173new 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 }
174enum _:AmmoIds { ammo_none, ammo_338magnum = 1, ammo_762nato, ammo_556natobox, ammo_556nato, ammo_buckshot, ammo_45acp, ammo_57mm, ammo_50ae, ammo_357sig, ammo_9mm }
175new g_iAmmoMax[AmmoIds] = { -1, 30, 90, 200, 90, 32, 100, 100, 35, 52, 120 }
176
177new const g_iAmmoWeaponSharedBitSum[AmmoIds] = { 0,
178 (1<<CSW_AWP), (1<<CSW_SCOUT)|(1<<CSW_G3SG1)|(1<<CSW_AK47), (1<<CSW_M249),
179 (1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M4A1)|(1<<CSW_SG552),
180 (1<<CSW_XM1014)|(1<<CSW_M3), (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_USP),
181 (1<<CSW_P90)|(1<<CSW_FIVESEVEN), (1<<CSW_DEAGLE), (1<<CSW_P228),
182 (1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_ELITE)|(1<<CSW_GLOCK18)
183}
184new g_msgid_AmmoX;
185
186#pragma semicolon 1;
187
188new WeaponNames[MAX][64], WeaponMdls[MAX][128], WeaponMdlsP[MAX][128], Weapons[MAX], WeaponDrop[MAX], AllWeapon;
189new uWeapon[MAX][33], weaponRang[MAX], uWeaponKills[MAX][33], Chest[33][CHEST_COUNT+1], pKey[33], Points[33], Rang[33], Rounds[33], Patirtis[33], Killers[33], Kills[33], aThing[33], aTarget[33], aPoints[33], Prefix[32], Kontraktas[33], Contract[MAX][33], Contracts[MAX][33], Covert[MAX][33];
190new Folder[48], SkinFile[48], RangFile[48], DefaFile[48], MenuMod[33];
191new WeaponinMarket[33], inMarket[33], MarketPoints[33];
192new SavedPassword[33][32], bool:Loged[33], bool:gLogged[33], bool:gRegistered[33], Password[33][32];
193new DefaultSkin[33][32], DefaultSkinP[33][32], DefaultSkinW[33][32], NeedPatirtis[MAX_RANGS], Rangs[MAX_RANGS][32];
194new gCanLoad, gCanSave;
195new bUsingGuns[33][CSW_VESTHELM];
196new gLastMarketTime[33] = 0, gPlayerTime[33];
197new chestsList[CHEST_COUNT+1][128][512];
198new chestsChance[CHEST_COUNT+1][128];
199new bool:RewardTaken[33];
200new gKey[33];
201
202new TradeTarget[33] = 0, TradeAccept[33] = -1, TradeSkin[33] = -1, TradeChest[33] = -1, TradeChestCount[33] = 0, TradeKey[33] = -1, TradeMoney[33] = 0, bool:canOffer[33] = true, bool:inMM[33];
203new aAmount[33], mAmount[33], uniqPrice[MAX];
204
205new const eWeapon[][] =
206{
207 "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
208 "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
209 "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
210 "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
211 "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
212};
213
214new const szWeaponNames[][] =
215{
216 "", "P228", "MP5 Navy", "SSG 08", "HE", "XM1014", "C4", "MAC-10", "Aug", "SG", "Elite",
217 "Five-Seven", "UMP-45", "SG-550", "Galil", "Famas", "USP-S", "Glock-18", "AWP", "MP5 Navy", "M249",
218 "M3", "M4A1-S", "TMP", "G3SG1", "FB", "Deagle", "SG-552", "AK-47", "Knives", "P90"
219};
220
221
222public plugin_precache()
223{
224 register_dictionary("globaloffensive.txt");
225
226 get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));
227
228 log_errors("-------------------- == --------------------");
229 new Line[512], Data[9][128], Len;
230 AllWeapon++;
231 get_configsdir(Folder, 47);
232 format(SkinFile, 47, "%s/rcsgo/skins.cfg", Folder);
233 format(RangFile, 47, "%s/rcsgo/rangs.cfg", Folder);
234 format(DefaFile, 47, "%s/rcsgo/dskins.cfg", Folder);
235
236 if(file_exists(RangFile))
237 {
238 for(new i; i < file_size(RangFile, 1); i++)
239 {
240 if(i >= MAX_RANGS)
241 {
242 log_errors("[plugin_precache] Increase your MAX_RANGS define.");
243 break;
244 }
245
246 read_file(RangFile, i, Line, 127, Len);
247 parse(Line, Data[0], 31, Data[1], 31);
248
249 copy(Rangs[i], 31, Data[0]);
250 NeedPatirtis[i] = str_to_num(Data[1]);
251 }
252 }
253
254 if(file_exists(SkinFile))
255 {
256 for(new i; i < file_size(SkinFile, 1); i++)
257 {
258 if(AllWeapon >= MAX)
259 {
260 log_errors("[plugin_precache] Increase your MAX define.");
261 break;
262 }
263
264 read_file(SkinFile, i, Line, 512, Len);
265
266 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
267 continue;
268
269 // Ginklas, pavadinimas, v_, p_, chance - old
270 // Ginklas, pavadinimas, v_, p_, chest, chance, number
271 parse(Line, Data[0], 31, Data[1], 31, Data[2], 128, Data[3], 128, Data[4], 31, Data[5], 31, Data[6], 31, Data[7], 31, Data[8], 31);
272
273 Weapons[AllWeapon] = str_to_num(Data[0]);
274 copy(WeaponNames[AllWeapon], 63, Data[1]);
275
276 if(ValidMdl(Data[2]))
277 {
278 precache_model(Data[2]);
279 copy(WeaponMdls[AllWeapon], 128, Data[2]);
280
281 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
282 {
283 precache_model(Data[3]);
284 copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
285 }
286 }
287
288 WeaponDrop[AllWeapon] = str_to_num(Data[4]);
289
290 chestsChance[str_to_num(Data[4])][str_to_num(Data[5])] += 1;
291 chestsList[str_to_num(Data[4])][str_to_num(Data[5])][str_to_num(Data[6])] = AllWeapon;
292
293 // log_amx("chestsList[%s][%s][%s] = %d", Data[4], Data[5], Data[6], AllWeapon);
294
295 uniqPrice[AllWeapon] = str_to_num(Data[7]);
296
297 if(Data[8][0] == 'W') weaponRang[AllWeapon] = 4;
298 else if(Data[8][0] == 'B') weaponRang[AllWeapon] = 3;
299 else if(Data[8][0] == 'R') weaponRang[AllWeapon] = 2;
300 else if(Data[8][0] == 'Y') weaponRang[AllWeapon] = 1;
301 else weaponRang[AllWeapon] = 0;
302
303 AllWeapon++;
304 }
305 }
306 if(file_exists(DefaFile))
307 {
308 for(new i; i < file_size(DefaFile, 1); i++)
309 {
310 read_file(DefaFile, i, Line, 127, Len);
311
312 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
313 continue;
314
315 parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
316
317 if(ValidMdl(Data[1]))
318 {
319 precache_model(Data[1]);
320 copy(DefaultSkin[str_to_num(Data[0])], 47, Data[1]);
321
322 if(file_exists(Data[2]) && strlen(Data[2]) > 5)
323 {
324 precache_model(Data[2]);
325 copy(DefaultSkinP[str_to_num(Data[0])], 47, Data[2]);
326 }
327
328 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
329 {
330 precache_model(Data[3]);
331 copy(DefaultSkinW[str_to_num(Data[0])], 47, Data[3]);
332 }
333 }
334 }
335 }
336
337 precache_sound(SOUND_SOLD);
338
339 g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);
340
341 new szTables[1280]; format(szTables, 1280, "CREATE TABLE IF NOT EXISTS `%s` (`username` varchar(64) COLLATE utf8_lithuanian_ci NOT NULL, `password` varchar(64) COLLATE utf8_lithuanian_ci NOT NULL, `patirtis` int(11) NOT NULL, `kills` int(11) NOT NULL, `killers` int(11) NOT NULL, `points` int(11) NOT NULL, `keys` int(11) NOT NULL, `chests` int(11) NOT NULL, `rang` int(11) NOT NULL, `rounds` int(11) NOT NULL, `skins` varchar(512) COLLATE utf8_lithuanian_ci NOT NULL, `using_skins` varchar(512) COLLATE utf8_lithuanian_ci NOT NULL, `skins_kills` varchar(512) COLLATE utf8_lithuanian_ci NOT NULL,`kontraktas` int(11) NOT NULL, `contract` varchar(512) NOT NULL, `contracts` varchar(512) NOT NULL, `covert` varchar(512) NOT NULL, `party_slots` int(11) NOT NULL, PRIMARY KEY (`username`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci", TABLE_NAME);
342
343 SQL_ThreadQuery(g_hTuple, "QueryCreateTable", szTables);
344}
345
346public plugin_init()
347{
348 set_task(67.3, "Message", 7217, _, _, "b");
349
350 register_plugin(PLUGIN, VERSION, AUTHOR1);
351
352 register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
353
354 register_clcmd("say /bonus","daily_bonus");
355 register_clcmd("bonus","daily_bonus");
356 time_delete = register_cvar("bonus_limit_time","168");//this is in hours
357
358 register_box_content("Experience Box");
359
360 register_clcmd("say /menu", "MenuOpen");
361 register_clcmd("say /reg", "RegMenu");
362 register_clcmd("say /trade", "TradeMenu");
363 register_clcmd("say /round", "RoundsLeft");
364 register_clcmd("say /kills", "KillsLeft");
365 register_clcmd("say /skins", "cmdUniq");
366 register_clcmd("say /savepass", "SavePassword");
367
368 register_clcmd("say menu", "MenuOpen");
369 register_clcmd("say reg", "RegMenu");
370 register_clcmd("say trade", "TradeMenu");
371 register_clcmd("say round", "RoundsLeft");
372 register_clcmd("say kills", "KillsLeft");
373 register_clcmd("say skins", "cmdUniq");
374 register_clcmd("say savepass", "SavePassword");
375
376 register_clcmd("say !menu", "MenuOpen");
377 register_clcmd("say !reg", "RegMenu");
378 register_clcmd("say !trade", "TradeMenu");
379 register_clcmd("say !kills", "KillsLeft");
380 register_clcmd("say !skins", "cmdUniq");
381 register_clcmd("say !savepass", "SavePassword");
382
383 register_clcmd("say .menu", "MenuOpen");
384 register_clcmd("say .reg", "RegMenu");
385 register_clcmd("say .trade", "TradeMenu");
386 register_clcmd("say .round", "RoundsLeft");
387 register_clcmd("say .kills", "KillsLeft");
388 register_clcmd("say .skins", "cmdUniq");
389 register_clcmd("say .savepass", "SavePassword");
390
391 register_clcmd("radio1", "MenuOpen");
392
393 register_concmd("SET_TRADE_MONEY", "cmdMoney");
394 register_concmd("SET_TRADE_KEYS", "cmdKeys");
395 register_concmd("SET_TRADE_CHESTS", "cmdChests");
396
397 register_concmd("Cost", "MarketCost");
398 register_concmd("Gift", "GiftPoint");
399 register_concmd("setAmount", "SetAmount");
400 register_concmd("setMarketAmount", "SetMarketAmount");
401 register_concmd("UserPassword", "PlayerPassword");
402
403 register_concmd("setMenu", "MenuOpen");
404 register_concmd("setSkins", "cmdUniq");
405 register_concmd("setTrade", "TradeMenu");
406 register_concmd("setParty", "PartyMenu");
407 register_concmd("setRewards", "DailyRewards");
408
409 register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");
410
411 register_event("TextMsg", "TextMsg_Killed_Hostage", "b", "1=4", "2=#Killed_Hostage");
412 register_event("HLTV", "RoundStart", "a", "1=0", "2=0");
413 register_event("DeathMsg", "client_death", "a");
414
415 register_forward(FM_ClientUserInfoChanged, "NameChange");
416 register_forward(FM_SetModel, "SetModel");
417
418 register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
419
420 RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
421
422 for(new i; i < sizeof(eWeapon); i++)
423 {
424 if(strlen(eWeapon[i]) > 3)
425 {
426 RegisterHam(Ham_Item_Deploy, eWeapon[i], "WeaponSwitch", 1);
427 }
428 }
429 csgo_password_field = register_cvar("csgo_password_field", "_rcsgo");
430
431 g_msgid_ScreenFade = get_user_msgid("ScreenFade");
432 g_msgid_SyncHud = CreateHudSyncObj();
433 g_msgid_AmmoX = get_user_msgid("AmmoX");
434
435 cvar_refill_spawn = register_cvar("csgo_refill_onspawn", "1");
436
437 p_allchat = register_cvar("sv_allchat", "2");
438 p_hidestat = register_cvar("sv_hidestatus", "0");
439 p_teamchat = register_cvar("sv_teamchat", "0");
440
441 register_cvar("csgo_nick_show", "0");
442
443 p_alltalk = get_cvar_pointer("sv_alltalk");
444
445 register_message(get_user_msgid("SayText"), "col_changer");
446
447 set_task(5.0, "LoadConnected");
448
449 gCanLoad = 0;
450 gCanSave = 0;
451
452 new iEnt = -1;
453 while((iEnt = find_ent_by_class(iEnt, "env_sound")))
454 {
455 DispatchKeyValue(iEnt, "roomtype", "0");
456 DispatchKeyValue(iEnt, "radius", "0");
457 }
458
459 format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
460}
461
462
463public Message()
464{
465 print_color(0, "!g%s%L", Prefix, LANG_SERVER, "MSG", PLUGIN, VERSION, AUTHOR1, AUTHOR2);
466}
467
468public plugin_cfg()
469{
470
471 g_Vault = nvault_open("daily_login");
472 if(g_Vault == INVALID_HANDLE)
473 set_fail_state("Error opening nVault");
474
475 nvault_prune(g_Vault,0,get_systime() - ((60 * 60) * get_pcvar_num(time_delete)));
476
477 if(!g_hTuple)
478 {
479 g_hTuple = SQL_MakeStdTuple();
480 }
481 return 1;
482}
483
484public DailyRewards(id)
485{
486 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
487
488 if(get_systime() - gPlayerTime[id] >= 300 && !RewardTaken[id])
489 {
490 new Float:rNum = random_float((random(5)*5.0), 200.0);
491 new rNumchance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : (rNum <= 50) ? 50 : 100));
492
493 new pNum = random_num(100, 400);
494
495 new chestNum = random_num(1, 9);
496 new chest = chestNum;
497
498 RewardTaken[id] = true;
499
500 if(rNumchance <= 1 && get_playersnum() >= NEED_PLAYER)
501 {
502 new chance = 5;
503 new skinsCnt = chestsChance[chest][chance];
504 new skinNum = random(skinsCnt);
505 new skinId = chestsList[chest][chance][skinNum];
506
507 client_print_color(0, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "REWARDS_SKINS", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
508
509 uWeapon[skinId][id]++;
510 SaveData(id);
511 }
512 else if(rNumchance <= 5 && get_playersnum() >= NEED_PLAYER)
513 {
514 new chance = 25;
515 new skinsCnt = chestsChance[chest][chance];
516 new skinNum = random(skinsCnt);
517 new skinId = chestsList[chest][chance][skinNum];
518
519 client_print_color(0, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "REWARDS_SKINS", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
520
521 uWeapon[skinId][id]++;
522 SaveData(id);
523 }
524 else if(rNumchance <= 25 && get_playersnum() >= NEED_PLAYERS)
525 {
526 rewards_keys(id, DROP_RATE_KEYS);
527 }
528 else if(rNumchance <= 50 && get_playersnum() >= NEED_PLAYERS)
529 {
530 rewards_item(id, DROP_RATE_CHEST);
531 }
532 else if(rNumchance <= 100 && get_playersnum() >= NEED_MIN_PLAYERS)
533 {
534 Points[id] += pNum;
535 client_print_color(0, print_team_default, "%s ^4%s ^1 took his^3 %d ^1points for reward!", Prefix, get_user_name_ex(id), pNum);
536 }
537 }
538 else if(RewardTaken[id])
539 {
540 client_print_color(id, print_team_default, "%s ^1Already took your reward, idijot!", Prefix);
541 }
542 else
543 {
544 client_print_color(id, print_team_default, "%s ^4You have play 5 Min. ^1Before took your reward!", Prefix);
545 }
546 return PLUGIN_HANDLED;
547}
548
549public daily_bonus(id)
550{
551 new name[33];
552 get_user_name(id,name,charsmax(name));
553 new iTimestamp , szVal[ 10 ];
554 if(!nvault_lookup( g_Vault , name , szVal , charsmax( szVal ) , iTimestamp ) || ( iTimestamp && ( ( get_systime() - iTimestamp ) >= ((60 * 60) * get_pcvar_num(time_delete)))))
555 {
556 nvault_set( g_Vault , name , "rewards" );
557 {
558 new szName[32]; get_user_name(id, szName, 31);
559
560 new pNum = random_num(1, 200);
561 new pPoints = random_num(50, 300);
562
563 if(pNum <= 1)
564 {
565 new chestNum = random_num(1, 9);
566 new chest = chestNum;
567
568 new chance = 25;
569 new skinsCnt = chestsChance[chest][chance];
570 new skinNum = random(skinsCnt);
571 new skinId = chestsList[chest][chance][skinNum];
572
573 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
574
575 uWeapon[skinId][id]++;
576 SaveData(id);
577 }
578 else if(pNum <= 5)
579 {
580 drop_keys(id, DROP_RATE_KEYS);
581 }
582 else if(pNum <= 25)
583 {
584 drop_item(id, DROP_RATE_CHEST);
585 }
586 else
587 {
588 Points[id] += pPoints;
589 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, pPoints);
590
591 if(InParty[id])
592 {
593 for(new i = 1; i <= 32; i++)
594 {
595 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
596 {
597 client_print_color(id, print_team_default, "[^4CS:GO Unlimited Week Login^1] ^4you get ^3%d ^4points from ^1group", pPoints);
598 Points[i] += pPoints;
599 SavePoints(i);
600 }
601 }
602 }
603 }
604 }
605 }else{
606 client_print_color(id, print_team_default,"^3[^4%s^3] ^1You already used this command u need to wait^4 1 ^3week ^1to use it again.",Tag);
607 return PLUGIN_HANDLED;
608 }
609 return PLUGIN_HANDLED;
610}
611
612public sb_pickup_event(id)
613{
614 new szName[32]; get_user_name(id, szName, 31);
615
616 new pNum = random_num(1, 200);
617 new pPoints = random_num(50, 300);
618
619 if(pNum <= 1)
620 {
621 new chestNum = random_num(1, 9);
622 new chest = chestNum;
623
624 new chance = 25;
625 new skinsCnt = chestsChance[chest][chance];
626 new skinNum = random(skinsCnt);
627 new skinId = chestsList[chest][chance][skinNum];
628
629 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
630
631 uWeapon[skinId][id]++;
632 SaveData(id);
633 }
634 else if(pNum <= 5)
635 {
636 drop_keys(id, DROP_RATE_KEYS);
637 }
638 else if(pNum <= 25)
639 {
640 drop_item(id, DROP_RATE_CHEST);
641 }
642 else
643 {
644 Points[id] += pPoints;
645 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, pPoints);
646
647 if(InParty[id])
648 {
649 for(new i = 1; i <= 32; i++)
650 {
651 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
652 {
653 client_print_color(i, print_team_default, "[^4CS:GO Unlimited^1] ^4you get ^3%d ^4points from ^1group", pPoints);
654 Points[i] += pPoints;
655 SavePoints(i);
656 }
657 }
658 }
659 }
660}
661
662public SavePassword(id)
663{
664 if(!Loged[id])
665 {
666 if(!gRegistered[id])
667 {
668 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
669 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
670 } else {
671 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
672 }
673 return PLUGIN_HANDLED;
674 }
675
676 new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
677 set_user_info(id, passfield, SavedPassword[id]);
678 client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]);
679
680 print_color(id, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
681
682 return PLUGIN_HANDLED;
683}
684
685public RoundsLeft(id)
686{
687 if(!Loged[id])
688 {
689 if(!gRegistered[id])
690 {
691 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
692 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
693 } else {
694 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
695 }
696 return PLUGIN_HANDLED;
697 }
698
699 if(get_user_flags(id) & ACCESS_ADMIN) { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ROUNDS_SHOW_KEYS_75", EVENT, 75 - (Rounds[id] % 75), Rounds[id] % 75); }
700 else if(get_user_flags(id) & ACCESS_VIP && !(get_user_flags(id) & ACCESS_ADMIN)) { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ROUNDS_SHOW_KEYS_100", EVENT, 100 - (Rounds[id] % 100), Rounds[id] % 100); }
701 else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ROUNDS_SHOW_KEYS_125", EVENT, 125 - (Rounds[id] % 125), Rounds[id] % 125); }
702 return PLUGIN_CONTINUE;
703}
704
705public KillsLeft(id)
706{
707 if(!Loged[id])
708 {
709 if(!gRegistered[id])
710 {
711 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
712 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
713 } else {
714 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
715 }
716 return PLUGIN_HANDLED;
717 }
718
719 if(get_user_flags(id) & ACCESS_ADMIN) { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_75", EVENT, 75 - (Killers[id] % 75), Killers[id] % 75); }
720 else if(get_user_flags(id) & ACCESS_VIP && !(get_user_flags(id) & ACCESS_ADMIN)) { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_100", EVENT, 100 - (Killers[id] % 100), Killers[id] % 100); }
721 else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_125", EVENT, 125 - (Killers[id] % 125), Killers[id] % 125); }
722 return PLUGIN_CONTINUE;
723}
724
725
726public TextMsg_Killed_Hostage(id)
727{
728 Points[id] -= HOSTAGE_KILL_PENALTY;
729
730 set_hudmessage(255, 0, 0, -1.0, 0.15, 0, 6.0, 2.0);
731 show_hudmessage(id, "%L", LANG_PLAYER, "POINT_REDUCE", HOSTAGE_KILL_PENALTY);
732
733 SavePoints(id);
734}
735
736public Hostage_Rescued()
737{
738 static loguser[80], name[32], id;
739 read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
740 id = get_user_index(name);
741
742 if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
743
744 if(get_user_flags(id) & ACCESS_ADMIN)
745 {
746 Points[id] += HOSTAGE_ESCAPE_ADMIN;
747
748 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
749 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_ADMIN);
750
751 escape_item(id, DROP_RATE_HOSTAGE_ADMIN);
752 escape_keys(id, DROP_RATE_HOSTAGE_KEY_ADMIN);
753
754 SavePoints(id);
755 }
756 else if(get_user_flags(id) & ACCESS_VIP)
757 {
758 Points[id] += HOSTAGE_ESCAPE_VIP;
759
760 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
761 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_VIP);
762
763 escape_item(id, DROP_RATE_HOSTAGE_VIP);
764 escape_keys(id, DROP_RATE_HOSTAGE_KEY_VIP);
765
766 SavePoints(id);
767 }
768 else
769 {
770 Points[id] += HOSTAGE_ESCAPE;
771
772 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
773 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE);
774
775 escape_item(id, DROP_RATE_HOSTAGE);
776 escape_keys(id, DROP_RATE_HOSTAGE_KEY);
777
778 SavePoints(id);
779 }
780}
781
782public LoadConnected()
783{
784 gCanLoad = 1;
785 gCanSave = 1;
786
787 for(new i = 1; i <= get_maxplayers(); i++)
788 {
789 if(is_user_connected(i))
790 {
791 add_delay(i);
792 }
793 }
794}
795
796public plugin_end()
797{
798 nvault_close(g_Vault);
799 SQL_FreeHandle(g_hTuple);
800}
801
802public bomb_planted(planter)
803{
804 if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)
805
806 if(get_user_flags(planter) & ACCESS_ADMIN)
807 {
808 Points[planter] += BOMB_PLANTED_POINTS_ADMIN;
809 Patirtis[planter] += 2;
810
811 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
812 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_ADMIN);
813
814 planter_item(planter, DROP_RATE_PLANT_ADMIN);
815 planter_keys(planter, DROP_RATE_PLANT_KEY_ADMIN);
816
817 SavePoints(planter);
818 }
819 else if(get_user_flags(planter) & ACCESS_VIP)
820 {
821 Points[planter] += BOMB_PLANTED_POINTS_VIP;
822 Patirtis[planter] += 2;
823
824 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
825 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_VIP);
826
827 planter_item(planter, DROP_RATE_PLANT_VIP);
828 planter_keys(planter, DROP_RATE_PLANT_KEY_VIP);
829
830 SavePoints(planter);
831 }
832 else
833 {
834 Points[planter] += BOMB_PLANTED_POINTS;
835 Patirtis[planter] += 2;
836
837 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
838 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS);
839
840 planter_item(planter, DROP_RATE_PLANT);
841 planter_keys(planter, DROP_RATE_PLANT_KEY);
842
843 SavePoints(planter);
844 }
845}
846
847public bomb_defused(defuser)
848{
849 if(is_user_connected(defuser) && get_playersnum() >= NEED_MIN_PLAYERS)
850
851 if(get_user_flags(defuser) & ACCESS_ADMIN)
852 {
853 Points[defuser] += BOMB_DEFUSED_POINTS_ADMIN;
854 Patirtis[defuser] += 2;
855
856 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
857 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_ADMIN);
858
859 defuser_item(defuser, DROP_RATE_DEF_ADMIN);
860 defuser_keys(defuser, DROP_RATE_DEF_KEY_ADMIN);
861
862 SavePoints(defuser);
863 }
864 else if(get_user_flags(defuser) & ACCESS_VIP)
865 {
866 Points[defuser] += BOMB_DEFUSED_POINTS_VIP;
867 Patirtis[defuser] += 2;
868
869 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
870 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_VIP);
871
872 defuser_item(defuser, DROP_RATE_DEF_VIP);
873 defuser_keys(defuser, DROP_RATE_DEF_KEY_VIP);
874
875 SavePoints(defuser);
876 }
877 else
878 {
879 Points[defuser] += BOMB_DEFUSED_POINTS;
880 Patirtis[defuser] += 2;
881
882 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
883 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS);
884
885 defuser_item(defuser, DROP_RATE_DEF);
886 defuser_keys(defuser, DROP_RATE_DEF_KEY);
887
888 SavePoints(defuser);
889 }
890}
891
892public RoundStart()
893{
894 gEnd = false;
895}
896
897public Message_SendAudio(iMsgId, iMsgDest, id)
898{
899 if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
900
901 if(get_user_flags(id) & ACCESS_ADMIN && Rounds[id] >= 75)
902 {
903 drop_item(id , DROP_RATE_CHEST);
904 drop_keys(id , DROP_RATE_KEYS);
905 Rounds[id] = 0;
906 }
907 else if(get_user_flags(id) & ACCESS_VIP && !(get_user_flags(id) & ACCESS_ADMIN) && Rounds[id] >= 100)
908 {
909 drop_item(id , DROP_RATE_CHEST);
910 drop_keys(id , DROP_RATE_KEYS);
911 Rounds[id] = 0;
912 }
913 else if(Rounds[id] >= 125)
914 {
915 drop_item(id , DROP_RATE_CHEST);
916 drop_keys(id , DROP_RATE_KEYS);
917 Rounds[id] = 0;
918 }
919
920 if(!id && !gEnd)
921 {
922 new szSound[14]; get_msg_arg_string(2, szSound, charsmax(szSound));
923 new iPlayers[32], iNum, idNum;
924
925 if(equal(szSound, "%!MRAD_ctwin"))
926 {
927 get_players(iPlayers, iNum, "ceh", "CT");
928
929 for(new i; i < iNum; i++)
930 {
931 idNum = iPlayers[i];
932
933 if(!is_user_alive(idNum) || cs_get_user_team(idNum) != CS_TEAM_CT)
934 {
935 continue;
936 }
937
938 Points[idNum] += ROUND_WIN_POINTS;
939 Patirtis[idNum] += ROUND_WIN_PATIRTIS;
940
941 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
942 show_hudmessage(idNum, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
943
944 SavePoints(idNum);
945 SaveData(idNum);
946 }
947
948 gEnd = true;
949 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CT_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
950 }
951 else if( equal(szSound, "%!MRAD_terwin") )
952 {
953 get_players(iPlayers, iNum, "ceh", "TERRORIST");
954
955 for(new i; i < iNum; i++)
956 {
957 idNum = iPlayers[i];
958
959 if(!is_user_alive(idNum) || cs_get_user_team(idNum) != CS_TEAM_T)
960 {
961 continue;
962 }
963
964 Points[idNum] += ROUND_WIN_POINTS;
965 Patirtis[idNum] += ROUND_WIN_PATIRTIS;
966
967 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
968 show_hudmessage(idNum, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
969
970 SavePoints(idNum);
971 SaveData(idNum);
972 }
973
974 gEnd = true;
975 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "T_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
976 }
977 }
978}
979
980public PlayerSpawn(id)
981{
982 if(is_user_alive(id))
983 {
984 if(!Loged[id] && gRegistered[id])
985 {
986 RegMenu(id);
987 set_user_maxspeed(id, 1.0);
988
989 if(!equal(Password[id], SavedPassword[id]))
990 {
991 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
992 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
993 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
994 }
995 }
996
997 if(!gRegistered[id])
998 {
999 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1000 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1001 }
1002
1003 if(get_pcvar_num(cvar_refill_spawn))
1004 {
1005 static iWeapons[32], iNum, i, iGun; iNum = 0;
1006 get_user_weapons(id, iWeapons, iNum);
1007
1008 for(i = 0; i < iNum; i++)
1009 {
1010 for(new a = 0; a < sizeof (g_other_weapons); a++)
1011 if(iWeapons[i] == g_other_weapons[a])
1012 continue;
1013
1014 for(new a = 0; a < sizeof (g_weapons); a++)
1015 {
1016
1017 if(g_weapons[a] == iWeapons[i])
1018 {
1019 if(get_weapon_maxclip(iWeapons[i]))
1020 {
1021 Rounds[id]++;
1022 iGun = has_user_weapon(id, iWeapons[i]);
1023 client_cmd(id, "spk ^"items/9mmclip1.wav^"");
1024 cs_set_weapon_ammo(iGun, get_weapon_maxclip(iWeapons[i]));
1025 SetFullBpAmmo(id, iWeapons[i]);
1026 SaveRounds(id);
1027 }
1028 }
1029 }
1030 }
1031 }
1032 if(cs_get_user_team(id) == CS_TEAM_CT)
1033 {
1034 cs_set_user_defuse(id, 1);
1035 }
1036 }
1037 return PLUGIN_CONTINUE;
1038}
1039
1040public col_changer(msg_id, msg_dest, rcvr)
1041{
1042 new str2[26];
1043 get_msg_arg_string(2, str2, 25);
1044
1045 if(equal(str2, "#Cstrike_Chat", 13))
1046 {
1047 new str3[22];
1048 get_msg_arg_string(3, str3, 21);
1049
1050 if(!strlen(str3))
1051 {
1052 new str4[101];
1053 get_msg_arg_string(4, str4, 100);
1054 new sndr = get_msg_arg_int(1);
1055
1056 new bool:is_team_msg = !bool:equal(str2, "#Cstrike_Chat_All", 17);
1057
1058 new sndr_team = get_user_team(sndr);
1059 new bool:is_sndr_spec = !bool:(0 < sndr_team < 3);
1060
1061 new bool:same_as_last = bool:(alv_sndr == sndr && equal(alv_str2, str2) && equal(alv_str4, str4));
1062
1063 if(!same_as_last)
1064 {
1065 new allchat = clamp(get_pcvar_num(p_allchat), 0, 2);
1066
1067 if(allchat == 2 || (allchat == 1 && clamp(get_pcvar_num(p_alltalk), 0, 1) == 1))
1068 {
1069 if(!(is_team_msg && (is_sndr_spec || is_team_msg && get_pcvar_num(p_teamchat) == 0)))
1070 {
1071 new flags[5], team[10];
1072 if(is_user_alive(sndr)) flags = "bch";
1073 else flags = "ach";
1074
1075 if(is_team_msg)
1076 {
1077 add(flags[strlen(flags)], 4, "e");
1078 if(sndr_team == 1) team = "TERRORIST";
1079 else team = "CT";
1080 }
1081
1082 new players[32], num;
1083 get_players(players, num, flags, team);
1084
1085 buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4);
1086
1087 for(new i=0; i < num; i++)
1088 {
1089 message_begin(MSG_ONE, get_user_msgid("SayText"), _, players[i]);
1090 write_byte(sndr);
1091 write_string(msg);
1092 message_end();
1093 }
1094 }
1095
1096 alv_sndr = sndr;
1097 alv_str2 = str2;
1098 alv_str4 = str4;
1099
1100 if(task_exists(411))
1101 remove_task(411);
1102
1103 set_task(0.1, "task_clear_antiloop_vars", 411);
1104 }
1105 }
1106
1107 if(gLogged[sndr])
1108 {
1109 if(!same_as_last)
1110 buildmsg(sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4);
1111
1112 set_msg_arg_string(2, msg);
1113 set_msg_arg_string(4, "");
1114 }
1115 }
1116 }
1117 return PLUGIN_CONTINUE;
1118}
1119
1120public buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[ ] )
1121{
1122 new sndr_name[33];
1123 get_user_name( sndr, sndr_name, 32);
1124
1125 new prefix[126] = "^x01";
1126 if( get_pcvar_num( p_hidestat ) == 0 )
1127 {
1128 if( is_sndr_spec ) prefix = "^x01*SPEC* ";
1129 else if( !is_user_alive( sndr ) ) prefix = "^x01*DEAD* ";
1130 }
1131
1132 if(is_user_connected(sndr))
1133 {
1134 if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_A)
1135 {
1136 new szMsg[64];
1137 format(szMsg, sizeof(szMsg)-1, "[^4Owner^1] ^3| ^1[^4%s^1] ", Rangs[Rang[sndr]]);
1138 add(prefix[strlen(prefix)-1], 64, szMsg);
1139 }
1140
1141 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_B)
1142 {
1143 new szMsg[64];
1144 format(szMsg, sizeof(szMsg)-1, "[^4Administrator^1] ^3| ^1[^4%s^1] ", Rangs[Rang[sndr]]);
1145 add(prefix[strlen(prefix)-1], 64, szMsg);
1146 }
1147
1148 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_G)
1149 {
1150 new szMsg[64];
1151 format(szMsg, sizeof(szMsg)-1, "[^4Supervisor^1] ^3| ^1[^4%s^1] ", Rangs[Rang[sndr]]);
1152 add(prefix[strlen(prefix)-1], 64, szMsg);
1153 }
1154
1155 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_H)
1156 {
1157 new szMsg[64];
1158 format(szMsg, sizeof(szMsg)-1, "[^4VIP^1] ^3| ^1[^4%s^1] ", Rangs[Rang[sndr]]);
1159 add(prefix[strlen(prefix)-1], 64, szMsg);
1160 }
1161
1162 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_USER)
1163 {
1164 new szMsg[64];
1165 format(szMsg, sizeof(szMsg)-1, "[^4%s^1] ", Rangs[Rang[sndr]]);
1166 add(prefix[strlen(prefix)-1], 64, szMsg);
1167 }
1168
1169 else if(!gLogged[sndr])
1170 {
1171 new szMsg[64];
1172 format(szMsg, sizeof(szMsg)-1, "[^4Not logged in^1] ");
1173 add(prefix[strlen(prefix)-1], 29, szMsg);
1174 }
1175 }
1176
1177 if( is_team_msg )
1178 {
1179 if( is_sndr_spec ) prefix = "^x01(Spectator) ";
1180 else if( sndr_team == 1 ) add( prefix[strlen(prefix)-1], 29, "^x01(Terrorist) " );
1181 else if( sndr_team == 2 ) add( prefix[strlen(prefix)-1], 29, "^x01(Counter-Terrorist) " );
1182 }
1183
1184 if (get_user_flags(sndr) & ADMIN_RESERVATION)
1185 {
1186 format( msg, 512, "%s%s%s : ^4%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, str4 );
1187 }
1188 else
1189 {
1190 format( msg, 512, "%s%s%s : ^1%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, str4 );
1191 }
1192 return PLUGIN_HANDLED;
1193}
1194
1195public task_clear_antiloop_vars()
1196{
1197 alv_sndr = 0;
1198 alv_str2 = "";
1199 alv_str4 = "";
1200
1201 return PLUGIN_HANDLED;
1202}
1203
1204public MenuOpen(id)
1205{
1206 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
1207
1208 aAmount[id] = 1;
1209 MenuMod[id] = 0;
1210 Menu(id);
1211 return PLUGIN_HANDLED;
1212}
1213
1214public client_death(Killer, Victim, wpnindex, hitplace, TK)
1215{
1216 if(Killer == Victim) { return PLUGIN_HANDLED; }
1217
1218 if(!gRegistered[Victim])
1219 {
1220 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1221 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1222 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1223 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1224 }
1225
1226 if(!gRegistered[Killer])
1227 {
1228 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1229 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1230 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1231 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1232 }
1233
1234 Killers[Killer]++;
1235 Kills[Killer]++;
1236
1237 static kGun; kGun = get_user_weapon(Killer, _, _);
1238 new szName[32]; get_user_name(Killer, szName, 31);
1239
1240 new rNum; rNum = random(CHEST_COUNT-1)+1;
1241 new PointsNum = random_num(500, 1000);
1242
1243 if(bUsingGuns[Killer][kGun])
1244 {
1245 uWeaponKills[bUsingGuns[Killer][kGun]][Killer]++;
1246 SaveGunsKills(Killer);
1247 set_task(0.1, "UpdateStatusText", Killer);
1248 }
1249
1250 if(Rang[Killer] < sizeof(Rangs) && Rang[Killer] < file_size(RangFile, 1))
1251 {
1252 if(Patirtis[Killer] >= NeedPatirtis[Rang[Killer]])
1253 {
1254 Rang[Killer]++;
1255
1256 pKey[Killer] += Rang[Killer];
1257 Chest[Killer][rNum] += Rang[Killer];
1258 Points[Killer] += PointsNum;
1259
1260 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_PASIEKE", Prefix, szName, Rangs[Rang[Killer]]);
1261 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_BONUS", Prefix, szName, Rang[Killer], Rang[Killer], PointsNum);
1262
1263 SaveRang(Killer);
1264 SaveKeys(Killer);
1265 SaveChests(Killer);
1266 }
1267 }
1268
1269 if(get_user_flags(Killer) & ACCESS_ADMIN && Killers[Killer] >= 75)
1270 {
1271 // drop_item(Killer , DROP_RATE_CHEST);
1272 drop_keys(Killer , DROP_RATE_KEYS);
1273 Killers[Killer] = 0;
1274 }
1275 else if(get_user_flags(Killer) & ACCESS_VIP && !(get_user_flags(Killer) & ACCESS_ADMIN) && Killers[Killer] >= 100)
1276 {
1277 // drop_item(Killer , DROP_RATE_CHEST);
1278 drop_keys(Killer , DROP_RATE_KEYS);
1279 Killers[Killer] = 0;
1280 }
1281 else if(Killers[Killer] >= 125)
1282 {
1283 // drop_item(Killer , DROP_RATE_CHEST);
1284 drop_keys(Killer , DROP_RATE_KEYS);
1285 Killers[Killer] = 0;
1286 }
1287
1288 new pPont, vPont, hsPont;
1289 new pExp, hsExp;
1290
1291 pPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);
1292 pExp += random_num(PATIRTIS_KILL_MIN, PATIRTIS_KILL_MAX);
1293
1294 if(hitplace == HIT_HEAD) { pPont += hsPont = POINTS_KILL_HS; }
1295
1296 if(hitplace == HIT_HEAD) { pExp += hsExp = PATIRTIS_KILL_HS; }
1297
1298 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1299 {
1300 vPont += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
1301 pExp += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
1302
1303 Points[Killer] += vPont;
1304 Patirtis[Killer] += pExp;
1305 }
1306 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1307 {
1308 vPont += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
1309 pExp += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
1310
1311 Points[Killer] += vPont;
1312 Patirtis[Killer] += pExp;
1313 }
1314 else
1315 {
1316 vPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);
1317 pExp += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);
1318
1319 Points[Killer] += vPont;
1320 Patirtis[Killer] += pExp;
1321 }
1322
1323 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1324 {
1325 if(hitplace == HIT_HEAD)
1326 {
1327 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1328 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1329
1330 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1331 }
1332 else
1333 {
1334 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1335 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1336
1337 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1338 }
1339 }
1340 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1341 {
1342 if(hitplace == HIT_HEAD)
1343 {
1344 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1345 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1346
1347 drop_item(Killer, DROP_RATE_KILL_VIP);
1348 }
1349 else
1350 {
1351 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1352 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1353
1354 drop_item(Killer, DROP_RATE_KILL_VIP);
1355 }
1356 }
1357 else
1358 {
1359 if(hitplace == HIT_HEAD)
1360 {
1361 show_hudmessage(Killer, "%L +%d HS", LANG_PLAYER, "POINT", pPont, hsPont);
1362 }
1363 else
1364 {
1365 show_hudmessage(Killer, "%L", LANG_PLAYER, "POINT", pPont);
1366 }
1367 }
1368
1369 drop_item(Killer, DROP_RATE_KILL);
1370
1371 SavePoints(Killer);
1372
1373 return PLUGIN_CONTINUE;
1374}
1375
1376public SetModel(entity, model[])
1377{
1378 if(!pev_valid(entity))
1379 return FMRES_IGNORED;
1380
1381 static Classname[32]; pev(entity, pev_classname, Classname, sizeof(Classname));
1382
1383 if(!equal(Classname, "weaponbox"))
1384 return FMRES_IGNORED;
1385
1386 static iOwner; iOwner = pev(entity, pev_owner);
1387 static iWeapon; iWeapon = get_user_weapon(iOwner, _, _);
1388 static weapon; weapon = find_ent_by_owner(-1, eWeapon[iWeapon], entity);
1389
1390 if(bUsingGuns[iOwner][iWeapon] && !pev(weapon, pev_impulse))
1391 {
1392 if(!pev_valid(weapon))
1393 return FMRES_IGNORED;
1394
1395 set_pev(weapon, pev_impulse, bUsingGuns[iOwner][iWeapon]);
1396
1397 if(strlen(DefaultSkinW[iWeapon]) > 5)
1398 {
1399 entity_set_model(entity, DefaultSkinW[iWeapon]);
1400
1401 return FMRES_SUPERCEDE;
1402 }
1403 return FMRES_IGNORED;
1404 }
1405
1406 return FMRES_IGNORED;
1407}
1408
1409public MarketCost(id)
1410{
1411 if(inMarket[id] || !Loged[id])
1412 return PLUGIN_HANDLED;
1413
1414 new Data[32], Cost;
1415 read_args(Data, 31);
1416 remove_quotes(Data);
1417
1418 Cost = str_to_num(Data);
1419
1420 if(Cost < 0)
1421 {
1422 client_cmd(id, "messagemode Cost");
1423 return PLUGIN_HANDLED;
1424 }
1425 else if(MARKET_MIN_PRICE > Cost)
1426 {
1427 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
1428 client_cmd(id, "messagemode Cost");
1429 MarketPoints[id] = MARKET_MIN_PRICE;
1430 Menu(id);
1431 MenuMod[id] = 3;
1432 return PLUGIN_HANDLED;
1433 }
1434 else
1435 {
1436 MarketPoints[id] = Cost;
1437 Menu(id);
1438 MenuMod[id] = 3;
1439 return PLUGIN_CONTINUE;
1440 }
1441}
1442
1443public SetMarketAmount(id)
1444{
1445 if(!Loged[id])
1446 return PLUGIN_HANDLED;
1447
1448 new Data[32], Cost;
1449 read_args(Data, 31);
1450 remove_quotes(Data);
1451
1452 Cost = str_to_num(Data);
1453
1454 if(Cost < 1)
1455 {
1456 client_cmd(id, "messagemode setMarketAmount");
1457 return PLUGIN_HANDLED;
1458 }
1459 else
1460 {
1461 mAmount[id] = Cost;
1462 Menu(id);
1463 MenuMod[id] = 3;
1464 }
1465 return PLUGIN_HANDLED;
1466}
1467
1468public SetAmount(id)
1469{
1470 if(!Loged[id])
1471 return PLUGIN_HANDLED;
1472
1473 new Data[32], Cost;
1474 read_args(Data, 31);
1475 remove_quotes(Data);
1476
1477 Cost = str_to_num(Data);
1478
1479 if(Cost < 0)
1480 {
1481 client_cmd(id, "messagemode setAmount");
1482 return PLUGIN_HANDLED;
1483 }
1484 else
1485 {
1486 aAmount[id] = Cost;
1487 Menu(id);
1488 MenuMod[id] = 5;
1489 }
1490 return PLUGIN_HANDLED;
1491}
1492
1493public GiftPoint(id)
1494{
1495 if(inMarket[id] || !Loged[id])
1496 return PLUGIN_HANDLED;
1497
1498 new Data[32], Cost;
1499 read_args(Data, 31);
1500 remove_quotes(Data);
1501
1502 Cost = str_to_num(Data);
1503
1504 if(Cost < 0 || Points[id] < Cost)
1505 {
1506 client_cmd(id, "messagemode Gift");
1507 return PLUGIN_HANDLED;
1508 }
1509 else
1510 {
1511 aPoints[id] = Cost;
1512 Menu(id);
1513 MenuMod[id] = 5;
1514 return PLUGIN_CONTINUE;
1515 }
1516}
1517
1518public WeaponSwitch(Weapon)
1519{
1520 new id = get_pdata_cbase(Weapon, 41, 4);
1521 new wid = cs_get_weapon_id(Weapon);
1522
1523 if(id > 32 || id < 1)
1524 {
1525 return HAM_SUPERCEDE;
1526 }
1527
1528 if(!is_user_connected(id))
1529 {
1530 return HAM_SUPERCEDE;
1531 }
1532
1533 if(pev(Weapon, pev_impulse))
1534 {
1535 set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
1536
1537 if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5)
1538 {
1539 set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
1540 }
1541 }
1542 else if(bUsingGuns[id][wid])
1543 {
1544 set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
1545
1546 if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5)
1547 {
1548 set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
1549 }
1550 set_task(0.1, "UpdateStatusText", id);
1551 }
1552 else if(strlen(DefaultSkin[wid]) > 5)
1553 {
1554 if(cs_get_user_team(id) == CS_TEAM_CT && wid == 29) { wid = 31; }
1555
1556 set_pev(id, pev_viewmodel2, DefaultSkin[wid]);
1557
1558 if(strlen(DefaultSkinP[wid]) > 5)
1559 {
1560 set_pev(id, pev_weaponmodel2, DefaultSkinP[wid]);
1561 }
1562 set_task(0.1, "UpdateStatusText", id);
1563 }
1564 else
1565 {
1566 set_task(0.1, "UpdateStatusText", id);
1567 }
1568
1569 return HAM_IGNORED;
1570}
1571
1572public Menu(id)
1573{
1574 if(!Loged[id]) { RegMenu(id); return; }
1575
1576 new sMenu, szText[256];
1577
1578 switch(MenuMod[id])
1579 {
1580 case -2: // Kazkas su dovanom
1581 {
1582 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1583 sMenu = menu_create(szText, "MenuHandler");
1584
1585 new String[32], All;
1586 for(new i = 1; i < AllWeapon; i++)
1587 {
1588 if(uWeapon[i][id] <= 0)
1589 continue;
1590
1591 num_to_str(i, String, 31);
1592 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1593 menu_additem(sMenu, szText, String);
1594 All++;
1595 }
1596
1597 for(new i = 1; i <= CHEST_COUNT; i++)
1598 {
1599 if(Chest[id][i] > 0)
1600 {
1601 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1602
1603 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
1604 menu_additem(sMenu, szText, szButton);
1605 All++;
1606 }
1607 }
1608
1609 if(pKey[id] > 0)
1610 {
1611 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1612 menu_additem(sMenu, szText, KEY_ID_TEXT);
1613 All++;
1614 }
1615
1616 if(All == 0)
1617 {
1618 MenuMod[id] = 0;
1619 Menu(id);
1620 }
1621 }
1622 case -1: // Deti i turgu
1623 {
1624 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1625 sMenu = menu_create(szText, "MenuHandler");
1626
1627 new String[32], All;
1628 for(new i = 1; i < AllWeapon; i++)
1629 {
1630 if(uWeapon[i][id] <= 0)
1631 continue;
1632
1633 num_to_str(i, String, 31);
1634 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1635 menu_additem(sMenu, szText, String);
1636 All++;
1637 }
1638
1639 for(new i = 1; i <= CHEST_COUNT; i++)
1640 {
1641 if(Chest[id][i] > 0)
1642 {
1643 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1644
1645 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
1646 menu_additem(sMenu, szText, szButton);
1647
1648 All++;
1649 }
1650 }
1651
1652 if(pKey[id] > 0)
1653 {
1654 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1655 menu_additem(sMenu, szText, KEY_ID_TEXT);
1656 All++;
1657 }
1658
1659 if(All == 0)
1660 {
1661 MenuMod[id] = 0;
1662 Menu(id);
1663 }
1664 }
1665 case 0:
1666 {
1667 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
1668 sMenu = menu_create(szText, "MenuHandler");
1669
1670 formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUTOSKINS");
1671 menu_additem(sMenu, szText, "1");
1672
1673 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTOCHEST", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1674 menu_additem(sMenu, szText, (!inMarket[id]) ? "2" : "0");
1675
1676 formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUCHESTINFO");
1677 menu_additem(sMenu, szText, "7");
1678
1679 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOMARKET");
1680 menu_additem(sMenu, szText, "3");
1681
1682 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOSHOP");
1683 menu_additem(sMenu, szText, "6");
1684
1685 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1686 menu_additem(sMenu, szText, (!inMarket[id]) ? "4" : "0");
1687
1688 formatex(szText, sizeof(szText), "%L %L%L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET", LANG_PLAYER, "MRANG", Rangs[Rang[id]+1], Patirtis[id], NeedPatirtis[Rang[id]]);
1689 menu_additem(sMenu, szText, (!inMarket[id]) ? "5" : "0");
1690
1691 formatex(szText, sizeof(szText), "%L %L^n\r------------", LANG_PLAYER, "MENUTOCONTRACTS", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1692 menu_additem(sMenu, szText, (!inMarket[id]) ? "9" : "0");
1693
1694 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENTUTOPARTS", LANG_PLAYER, "MRANG", Rangs[Rang[id]+1], Patirtis[id], NeedPatirtis[Rang[id]]);
1695 menu_additem(sMenu, szText, "11");
1696
1697 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "DAILYBONUS");
1698 menu_additem(sMenu, szText, "12");
1699
1700 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CLAN");
1701 menu_additem(sMenu, szText, "13");
1702
1703 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "FACTIONS");
1704 menu_additem(sMenu, szText, "14");
1705
1706 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MVP");
1707 menu_additem(sMenu, szText, "15");
1708
1709 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GETGIFT");
1710 menu_additem(sMenu, szText, "16");
1711
1712 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "QUEST");
1713 menu_additem(sMenu, szText, "17");
1714
1715 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "HITMAN");
1716 menu_additem(sMenu, szText, "18");
1717
1718 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MEDALS");
1719 menu_additem(sMenu, szText, "19");
1720
1721 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "WEEKBONUS");
1722 menu_additem(sMenu, szText, "20");
1723 }
1724 case 1: // Skinai
1725 {
1726 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w -\r %L %L", LANG_PLAYER, "MENUTOSKINS", LANG_PLAYER, "YPOINT", Points[id]);
1727 sMenu = menu_create(szText, "MenuHandler");
1728
1729 new String[32], All;
1730 for(new i = 1; i < AllWeapon; i++)
1731 {
1732 if(uWeapon[i][id] <= 0)
1733 continue;
1734
1735 formatex(String, 31, "%d %d", i, Weapons[i]);
1736 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1737 menu_additem(sMenu, szText, String);
1738
1739 All++;
1740 }
1741
1742 if(All == 0)
1743 {
1744 MenuMod[id] = 0;
1745 Menu(id);
1746 }
1747 }
1748 case 2: // Skrynios
1749 {
1750 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w - \r%L %L^n^n%L", LANG_PLAYER, "MENUTOCHESTOPEN", LANG_PLAYER, "YPOINT", Points[id], LANG_PLAYER, "KEYPIECE", pKey[id]);
1751 sMenu = menu_create(szText, "MenuHandler");
1752
1753 new call = menu_makecallback("Call_Back");
1754
1755 for(new i = 1; i <= CHEST_COUNT; i++)
1756 {
1757 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1758 menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && pKey[id] > 0) ? -1 : call);
1759 }
1760 }
1761 case 3: // Turgus
1762 {
1763 aThing[id] = 0;
1764
1765 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w -\r %L %L", LANG_PLAYER, "MENUTOMARKET", LANG_PLAYER, "YPOINT", Points[id]);
1766 sMenu = menu_create(szText, "MenuHandler");
1767 new call = menu_makecallback("Call_Back");
1768
1769 aThing[32] = 0;
1770
1771 new String[32], All;
1772 new Name[32]; get_user_name(id, Name, 31);
1773
1774 if(!inMarket[id])
1775 {
1776 for(new i = 1; i < AllWeapon; i++)
1777 {
1778 if(i == WeaponinMarket[id] && uWeapon[i][id] > 0)
1779 {
1780 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACES", szWeaponNames[Weapons[i]], WeaponNames[i], MarketPoints[id]);
1781 All = 50;
1782 }
1783 }
1784 // log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
1785 if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1786 {
1787 for(new i = 1; i <= CHEST_COUNT; i++)
1788 {
1789 // log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
1790 if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
1791 {
1792 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
1793
1794 All++;
1795 break;
1796 }
1797 }
1798 }
1799
1800 if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
1801 {
1802 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEK", MarketPoints[id], mAmount[id]);
1803 All++;
1804 }
1805
1806 if(All == 0)
1807 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
1808
1809 menu_additem(sMenu, szText, "-1");
1810
1811 if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
1812 {
1813 formatex(szText, sizeof(szText), "Amount: \r%d", mAmount[id]);
1814 menu_additem(sMenu, szText, "-99");
1815 }
1816 else if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1817 {
1818 formatex(szText, sizeof(szText), "Amount: \r%d", mAmount[id]);
1819 menu_additem(sMenu, szText, "-99");
1820 }
1821 }
1822
1823 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, (!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
1824 menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
1825
1826 for(new x = 1; x <= get_maxplayers(); x++)
1827 {
1828 if(!is_user_connected(x) || is_user_bot(x) || x == id)
1829 continue;
1830
1831 if(inMarket[x] && MarketPoints[x] > 0)
1832 {
1833 num_to_str(x, String, 31);
1834
1835 if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
1836 {
1837 // log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
1838
1839 new chId = (WeaponinMarket[x]-CHEST_ID)+1;
1840
1841 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], Name);
1842 menu_additem(sMenu, szText, String);
1843 }
1844 else if(KEY_ID == WeaponinMarket[x])
1845 {
1846 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK_TURGUS", MarketPoints[x], mAmount[x] > pKey[x] ? pKey[x] : mAmount[x], Name);
1847 menu_additem(sMenu, szText, String);
1848 }
1849 else
1850 {
1851 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS_TURGUS", szWeaponNames[Weapons[WeaponinMarket[x]]], WeaponNames[WeaponinMarket[x]], MarketPoints[x], Name);
1852 menu_additem(sMenu, szText, String);
1853 }
1854 }
1855 }
1856 }
1857 case 4: // Skinų Parduotuvė
1858 {
1859 client_cmd(id, "setSkins");
1860 }
1861 case 5: // Dovanos
1862 {
1863 formatex(szText, sizeof(szText), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w -\r %L %L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, "YPOINT", Points[id]);
1864 sMenu = menu_create(szText, "MenuHandler");
1865 new call = menu_makecallback("Call_Back");
1866
1867 new All, Name[126], String[32];
1868 get_user_name(aTarget[id], Name, 31);
1869
1870 if(aTarget[id] > 0)
1871 {
1872 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
1873 menu_additem(sMenu, szText, "-1");
1874
1875 for(new i = 1; i < AllWeapon; i++)
1876 {
1877 if(i == aThing[id] && uWeapon[i][id] > 0)
1878 {
1879 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", szWeaponNames[Weapons[i]], WeaponNames[i]);
1880 menu_additem(sMenu, szText, "-2");
1881 All++;
1882 }
1883 }
1884
1885 if(aThing[id] <= MAX && All == 0)
1886 {
1887 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
1888 menu_additem(sMenu, szText, "-2");
1889 }
1890 else if(aThing[id] > MAX)
1891 {
1892 if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
1893 if(KEY_ID == aThing[id]) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK"); }
1894
1895 menu_additem(sMenu, szText, "-2");
1896 }
1897
1898 if(aThing[id] > MAX)
1899 {
1900 formatex(szText, sizeof(szText), "Amount: \r%d", aAmount[id]);
1901 menu_additem(sMenu, szText, "-75");
1902 }
1903
1904 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
1905 menu_additem(sMenu, szText, "-4");
1906
1907 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
1908 menu_additem(sMenu, szText, "-3");
1909 }
1910 else
1911 {
1912 for(new i = 1; i <= get_maxplayers(); i++)
1913 {
1914 if(is_user_connected(i) && !is_user_bot(i))
1915 {
1916 get_user_name(i, Name, 31);
1917
1918 if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
1919
1920 num_to_str(i, String, 31);
1921 menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
1922 }
1923 }
1924 }
1925 }
1926 case 6: // ParduotuvÄ—
1927 {
1928 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "PMAIN", LANG_PLAYER, "YPOINT", Points[id]);
1929 sMenu = menu_create(szText, "MenuHandler");
1930
1931 new call = menu_makecallback("Call_Back");
1932 new accesNum = get_access(id);
1933 new Float:gPercent = ((accesNum == 3) ? 0.9 : ((accesNum == 2) ? 0.94 : (accesNum == 1) ? 0.97 : 1.0));
1934
1935 new gPrice = floatround(1700*gPercent, floatround_floor);
1936 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", gPrice);
1937 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1938
1939 gPrice = floatround(8000*gPercent, floatround_floor);
1940 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_5", gPrice);
1941 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1942
1943 gPrice = floatround(14000*gPercent, floatround_floor);
1944 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_10", gPrice);
1945 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1946
1947 gPrice = floatround(CONTRACT_COST*gPercent, floatround_floor);
1948 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCONTRACT_1", gPrice);
1949 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1950
1951 //for(new i = 1; i <= CHEST_COUNT-1; i++)
1952 for(new i = 1; i <= CHEST_COUNT; i++)
1953 {
1954 gPrice = floatround(CHESTS_COST*gPercent, floatround_floor);
1955 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), gPrice);
1956 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1957 }
1958 }
1959 case 7: // Skrynių info
1960 {
1961 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "IMAIN", LANG_PLAYER, "YPOINT", Points[id]);
1962 sMenu = menu_create(szText, "MenuHandler");
1963
1964 for(new i = 1; i <= CHEST_COUNT; i++)
1965 {
1966 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTINFOPIECE", chest_name(i));
1967 menu_additem(sMenu, szText);
1968 }
1969 }
1970 case 8: // Keitimas Trade
1971 {
1972 client_cmd(id, "setTrade");
1973 }
1974 case 9: // Kontraktas
1975 {
1976 formatex(szText, sizeof(szText), "\r%L ^n\r[\yFragWay.Ro CS:GO Unlimited\r]\w - %L %L", LANG_PLAYER, "SKINS_CONTRACTS", getContracts(id, TYPE_CONTRACT), getContracts(id, TYPE_CONTRACTS), getContracts(id, TYPE_COVERT), LANG_PLAYER, "MENUTOCONTRACTS", LANG_PLAYER, "CONTRACT", Kontraktas[id]);
1977 sMenu = menu_create(szText, "MenuHandler");
1978
1979 new All;
1980
1981 if(Kontraktas[id] > 0)
1982 {
1983 new String[32];
1984
1985 menu_additem(sMenu, "\rMake contract", "-1");
1986 menu_additem(sMenu, "\yTake skin^n\r------------", "0");
1987
1988 for(new i = 1; i < AllWeapon; i++)
1989 {
1990 if(uWeapon[i][id] == 0)
1991 continue;
1992
1993 num_to_str(i, String, 31);
1994 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", szWeaponNames[Weapons[i]], WeaponNames[i], uWeapon[i][id]);
1995 menu_additem(sMenu, szText, String);
1996 All++;
1997 }
1998 }
1999 //if(All == 0)
2000 //{
2001 //MenuMod[id] = 0;
2002 //Menu(id);
2003 //}
2004 }
2005 case 11: // Party
2006 {
2007 client_cmd(id, "setParty");
2008 }
2009 case 12: // Atlygis
2010 {
2011 client_cmd(id, "setRewards");
2012 }
2013 case 13: // Atlygis
2014 {
2015 client_cmd(id, "clan");
2016 }
2017 case 14: // Atlygis
2018 {
2019 client_cmd(id, "factions");
2020 }
2021 case 15: // Atlygis
2022 {
2023 client_cmd(id, "say /mvp");
2024 }
2025 case 16: // Atlygis
2026 {
2027 client_cmd(id, "getgift");
2028 }
2029 case 17: // Atlygis
2030 {
2031 client_cmd(id, "lbz");
2032 }
2033 case 18: // Atlygis
2034 {
2035 client_cmd(id, "hitman");
2036 }
2037 case 19: // Atlygis
2038 {
2039 client_cmd(id, "medal");
2040 }
2041 case 20: // Atlygis
2042 {
2043 client_cmd(id, "bonus");
2044 }
2045 }
2046 menu_display(id, sMenu, 0);
2047}
2048
2049public plugin_natives()
2050{
2051 register_native("get_user_points", "native_get_user_points", 1);
2052 register_native("set_user_points", "native_set_user_points", 1);
2053}
2054
2055public native_get_user_points(id)
2056{
2057 return Points[id];
2058}
2059
2060public native_set_user_points(id, amount)
2061{
2062 Points[id] = amount;
2063 SavePoints(id);
2064}
2065
2066public Call_Back(id, menu, item)
2067 return ITEM_DISABLED;
2068
2069public PlaySound(id)
2070{
2071 client_cmd(0, "spk misc/bilalconnect.wav");
2072}
2073
2074public MenuHandler(id, gMenu, item)
2075{
2076 if(item == MENU_EXIT)
2077 {
2078 MenuMod[id] = 0;
2079 menu_destroy(gMenu);
2080 return PLUGIN_HANDLED;
2081 }
2082
2083 new aMenu[2], Data[4][32], sKey[32], Name[32], mName[32], Key;
2084 menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2085 parse(Data[0], sKey, 31);
2086 Key = str_to_num(sKey);
2087
2088 switch(MenuMod[id])
2089 {
2090 case -2:
2091 {
2092 MenuMod[id] = 5;
2093 aThing[id] = Key;
2094
2095 Menu(id);
2096 }
2097 case -1:
2098 {
2099 MenuMod[id] = 3;
2100 WeaponinMarket[id] = Key;
2101
2102 client_cmd(id, "messagemode Cost");
2103
2104 Menu(id);
2105 }
2106 case 0:
2107 {
2108 MenuMod[id] = Key;
2109 Menu(id);
2110
2111 }
2112 case 1:
2113 {
2114 parse(Data[0], Data[2], 31, Data[3], 31);
2115
2116 if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2]))
2117 {
2118 bUsingGuns[id][str_to_num(Data[3])] = 0;
2119 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])]);
2120 } else {
2121 bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
2122 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])]);
2123 set_task(0.1, "UpdateStatusText", id);
2124 }
2125
2126 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2127 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2128 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2129
2130 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2131
2132 log_errors("[SKIN CHANGE] %s", szQuery);
2133
2134 MenuMod[id] = 1;
2135 Menu(id);
2136 }
2137 case 2:
2138 {
2139 if(Chest[id][(item+1)] <= 0)
2140 {
2141 Chest[id][(item+1)] = 0;
2142
2143 if(pKey[id] < 0)
2144 pKey[id] = 0;
2145
2146 return PLUGIN_CONTINUE;
2147 }
2148
2149 Chest[id][(item+1)]--;
2150 pKey[id]--;
2151
2152 new chest = item+1;
2153
2154 new Float:rNum = random_float((random(5)*1.5), 200.0);
2155 new chance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : 100));
2156 ///////////////////////////////////////////
2157 new skinsCnt = chestsChance[chest][chance];
2158 new skinNum = random(skinsCnt);
2159 new skinId = chestsList[chest][chance][skinNum];
2160
2161 new szName[32]; get_user_name(id, szName, 31);
2162
2163 if(1 <= chance <= 5) { print_color(0, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]); }
2164 else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_SELF", Prefix, szWeaponNames[Weapons[skinId]], WeaponNames[skinId]); }
2165
2166 log_errors("[SKINLOG FOUND] %s find ^1[^4%s | %s^1]^4 skin!", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2167
2168 uWeapon[skinId][id]++;
2169
2170 SaveData(id);
2171 Menu(id);
2172 }
2173 case 3:
2174 {
2175 if(Key == -1) { MenuMod[id] = -1; Menu(id); }
2176 else if(Key == 0)
2177 {
2178 if(inMarket[id]) { inMarket[id] = false; }
2179 else if(MarketPoints[id] > 0)
2180 {
2181 if(mAmount[id] < 1) mAmount[id] = 1;
2182 get_user_name(id, Name, 31);
2183
2184 switch(WeaponinMarket[id])
2185 {
2186 case CHEST_ID..(CHEST_ID+CHEST_COUNT): { print_color(0, "%L", LANG_PLAYER, "TOMARKET_CHEST", Prefix, Name, mAmount[id], chest_name((WeaponinMarket[id]-CHEST_ID)+1), MarketPoints[id]); }
2187 case KEY_ID: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, mAmount[id], MarketPoints[id]); }
2188 default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, szWeaponNames[Weapons[WeaponinMarket[id]]], WeaponNames[WeaponinMarket[id]], MarketPoints[id]); }
2189 }
2190 inMarket[id] = true;
2191 }
2192 gLastMarketTime[id] = get_systime();
2193 Menu(id);
2194 }
2195 else if(Key == -99)
2196 {
2197 client_cmd(id, "messagemode setMarketAmount");
2198 }
2199 else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
2200 {
2201 get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
2202
2203 if(WeaponinMarket[Key] < CHEST_ID)
2204 {
2205 gKey[id] = Key;
2206 confirmBuySkin(id);
2207 return PLUGIN_HANDLED;
2208 }
2209 else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
2210 {
2211 new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
2212
2213 if(Chest[Key][chId] <= 0)
2214 {
2215 inMarket[Key] = false;
2216 MarketPoints[Key] = 0;
2217 WeaponinMarket[Key] = 0;
2218
2219 return PLUGIN_CONTINUE;
2220 }
2221 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);
2222
2223 Chest[id][chId]++;
2224 Chest[Key][chId]--;
2225 }
2226 else if(WeaponinMarket[Key] == KEY_ID)
2227 {
2228 if(pKey[Key] <= 0)
2229 {
2230 inMarket[Key] = false;
2231 MarketPoints[Key] = 0;
2232 WeaponinMarket[Key] = 0;
2233
2234 return PLUGIN_CONTINUE;
2235 }
2236
2237 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, MarketPoints[Key], Name);
2238
2239 pKey[id]++; pKey[Key]--;
2240 }
2241
2242 emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
2243 Points[Key] += MarketPoints[Key];
2244 Points[id] -= MarketPoints[Key];
2245 SaveData(Key);
2246 SaveData(id);
2247 mAmount[Key]--;
2248
2249 if(mAmount[Key] <= 0)
2250 {
2251 inMarket[Key] = false;
2252 MarketPoints[Key] = 0;
2253 WeaponinMarket[Key] = 0;
2254 }
2255 Menu(id);
2256 }
2257 }
2258 case 4: // Skinų Parduotuvė
2259 {
2260 client_cmd(id, "setSkins");
2261 }
2262 case 5:
2263 {
2264 if(Key == -1) { aTarget[id] = 0; }
2265 if(Key == -2) { MenuMod[id] = -2; }
2266 if(Key == -3)
2267 {
2268 if(!is_user_connected(aTarget[id]))
2269 {
2270 return PLUGIN_CONTINUE;
2271 }
2272
2273 if(aThing[id] < CHEST_ID)
2274 {
2275 if(uWeapon[aThing[id]][id] > 0)
2276 {
2277 uWeapon[aThing[id]][aTarget[id]]++;
2278 uWeapon[aThing[id]][id]--;
2279
2280 if(!uWeapon[aThing[id]][id])
2281 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
2282
2283 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2284 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2285 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2286
2287 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2288
2289 log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
2290 log_errors("[SKIN GIFT] %s", szQuery);
2291
2292 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN", szWeaponNames[Weapons[aThing[id]]], WeaponNames[aThing[id]]);
2293 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), szWeaponNames[Weapons[aThing[id]]], WeaponNames[aThing[id]]);
2294 }
2295 }
2296 else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
2297 {
2298 new cId = aThing[id]-CHEST_ID;
2299
2300 if(Chest[id][cId] >= aAmount[id])
2301 {
2302 Chest[aTarget[id]][cId]+=aAmount[id];
2303 Chest[id][cId]-=aAmount[id];
2304
2305 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST", chest_name((aThing[id]-CHEST_ID)), aAmount[id]);
2306 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), chest_name((aThing[id]-CHEST_ID)), aAmount[id]);
2307 }
2308 else client_print_color(id, print_team_default, "%s you dont have so much chests!", Prefix);
2309 }
2310 else if(aThing[id] == KEY_ID)
2311 {
2312 if(pKey[id] >= aAmount[id])
2313 {
2314 pKey[aTarget[id]]+=aAmount[id]; pKey[id]-=aAmount[id];
2315
2316 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
2317 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), aAmount[id]);
2318 }
2319 else client_print_color(id, print_team_default, "%s you dont have so much keys!", Prefix);
2320 }
2321 if(aPoints[id] > 0 && Points[id] >= aPoints[id])
2322 {
2323 Points[aTarget[id]] += aPoints[id];
2324 Points[id] -= aPoints[id];
2325 client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
2326 log_errors("[SKINLOG PTS] %s give a gift %s - %d points", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
2327 }
2328
2329 SaveData(aTarget[id]);
2330 SaveData(id);
2331
2332 MenuMod[id] = 0;
2333 aThing[id] = 0;
2334 aTarget[id] = 0;
2335 aPoints[id] = 0;
2336 }
2337
2338 if(Key == -75)
2339 {
2340 client_cmd(id, "messagemode setAmount");
2341 }
2342
2343 if(Key == -4) { client_cmd(id, "messagemode Gift"); }
2344 if(Key > 0) { aTarget[id] = Key; }
2345 Menu(id);
2346 }
2347 case 6:
2348 {
2349 new accesNum = get_access(id);
2350 new Float:gPercent = ((accesNum == 3) ? 0.9 : ((accesNum == 2) ? 0.94 : (accesNum == 1) ? 0.97 : 1.0));
2351
2352 switch(item)
2353 {
2354 case 0:
2355 {
2356 Points[id] -= floatround(1700*gPercent, floatround_floor);
2357 pKey[id]++;
2358
2359 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix);
2360 SaveKeys(id);
2361 }
2362 case 1:
2363 {
2364 Points[id] -= floatround(8000*gPercent, floatround_floor);
2365 pKey[id] += 5;
2366
2367 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_5", Prefix);
2368 SaveKeys(id);
2369 }
2370 case 2:
2371 {
2372 Points[id] -= floatround(14000*gPercent, floatround_floor);
2373 pKey[id] += 10;
2374
2375 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_10", Prefix);
2376 SaveKeys(id);
2377 }
2378 case 3:
2379 {
2380 if(Points[id] >= CONTRACT_COST)
2381 {
2382 if(Kontraktas[id] < MAX_CONTRACT)
2383 {
2384 Points[id] -= floatround(CONTRACT_COST*gPercent, floatround_floor);
2385 Kontraktas[id]++;
2386
2387 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCONTRACT_1", Prefix);
2388 SaveKontraktas(id);
2389 }
2390 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] You already have contract!");
2391 }
2392 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3Not enough points!");
2393 }
2394 case 4..(CHEST_COUNT+3):
2395 {
2396 Chest[id][item-3] += 1;
2397
2398 Points[id] -= floatround(CHESTS_COST*gPercent, floatround_floor);
2399
2400 print_color(id, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, chest_name(item-3));
2401
2402 SaveChests(id);
2403 }
2404 }
2405 Menu(id);
2406 }
2407 case 7:
2408 {
2409 new szMotd[126]; formatex(szMotd, charsmax(szMotd), "http://fragway.ro/pbgo/b.php?chest=%d", (item+1));
2410 show_motd(id, szMotd, chest_name((item+1)));
2411 Menu(id);
2412 }
2413 case 10:
2414 {
2415 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
2416 {
2417 uWeapon[Key][id]--;
2418
2419 bUsingGuns[id][Weapons[Key]] = 0;
2420
2421 new PointsNum = random_num(50, 100);
2422
2423 Points[id] += PointsNum;
2424
2425 client_print_color(id, print_team_default, "%s%L", Prefix, LANG_PLAYER, "MENUTODUST", get_user_name_ex(id), PointsNum);
2426
2427 log_errors("[SKINLOG TRASH] %s traidet %s", get_user_name_ex(id), WeaponNames[Key]);
2428
2429 SaveData(id);
2430 } else {
2431 uWeapon[Key][id] = 0;
2432 SaveData(id);
2433 }
2434
2435 Menu(id);
2436 }
2437 case 9:
2438 {
2439 if(Key == -1)
2440 {
2441 if(getContracts(id, TYPE_CONTRACT) >= 20)
2442 {
2443 new chestNum = random_num(1, 9);
2444 new chest = chestNum;
2445
2446 new chance = 25;
2447 new skinsCnt = chestsChance[chest][chance];
2448 new skinNum = random(skinsCnt);
2449 new skinId = chestsList[chest][chance][skinNum];
2450
2451 client_print_color(0, print_team_default, "%s%L", Prefix, LANG_PLAYER, "MENUTODUST_SKINS", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2452
2453 uWeapon[skinId][id]++;
2454 for(new i = 1; i < AllWeapon; i++) Contract[i][id] = 0;
2455
2456 log_errors("[SKINLOG CONTRACT] %s During the contract you changed your skin to [%s | %s] skin!", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2457
2458 SaveData(id);
2459 // SaveKontraktas(id);
2460 }
2461 if(getContracts(id, TYPE_CONTRACTS) >= 10)
2462 {
2463 new chestNum = random_num(1, 9);
2464 new chest = chestNum;
2465
2466 new chance = 5;
2467 new skinsCnt = chestsChance[chest][chance];
2468 new skinNum = random(skinsCnt);
2469 new skinId = chestsList[chest][chance][skinNum];
2470
2471 client_print_color(0, print_team_default, "%s%L", Prefix, LANG_PLAYER, "MENUTODUST_CONTRACT", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2472
2473 log_errors("[SKINLOG CONTRACT] %s During your contract skin's changed to [%s | %s] skin!", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2474
2475 uWeapon[skinId][id]++;
2476 for(new i = 1; i < AllWeapon; i++) Contracts[i][id] = 0;
2477
2478 SaveData(id);
2479 // SaveKontraktas(id);
2480 }
2481 if(getContracts(id, TYPE_COVERT) >= 10)
2482 {
2483 new chestNum = random_num(1, 9);
2484 new chest = chestNum;
2485
2486 new chance = 1;
2487 new skinsCnt = chestsChance[chest][chance];
2488 new skinNum = random(skinsCnt);
2489 new skinId = chestsList[chest][chance][skinNum];
2490
2491 client_print_color(0, print_team_default, "%s%L", Prefix, LANG_PLAYER, "MENUTODUST_CONTRACTS", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2492
2493 log_errors("[SKINLOG CONTRACT] %s Kontrakto metu savo skin's iškeitėte į [%s | %s] skiną!", get_user_name_ex(id), szWeaponNames[Weapons[skinId]], WeaponNames[skinId]);
2494
2495 uWeapon[skinId][id]++;
2496 for(new i = 1; i < AllWeapon; i++) Covert[i][id] = 0;
2497
2498 SaveData(id);
2499 // SaveKontraktas(id);
2500 }
2501 MenuMod[id] = 9;
2502 }
2503 else if(Key == 0)
2504 {
2505 viewContractSkins(id);
2506 return PLUGIN_HANDLED;
2507 }
2508 else
2509 {
2510 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
2511 {
2512 new bool:skinAdded = false;
2513
2514 if(weaponRang[Key] == 2)
2515 {
2516 if(getContracts(id, TYPE_COVERT) < 10)
2517 {
2518 Covert[Key][id]++;
2519
2520 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Covert[Key][id]);
2521
2522 skinAdded = true;
2523 }
2524 }
2525 else if(weaponRang[Key] == 3)
2526 {
2527 if(getContracts(id, TYPE_CONTRACTS) < 10)
2528 {
2529 Contracts[Key][id]++;
2530
2531 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Contracts[Key][id]);
2532
2533 skinAdded = true;
2534 }
2535 }
2536 else if(weaponRang[Key] == 4)
2537 {
2538 if(getContracts(id, TYPE_CONTRACT) < 20)
2539 {
2540 Contract[Key][id]++;
2541
2542 log_errors("[TRASH] [%s | %s | %s]", get_user_name_ex(id), weaponRang[Key], Contract[Key][id]);
2543
2544 skinAdded = true;
2545 }
2546 }
2547
2548 if(skinAdded)
2549 {
2550 uWeapon[Key][id]--;
2551
2552 bUsingGuns[id][Weapons[Key]] = 0;
2553
2554 if(!uWeapon[Key][id])
2555 uWeaponKills[Key][id] = 0;
2556
2557 log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
2558
2559 SaveData(id);
2560 }
2561 }
2562 }
2563 Menu(id);
2564 }
2565 default: { MenuMod[id] = 0; }
2566 }
2567
2568 menu_destroy(gMenu);
2569 return PLUGIN_HANDLED;
2570}
2571
2572public client_disconnected(id)
2573{
2574 Patirtis[id] = 0, Killers[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Rounds[id] = 0;
2575 Kontraktas[id] = 0;
2576
2577 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2578
2579 for(new i; i < AllWeapon; i++)
2580 {
2581 uWeapon[i][id] = 0;
2582 Contract[i][id] = 0, Contracts[i][id] = 0, Covert[i][id] = 0;
2583 }
2584
2585 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2586
2587 gWarnings[id] = 0;
2588 WeaponinMarket[id] = 0;
2589 MarketPoints[id] = 0;
2590 inMarket[id] = 0;
2591 Password[id] = "";
2592 SavedPassword[id] = "";
2593 Loged[id] = false;
2594 gRegistered[id] = false;
2595 gLogged[id] = false;
2596 canOffer[id] = true;
2597
2598 TradeTarget[id] = 0;
2599 TradeAccept[id] = -1;
2600 TradeSkin[id] = -1;
2601 TradeChest[id] = -1;
2602 TradeChestCount[id] = 0;
2603 TradeKey[id] = 0;
2604 TradeMoney[id] = 0;
2605}
2606
2607public client_putinserver(id)
2608{
2609 Patirtis[id] = 0, Killers[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Rounds[id] = 0;
2610 Kontraktas[id] = 0;
2611
2612 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2613
2614 for(new i; i < AllWeapon; i++)
2615 {
2616 uWeapon[i][id] = 0;
2617 Contract[i][id] = 0, Contracts[i][id] = 0, Covert[i][id] = 0;
2618 }
2619
2620 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2621
2622 gWarnings[id] = 0;
2623 Password[id] = "";
2624 SavedPassword[id] = "";
2625 Loged[id] = false;
2626 gRegistered[id] = false;
2627 gLogged[id] = false;
2628 gLastMarketTime[id] = get_systime();
2629 gPlayerTime[id] = get_systime();
2630
2631 PartySlots[id] = 0;
2632 InParty[id] = 0;
2633 PartyCreated[id] = false;
2634
2635 for(new i = 1; i <= 32; i++) PartyInvites[i][id] = false;
2636
2637 canOffer[id] = true;
2638
2639 if(gCanLoad) { set_task(0.5, "Registered", id); }
2640
2641 inMM[id] = false;
2642}
2643
2644public add_delay(id)
2645{
2646 switch(id)
2647 {
2648 case 1..8: set_task(0.1, "Registered", id);
2649 case 9..16: set_task(0.2, "Registered", id);
2650 case 17..24: set_task(0.3, "Registered", id);
2651 case 25..32: set_task(0.4, "Registered", id);
2652 }
2653}
2654//============================================================//
2655// [~ Saving / Loading datas ~] //
2656//============================================================//
2657public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
2658{
2659 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2660 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2661}
2662
2663public Login(id)
2664{
2665 if(!is_user_connected(id) || is_user_bot(id))
2666 return;
2667
2668 static szQuery[256], iData[1]; iData[0] = id;
2669 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
2670
2671 SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
2672
2673 log_errors("[LOGIN] %s", szQuery);
2674}
2675
2676public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
2677{
2678 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
2679 else
2680 {
2681 new id = iData[0];
2682
2683 if(1 <= id <= 32)
2684 {
2685 static szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256], szChests[128];
2686 static szCoverts[512+MAX], szContract[512+MAX], szContracts[512+MAX];
2687 if(SQL_NumResults(hQuery))
2688 {
2689
2690 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
2691 Patirtis[id] = SQL_ReadResult(hQuery, 2);
2692 Killers[id] = SQL_ReadResult(hQuery, 3);
2693 Kills[id] = SQL_ReadResult(hQuery, 4);
2694 Points[id] = SQL_ReadResult(hQuery, 5);
2695 pKey[id] = SQL_ReadResult(hQuery, 6);
2696 Rang[id] = SQL_ReadResult(hQuery, 8);
2697 Rounds[id] = SQL_ReadResult(hQuery, 9);
2698 Kontraktas[id] = SQL_ReadResult(hQuery, 13);
2699 PartySlots[id] = SQL_ReadResult(hQuery, 17);
2700
2701 SQL_ReadResult(hQuery, 10, szSkins, sizeof(szSkins));
2702 SQL_ReadResult(hQuery, 11, szUGuns, sizeof(szUGuns));
2703 SQL_ReadResult(hQuery, 12, szKSkins, sizeof(szKSkins));
2704 SQL_ReadResult(hQuery, 7, szChests, sizeof(szChests));
2705
2706 SQL_ReadResult(hQuery, 14, szContract, sizeof(szContract));
2707 SQL_ReadResult(hQuery, 15, szContracts, sizeof(szContracts));
2708 SQL_ReadResult(hQuery, 16, szCoverts, sizeof(szCoverts));
2709
2710 SQL_NextRow(hQuery);
2711
2712 new myNumbers[512+MAX];
2713
2714 new count = ExplodeString(szContract, myNumbers);
2715
2716 if(count) { for(new i = 1; i < MAX; i++) { Contract[i][id] = myNumbers[i]; } }
2717 count = ExplodeString(szContracts, myNumbers);
2718
2719 if(count) { for(new i = 1; i < MAX; i++) { Contracts[i][id] = myNumbers[i]; } }
2720 count = ExplodeString(szCoverts, myNumbers);
2721
2722 if(count) { for(new i = 1; i < MAX; i++) { Covert[i][id] = myNumbers[i]; } }
2723 count = ExplodeString(szSkins, myNumbers);
2724
2725 if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
2726 count = ExplodeString(szKSkins, myNumbers);
2727
2728 if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
2729 count = ExplodeString(szUGuns, myNumbers);
2730
2731 if(count)
2732 {
2733 for(new i = 1; i < CSW_VESTHELM; i++)
2734 {
2735 if(myNumbers[i] <= MAX)
2736 {
2737 if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
2738 {
2739 bUsingGuns[id][i] = myNumbers[i];
2740 }
2741 }
2742 }
2743 }
2744
2745 count = ExplodeString(szChests, myNumbers);
2746
2747 if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
2748
2749 if(!equal(Password[id], SavedPassword[id]))
2750 {
2751 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
2752 }
2753 }
2754 Loged[id] = true;
2755 UnsetBlack(id);
2756 }
2757 }
2758}
2759
2760public SaveData(id)
2761{
2762 if(Loged[id] && gRegistered[id] && gCanSave)
2763 {
2764 static szQuery[5120], szSkins[1024], szKSkins[1024], szUGuns[128], szChests[128];
2765 static szContract[1024], szCovert[1024], szContracts[1024];
2766
2767 format(szSkins, sizeof(szSkins), "");
2768 format(szKSkins, sizeof(szKSkins), "");
2769 format(szUGuns, sizeof(szUGuns), "");
2770 format(szChests, sizeof(szChests), "");
2771
2772 format(szContract, sizeof(szContract), "");
2773 format(szCovert, sizeof(szCovert), "");
2774 format(szContracts, sizeof(szContracts), "");
2775
2776 for(new i; i < MAX; i++)
2777 {
2778 format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]);
2779 format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]);
2780 }
2781
2782 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2783 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
2784
2785 for(new i; i < MAX; i++)
2786 {
2787 format(szContract, sizeof(szContract), "%s%d ", szContract, Contract[i][id]);
2788 format(szContracts, sizeof(szContracts), "%s%d ", szContracts, Contracts[i][id]);
2789 format(szCovert, sizeof(szCovert), "%s%d ", szCovert, Covert[i][id]);
2790 }
2791
2792 formatex(szQuery, sizeof(szQuery), "REPLACE INTO `%s` SET `username` = '%s', `password` = '%s', `patirtis` = '%d', `kills` = '%d', `killers` = '%d', `points` = '%d', `keys` = '%d', `chests` = '%s', `rang` = '%d', `rounds` = '%d', `kontraktas` = '%d', `contract` = '%s', `contracts` = '%s', `covert` = '%s', `skins` = '%s', `using_skins` = '%s', `skins_kills` = '%s', `party_slots` = '%d';", TABLE_NAME, get_user_name_ex(id), SavedPassword[id], Patirtis[id], Kills[id], Killers[id], Points[id], pKey[id], szChests, Rang[id], Rounds[id], Kontraktas[id], szContract, szContracts, szCovert, szSkins, szUGuns, szKSkins, PartySlots[id]);
2793 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2794
2795 log_errors("[SAVE] %s", szQuery);
2796 }
2797}
2798
2799public QuerySetData(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
2800{
2801 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2802 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2803}
2804
2805public UnsetBlack(id)
2806{
2807 set_user_maxspeed(id, 250.0);
2808 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
2809 write_short(1<<10);
2810 write_short(1<<10);
2811 write_short(0x0000);
2812 write_byte(255);
2813 write_byte(255);
2814 write_byte(255);
2815 write_byte(50);
2816 message_end();
2817}
2818
2819public RegMenu(id)
2820{
2821 static sId; sId = id;
2822 id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
2823
2824 if(Loged[id])
2825 {
2826 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
2827 Menu(id);
2828 return PLUGIN_HANDLED;
2829 }
2830
2831 if(!gLogged[id] || !gCanLoad)
2832 {
2833 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
2834 remove_task(id+TASKID_REMENU);
2835 set_task(1.0, "RegMenu", id+TASKID_REMENU);
2836 return PLUGIN_HANDLED;
2837 }
2838 remove_task(id+TASKID_REMENU);
2839
2840 if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
2841 {
2842 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2843 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
2844 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
2845 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2846
2847 UnsetBlack(id);
2848 return PLUGIN_HANDLED;
2849 }
2850
2851 if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
2852 {
2853 Login(id);
2854 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix);
2855
2856 return PLUGIN_HANDLED;
2857 }
2858
2859 new szString[128], Name[32];
2860 format(szString, sizeof(szString), "\r[\yFragWay.Ro CS:GO Unlimited\r]\w - %L", LANG_PLAYER, "RMMAIN");
2861 new rMenu = menu_create(szString, "rMenuHandler");
2862 get_user_name(id, Name, 31);
2863
2864 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name); // Client name
2865 menu_additem(rMenu, szString, "0");
2866
2867 new szPassword[126];
2868
2869 for(new i; i < strlen(Password[id]); i++)
2870 {
2871 format(szPassword, charsmax(szPassword), "%s*", szPassword);
2872 }
2873
2874 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
2875 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword); // Client password
2876 menu_additem(rMenu, szString, "1");
2877
2878 if(!gRegistered[id]) // Not registered
2879 {
2880 format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
2881 menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
2882 }
2883 else
2884 {
2885 if(!Loged[id]) // Registered, but not logged
2886 {
2887 new gPassCheck = equal(SavedPassword[id], Password[id]);
2888
2889 format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
2890 menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
2891 }
2892 else
2893 {
2894 Menu(id);
2895 }
2896 }
2897
2898 menu_display(id, rMenu);
2899 return PLUGIN_HANDLED;
2900}
2901
2902public rMenuHandler(id, gMenu, item)
2903{
2904 if(item == MENU_EXIT)
2905 {
2906 menu_destroy(gMenu);
2907 return PLUGIN_CONTINUE;
2908 }
2909
2910 new data[9], name[64], Key;
2911 new access, callback;
2912 menu_item_getinfo(gMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
2913
2914 Key = str_to_num(data);
2915
2916 switch(Key)
2917 {
2918 case 0: { RegMenu(id); }
2919 case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
2920 case 2:
2921 {
2922 if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
2923 {
2924 copy(SavedPassword[id], 31, Password[id]);
2925 Loged[id] = true;
2926 gRegistered[id] = true;
2927 SaveData(id);
2928 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix, Password[id]);
2929
2930 UnsetBlack(id);
2931
2932 new szName[32]; get_user_name(id, szName, 31);
2933 log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
2934 gWarnings[id] = 0;
2935
2936 print_color(id, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
2937
2938 return PLUGIN_CONTINUE;
2939 } else {
2940 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2941
2942 return PLUGIN_HANDLED;
2943 }
2944 }
2945 case 3:
2946 {
2947 if(!Loged[id])
2948 {
2949 gWarnings[id] = 0;
2950 Login(id);
2951 }
2952 }
2953 }
2954 return PLUGIN_CONTINUE;
2955}
2956
2957public PlayerPassword(id)
2958{
2959 if(Loged[id])
2960 {
2961 return PLUGIN_HANDLED;
2962 }
2963
2964 new Data[32]; read_args(Data, 31); remove_quotes(Data);
2965
2966 if(strlen(Data) < MIN_PASSWORD_LENGTH)
2967 {
2968 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2969 client_cmd(id, "messagemode UserPassword");
2970 return PLUGIN_HANDLED;
2971 }
2972 else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
2973 {
2974 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
2975 gWarnings[id]++;
2976
2977 if(gWarnings[id] >= 3)
2978 {
2979 gWarnings[id] = 0;
2980
2981 server_cmd("amx_kick #%d ^"Trying to hack other account!^"", get_user_userid(id));
2982 }
2983 }
2984
2985 copy(Password[id], 31, Data);
2986 RegMenu(id);
2987 return PLUGIN_CONTINUE;
2988}
2989
2990public NameChange(id)
2991{
2992 if(get_cvar_num("csgo_nick_show"))
2993 return FMRES_IGNORED;
2994
2995 if(!is_user_connected(id) || is_user_bot(id))
2996 return FMRES_IGNORED;
2997
2998 new OldName[32], NewName[32], Name[32];
2999 get_user_name(id, Name, 31);
3000 pev(id, pev_netname, OldName, charsmax(OldName));
3001
3002 if(OldName[0])
3003 {
3004 get_user_info(id, "name", NewName, charsmax(NewName));
3005 if(!equal(OldName, NewName))
3006 {
3007 set_user_info(id, "name", OldName);
3008 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
3009 return FMRES_HANDLED;
3010 }
3011 }
3012 return FMRES_IGNORED;
3013}
3014
3015public Registered(id)
3016{
3017 if(!is_user_connected(id) || is_user_bot(id))
3018 return;
3019
3020 static szQuery[256], iData[1]; iData[0] = id;
3021 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
3022
3023 SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
3024
3025 log_errors("[REGISTERED] %s", szQuery);
3026}
3027
3028public QuerySelectReg(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
3029{
3030 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("[QuerySelectReg] %s", szError); return; }
3031 else
3032 {
3033 new id = iData[0];
3034 if(SQL_NumResults(hQuery))
3035 {
3036 gLogged[id] = true;
3037 gRegistered[id] = true;
3038
3039 new passfield[32], password[32];
3040 get_pcvar_string(csgo_password_field, passfield, 31);
3041 get_user_info(id, passfield, password, 31);
3042
3043 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
3044
3045 if(equal(password, SavedPassword[id]))
3046 {
3047 Password[id] = password;
3048 }
3049
3050 new szName[32]; get_user_name(id, szName, 31);
3051 log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
3052 }
3053 else
3054 {
3055 gLogged[id] = true;
3056 gRegistered[id] = false;
3057
3058 new szName[32]; get_user_name(id, szName, 31);
3059 log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
3060 }
3061 }
3062}
3063
3064public cmdUniq(id)
3065{
3066 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
3067
3068 new szText[1024], szid[64];
3069 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "SMAIN", LANG_PLAYER, "YPOINT", Points[id]);
3070 new sMenu = menu_create(szText, "MenuHandlerUniq");
3071
3072 for(new i; i < AllWeapon; i++)
3073 {
3074 if(uniqPrice[i] > 0)
3075 {
3076 formatex(szid, 63, "%d", i);
3077 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOBUY_SKINS", szWeaponNames[Weapons[i]], WeaponNames[i], uniqPrice[i]);
3078 menu_additem(sMenu, szText, szid, _, (Points[id] < uniqPrice[i]) ? -2 : -1);
3079 }
3080 }
3081
3082 menu_setprop(sMenu, MPROP_EXIT, MEXIT_ALL);
3083 menu_display(id, sMenu);
3084
3085 return PLUGIN_CONTINUE;
3086}
3087
3088public MenuHandlerUniq(id, menu, item)
3089{
3090 if(item == MENU_EXIT)
3091 {
3092 menu_destroy(menu);
3093 return PLUGIN_HANDLED;
3094 }
3095
3096 new aMenu[2], Data[4][32], sKey[32];
3097 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
3098
3099 parse(Data[0], sKey, 31);
3100 new Key = str_to_num(sKey);
3101
3102 if(Points[id] >= uniqPrice[Key])
3103 {
3104 uWeapon[Key][id]++;
3105 Points[id] -= uniqPrice[Key];
3106
3107 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BUYMARKETSKINS", Prefix, get_user_name_ex(id), szWeaponNames[Weapons[Key]], WeaponNames[Key]);
3108
3109 SaveData(id);
3110 }
3111 else
3112 {
3113 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "POINT_ENOUGH", Prefix);
3114 }
3115
3116 Menu(id);
3117 menu_destroy(menu);
3118 return PLUGIN_HANDLED;
3119}
3120/*STOCK'S*/
3121stock rewards_keys(id, dropKey)
3122{
3123 if(dropKey >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3124 {
3125 new szName[33];
3126 get_user_name(id, szName, 32);
3127
3128 static additional_keys; additional_keys = 0;
3129
3130 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_REWARDS", Prefix, szName, additional_keys);
3131 pKey[id]++;
3132
3133 if(InParty[id])
3134 {
3135 for(new i = 1; i <= get_maxplayers(); i++)
3136 {
3137 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3138 {
3139 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_LOBBY", EVENT);
3140
3141 pKey[i]++;
3142 SaveKeys(i);
3143 }
3144 }
3145 }
3146 SaveKeys(id);
3147 }
3148}
3149/*STOCK'S*/
3150stock rewards_item(id, dropRate)
3151{
3152 if(dropRate >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3153 {
3154 new szName[33], rNum;
3155 get_user_name(id, szName, 32);
3156 rNum = random(CHEST_COUNT)+1;
3157
3158 static additional_chests; additional_chests = 0;
3159
3160 if(!additional_chests)
3161 {
3162 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_REWARDS", Prefix, szName, chest_name(rNum));
3163 Chest[id][rNum]++;
3164
3165 if(InParty[id])
3166 {
3167 for(new i = 1; i <= 32; i++)
3168 {
3169 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3170 {
3171 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_LOBBY", Prefix, chest_name(rNum));
3172
3173 Chest[i][rNum]++;
3174 SaveChests(i);
3175 }
3176 }
3177 }
3178 }
3179 SaveChests(id);
3180 }
3181}
3182/*STOCK'S*/
3183stock escape_keys(id, dropKey)
3184{
3185 if(dropKey >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3186 {
3187 new szName[33];
3188 get_user_name(id, szName, 32);
3189
3190 static additional_keys; additional_keys = 0;
3191
3192 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ESCAPE", Prefix, szName, additional_keys);
3193 pKey[id]++;
3194
3195 if(InParty[id])
3196 {
3197 for(new i = 1; i <= get_maxplayers(); i++)
3198 {
3199 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3200 {
3201 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_LOBBY", EVENT);
3202
3203 pKey[i]++;
3204 SaveKeys(i);
3205 }
3206 }
3207 }
3208 SaveKeys(id);
3209 }
3210}
3211/*STOCK'S*/
3212stock escape_item(id, dropRate)
3213{
3214 if(dropRate >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3215 {
3216 new szName[33], rNum;
3217 get_user_name(id, szName, 32);
3218 rNum = random(CHEST_COUNT)+1;
3219
3220 static additional_chests; additional_chests = 0;
3221
3222 if(!additional_chests)
3223 {
3224 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_ESCAPE", Prefix, szName, chest_name(rNum));
3225 Chest[id][rNum]++;
3226
3227 if(InParty[id])
3228 {
3229 for(new i = 1; i <= 32; i++)
3230 {
3231 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3232 {
3233 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_LOBBY", Prefix, chest_name(rNum));
3234
3235 Chest[i][rNum]++;
3236 SaveChests(i);
3237 }
3238 }
3239 }
3240 }
3241 SaveChests(id);
3242 }
3243}
3244
3245/*STOCK'S*/
3246stock planter_keys(id, dropKey)
3247{
3248 if(dropKey >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3249 {
3250 new szName[33];
3251 get_user_name(id, szName, 32);
3252
3253 static additional_keys; additional_keys = 0;
3254
3255 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_PLANTER", Prefix, szName, additional_keys);
3256 pKey[id]++;
3257
3258 if(InParty[id])
3259 {
3260 for(new i = 1; i <= get_maxplayers(); i++)
3261 {
3262 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3263 {
3264 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_LOBBY", EVENT);
3265
3266 pKey[i]++;
3267 SaveKeys(i);
3268 }
3269 }
3270 }
3271 SaveKeys(id);
3272 }
3273}
3274
3275/*STOCK'S*/
3276stock planter_item(id, dropRate)
3277{
3278 if(dropRate >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3279 {
3280 new szName[33], rNum;
3281 get_user_name(id, szName, 32);
3282 rNum = random(CHEST_COUNT)+1;
3283
3284 static additional_chests; additional_chests = 0;
3285
3286 if(!additional_chests)
3287 {
3288 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_PLANTER", Prefix, szName, chest_name(rNum));
3289 Chest[id][rNum]++;
3290
3291 if(InParty[id])
3292 {
3293 for(new i = 1; i <= 32; i++)
3294 {
3295 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3296 {
3297 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_LOBBY", Prefix, chest_name(rNum));
3298
3299 Chest[i][rNum]++;
3300 SaveChests(i);
3301 }
3302 }
3303 }
3304 }
3305 SaveChests(id);
3306 }
3307}
3308
3309/*STOCK'S*/
3310stock defuser_keys(id, dropKey)
3311{
3312 if(dropKey >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3313 {
3314 new szName[33];
3315 get_user_name(id, szName, 32);
3316
3317 static additional_keys; additional_keys = 0;
3318
3319 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_DEFUSER", Prefix, szName, additional_keys);
3320 pKey[id]++;
3321
3322 if(InParty[id])
3323 {
3324 for(new i = 1; i <= get_maxplayers(); i++)
3325 {
3326 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3327 {
3328 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_LOBBY", EVENT);
3329
3330 pKey[i]++;
3331 SaveKeys(i);
3332 }
3333 }
3334 }
3335 SaveKeys(id);
3336 }
3337}
3338
3339/*STOCK'S*/
3340stock defuser_item(id, dropRate)
3341{
3342 if(dropRate >= random_float(0.0, 200.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3343 {
3344 new szName[33], rNum;
3345 get_user_name(id, szName, 32);
3346 rNum = random(CHEST_COUNT)+1;
3347
3348 static additional_chests; additional_chests = 0;
3349
3350 if(!additional_chests)
3351 {
3352 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_DEFUSER", Prefix, szName, chest_name(rNum));
3353 Chest[id][rNum]++;
3354
3355 if(InParty[id])
3356 {
3357 for(new i = 1; i <= 32; i++)
3358 {
3359 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3360 {
3361 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_LOBBY", EVENT, chest_name(rNum));
3362
3363 Chest[i][rNum]++;
3364 SaveChests(i);
3365 }
3366 }
3367 }
3368 }
3369 SaveChests(id);
3370 }
3371}
3372
3373/*STOCK'S*/
3374stock drop_keys(id, dropKey)
3375{
3376 if(dropKey >= random_float(0.0, 1000.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3377 {
3378 new szName[33];
3379 get_user_name(id, szName, 32);
3380
3381 static additional_keys; additional_keys = 0;
3382
3383 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ALL", Prefix, szName, additional_keys);
3384 pKey[id]++;
3385
3386 if(InParty[id])
3387 {
3388 for(new i = 1; i <= get_maxplayers(); i++)
3389 {
3390 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3391 {
3392 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_LOBBY", EVENT);
3393
3394 pKey[i]++;
3395 SaveKeys(i);
3396 }
3397 }
3398 }
3399 SaveKeys(id);
3400 }
3401}
3402
3403/*STOCK'S*/
3404stock drop_item(id, dropRate)
3405{
3406 if(dropRate >= random_float(0.0, 1000.0) && get_playersnum() >= NEED_MIN_PLAYERS)
3407 {
3408 new szName[33], rNum;
3409 get_user_name(id, szName, 32);
3410 rNum = random(CHEST_COUNT)+1;
3411
3412 static additional_chests; additional_chests = 0;
3413
3414 if(!additional_chests)
3415 {
3416 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHEST", Prefix, szName, chest_name(rNum));
3417 Chest[id][rNum]++;
3418
3419 if(InParty[id])
3420 {
3421 for(new i = 1; i <= 32; i++)
3422 {
3423 if(i!= id && InParty[i] == InParty[id] && is_user_connected(i))
3424 {
3425 client_print_color(i, print_team_default, "%L", LANG_PLAYER, "FOUND_CHEST_LOBBY", EVENT, chest_name(rNum));
3426
3427 Chest[i][rNum]++;
3428 SaveChests(i);
3429 }
3430 }
3431 }
3432 }
3433 SaveChests(id);
3434 }
3435}
3436
3437stock get_access(id)
3438{
3439 if(get_user_flags(id) & ACCESS_SADMIN)
3440 {
3441 return 3;
3442 } else if(get_user_flags(id) & ACCESS_ADMIN)
3443 {
3444 return 2;
3445 } else if(get_user_flags(id) & ACCESS_VIP)
3446 {
3447 return 1;
3448 }
3449
3450 return 0;
3451}
3452
3453stock chest_name(iNum)
3454{
3455 new szReturn[126];
3456
3457 switch(iNum)
3458 {
3459 case 1: { formatex(szReturn, charsmax(szReturn), "Hunstman"); }
3460 case 2: { formatex(szReturn, charsmax(szReturn), "Falchion"); }
3461 case 3: { formatex(szReturn, charsmax(szReturn), "Phoenix"); }
3462 case 4: { formatex(szReturn, charsmax(szReturn), "Spectrum"); }
3463 case 5: { formatex(szReturn, charsmax(szReturn), "Revolver"); }
3464 case 6: { formatex(szReturn, charsmax(szReturn), "Chroma"); }
3465 case 7: { formatex(szReturn, charsmax(szReturn), "Shadow"); }
3466 case 8: { formatex(szReturn, charsmax(szReturn), "Gamma"); }
3467 case 9: { formatex(szReturn, charsmax(szReturn), "Hydra"); }
3468 }
3469
3470 return szReturn;
3471}
3472
3473stock screen_color(id)
3474{
3475 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
3476 write_short(1<<10);
3477 write_short(1<<10);
3478 write_short(0x0000);
3479 write_byte(255);
3480 write_byte(0);
3481 write_byte(0);
3482 write_byte(75);
3483}
3484
3485stock ExplodeString(const string[], output[], olen = sizeof output)
3486{
3487 new len = strlen(string); // We retrieve the length of the current string passed.
3488
3489 if (!len) { return 0; } // If the string is empty we stop there.
3490
3491 new i, c, j, count;
3492 new number[12];
3493
3494 do
3495 {
3496 while (string[i] == ' ') i++; // One or more spaces can be used between 2 numbers, so we move forward until we find a number.
3497 while ((number[j++] = c = string[i++]) && c != ' ') {} // We loop and save the number found until the next space found or end of string.
3498
3499 output[count++] = str_to_num(number); // We convert the number saved previously into a number and we stored in output at the slot count.
3500 j = 0;
3501 }
3502 while (i < len && count < olen); // We should looping while we have not cross the string length.
3503
3504 return count;
3505}
3506
3507stock get_user_name_ex(id)
3508{
3509 new szName[33];
3510 get_user_name(id, szName, charsmax(szName));
3511
3512 replace_all(szName, charsmax(szName), "'", "\'");
3513 replace_all(szName, charsmax(szName), "^"", "\^"");
3514 // replace_all(szName, charsmax(szName), ".", "");
3515
3516 return szName;
3517}
3518
3519stock print_color(const id, const input[], any:...)
3520{
3521 new Count = 1, Players[32];
3522 static Msg[191];
3523 vformat(Msg, 190, input, 3);
3524
3525 replace_all(Msg, 190, "!g", "^4");
3526 replace_all(Msg, 190, "!y", "^1");
3527 replace_all(Msg, 190, "!t", "^3");
3528
3529 if(id) Players[0] = id; else get_players(Players, Count, "ch"); {
3530
3531 for(new i = 0; i < Count; i++) {
3532
3533 if(is_user_connected(Players[i]))
3534 {
3535 message_begin(MSG_ONE, get_user_msgid("SayText"), _, Players[i]);
3536 write_byte(Players[i]);
3537 write_string(Msg);
3538 message_end();
3539 }
3540 }
3541 }
3542 return PLUGIN_HANDLED;
3543 }
3544
3545
3546stock bool:ValidMdl(Mdl[])
3547{
3548 return (containi(Mdl, ".mdl") != -1) ? true : false;
3549}
3550
3551public UpdateStatusText(id)
3552{
3553 new szText[256], wId = get_user_weapon(id, _, _);
3554
3555 if(bUsingGuns[id][wId])
3556 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wId]][id], WeaponNames[bUsingGuns[id][wId]]);
3557 else
3558 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK");
3559
3560 set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
3561 ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
3562}
3563
3564stock get_weapon_maxclip(wpnid = 0)
3565{
3566 for(new a = 0; a < sizeof (g_weapons); a++)
3567 if(wpnid == g_weapons[a])
3568 return g_max_clip[a];
3569
3570 return false;
3571}
3572
3573stock SetFullBpAmmo(id, iWeaponID)
3574{
3575 new iFullbpammo,iAmmoId;
3576
3577 for(new i = 1; i < AmmoIds; i++)
3578 {
3579 if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
3580 {
3581 iAmmoId = i;
3582 iFullbpammo = g_iAmmoMax[i];
3583
3584 break;
3585 }
3586 }
3587
3588 if(!iAmmoId)
3589 return;
3590
3591 cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
3592
3593 message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
3594 write_byte(iAmmoId);
3595 write_byte(iFullbpammo);
3596 message_end();
3597}
3598
3599stock has_user_weapon(id, iCswId, iSlot = 0)
3600{
3601 new iWeapon;
3602
3603 if(!iSlot)
3604 {
3605 static const iWeaponsSlots[] = {
3606 -1,
3607 2, // CSW_P228
3608 -1,
3609 1, // CSW_SCOUT
3610 4, // CSW_HEGRENADE
3611 1, // CSW_XM1014
3612 5, // CSW_C4
3613 1, // CSW_MAC10
3614 1, // CSW_AUG
3615 4, // CSW_SMOKEGRENADE
3616 2, // CSW_ELITE
3617 2, // CSW_FIVESEVEN
3618 1, // CSW_UMP45
3619 1, // CSW_SG550
3620 1, // CSW_GALIL
3621 1, // CSW_FAMAS
3622 2, // CSW_USP
3623 2, // CSW_GLOCK18
3624 1, // CSW_AWP
3625 1, // CSW_MP5NAVY
3626 1, // CSW_M249
3627 1, // CSW_M3
3628 1, // CSW_M4A1
3629 1, // CSW_TMP
3630 1, // CSW_G3SG1
3631 4, // CSW_FLASHBANG
3632 2, // CSW_DEAGLE
3633 1, // CSW_SG552
3634 1, // CSW_AK47
3635 3, // CSW_KNIFE
3636 1 // CSW_P90
3637 };
3638 iSlot = iWeaponsSlots[iCswId];
3639 }
3640
3641 const XO_PLAYER = 5;
3642 const m_rgpPlayerItems_Slot0 = 367;
3643
3644 iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
3645
3646 const XO_WEAPON = 4;
3647 const m_pNext = 42;
3648 const m_iId = 43;
3649
3650 while(iWeapon > 0)
3651 {
3652 if(get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId)
3653 return iWeapon;
3654
3655 iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
3656 }
3657 return 0;
3658}
3659
3660stock SavePoints(id)
3661{
3662 if(Loged[id] && gRegistered[id] && gCanSave)
3663 {
3664 new szQuery[1024];
3665 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `patirtis` = '%d', `killers` = '%d', `kills` = '%d', `keys` = '%d', `points` = '%d' WHERE `username` = '%s';", TABLE_NAME, Patirtis[id], Killers[id], Kills[id], pKey[id], Points[id], get_user_name_ex(id));
3666
3667 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3668
3669 log_errors("[SAVE POINTS] %s", szQuery);
3670 }
3671}
3672
3673stock SaveChests(id)
3674{
3675 if(Loged[id] && gRegistered[id] && gCanSave)
3676 {
3677 new szQuery[1024], szChests[128];
3678
3679 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
3680
3681 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
3682
3683 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3684
3685 log_errors("[SAVE CHESTS] %s", szQuery);
3686 }
3687}
3688
3689stock SaveKeys(id)
3690{
3691 if(Loged[id] && gRegistered[id] && gCanSave)
3692 {
3693 new szQuery[1024];
3694 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `keys` = '%d' WHERE `username` = '%s';", TABLE_NAME, Points[id], pKey[id], get_user_name_ex(id));
3695
3696 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3697
3698 log_errors("[SAVE KEYS] %s", szQuery);
3699 }
3700}
3701
3702stock SaveRang(id)
3703{
3704 if(Loged[id] && gRegistered[id] && gCanSave)
3705 {
3706 new szQuery[1024];
3707 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `rang` = '%d' WHERE `username` = '%s';", TABLE_NAME, Rang[id], get_user_name_ex(id));
3708
3709 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3710
3711 log_errors("[SAVE RANG] %s", szQuery);
3712 }
3713}
3714
3715stock SaveRounds(id)
3716{
3717 if(Loged[id] && gRegistered[id] && gCanSave)
3718 {
3719 new szQuery[1024];
3720 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `rounds` = '%d' WHERE `username` = '%s';", TABLE_NAME, Points[id], Rounds[id], get_user_name_ex(id));
3721
3722 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3723
3724 log_errors("[SAVE ROUNDS] %s", szQuery);
3725 }
3726}
3727
3728stock SaveGunsKills(id)
3729{
3730 if(Loged[id] && gRegistered[id] && gCanSave)
3731 {
3732 new szQuery[1024], szKSkins[1024];
3733 for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
3734
3735 formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
3736
3737 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3738
3739 log_errors("[SAVE GUNS KILLS] %s", szQuery);
3740 }
3741}
3742
3743stock SaveKontraktas(id)
3744{
3745 if(Loged[id] && gRegistered[id] && gCanSave)
3746 {
3747 new szQuery[1024];
3748 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `kontraktas` = '%d' WHERE `username` = '%s';", TABLE_NAME, Kontraktas[id], get_user_name_ex(id));
3749
3750 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3751
3752 log_errors("[SAVE CONTRACTS] %s", szQuery);
3753 }
3754}
3755
3756stock SaveContract(id)
3757{
3758 if(Loged[id] && gRegistered[id] && gCanSave)
3759 {
3760 new szQuery[1024];
3761 new szContract[1024];
3762
3763 format(szContract, sizeof(szContract), "");
3764
3765 for(new i; i < MAX; i++)
3766 {
3767 format(szContract, sizeof(szContract), "%s%d ", szContract, Contract[i][id]);
3768 }
3769
3770 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `kontraktas` = '%d',`contract` = '%s' WHERE `username` = '%s';", TABLE_NAME, Kontraktas[id], szContract, get_user_name_ex(id));
3771
3772 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3773
3774 log_errors("[SAVE CONTRACT] %s", szQuery);
3775 }
3776}
3777
3778stock SaveContracts(id)
3779{
3780 if(Loged[id] && gRegistered[id] && gCanSave)
3781 {
3782 new szQuery[1024];
3783 new szContracts[1024];
3784
3785 format(szContracts, sizeof(szContracts), "");
3786
3787 for(new i; i < MAX; i++)
3788 {
3789 format(szContracts, sizeof(szContracts), "%s%d ", szContracts, Contracts[i][id]);
3790 }
3791
3792 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `kontraktas` = '%d',`contracts` = '%s' WHERE `username` = '%s';", TABLE_NAME, Kontraktas[id], szContracts, get_user_name_ex(id));
3793
3794 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3795
3796 log_errors("[SAVE CONTRACT] %s", szQuery);
3797 }
3798}
3799
3800stock SaveCovert(id)
3801{
3802 if(Loged[id] && gRegistered[id] && gCanSave)
3803 {
3804 new szQuery[1024];
3805 new szCovert[1024];
3806
3807 format(szCovert, sizeof(szCovert), "");
3808
3809 for(new i; i < MAX; i++)
3810 {
3811 format(szCovert, sizeof(szCovert), "%s%d ", szCovert, Covert[i][id]);
3812 }
3813
3814
3815 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `kontraktas` = '%d',`covert` = '%s' WHERE `username` = '%s';", TABLE_NAME, Kontraktas[id], szCovert, get_user_name_ex(id));
3816
3817 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3818
3819 log_errors("[SAVE CONTRACT] %s", szQuery);
3820 }
3821}
3822
3823stock log_errors(const szText[], any:...)
3824{
3825 static szMessage[256];
3826 vformat(szMessage, 256, szText, 2);
3827
3828 log_to_file(g_logfile, szMessage);
3829
3830 return PLUGIN_HANDLED;
3831}
3832
3833public TradeMenu(id)
3834{
3835 new offer;
3836
3837 if(1 <= TradeTarget[id] <= 32)
3838 {
3839 new target = TradeTarget[id];
3840 new p_target = TradeTarget[target];
3841
3842 if(is_user_connected(target) && p_target == id)
3843 { // Both trading
3844 showTradeMenu(id);
3845 }
3846 else if((offer = PlayerHasTradingOffer(id)) > 0)
3847 {
3848 new szText[128], menu;
3849 new name[64];
3850 get_user_name(offer, name, charsmax(name));
3851 formatex(szText, charsmax(szText), "\y[\rPublic\y] \wJūs turite prekybos pasiūlymą iš\d: \y%s", name);
3852 menu = menu_create(szText, "TradeOfferHandler");
3853
3854 menu_additem(menu, "\yPatvirtinti");
3855 menu_additem(menu, "\rAtšaukti");
3856
3857 menu_display(id, menu, 0);
3858 }
3859 else
3860 {
3861 showTradeTargets(id);
3862 }
3863 }
3864 else if((offer = PlayerHasTradingOffer(id)) > 0)
3865 {
3866 new szText[128], menu;
3867 new name[64];
3868 get_user_name(offer, name, charsmax(name));
3869 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wYou have a trading offer from\d: \y%s", name);
3870 menu = menu_create(szText, "TradeOfferHandler");
3871
3872 menu_additem(menu, "\yConfirm");
3873 menu_additem(menu, "\rCancel");
3874
3875 menu_display(id, menu, 0);
3876 }
3877 else
3878 {
3879 showTradeTargets(id);
3880 }
3881}
3882
3883public TradeOfferHandler(id, menu, item)
3884{
3885 if(item == MENU_EXIT)
3886 {
3887 menu_destroy(menu);
3888 return PLUGIN_HANDLED;
3889 }
3890
3891 new offer = PlayerHasTradingOffer(id);
3892
3893 if(!(1 <= offer <= 32) || !is_user_connected(offer))
3894 {
3895 TradeMenu(id);
3896 return PLUGIN_HANDLED;
3897 }
3898
3899 new name[64];
3900 get_user_name(id, name, charsmax(name));
3901
3902 switch(item)
3903 {
3904 case 0:
3905 {
3906 TradeTarget[id] = offer;
3907 client_print_color(offer, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1Accepted your offer", name);
3908
3909 ResetTrade(id, false);
3910 ResetTrade(offer, false);
3911
3912 TradeMenu(offer);
3913 }
3914 case 1:
3915 {
3916 TradeTarget[offer] = 0;
3917 client_print_color(offer, print_team_default, "[^4Public^1] ^3%s ^1Dismissed your offer", name);
3918 }
3919 }
3920 TradeMenu(id);
3921 return PLUGIN_HANDLED;
3922}
3923
3924stock PlayerHasTradingOffer(id)
3925{
3926 for(new i = 1; i <= 32; i++)
3927 {
3928 if(is_user_connected(i) && TradeTarget[i] == id) return i;
3929 }
3930 return -1;
3931}
3932
3933public showTradeTargets(id)
3934{
3935 new szText[512];
3936 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] - (Trade) \d\w");
3937 new menu = menu_create(szText, "TradePlayersHandler");
3938
3939 new szName[32], szUserId[32], players[32], pnum, tempid;
3940 get_players(players, pnum);
3941
3942 for(new i; i < pnum; i++)
3943 {
3944 tempid = players[i];
3945 if(tempid == id) continue;
3946 get_user_name(tempid, szName, charsmax(szName));
3947
3948 formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
3949 menu_additem(menu, szName, szUserId, 0);
3950 }
3951 menu_display(id, menu, 0);
3952}
3953
3954public TradePlayersHandler(id, menu, item)
3955{
3956 if(item == MENU_EXIT)
3957 {
3958 menu_destroy(menu);
3959 return PLUGIN_HANDLED;
3960 }
3961
3962 new szData[6], szName[64];
3963 new _access, item_callback;
3964 menu_item_getinfo(menu, item, _access, szData,charsmax(szData), szName,charsmax(szName), item_callback);
3965
3966 new userid = str_to_num(szData);
3967
3968 new player = find_player("k", userid); // flag "k" : find player from userid
3969
3970 if(player && is_user_connected(player))
3971 {
3972 if(canOffer[id])
3973 {
3974 new name[64];
3975 get_user_name(id, name, charsmax(name));
3976
3977 TradeTarget[id] = player;
3978 client_print_color(player, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1Suggest you offer!", name);
3979 TradeMenu(player);
3980 set_task(10.0, "resetOffering", id+8080);
3981 canOffer[id] = false;
3982 }
3983 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Please wait a moment to offer a new offer!");
3984 }
3985 TradeMenu(id);
3986
3987 return PLUGIN_HANDLED;
3988}
3989
3990public resetOffering(id)
3991{
3992 id -= 8080;
3993 canOffer[id] = true;
3994}
3995
3996public showTradeMenu(id)
3997{
3998 if(1 <= TradeTarget[id] <= 32)
3999 {
4000 new target = TradeTarget[id];
4001
4002 if(is_user_connected(target))
4003 {
4004 new szText[512], target_name[64];
4005 get_user_name(target, target_name, charsmax(target_name));
4006
4007 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wYou are changing with \r%s\d:\w", target_name);
4008
4009 new menu = menu_create(szText, "TradeMenuHandler");
4010
4011 if(TradeSkin[id] != -1)
4012 {
4013 new skin_id = TradeSkin[id];
4014 formatex(szText, charsmax(szText), "\wSkin: \y%s \d[\r%s\d]", WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
4015 }
4016 else
4017 {
4018 formatex(szText, charsmax(szText), "\wSkin: \dnot selected");
4019 }
4020 menu_additem(menu, szText);
4021
4022 if(TradeChest[id] != -1 && TradeChestCount[id] > 0)
4023 {
4024 new chest_id = TradeChest[id];
4025 formatex(szText, charsmax(szText), "\wChest: \y%s \d[%d]", chest_name(chest_id), TradeChestCount[id]);
4026 }
4027 else
4028 {
4029 formatex(szText, charsmax(szText), "\wChest: \dnot selected");
4030 }
4031 menu_additem(menu, szText);
4032
4033 formatex(szText, charsmax(szText), "\wKeys: \d%d", TradeKey[id]);
4034 menu_additem(menu, szText);
4035
4036 formatex(szText, charsmax(szText), "\wPoints: \d$%d", TradeMoney[id]);
4037
4038 new extraText[512];
4039 formatex(extraText, charsmax(extraText), "%s^n^n\w--- \y%s \w---^n^n", szText, target_name);
4040
4041 if(TradeSkin[target] != -1)
4042 {
4043 new skin_id = TradeSkin[target];
4044 formatex(extraText, charsmax(extraText), "%s\wSkin: \y%s \d[\r%s\d]^n", extraText, WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
4045 }
4046 else
4047 {
4048 formatex(extraText, charsmax(extraText), "%s\wSkin: \dnot selected^n", extraText);
4049 }
4050
4051 if(TradeChest[target] != -1 && TradeChestCount[id] > 0)
4052 {
4053 new chest_id = TradeChest[target];
4054 formatex(extraText, charsmax(extraText), "%s\wChest: \y%s \d[%d]^n", extraText, chest_name(chest_id), TradeChestCount[target]);
4055 }
4056 else
4057 {
4058 formatex(extraText, charsmax(extraText), "%s\wChest: \dnot selected^n", extraText);
4059 }
4060
4061 formatex(extraText, charsmax(extraText), "%s\wKeys: \d%d^n", extraText, TradeKey[target]);
4062 formatex(extraText, charsmax(extraText), "%s\wPoints: \d$%d^n^n", extraText, TradeMoney[target]);
4063 menu_additem(menu, extraText);
4064
4065 if(TradeAccept[id] == -1) formatex(szText, charsmax(szText), "\yPatvirtinti");
4066 else formatex(szText, charsmax(szText), "\yConfirm \d[Waiting for other player]");
4067 menu_additem(menu, szText);
4068
4069 formatex(szText, charsmax(szText), "\rCancel");
4070 menu_additem(menu, szText);
4071
4072 menu_display(id, menu, 0);
4073 }
4074 else
4075 {
4076 TradeMenu(id);
4077 }
4078 }
4079 else
4080 {
4081 TradeMenu(id);
4082 }
4083}
4084
4085public TradeMenuHandler(id, menu, item)
4086{
4087 if(item == MENU_EXIT)
4088 {
4089 menu_destroy(menu);
4090 return PLUGIN_HANDLED;
4091 }
4092
4093 if(TradeAccept[id] == -1)
4094 {
4095 switch(item)
4096 {
4097 case 0: { // Skin
4098 showTradeSkinsMenu(id);
4099 }
4100 case 1: { // Chest
4101 showTradeChestsMenu(id);
4102 }
4103 case 2: { // Keys
4104 inMM[id] = true;
4105 client_cmd(id, "messagemode SET_TRADE_KEYS");
4106 TradeMenu(id);
4107 }
4108 case 3: { // Money
4109 inMM[id] = true;
4110 client_cmd(id, "messagemode SET_TRADE_MONEY");
4111 TradeMenu(id);
4112 }
4113 }
4114 }
4115
4116 new target = TradeTarget[id];
4117
4118 if(item == 4)
4119 { // Accept
4120 if(TradeAccept[id] == -1) TradeAccept[id] = 1;
4121 else TradeAccept[id] = -1;
4122
4123 if(TradeAccept[id] != -1)
4124 {
4125 client_print_color(target, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Accepted the offer!");
4126
4127 if(TradeAccept[target] != -1)
4128 {
4129 MakeTrade(id, target);
4130 }
4131 TradeMenu(id);
4132 }
4133 }
4134 else if(item == 5)
4135 { // Decline
4136 client_print_color(target, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Dismissed the offer!");
4137 ResetTrade(id, true);
4138 ResetTrade(target, true);
4139 TradeMenu(id);
4140 }
4141
4142 return PLUGIN_HANDLED;
4143}
4144public showTradeSkinsMenu(id)
4145{
4146 new szText[512];
4147 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wSelect skin\d\w");
4148 new menu = menu_create(szText, "skinsTradeMenuHandler");
4149
4150 menu_additem(menu, "None", "-1");
4151
4152 new String[32], All;
4153 for(new i = 1; i < AllWeapon; i++)
4154 {
4155 if(uWeapon[i][id] <= 0)
4156 continue;
4157
4158 num_to_str(i, String, 31);
4159 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
4160 menu_additem(menu, szText, String);
4161 All++;
4162
4163 }
4164 menu_display(id, menu, 0);
4165}
4166
4167public skinsTradeMenuHandler(id, menu, item)
4168{
4169 if(item == MENU_EXIT)
4170 {
4171 menu_destroy(menu);
4172 TradeMenu(id);
4173 return PLUGIN_HANDLED;
4174 }
4175
4176 new szData[6], szName[64];
4177 new _access, item_callback;
4178 menu_item_getinfo(menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback);
4179
4180 new skin_id = str_to_num(szData);
4181
4182 if(skin_id != -1)
4183 {
4184 new name[64];
4185 get_user_name(id, name, charsmax(name));
4186
4187 TradeSkin[id] = skin_id;
4188 client_print_color(TradeTarget[id], print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1set ^4%s ^1[^4%s^1] skin!", name, WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
4189 }
4190 TradeMenu(id);
4191 TradeMenu(TradeTarget[id]);
4192
4193 return PLUGIN_HANDLED;
4194}
4195
4196public showTradeChestsMenu(id)
4197{
4198
4199 new szText[512];
4200 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wSelect chest\d\w");
4201 new menu = menu_create(szText, "chestsTradeMenuHandler");
4202
4203 menu_additem(menu, "None", "-1");
4204
4205 for(new i = 1; i <= CHEST_COUNT; i++)
4206 {
4207 if(Chest[id][i] > 0)
4208 {
4209 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
4210
4211 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", i);
4212 menu_additem(menu, szText, szButton);
4213
4214 }
4215 }
4216 menu_display(id, menu, 0);
4217}
4218
4219public chestsTradeMenuHandler(id, menu, item)
4220{
4221 if(item == MENU_EXIT)
4222 {
4223 menu_destroy(menu);
4224 TradeMenu(id);
4225 return PLUGIN_HANDLED;
4226 }
4227
4228 new szData[6], szName[64];
4229 new _access, item_callback;
4230 menu_item_getinfo( menu, item, _access, szData,charsmax(szData), szName, charsmax(szName), item_callback);
4231
4232 new chest_id = str_to_num(szData);
4233
4234 if(chest_id != -1)
4235 {
4236 new name[64];
4237 get_user_name(id, name, charsmax(name));
4238
4239 TradeChest[id] = chest_id;
4240
4241 inMM[id] = true;
4242 client_cmd(id, "messagemode SET_TRADE_CHESTS");
4243 }
4244 TradeMenu(id);
4245 return PLUGIN_HANDLED;
4246}
4247
4248public ResetTrade(id, bool:reset)
4249{
4250 if(reset)
4251
4252 TradeTarget[id] = 0;
4253 TradeAccept[id] = -1;
4254 TradeSkin[id] = -1;
4255 TradeChest[id] = -1;
4256 TradeKey[id] = 0;
4257 TradeMoney[id] = 0;
4258}
4259
4260public cmdKeys(id)
4261{
4262 if(inMM[id])
4263 {
4264 new szTemp[64];
4265
4266 read_args(szTemp, charsmax(szTemp));
4267 remove_quotes(szTemp);
4268
4269 if(IsInteger(szTemp))
4270 {
4271 new pts = str_to_num(szTemp);
4272
4273 if(TradeKey[id] != pts)
4274 {
4275 if(pts > pKey[id]) pts = pKey[id];
4276 TradeKey[id] = pts;
4277
4278 new name[64];
4279 get_user_name(id, name, charsmax(name));
4280 client_print_color(TradeTarget[id], print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1set ^4%d ^1keys!", name, pts);
4281 TradeMenu(TradeTarget[id]);
4282 }
4283 }
4284 else
4285 {
4286 client_cmd(id, "messagemode SET_TRADE_KEYS");
4287 return PLUGIN_HANDLED;
4288 }
4289 }
4290
4291 inMM[id] = false;
4292 set_task(0.5, "TradeMenu", id);
4293
4294 return PLUGIN_HANDLED;
4295}
4296
4297public cmdMoney(id)
4298{
4299 if(inMM[id])
4300 {
4301 new szTemp[64];
4302
4303 read_args(szTemp, charsmax(szTemp));
4304 remove_quotes(szTemp);
4305
4306 if(IsInteger(szTemp))
4307 {
4308 new pts = str_to_num(szTemp);
4309 if(TradeMoney[id] != pts)
4310 {
4311 if(pts > Points[id]) pts = Points[id];
4312 TradeMoney[id] = pts;
4313
4314 new name[64];
4315 get_user_name(id, name, charsmax(name));
4316 client_print_color(TradeTarget[id], print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1set ^4%d ^1points!", name, pts);
4317 TradeMenu(TradeTarget[id]);
4318 }
4319 }
4320 else
4321 {
4322 client_cmd(id, "messagemode SET_TRADE_MONEY");
4323 return PLUGIN_HANDLED;
4324 }
4325 }
4326
4327 inMM[id] = false;
4328 set_task(0.5, "TradeMenu", id);
4329
4330 return PLUGIN_HANDLED;
4331}
4332
4333public cmdChests(id)
4334{
4335 if(inMM[id])
4336 {
4337 new szTemp[64];
4338
4339 read_args(szTemp, charsmax(szTemp));
4340 remove_quotes(szTemp);
4341
4342 if(IsInteger(szTemp) && str_to_num(szTemp) > 0)
4343 {
4344 new pts = str_to_num(szTemp);
4345
4346 if(TradeChestCount[id] != pts && TradeChest[id] != -1 && (1 <= TradeChest[id] <= CHEST_COUNT) )
4347 {
4348 new cnt = Chest[id][TradeChest[id]];
4349
4350 if(pts > cnt) pts = cnt;
4351
4352 if(pts <= 0) TradeChest[id] = -1;
4353 TradeChestCount[id] = pts;
4354
4355 new name[64];
4356 get_user_name(id, name, charsmax(name));
4357 client_print_color(TradeTarget[id], print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^1set ^4%s %d ^1chests!", name, chest_name(TradeChest[id]), pts);
4358 TradeMenu(TradeTarget[id]);
4359 }
4360 }
4361 else
4362 {
4363 client_cmd(id, "messagemode SET_TRADE_CHESTS");
4364 return PLUGIN_HANDLED;
4365 }
4366 }
4367
4368 inMM[id] = false;
4369 set_task(0.5, "TradeMenu", id);
4370
4371 return PLUGIN_HANDLED;
4372}
4373
4374bool:IsInteger(buffer[])
4375{
4376 new len = strlen(buffer);
4377
4378 for(new i = 0; i < len; i++)
4379 {
4380 if(!isdigit(buffer[i]))
4381 return false;
4382 }
4383
4384 return true;
4385}
4386
4387public MakeTrade(id, target)
4388{
4389 if(!is_user_connected(id) || !is_user_connected(target)) return;
4390
4391 new bool:TradeWillHappen = true;
4392 new skin_id, target_skin_id, chest_id, target_chest_id, chest_count, target_chest_count, keys, target_keys, money, target_money;
4393
4394 if(TradeSkin[id] != -1)
4395 {
4396 if(uWeapon[TradeSkin[id]][id] <= 0)
4397 {
4398 TradeWillHappen = false;
4399 }
4400 else
4401 {
4402 skin_id = TradeSkin[id];
4403 }
4404 }
4405
4406 if(TradeSkin[target] != -1)
4407 {
4408 if(uWeapon[TradeSkin[target]][target] <= 0)
4409 {
4410 TradeWillHappen = false;
4411 }
4412 else
4413 {
4414 target_skin_id = TradeSkin[target];
4415 }
4416 }
4417
4418 if(TradeChest[id] != -1 && TradeChestCount[id] > 0)
4419 {
4420 if(Chest[id][TradeChest[id]] < TradeChestCount[id])
4421 {
4422 TradeWillHappen = false;
4423 }
4424 else
4425 {
4426 chest_id = TradeChest[id];
4427 chest_count = TradeChestCount[id];
4428 }
4429 }
4430
4431 if(TradeChest[target] != -1 && TradeChestCount[target] > 0)
4432 {
4433 if(Chest[target][TradeChest[target]] < TradeChestCount[target])
4434 {
4435 TradeWillHappen = false;
4436 }
4437 else
4438 {
4439 target_chest_id = TradeChest[target];
4440 target_chest_count = TradeChestCount[target];
4441 }
4442 }
4443
4444 if(TradeKey[id] > 0)
4445 {
4446 if(pKey[id] < TradeKey[id]) TradeWillHappen = false;
4447 else keys = TradeKey[id];
4448 }
4449
4450 if(TradeKey[target] > 0)
4451 {
4452 if(pKey[target] < TradeKey[target]) TradeWillHappen = false;
4453 else target_keys = TradeKey[target];
4454 }
4455
4456 if(TradeMoney[id] > 0)
4457 {
4458 if(Points[id] < TradeMoney[id]) TradeWillHappen = false;
4459 else money = TradeMoney[id];
4460 }
4461
4462 if(TradeMoney[target] > 0)
4463 {
4464 if(Points[target] < TradeMoney[target]) TradeWillHappen = false;
4465 else target_money = TradeMoney[target];
4466 }
4467
4468 if(TradeWillHappen)
4469 {
4470 pKey[id] -= keys; pKey[target] -= target_keys; pKey[id] += target_keys; pKey[target] += keys;
4471 Points[id] -= money; Points[target] -= target_money; Points[id] += target_money; Points[target] += money;
4472
4473 uWeapon[skin_id][id]--; uWeapon[target_skin_id][target]--; uWeapon[target_skin_id][id]++; uWeapon[skin_id][target]++;
4474 Chest[id][chest_id] -= chest_count;
4475 Chest[id][target_chest_id] += target_chest_count;
4476 Chest[target][target_chest_id] -= target_chest_count;
4477 Chest[target][chest_id] += chest_count;
4478
4479 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Trade successfully made!");
4480 SaveData(id);
4481 SaveData(target);
4482 }
4483 else
4484 {
4485 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Trade failed. Some items are missing!");
4486 client_print_color(target, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] Trade failed. Some items are missing!");
4487 }
4488
4489 ResetTrade(id, true);
4490 ResetTrade(target, true);
4491}
4492
4493public PartyMenu(id)
4494{
4495 new szText[128];
4496
4497 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "KMAIN", LANG_PLAYER, "YPOINT", Points[id]);
4498
4499 new menu = menu_create(szText, "PartyMenuHandler");
4500
4501 formatex(szText, charsmax(szText), "Buy 1 place - \r%d \wpoints \d%d/%d", SLOT_COST, PartySlots[id], MAX_PARTY_SLOTS);
4502 menu_additem(menu, szText, "0");
4503
4504 if(PartyCreated[id])
4505 {
4506 formatex(szText, charsmax(szText), "Send an invitation \y[\r%d\y]", GetInvitableMembers());
4507 menu_additem(menu, szText, "3");
4508
4509 formatex(szText, charsmax(szText), "Throw away \y[\r%d\y]", GetPartyMembers(id));
4510 menu_additem(menu, szText, "4");
4511
4512 formatex(szText, charsmax(szText), "\rDelete group");
4513 menu_additem(menu, szText, "5");
4514 }
4515 else if(InParty[id])
4516 {
4517 formatex(szText, charsmax(szText), "\rLeave the group");
4518 menu_additem(menu, szText, "6");
4519 }
4520 else
4521 {
4522 formatex(szText, charsmax(szText), "%sCreate a group", PartySlots[id] ? "\w":"\d");
4523 menu_additem(menu, szText, "1");
4524
4525 formatex(szText, charsmax(szText), "Invitations \y[\r%d\y]", GetPartyInvitations(id));
4526 menu_additem(menu, szText, "2");
4527 }
4528
4529 menu_display(id, menu, 0);
4530}
4531
4532public PartyMenuHandler(id, menu, item)
4533{
4534 if(item == MENU_EXIT)
4535 {
4536 menu_destroy(menu);
4537 return PLUGIN_CONTINUE;
4538 }
4539
4540 new data[9], name[64], Key;
4541 new access, callback;
4542 menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
4543
4544 Key = str_to_num(data);
4545
4546 switch(Key)
4547 {
4548 case 0:
4549 {
4550 if(Points[id] >= SLOT_COST)
4551 {
4552 if(PartySlots[id] < MAX_PARTY_SLOTS)
4553 {
4554 Points[id] -= SLOT_COST;
4555 PartySlots[id]++;
4556 SaveData(id);
4557 }
4558 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4You already have the maximum number of places!");
4559 }
4560 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3Not enough points!");
4561 }
4562 case 1:
4563 {
4564 if(PartySlots[id])
4565 {
4566 PartyCreated[id] = true;
4567 InParty[id] = id;
4568
4569 new name[34];
4570 get_user_name(id, name, 33);
4571 client_print_color(0, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^4Created a group!", name);
4572 }
4573 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4You do not have a group of places to create it!");
4574 }
4575 case 2:
4576 {
4577 PartyInvitations(id);
4578 return PLUGIN_HANDLED;
4579 }
4580 case 3:
4581 {
4582 PartyInvitePeople(id);
4583 return PLUGIN_HANDLED;
4584 }
4585 case 4:
4586 {
4587 PartyDeletePeople(id);
4588 return PLUGIN_HANDLED;
4589 }
4590 case 5:
4591 {
4592 PartyCreated[id] = false;
4593 InParty[id] = 0;
4594
4595 for(new i = 1; i <= 32; i++)
4596 {
4597 if(InParty[i] == id && i != id)
4598 {
4599 client_print_color(i, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4Deleted!");
4600 InParty[i] = 0;
4601 }
4602 }
4603 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4You deleted the group!");
4604 }
4605 case 6:
4606 {
4607 new name[34];
4608 get_user_name(id, name, 33);
4609
4610 for(new i = 1; i <= 32; i++)
4611 {
4612 if(InParty[i] == InParty[id] && i != id)
4613 {
4614 client_print_color(i, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^4Left the group!", name);
4615 }
4616 }
4617 InParty[id] = 0;
4618 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4Left the group!");
4619 }
4620 }
4621 PartyMenu(id);
4622 return PLUGIN_HANDLED;
4623}
4624
4625stock GetPartyMembers(id)
4626{
4627 new Num = 0;
4628
4629 for(new i = 1; i <= 32; i++)
4630 {
4631 if(InParty[i] == InParty[id] && i != id)
4632 {
4633 Num++;
4634 }
4635 }
4636 return Num;
4637}
4638
4639stock GetInvitableMembers()
4640{
4641 new Num = 0;
4642
4643 for(new i = 1; i <= 32; i++)
4644 {
4645 if(!InParty[i])
4646 {
4647 Num++;
4648 }
4649 }
4650 return Num;
4651}
4652
4653stock GetPartyInvitations(id)
4654{
4655 new Num = 0;
4656
4657 for(new i = 1; i <= 32; i++)
4658 {
4659 if(i != id && PartyCreated[i] && PartyInvites[i][id])
4660 {
4661 Num++;
4662 }
4663 }
4664 return Num;
4665}
4666
4667public PartyInvitations(id)
4668{
4669 new menu = menu_create("\y[\rFragWay.Ro CS:GO Unlimited\y] Get Invitations", "PartyInvitationsHandler");
4670
4671 new players[32], pNum, tempid;
4672
4673 new szName[32], szUserId[32];
4674 get_players(players, pNum);
4675
4676 for(new i; i < pNum; i++)
4677 {
4678 tempid = players[i];
4679
4680 if(tempid != id && PartyCreated[tempid] && PartyInvites[tempid][id] && PartySlots[tempid] > GetPartyMembers(tempid))
4681 {
4682 get_user_name(tempid, szName, charsmax(szName));
4683 formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
4684 menu_additem(menu, szName, szUserId, 0);
4685 }
4686 }
4687 if(menu_items(menu)) menu_display(id, menu, 0);
4688 else PartyMenu(id);
4689}
4690
4691public PartyInvitationsHandler(id, menu, item)
4692{
4693 if(item == MENU_EXIT)
4694 {
4695 menu_destroy(menu);
4696 PartyMenu(id);
4697 return PLUGIN_HANDLED;
4698 }
4699
4700 new szData[6], szName[64];
4701 new _access, item_callback;
4702 menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
4703
4704 new userid = str_to_num(szData);
4705
4706 new player = find_player("k", userid); // flag "k" : find player from userid
4707
4708 if(player)
4709 {
4710 if(PartySlots[player] > GetPartyMembers(player))
4711 {
4712 new szName[34];
4713 get_user_name(id, szName, charsmax(szName));
4714
4715 InParty[id] = player;
4716 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4You are successfully logged in!");
4717
4718 for(new i = 1; i <= 32; i++)
4719 {
4720 if(i != id && InParty[i] == player)
4721 {
4722 client_print_color(i, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^4Joined the group!", szName);
4723 }
4724 }
4725 }
4726 else client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4This group is full");
4727 }
4728
4729 menu_destroy(menu);
4730 PartyMenu(id);
4731 return PLUGIN_HANDLED;
4732}
4733
4734public PartyInvitePeople(id)
4735{
4736 new menu = menu_create("\y[\rFragWay.Ro CS:GO Unlimited\y] Invite to the group", "PartyInvitePeopleHandler");
4737
4738 new players[32], pNum, tempid;
4739
4740 new szName[40], szUserId[32];
4741 get_players(players, pNum);
4742
4743 for(new i; i < pNum; i++)
4744 {
4745 tempid = players[i];
4746
4747 if(!InParty[tempid])
4748 {
4749 get_user_name(tempid, szName, charsmax(szName));
4750
4751 formatex(szName, charsmax(szName), "%s%s", szName, PartyInvites[id][tempid] ? "\r*" : "");
4752 formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
4753
4754 menu_additem(menu, szName, szUserId, 0);
4755 }
4756 }
4757 if(menu_items(menu)) menu_display(id, menu, 0);
4758 else PartyMenu(id);
4759}
4760
4761public PartyInvitePeopleHandler(id, menu, item)
4762{
4763 if (item == MENU_EXIT)
4764 {
4765 menu_destroy(menu);
4766 PartyMenu(id);
4767 return PLUGIN_HANDLED;
4768 }
4769
4770 new szData[6], szName[64];
4771 new _access, item_callback;
4772 menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName,charsmax(szName), item_callback);
4773
4774 new userid = str_to_num(szData);
4775
4776 new player = find_player("k", userid); // flag "k" : find player from userid
4777
4778 if(player)
4779 {
4780 PartyInvites[id][player] = !PartyInvites[id][player];
4781
4782 if(PartyInvites[id][player])
4783 {
4784 new szName[34];
4785 get_user_name(id, szName, charsmax(szName));
4786 client_print_color(player, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3%s ^4Invited to join the group!", szName);
4787 client_print_color(id, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^4Invitation sent!");
4788 }
4789 }
4790
4791 menu_destroy(menu);
4792 PartyMenu(id);
4793 return PLUGIN_HANDLED;
4794}
4795
4796public PartyDeletePeople(id)
4797{
4798 new menu = menu_create("\y[\rFragWay.Ro CS:GO Unlimited\y] Drop from group", "PartyDeletePeopleHandler");
4799
4800 new players[32], pNum, tempid;
4801
4802 new szName[32], szUserId[32];
4803 get_players(players, pNum);
4804
4805 for(new i; i < pNum; i++)
4806 {
4807 tempid = players[i];
4808
4809 if(tempid != id && InParty[tempid] == id)
4810 {
4811 get_user_name(tempid, szName, charsmax(szName));
4812 formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
4813
4814 menu_additem(menu, szName, szUserId, 0);
4815 }
4816 }
4817
4818 if(menu_items(menu)) menu_display(id, menu, 0);
4819 else PartyMenu(id);
4820}
4821
4822public PartyDeletePeopleHandler(id, menu, item)
4823{
4824 if(item == MENU_EXIT)
4825 {
4826 menu_destroy(menu);
4827 PartyMenu(id);
4828 return PLUGIN_HANDLED;
4829 }
4830
4831 new szData[6], szName[64];
4832 new _access, item_callback;
4833 menu_item_getinfo(menu, item, _access, szData, charsmax(szData), szName, charsmax(szName), item_callback);
4834
4835 new userid = str_to_num(szData);
4836
4837 new player = find_player("k", userid); // flag "k" : find player from userid
4838
4839 if(player && InParty[player] == id)
4840 {
4841 client_print_color(player, print_team_default, "[^4FragWay.Ro CS:GO Unlimited^1] ^3Threw you away from the group!");
4842 InParty[player] = 0;
4843 }
4844
4845 menu_destroy(menu);
4846 PartyDeletePeople(id);
4847 return PLUGIN_HANDLED;
4848}
4849
4850public viewContractSkins(id)
4851{
4852 new szText[256], szId[16];
4853 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wTake off the skin");
4854 new menu = menu_create(szText, "viewContractSkinsHandler");
4855
4856 for(new i = 1; i < AllWeapon; i++)
4857 {
4858 if(Covert[i][id] > 0)
4859 {
4860 formatex(szId, charsmax(szId), "%d %d", i, TYPE_COVERT);
4861 formatex(szText, charsmax(szText), "\r[\w%s | %s\r] \r[\w%d\r] \w| \yCovert", szWeaponNames[Weapons[i]], WeaponNames[i], Covert[i][id]);
4862 menu_additem(menu, szText, szId);
4863 }
4864 if(Contracts[i][id] > 0)
4865 {
4866 formatex(szId, charsmax(szId), "%d %d", i, TYPE_CONTRACTS);
4867 formatex(szText, charsmax(szText), "\r[\w%s | %s\r] \r[\w%d\r] \w| \yClassified", szWeaponNames[Weapons[i]], WeaponNames[i], Contracts[i][id]);
4868 menu_additem(menu, szText, szId);
4869 }
4870 if(Contract[i][id] > 0)
4871 {
4872 formatex(szId, charsmax(szId), "%d %d", i, TYPE_CONTRACT);
4873 formatex(szText, charsmax(szText), "\r[\w%s | %s\r] \r[\w%d\r] \w| \yRestricted", szWeaponNames[Weapons[i]], WeaponNames[i], Contract[i][id]);
4874 menu_additem(menu, szText, szId);
4875 }
4876 }
4877 if(menu_items(menu)) menu_display(id, menu, 0);
4878 else Menu(id);
4879}
4880
4881public viewContractSkinsHandler(id, menu, item)
4882{
4883 if(item == MENU_EXIT)
4884 {
4885 Menu(id);
4886 return PLUGIN_HANDLED;
4887 }
4888
4889 new aMenu[2], Data[4][32], sKey[32], sType[32], key, type;
4890 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
4891 parse(Data[0], sKey, 31, sType, 31);
4892 key = str_to_num(sKey);
4893 type = str_to_num(sType);
4894
4895 switch(type)
4896 {
4897 case TYPE_COVERT:
4898 {
4899 if(Covert[key][id] > 0)
4900 {
4901 Covert[key][id]--;
4902 uWeapon[key][id]++;
4903
4904 SaveData(id);
4905 }
4906 }
4907 case TYPE_CONTRACT:
4908 {
4909 if(Contract[key][id] > 0)
4910 {
4911 Contract[key][id]--;
4912 uWeapon[key][id]++;
4913
4914 SaveData(id);
4915 }
4916 }
4917 case TYPE_CONTRACTS:
4918 {
4919 if(Contracts[key][id] > 0)
4920 {
4921 Contracts[key][id]--;
4922 uWeapon[key][id]++;
4923
4924 SaveData(id);
4925 }
4926 }
4927 }
4928 viewContractSkins(id);
4929 return PLUGIN_HANDLED;
4930}
4931
4932stock getContracts(id, type)
4933{
4934 new num = 0;
4935
4936 switch(type)
4937 {
4938 case TYPE_CONTRACT:
4939 {
4940 for(new i = 1; i < AllWeapon; i++)
4941 {
4942 num += Contract[i][id];
4943 }
4944 }
4945 case TYPE_CONTRACTS:
4946 {
4947 for(new i = 1; i < AllWeapon; i++)
4948 {
4949 num += Contracts[i][id];
4950 }
4951 }
4952 case TYPE_COVERT:
4953 {
4954 for(new i = 1; i < AllWeapon; i++)
4955 {
4956 num += Covert[i][id];
4957 }
4958 }
4959 }
4960 return num;
4961}
4962
4963public confirmBuySkin(id)
4964{
4965 new szText[256];
4966 new Key = gKey[id];
4967
4968 formatex(szText, charsmax(szText), "\y[\rFragWay.Ro CS:GO Unlimited\y] \wAre you sure you want to buy this ^4%s | %s?", szWeaponNames[Weapons[WeaponinMarket[Key]]], WeaponNames[WeaponinMarket[Key]]);
4969 new menu = menu_create(szText, "confirmBuySkinHandler");
4970
4971 menu_additem(menu, "Yes");
4972 menu_additem(menu, "No");
4973
4974 menu_display(id, menu, 0);
4975}
4976
4977public confirmBuySkinHandler(id, menu, item)
4978{
4979 MenuMod[id] = 3;
4980 if(item == MENU_EXIT)
4981 {
4982 Menu(id);
4983 return PLUGIN_HANDLED;
4984 }
4985
4986 if(item == 0)
4987 {
4988 new Key = gKey[id];
4989 new Name[32], mName[32];
4990 get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
4991
4992 if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
4993 {
4994 inMarket[Key] = false;
4995 MarketPoints[Key] = 0;
4996 WeaponinMarket[Key] = 0;
4997
4998 return PLUGIN_CONTINUE;
4999 }
5000
5001 print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, szWeaponNames[Weapons[WeaponinMarket[Key]]], WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
5002 uWeapon[WeaponinMarket[Key]][id]++;
5003 uWeapon[WeaponinMarket[Key]][Key]--;
5004
5005 if(!uWeapon[WeaponinMarket[Key]][Key])
5006 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
5007
5008 static szQuery[512], szUGuns[128];
5009 format(szUGuns, sizeof(szUGuns), "");
5010 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
5011 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
5012
5013 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
5014
5015 log_errors("[SKIN SHOP] %s", szQuery);
5016
5017 format(szUGuns, sizeof(szUGuns), "");
5018 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
5019 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
5020
5021 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
5022
5023 log_errors("[SKIN SHOP] %s", szQuery);
5024
5025 emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
5026 Points[Key] += MarketPoints[Key];
5027 Points[id] -= MarketPoints[Key];
5028 SaveData(Key);
5029 SaveData(id);
5030
5031 mAmount[Key] = 0;
5032 inMarket[Key] = false;
5033 MarketPoints[Key] = 0;
5034 WeaponinMarket[Key] = 0;
5035 }
5036 Menu(id);
5037 return PLUGIN_HANDLED;
5038}