· 7 years ago · Jan 13, 2019, 05:50 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <engine>
4#include <fakemeta>
5#include <fakemeta_util>
6#include <hamsandwich>
7#include <cstrike>
8#include <fun>
9#include <sqlx>
10#include <supplybox>
11
12new const PLUGIN[] = "Global Offensive";
13new const VERSION[] = "5.72";
14new const AUTHOR[] = "Taskom.eu";
15
16/*================================================================================
17[MySQLx Vars, other]
18=================================================================================*/
19#define DB_HOST "127.0.0.1"
20#define DB_USER "root"
21#define DB_PASS "9oPV5Q14WGNs6f3zsj"
22#define DB_DATA "csgo"
23
24#define TABLE_NAME "rcsgo_player"
25
26#define EVENT "^3[^3Taskom.eu^3]" // Prefix'as prie tekstų Event
27
28#define ACCESS_VIP ADMIN_LEVEL_H // VIP access
29#define ACCESS_ADMIN ADMIN_KICK // ADMIN access
30
31#define SOUND_SOLD "ambience/quail1.wav"
32
33new Handle:g_hTuple;
34new g_msgid_ScreenFade, g_msgid_SyncHud;
35
36#define MAX 400 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
37#define MAX_RANGS 30
38
39#define CHEST_ID 500
40#define CHEST_COUNT 5
41
42#define KEY_ID 600
43#define KEY_ID_TEXT "600"
44
45#define POINTS_KILL_MIN 5
46#define POINTS_KILL_MAX 20
47
48#define POINTS_KILL_HS 15 // Jei HS, Kiek pridÄ—s prie normaliu tasku
49
50#define POINTS_KILL_VIP_FLAG ACCESS_VIP // VIP access
51#define POINTS_KILL_MIN_VIP 5 // Pridedamas Prie POINTS_KILL_MIN
52#define POINTS_KILL_MAX_VIP 25 // Pridedamas Prie POINTS_KILL_MAX
53
54#define POINTS_KILL_ADMIN_FLAG ACCESS_ADMIN // ADMIN access
55#define POINTS_KILL_MIN_ADMIN 5 // Pridedamas Prie POINTS_KILL_MIN
56#define POINTS_KILL_MAX_ADMIN 25 // Pridedamas Prie POINTS_KILL_MAX
57
58#define DROP_RATE_KEYS 700
59#define DROP_RATE_CHEST 700
60
61#define DROP_RATE_KILL 20
62#define DROP_RATE_PLANT 20
63#define DROP_RATE_DEF 20
64#define DROP_RATE_HOSTAGE 20
65
66#define DROP_RATE_VIP_FLAG ACCESS_VIP
67#define DROP_RATE_KILL_VIP 20
68#define DROP_RATE_EXPLODE_VIP 20
69#define DROP_RATE_PLANT_VIP 20
70
71#define DROP_RATE_DEF_VIP 20
72#define DROP_RATE_HOSTAGE_VIP 20
73
74#define DROP_RATE_ADMIN_FLAG ACCESS_ADMIN
75#define DROP_RATE_KILL_ADMIN 20
76#define DROP_RATE_PLANT_ADMIN 20
77#define DROP_RATE_DEF_ADMIN 20
78#define DROP_RATE_HOSTAGE_ADMIN 20
79
80#define MIN_PASSWORD_LENGTH 4
81#define MIN_CODE_LENGTH 6
82
83#define MARKET_MIN_PRICE 1000
84#define MARKET_WAIT_ADD 3
85
86#define HOSTAGE_ESCAPE 15
87#define HOSTAGE_ESCAPE_STEAM 20
88#define HOSTAGE_ESCAPE_VIP 20
89#define HOSTAGE_ESCAPE_ADMIN 20
90#define HOSTAGE_ESCAPE_SADMIN 20
91
92#define HOSTAGE_KILL_PENALTY 500 // Reduce Points
93
94#define BOMB_PLANTED_POINTS 50
95#define BOMB_DEFUSED_POINTS 50
96
97#define BOMB_PLANTED_POINTS_VIP 20
98#define BOMB_DEFUSED_POINTS_VIP 20
99
100#define BOMB_PLANTED_POINTS_ADMIN 20
101#define BOMB_DEFUSED_POINTS_ADMIN 20
102
103#define BOMB_PLANTED_POINTS_SADMIN 20
104#define BOMB_DEFUSED_POINTS_SADMIN 20
105
106#define ROUND_WIN_POINTS 100
107
108#define RED 5
109#define BLUE 25
110#define WHITE 100
111
112#define NEED_PLAYER 20
113#define NEED_PLAYERS 10
114#define NEED_MIN_PLAYERS 2
115
116#define NEED_MIN_PLAYERS 2
117
118new g_logfile[64];
119new bool:gEnd = false;
120
121#define TASKID_REMENU 100
122
123new csgo_password_field;
124
125new colchar[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ }
126
127new cvar_refill_spawn;
128
129// Cvar pointers
130new p_allchat, p_alltalk, p_hidestat, p_teamchat;
131
132// Vars to check if message has already been duplicated
133new alv_sndr, alv_str2[26], alv_str4[101];
134new msg[513];
135new gWarnings[33] = 0;
136
137
138/*=========*/
139new bool:bTrade[33] = false;
140new bool:bTradeAccepted[33] = false;
141/*=========*/
142
143/*================================================================================
144=================================================================================*/
145
146new const g_weapons[] =
147{
148 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,
149 CSW_GLOCK18, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_DEAGLE, CSW_SG552, CSW_AK47, CSW_P90
150}
151new const g_other_weapons[] = { CSW_KNIFE, CSW_HEGRENADE, CSW_C4 }
152new 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 }
153enum _:AmmoIds { ammo_none, ammo_338magnum = 1, ammo_762nato, ammo_556natobox, ammo_556nato, ammo_buckshot, ammo_45acp, ammo_57mm, ammo_50ae, ammo_357sig, ammo_9mm }
154new g_iAmmoMax[AmmoIds] = { -1, 30, 90, 200, 90, 32, 100, 100, 35, 52, 120 }
155
156new const g_iAmmoWeaponSharedBitSum[AmmoIds] = { 0,
157 (1<<CSW_AWP), (1<<CSW_SCOUT)|(1<<CSW_G3SG1)|(1<<CSW_AK47), (1<<CSW_M249),
158 (1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M4A1)|(1<<CSW_SG552),
159 (1<<CSW_XM1014)|(1<<CSW_M3), (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_USP),
160 (1<<CSW_P90)|(1<<CSW_FIVESEVEN), (1<<CSW_DEAGLE), (1<<CSW_P228),
161 (1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_ELITE)|(1<<CSW_GLOCK18)
162}
163new g_msgid_AmmoX;
164
165#pragma semicolon 1;
166
167new WeaponNames[MAX][64], WeaponMdls[MAX][128], WeaponMdlsP[MAX][128], Weapons[MAX], WeaponDrop[MAX], AllWeapon;
168new uWeapon[MAX][33], weaponRang[MAX], uWeaponKills[MAX][33], Chest[33][CHEST_COUNT+1], pKey[33], Points[33], Rang[33], Killers[33], Patirtis[33], Kills[33], aThing[33], aTarget[33], aPoints[33], Prefix[32];
169new Folder[48], SkinFile[48], RangFile[48], DefaFile[48], MenuMod[33];
170new WeaponinMarket[33], inMarket[33], MarketPoints[33];
171new SavedPassword[33][32], bool:Loged[33], bool:gLogged[33], bool:gRegistered[33], Password[33][32];
172new DefaultSkin[33][32], DefaultSkinP[33][32], DefaultSkinW[33][32], NeedPatirtis[MAX_RANGS], Rangs[MAX_RANGS][32];
173new gCanLoad, gCanSave;
174new bUsingGuns[33][CSW_VESTHELM];
175new gLastMarketTime[33] = 0;
176new chestsList[CHEST_COUNT+1][128][512];
177new chestsChance[CHEST_COUNT+1][128];
178new bool:RewardTaken[33];
179new gPlayerTime[33];
180
181//new gKey[33];
182
183///////////////////trade
184new 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];
185new aAmount[33], mAmount[33], uniqPrice[MAX];
186//////////////////
187
188//new aAmount[33], mAmount[33], uniqPrice[MAX];
189
190new const eWeapon[][] =
191{
192"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
193"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
194"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
195"weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
196"weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
197};
198
199new const szWeaponNames[][] =
200{
201"", "P228", "", "Scout", "HE", "XM1014", "C4", "MAC10", "Aug", "SG", "Elite",
202"Five Seven", "UMP45", "SG550", "Galil", "Famas", "USP", "Glock", "AWP", "MP5 Navy", "M249",
203"M3", "M4A1", "TMP", "G3SG1", "FB", "Deagle", "SG552", "AK47", "Knife", "P90"
204};
205
206public plugin_precache()
207{
208 register_dictionary("globaloffensive.txt");
209
210 get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));
211
212 log_errors("-------------------- == --------------------");
213 new Line[512], Data[9][128], Len;
214 AllWeapon++;
215 get_configsdir(Folder, 47);
216 format(SkinFile, 47, "%s/rcsgo/skins_naujas.cfg", Folder);
217 format(RangFile, 47, "%s/rcsgo/rangs.cfg", Folder);
218 format(DefaFile, 47, "%s/rcsgo/dskins.cfg", Folder);
219
220 if(file_exists(RangFile))
221 {
222 for(new i; i < file_size(RangFile, 1); i++)
223 {
224 if(i >= MAX_RANGS) {
225 log_errors("[plugin_precache] Increase your MAX_RANGS define.");
226 break;
227 }
228
229 read_file(RangFile, i, Line, 127, Len);
230 parse(Line, Data[0], 31, Data[1], 31);
231
232 copy(Rangs[i], 31, Data[0]);
233 NeedPatirtis[i] = str_to_num(Data[1]);
234 }
235 }
236
237 if(file_exists(SkinFile))
238 {
239 for(new i; i < file_size(SkinFile, 1); i++)
240 {
241 if(AllWeapon >= MAX)
242 {
243 log_errors("[plugin_precache] Increase your MAX define.");
244 break;
245 }
246
247 read_file(SkinFile, i, Line, 512, Len);
248
249 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
250 continue;
251
252 // Ginklas, pavadinimas, v_, p_, chance - old
253 // Ginklas, pavadinimas, v_, p_, chest, chance, number
254 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);
255
256 Weapons[AllWeapon] = str_to_num(Data[0]);
257 copy(WeaponNames[AllWeapon], 63, Data[1]);
258
259 if(ValidMdl(Data[2]))
260 {
261 precache_model(Data[2]);
262 copy(WeaponMdls[AllWeapon], 128, Data[2]);
263
264 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
265 {
266 precache_model(Data[3]);
267 copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
268 }
269 }
270
271 WeaponDrop[AllWeapon] = str_to_num(Data[4]);
272
273 chestsChance[str_to_num(Data[4])][str_to_num(Data[5])] += 1;
274 chestsList[str_to_num(Data[4])][str_to_num(Data[5])][str_to_num(Data[6])] = AllWeapon;
275 log_amx("chestsList[%s][%s][%s] = %d", Data[4], Data[5], Data[6], AllWeapon);
276
277 uniqPrice[AllWeapon] = str_to_num(Data[7]);
278
279 if(Data[8][0] == 'W') weaponRang[AllWeapon] = 4;
280 else if(Data[8][0] == 'B') weaponRang[AllWeapon] = 3;
281 else if(Data[8][0] == 'R') weaponRang[AllWeapon] = 2;
282 else if(Data[8][0] == 'Y') weaponRang[AllWeapon] = 1;
283 else weaponRang[AllWeapon] = 0;
284
285 AllWeapon++;
286 }
287 }
288 if(file_exists(DefaFile))
289 {
290 for(new i; i < file_size(DefaFile, 1); i++)
291 {
292 read_file(DefaFile, i, Line, 127, Len);
293
294 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
295 continue;
296
297 parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
298
299 if(ValidMdl(Data[1]))
300 {
301 precache_model(Data[1]);
302 copy(DefaultSkin[str_to_num(Data[0])], 47, Data[1]);
303
304 if(file_exists(Data[2]) && strlen(Data[2]) > 5)
305 {
306 precache_model(Data[2]);
307 copy(DefaultSkinP[str_to_num(Data[0])], 47, Data[2]);
308 }
309
310 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
311 {
312 precache_model(Data[3]);
313 copy(DefaultSkinW[str_to_num(Data[0])], 47, Data[3]);
314 }
315 }
316 }
317 }
318
319 precache_sound(SOUND_SOLD);
320
321 g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);
322
323 new szTables[640]; format(szTables, 640, "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, `points` int(11) NOT NULL, `keys` int(11) NOT NULL, `chests` int(11) NOT NULL, `rang` int(11) NOT NULL, `skins` varchar(512) COLLATE utf8_lithuanian_ci NOT NULL, PRIMARY KEY (`username`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_lithuanian_ci", TABLE_NAME);
324 SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables);
325}
326
327public plugin_init()
328{
329 register_plugin(PLUGIN, VERSION, AUTHOR);
330 register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
331
332// register_supply_box("Experience Box");
333
334 register_clcmd("say /menu", "MenuOpen");
335 register_clcmd("say /reg", "RegMenu");
336// register_clcmd("say /trade", "TradeMenu");
337 register_clcmd("say /kills", "KillsLeft");
338 register_clcmd("say /atlygis", "DailyRewards");
339
340 register_clcmd("say menu", "MenuOpen");
341 register_clcmd("say reg", "RegMenu");
342// register_clcmd("say trade", "TradeMenu");
343 register_clcmd("say kills", "KillsLeft");
344 register_clcmd("say /atlygis", "DailyRewards");
345
346 register_clcmd("say !menu", "MenuOpen");
347 register_clcmd("say !reg", "RegMenu");
348// register_clcmd("say !trade", "TradeMenu");
349 register_clcmd("say !kills", "KillsLeft");
350 register_clcmd("say /atlygis", "DailyRewards");
351
352 register_clcmd("say .menu", "MenuOpen");
353 register_clcmd("say .reg", "RegMenu");
354// register_clcmd("say .trade", "TradeMenu");
355 register_clcmd("say .kills", "KillsLeft");
356 register_clcmd("say /atlygis", "DailyRewards");
357
358 register_clcmd("say /savepass", "SavePassword");
359
360// register_clcmd("say /skins", "cmdUniq");
361
362 register_clcmd("radio1", "MenuOpen");
363
364 //////////////////////////trade
365// register_concmd("SET_TRADE_MONEY", "cmdMoney");
366// register_concmd("SET_TRADE_KEYS", "cmdKeys");
367// register_concmd("SET_TRADE_CHESTS", "cmdChests");
368 //////////////////////////////////
369 register_concmd("Cost", "MarketCost");
370 register_concmd("Gift", "GiftPoint");
371 register_concmd("setAmount", "SetAmount");
372 register_concmd("setMarketAmount", "SetMarketAmount");
373 register_concmd("UserPassword", "PlayerPassword");
374
375// register_concmd("setTrade", "TradeMenu");
376
377 register_concmd("setSavepass", "SavePassword");
378 register_concmd("setRewards", "DailyRewards");
379
380 register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");
381 register_event("TextMsg", "TextMsg_Killed_Hostage", "b", "1=4", "2=#Killed_Hostage");
382 register_event("HLTV", "RoundStart", "a", "1=0", "2=0");
383
384 register_forward(FM_ClientUserInfoChanged, "NameChange");
385 register_forward(FM_SetModel, "SetModel");
386
387 register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
388
389 RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
390
391 for(new i; i < sizeof(eWeapon); i++)
392 {
393 if(strlen(eWeapon[i]) > 3)
394 {
395 RegisterHam(Ham_Item_Deploy, eWeapon[i], "WeaponSwitch", 1);
396 }
397 }
398 csgo_password_field = register_cvar("csgo_password_field", "_rcsgo");
399
400 g_msgid_ScreenFade = get_user_msgid("ScreenFade");
401 g_msgid_SyncHud = CreateHudSyncObj();
402 g_msgid_AmmoX = get_user_msgid("AmmoX");
403
404 cvar_refill_spawn = register_cvar("csgo_refill_onspawn", "1");
405
406 p_allchat = register_cvar("sv_allchat", "2");
407 p_hidestat = register_cvar("ac_hidestatus", "0");
408 p_teamchat = register_cvar("ac_teamchat", "0");
409 register_cvar( "csgo_nick_show", "0" );
410
411 p_alltalk = get_cvar_pointer( "sv_alltalk" );
412
413 register_message(get_user_msgid("SayText"), "col_changer");
414
415 set_task(5.0, "LoadConnected");
416 gCanLoad = 0;
417 gCanSave = 0;
418
419 new iEnt = -1;
420 while((iEnt = find_ent_by_class(iEnt, "env_sound")))
421 {
422 DispatchKeyValue(iEnt, "roomtype", "0");
423 DispatchKeyValue(iEnt, "radius", "0");
424 }
425
426 format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
427}
428
429public plugin_cfg()
430{
431 if(!g_hTuple)
432 {
433 g_hTuple = SQL_MakeStdTuple();
434 }
435 return 1;
436}
437
438public sb_pickup(id)
439{
440 new szName[32]; get_user_name(id, szName, 31);
441
442 new Random = random_num(1, 5000);
443 new rNum = random_num(50, 500);
444
445 if(Random < 5)
446 {
447 drop_keys(id, DROP_RATE_KEYS);
448 }
449 else if(Random < 25)
450 {
451 drop_item(id, DROP_RATE_CHEST);
452 }
453 else
454 {
455 Points[id] += rNum;
456 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, rNum);
457 }
458}
459public DailyRewards(id)
460{
461 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
462
463 if(get_systime() - gPlayerTime[id] >= 20 && !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 new pNum = random_num(100, 3000);
468
469 new skinsCnt, skinNum, skinId;
470
471 RewardTaken[id] = true;
472
473 if(rNumchance <= 1 && get_playersnum() >= NEED_PLAYER)
474 {
475 skinsCnt = chestsChance[random_num(1, 3)][RED];
476 skinNum = random(skinsCnt);
477 skinId = chestsList[random_num(1, 3)][RED][skinNum];
478
479 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]);
480
481 uWeapon[skinId][id]++;
482 }
483 else if(rNumchance <= 25 && get_playersnum() >= NEED_PLAYER)
484 {
485 skinsCnt = chestsChance[random_num(1, 3)][BLUE];
486 skinNum = random(skinsCnt);
487 skinId = chestsList[random_num(1, 3)][BLUE][skinNum];
488
489 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]);
490
491 uWeapon[skinId][id]++;
492 }
493 else if(rNumchance <= 25 && get_playersnum() >= NEED_PLAYERS)
494 {
495 drop_item(id, DROP_RATE_KEYS);
496 }
497 else if(rNumchance <= 50 && get_playersnum() >= NEED_PLAYERS)
498 {
499 drop_item(id, DROP_RATE_CHEST);
500 }
501 else if(rNumchance <= 100 && get_playersnum() >= NEED_MIN_PLAYERS)
502 {
503 Points[id] += pNum;
504 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "REWARDS_TAKEN_POINTS", EVENT, get_user_name_ex(id), pNum);
505 }
506 SaveData(id);
507 }
508 else if(RewardTaken[id])
509 {
510 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REWARDS_TAKEN", EVENT);
511 }
512 else if(!RewardTaken[id])
513 {
514 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REWARDS_NOT_TAKEN", EVENT);
515 }
516 return PLUGIN_HANDLED;
517}
518
519public SavePassword(id)
520{
521 if(!Loged[id])
522 {
523 if(!gRegistered[id])
524 {
525 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
526 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
527 } else {
528 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
529 }
530 return PLUGIN_HANDLED;
531 }
532
533 new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
534 set_user_info(id, passfield, SavedPassword[id]);
535 client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]);
536
537 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
538
539 return PLUGIN_HANDLED;
540}
541
542public KillsLeft(id)
543{
544 if(!Loged[id])
545 {
546 if(!gRegistered[id])
547 {
548 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
549 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
550 } else {
551 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
552 }
553 return PLUGIN_HANDLED;
554 }
555
556 if(get_user_flags(id) & ACCESS_ADMIN)
557 {
558 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_75", EVENT, 75 - (Killers[id] % 75), Killers[id] % 75);
559 }
560 else if(get_user_flags(id) & ACCESS_VIP)
561 {
562 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_100", EVENT, 100 - (Killers[id] % 100), Killers[id] % 100);
563 } else {
564 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_125", EVENT, 125 - (Killers[id] % 125), Killers[id] % 125);
565 }
566 return PLUGIN_CONTINUE;
567}
568
569public TextMsg_Killed_Hostage(id)
570{
571 Points[id] -= HOSTAGE_KILL_PENALTY;
572
573 set_hudmessage(255, 0, 0, -1.0, 0.15, 0, 6.0, 2.0);
574 show_hudmessage(id, "%L", LANG_PLAYER, "POINT_REDUCE", HOSTAGE_KILL_PENALTY);
575
576 SavePoints(id);
577}
578
579public Hostage_Rescued()
580{
581 static loguser[80], name[32], id;
582 read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
583 id = get_user_index(name);
584
585 if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
586
587 if(get_user_flags(id) & ACCESS_ADMIN)
588 {
589 Points[id] += HOSTAGE_ESCAPE_ADMIN;
590
591 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
592 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_ADMIN);
593
594 drop_item(id, DROP_RATE_HOSTAGE_ADMIN);
595
596 SavePoints(id);
597 }
598 else if(get_user_flags(id) & ACCESS_VIP)
599 {
600 Points[id] += HOSTAGE_ESCAPE_VIP;
601
602 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
603 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_VIP);
604
605 drop_item(id, DROP_RATE_HOSTAGE_VIP);
606
607 SavePoints(id);
608 }
609 else
610 {
611 Points[id] += HOSTAGE_ESCAPE;
612
613 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
614 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE);
615
616 drop_item(id, DROP_RATE_HOSTAGE);
617
618 SavePoints(id);
619 }
620}
621
622public LoadConnected()
623{
624 gCanLoad = 1;
625 gCanSave = 1;
626
627 for(new i=1; i <= get_maxplayers(); i++)
628 {
629 if(is_user_connected(i))
630 {
631 add_delay(i);
632 }
633 }
634}
635
636public plugin_end()
637{
638 SQL_FreeHandle(g_hTuple);
639}
640
641public bomb_planted(planter)
642{
643 if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)
644
645 if(get_user_flags(planter) & ACCESS_ADMIN)
646 {
647 Points[planter] += BOMB_PLANTED_POINTS_ADMIN;
648
649 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
650 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_ADMIN);
651
652 drop_item(planter, DROP_RATE_PLANT_ADMIN);
653
654 SavePoints(planter);
655 }
656 else if(get_user_flags(planter) & ACCESS_VIP)
657 {
658 Points[planter] += BOMB_PLANTED_POINTS_VIP;
659
660 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
661 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_VIP);
662
663 drop_item(planter, DROP_RATE_PLANT_VIP);
664
665 SavePoints(planter);
666 }
667 else
668 {
669 Points[planter] += BOMB_PLANTED_POINTS;
670
671 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
672 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS);
673
674 drop_item(planter, DROP_RATE_PLANT);
675
676 SavePoints(planter);
677 }
678}
679
680public bomb_defused(defuser)
681{
682 if(is_user_connected(defuser) && get_playersnum() >= NEED_MIN_PLAYERS)
683
684 if(get_user_flags(defuser) & ACCESS_ADMIN)
685 {
686 Points[defuser] += BOMB_DEFUSED_POINTS_ADMIN;
687
688 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
689 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_ADMIN);
690
691 drop_item(defuser, DROP_RATE_DEF_ADMIN);
692
693 SavePoints(defuser);
694 }
695 else if(get_user_flags(defuser) & ACCESS_VIP)
696 {
697 Points[defuser] += BOMB_DEFUSED_POINTS_VIP;
698
699 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
700 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_VIP);
701
702 drop_item(defuser, DROP_RATE_DEF_VIP);
703
704 SavePoints(defuser);
705 }
706 else
707 {
708 Points[defuser] += BOMB_DEFUSED_POINTS;
709
710 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
711 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS);
712
713 drop_item(defuser, DROP_RATE_DEF);
714
715 SavePoints(defuser);
716 }
717}
718
719public RoundStart()
720{
721 gEnd = false;
722}
723
724public Message_SendAudio(iMsgId, iMsgDest, id)
725{
726 if(!id && !gEnd && get_playersnum() >= NEED_MIN_PLAYERS)
727 {
728 new szSound[14]; get_msg_arg_string(2, szSound, charsmax(szSound));
729 new iPlayers[32], iNum, tId;
730
731 if(equal(szSound, "%!MRAD_ctwin"))
732 {
733 get_players(iPlayers, iNum, "ceh", "CT");
734
735 for(new i; i < iNum; i++)
736 {
737 tId = iPlayers[i];
738
739 if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_CT)
740 {
741 continue;
742 }
743
744 Points[tId] += ROUND_WIN_POINTS;
745
746 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
747 show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
748
749 SavePoints(tId);
750 SaveData(tId);
751 }
752 gEnd = true;
753 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CT_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
754 }
755 else if( equal(szSound, "%!MRAD_terwin") )
756 {
757 get_players(iPlayers, iNum, "ceh", "TERRORIST");
758
759 for(new i; i < iNum; i++)
760 {
761 tId = iPlayers[i];
762
763 if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_T)
764 {
765 continue;
766 }
767
768 Points[tId] += ROUND_WIN_POINTS;
769
770 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
771 show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
772
773 SavePoints(tId);
774 SaveData(tId);
775 }
776 gEnd = true;
777 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "T_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
778 }
779 }
780}
781
782public PlayerSpawn(id)
783{
784 if(is_user_alive(id))
785 {
786 if(!Loged[id] && gRegistered[id])
787 {
788 RegMenu(id);
789 set_user_maxspeed(id, 1.0);
790
791 if(!equal(Password[id], SavedPassword[id]))
792 {
793 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
794 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
795 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
796 }
797 }
798
799 if(!gRegistered[id])
800 {
801 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
802 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
803 }
804
805 if(get_pcvar_num(cvar_refill_spawn))
806 {
807 static iWeapons[32], iNum, i, iGun; iNum = 0;
808 get_user_weapons(id, iWeapons, iNum);
809
810 for( i = 0; i < iNum; i++ )
811 {
812 for (new a = 0; a < sizeof (g_other_weapons); a++)
813 if (iWeapons[i] == g_other_weapons[a])
814 continue;
815
816 for (new a = 0; a < sizeof (g_weapons); a++)
817 {
818
819 if(g_weapons[a] == iWeapons[i])
820 {
821 if (get_weapon_maxclip(iWeapons[i]))
822 {
823 iGun = has_user_weapon(id, iWeapons[i]);
824 client_cmd(id, "spk ^"items/9mmclip1.wav^"");
825 cs_set_weapon_ammo(iGun, get_weapon_maxclip(iWeapons[i]));
826 SetFullBpAmmo(id, iWeapons[i]);
827 }
828 }
829 }
830 }
831 }
832
833 if(cs_get_user_team(id) == CS_TEAM_CT)
834 {
835 cs_set_user_defuse(id, 1);
836 }
837 }
838 return PLUGIN_CONTINUE;
839}
840
841public col_changer( msg_id, msg_dest, rcvr )
842{
843 new str2[26];
844 get_msg_arg_string( 2, str2, 25 );
845 if( equal( str2, "#Cstrike_Chat", 13 ) )
846 {
847 new str3[22];
848 get_msg_arg_string( 3, str3, 21 );
849
850 if( !strlen( str3 ) )
851 {
852 new str4[101];
853 get_msg_arg_string( 4, str4, 100 );
854 new sndr = get_msg_arg_int( 1 );
855
856 new bool:is_team_msg = !bool:equal( str2, "#Cstrike_Chat_All", 17 );
857
858 new sndr_team = get_user_team( sndr );
859 new bool:is_sndr_spec = !bool:( 0 < sndr_team < 3 );
860
861 new bool:same_as_last = bool:( alv_sndr == sndr && equal( alv_str2, str2 ) && equal( alv_str4, str4) );
862
863 if( !same_as_last )
864 { // Duplicate message once
865 new allchat = clamp( get_pcvar_num( p_allchat ), 0, 2 );
866 if( allchat == 2 || ( allchat == 1 && clamp( get_pcvar_num( p_alltalk ), 0, 1 ) == 1 ) )
867 {
868 if( !( is_team_msg && ( is_sndr_spec || is_team_msg && get_pcvar_num( p_teamchat ) == 0 ) ) )
869 { // Don't duplicate if it's a spectator team message
870 new flags[5], team[10];
871 if( is_user_alive( sndr ) ) flags = "bch";
872 else flags = "ach";
873
874 if( is_team_msg )
875 {
876 add( flags[strlen( flags )], 4, "e" );
877 if( sndr_team == 1 ) team = "TERRORIST";
878 else team = "CT";
879 }
880
881 new players[32], num;
882 get_players( players, num, flags, team );
883
884 buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 ); // normal colors
885
886 for( new i=0; i < num; i++ )
887 {
888 message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, players[i] );
889 write_byte( sndr );
890 write_string( msg );
891 message_end();
892 }
893
894 }
895
896 alv_sndr = sndr;
897 alv_str2 = str2;
898 alv_str4 = str4;
899
900 if(task_exists(411))
901 remove_task(411);
902
903 set_task( 0.1, "task_clear_antiloop_vars", 411 );
904 }
905 }
906
907 if(gLogged[sndr])
908 {
909 if( !same_as_last )
910 buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 );
911
912 set_msg_arg_string( 2, msg );
913 set_msg_arg_string( 4, "" );
914 }
915 }
916 }
917 return PLUGIN_CONTINUE;
918}
919
920public buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[ ] )
921{
922 new sndr_name[33];
923 get_user_name( sndr, sndr_name, 32);
924
925 new prefix[126] = "^x04";
926 if( get_pcvar_num( p_hidestat ) == 0 )
927 {
928 if( is_sndr_spec ) prefix = "^x04*SPEC* ";
929 else if( !is_user_alive( sndr ) ) prefix = "^x04*DEAD* ";
930 }
931
932 if(is_user_connected(sndr))
933 {
934 if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_RCON)
935 {
936 new szMsg[64];
937 format(szMsg, sizeof(szMsg)-1, "^3[^3Savininkas^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
938 add(prefix[strlen(prefix)-1], 64, szMsg);
939 }
940 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_G)
941 {
942 new szMsg[64];
943 format(szMsg, sizeof(szMsg)-1, "^3[^3Pagr. Administratorius^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
944 add(prefix[strlen(prefix)-1], 64, szMsg);
945 }
946
947 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_IMMUNITY)
948 {
949 new szMsg[64];
950 format(szMsg, sizeof(szMsg)-1, "^3[^3Prižiūrėtojas(-a)^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
951 add(prefix[strlen(prefix)-1], 64, szMsg);
952 }
953
954 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_BAN)
955 {
956 new szMsg[64];
957 format(szMsg, sizeof(szMsg)-1, "^3[^3S.ADMIN^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
958 add(prefix[strlen(prefix)-1], 64, szMsg);
959 }
960
961 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_KICK)
962 {
963 new szMsg[64];
964 format(szMsg, sizeof(szMsg)-1, "^3[^3ADMIN^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
965 add(prefix[strlen(prefix)-1], 64, szMsg);
966 }
967
968 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_H)
969 {
970 new szMsg[64];
971 format(szMsg, sizeof(szMsg)-1, "^3[^3VIP^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
972 add(prefix[strlen(prefix)-1], 64, szMsg);
973 }
974
975 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_RESERVATION)
976 {
977 new szMsg[64];
978 format(szMsg, sizeof(szMsg)-1, "^3[^3Nemokamas Vipas^3] ^4| ^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
979 add(prefix[strlen(prefix)-1], 64, szMsg);
980 }
981
982 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_USER)
983 {
984 new szMsg[64];
985 format(szMsg, sizeof(szMsg)-1, "^4[^4%s^4]^4 ", Rangs[Rang[sndr]]);
986 add(prefix[strlen(prefix)-1], 64, szMsg);
987 }
988
989 else if(!gLogged[sndr])
990 {
991 new szMsg[64];
992 format(szMsg, sizeof(szMsg)-1, "^4[^4Neprisijunges^1]^4 ");
993 add(prefix[strlen(prefix)-1], 29, szMsg);
994 }
995 }
996
997 if( is_team_msg )
998 {
999 if( is_sndr_spec ) prefix = "^x04(Spectator) ";
1000 else if( sndr_team == 1 ) add( prefix[strlen(prefix)-1], 29, "^x04(Terrorist) " );
1001 else if( sndr_team == 2 ) add( prefix[strlen(prefix)-1], 29, "^x04(Counter-Terrorist) " );
1002 }
1003
1004 if (get_user_flags(sndr) & ADMIN_RESERVATION)
1005 {
1006 format( msg, 512, "%s%s%s : ^4%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, str4 );
1007 }
1008 else
1009 {
1010 format( msg, 512, "%s%s%s : ^1%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, str4 );
1011 }
1012 return PLUGIN_HANDLED;
1013}
1014
1015public task_clear_antiloop_vars( )
1016{
1017 alv_sndr = 0;
1018 alv_str2 = "";
1019 alv_str4 = "";
1020
1021 return PLUGIN_HANDLED;
1022}
1023
1024public MenuOpen(id)
1025{
1026 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
1027
1028 aAmount[id] = 1;
1029 MenuMod[id] = 0;
1030 Menu(id);
1031 return PLUGIN_HANDLED;
1032}
1033
1034public client_death(Killer, Victim, wpnindex, hitplace, TK)
1035{
1036 if(Killer == Victim) { return PLUGIN_HANDLED; }
1037
1038 if(!gRegistered[Victim])
1039 {
1040 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1041 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1042 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1043 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1044 }
1045
1046 if(!gRegistered[Killer])
1047 {
1048 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1049 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1050 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1051 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1052 }
1053
1054 Patirtis[Killer] += 3;
1055 Kills[Killer]++;
1056
1057 Killers[Killer]++;
1058
1059 static kGun; kGun = get_user_weapon(Killer, _, _);
1060 new szName[32]; get_user_name(Killer, szName, 31);
1061
1062 new rNum; rNum = random(CHEST_COUNT)+1;
1063
1064 new Point = random_num(50, 1000);
1065
1066 if(bUsingGuns[Killer][kGun])
1067 {
1068 uWeaponKills[bUsingGuns[Killer][kGun]][Killer]++;
1069 SaveGunsKills(Killer);
1070 set_task(0.1, "UpdateStatusText", Killer);
1071 }
1072
1073 if(Rang[Killer] < sizeof(Rangs) && Rang[Killer] < file_size(RangFile, 1))
1074 {
1075 if(Patirtis[Killer] >= NeedPatirtis[Rang[Killer]])
1076 {
1077 Rang[Killer]++;
1078
1079 pKey[Killer] += Rang[Killer];
1080 Chest[Killer][rNum] += Rang[Killer];
1081 Points[Killer] += Point;
1082
1083 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_PASIEKE", Prefix, szName, Rangs[Rang[Killer]]);
1084 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_BONUS", Prefix, szName, Rang[Killer], Rang[Killer], Point);
1085
1086 SaveRang(Killer);
1087 SaveKeys(Killer);
1088 SaveChests(Killer);
1089 }
1090
1091 }
1092
1093 if(Killers[Killer] % 75 == 0 && get_user_flags(Killer) & ACCESS_ADMIN)
1094 {
1095 drop_keys(Killer , DROP_RATE_KEYS);
1096 Killers[Killer] = 0;
1097 }
1098 else if(Killers[Killer] % 100 == 0 && get_user_flags(Killer) & ACCESS_VIP)
1099 {
1100 drop_keys(Killer , DROP_RATE_KEYS);
1101 Killers[Killer] = 0;
1102 }
1103 else if(Killers[Killer] % 125 == 0)
1104 {
1105 drop_keys(Killer , DROP_RATE_KEYS);
1106 Killers[Killer] = 0;
1107 }
1108
1109 new pPont, vPont, hsPont;
1110 pPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);
1111
1112 if(hitplace == HIT_HEAD) { pPont += hsPont = POINTS_KILL_HS; }
1113
1114 Points[Killer] += pPont;
1115
1116 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1117 {
1118 vPont += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
1119 Points[Killer] += vPont;
1120 }
1121 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1122 {
1123 vPont += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
1124 Points[Killer] += vPont;
1125 }
1126
1127 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1128
1129 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1130 {
1131 if(hitplace == HIT_HEAD)
1132 {
1133 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1134
1135 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1136 }
1137 else
1138 {
1139 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1140
1141 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1142 }
1143 }
1144 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1145 {
1146 if(hitplace == HIT_HEAD)
1147 {
1148 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1149
1150 drop_item(Killer, DROP_RATE_KILL_VIP);
1151 }
1152 else
1153 {
1154 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1155
1156 drop_item(Killer, DROP_RATE_KILL_VIP);
1157 }
1158 }
1159 else
1160 {
1161 if(hitplace == HIT_HEAD)
1162 {
1163 show_hudmessage(Killer, "^n%L +%d HS", LANG_PLAYER, "POINT", pPont, hsPont);
1164 }
1165 else
1166 {
1167 show_hudmessage(Killer, "^n%L", LANG_PLAYER, "POINT", pPont);
1168 }
1169 }
1170
1171 drop_item(Killer, DROP_RATE_KILL);
1172
1173 SavePoints(Killer);
1174 SaveKillers(Killer);
1175
1176 return PLUGIN_CONTINUE;
1177}
1178
1179public SetModel(entity, model[])
1180{
1181 if(!pev_valid(entity))
1182 return FMRES_IGNORED;
1183
1184 static Classname[32]; pev(entity, pev_classname, Classname, sizeof(Classname));
1185
1186 if(!equal(Classname, "weaponbox"))
1187 return FMRES_IGNORED;
1188
1189 static iOwner; iOwner = pev(entity, pev_owner);
1190 static iWeapon; iWeapon = get_user_weapon(iOwner, _, _);
1191 static weapon; weapon = find_ent_by_owner(-1, eWeapon[iWeapon], entity);
1192
1193 if(bUsingGuns[iOwner][iWeapon] && !pev(weapon, pev_impulse))
1194 {
1195 if(!pev_valid(weapon))
1196 return FMRES_IGNORED;
1197
1198 set_pev(weapon, pev_impulse, bUsingGuns[iOwner][iWeapon]);
1199
1200 if(strlen(DefaultSkinW[iWeapon]) > 5)
1201 {
1202 entity_set_model(entity, DefaultSkinW[iWeapon]);
1203
1204 return FMRES_SUPERCEDE;
1205 }
1206 return FMRES_IGNORED;
1207 }
1208
1209 return FMRES_IGNORED;
1210}
1211
1212public MarketCost(id)
1213{
1214 if(inMarket[id] || !Loged[id])
1215 return PLUGIN_HANDLED;
1216
1217 new Data[32], Cost;
1218 read_args(Data, 31);
1219 remove_quotes(Data);
1220
1221 Cost = str_to_num(Data);
1222
1223 if(Cost < 0)
1224 {
1225 client_cmd(id, "messagemode Cost");
1226 return PLUGIN_HANDLED;
1227 }
1228 else if(MARKET_MIN_PRICE > Cost)
1229 {
1230 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
1231 client_cmd(id, "messagemode Cost");
1232 MarketPoints[id] = MARKET_MIN_PRICE;
1233 Menu(id);
1234 MenuMod[id] = 3;
1235 return PLUGIN_HANDLED;
1236 }
1237 else
1238 {
1239 MarketPoints[id] = Cost;
1240 Menu(id);
1241 MenuMod[id] = 3;
1242 return PLUGIN_CONTINUE;
1243 }
1244}
1245public SetMarketAmount(id)
1246{
1247 if(!Loged[id])
1248 return PLUGIN_HANDLED;
1249
1250 new Data[32], Cost;
1251 read_args(Data, 31);
1252 remove_quotes(Data);
1253
1254 Cost = str_to_num(Data);
1255
1256 if(Cost < 1)
1257 {
1258 client_cmd(id, "messagemode setMarketAmount");
1259 return PLUGIN_HANDLED;
1260 }
1261 else
1262 {
1263 mAmount[id] = Cost;
1264 Menu(id);
1265 MenuMod[id] = 3;
1266 }
1267 return PLUGIN_HANDLED;
1268}
1269public SetAmount(id)
1270{
1271 if(!Loged[id])
1272 return PLUGIN_HANDLED;
1273
1274 new Data[32], Cost;
1275 read_args(Data, 31);
1276 remove_quotes(Data);
1277
1278 Cost = str_to_num(Data);
1279
1280 if(Cost < 0)
1281 {
1282 client_cmd(id, "messagemode setAmount");
1283 return PLUGIN_HANDLED;
1284 }
1285 else
1286 {
1287 aAmount[id] = Cost;
1288 Menu(id);
1289 MenuMod[id] = 5;
1290 }
1291 return PLUGIN_HANDLED;
1292}
1293public GiftPoint(id)
1294{
1295 if(inMarket[id] || !Loged[id])
1296 return PLUGIN_HANDLED;
1297
1298 new Data[32], Cost;
1299 read_args(Data, 31);
1300 remove_quotes(Data);
1301
1302 Cost = str_to_num(Data);
1303
1304 if(Cost < 0 || Points[id] < Cost)
1305 {
1306 client_cmd(id, "messagemode Gift");
1307 return PLUGIN_HANDLED;
1308 }
1309 else
1310 {
1311 aPoints[id] = Cost;
1312 Menu(id);
1313 MenuMod[id] = 5;
1314 return PLUGIN_CONTINUE;
1315 }
1316}
1317
1318public WeaponSwitch(Weapon)
1319{
1320 new id = get_pdata_cbase(Weapon, 41, 4);
1321 new wid = cs_get_weapon_id(Weapon);
1322
1323 if(id > 32 || id < 1)
1324 {
1325 return HAM_SUPERCEDE;
1326 }
1327
1328 if(!is_user_connected(id))
1329 {
1330 return HAM_SUPERCEDE;
1331 }
1332
1333 if(pev(Weapon, pev_impulse))
1334 {
1335 set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
1336
1337 if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5)
1338 {
1339 set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
1340 }
1341 }
1342 else if(bUsingGuns[id][wid])
1343 {
1344 set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
1345
1346 if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5)
1347 {
1348 set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
1349 }
1350 set_task(0.1, "UpdateStatusText", id);
1351 }
1352 else if(strlen(DefaultSkin[wid]) > 5)
1353 {
1354 if(cs_get_user_team(id) == CS_TEAM_CT && wid == 29) { wid = 31; }
1355
1356 set_pev(id, pev_viewmodel2, DefaultSkin[wid]);
1357
1358 if(strlen(DefaultSkinP[wid]) > 5)
1359 {
1360 set_pev(id, pev_weaponmodel2, DefaultSkinP[wid]);
1361 }
1362 set_task(0.1, "UpdateStatusText", id);
1363 }
1364 else
1365 {
1366 set_task(0.1, "UpdateStatusText", id);
1367 }
1368
1369 return HAM_IGNORED;
1370}
1371
1372public Menu(id)
1373{
1374 if(!Loged[id]) { RegMenu(id); return; }
1375
1376 new sMenu, szText[256];
1377
1378 switch(MenuMod[id])
1379 {
1380 case -2: // Kazkas su dovanom
1381 {
1382 formatex(szText, sizeof(szText), "\r[Taskom.eu] -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1383 sMenu = menu_create(szText, "MenuHandler");
1384
1385 new String[32], All;
1386 for(new i = 1; i < AllWeapon; i++)
1387 {
1388 if(uWeapon[i][id] <= 0)
1389 continue;
1390
1391 num_to_str(i, String, 31);
1392 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\r", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1393 menu_additem(sMenu, szText, String);
1394 All++;
1395 }
1396
1397 for(new i=1; i <=CHEST_COUNT; i++)
1398 {
1399 if(Chest[id][i] > 0)
1400 {
1401 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1402
1403 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
1404 menu_additem(sMenu, szText, szButton);
1405
1406 All++;
1407 }
1408 }
1409
1410 if(pKey[id] > 0)
1411 {
1412 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1413 menu_additem(sMenu, szText, KEY_ID_TEXT);
1414 All++;
1415 }
1416
1417 if(All == 0)
1418 {
1419 MenuMod[id] = 0;
1420 Menu(id);
1421 }
1422 }
1423 case -1: // Deti i turgu
1424 {
1425 formatex(szText, sizeof(szText), "\r[Taskom.eu] -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1426 sMenu = menu_create(szText, "MenuHandler");
1427
1428 new String[32], All;
1429 for(new i = 1; i < AllWeapon; i++)
1430 {
1431 if(uWeapon[i][id] <= 0)
1432 continue;
1433
1434 num_to_str(i, String, 31);
1435 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\r", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1436 menu_additem(sMenu, szText, String);
1437 All++;
1438 }
1439
1440 for(new i=1; i <=CHEST_COUNT; i++)
1441 {
1442 if(Chest[id][i] > 0)
1443 {
1444 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1445
1446 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
1447 menu_additem(sMenu, szText, szButton);
1448
1449 All++;
1450 }
1451 }
1452
1453 if(pKey[id] > 0)
1454 {
1455 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1456 menu_additem(sMenu, szText, KEY_ID_TEXT);
1457 All++;
1458 }
1459
1460 if(All == 0)
1461 {
1462 MenuMod[id] = 0;
1463 Menu(id);
1464 }
1465 }
1466 case 0:
1467 {
1468 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
1469 sMenu = menu_create(szText, "MenuHandler");
1470
1471 formatex(szText, sizeof(szText), "%L ^n\w------------------", LANG_PLAYER, "MENUTOSKINZ");
1472 menu_additem(sMenu, szText, "1");
1473
1474 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTOCHESTOPENN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1475 menu_additem(sMenu, szText, (!inMarket[id]) ? "2" : "0");
1476
1477 formatex(szText, sizeof(szText), "%L ^n\w------------------", LANG_PLAYER, "ATLYGIS");
1478 menu_additem(sMenu, szText, "8");
1479
1480 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOMARKETT");
1481 menu_additem(sMenu, szText, "3");
1482
1483 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOSHOPP");
1484 menu_additem(sMenu, szText, "6");
1485
1486 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTODUSTBIP", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1487 menu_additem(sMenu, szText, (!inMarket[id]) ? "4" : "0");
1488
1489 formatex(szText, sizeof(szText), "%L %L%L", LANG_PLAYER, "MENUTOGIFTT", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET", LANG_PLAYER, "MRANG", Rangs[Rang[id]+1], Patirtis[id], NeedPatirtis[Rang[id]]);
1490 menu_additem(sMenu, szText, (!inMarket[id]) ? "5" : "0");
1491
1492 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SAVEPASS");
1493 menu_additem(sMenu, szText, "9");
1494
1495// formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "TRADES");
1496// menu_additem(sMenu, szText, "9");
1497
1498// formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "ATLYGIS");
1499// menu_additem(sMenu, szText, "7");
1500 }
1501 case 1: // Skinai
1502 {
1503 formatex(szText, sizeof(szText), "\w[\wTaskom.eu\w]\w -\r %L %L", LANG_PLAYER, "MENUTOSKINZ", LANG_PLAYER, "YPOINT", Points[id]);
1504 sMenu = menu_create(szText, "MenuHandler");
1505
1506 new String[32], All;
1507 for(new i = 1; i < AllWeapon; i++)
1508 {
1509 if(uWeapon[i][id] <= 0)
1510 continue;
1511
1512 formatex(String, 31, "%d %d", i, Weapons[i]);
1513 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\r", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1514 menu_additem(sMenu, szText, String);
1515
1516 All++;
1517 }
1518
1519 if(All == 0)
1520 {
1521 MenuMod[id] = 0;
1522 Menu(id);
1523 }
1524 }
1525 case 2: // Skrynios
1526 {
1527 formatex(szText, sizeof(szText), "\w[\wTaskom.eu\w]\w - \r%L %L^n^n%L", LANG_PLAYER, "MENUTOCHESTOPENN", LANG_PLAYER, "YPOINT", Points[id], LANG_PLAYER, "KEYPIECE", pKey[id]);
1528 sMenu = menu_create(szText, "MenuHandler");
1529
1530 new call = menu_makecallback("Call_Back");
1531
1532 for(new i=1; i <=CHEST_COUNT; i++)
1533 {
1534 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1535 menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && pKey[id] > 0) ? -1 : call);
1536 }
1537 }
1538 case 3: // Turgus
1539 {
1540 aThing[id] = 0;
1541
1542 formatex(szText, sizeof(szText), "\r[Taskom.eu]-\r %L %L", LANG_PLAYER, "MENUTOMARKETT", LANG_PLAYER, "YPOINT", Points[id]);
1543 sMenu = menu_create(szText, "MenuHandler");
1544 new call = menu_makecallback("Call_Back");
1545
1546 aThing[32] = 0;
1547
1548 new String[32], All;
1549 new Name[32]; get_user_name(id, Name, 31);
1550
1551 if(!inMarket[id])
1552 {
1553 for(new i = 1; i < AllWeapon; i++)
1554 {
1555 if(i == WeaponinMarket[id] && uWeapon[i][id] > 0)
1556 {
1557 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACES", WeaponNames[i], szWeaponNames[Weapons[i]], MarketPoints[id]);
1558 All = 50;
1559 }
1560 }
1561
1562 // log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
1563 if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1564 {
1565 for(new i=1; i <=CHEST_COUNT; i++)
1566 {
1567 // log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
1568 if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
1569 {
1570 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
1571
1572 All++;
1573 break;
1574 }
1575 }
1576 }
1577
1578 if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
1579 {
1580 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEK", MarketPoints[id], mAmount[id]);
1581 All++;
1582 }
1583
1584 if(All == 0)
1585 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
1586
1587 menu_additem(sMenu, szText, "-1");
1588
1589 if(All != 50)
1590 {
1591 formatex(szText, sizeof(szText), "Kiekis: \r%d", mAmount[id]);
1592 menu_additem(sMenu, szText, "-99");
1593 }
1594 }
1595
1596
1597 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, (!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
1598 menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
1599
1600 for(new x = 1; x <= get_maxplayers(); x++)
1601 {
1602 if(!is_user_connected(x) || is_user_bot(x))
1603 continue;
1604
1605 if(inMarket[x] && MarketPoints[x] > 0)
1606 {
1607 num_to_str(x, String, 31);
1608
1609 if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
1610 {
1611 // log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
1612
1613 new chId = (WeaponinMarket[x]-CHEST_ID)+1;
1614
1615 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERC", chest_name((WeaponinMarket[x]-CHEST_ID)+1), MarketPoints[x], mAmount[x] > Chest[x][chId] ? Chest[x][chId] : mAmount[x], Name);
1616 menu_additem(sMenu, szText, String);
1617 }
1618 else if(KEY_ID == WeaponinMarket[x])
1619 {
1620 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK", MarketPoints[x], mAmount[x] > pKey[x] ? pKey[x] : mAmount[x], Name);
1621 menu_additem(sMenu, szText, String);
1622 }
1623 else
1624 {
1625 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS", WeaponNames[WeaponinMarket[x]], szWeaponNames[Weapons[WeaponinMarket[x]]], MarketPoints[x], Name);
1626 menu_additem(sMenu, szText, String);
1627 }
1628 }
1629 }
1630 }
1631 case 4: // Keitykla
1632 {
1633 formatex(szText, sizeof(szText), "\r[Taskom.eu]-\r %L %L", LANG_PLAYER, "MENUTODUSTBIP", LANG_PLAYER, "YPOINT", Points[id]);
1634 sMenu = menu_create(szText, "MenuHandler");
1635
1636 new String[32], All;
1637
1638 for(new i = 1; i < AllWeapon; i++)
1639 {
1640 if(uWeapon[i][id] == 0 || weaponRang[i] == 0)
1641 continue;
1642
1643 num_to_str(i, String, 31);
1644 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\r", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1645 menu_additem(sMenu, szText, String);
1646 All++;
1647 }
1648
1649 if(All == 0)
1650 {
1651 MenuMod[id] = 0;
1652 Menu(id);
1653 }
1654 }
1655 case 5: // Dovanos
1656 {
1657 formatex(szText, sizeof(szText), "\r[Taskom.eu] -\r %L %L", LANG_PLAYER, "MENUTOGIFTT", LANG_PLAYER, "YPOINT", Points[id]);
1658 sMenu = menu_create(szText, "MenuHandler");
1659 new call = menu_makecallback("Call_Back");
1660
1661 new All, Name[126], String[32];
1662 get_user_name(aTarget[id], Name, 31);
1663
1664 if(aTarget[id] > 0)
1665 {
1666 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
1667 menu_additem(sMenu, szText, "-1");
1668
1669 for(new i = 1; i < AllWeapon; i++)
1670 {
1671 if(i == aThing[id] && uWeapon[i][id] > 0)
1672 {
1673 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", WeaponNames[i]);
1674 menu_additem(sMenu, szText, "-2");
1675 All++;
1676 }
1677 }
1678
1679 if(aThing[id] <= MAX && All == 0)
1680 {
1681 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
1682 menu_additem(sMenu, szText, "-2");
1683 }
1684 else if(aThing[id] > MAX)
1685 {
1686 if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
1687 if(KEY_ID == aThing[id]) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK"); }
1688
1689 menu_additem(sMenu, szText, "-2");
1690 }
1691 if(aThing[id] > MAX)
1692 {
1693 formatex(szText, sizeof(szText), "Kiekis: \r%d", aAmount[id]);
1694 menu_additem(sMenu, szText, "-75");
1695 }
1696
1697 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
1698 menu_additem(sMenu, szText, "-4");
1699
1700 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
1701 menu_additem(sMenu, szText, "-3");
1702 }
1703 else
1704 {
1705 for(new i = 1; i <= get_maxplayers(); i++)
1706 {
1707 if(is_user_connected(i) && !is_user_bot(i))
1708 {
1709 get_user_name(i, Name, 31);
1710
1711 if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
1712
1713 num_to_str(i, String, 31);
1714 menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
1715 }
1716 }
1717 }
1718 }
1719 case 6: // ParduotuvÄ—
1720 {
1721 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "PMAIN", LANG_PLAYER, "YPOINT", Points[id]);
1722 sMenu = menu_create(szText, "MenuHandler");
1723
1724 new call = menu_makecallback("Call_Back");
1725
1726 new accesNum = get_access(id);
1727 new Float:gPercent = ((accesNum == 4) ? 0.9 : ((accesNum == 3) ? 0.94 : (accesNum == 2) ? 0.97 : 1.0));
1728
1729 new gPrice = floatround(3500*gPercent, floatround_floor);
1730 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", gPrice);
1731 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1732
1733 gPrice = floatround(17500*gPercent, floatround_floor);
1734 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_5", gPrice);
1735 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1736
1737 gPrice = floatround(35000*gPercent, floatround_floor);
1738 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_10", gPrice);
1739 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1740
1741 gPrice = floatround(70000*gPercent, floatround_floor);
1742 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_20", gPrice);
1743 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1744
1745 gPrice = floatround(105000*gPercent, floatround_floor);
1746 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_30", gPrice);
1747 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1748
1749 gPrice = floatround(175000*gPercent, floatround_floor);
1750 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_50", gPrice);
1751 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1752
1753 for(new i=1; i <=CHEST_COUNT; i++)
1754 {
1755 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), 3500);
1756 menu_additem(sMenu, szText, _, _, (Points[id] < 3500) ? call : -1);
1757
1758 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_5", chest_name(i), 17500);
1759 menu_additem(sMenu, szText, _, _, (Points[id] < 17500) ? call : -1);
1760 }
1761 }
1762 case 7: // Skrynių info
1763 {
1764// formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTINFOPIECE", chest_name(i));
1765// menu_additem(sMenu, szText);
1766 }
1767 case 8: // Keitimas Trade
1768 {
1769 client_cmd(id, "setRewards");
1770 }
1771 case 9: // Slaptazodzio issaugojimas
1772 {
1773 client_cmd(id, "setSavepass");
1774 }
1775
1776 }
1777 menu_display(id, sMenu);
1778}
1779/////////////////////////////////////////////////trade
1780
1781//public plugin_natives()
1782//{
1783// register_native("get_user_points", "native_get_user_points", 1);
1784// register_native("set_user_points", "native_set_user_points", 1);
1785//}
1786
1787//public native_get_user_points(id)
1788//{
1789// return Points[id];
1790//}
1791
1792//public native_set_user_points(id, amount)
1793//{
1794// Points[id] = amount;
1795// SavePoints(id);
1796//}
1797
1798
1799/////////////////////////////////////////////////////trade
1800public Call_Back(id, menu, item)
1801 return ITEM_DISABLED;
1802
1803public MenuHandler(id, gMenu, item)
1804{
1805 if(item == MENU_EXIT)
1806 {
1807 MenuMod[id] = 0;
1808 menu_destroy(gMenu);
1809 return PLUGIN_HANDLED;
1810 }
1811
1812 new aMenu[2], Data[4][32], sKey[32], Name[32], mName[32], Key;
1813 menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
1814
1815 parse(Data[0], sKey, 31);
1816 Key = str_to_num(sKey);
1817
1818 switch(MenuMod[id])
1819 {
1820 case -2:
1821 {
1822 MenuMod[id] = 5;
1823 aThing[id] = Key;
1824
1825 Menu(id);
1826 }
1827 case -1:
1828 {
1829 MenuMod[id] = 3;
1830 WeaponinMarket[id] = Key;
1831
1832 client_cmd(id, "messagemode Cost");
1833
1834 Menu(id);
1835 }
1836 case 0:
1837 {
1838 MenuMod[id] = Key;
1839 Menu(id);
1840
1841 }
1842 case 1:
1843 {
1844 parse(Data[0], Data[2], 31, Data[3], 31);
1845
1846 if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2])) {
1847 bUsingGuns[id][str_to_num(Data[3])] = 0;
1848 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SKIN_REMOVED", Prefix, WeaponNames[str_to_num(Data[2])], szWeaponNames[str_to_num(Data[3])]);
1849 } else {
1850 bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
1851 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SKIN_CHANGED", Prefix, WeaponNames[str_to_num(Data[2])], szWeaponNames[str_to_num(Data[3])]);
1852 set_task(0.1, "UpdateStatusText", id);
1853 }
1854
1855 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
1856 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
1857 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
1858
1859 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1860
1861 log_errors("[SKIN CHANGE] %s", szQuery);
1862
1863 MenuMod[id] = 1;
1864 Menu(id);
1865 }
1866 case 2:
1867 {
1868 if(Chest[id][(item+1)] <= 0)
1869 {
1870 Chest[id][(item+1)] = 0;
1871
1872 if(pKey[id] < 0)
1873 pKey[id] = 0;
1874
1875 return PLUGIN_CONTINUE;
1876 }
1877
1878 Chest[id][(item+1)]--;
1879 pKey[id]--;
1880
1881 new chest = item+1;
1882
1883 new Float:rNum = random_float((random(5)*1.0), 175.0);
1884 new chance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : 100 ));
1885 ///////////////////////////////////////////
1886 new skinsCnt = chestsChance[chest][chance];
1887 new skinNum = random(skinsCnt);
1888 new skinId = chestsList[chest][chance][skinNum];
1889
1890 new szName[32]; get_user_name(id, szName, 31);
1891
1892
1893 if(1 <= chance <= 25) { print_color(0, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
1894 else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_SELF", Prefix, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
1895
1896 uWeapon[skinId][id]++;
1897 SaveData(id);
1898
1899 Menu(id);
1900 }
1901 case 3:
1902 {
1903 if(Key == -1) { MenuMod[id] = -1; Menu(id); }
1904 else if(Key == 0)
1905 {
1906 if(inMarket[id]) { inMarket[id] = false; }
1907 else if(MarketPoints[id] > 0)
1908 {
1909 if(mAmount[id] < 1) mAmount[id] = 1;
1910 get_user_name(id, Name, 31);
1911
1912 switch(WeaponinMarket[id])
1913 {
1914 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]); }
1915 case KEY_ID: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, mAmount[id], MarketPoints[id]); }
1916 default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, WeaponNames[WeaponinMarket[id]], szWeaponNames[Weapons[WeaponinMarket[id]]], MarketPoints[id]); }
1917 }
1918
1919 inMarket[id] = true;
1920 }
1921 gLastMarketTime[id] = get_systime();
1922 Menu(id);
1923 }
1924
1925
1926 else if(Key == -99)
1927 {
1928 client_cmd(id, "messagemode setMarketAmount");
1929 }
1930 else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
1931 {
1932 get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
1933
1934 if(WeaponinMarket[Key] < CHEST_ID)
1935 {
1936 if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
1937 {
1938 inMarket[Key] = false;
1939 MarketPoints[Key] = 0;
1940 WeaponinMarket[Key] = 0;
1941
1942 return PLUGIN_CONTINUE;
1943 }
1944
1945 print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
1946 uWeapon[WeaponinMarket[Key]][id]++;
1947 uWeapon[WeaponinMarket[Key]][Key]--;
1948
1949 if(!uWeapon[WeaponinMarket[Key]][Key])
1950 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
1951
1952 static szQuery[512], szUGuns[128];
1953 format(szUGuns, sizeof(szUGuns), "");
1954 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
1955 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
1956
1957 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1958
1959 log_errors("[SKIN SHOP] %s", szQuery);
1960
1961 format(szUGuns, sizeof(szUGuns), "");
1962 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
1963 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
1964
1965 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1966
1967 log_errors("[SKIN SHOP] %s", szQuery);
1968 }
1969 else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
1970 {
1971 new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
1972
1973 if(Chest[Key][chId] <= 0)
1974 {
1975 inMarket[Key] = false;
1976 MarketPoints[Key] = 0;
1977 WeaponinMarket[Key] = 0;
1978
1979 return PLUGIN_CONTINUE;
1980 }
1981 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);
1982
1983 Chest[id][chId]++;
1984 Chest[Key][chId]--;
1985 }
1986 else if(WeaponinMarket[Key] == KEY_ID)
1987 {
1988 if(pKey[Key] <= 0)
1989 {
1990 inMarket[Key] = false;
1991 MarketPoints[Key] = 0;
1992 WeaponinMarket[Key] = 0;
1993
1994 return PLUGIN_CONTINUE;
1995 }
1996
1997 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, MarketPoints[Key], Name);
1998
1999 pKey[id]++; pKey[Key]--;
2000 }
2001
2002 emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
2003 Points[Key] += MarketPoints[Key];
2004 Points[id] -= MarketPoints[Key];
2005 SaveData(Key);
2006 SaveData(id);
2007 mAmount[Key]--;
2008
2009 if(mAmount[Key] <= 0)
2010 {
2011 inMarket[Key] = false;
2012 MarketPoints[Key] = 0;
2013 WeaponinMarket[Key] = 0;
2014 }
2015 MenuMod[id] = 0;
2016 }
2017 }
2018 case 4:
2019 {
2020 new Random = random_num(1, 1000);
2021 new rNum;
2022
2023 if(Random < 5 && weaponRang[Key] == 3)
2024 {
2025 new chestNum = random_num(1, 7);
2026 new chest = chestNum;
2027
2028 new chance = 5;
2029 new skinsCnt = chestsChance[chest][chance];
2030 new skinNum = random(skinsCnt);
2031 new skinId = chestsList[chest][chance][skinNum];
2032
2033 client_print_color(0, print_team_default, "^4%s%L", EVENT, LANG_PLAYER, "MENUTODUST_SKINS", get_user_name_ex(id), WeaponNames[skinId], szWeaponNames[Weapons[skinId]]);
2034
2035 uWeapon[skinId][id]++;
2036 SaveData(id);
2037 }
2038 else if(Random < 25 && weaponRang[Key] == 4)
2039 {
2040 new chestNum = random_num(1, 7);
2041 new chest = chestNum;
2042
2043 new chancerare = 25;
2044 new skinsCntrare = chestsChance[chest][chancerare];
2045 new skinNumrare = random(skinsCntrare);
2046 new skinIdrare = chestsList[chest][chancerare][skinNumrare];
2047
2048 client_print_color(0, print_team_default, "^4%s%L", EVENT, LANG_PLAYER, "MENUTODUST_SKINS", get_user_name_ex(id), WeaponNames[skinIdrare], szWeaponNames[Weapons[skinIdrare]]);
2049
2050 uWeapon[skinIdrare][id]++;
2051 SaveData(id);
2052 }
2053 else
2054
2055 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
2056 {
2057 uWeapon[Key][id]--;
2058
2059 bUsingGuns[id][Weapons[Key]] = 0;
2060
2061 if(!uWeapon[Key][id])
2062 uWeaponKills[Key][id] = 0;
2063
2064 if(weaponRang[Key] == 1) rNum = random_num(50, 2500); // Y
2065 else if(weaponRang[Key] == 2) rNum = random_num(50, 2500); // R
2066 if(weaponRang[Key] == 3) rNum = random_num(50, 2500); // B
2067 else if(weaponRang[Key] == 4) rNum = random_num(200, 300); // W
2068
2069 Points[id] += rNum;
2070
2071 client_print_color(id, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "MENUTODUST", get_user_name_ex(id), rNum);
2072
2073 log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
2074
2075 SaveData(id);
2076 } else {
2077 uWeapon[Key][id] = 0;
2078 SaveData(id);
2079 }
2080
2081 Menu(id);
2082 }
2083 case 5:
2084 {
2085 if(Key == -1) { aTarget[id] = 0; }
2086 if(Key == -2) { MenuMod[id] = -2; }
2087 if(Key == -3)
2088 {
2089 if(!is_user_connected(aTarget[id]))
2090 {
2091 return PLUGIN_CONTINUE;
2092 }
2093
2094 if(aThing[id] < CHEST_ID)
2095 {
2096 if(uWeapon[aThing[id]][id] > 0)
2097 {
2098 uWeapon[aThing[id]][aTarget[id]]++;
2099 uWeapon[aThing[id]][id]--;
2100
2101 if(!uWeapon[aThing[id]][id])
2102 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
2103
2104 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2105 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2106 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2107
2108 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2109
2110 log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
2111 log_errors("[SKIN GIFT] %s", szQuery);
2112
2113 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN");
2114 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), WeaponNames[aThing[id]], szWeaponNames[Weapons[aThing[id]]]);
2115 }
2116 // else client_print_color(id, print_team_default, "Neturi tiek skinu!");
2117 }
2118 else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
2119 {
2120 new cId = aThing[id]-CHEST_ID;
2121 if(Chest[id][cId] >= aAmount[id])
2122 {
2123 Chest[aTarget[id]][cId]+=aAmount[id];
2124 Chest[id][cId]-=aAmount[id];
2125
2126 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST");
2127 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), aAmount[id]);
2128 }
2129 else client_print_color(id, print_team_default, "Neturi tiek skryniu!");
2130 }
2131 else if(aThing[id] == KEY_ID)
2132 {
2133 if(pKey[id] >= aAmount[id])
2134 {
2135 pKey[aTarget[id]]+=aAmount[id]; pKey[id]-=aAmount[id];
2136
2137 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
2138 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), aAmount[id]);
2139 }
2140 else client_print_color(id, print_team_default, "Neturi tiek raktu!");
2141 }
2142
2143 if(aPoints[id] > 0 && Points[id] >= aPoints[id])
2144 {
2145 Points[aTarget[id]] += aPoints[id];
2146 Points[id] -= aPoints[id];
2147 client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
2148 log_errors("[SKINLOG PTS] %s padovanojo %s - %d eurų", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
2149 }
2150
2151 SaveData(aTarget[id]);
2152 SaveData(id);
2153
2154 MenuMod[id] = 0;
2155 aThing[id] = 0;
2156 aTarget[id] = 0;
2157 aPoints[id] = 0;
2158 }
2159
2160 if(Key == -75)
2161 {
2162 client_cmd(id, "messagemode setAmount");
2163 }
2164
2165 if(Key == -4) { client_cmd(id, "messagemode Gift"); }
2166 if(Key > 0) { aTarget[id] = Key; }
2167 Menu(id);
2168 }
2169 case 6:
2170 {
2171 new accesNum = get_access(id);
2172 new Float:gPercent = ((accesNum == 4) ? 0.92 : ((accesNum == 3) ? 0.96 : (accesNum == 2) ? 0.98 : 1.0));
2173
2174 switch(item)
2175 {
2176 case 0:
2177 {
2178 Points[id] -= floatround(3500*gPercent, floatround_floor);
2179 pKey[id]++;
2180
2181 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix);
2182 SaveKeys(id);
2183 }
2184 case 1:
2185 {
2186 Points[id] -= floatround(17500*gPercent, floatround_floor);
2187 pKey[id] += 5;
2188
2189 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_5", Prefix);
2190 SaveKeys(id);
2191 }
2192 case 2:
2193 {
2194 Points[id] -= floatround(35000*gPercent, floatround_floor);
2195 pKey[id] += 10;
2196
2197 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_10", Prefix);
2198 SaveKeys(id);
2199 }
2200 case 3:
2201 {
2202 Points[id] -= floatround(70000*gPercent, floatround_floor);
2203 pKey[id] += 20;
2204
2205 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_20", Prefix);
2206 SaveKeys(id);
2207 }
2208 case 4:
2209 {
2210 Points[id] -= floatround(105000*gPercent, floatround_floor);
2211 pKey[id] += 30;
2212
2213 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_30", Prefix);
2214 SaveKeys(id);
2215 }
2216 case 5:
2217 {
2218 Points[id] -= floatround(175000*gPercent, floatround_floor);
2219 pKey[id] += 50;
2220
2221 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_50", Prefix);
2222 SaveKeys(id);
2223 }
2224
2225 case 6:
2226 {
2227 Chest[id][item-2] += 1;
2228
2229 Points[id] -= 3500;
2230
2231 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, chest_name(item-2));
2232
2233 SaveChests(id);
2234 }
2235
2236 case 7..(CHEST_COUNT+3):
2237 {
2238 Chest[id][item-2] += 5;
2239
2240 Points[id] -= 17500;
2241
2242 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCHEST_5", Prefix, chest_name(item-2));
2243
2244 SaveChests(id);
2245 }
2246 }
2247 }
2248 case 7:
2249 {
2250 Menu(id);
2251 }
2252 default: { MenuMod[id] = 0; }
2253 }
2254
2255 menu_destroy(gMenu);
2256 return PLUGIN_HANDLED;
2257}
2258
2259public client_disconnected(id)
2260{
2261 Patirtis[id] = 0, Kills[id] = 0,Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
2262 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2263 for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
2264 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2265
2266 gWarnings[id] = 0;
2267 WeaponinMarket[id] = 0;
2268 MarketPoints[id] = 0;
2269 inMarket[id] = 0;
2270 Password[id] = "";
2271 SavedPassword[id] = "";
2272 Loged[id] = false;
2273 gRegistered[id] = false;
2274 gLogged[id] = false;
2275 bTrade[id] = false;
2276 bTradeAccepted[id] = false;
2277 /////////////////////////////////////////trade
2278 canOffer[id] = true;
2279
2280 TradeTarget[id] = 0;
2281 TradeAccept[id] = -1;
2282 TradeSkin[id] = -1;
2283 TradeChest[id] = -1;
2284 TradeChestCount[id] = 0;
2285 TradeKey[id] = 0;
2286 TradeMoney[id] = 0;
2287 //////////////////////////////////////////////
2288}
2289
2290public client_putinserver(id)
2291{
2292 Patirtis[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
2293 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2294 for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
2295 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2296
2297 gWarnings[id] = 0;
2298 Password[id] = "";
2299 SavedPassword[id] = "";
2300 Loged[id] = false;
2301 bTrade[id] = false;
2302 bTradeAccepted[id] = false;
2303 gRegistered[id] = false;
2304 gLogged[id] = false;
2305 gLastMarketTime[id] = get_systime();
2306 gPlayerTime[id] = get_systime();
2307
2308////////////////////////////////trade
2309 canOffer[id] = true;
2310////////////////////////////////////
2311 if(gCanLoad) { set_task(0.5, "Registered", id); }
2312}
2313
2314public add_delay(id)
2315{
2316 switch(id)
2317 {
2318 case 1..8: set_task(0.1, "Registered", id);
2319 case 9..16: set_task(0.2, "Registered", id);
2320 case 17..24: set_task(0.3, "Registered", id);
2321 case 25..32: set_task(0.4, "Registered", id);
2322 }
2323}
2324
2325//============================================================//
2326// [~ Saving / Loading datas ~] //
2327//============================================================//
2328public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
2329{
2330 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2331 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2332}
2333
2334public Login(id)
2335{
2336 if(!is_user_connected(id) || is_user_bot(id))
2337 return;
2338
2339 static szQuery[256], iData[1]; iData[0] = id;
2340 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
2341
2342 SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
2343
2344 log_errors("[LOGIN] %s", szQuery);
2345}
2346
2347public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
2348{
2349 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
2350 else
2351 {
2352 new id = iData[0];
2353
2354 if(SQL_NumResults(hQuery))
2355 {
2356 new szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256], szChests[128];
2357
2358 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
2359 Patirtis[id] = SQL_ReadResult(hQuery, 2);
2360 Kills[id] = SQL_ReadResult(hQuery, 3);
2361 Points[id] = SQL_ReadResult(hQuery, 4);
2362 pKey[id] = SQL_ReadResult(hQuery, 5);
2363 Rang[id] = SQL_ReadResult(hQuery, 7);
2364 Killers[id] = SQL_ReadResult(hQuery, 8);
2365
2366 SQL_ReadResult(hQuery, 9, szSkins, sizeof(szSkins));
2367 SQL_ReadResult(hQuery, 10, szUGuns, sizeof(szUGuns));
2368 SQL_ReadResult(hQuery, 11, szKSkins, sizeof(szKSkins));
2369 SQL_ReadResult(hQuery, 6, szChests, sizeof(szChests));
2370
2371 SQL_NextRow(hQuery);
2372
2373 new myNumbers[512+MAX];
2374
2375 new count = ExplodeString(szSkins, myNumbers);
2376 if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
2377
2378 count = ExplodeString(szKSkins, myNumbers);
2379 if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
2380
2381 count = ExplodeString(szUGuns, myNumbers);
2382 if(count)
2383 {
2384 for(new i = 1; i < CSW_VESTHELM; i++)
2385 {
2386 if(myNumbers[i] <= MAX)
2387 {
2388 if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
2389 {
2390 bUsingGuns[id][i] = myNumbers[i];
2391 }
2392 }
2393 }
2394 }
2395
2396 count = ExplodeString(szChests, myNumbers);
2397 if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
2398
2399 if(!equal(Password[id], SavedPassword[id]))
2400 {
2401 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
2402 }
2403 }
2404 Loged[id] = true;
2405 UnsetBlack(id);
2406 }
2407}
2408
2409public SaveData(id)
2410{
2411 if(Loged[id] && gRegistered[id] && gCanSave)
2412 {
2413 static szQuery[2048], szSkins[1024], szKSkins[1024], szUGuns[128], szChests[128];
2414 format(szSkins, sizeof(szSkins), "");
2415 format(szKSkins, sizeof(szKSkins), "");
2416 format(szUGuns, sizeof(szUGuns), "");
2417 format(szChests, sizeof(szChests), "");
2418
2419
2420 for(new i; i < MAX; i++)
2421 {
2422 format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]);
2423 format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]);
2424 }
2425 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2426 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
2427
2428 formatex( szQuery, sizeof(szQuery), "REPLACE INTO `%s` SET `username` = '%s', `password` = '%s', `patirtis` = '%d', `kills` = '%d', `points` = '%d', `keys` = '%d', `chests` = '%s', `rang` = '%d', `killers` = '%d', `skins` = '%s', `using_skins` = '%s', `skins_kills` = '%s';", TABLE_NAME, get_user_name_ex(id), SavedPassword[id], Patirtis[id], Kills[id], Points[id], pKey[id], szChests, Rang[id], Killers[id], szSkins, szUGuns, szKSkins);
2429
2430 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
2431
2432 log_errors("[SAVE] %s", szQuery);
2433 }
2434}
2435
2436public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
2437{
2438 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2439 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2440}
2441
2442public UnsetBlack(id)
2443{
2444 set_user_maxspeed(id, 250.0);
2445
2446 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
2447 write_short(1<<10);
2448 write_short(1<<10);
2449 write_short(0x0000);
2450 write_byte(255);
2451 write_byte(255);
2452 write_byte(255);
2453 write_byte(50);
2454 message_end();
2455}
2456
2457//public TradeMenu(id)
2458//{
2459// if(!is_user_connected(id))
2460// return PLUGIN_CONTINUE;
2461
2462// if(bTrade[id])
2463// {
2464// if(bTradeAccepted[id])
2465// {
2466// client_print_color(id, 3, "[Trade] Jus jau tradinate!");
2467// return PLUGIN_CONTINUE;
2468// }
2469//
2470// client_print_color(id, 3, "[Trade] Jums jau pasiulytas trade, jei sutinkate rasykita /sutinku arba /taccept");
2471// return PLUGIN_CONTINUE;
2472// }
2473//
2474// new Name[32], String[32], sMenu;
2475
2476// sMenu = menu_create("Trade Menu", "MenuHandler");
2477// new call = menu_makecallback("Call_Back");
2478
2479// for(new i; i < get_maxplayers(); i++)
2480// {
2481// if(is_user_connected(i) && !is_user_bot(i))
2482// {
2483// get_user_name(i, Name, 31);
2484//
2485// if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
2486//
2487// num_to_str(i, String, 31);
2488// menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
2489// }
2490// }
2491//
2492// menu_display(id, sMenu);
2493//
2494// return PLUGIN_CONTINUE;
2495//}
2496
2497public RegMenu(id)
2498{
2499 static sId; sId = id;
2500 id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
2501
2502 if(Loged[id]) {
2503 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
2504 Menu(id);
2505 return PLUGIN_HANDLED;
2506 }
2507
2508 if(!gLogged[id] || !gCanLoad)
2509 {
2510 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
2511 remove_task(id+TASKID_REMENU);
2512 set_task(1.0, "RegMenu", id+TASKID_REMENU);
2513 return PLUGIN_HANDLED;
2514 }
2515 remove_task(id+TASKID_REMENU);
2516
2517 if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
2518 {
2519 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2520 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
2521 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
2522 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2523
2524 UnsetBlack(id);
2525 return PLUGIN_HANDLED;
2526 }
2527
2528 if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
2529 {
2530 Login(id);
2531 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix);
2532
2533 return PLUGIN_HANDLED;
2534 }
2535
2536 new szString[128], Name[32];
2537 format(szString, sizeof(szString), "\r[Taskom.eu\r]\w - %L", LANG_PLAYER, "RMMAIN");
2538 new rMenu = menu_create(szString, "rMenuHandler");
2539 get_user_name(id, Name, 31);
2540
2541 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name); // Client name
2542 menu_additem(rMenu, szString, "0");
2543
2544 new szPassword[126];
2545 for(new i; i < strlen(Password[id]); i++) {
2546 format(szPassword, charsmax(szPassword), "%s*", szPassword);
2547 }
2548
2549 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
2550 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword); // Client password
2551 menu_additem(rMenu, szString, "1");
2552
2553 if(!gRegistered[id]) // Not registered
2554 {
2555 format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
2556 menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
2557 }
2558 else
2559 {
2560 if(!Loged[id]) // Registered, but not logged
2561 {
2562 new gPassCheck = equal(SavedPassword[id], Password[id]);
2563
2564 format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
2565 menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
2566 }
2567 else
2568 {
2569 Menu(id);
2570 }
2571 }
2572
2573 menu_display(id, rMenu);
2574 return PLUGIN_HANDLED;
2575}
2576
2577public rMenuHandler(id, gMenu, item)
2578{
2579 if(item == MENU_EXIT)
2580 {
2581 menu_destroy(gMenu);
2582 return PLUGIN_CONTINUE;
2583 }
2584
2585 new data[9], name[64], Key;
2586 new access, callback;
2587 menu_item_getinfo(gMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
2588
2589 Key = str_to_num(data);
2590
2591 switch(Key)
2592 {
2593 case 0: { RegMenu(id); }
2594 case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
2595 case 2:
2596 {
2597 if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
2598 {
2599 copy(SavedPassword[id], 31, Password[id]);
2600 Loged[id] = true;
2601 gRegistered[id] = true;
2602 SaveData(id);
2603 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix, Password[id]);
2604
2605 UnsetBlack(id);
2606
2607 new szName[32]; get_user_name(id, szName, 31);
2608 log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
2609 gWarnings[id] = 0;
2610
2611 return PLUGIN_CONTINUE;
2612 } else {
2613 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2614
2615 return PLUGIN_HANDLED;
2616 }
2617 // Menu(id);
2618 }
2619 case 3:
2620 {
2621 if(!Loged[id])
2622 {
2623 gWarnings[id] = 0;
2624 Login(id);
2625 }
2626 }
2627 }
2628 return PLUGIN_CONTINUE;
2629}
2630
2631public PlayerPassword(id)
2632{
2633 if(Loged[id])
2634 {
2635 return PLUGIN_HANDLED;
2636 }
2637
2638 new Data[32]; read_args(Data, 31); remove_quotes(Data);
2639
2640 if(strlen(Data) < MIN_PASSWORD_LENGTH)
2641 {
2642 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2643 client_cmd(id, "messagemode UserPassword");
2644 return PLUGIN_HANDLED;
2645 }
2646 else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
2647 {
2648 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
2649 gWarnings[id]++;
2650
2651 if(gWarnings[id] >= 3)
2652 {
2653 gWarnings[id] = 0;
2654
2655 server_cmd("amx_kick #%d ^"Trying to hack other account!^"", get_user_userid(id));
2656 }
2657 }
2658
2659 copy(Password[id], 31, Data);
2660 RegMenu(id);
2661 return PLUGIN_CONTINUE;
2662}
2663
2664public NameChange(id)
2665{
2666 if(get_cvar_num("csgo_nick_show"))
2667 return FMRES_IGNORED;
2668
2669 if(!is_user_connected(id) || is_user_bot(id))
2670 return FMRES_IGNORED;
2671
2672 new OldName[32], NewName[32], Name[32];
2673 get_user_name(id, Name, 31);
2674 pev(id, pev_netname, OldName, charsmax(OldName));
2675 if(OldName[0])
2676 {
2677 get_user_info(id, "name", NewName, charsmax(NewName));
2678 if(!equal(OldName, NewName))
2679 {
2680 set_user_info(id, "name", OldName);
2681 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
2682 return FMRES_HANDLED;
2683 }
2684 }
2685 return FMRES_IGNORED;
2686}
2687
2688public Registered(id)
2689{
2690 if(!is_user_connected(id) || is_user_bot(id))
2691 return;
2692
2693 static szQuery[256], iData[1]; iData[0] = id;
2694 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
2695
2696 SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
2697
2698 log_errors("[REGISTERED] %s", szQuery);
2699}
2700
2701public QuerySelectReg( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
2702{
2703 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("[QuerySelectReg] %s", szError); return; }
2704 else
2705 {
2706 new id = iData[0];
2707 if(SQL_NumResults(hQuery))
2708 {
2709 gLogged[id] = true;
2710 gRegistered[id] = true;
2711
2712 new passfield[32], password[32];
2713 get_pcvar_string(csgo_password_field, passfield, 31);
2714 get_user_info(id, passfield, password, 31);
2715
2716 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
2717
2718 if(equal(password, SavedPassword[id])) {
2719 Password[id] = password;
2720 }
2721
2722 new szName[32]; get_user_name(id, szName, 31);
2723 log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
2724 }
2725 else
2726 {
2727 gLogged[id] = true;
2728 gRegistered[id] = false;
2729
2730 new szName[32]; get_user_name(id, szName, 31);
2731 log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
2732 }
2733 }
2734}
2735
2736public cmdUniq(id)
2737{
2738 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
2739
2740 new szText[512], szid[64];
2741
2742 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "SMAIN", LANG_PLAYER, "YPOINT", Points[id]);
2743 new sMenu = menu_create(szText, "MenuHandlerUniq");
2744
2745 for(new i; i < AllWeapon; i++)
2746 {
2747 if(uniqPrice[i] > 0)
2748 {
2749 formatex(szText, charsmax(szText), "%s \r%d \w- \rEurų", WeaponNames[i], uniqPrice[i]);
2750 formatex(szid, 63, "%d", i);
2751 menu_additem(sMenu, szText, szid, _, (Points[id] < uniqPrice[i]) ? -2 : -1);
2752 }
2753 }
2754
2755 menu_setprop(sMenu, MPROP_EXIT, MEXIT_ALL);
2756 menu_display(id, sMenu);
2757
2758 return PLUGIN_CONTINUE;
2759}
2760
2761public MenuHandlerUniq(id, menu, item)
2762{
2763 if(item == MENU_EXIT)
2764 {
2765 menu_destroy(menu);
2766 return PLUGIN_HANDLED;
2767 }
2768
2769 new aMenu[2], Data[4][32], sKey[32];
2770 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2771
2772 parse(Data[0], sKey, 31);
2773 new Key = str_to_num(sKey);
2774
2775 if(Points[id] >= uniqPrice[Key])
2776 {
2777 uWeapon[Key][id]++;
2778 Points[id] -= uniqPrice[Key];
2779 SaveData(id);
2780
2781 client_print_color(id, print_team_default, "%s ^3%s ^4Nusipirko ^3%s!", Prefix, get_user_name_ex(id), WeaponNames[Key]);
2782 }
2783 else {
2784 client_print_color(id, print_team_default, "%s ^3Nepakanka eurų!", Prefix);
2785 }
2786
2787 menu_destroy(menu);
2788 return PLUGIN_HANDLED;
2789}
2790
2791
2792/*STOCK'S Key's*/
2793stock drop_keys(id, dropKey)
2794{
2795 if(dropKey >= random_float(0.0, 700.0) && get_playersnum() >= NEED_MIN_PLAYERS)
2796 {
2797 new szName[32]; get_user_name(id, szName, 31);
2798
2799 static additional_keys; additional_keys = 0;
2800
2801 if(!additional_keys)
2802 {
2803 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ALL", EVENT, szName, pKey);
2804 pKey[id]++;
2805 }
2806 SaveKeys(id);
2807 }
2808}
2809
2810/*STOCK'S*/
2811stock drop_item(id, dropRate)
2812{
2813 if(dropRate >= random_float(0.0, 700.0) && get_playersnum() >= NEED_MIN_PLAYERS)
2814 {
2815 new szName[33], rNum, accesNum = get_access(id); get_user_name(id, szName, 32);
2816 rNum = random(CHEST_COUNT)+1;
2817
2818 static additional_chests; additional_chests = 0;
2819 if(!random(5) && accesNum)
2820 {
2821 additional_chests = random(((accesNum == 1) ? 1 : (accesNum == 1) ? 1 : 1));
2822
2823 if(additional_chests)
2824 {
2825 additional_chests++;
2826 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHESTS", Prefix, szName, additional_chests, chest_name(rNum));
2827 Chest[id][rNum] += additional_chests;
2828 }
2829 }
2830
2831 if(!additional_chests)
2832 {
2833 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHEST", Prefix, szName, chest_name(rNum));
2834 Chest[id][rNum]++;
2835 }
2836 SaveChests(id);
2837 }
2838}
2839
2840stock get_access(id)
2841{
2842 if(get_user_flags(id) & ACCESS_ADMIN)
2843 {
2844 return 2;
2845 } else if(get_user_flags(id) & ACCESS_VIP)
2846 {
2847 return 1;
2848 }
2849
2850 return 0;
2851}
2852
2853stock chest_name(iNum)
2854{
2855 new szReturn[126];
2856
2857 switch(iNum)
2858 {
2859 case 1: { formatex(szReturn, charsmax(szReturn), "Phoenix"); }
2860 case 2: { formatex(szReturn, charsmax(szReturn), "Vanguard"); }
2861 case 3: { formatex(szReturn, charsmax(szReturn), "Breakout"); }
2862 case 4: { formatex(szReturn, charsmax(szReturn), "Revolver"); }
2863 case 5: { formatex(szReturn, charsmax(szReturn), "Glove"); }
2864 }
2865
2866 return szReturn;
2867}
2868
2869stock screen_color(id)
2870{
2871 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
2872 write_short(1<<10);
2873 write_short(1<<10);
2874 write_short(0x0000);
2875 write_byte(255);
2876 write_byte(0);
2877 write_byte(0);
2878 write_byte(75);
2879}
2880
2881stock ExplodeString(const string[], output[], olen = sizeof output)
2882{
2883 new len = strlen( string ); // We retrieve the length of the current string passed.
2884
2885 if ( !len ) { return 0; } // If the string is empty we stop there.
2886
2887 new i, c, j, count;
2888 new number[ 12 ];
2889
2890 do
2891 {
2892 while ( string[ i ] == ' ' ) i++; // One or more spaces can be used between 2 numbers, so we move forward until we find a number.
2893 while ( ( number[ j++ ] = c = string[ i++ ] ) && c != ' ' ) {} // We loop and save the number found until the next space found or end of string.
2894
2895 output[ count++ ] = str_to_num( number ); // We convert the number saved previously into a number and we stored in output at the slot count.
2896 j = 0;
2897 }
2898 while ( i < len && count < olen ); // We should looping while we have not cross the string length.
2899
2900 return count;
2901}
2902
2903stock get_user_name_ex(id)
2904{
2905 new szName[33];
2906 get_user_name(id, szName, charsmax(szName));
2907
2908 replace_all(szName, charsmax(szName), "'", "\'");
2909 replace_all(szName, charsmax(szName), "^"", "\^"");
2910 // replace_all(szName, charsmax(szName), ".", "");
2911
2912 return szName;
2913}
2914
2915stock print_color(const id, const input[], any:...)
2916{
2917 new Count = 1, Players[32];
2918 static Msg[191];
2919 vformat(Msg, 190, input, 3);
2920
2921 replace_all(Msg, 190, "!g", "^4");
2922 replace_all(Msg, 190, "!y", "^1");
2923 replace_all(Msg, 190, "!t", "^3");
2924
2925 if(id) Players[0] = id; else get_players(Players, Count, "ch");
2926 {
2927 for (new i = 0; i < Count; i++)
2928 {
2929 if (is_user_connected(Players[i]))
2930 {
2931 message_begin(MSG_ONE, get_user_msgid( "SayText" ), _, Players[i]);
2932 write_byte(Players[i]);
2933 write_string(Msg);
2934 message_end();
2935 }
2936 }
2937 }
2938 return PLUGIN_HANDLED;
2939 }
2940
2941 stock bool:ValidMdl(Mdl[]) {
2942 return (containi(Mdl, ".mdl") != -1) ? true : false;
2943}
2944
2945public UpdateStatusText(id)
2946{
2947 new szText[256], wId = get_user_weapon(id, _, _);
2948 if(bUsingGuns[id][wId])
2949 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wId]][id], WeaponNames[bUsingGuns[id][wId]]);
2950 else
2951 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK");
2952
2953 set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
2954 ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
2955}
2956
2957stock get_weapon_maxclip(wpnid = 0)
2958{
2959 for (new a = 0; a < sizeof (g_weapons); a++)
2960 if (wpnid == g_weapons[a])
2961 return g_max_clip[a];
2962
2963 return false;
2964}
2965
2966stock SetFullBpAmmo(id, iWeaponID)
2967{
2968 new iFullbpammo,iAmmoId;
2969
2970 for(new i = 1; i < AmmoIds; i++)
2971 {
2972 if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
2973 {
2974 iAmmoId = i;
2975 iFullbpammo = g_iAmmoMax[i];
2976
2977 break;
2978 }
2979 }
2980
2981 if(!iAmmoId)
2982 return;
2983
2984 cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
2985
2986 message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
2987 write_byte(iAmmoId);
2988 write_byte(iFullbpammo);
2989 message_end();
2990}
2991
2992stock has_user_weapon(id, iCswId, iSlot = 0)
2993{
2994 new iWeapon;
2995 if( !iSlot )
2996 {
2997 static const iWeaponsSlots[] = {
2998 -1,
2999 2, // CSW_P228
3000 -1,
3001 1, // CSW_SCOUT
3002 4, // CSW_HEGRENADE
3003 1, // CSW_XM1014
3004 5, // CSW_C4
3005 1, // CSW_MAC10
3006 1, // CSW_AUG
3007 4, // CSW_SMOKEGRENADE
3008 2, // CSW_ELITE
3009 2, // CSW_FIVESEVEN
3010 1, // CSW_UMP45
3011 1, // CSW_SG550
3012 1, // CSW_GALIL
3013 1, // CSW_FAMAS
3014 2, // CSW_USP
3015 2, // CSW_GLOCK18
3016 1, // CSW_AWP
3017 1, // CSW_MP5NAVY
3018 1, // CSW_M249
3019 1, // CSW_M3
3020 1, // CSW_M4A1
3021 1, // CSW_TMP
3022 1, // CSW_G3SG1
3023 4, // CSW_FLASHBANG
3024 2, // CSW_DEAGLE
3025 1, // CSW_SG552
3026 1, // CSW_AK47
3027 3, // CSW_KNIFE
3028 1 // CSW_P90
3029 };
3030 iSlot = iWeaponsSlots[iCswId];
3031 }
3032
3033 const XO_PLAYER = 5;
3034 const m_rgpPlayerItems_Slot0 = 367;
3035
3036 iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
3037
3038 const XO_WEAPON = 4;
3039 const m_pNext = 42;
3040 const m_iId = 43;
3041
3042 while( iWeapon > 0 )
3043 {
3044 if( get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId )
3045 return iWeapon;
3046
3047 iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
3048 }
3049 return 0;
3050}
3051
3052stock SavePoints(id)
3053{
3054 if(Loged[id] && gRegistered[id] && gCanSave)
3055 {
3056 new szQuery[1024];
3057 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `patirtis` = '%d', `kills` = '%d', `keys` = '%d', `points` = '%d' WHERE `username` = '%s';", TABLE_NAME, Patirtis[id], Kills[id], pKey[id], Points[id], get_user_name_ex(id));
3058
3059 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3060
3061 log_errors("[SAVE POINTS] %s", szQuery);
3062 }
3063}
3064
3065stock SaveChests(id)
3066{
3067 if(Loged[id] && gRegistered[id] && gCanSave)
3068 {
3069 new szQuery[1024], szChests[128];
3070 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
3071
3072 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
3073
3074 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3075
3076 log_errors("[SAVE CHESTS] %s", szQuery);
3077 }
3078}
3079
3080stock SaveKeys(id)
3081{
3082 if(Loged[id] && gRegistered[id] && gCanSave)
3083 {
3084 new szQuery[1024];
3085
3086 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));
3087
3088 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3089
3090 log_errors("[SAVE KEYS] %s", szQuery);
3091 }
3092}
3093
3094stock SaveRang(id)
3095{
3096 if(Loged[id] && gRegistered[id] && gCanSave)
3097 {
3098 new szQuery[1024];
3099 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `rang` = '%d' WHERE `username` = '%s';", TABLE_NAME, Rang[id], get_user_name_ex(id));
3100
3101 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3102
3103 log_errors("[SAVE RANG] %s", szQuery);
3104 }
3105}
3106
3107stock SaveKillers(id)
3108{
3109 if(Loged[id] && gRegistered[id] && gCanSave)
3110 {
3111 new szQuery[1024];
3112
3113 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `killers` = '%d' WHERE `username` = '%s';", TABLE_NAME, Points[id], Killers[id], get_user_name_ex(id));
3114
3115 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3116
3117 log_errors("[SAVE KILLERS] %s", szQuery);
3118 }
3119}
3120
3121stock SaveGunsKills(id)
3122{
3123 if(Loged[id] && gRegistered[id] && gCanSave)
3124 {
3125 new szQuery[1024], szKSkins[1024];
3126
3127 for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
3128
3129 formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
3130
3131 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3132
3133 log_errors("[SAVE GUNS KILLS] %s", szQuery);
3134 }
3135}
3136
3137stock log_errors(const szText[], any:...)
3138{
3139 static szMessage[256];
3140 vformat(szMessage, 256, szText, 2);
3141
3142 log_to_file(g_logfile, szMessage);
3143
3144 return PLUGIN_HANDLED;
3145}
3146
3147
3148//////////////////////////////////////////////////////////////////////////////////////////////////////
3149public TradeMenu(id)
3150{
3151 new offer;
3152
3153 if(1 <= TradeTarget[id] <= 32)
3154 {
3155 new target = TradeTarget[id];
3156 new p_target = TradeTarget[target];
3157
3158 if(is_user_connected(target) && p_target == id)
3159 { // Both trading
3160 showTradeMenu(id);
3161 }
3162 else if((offer = PlayerHasTradingOffer(id)) > 0)
3163 {
3164 new szText[128], menu;
3165 new name[64];
3166 get_user_name(offer, name, charsmax(name));
3167 formatex(szText, charsmax(szText), "\y[\rPublic\y] \wJūs turite prekybos pasiūlymą iš\d: \y%s", name);
3168 menu = menu_create(szText, "TradeOfferHandler");
3169
3170 menu_additem(menu, "\yPatvirtinti");
3171 menu_additem(menu, "\rAtšaukti");
3172
3173 menu_display(id, menu, 0);
3174 }
3175 else
3176 {
3177 showTradeTargets(id);
3178 }
3179 }
3180 else if((offer = PlayerHasTradingOffer(id)) > 0)
3181 {
3182 new szText[128], menu;
3183 new name[64];
3184 get_user_name(offer, name, charsmax(name));
3185 formatex(szText, charsmax(szText), "\y[\rEFEAR.EU CS:GO\y] \wTu turi apsikeitimo pasiūlymą iš\d: \y%s", name);
3186 menu = menu_create(szText, "TradeOfferHandler");
3187
3188 menu_additem(menu, "\yPriimti");
3189 menu_additem(menu, "\rAtmesti");
3190
3191 menu_display(id, menu, 0);
3192 }
3193 else
3194 {
3195 showTradeTargets(id);
3196 }
3197}
3198
3199public TradeOfferHandler(id, menu, item)
3200{
3201 if(item == MENU_EXIT)
3202 {
3203 menu_destroy(menu);
3204 return PLUGIN_HANDLED;
3205 }
3206
3207 new offer = PlayerHasTradingOffer(id);
3208
3209 if(!(1 <= offer <= 32) || !is_user_connected(offer))
3210 {
3211 TradeMenu(id);
3212 return PLUGIN_HANDLED;
3213 }
3214
3215 new name[64];
3216 get_user_name(id, name, charsmax(name));
3217
3218 switch(item)
3219 {
3220 case 0:
3221 {
3222 TradeTarget[id] = offer;
3223 client_print_color(offer, print_team_default, "[^4EFEAR.EU CS:GO^1] ^3%s ^1Priėmė mainų pasliūlymą (Trade)", name);
3224
3225 ResetTrade(id, false);
3226 ResetTrade(offer, false);
3227
3228 TradeMenu(offer);
3229 }
3230 case 1:
3231 {
3232 TradeTarget[offer] = 0;
3233 client_print_color(offer, print_team_default, "[^4EFEAR.EU CS:GO^1] ^3%s ^1Atsisakė jūsų pasiųlymo (Trade)", name);
3234 }
3235 }
3236 TradeMenu(id);
3237 return PLUGIN_HANDLED;
3238}
3239
3240stock PlayerHasTradingOffer(id)
3241{
3242 for(new i = 1; i <= 32; i++)
3243 {
3244 if(is_user_connected(i) && TradeTarget[i] == id) return i;
3245 }
3246 return -1;
3247}
3248
3249public showTradeTargets(id)
3250{
3251 new szText[512];
3252 formatex(szText, charsmax(szText), "\y[\rTaskom.eu\y] - Mainai (Trade) \d\w");
3253 new menu = menu_create(szText, "TradePlayersHandler");
3254
3255 new szName[32], szUserId[32], players[32], pnum, tempid;
3256 get_players(players, pnum);
3257
3258 for(new i; i < pnum; i++)
3259 {
3260 tempid = players[i];
3261 if(tempid == id) continue;
3262 get_user_name(tempid, szName, charsmax(szName));
3263
3264 formatex(szUserId, charsmax(szUserId), "%d", get_user_userid(tempid));
3265 menu_additem(menu, szName, szUserId, 0);
3266 }
3267 menu_display(id, menu, 0);
3268}
3269
3270public TradePlayersHandler(id, menu, item)
3271{
3272 if(item == MENU_EXIT)
3273 {
3274 menu_destroy(menu);
3275 return PLUGIN_HANDLED;
3276 }
3277
3278 new szData[6], szName[64];
3279 new _access, item_callback;
3280 menu_item_getinfo(menu, item, _access, szData,charsmax(szData), szName,charsmax(szName), item_callback);
3281
3282 new userid = str_to_num(szData);
3283
3284 new player = find_player("k", userid); // flag "k" : find player from userid
3285
3286 if(player && is_user_connected(player))
3287 {
3288 if(canOffer[id])
3289 {
3290 new name[64];
3291 get_user_name(id, name, charsmax(name));
3292
3293 TradeTarget[id] = player;
3294 client_print_color(player, print_team_default, "[^4Taskom.eu^1] ^3%s ^1Siūlyk savo pasiūlymą!", name);
3295 TradeMenu(player);
3296 set_task(10.0, "resetOffering", id+8080);
3297 canOffer[id] = false;
3298 }
3299 else client_print_color(id, print_team_default, "[^4Taskom.eu^1] Prašome palaukti sekundėlę norint pasiūlyti nauja pasiūlymą!");
3300 }
3301 TradeMenu(id);
3302
3303 return PLUGIN_HANDLED;
3304}
3305
3306public resetOffering(id)
3307{
3308 id -= 8080;
3309 canOffer[id] = true;
3310}
3311
3312public showTradeMenu(id)
3313{
3314 if(1 <= TradeTarget[id] <= 32)
3315 {
3316 new target = TradeTarget[id];
3317
3318 if(is_user_connected(target))
3319 {
3320 new szText[512], target_name[64];
3321 get_user_name(target, target_name, charsmax(target_name));
3322
3323 formatex(szText, charsmax(szText), "\y[\rTaskom.eu\y] \wTu apsimainei su \r%s\d:\w", target_name);
3324
3325 new menu = menu_create(szText, "TradeMenuHandler");
3326
3327 if(TradeSkin[id] != -1)
3328 {
3329 new skin_id = TradeSkin[id];
3330 formatex(szText, charsmax(szText), "\wSkinai: \y%s \d[\r%s\d]", WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
3331 }
3332 else
3333 {
3334 formatex(szText, charsmax(szText), "\wSkinai: \dnepasirinkta");
3335 }
3336 menu_additem(menu, szText);
3337
3338 if(TradeChest[id] != -1 && TradeChestCount[id] > 0)
3339 {
3340 new chest_id = TradeChest[id];
3341 formatex(szText, charsmax(szText), "\wSkrynios: \y%s \d[%d]", chest_name(chest_id), TradeChestCount[id]);
3342 }
3343 else
3344 {
3345 formatex(szText, charsmax(szText), "\wSkrynios: \dnepasirinkta");
3346 }
3347 menu_additem(menu, szText);
3348
3349 formatex(szText, charsmax(szText), "\wRaktai: \d%d", TradeKey[id]);
3350 menu_additem(menu, szText);
3351
3352 formatex(szText, charsmax(szText), "\wEurai: \d$%d", TradeMoney[id]);
3353
3354 new extraText[512];
3355 formatex(extraText, charsmax(extraText), "%s^n^n\w--- \y%s \w---^n^n", szText, target_name);
3356
3357 if(TradeSkin[target] != -1)
3358 {
3359 new skin_id = TradeSkin[target];
3360 formatex(extraText, charsmax(extraText), "%s\wSkinai: \y%s \d[\r%s\d]^n", extraText, WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
3361 }
3362 else
3363 {
3364 formatex(extraText, charsmax(extraText), "%s\wSkinai: \dnepasirinkta^n", extraText);
3365 }
3366
3367 if(TradeChest[target] != -1 && TradeChestCount[id] > 0)
3368 {
3369 new chest_id = TradeChest[target];
3370 formatex(extraText, charsmax(extraText), "%s\wSkrynios: \y%s \d[%d]^n", extraText, chest_name(chest_id), TradeChestCount[target]);
3371 }
3372 else
3373 {
3374 formatex(extraText, charsmax(extraText), "%s\wSkrynios: \dnepasirinkta^n", extraText);
3375 }
3376
3377 formatex(extraText, charsmax(extraText), "%s\wRaktai: \d%d^n", extraText, TradeKey[target]);
3378 formatex(extraText, charsmax(extraText), "%s\wEurai: \d$%d^n^n", extraText, TradeMoney[target]);
3379 menu_additem(menu, extraText);
3380
3381 if(TradeAccept[id] == -1) formatex(szText, charsmax(szText), "\yPatvirtinti");
3382 else formatex(szText, charsmax(szText), "\yPatvirtinti \d[Laukiama kito žaidėjo]");
3383 menu_additem(menu, szText);
3384
3385 formatex(szText, charsmax(szText), "\rAtšaukti");
3386 menu_additem(menu, szText);
3387
3388 menu_display(id, menu, 0);
3389 }
3390 else
3391 {
3392 TradeMenu(id);
3393 }
3394 }
3395 else
3396 {
3397 TradeMenu(id);
3398 }
3399}
3400
3401public TradeMenuHandler(id, menu, item)
3402{
3403 if(item == MENU_EXIT)
3404 {
3405 menu_destroy(menu);
3406 return PLUGIN_HANDLED;
3407 }
3408
3409 if(TradeAccept[id] == -1)
3410 {
3411 switch(item)
3412 {
3413 case 0: { // Skin
3414 showTradeSkinsMenu(id);
3415 }
3416 case 1: { // Chest
3417 showTradeChestsMenu(id);
3418 }
3419 case 2: { // Keys
3420 inMM[id] = true;
3421 client_cmd(id, "messagemode SET_TRADE_KEYS");
3422 TradeMenu(id);
3423 }
3424 case 3: { // Money
3425 inMM[id] = true;
3426 client_cmd(id, "messagemode SET_TRADE_MONEY");
3427 TradeMenu(id);
3428 }
3429 }
3430 }
3431
3432 new target = TradeTarget[id];
3433
3434 if(item == 4)
3435 { // Accept
3436 if(TradeAccept[id] == -1) TradeAccept[id] = 1;
3437 else TradeAccept[id] = -1;
3438
3439 if(TradeAccept[id] != -1)
3440 {
3441 client_print_color(target, print_team_default, "[^4Taskom.eu^1] Pasiūlymas priimtas!");
3442
3443 if(TradeAccept[target] != -1)
3444 {
3445 MakeTrade(id, target);
3446 }
3447 TradeMenu(id);
3448 }
3449 }
3450 else if(item == 5)
3451 { // Decline
3452 client_print_color(target, print_team_default, "[^4Taskom.eu^1] Pasiūlymas panaikintas!");
3453 ResetTrade(id, true);
3454 ResetTrade(target, true);
3455 TradeMenu(id);
3456 }
3457
3458 return PLUGIN_HANDLED;
3459}
3460public showTradeSkinsMenu(id)
3461{
3462 new szText[512];
3463 formatex(szText, charsmax(szText), "\r[\rTaskom.eu\r] \wPasirink skina\w\w");
3464 new menu = menu_create(szText, "skinsTradeMenuHandler");
3465
3466 menu_additem(menu, "None", "-1");
3467
3468 new String[32], All;
3469 for(new i = 1; i < AllWeapon; i++)
3470 {
3471 if(uWeapon[i][id] <= 0)
3472 continue;
3473
3474 num_to_str(i, String, 31);
3475 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\r", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
3476 menu_additem(menu, szText, String);
3477 All++;
3478
3479 }
3480 menu_display(id, menu, 0);
3481}
3482
3483public skinsTradeMenuHandler(id, menu, item)
3484{
3485 if(item == MENU_EXIT)
3486 {
3487 menu_destroy(menu);
3488 TradeMenu(id);
3489 return PLUGIN_HANDLED;
3490 }
3491
3492 new szData[6], szName[64];
3493 new _access, item_callback;
3494 menu_item_getinfo(menu, item, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback);
3495
3496 new skin_id = str_to_num(szData);
3497
3498 if(skin_id != -1)
3499 {
3500 new name[64];
3501 get_user_name(id, name, charsmax(name));
3502
3503 TradeSkin[id] = skin_id;
3504 client_print_color(TradeTarget[id], print_team_default, "[^4Taskom.eu^1] ^3%s ^1nustatyk ^4%s ^1[^4%s^1] skina!", name, WeaponNames[skin_id], szWeaponNames[Weapons[skin_id]]);
3505 }
3506 TradeMenu(id);
3507 TradeMenu(TradeTarget[id]);
3508
3509 return PLUGIN_HANDLED;
3510}
3511
3512public showTradeChestsMenu(id)
3513{
3514
3515 new szText[512];
3516 formatex(szText, charsmax(szText), "\r[\rTaskom.eu\r] \wPasirink skrynia\d\w");
3517 new menu = menu_create(szText, "chestsTradeMenuHandler");
3518
3519 menu_additem(menu, "None", "-1");
3520
3521 for(new i = 1; i <= CHEST_COUNT; i++)
3522 {
3523 if(Chest[id][i] > 0)
3524 {
3525 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
3526
3527 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", i);
3528 menu_additem(menu, szText, szButton);
3529
3530 }
3531 }
3532 menu_display(id, menu, 0);
3533}
3534
3535public chestsTradeMenuHandler(id, menu, item)
3536{
3537 if(item == MENU_EXIT)
3538 {
3539 menu_destroy(menu);
3540 TradeMenu(id);
3541 return PLUGIN_HANDLED;
3542 }
3543
3544 new szData[6], szName[64];
3545 new _access, item_callback;
3546 menu_item_getinfo( menu, item, _access, szData,charsmax(szData), szName, charsmax(szName), item_callback);
3547
3548 new chest_id = str_to_num(szData);
3549
3550 if(chest_id != -1)
3551 {
3552 new name[64];
3553 get_user_name(id, name, charsmax(name));
3554
3555 TradeChest[id] = chest_id;
3556
3557 inMM[id] = true;
3558 client_cmd(id, "messagemode SET_TRADE_CHESTS");
3559 }
3560 TradeMenu(id);
3561 return PLUGIN_HANDLED;
3562}
3563
3564public ResetTrade(id, bool:reset)
3565{
3566 if(reset)
3567
3568 TradeTarget[id] = 0;
3569 TradeAccept[id] = -1;
3570 TradeSkin[id] = -1;
3571 TradeChest[id] = -1;
3572 TradeKey[id] = 0;
3573 TradeMoney[id] = 0;
3574}
3575
3576public cmdKeys(id)
3577{
3578 if(inMM[id])
3579 {
3580 new szTemp[64];
3581
3582 read_args(szTemp, charsmax(szTemp));
3583 remove_quotes(szTemp);
3584
3585 if(IsInteger(szTemp))
3586 {
3587 new pts = str_to_num(szTemp);
3588
3589 if(TradeKey[id] != pts)
3590 {
3591 if(pts > pKey[id]) pts = pKey[id];
3592 TradeKey[id] = pts;
3593
3594 new name[64];
3595 get_user_name(id, name, charsmax(name));
3596 client_print_color(TradeTarget[id], print_team_default, "[^4Taskom.eu^1] ^3%s ^1nustatyk ^4%d ^1raktus!", name, pts);
3597 TradeMenu(TradeTarget[id]);
3598 }
3599 }
3600 else
3601 {
3602 client_cmd(id, "messagemode SET_TRADE_KEYS");
3603 return PLUGIN_HANDLED;
3604 }
3605 }
3606
3607 inMM[id] = false;
3608 set_task(0.5, "TradeMenu", id);
3609
3610 return PLUGIN_HANDLED;
3611}
3612
3613public cmdMoney(id)
3614{
3615 if(inMM[id])
3616 {
3617 new szTemp[64];
3618
3619 read_args(szTemp, charsmax(szTemp));
3620 remove_quotes(szTemp);
3621
3622 if(IsInteger(szTemp))
3623 {
3624 new pts = str_to_num(szTemp);
3625 if(TradeMoney[id] != pts)
3626 {
3627 if(pts > Points[id]) pts = Points[id];
3628 TradeMoney[id] = pts;
3629
3630 new name[64];
3631 get_user_name(id, name, charsmax(name));
3632 client_print_color(TradeTarget[id], print_team_default, "[^4Taskom.eu^1] ^3%s ^1nustatyk ^4%d eurus!", name, pts);
3633 TradeMenu(TradeTarget[id]);
3634 }
3635 }
3636 else
3637 {
3638 client_cmd(id, "messagemode SET_TRADE_MONEY");
3639 return PLUGIN_HANDLED;
3640 }
3641 }
3642
3643 inMM[id] = false;
3644 set_task(0.5, "TradeMenu", id);
3645
3646 return PLUGIN_HANDLED;
3647}
3648
3649public cmdChests(id)
3650{
3651 if(inMM[id])
3652 {
3653 new szTemp[64];
3654
3655 read_args(szTemp, charsmax(szTemp));
3656 remove_quotes(szTemp);
3657
3658 if(IsInteger(szTemp) && str_to_num(szTemp) > 0)
3659 {
3660 new pts = str_to_num(szTemp);
3661
3662 if(TradeChestCount[id] != pts && TradeChest[id] != -1 && (1 <= TradeChest[id] <= CHEST_COUNT) )
3663 {
3664 new cnt = Chest[id][TradeChest[id]];
3665
3666 if(pts > cnt) pts = cnt;
3667
3668 if(pts <= 0) TradeChest[id] = -1;
3669 TradeChestCount[id] = pts;
3670
3671 new name[64];
3672 get_user_name(id, name, charsmax(name));
3673 client_print_color(TradeTarget[id], print_team_default, "[^4Taskom.eu^1] ^3%s ^1nustatyk ^4%s %d ^1skrynias!", name, chest_name(TradeChest[id]), pts);
3674 TradeMenu(TradeTarget[id]);
3675 }
3676 }
3677 else
3678 {
3679 client_cmd(id, "messagemode SET_TRADE_CHESTS");
3680 return PLUGIN_HANDLED;
3681 }
3682 }
3683
3684 inMM[id] = false;
3685 set_task(0.5, "TradeMenu", id);
3686
3687 return PLUGIN_HANDLED;
3688}
3689
3690bool:IsInteger(buffer[])
3691{
3692 new len = strlen(buffer);
3693
3694 for(new i = 0; i < len; i++)
3695 {
3696 if(!isdigit(buffer[i]))
3697 return false;
3698 }
3699
3700 return true;
3701}
3702
3703public MakeTrade(id, target)
3704{
3705 if(!is_user_connected(id) || !is_user_connected(target)) return;
3706
3707 new bool:TradeWillHappen = true;
3708 new skin_id, target_skin_id, chest_id, target_chest_id, chest_count, target_chest_count, keys, target_keys, money, target_money;
3709
3710 if(TradeSkin[id] != -1)
3711 {
3712 if(uWeapon[TradeSkin[id]][id] <= 0)
3713 {
3714 TradeWillHappen = false;
3715 }
3716 else
3717 {
3718 skin_id = TradeSkin[id];
3719 }
3720 }
3721
3722 if(TradeSkin[target] != -1)
3723 {
3724 if(uWeapon[TradeSkin[target]][target] <= 0)
3725 {
3726 TradeWillHappen = false;
3727 }
3728 else
3729 {
3730 target_skin_id = TradeSkin[target];
3731 }
3732 }
3733
3734 if(TradeChest[id] != -1 && TradeChestCount[id] > 0)
3735 {
3736 if(Chest[id][TradeChest[id]] < TradeChestCount[id])
3737 {
3738 TradeWillHappen = false;
3739 }
3740 else
3741 {
3742 chest_id = TradeChest[id];
3743 chest_count = TradeChestCount[id];
3744 }
3745 }
3746
3747 if(TradeChest[target] != -1 && TradeChestCount[target] > 0)
3748 {
3749 if(Chest[target][TradeChest[target]] < TradeChestCount[target])
3750 {
3751 TradeWillHappen = false;
3752 }
3753 else
3754 {
3755 target_chest_id = TradeChest[target];
3756 target_chest_count = TradeChestCount[target];
3757 }
3758 }
3759
3760 if(TradeKey[id] > 0)
3761 {
3762 if(pKey[id] < TradeKey[id]) TradeWillHappen = false;
3763 else keys = TradeKey[id];
3764 }
3765
3766 if(TradeKey[target] > 0)
3767 {
3768 if(pKey[target] < TradeKey[target]) TradeWillHappen = false;
3769 else target_keys = TradeKey[target];
3770 }
3771
3772 if(TradeMoney[id] > 0)
3773 {
3774 if(Points[id] < TradeMoney[id]) TradeWillHappen = false;
3775 else money = TradeMoney[id];
3776 }
3777
3778 if(TradeMoney[target] > 0)
3779 {
3780 if(Points[target] < TradeMoney[target]) TradeWillHappen = false;
3781 else target_money = TradeMoney[target];
3782 }
3783
3784 if(TradeWillHappen)
3785 {
3786 pKey[id] -= keys; pKey[target] -= target_keys; pKey[id] += target_keys; pKey[target] += keys;
3787 Points[id] -= money; Points[target] -= target_money; Points[id] += target_money; Points[target] += money;
3788
3789 uWeapon[skin_id][id]--; uWeapon[target_skin_id][target]--; uWeapon[target_skin_id][id]++; uWeapon[skin_id][target]++;
3790 Chest[id][chest_id] -= chest_count;
3791 Chest[id][target_chest_id] += target_chest_count;
3792 Chest[target][target_chest_id] -= target_chest_count;
3793 Chest[target][chest_id] += chest_count;
3794
3795 client_print_color(id, print_team_default, "[^4Taskom.eu^1] Apsikeitimas įvykdytas sėkmingai!");
3796 SaveData(id);
3797 SaveData(target);
3798 }
3799 else
3800 {
3801 client_print_color(id, print_team_default, "[^4Taskom.eu^1] Apsikeitimas nepavyko. Trūksta daiktų!");
3802 client_print_color(target, print_team_default, "[^4Taskom.eu^1] Apsikeitimas nepavyko. Trūksta daiktų!");
3803 }
3804
3805 ResetTrade(id, true);
3806 ResetTrade(target, true);
3807}
3808//////////////////////////////////////////////////////////////////////////////////////////////////////
3809
3810
3811
3812/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
3813*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1158\\ f0\\ fs16 \n\\ par }
3814*/