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