· 7 years ago · Feb 14, 2019, 04:06 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 <rcsgo>
11
12#pragma tabsize 0
13
14// # Project by DeRoiD https://forums.alliedmods.net/showthread.php?t=265653
15// # Author by Psychical https://www.supergames.lt/topic/244152-hot-csgo-modas-amxx-100€-1-ip/
16
17new const PLUGIN[] = "Global Offensive";
18new const VERSION[] = "4.62";
19new const AUTHOR[] = "Psychical";
20
21/*================================================================================
22[MySQLx Vars, other]
23=================================================================================*/
24#define DB_HOST ""
25#define DB_USER ""
26#define DB_PASS ""
27#define DB_DATA ""
28
29#define TABLE_NAME "rcsgo_player"
30
31#define EVENT "^1[^4Event^1]" // Prefix'as prie tekstų Event
32
33#define ACCESS_VIP ADMIN_LEVEL_H // VIP access
34#define ACCESS_ADMIN ADMIN_BAN // ADMIN access
35
36#define SOUND_SOLD "ambience/quail1.wav"
37
38new Handle:g_hTuple;
39new g_msgid_ScreenFade, g_msgid_SyncHud;
40
41#define MAX 400 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
42#define MAX_RANGS 30
43
44#define CHEST_ID 500
45#define CHEST_COUNT 7
46
47#define KEY_ID 600
48#define KEY_ID_TEXT "600"
49
50#define POINTS_KILL_MIN 3
51#define POINTS_KILL_MAX 9
52
53#define POINTS_KILL_HS 3 // Jei HS, Kiek pridÄ—s prie normaliu tasku
54
55#define POINTS_KILL_VIP_FLAG ACCESS_VIP // VIP access
56#define POINTS_KILL_MIN_VIP 2 // Pridedamas Prie POINTS_KILL_MIN
57#define POINTS_KILL_MAX_VIP 5 // Pridedamas Prie POINTS_KILL_MAX
58
59#define POINTS_KILL_ADMIN_FLAG ACCESS_ADMIN // ADMIN access
60#define POINTS_KILL_MIN_ADMIN 5 // Pridedamas Prie POINTS_KILL_MIN
61#define POINTS_KILL_MAX_ADMIN 7 // Pridedamas Prie POINTS_KILL_MAX
62
63#define DROP_RATE_KEYS 500
64#define DROP_RATE_CHEST 500
65
66#define DROP_RATE_KILL 8
67#define DROP_RATE_PLANT 8
68#define DROP_RATE_DEF 8
69#define DROP_RATE_HOSTAGE 8
70
71#define DROP_RATE_VIP_FLAG ACCESS_VIP
72#define DROP_RATE_KILL_VIP 12
73#define DROP_RATE_EXPLODE_VIP 12
74#define DROP_RATE_PLANT_VIP 12
75
76#define DROP_RATE_DEF_VIP 12
77#define DROP_RATE_HOSTAGE_VIP 12
78
79#define DROP_RATE_ADMIN_FLAG ACCESS_ADMIN
80#define DROP_RATE_KILL_ADMIN 14
81#define DROP_RATE_PLANT_ADMIN 14
82#define DROP_RATE_DEF_ADMIN 14
83#define DROP_RATE_HOSTAGE_ADMIN 14
84
85#define MIN_PASSWORD_LENGTH 4
86#define MIN_CODE_LENGTH 6
87
88#define MARKET_MIN_PRICE 50
89#define MARKET_WAIT_ADD 3
90
91#define HOSTAGE_ESCAPE 5
92#define HOSTAGE_ESCAPE_STEAM 7
93#define HOSTAGE_ESCAPE_VIP 9
94#define HOSTAGE_ESCAPE_ADMIN 12
95#define HOSTAGE_ESCAPE_SADMIN 14
96
97#define HOSTAGE_KILL_PENALTY 15 // Reduce Points
98
99#define BOMB_PLANTED_POINTS 3
100#define BOMB_EXPLODE_POINTS 5
101#define BOMB_DEFUSED_POINTS 7
102
103#define BOMB_PLANTED_POINTS_VIP 5
104#define BOMB_EXPLODE_POINTS_VIP 7
105#define BOMB_DEFUSED_POINTS_VIP 9
106
107#define BOMB_PLANTED_POINTS_ADMIN 7
108#define BOMB_EXPLODE_POINTS_ADMIN 9
109#define BOMB_DEFUSED_POINTS_ADMIN 12
110
111#define BOMB_PLANTED_POINTS_SADMIN 9
112#define BOMB_EXPLODE_POINTS_SADMIN 12
113#define BOMB_DEFUSED_POINTS_SADMIN 15
114
115#define ROUND_WIN_POINTS 24
116
117#define NEED_MIN_PLAYERS 4
118
119new g_logfile[64];
120new bool:gEnd = false;
121
122#define TASKID_REMENU 100
123
124new csgo_password_field;
125
126new colchar[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ }
127
128new cvar_refill_spawn;
129
130// Cvar pointers
131new p_allchat, p_alltalk, p_hidestat, p_teamchat;
132
133// Vars to check if message has already been duplicated
134new alv_sndr, alv_str2[26], alv_str4[101];
135new msg[513];
136new gWarnings[33] = 0;
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];
178
179new aAmount[33], mAmount[33], uniqPrice[MAX];
180
181new const eWeapon[][] =
182{
183"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
184"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
185"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
186"weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
187"weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
188};
189
190new const szWeaponNames[][] =
191{
192"", "P228", "", "Scout", "HE", "XM1014", "C4", "MAC10", "Aug", "SG", "Elite",
193"Five Seven", "UMP45", "SG550", "Galil", "Famas", "USP", "Glock", "AWP", "MP5 Navy", "M249",
194"M3", "M4A1", "TMP", "G3SG1", "FB", "Deagle", "SG552", "AK47", "Knife", "P90"
195};
196
197public plugin_precache()
198{
199 register_dictionary("globaloffensive.txt");
200
201 get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));
202
203 log_errors("-------------------- == --------------------");
204 new Line[512], Data[9][128], Len;
205 AllWeapon++;
206 get_configsdir(Folder, 47);
207 format(SkinFile, 47, "%s/rcsgo/skins.cfg", Folder);
208 format(RangFile, 47, "%s/rcsgo/rangs.cfg", Folder);
209 format(DefaFile, 47, "%s/rcsgo/dskins.cfg", Folder);
210
211 if(file_exists(RangFile))
212 {
213 for(new i; i < file_size(RangFile, 1); i++)
214 {
215 if(i >= MAX_RANGS) {
216 log_errors("[plugin_precache] Increase your MAX_RANGS define.");
217 break;
218 }
219
220 read_file(RangFile, i, Line, 127, Len);
221 parse(Line, Data[0], 31, Data[1], 31);
222
223 copy(Rangs[i], 31, Data[0]);
224 NeedPatirtis[i] = str_to_num(Data[1]);
225 }
226 }
227
228 if(file_exists(SkinFile))
229 {
230 for(new i; i < file_size(SkinFile, 1); i++)
231 {
232 if(AllWeapon >= MAX)
233 {
234 log_errors("[plugin_precache] Increase your MAX define.");
235 break;
236 }
237
238 read_file(SkinFile, i, Line, 512, Len);
239
240 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
241 continue;
242
243 // Ginklas, pavadinimas, v_, p_, chance - old
244 // Ginklas, pavadinimas, v_, p_, chest, chance, number
245 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);
246
247 Weapons[AllWeapon] = str_to_num(Data[0]);
248 copy(WeaponNames[AllWeapon], 63, Data[1]);
249
250 if(ValidMdl(Data[2]))
251 {
252 precache_model(Data[2]);
253 copy(WeaponMdls[AllWeapon], 128, Data[2]);
254
255 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
256 {
257 precache_model(Data[3]);
258 copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
259 }
260 }
261
262 WeaponDrop[AllWeapon] = str_to_num(Data[4]);
263
264 chestsChance[str_to_num(Data[4])][str_to_num(Data[5])] += 1;
265 chestsList[str_to_num(Data[4])][str_to_num(Data[5])][str_to_num(Data[6])] = AllWeapon;
266 log_amx("chestsList[%s][%s][%s] = %d", Data[4], Data[5], Data[6], AllWeapon);
267
268 uniqPrice[AllWeapon] = str_to_num(Data[7]);
269
270 if(Data[8][0] == 'W') weaponRang[AllWeapon] = 4;
271 else if(Data[8][0] == 'B') weaponRang[AllWeapon] = 3;
272 else if(Data[8][0] == 'R') weaponRang[AllWeapon] = 2;
273 else if(Data[8][0] == 'Y') weaponRang[AllWeapon] = 1;
274 else weaponRang[AllWeapon] = 0;
275
276 AllWeapon++;
277 }
278 }
279 if(file_exists(DefaFile))
280 {
281 for(new i; i < file_size(DefaFile, 1); i++)
282 {
283 read_file(DefaFile, i, Line, 127, Len);
284
285 if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
286 continue;
287
288 parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
289
290 if(ValidMdl(Data[1]))
291 {
292 precache_model(Data[1]);
293 copy(DefaultSkin[str_to_num(Data[0])], 47, Data[1]);
294
295 if(file_exists(Data[2]) && strlen(Data[2]) > 5)
296 {
297 precache_model(Data[2]);
298 copy(DefaultSkinP[str_to_num(Data[0])], 47, Data[2]);
299 }
300
301 if(file_exists(Data[3]) && strlen(Data[3]) > 5)
302 {
303 precache_model(Data[3]);
304 copy(DefaultSkinW[str_to_num(Data[0])], 47, Data[3]);
305 }
306 }
307 }
308 }
309
310 precache_sound(SOUND_SOLD);
311
312 g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);
313
314 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);
315 SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables);
316}
317
318public plugin_init()
319{
320 register_plugin(PLUGIN, VERSION, AUTHOR);
321 register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
322
323 register_clcmd("say /menu", "MenuOpen");
324 register_clcmd("say /reg", "RegMenu");
325 register_clcmd("say /register", "TradeMenu");
326 register_clcmd("say /kills", "KillsLeft");
327
328 register_clcmd("say menu", "MenuOpen");
329 register_clcmd("say reg", "RegMenu");
330 register_clcmd("say register", "TradeMenu");
331 register_clcmd("say kills", "KillsLeft");
332
333 register_clcmd("say !menu", "MenuOpen");
334 register_clcmd("say !reg", "RegMenu");
335 register_clcmd("say !register", "TradeMenu");
336 register_clcmd("say !kills", "KillsLeft");
337
338 register_clcmd("say .menu", "MenuOpen");
339 register_clcmd("say .reg", "RegMenu");
340 register_clcmd("say .register", "TradeMenu");
341 register_clcmd("say .kills", "KillsLeft");
342
343 register_clcmd("say /savepass", "SavePassword");
344
345 register_clcmd("say /skins", "cmdUniq");
346
347 register_clcmd("radio1", "MenuOpen");
348
349 register_concmd("Cost", "MarketCost");
350 register_concmd("Gift", "GiftPoint");
351 register_concmd("setAmount", "SetAmount");
352 register_concmd("setMarketAmount", "SetMarketAmount");
353 register_concmd("UserPassword", "PlayerPassword");
354
355 register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");
356 register_event("TextMsg", "TextMsg_Killed_Hostage", "b", "1=4", "2=#Killed_Hostage");
357 register_event("HLTV", "RoundStart", "a", "1=0", "2=0");
358
359 register_forward(FM_ClientUserInfoChanged, "NameChange");
360 register_forward(FM_SetModel, "SetModel");
361
362 register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
363
364 RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
365
366 for(new i; i < sizeof(eWeapon); i++)
367 {
368 if(strlen(eWeapon[i]) > 3)
369 {
370 RegisterHam(Ham_Item_Deploy, eWeapon[i], "WeaponSwitch", 1);
371 }
372 }
373 csgo_password_field = register_cvar("csgo_password_field", "_rcsgo");
374
375 g_msgid_ScreenFade = get_user_msgid("ScreenFade");
376 g_msgid_SyncHud = CreateHudSyncObj();
377 g_msgid_AmmoX = get_user_msgid("AmmoX");
378
379 cvar_refill_spawn = register_cvar("csgo_refill_onspawn", "1");
380
381 p_allchat = register_cvar("sv_allchat", "2");
382 p_hidestat = register_cvar("ac_hidestatus", "0");
383 p_teamchat = register_cvar("ac_teamchat", "0");
384 register_cvar( "csgo_nick_show", "0" );
385
386 p_alltalk = get_cvar_pointer( "sv_alltalk" );
387
388 register_message(get_user_msgid("SayText"), "col_changer");
389
390 set_task(5.0, "LoadConnected");
391 gCanLoad = 0;
392 gCanSave = 0;
393
394 new iEnt = -1;
395 while((iEnt = find_ent_by_class(iEnt, "env_sound")))
396 {
397 DispatchKeyValue(iEnt, "roomtype", "0");
398 DispatchKeyValue(iEnt, "radius", "0");
399 }
400
401 format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
402}
403
404public plugin_cfg()
405{
406 if(!g_hTuple)
407 {
408 g_hTuple = SQL_MakeStdTuple();
409 }
410 return 1;
411}
412
413public plugin_natives()
414{
415 register_native("cs_get_user_points", "native_cs_get_user_points", 1);
416 register_native("cs_set_user_points", "native_cs_set_user_points", 1);
417}
418
419public native_cs_get_user_points(player)
420{
421 return Points[player];
422}
423
424public native_cs_set_user_points(player, prize)
425{
426 Points[player] = prize;
427 SavePoints(player);
428}
429
430public sb_pickup(id)
431{
432 new iPlayers[32], iPlayersNum;
433 get_players(iPlayers, iPlayersNum);
434
435 new szName[32]; get_user_name(id, szName, 31);
436
437 new Random = random_num(1, 100);
438 new point = random_num(50, 300), points = random_num(100, 300), plus = random_num(200, 500);
439
440 if(Random < 5)
441 {
442 drop_keys(id, DROP_RATE_KEYS);
443 }
444 else if(Random < 25)
445 {
446 drop_item(id, DROP_RATE_CHEST);
447 }
448 else if(iPlayersNum >= 0 && iPlayersNum <= 10)
449 {
450 Points[id] += point;
451 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, point);
452 }
453 else if(iPlayersNum >= 11 && iPlayersNum <= 20)
454 {
455 Points[id] += points;
456 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, points);
457 }
458 else if(iPlayersNum >= 21)
459 {
460 Points[id] += plus;
461 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, plus);
462 }
463}
464
465public SavePassword(id)
466{
467 if(!Loged[id])
468 {
469 if(!gRegistered[id])
470 {
471 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
472 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
473 } else {
474 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
475 }
476 return PLUGIN_HANDLED;
477 }
478
479 new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
480 set_user_info(id, passfield, SavedPassword[id]);
481 client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]);
482
483 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
484
485 return PLUGIN_HANDLED;
486}
487
488public KillsLeft(id)
489{
490 if(!Loged[id])
491 {
492 if(!gRegistered[id])
493 {
494 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
495 print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
496 } else {
497 print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
498 }
499 return PLUGIN_HANDLED;
500 }
501
502 if(get_user_flags(id) & ACCESS_ADMIN)
503 {
504 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_75", EVENT, 75 - (Killers[id] % 75), Killers[id] % 75);
505 }
506 else if(get_user_flags(id) & ACCESS_VIP)
507 {
508 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_100", EVENT, 100 - (Killers[id] % 100), Killers[id] % 100);
509 } else {
510 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_125", EVENT, 125 - (Killers[id] % 125), Killers[id] % 125);
511 }
512 return PLUGIN_CONTINUE;
513}
514
515public TextMsg_Killed_Hostage(id)
516{
517 Points[id] -= HOSTAGE_KILL_PENALTY;
518
519 set_hudmessage(255, 0, 0, -1.0, 0.15, 0, 6.0, 2.0);
520 show_hudmessage(id, "%L", LANG_PLAYER, "POINT_REDUCE", HOSTAGE_KILL_PENALTY);
521
522 SavePoints(id);
523}
524
525public Hostage_Rescued()
526{
527 static loguser[80], name[32], id;
528 read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
529 id = get_user_index(name);
530
531 if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
532
533 if(get_user_flags(id) & ACCESS_ADMIN)
534 {
535 Points[id] += HOSTAGE_ESCAPE_ADMIN;
536
537 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
538 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_ADMIN);
539
540 drop_item(id, DROP_RATE_HOSTAGE_ADMIN);
541
542 SavePoints(id);
543 }
544 else if(get_user_flags(id) & ACCESS_VIP)
545 {
546 Points[id] += HOSTAGE_ESCAPE_VIP;
547
548 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
549 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_VIP);
550
551 drop_item(id, DROP_RATE_HOSTAGE_VIP);
552
553 SavePoints(id);
554 }
555 else
556 {
557 Points[id] += HOSTAGE_ESCAPE;
558
559 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
560 show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE);
561
562 drop_item(id, DROP_RATE_HOSTAGE);
563
564 SavePoints(id);
565 }
566}
567
568public LoadConnected()
569{
570 gCanLoad = 1;
571 gCanSave = 1;
572
573 for(new i=1; i <= get_maxplayers(); i++)
574 {
575 if(is_user_connected(i))
576 {
577 add_delay(i);
578 }
579 }
580}
581
582public plugin_end()
583{
584 SQL_FreeHandle(g_hTuple);
585}
586
587public bomb_explode(planter, defuser)
588{
589 if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)
590
591 if(get_user_flags(planter) & ACCESS_ADMIN)
592 {
593 Points[planter] += BOMB_EXPLODE_POINTS_ADMIN;
594
595 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
596 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_ADMIN);
597
598 drop_item(planter, DROP_RATE_PLANT_ADMIN);
599
600 SavePoints(planter);
601 }
602 else if(get_user_flags(planter) & ACCESS_VIP)
603 {
604 Points[planter] += BOMB_EXPLODE_POINTS_VIP;
605
606 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
607 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_VIP);
608
609 drop_item(planter, DROP_RATE_PLANT_VIP);
610
611 SavePoints(planter);
612 }
613 else
614 {
615 Points[planter] += BOMB_EXPLODE_POINTS;
616
617 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
618 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS);
619
620 drop_item(planter, DROP_RATE_PLANT);
621
622 SavePoints(planter);
623 }
624}
625
626public bomb_planted(planter)
627{
628 if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)
629
630 if(get_user_flags(planter) & ACCESS_ADMIN)
631 {
632 Points[planter] += BOMB_PLANTED_POINTS_ADMIN;
633
634 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
635 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_ADMIN);
636
637 drop_item(planter, DROP_RATE_PLANT_ADMIN);
638
639 SavePoints(planter);
640 }
641 else if(get_user_flags(planter) & ACCESS_VIP)
642 {
643 Points[planter] += BOMB_PLANTED_POINTS_VIP;
644
645 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
646 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_VIP);
647
648 drop_item(planter, DROP_RATE_PLANT_VIP);
649
650 SavePoints(planter);
651 }
652 else
653 {
654 Points[planter] += BOMB_PLANTED_POINTS;
655
656 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
657 show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS);
658
659 drop_item(planter, DROP_RATE_PLANT);
660
661 SavePoints(planter);
662 }
663}
664
665public bomb_defused(defuser)
666{
667 if(is_user_connected(defuser) && get_playersnum() >= NEED_MIN_PLAYERS)
668
669 if(get_user_flags(defuser) & ACCESS_ADMIN)
670 {
671 Points[defuser] += BOMB_DEFUSED_POINTS_ADMIN;
672
673 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
674 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_ADMIN);
675
676 drop_item(defuser, DROP_RATE_DEF_ADMIN);
677
678 SavePoints(defuser);
679 }
680 else if(get_user_flags(defuser) & ACCESS_VIP)
681 {
682 Points[defuser] += BOMB_DEFUSED_POINTS_VIP;
683
684 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
685 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_VIP);
686
687 drop_item(defuser, DROP_RATE_DEF_VIP);
688
689 SavePoints(defuser);
690 }
691 else
692 {
693 Points[defuser] += BOMB_DEFUSED_POINTS;
694
695 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
696 show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS);
697
698 drop_item(defuser, DROP_RATE_DEF);
699
700 SavePoints(defuser);
701 }
702}
703
704public RoundStart()
705{
706 gEnd = false;
707}
708
709public Message_SendAudio(iMsgId, iMsgDest, id)
710{
711 if(!id && !gEnd && get_playersnum() >= NEED_MIN_PLAYERS)
712 {
713 new szSound[14]; get_msg_arg_string(2, szSound, charsmax(szSound));
714 new iPlayers[32], iNum, tId;
715
716 if(equal(szSound, "%!MRAD_ctwin"))
717 {
718 get_players(iPlayers, iNum, "ceh", "CT");
719
720 for(new i; i < iNum; i++)
721 {
722 tId = iPlayers[i];
723
724 if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_CT)
725 {
726 continue;
727 }
728
729 Points[tId] += ROUND_WIN_POINTS;
730
731 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
732 show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
733
734 SavePoints(tId);
735 SaveData(tId);
736 }
737 gEnd = true;
738 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CT_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
739 }
740 else if( equal(szSound, "%!MRAD_terwin") )
741 {
742 get_players(iPlayers, iNum, "ceh", "TERRORIST");
743
744 for(new i; i < iNum; i++)
745 {
746 tId = iPlayers[i];
747
748 if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_T)
749 {
750 continue;
751 }
752
753 Points[tId] += ROUND_WIN_POINTS;
754
755 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
756 show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
757
758 SavePoints(tId);
759 SaveData(tId);
760 }
761 gEnd = true;
762 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "T_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
763 }
764 }
765}
766
767public PlayerSpawn(id)
768{
769 if(is_user_alive(id))
770 {
771 if(!Loged[id] && gRegistered[id])
772 {
773 RegMenu(id);
774 set_user_maxspeed(id, 1.0);
775
776 if(!equal(Password[id], SavedPassword[id]))
777 {
778 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
779 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
780 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
781 }
782 }
783
784 if(!gRegistered[id])
785 {
786 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
787 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
788 }
789
790 if(get_pcvar_num(cvar_refill_spawn))
791 {
792 static iWeapons[32], iNum, i, iGun; iNum = 0;
793 get_user_weapons(id, iWeapons, iNum);
794
795 for( i = 0; i < iNum; i++ )
796 {
797 for (new a = 0; a < sizeof (g_other_weapons); a++)
798 if (iWeapons[i] == g_other_weapons[a])
799 continue;
800
801 for (new a = 0; a < sizeof (g_weapons); a++)
802 {
803
804 if(g_weapons[a] == iWeapons[i])
805 {
806 if (get_weapon_maxclip(iWeapons[i]))
807 {
808 iGun = has_user_weapon(id, iWeapons[i]);
809 client_cmd(id, "spk ^"items/9mmclip1.wav^"");
810 cs_set_weapon_ammo(iGun, get_weapon_maxclip(iWeapons[i]));
811 SetFullBpAmmo(id, iWeapons[i]);
812 }
813 }
814 }
815 }
816 }
817
818 if(cs_get_user_team(id) == CS_TEAM_CT)
819 {
820 cs_set_user_defuse(id, 1);
821 }
822 }
823 return PLUGIN_CONTINUE;
824}
825
826public col_changer( msg_id, msg_dest, rcvr )
827{
828 new str2[26];
829 get_msg_arg_string( 2, str2, 25 );
830 if( equal( str2, "#Cstrike_Chat", 13 ) )
831 {
832 new str3[22];
833 get_msg_arg_string( 3, str3, 21 );
834
835 if( !strlen( str3 ) )
836 {
837 new str4[101];
838 get_msg_arg_string( 4, str4, 100 );
839 new sndr = get_msg_arg_int( 1 );
840
841 new bool:is_team_msg = !bool:equal( str2, "#Cstrike_Chat_All", 17 );
842
843 new sndr_team = get_user_team( sndr );
844 new bool:is_sndr_spec = !bool:( 0 < sndr_team < 3 );
845
846 new bool:same_as_last = bool:( alv_sndr == sndr && equal( alv_str2, str2 ) && equal( alv_str4, str4) );
847
848 if( !same_as_last )
849 { // Duplicate message once
850 new allchat = clamp( get_pcvar_num( p_allchat ), 0, 2 );
851 if( allchat == 2 || ( allchat == 1 && clamp( get_pcvar_num( p_alltalk ), 0, 1 ) == 1 ) )
852 {
853 if( !( is_team_msg && ( is_sndr_spec || is_team_msg && get_pcvar_num( p_teamchat ) == 0 ) ) )
854 { // Don't duplicate if it's a spectator team message
855 new flags[5], team[10];
856 if( is_user_alive( sndr ) ) flags = "bch";
857 else flags = "ach";
858
859 if( is_team_msg )
860 {
861 add( flags[strlen( flags )], 4, "e" );
862 if( sndr_team == 1 ) team = "TERRORIST";
863 else team = "CT";
864 }
865
866 new players[32], num;
867 get_players( players, num, flags, team );
868
869 buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 ); // normal colors
870
871 for( new i=0; i < num; i++ )
872 {
873 message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, players[i] );
874 write_byte( sndr );
875 write_string( msg );
876 message_end();
877 }
878
879 }
880
881 alv_sndr = sndr;
882 alv_str2 = str2;
883 alv_str4 = str4;
884
885 if(task_exists(411))
886 remove_task(411);
887
888 set_task( 0.1, "task_clear_antiloop_vars", 411 );
889 }
890 }
891
892 if(gLogged[sndr])
893 {
894 if( !same_as_last )
895 buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 );
896
897 set_msg_arg_string( 2, msg );
898 set_msg_arg_string( 4, "" );
899 }
900 }
901 }
902 return PLUGIN_CONTINUE;
903}
904
905public buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[ ] )
906{
907 new sndr_name[33];
908 get_user_name( sndr, sndr_name, 32);
909
910 new prefix[126] = "^x01";
911 if( get_pcvar_num( p_hidestat ) == 0 )
912 {
913 if( is_sndr_spec ) prefix = "^x01*SPEC* ";
914 else if( !is_user_alive( sndr ) ) prefix = "^x01*DEAD* ";
915 }
916
917 if(is_user_connected(sndr))
918 {
919 if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_RCON)
920 {
921 new szMsg[64];
922 format(szMsg, sizeof(szMsg)-1, "^4[Savininkas] | [%s] ", Rangs[Rang[sndr]]);
923 add(prefix[strlen(prefix)-1], 64, szMsg);
924 }
925
926 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_B)
927 {
928 new szMsg[64];
929 format(szMsg, sizeof(szMsg)-1, "^4[Vyr. Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
930 add(prefix[strlen(prefix)-1], 64, szMsg);
931 }
932
933 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_C)
934 {
935 new szMsg[64];
936 format(szMsg, sizeof(szMsg)-1, "^4[Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
937 add(prefix[strlen(prefix)-1], 64, szMsg);
938 }
939
940 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_D)
941 {
942 new szMsg[64];
943 format(szMsg, sizeof(szMsg)-1, "^4[Administratorius] | [%s] ", Rangs[Rang[sndr]]);
944 add(prefix[strlen(prefix)-1], 64, szMsg);
945 }
946
947 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_E)
948 {
949 new szMsg[64];
950 format(szMsg, sizeof(szMsg)-1, "^4[ADMIN] | [%s] ", Rangs[Rang[sndr]]);
951 add(prefix[strlen(prefix)-1], 64, szMsg);
952 }
953
954 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_H)
955 {
956 new szMsg[64];
957 format(szMsg, sizeof(szMsg)-1, "^4[VIP] | [%s] ", Rangs[Rang[sndr]]);
958 add(prefix[strlen(prefix)-1], 64, szMsg);
959 }
960
961 else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_USER)
962 {
963 new szMsg[64];
964 format(szMsg, sizeof(szMsg)-1, "^4[%s] ", Rangs[Rang[sndr]]);
965 add(prefix[strlen(prefix)-1], 64, szMsg);
966 }
967
968 else if(!gLogged[sndr])
969 {
970 new szMsg[64];
971 format(szMsg, sizeof(szMsg)-1, "^4[Neprisijunges] ");
972 add(prefix[strlen(prefix)-1], 29, szMsg);
973 }
974 }
975
976 if( is_team_msg )
977 {
978 if( is_sndr_spec ) prefix = "^x01(Spectator) ";
979 else if( sndr_team == 1 ) add( prefix[strlen(prefix)-1], 29, "^x01(Terrorist) " );
980 else if( sndr_team == 2 ) add( prefix[strlen(prefix)-1], 29, "^x01(Counter-Terrorist) " );
981 }
982
983 format( msg, 512, "%s%s%s : %s%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, colchar[msgcol], str4 );
984 return PLUGIN_HANDLED;
985}
986
987public task_clear_antiloop_vars( )
988{
989 alv_sndr = 0;
990 alv_str2 = "";
991 alv_str4 = "";
992
993 return PLUGIN_HANDLED;
994}
995
996public MenuOpen(id)
997{
998 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
999
1000 aAmount[id] = 1;
1001 MenuMod[id] = 0;
1002 Menu(id);
1003 return PLUGIN_HANDLED;
1004}
1005
1006public client_death(Killer, Victim, wpnindex, hitplace, TK)
1007{
1008 if(Killer == Victim) { return PLUGIN_HANDLED; }
1009
1010 if(!gRegistered[Victim])
1011 {
1012 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1013 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1014 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1015 client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
1016 }
1017
1018 if(!gRegistered[Killer])
1019 {
1020 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1021 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
1022 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
1023 client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
1024 }
1025
1026 Patirtis[Killer] += 3;
1027 Kills[Killer]++;
1028
1029 Killers[Killer]++;
1030
1031 static kGun; kGun = get_user_weapon(Killer, _, _);
1032 new szName[32]; get_user_name(Killer, szName, 31);
1033
1034 new rNum; rNum = random(CHEST_COUNT)+1;
1035
1036 new Point = random_num(2000, 8000);
1037
1038 if(bUsingGuns[Killer][kGun])
1039 {
1040 uWeaponKills[bUsingGuns[Killer][kGun]][Killer]++;
1041 SaveGunsKills(Killer);
1042 set_task(0.1, "UpdateStatusText", Killer);
1043 }
1044
1045 if(Rang[Killer] < sizeof(Rangs) && Rang[Killer] < file_size(RangFile, 1))
1046 {
1047 if(Patirtis[Killer] >= NeedPatirtis[Rang[Killer]])
1048 {
1049 Rang[Killer]++;
1050
1051 pKey[Killer] += Rang[Killer];
1052 Chest[Killer][rNum] += Rang[Killer];
1053 Points[Killer] += Point;
1054
1055 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_PASIEKE", Prefix, szName, Rangs[Rang[Killer]]);
1056 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_BONUS", Prefix, szName, Rang[Killer], Rang[Killer], Point);
1057
1058 SaveRang(Killer);
1059 SaveKeys(Killer);
1060 SaveChests(Killer);
1061 }
1062
1063 }
1064
1065 if(Killers[Killer] % 75 == 0 && get_user_flags(Killer) & ACCESS_ADMIN)
1066 {
1067 drop_keys(Killer , DROP_RATE_KEYS);
1068 Killers[Killer] = 0;
1069 }
1070 else if(Killers[Killer] % 100 == 0 && get_user_flags(Killer) & ACCESS_VIP)
1071 {
1072 drop_keys(Killer , DROP_RATE_KEYS);
1073 Killers[Killer] = 0;
1074 }
1075 else if(Killers[Killer] % 125 == 0)
1076 {
1077 drop_keys(Killer , DROP_RATE_KEYS);
1078 Killers[Killer] = 0;
1079 }
1080
1081 new pPont, vPont, hsPont;
1082 pPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);
1083
1084 if(hitplace == HIT_HEAD) { pPont += hsPont = POINTS_KILL_HS; }
1085
1086 Points[Killer] += pPont;
1087
1088 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1089 {
1090 vPont += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
1091 Points[Killer] += vPont;
1092 }
1093 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1094 {
1095 vPont += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
1096 Points[Killer] += vPont;
1097 }
1098
1099 set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
1100
1101 if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
1102 {
1103 if(hitplace == HIT_HEAD)
1104 {
1105 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1106
1107 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1108 }
1109 else
1110 {
1111 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1112
1113 drop_item(Killer, DROP_RATE_KILL_ADMIN);
1114 }
1115 }
1116 else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
1117 {
1118 if(hitplace == HIT_HEAD)
1119 {
1120 show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
1121
1122 drop_item(Killer, DROP_RATE_KILL_VIP);
1123 }
1124 else
1125 {
1126 show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
1127
1128 drop_item(Killer, DROP_RATE_KILL_VIP);
1129 }
1130 }
1131 else
1132 {
1133 if(hitplace == HIT_HEAD)
1134 {
1135 show_hudmessage(Killer, "^n%L +%d HS", LANG_PLAYER, "POINT", pPont, hsPont);
1136 }
1137 else
1138 {
1139 show_hudmessage(Killer, "^n%L", LANG_PLAYER, "POINT", pPont);
1140 }
1141 }
1142
1143 drop_item(Killer, DROP_RATE_KILL);
1144
1145 SavePoints(Killer);
1146 SaveKillers(Killer);
1147
1148 return PLUGIN_CONTINUE;
1149}
1150
1151public SetModel(entity, model[])
1152{
1153 if(!pev_valid(entity))
1154 return FMRES_IGNORED;
1155
1156 static Classname[32]; pev(entity, pev_classname, Classname, sizeof(Classname));
1157
1158 if(!equal(Classname, "weaponbox"))
1159 return FMRES_IGNORED;
1160
1161 static iOwner; iOwner = pev(entity, pev_owner);
1162 static iWeapon; iWeapon = get_user_weapon(iOwner, _, _);
1163 static weapon; weapon = find_ent_by_owner(-1, eWeapon[iWeapon], entity);
1164
1165 if(bUsingGuns[iOwner][iWeapon] && !pev(weapon, pev_impulse))
1166 {
1167 if(!pev_valid(weapon))
1168 return FMRES_IGNORED;
1169
1170 set_pev(weapon, pev_impulse, bUsingGuns[iOwner][iWeapon]);
1171
1172 if(strlen(DefaultSkinW[iWeapon]) > 5)
1173 {
1174 entity_set_model(entity, DefaultSkinW[iWeapon]);
1175
1176 return FMRES_SUPERCEDE;
1177 }
1178 return FMRES_IGNORED;
1179 }
1180
1181 return FMRES_IGNORED;
1182}
1183
1184public MarketCost(id)
1185{
1186 if(inMarket[id] || !Loged[id])
1187 return PLUGIN_HANDLED;
1188
1189 new Data[32], Cost;
1190 read_args(Data, 31);
1191 remove_quotes(Data);
1192
1193 Cost = str_to_num(Data);
1194
1195 if(Cost < 0)
1196 {
1197 client_cmd(id, "messagemode Cost");
1198 return PLUGIN_HANDLED;
1199 }
1200 else if(MARKET_MIN_PRICE > Cost)
1201 {
1202 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
1203 client_cmd(id, "messagemode Cost");
1204 MarketPoints[id] = MARKET_MIN_PRICE;
1205 Menu(id);
1206 MenuMod[id] = 3;
1207 return PLUGIN_HANDLED;
1208 }
1209 else
1210 {
1211 MarketPoints[id] = Cost;
1212 Menu(id);
1213 MenuMod[id] = 3;
1214 return PLUGIN_CONTINUE;
1215 }
1216}
1217public SetMarketAmount(id)
1218{
1219 if(!Loged[id])
1220 return PLUGIN_HANDLED;
1221
1222 new Data[32], Cost;
1223 read_args(Data, 31);
1224 remove_quotes(Data);
1225
1226 Cost = str_to_num(Data);
1227
1228 if(Cost < 1)
1229 {
1230 client_cmd(id, "messagemode setMarketAmount");
1231 return PLUGIN_HANDLED;
1232 }
1233 else
1234 {
1235 mAmount[id] = Cost;
1236 Menu(id);
1237 MenuMod[id] = 3;
1238 }
1239 return PLUGIN_HANDLED;
1240}
1241public SetAmount(id)
1242{
1243 if(!Loged[id])
1244 return PLUGIN_HANDLED;
1245
1246 new Data[32], Cost;
1247 read_args(Data, 31);
1248 remove_quotes(Data);
1249
1250 Cost = str_to_num(Data);
1251
1252 if(Cost < 0)
1253 {
1254 client_cmd(id, "messagemode setAmount");
1255 return PLUGIN_HANDLED;
1256 }
1257 else
1258 {
1259 aAmount[id] = Cost;
1260 Menu(id);
1261 MenuMod[id] = 5;
1262 }
1263 return PLUGIN_HANDLED;
1264}
1265public GiftPoint(id)
1266{
1267 if(inMarket[id] || !Loged[id])
1268 return PLUGIN_HANDLED;
1269
1270 new Data[32], Cost;
1271 read_args(Data, 31);
1272 remove_quotes(Data);
1273
1274 Cost = str_to_num(Data);
1275
1276 if(Cost < 0 || Points[id] < Cost)
1277 {
1278 client_cmd(id, "messagemode Gift");
1279 return PLUGIN_HANDLED;
1280 }
1281 else
1282 {
1283 aPoints[id] = Cost;
1284 Menu(id);
1285 MenuMod[id] = 5;
1286 return PLUGIN_CONTINUE;
1287 }
1288}
1289
1290public WeaponSwitch(Weapon)
1291{
1292 new id = get_pdata_cbase(Weapon, 41, 4);
1293 new wid = cs_get_weapon_id(Weapon);
1294
1295 if(id > 32 || id < 1)
1296 {
1297 return HAM_SUPERCEDE;
1298 }
1299
1300 if(!is_user_connected(id))
1301 {
1302 return HAM_SUPERCEDE;
1303 }
1304
1305 if(pev(Weapon, pev_impulse))
1306 {
1307 set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
1308
1309 if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5)
1310 {
1311 set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
1312 }
1313 }
1314 else if(bUsingGuns[id][wid])
1315 {
1316 set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
1317
1318 if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5)
1319 {
1320 set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
1321 }
1322 set_task(0.1, "UpdateStatusText", id);
1323 }
1324 else if(strlen(DefaultSkin[wid]) > 5)
1325 {
1326 if(cs_get_user_team(id) == CS_TEAM_CT && wid == 29) { wid = 31; }
1327
1328 set_pev(id, pev_viewmodel2, DefaultSkin[wid]);
1329
1330 if(strlen(DefaultSkinP[wid]) > 5)
1331 {
1332 set_pev(id, pev_weaponmodel2, DefaultSkinP[wid]);
1333 }
1334 set_task(0.1, "UpdateStatusText", id);
1335 }
1336 else
1337 {
1338 set_task(0.1, "UpdateStatusText", id);
1339 }
1340
1341 return HAM_IGNORED;
1342}
1343
1344public Menu(id)
1345{
1346 if(!Loged[id]) { RegMenu(id); return; }
1347
1348 new sMenu, szText[256];
1349
1350 switch(MenuMod[id])
1351 {
1352 case -2: // Kazkas su dovanom
1353 {
1354 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1355 sMenu = menu_create(szText, "MenuHandler");
1356
1357 new String[32], All;
1358 for(new i = 1; i < AllWeapon; i++)
1359 {
1360 if(uWeapon[i][id] <= 0)
1361 continue;
1362
1363 num_to_str(i, String, 31);
1364 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1365 menu_additem(sMenu, szText, String);
1366 All++;
1367 }
1368
1369 for(new i=1; i <=CHEST_COUNT; i++)
1370 {
1371 if(Chest[id][i] > 0)
1372 {
1373 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1374
1375 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
1376 menu_additem(sMenu, szText, szButton);
1377
1378 All++;
1379 }
1380 }
1381
1382 if(pKey[id] > 0)
1383 {
1384 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1385 menu_additem(sMenu, szText, KEY_ID_TEXT);
1386 All++;
1387 }
1388
1389 if(All == 0)
1390 {
1391 MenuMod[id] = 0;
1392 Menu(id);
1393 }
1394 }
1395 case -1: // Deti i turgu
1396 {
1397 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
1398 sMenu = menu_create(szText, "MenuHandler");
1399
1400 new String[32], All;
1401 for(new i = 1; i < AllWeapon; i++)
1402 {
1403 if(uWeapon[i][id] <= 0)
1404 continue;
1405
1406 num_to_str(i, String, 31);
1407 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1408 menu_additem(sMenu, szText, String);
1409 All++;
1410 }
1411
1412 for(new i=1; i <=CHEST_COUNT; i++)
1413 {
1414 if(Chest[id][i] > 0)
1415 {
1416 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1417
1418 new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
1419 menu_additem(sMenu, szText, szButton);
1420
1421 All++;
1422 }
1423 }
1424
1425 if(pKey[id] > 0)
1426 {
1427 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
1428 menu_additem(sMenu, szText, KEY_ID_TEXT);
1429 All++;
1430 }
1431
1432 if(All == 0)
1433 {
1434 MenuMod[id] = 0;
1435 Menu(id);
1436 }
1437 }
1438 case 0:
1439 {
1440 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
1441 sMenu = menu_create(szText, "MenuHandler");
1442
1443 formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUTOSKINS");
1444 menu_additem(sMenu, szText, "1");
1445
1446 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTOCHESTOPEN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1447 menu_additem(sMenu, szText, (!inMarket[id]) ? "2" : "0");
1448
1449 formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUCHESTINFO");
1450 menu_additem(sMenu, szText, "7");
1451
1452 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOMARKET");
1453 menu_additem(sMenu, szText, "3");
1454
1455 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOSHOP");
1456 menu_additem(sMenu, szText, "6");
1457
1458 formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
1459 menu_additem(sMenu, szText, (!inMarket[id]) ? "4" : "0");
1460
1461 formatex(szText, sizeof(szText), "%L %L%L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET", LANG_PLAYER, "MRANG", Rangs[Rang[id]+1], Patirtis[id], NeedPatirtis[Rang[id]]);
1462 menu_additem(sMenu, szText, (!inMarket[id]) ? "5" : "0");
1463 }
1464 case 1: // Skinai
1465 {
1466 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOSKINS", LANG_PLAYER, "YPOINT", Points[id]);
1467 sMenu = menu_create(szText, "MenuHandler");
1468
1469 new String[32], All;
1470 for(new i = 1; i < AllWeapon; i++)
1471 {
1472 if(uWeapon[i][id] <= 0)
1473 continue;
1474
1475 formatex(String, 31, "%d %d", i, Weapons[i]);
1476 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1477 menu_additem(sMenu, szText, String);
1478
1479 All++;
1480 }
1481
1482 if(All == 0)
1483 {
1484 MenuMod[id] = 0;
1485 Menu(id);
1486 }
1487 }
1488 case 2: // Skrynios
1489 {
1490 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w - \r%L %L^n^n%L", LANG_PLAYER, "MENUTOCHESTOPEN", LANG_PLAYER, "YPOINT", Points[id], LANG_PLAYER, "KEYPIECE", pKey[id]);
1491 sMenu = menu_create(szText, "MenuHandler");
1492
1493 new call = menu_makecallback("Call_Back");
1494
1495 for(new i=1; i <=CHEST_COUNT; i++)
1496 {
1497 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
1498 menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && pKey[id] > 0) ? -1 : call);
1499 }
1500 }
1501 case 3: // Turgus
1502 {
1503 aThing[id] = 0;
1504
1505 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOMARKET", LANG_PLAYER, "YPOINT", Points[id]);
1506 sMenu = menu_create(szText, "MenuHandler");
1507 new call = menu_makecallback("Call_Back");
1508
1509 aThing[32] = 0;
1510
1511 new String[32], All;
1512 new Name[32]; get_user_name(id, Name, 31);
1513
1514 if(!inMarket[id])
1515 {
1516 for(new i = 1; i < AllWeapon; i++)
1517 {
1518 if(i == WeaponinMarket[id] && uWeapon[i][id] > 0)
1519 {
1520 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACES", WeaponNames[i], szWeaponNames[Weapons[i]], MarketPoints[id]);
1521 All = 50;
1522 }
1523 }
1524
1525 // log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
1526 if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
1527 {
1528 for(new i=1; i <=CHEST_COUNT; i++)
1529 {
1530 // log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
1531 if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
1532 {
1533 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
1534
1535 All++;
1536 break;
1537 }
1538 }
1539 }
1540
1541 if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
1542 {
1543 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEK", MarketPoints[id], mAmount[id]);
1544 All++;
1545 }
1546
1547 if(All == 0)
1548 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
1549
1550 menu_additem(sMenu, szText, "-1");
1551
1552 if(All != 50)
1553 {
1554 formatex(szText, sizeof(szText), "Kiekis: \r%d", mAmount[id]);
1555 menu_additem(sMenu, szText, "-99");
1556 }
1557 }
1558
1559
1560 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, (!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
1561 menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
1562
1563 for(new x = 1; x <= get_maxplayers(); x++)
1564 {
1565 if(!is_user_connected(x) || is_user_bot(x))
1566 continue;
1567
1568 if(inMarket[x] && MarketPoints[x] > 0)
1569 {
1570 num_to_str(x, String, 31);
1571
1572 if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
1573 {
1574 // log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
1575
1576 new chId = (WeaponinMarket[x]-CHEST_ID)+1;
1577
1578 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);
1579 menu_additem(sMenu, szText, String);
1580 }
1581 else if(KEY_ID == WeaponinMarket[x])
1582 {
1583 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK", MarketPoints[x], mAmount[x] > pKey[x] ? pKey[x] : mAmount[x], Name);
1584 menu_additem(sMenu, szText, String);
1585 }
1586 else
1587 {
1588 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS", WeaponNames[WeaponinMarket[x]], szWeaponNames[Weapons[WeaponinMarket[x]]], MarketPoints[x], Name);
1589 menu_additem(sMenu, szText, String);
1590 }
1591 }
1592 }
1593 }
1594 case 4: // Keitykla
1595 {
1596 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, "YPOINT", Points[id]);
1597 sMenu = menu_create(szText, "MenuHandler");
1598
1599 new String[32], All;
1600
1601 for(new i = 1; i < AllWeapon; i++)
1602 {
1603 if(uWeapon[i][id] == 0 || weaponRang[i] == 0)
1604 continue;
1605
1606 num_to_str(i, String, 31);
1607 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
1608 menu_additem(sMenu, szText, String);
1609 All++;
1610 }
1611
1612 if(All == 0)
1613 {
1614 MenuMod[id] = 0;
1615 Menu(id);
1616 }
1617 }
1618 case 5: // Dovanos
1619 {
1620 formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, "YPOINT", Points[id]);
1621 sMenu = menu_create(szText, "MenuHandler");
1622 new call = menu_makecallback("Call_Back");
1623
1624 new All, Name[126], String[32];
1625 get_user_name(aTarget[id], Name, 31);
1626
1627 if(aTarget[id] > 0)
1628 {
1629 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
1630 menu_additem(sMenu, szText, "-1");
1631
1632 for(new i = 1; i < AllWeapon; i++)
1633 {
1634 if(i == aThing[id] && uWeapon[i][id] > 0)
1635 {
1636 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", WeaponNames[i]);
1637 menu_additem(sMenu, szText, "-2");
1638 All++;
1639 }
1640 }
1641
1642 if(aThing[id] <= MAX && All == 0)
1643 {
1644 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
1645 menu_additem(sMenu, szText, "-2");
1646 }
1647 else if(aThing[id] > MAX)
1648 {
1649 if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
1650 if(KEY_ID == aThing[id]) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK"); }
1651
1652 menu_additem(sMenu, szText, "-2");
1653 }
1654 if(aThing[id] > MAX)
1655 {
1656 formatex(szText, sizeof(szText), "Kiekis: \r%d", aAmount[id]);
1657 menu_additem(sMenu, szText, "-75");
1658 }
1659
1660 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
1661 menu_additem(sMenu, szText, "-4");
1662
1663 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
1664 menu_additem(sMenu, szText, "-3");
1665 }
1666 else
1667 {
1668 for(new i = 1; i <= get_maxplayers(); i++)
1669 {
1670 if(is_user_connected(i) && !is_user_bot(i))
1671 {
1672 get_user_name(i, Name, 31);
1673
1674 if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
1675
1676 num_to_str(i, String, 31);
1677 menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
1678 }
1679 }
1680 }
1681 }
1682 case 6: // ParduotuvÄ—
1683 {
1684 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "PMAIN", LANG_PLAYER, "YPOINT", Points[id]);
1685 sMenu = menu_create(szText, "MenuHandler");
1686
1687 new call = menu_makecallback("Call_Back");
1688 new accesNum = get_access(id);
1689 new Float:gPercent = ((accesNum == 4) ? 0.9 : ((accesNum == 3) ? 0.94 : (accesNum == 2) ? 0.97 : 1.0));
1690
1691 new gPrice = floatround(1700*gPercent, floatround_floor);
1692 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", gPrice);
1693 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1694
1695 gPrice = floatround(8000*gPercent, floatround_floor);
1696 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_5", gPrice);
1697 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1698
1699 gPrice = floatround(14000*gPercent, floatround_floor);
1700 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_10", gPrice);
1701 menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
1702
1703 for(new i=1; i <=CHEST_COUNT; i++)
1704 {
1705 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), 1250);
1706 menu_additem(sMenu, szText, _, _, (Points[id] < 1250) ? call : -1);
1707 }
1708 }
1709 case 7: // Skrynių info
1710 {
1711 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "IMAIN", LANG_PLAYER, "YPOINT", Points[id]);
1712 sMenu = menu_create(szText, "MenuHandler");
1713
1714 for(new i=1; i <=CHEST_COUNT; i++)
1715 {
1716 formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTINFOPIECE", chest_name(i));
1717 menu_additem(sMenu, szText);
1718 }
1719 }
1720 }
1721 menu_display(id, sMenu);
1722}
1723
1724public Call_Back(id, menu, item)
1725 return ITEM_DISABLED;
1726
1727public MenuHandler(id, gMenu, item)
1728{
1729 if(item == MENU_EXIT)
1730 {
1731 MenuMod[id] = 0;
1732 menu_destroy(gMenu);
1733 return PLUGIN_HANDLED;
1734 }
1735
1736 new aMenu[2], Data[4][32], sKey[32], Name[32], mName[32], Key;
1737 menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
1738
1739 parse(Data[0], sKey, 31);
1740 Key = str_to_num(sKey);
1741
1742 switch(MenuMod[id])
1743 {
1744 case -2:
1745 {
1746 MenuMod[id] = 5;
1747 aThing[id] = Key;
1748
1749 Menu(id);
1750 }
1751 case -1:
1752 {
1753 MenuMod[id] = 3;
1754 WeaponinMarket[id] = Key;
1755
1756 client_cmd(id, "messagemode Cost");
1757
1758 Menu(id);
1759 }
1760 case 0:
1761 {
1762 MenuMod[id] = Key;
1763 Menu(id);
1764
1765 }
1766 case 1:
1767 {
1768 parse(Data[0], Data[2], 31, Data[3], 31);
1769
1770 if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2])) {
1771 bUsingGuns[id][str_to_num(Data[3])] = 0;
1772 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])]);
1773 } else {
1774 bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
1775 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])]);
1776 set_task(0.1, "UpdateStatusText", id);
1777 }
1778
1779 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
1780 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
1781 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
1782
1783 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1784
1785 log_errors("[SKIN CHANGE] %s", szQuery);
1786
1787 MenuMod[id] = 1;
1788 Menu(id);
1789 }
1790 case 2:
1791 {
1792 if(Chest[id][(item+1)] <= 0)
1793 {
1794 Chest[id][(item+1)] = 0;
1795
1796 if(pKey[id] < 0)
1797 pKey[id] = 0;
1798
1799 return PLUGIN_CONTINUE;
1800 }
1801
1802 Chest[id][(item+1)]--;
1803 pKey[id]--;
1804
1805 new chest = item+1;
1806
1807 new Float:rNum = random_float((random(5)*1.0), 175.0);
1808 new chance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : 100 ));
1809 ///////////////////////////////////////////
1810 new skinsCnt = chestsChance[chest][chance];
1811 new skinNum = random(skinsCnt);
1812 new skinId = chestsList[chest][chance][skinNum];
1813
1814 new szName[32]; get_user_name(id, szName, 31);
1815
1816
1817 if(1 <= chance <= 25) { print_color(0, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
1818 else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_SELF", Prefix, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
1819
1820 uWeapon[skinId][id]++;
1821 SaveData(id);
1822
1823 new szMotd[126]; formatex(szMotd, charsmax(szMotd), "http://185.80.128.125/pbgo/b.php?item=%d_%d_%d&chest=%d", chest, chance, skinNum, chest);
1824 show_motd(id, szMotd, chest_name((item+1)));
1825 Menu(id);
1826 }
1827 case 3:
1828 {
1829 if(Key == -1) { MenuMod[id] = -1; Menu(id); }
1830 else if(Key == 0)
1831 {
1832 if(inMarket[id]) { inMarket[id] = false; }
1833 else if(MarketPoints[id] > 0)
1834 {
1835 if(mAmount[id] < 1) mAmount[id] = 1;
1836 get_user_name(id, Name, 31);
1837
1838 switch(WeaponinMarket[id])
1839 {
1840 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]); }
1841 case KEY_ID: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, mAmount[id], MarketPoints[id]); }
1842 default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, WeaponNames[WeaponinMarket[id]], szWeaponNames[Weapons[WeaponinMarket[id]]], MarketPoints[id]); }
1843 }
1844
1845 inMarket[id] = true;
1846 }
1847 gLastMarketTime[id] = get_systime();
1848 Menu(id);
1849 }
1850
1851
1852 else if(Key == -99)
1853 {
1854 client_cmd(id, "messagemode setMarketAmount");
1855 }
1856 else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
1857 {
1858 get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
1859
1860 if(WeaponinMarket[Key] < CHEST_ID)
1861 {
1862 if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
1863 {
1864 inMarket[Key] = false;
1865 MarketPoints[Key] = 0;
1866 WeaponinMarket[Key] = 0;
1867
1868 return PLUGIN_CONTINUE;
1869 }
1870
1871 print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
1872 uWeapon[WeaponinMarket[Key]][id]++;
1873 uWeapon[WeaponinMarket[Key]][Key]--;
1874
1875 if(!uWeapon[WeaponinMarket[Key]][Key])
1876 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
1877
1878 static szQuery[512], szUGuns[128];
1879 format(szUGuns, sizeof(szUGuns), "");
1880 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
1881 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
1882
1883 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1884
1885 log_errors("[SKIN SHOP] %s", szQuery);
1886
1887 format(szUGuns, sizeof(szUGuns), "");
1888 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
1889 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
1890
1891 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
1892
1893 log_errors("[SKIN SHOP] %s", szQuery);
1894 }
1895 else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
1896 {
1897 new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
1898
1899 if(Chest[Key][chId] <= 0)
1900 {
1901 inMarket[Key] = false;
1902 MarketPoints[Key] = 0;
1903 WeaponinMarket[Key] = 0;
1904
1905 return PLUGIN_CONTINUE;
1906 }
1907 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);
1908
1909 Chest[id][chId]++;
1910 Chest[Key][chId]--;
1911 }
1912 else if(WeaponinMarket[Key] == KEY_ID)
1913 {
1914 if(pKey[Key] <= 0)
1915 {
1916 inMarket[Key] = false;
1917 MarketPoints[Key] = 0;
1918 WeaponinMarket[Key] = 0;
1919
1920 return PLUGIN_CONTINUE;
1921 }
1922
1923 client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, MarketPoints[Key], Name);
1924
1925 pKey[id]++; pKey[Key]--;
1926 }
1927
1928 emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
1929 Points[Key] += MarketPoints[Key];
1930 Points[id] -= MarketPoints[Key];
1931 SaveData(Key);
1932 SaveData(id);
1933 mAmount[Key]--;
1934
1935 if(mAmount[Key] <= 0)
1936 {
1937 inMarket[Key] = false;
1938 MarketPoints[Key] = 0;
1939 WeaponinMarket[Key] = 0;
1940 }
1941 MenuMod[id] = 0;
1942 }
1943 }
1944 case 4:
1945 {
1946 new Random = random_num(1, 100);
1947
1948 if(Random < 5 && weaponRang[Key] == 3)
1949 {
1950 new chest = item+1;
1951
1952 new chance = 5;
1953 new skinsCnt = chestsChance[chest][chance];
1954 new skinNum = random(skinsCnt);
1955 new skinId = chestsList[chest][chance][skinNum];
1956
1957 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]]);
1958
1959 uWeapon[skinId][id]++;
1960 SaveData(id);
1961 }
1962 else if(Random < 25 && weaponRang[Key] == 4)
1963 {
1964 new chest = item+1;
1965
1966 new chancerare = 25;
1967 new skinsCntrare = chestsChance[chest][chancerare];
1968 new skinNumrare = random(skinsCntrare);
1969 new skinIdrare = chestsList[chest][chancerare][skinNumrare];
1970
1971 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]]);
1972
1973 uWeapon[skinIdrare][id]++;
1974 SaveData(id);
1975 }
1976 else
1977
1978 if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
1979 {
1980 uWeapon[Key][id]--;
1981
1982 bUsingGuns[id][Weapons[Key]] = 0;
1983
1984 if(!uWeapon[Key][id])
1985 uWeaponKills[Key][id] = 0;
1986
1987 new Points;
1988
1989 if(weaponRang[Key] == 1) Points = random_num(50, 2500); // Y
1990 else if(weaponRang[Key] == 2) Points = random_num(50, 2500); // R
1991 if(weaponRang[Key] == 3) Points = random_num(50, 2500); // B
1992 else if(weaponRang[Key] == 4) Points = random_num(200, 300); // W
1993
1994 cs_set_user_points(id, cs_get_user_points(id) +Points);
1995
1996 client_print_color(id, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "MENUTODUST", get_user_name_ex(id), Points);
1997
1998 log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
1999
2000 SaveData(id);
2001 } else {
2002 uWeapon[Key][id] = 0;
2003 SaveData(id);
2004 }
2005
2006 Menu(id);
2007 }
2008 case 5:
2009 {
2010 if(Key == -1) { aTarget[id] = 0; }
2011 if(Key == -2) { MenuMod[id] = -2; }
2012 if(Key == -3)
2013 {
2014 if(!is_user_connected(aTarget[id]))
2015 {
2016 return PLUGIN_CONTINUE;
2017 }
2018
2019 if(aThing[id] < CHEST_ID)
2020 {
2021 if(uWeapon[aThing[id]][id] > 0)
2022 {
2023 uWeapon[aThing[id]][aTarget[id]]++;
2024 uWeapon[aThing[id]][id]--;
2025
2026 if(!uWeapon[aThing[id]][id])
2027 for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
2028
2029 static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");
2030 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2031 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
2032
2033 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2034
2035 log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
2036 log_errors("[SKIN GIFT] %s", szQuery);
2037
2038 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN");
2039 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), WeaponNames[aThing[id]], szWeaponNames[Weapons[aThing[id]]]);
2040 }
2041 // else client_print_color(id, print_team_default, "Neturi tiek skinu!");
2042 }
2043 else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
2044 {
2045 new cId = aThing[id]-CHEST_ID;
2046 if(Chest[id][cId] >= aAmount[id])
2047 {
2048 Chest[aTarget[id]][cId]+=aAmount[id];
2049 Chest[id][cId]-=aAmount[id];
2050
2051 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST");
2052 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), aAmount[id]);
2053 }
2054 else client_print_color(id, print_team_default, "Neturi tiek skryniu!");
2055 }
2056 else if(aThing[id] == KEY_ID)
2057 {
2058 if(pKey[id] >= aAmount[id])
2059 {
2060 pKey[aTarget[id]]+=aAmount[id]; pKey[id]-=aAmount[id];
2061
2062 client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
2063 print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), aAmount[id]);
2064 }
2065 else client_print_color(id, print_team_default, "Neturi tiek raktu!");
2066 }
2067
2068 if(aPoints[id] > 0 && Points[id] >= aPoints[id])
2069 {
2070 Points[aTarget[id]] += aPoints[id];
2071 Points[id] -= aPoints[id];
2072 client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
2073 log_errors("[SKINLOG PTS] %s padovanojo %s - %d tasku", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
2074 }
2075
2076 SaveData(aTarget[id]);
2077 SaveData(id);
2078
2079 MenuMod[id] = 0;
2080 aThing[id] = 0;
2081 aTarget[id] = 0;
2082 aPoints[id] = 0;
2083 }
2084
2085 if(Key == -75)
2086 {
2087 client_cmd(id, "messagemode setAmount");
2088 }
2089
2090 if(Key == -4) { client_cmd(id, "messagemode Gift"); }
2091 if(Key > 0) { aTarget[id] = Key; }
2092 Menu(id);
2093 }
2094 case 6:
2095 {
2096 new accesNum = get_access(id);
2097 new Float:gPercent = ((accesNum == 4) ? 0.92 : ((accesNum == 3) ? 0.96 : (accesNum == 2) ? 0.98 : 1.0));
2098
2099 switch(item)
2100 {
2101 case 0:
2102 {
2103 Points[id] -= floatround(1700*gPercent, floatround_floor);
2104 pKey[id]++;
2105
2106 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix);
2107 SaveKeys(id);
2108 }
2109 case 1:
2110 {
2111 Points[id] -= floatround(8000*gPercent, floatround_floor);
2112 pKey[id] += 5;
2113
2114 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_5", Prefix);
2115 SaveKeys(id);
2116 }
2117 case 2:
2118 {
2119 Points[id] -= floatround(14000*gPercent, floatround_floor);
2120 pKey[id] += 10;
2121
2122 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_10", Prefix);
2123 SaveKeys(id);
2124 }
2125 case 3..(CHEST_COUNT+3):
2126 {
2127 Chest[id][item-2] += 1;
2128
2129 Points[id] -= 1250;
2130
2131 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, chest_name(item-2));
2132
2133 SaveChests(id);
2134 }
2135 }
2136 }
2137 case 7:
2138 {
2139 new szMotd[126]; formatex(szMotd, charsmax(szMotd), "http://185.80.128.125/pbgo/b.php?chest=%d", (item+1));
2140 show_motd(id, szMotd, chest_name((item+1)));
2141 Menu(id);
2142 }
2143 default: { MenuMod[id] = 0; }
2144 }
2145
2146 menu_destroy(gMenu);
2147 return PLUGIN_HANDLED;
2148}
2149
2150public client_disconnected(id)
2151{
2152 Patirtis[id] = 0, Kills[id] = 0,Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
2153 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2154 for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
2155 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2156
2157 gWarnings[id] = 0;
2158 WeaponinMarket[id] = 0;
2159 MarketPoints[id] = 0;
2160 inMarket[id] = 0;
2161 Password[id] = "";
2162 SavedPassword[id] = "";
2163 Loged[id] = false;
2164 gRegistered[id] = false;
2165 gLogged[id] = false;
2166 bTrade[id] = false;
2167 bTradeAccepted[id] = false;
2168}
2169
2170public client_putinserver(id)
2171{
2172 Patirtis[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
2173 for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
2174 for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
2175 for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
2176
2177 gWarnings[id] = 0;
2178 Password[id] = "";
2179 SavedPassword[id] = "";
2180 Loged[id] = false;
2181 bTrade[id] = false;
2182 bTradeAccepted[id] = false;
2183 gRegistered[id] = false;
2184 gLogged[id] = false;
2185 gLastMarketTime[id] = get_systime();
2186
2187 if(gCanLoad) { set_task(0.5, "Registered", id); }
2188}
2189
2190public add_delay(id)
2191{
2192 switch(id)
2193 {
2194 case 1..8: set_task(0.1, "Registered", id);
2195 case 9..16: set_task(0.2, "Registered", id);
2196 case 17..24: set_task(0.3, "Registered", id);
2197 case 25..32: set_task(0.4, "Registered", id);
2198 }
2199}
2200
2201//============================================================//
2202// [~ Saving / Loading datas ~] //
2203//============================================================//
2204public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
2205{
2206 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2207 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2208}
2209
2210public Login(id)
2211{
2212 if(!is_user_connected(id) || is_user_bot(id))
2213 return;
2214
2215 static szQuery[256], iData[1]; iData[0] = id;
2216 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
2217
2218 SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
2219
2220 log_errors("[LOGIN] %s", szQuery);
2221}
2222
2223public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
2224{
2225 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
2226 else
2227 {
2228 new id = iData[0];
2229
2230 if(SQL_NumResults(hQuery))
2231 {
2232 new szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256], szChests[128];
2233
2234 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
2235 Patirtis[id] = SQL_ReadResult(hQuery, 2);
2236 Kills[id] = SQL_ReadResult(hQuery, 3);
2237 Points[id] = SQL_ReadResult(hQuery, 4);
2238 pKey[id] = SQL_ReadResult(hQuery, 5);
2239 Rang[id] = SQL_ReadResult(hQuery, 7);
2240 Killers[id] = SQL_ReadResult(hQuery, 8);
2241
2242 SQL_ReadResult(hQuery, 9, szSkins, sizeof(szSkins));
2243 SQL_ReadResult(hQuery, 10, szUGuns, sizeof(szUGuns));
2244 SQL_ReadResult(hQuery, 11, szKSkins, sizeof(szKSkins));
2245 SQL_ReadResult(hQuery, 6, szChests, sizeof(szChests));
2246
2247 SQL_NextRow(hQuery);
2248
2249 new myNumbers[512+MAX];
2250
2251 new count = ExplodeString(szSkins, myNumbers);
2252 if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
2253
2254 count = ExplodeString(szKSkins, myNumbers);
2255 if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
2256
2257 count = ExplodeString(szUGuns, myNumbers);
2258 if(count)
2259 {
2260 for(new i = 1; i < CSW_VESTHELM; i++)
2261 {
2262 if(myNumbers[i] <= MAX)
2263 {
2264 if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
2265 {
2266 bUsingGuns[id][i] = myNumbers[i];
2267 }
2268 }
2269 }
2270 }
2271
2272 count = ExplodeString(szChests, myNumbers);
2273 if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
2274
2275 if(!equal(Password[id], SavedPassword[id]))
2276 {
2277 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
2278 }
2279 }
2280 Loged[id] = true;
2281 UnsetBlack(id);
2282 }
2283}
2284
2285public SaveData(id)
2286{
2287 if(Loged[id] && gRegistered[id] && gCanSave)
2288 {
2289 static szQuery[2048], szSkins[1024], szKSkins[1024], szUGuns[128], szChests[128];
2290 format(szSkins, sizeof(szSkins), "");
2291 format(szKSkins, sizeof(szKSkins), "");
2292 format(szUGuns, sizeof(szUGuns), "");
2293 format(szChests, sizeof(szChests), "");
2294
2295
2296 for(new i; i < MAX; i++)
2297 {
2298 format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]);
2299 format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]);
2300 }
2301 for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
2302 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
2303
2304 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);
2305
2306 SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
2307
2308 log_errors("[SAVE] %s", szQuery);
2309 }
2310}
2311
2312public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
2313{
2314 if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
2315 else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
2316}
2317
2318public UnsetBlack(id)
2319{
2320 set_user_maxspeed(id, 250.0);
2321
2322 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
2323 write_short(1<<10);
2324 write_short(1<<10);
2325 write_short(0x0000);
2326 write_byte(255);
2327 write_byte(255);
2328 write_byte(255);
2329 write_byte(50);
2330 message_end();
2331}
2332
2333public TradeMenu(id)
2334{
2335 if(!is_user_connected(id))
2336 return PLUGIN_CONTINUE;
2337
2338 if(bTrade[id])
2339 {
2340 if(bTradeAccepted[id])
2341 {
2342 client_print_color(id, 3, "[Trade] Jus jau tradinate!");
2343 return PLUGIN_CONTINUE;
2344 }
2345
2346 client_print_color(id, 3, "[Trade] Jums jau pasiulytas trade, jei sutinkate rasykita /sutinku arba /taccept");
2347 return PLUGIN_CONTINUE;
2348 }
2349
2350 new Name[32], String[32], sMenu;
2351
2352 sMenu = menu_create("Trade Menu", "MenuHandler");
2353 new call = menu_makecallback("Call_Back");
2354
2355 for(new i; i < get_maxplayers(); i++)
2356 {
2357 if(is_user_connected(i) && !is_user_bot(i))
2358 {
2359 get_user_name(i, Name, 31);
2360
2361 if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
2362
2363 num_to_str(i, String, 31);
2364 menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
2365 }
2366 }
2367
2368 menu_display(id, sMenu);
2369
2370 return PLUGIN_CONTINUE;
2371}
2372
2373public RegMenu(id)
2374{
2375 static sId; sId = id;
2376 id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
2377
2378 if(Loged[id]) {
2379 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
2380 Menu(id);
2381 return PLUGIN_HANDLED;
2382 }
2383
2384 if(!gLogged[id] || !gCanLoad)
2385 {
2386 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
2387 remove_task(id+TASKID_REMENU);
2388 set_task(1.0, "RegMenu", id+TASKID_REMENU);
2389 return PLUGIN_HANDLED;
2390 }
2391 remove_task(id+TASKID_REMENU);
2392
2393 if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
2394 {
2395 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2396 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
2397 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
2398 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
2399
2400 UnsetBlack(id);
2401 return PLUGIN_HANDLED;
2402 }
2403
2404 if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
2405 {
2406 Login(id);
2407 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix);
2408
2409 return PLUGIN_HANDLED;
2410 }
2411
2412 new szString[128], Name[32];
2413 format(szString, sizeof(szString), "\r[\yPublic\r]\w - %L", LANG_PLAYER, "RMMAIN");
2414 new rMenu = menu_create(szString, "rMenuHandler");
2415 get_user_name(id, Name, 31);
2416
2417 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name); // Client name
2418 menu_additem(rMenu, szString, "0");
2419
2420 new szPassword[126];
2421 for(new i; i < strlen(Password[id]); i++) {
2422 format(szPassword, charsmax(szPassword), "%s*", szPassword);
2423 }
2424
2425 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
2426 format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword); // Client password
2427 menu_additem(rMenu, szString, "1");
2428
2429 if(!gRegistered[id]) // Not registered
2430 {
2431 format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
2432 menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
2433 }
2434 else
2435 {
2436 if(!Loged[id]) // Registered, but not logged
2437 {
2438 new gPassCheck = equal(SavedPassword[id], Password[id]);
2439
2440 format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
2441 menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
2442 }
2443 else
2444 {
2445 Menu(id);
2446 }
2447 }
2448
2449 menu_display(id, rMenu);
2450 return PLUGIN_HANDLED;
2451}
2452
2453public rMenuHandler(id, gMenu, item)
2454{
2455 if(item == MENU_EXIT)
2456 {
2457 menu_destroy(gMenu);
2458 return PLUGIN_CONTINUE;
2459 }
2460
2461 new data[9], name[64], Key;
2462 new access, callback;
2463 menu_item_getinfo(gMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
2464
2465 Key = str_to_num(data);
2466
2467 switch(Key)
2468 {
2469 case 0: { RegMenu(id); }
2470 case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
2471 case 2:
2472 {
2473 if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
2474 {
2475 copy(SavedPassword[id], 31, Password[id]);
2476 Loged[id] = true;
2477 gRegistered[id] = true;
2478 SaveData(id);
2479 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix, Password[id]);
2480
2481 UnsetBlack(id);
2482
2483 new szName[32]; get_user_name(id, szName, 31);
2484 log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
2485 gWarnings[id] = 0;
2486
2487 return PLUGIN_CONTINUE;
2488 } else {
2489 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2490
2491 return PLUGIN_HANDLED;
2492 }
2493 // Menu(id);
2494 }
2495 case 3:
2496 {
2497 if(!Loged[id])
2498 {
2499 gWarnings[id] = 0;
2500 Login(id);
2501 }
2502 }
2503 }
2504 return PLUGIN_CONTINUE;
2505}
2506
2507public PlayerPassword(id)
2508{
2509 if(Loged[id])
2510 {
2511 return PLUGIN_HANDLED;
2512 }
2513
2514 new Data[32]; read_args(Data, 31); remove_quotes(Data);
2515
2516 if(strlen(Data) < MIN_PASSWORD_LENGTH)
2517 {
2518 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
2519 client_cmd(id, "messagemode UserPassword");
2520 return PLUGIN_HANDLED;
2521 }
2522 else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
2523 {
2524 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
2525 gWarnings[id]++;
2526
2527 if(gWarnings[id] >= 3)
2528 {
2529 gWarnings[id] = 0;
2530
2531 server_cmd("amx_kick #%d ^"Trying to hack other account!^"", get_user_userid(id));
2532 }
2533 }
2534
2535 copy(Password[id], 31, Data);
2536 RegMenu(id);
2537 return PLUGIN_CONTINUE;
2538}
2539
2540public NameChange(id)
2541{
2542 if(get_cvar_num("csgo_nick_show"))
2543 return FMRES_IGNORED;
2544
2545 if(!is_user_connected(id) || is_user_bot(id))
2546 return FMRES_IGNORED;
2547
2548 new OldName[32], NewName[32], Name[32];
2549 get_user_name(id, Name, 31);
2550 pev(id, pev_netname, OldName, charsmax(OldName));
2551 if(OldName[0])
2552 {
2553 get_user_info(id, "name", NewName, charsmax(NewName));
2554 if(!equal(OldName, NewName))
2555 {
2556 set_user_info(id, "name", OldName);
2557 client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
2558 return FMRES_HANDLED;
2559 }
2560 }
2561 return FMRES_IGNORED;
2562}
2563
2564public Registered(id)
2565{
2566 if(!is_user_connected(id) || is_user_bot(id))
2567 return;
2568
2569 static szQuery[256], iData[1]; iData[0] = id;
2570 formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
2571
2572 SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
2573
2574 log_errors("[REGISTERED] %s", szQuery);
2575}
2576
2577public QuerySelectReg( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
2578{
2579 if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("[QuerySelectReg] %s", szError); return; }
2580 else
2581 {
2582 new id = iData[0];
2583 if(SQL_NumResults(hQuery))
2584 {
2585 gLogged[id] = true;
2586 gRegistered[id] = true;
2587
2588 new passfield[32], password[32];
2589 get_pcvar_string(csgo_password_field, passfield, 31);
2590 get_user_info(id, passfield, password, 31);
2591
2592 SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
2593
2594 if(equal(password, SavedPassword[id])) {
2595 Password[id] = password;
2596 }
2597
2598 new szName[32]; get_user_name(id, szName, 31);
2599 log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
2600 }
2601 else
2602 {
2603 gLogged[id] = true;
2604 gRegistered[id] = false;
2605
2606 new szName[32]; get_user_name(id, szName, 31);
2607 log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
2608 }
2609 }
2610}
2611
2612public cmdUniq(id)
2613{
2614 if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
2615
2616 new szText[512], szid[64];
2617
2618 formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "SMAIN", LANG_PLAYER, "YPOINT", Points[id]);
2619 new sMenu = menu_create(szText, "MenuHandlerUniq");
2620
2621 for(new i; i < AllWeapon; i++)
2622 {
2623 if(uniqPrice[i] > 0)
2624 {
2625 formatex(szText, charsmax(szText), "%s \r%d \w- \rTaškų", WeaponNames[i], uniqPrice[i]);
2626 formatex(szid, 63, "%d", i);
2627 menu_additem(sMenu, szText, szid, _, (Points[id] < uniqPrice[i]) ? -2 : -1);
2628 }
2629 }
2630
2631 menu_setprop(sMenu, MPROP_EXIT, MEXIT_ALL);
2632 menu_display(id, sMenu);
2633
2634 return PLUGIN_CONTINUE;
2635}
2636
2637public MenuHandlerUniq(id, menu, item)
2638{
2639 if(item == MENU_EXIT)
2640 {
2641 menu_destroy(menu);
2642 return PLUGIN_HANDLED;
2643 }
2644
2645 new aMenu[2], Data[4][32], sKey[32];
2646 menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
2647
2648 parse(Data[0], sKey, 31);
2649 new Key = str_to_num(sKey);
2650
2651 if(Points[id] >= uniqPrice[Key])
2652 {
2653 uWeapon[Key][id]++;
2654 Points[id] -= uniqPrice[Key];
2655 SaveData(id);
2656
2657 client_print_color(id, print_team_default, "%s ^3%s ^4Nusipirko ^3%s!", Prefix, get_user_name_ex(id), WeaponNames[Key]);
2658 }
2659 else {
2660 client_print_color(id, print_team_default, "%s ^3Nepakanka taškų!", Prefix);
2661 }
2662
2663 menu_destroy(menu);
2664 return PLUGIN_HANDLED;
2665}
2666
2667/*STOCK'S Key's*/
2668stock drop_keys(id, dropKey)
2669{
2670 if(dropKey >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
2671 {
2672 new szName[32]; get_user_name(id, szName, 31);
2673
2674 static additional_keys; additional_keys = 0;
2675
2676 if(!additional_keys)
2677 {
2678 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ALL", EVENT, szName, pKey);
2679 pKey[id]++;
2680 }
2681 SaveKeys(id);
2682 }
2683}
2684
2685/*STOCK'S*/
2686stock drop_item(id, dropRate)
2687{
2688 if(dropRate >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
2689 {
2690 new szName[33], rNum, accesNum = get_access(id); get_user_name(id, szName, 32);
2691 rNum = random(CHEST_COUNT)+1;
2692
2693 static additional_chests; additional_chests = 0;
2694 if(!random(5) && accesNum)
2695 {
2696 additional_chests = random(((accesNum == 1) ? 1 : (accesNum == 1) ? 1 : 1));
2697
2698 if(additional_chests)
2699 {
2700 additional_chests++;
2701 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHESTS", Prefix, szName, additional_chests, chest_name(rNum));
2702 Chest[id][rNum] += additional_chests;
2703 }
2704 }
2705
2706 if(!additional_chests)
2707 {
2708 client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHEST", Prefix, szName, chest_name(rNum));
2709 Chest[id][rNum]++;
2710 }
2711 SaveChests(id);
2712 }
2713}
2714
2715stock get_access(id)
2716{
2717 if(get_user_flags(id) & ACCESS_ADMIN)
2718 {
2719 return 2;
2720 } else if(get_user_flags(id) & ACCESS_VIP)
2721 {
2722 return 1;
2723 }
2724
2725 return 0;
2726}
2727
2728stock chest_name(iNum)
2729{
2730 new szReturn[126];
2731
2732 switch(iNum)
2733 {
2734 case 1: { formatex(szReturn, charsmax(szReturn), "Falchion"); }
2735 case 2: { formatex(szReturn, charsmax(szReturn), "Wildfire"); }
2736 case 3: { formatex(szReturn, charsmax(szReturn), "Hunstman"); }
2737 case 4: { formatex(szReturn, charsmax(szReturn), "Spectrum"); }
2738 case 5: { formatex(szReturn, charsmax(szReturn), "Shadow"); }
2739 case 6: { formatex(szReturn, charsmax(szReturn), "Gamma"); }
2740 case 7: { formatex(szReturn, charsmax(szReturn), "Hydra"); }
2741 }
2742
2743 return szReturn;
2744}
2745
2746stock screen_color(id)
2747{
2748 message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
2749 write_short(1<<10);
2750 write_short(1<<10);
2751 write_short(0x0000);
2752 write_byte(255);
2753 write_byte(0);
2754 write_byte(0);
2755 write_byte(75);
2756}
2757
2758stock ExplodeString(const string[], output[], olen = sizeof output)
2759{
2760 new len = strlen( string ); // We retrieve the length of the current string passed.
2761
2762 if ( !len ) { return 0; } // If the string is empty we stop there.
2763
2764 new i, c, j, count;
2765 new number[ 12 ];
2766
2767 do
2768 {
2769 while ( string[ i ] == ' ' ) i++; // One or more spaces can be used between 2 numbers, so we move forward until we find a number.
2770 while ( ( number[ j++ ] = c = string[ i++ ] ) && c != ' ' ) {} // We loop and save the number found until the next space found or end of string.
2771
2772 output[ count++ ] = str_to_num( number ); // We convert the number saved previously into a number and we stored in output at the slot count.
2773 j = 0;
2774 }
2775 while ( i < len && count < olen ); // We should looping while we have not cross the string length.
2776
2777 return count;
2778}
2779
2780stock get_user_name_ex(id)
2781{
2782 new szName[33];
2783 get_user_name(id, szName, charsmax(szName));
2784
2785 replace_all(szName, charsmax(szName), "'", "\'");
2786 replace_all(szName, charsmax(szName), "^"", "\^"");
2787 // replace_all(szName, charsmax(szName), ".", "");
2788
2789 return szName;
2790}
2791
2792stock print_color(const id, const input[], any:...)
2793{
2794 new Count = 1, Players[32];
2795 static Msg[191];
2796 vformat(Msg, 190, input, 3);
2797
2798 replace_all(Msg, 190, "!g", "^4");
2799 replace_all(Msg, 190, "!y", "^1");
2800 replace_all(Msg, 190, "!t", "^3");
2801
2802 if(id) Players[0] = id; else get_players(Players, Count, "ch");
2803 {
2804 for (new i = 0; i < Count; i++)
2805 {
2806 if (is_user_connected(Players[i]))
2807 {
2808 message_begin(MSG_ONE, get_user_msgid( "SayText" ), _, Players[i]);
2809 write_byte(Players[i]);
2810 write_string(Msg);
2811 message_end();
2812 }
2813 }
2814 }
2815 return PLUGIN_HANDLED;
2816 }
2817
2818 stock bool:ValidMdl(Mdl[]) {
2819 return (containi(Mdl, ".mdl") != -1) ? true : false;
2820}
2821
2822public UpdateStatusText(id)
2823{
2824 new szText[256], wId = get_user_weapon(id, _, _);
2825 if(bUsingGuns[id][wId])
2826 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wId]][id], WeaponNames[bUsingGuns[id][wId]]);
2827 else
2828 formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK");
2829
2830 set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
2831 ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
2832}
2833
2834stock get_weapon_maxclip(wpnid = 0)
2835{
2836 for (new a = 0; a < sizeof (g_weapons); a++)
2837 if (wpnid == g_weapons[a])
2838 return g_max_clip[a];
2839
2840 return false;
2841}
2842
2843stock SetFullBpAmmo(id, iWeaponID)
2844{
2845 new iFullbpammo,iAmmoId;
2846
2847 for(new i = 1; i < AmmoIds; i++)
2848 {
2849 if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
2850 {
2851 iAmmoId = i;
2852 iFullbpammo = g_iAmmoMax[i];
2853
2854 break;
2855 }
2856 }
2857
2858 if(!iAmmoId)
2859 return;
2860
2861 cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
2862
2863 message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
2864 write_byte(iAmmoId);
2865 write_byte(iFullbpammo);
2866 message_end();
2867}
2868
2869stock has_user_weapon(id, iCswId, iSlot = 0)
2870{
2871 new iWeapon;
2872 if( !iSlot )
2873 {
2874 static const iWeaponsSlots[] = {
2875 -1,
2876 2, // CSW_P228
2877 -1,
2878 1, // CSW_SCOUT
2879 4, // CSW_HEGRENADE
2880 1, // CSW_XM1014
2881 5, // CSW_C4
2882 1, // CSW_MAC10
2883 1, // CSW_AUG
2884 4, // CSW_SMOKEGRENADE
2885 2, // CSW_ELITE
2886 2, // CSW_FIVESEVEN
2887 1, // CSW_UMP45
2888 1, // CSW_SG550
2889 1, // CSW_GALIL
2890 1, // CSW_FAMAS
2891 2, // CSW_USP
2892 2, // CSW_GLOCK18
2893 1, // CSW_AWP
2894 1, // CSW_MP5NAVY
2895 1, // CSW_M249
2896 1, // CSW_M3
2897 1, // CSW_M4A1
2898 1, // CSW_TMP
2899 1, // CSW_G3SG1
2900 4, // CSW_FLASHBANG
2901 2, // CSW_DEAGLE
2902 1, // CSW_SG552
2903 1, // CSW_AK47
2904 3, // CSW_KNIFE
2905 1 // CSW_P90
2906 };
2907 iSlot = iWeaponsSlots[iCswId];
2908 }
2909
2910 const XO_PLAYER = 5;
2911 const m_rgpPlayerItems_Slot0 = 367;
2912
2913 iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
2914
2915 const XO_WEAPON = 4;
2916 const m_pNext = 42;
2917 const m_iId = 43;
2918
2919 while( iWeapon > 0 )
2920 {
2921 if( get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId )
2922 return iWeapon;
2923
2924 iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
2925 }
2926 return 0;
2927}
2928
2929stock SavePoints(id)
2930{
2931 if(Loged[id] && gRegistered[id] && gCanSave)
2932 {
2933 new szQuery[1024];
2934 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));
2935
2936 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2937
2938 log_errors("[SAVE POINTS] %s", szQuery);
2939 }
2940}
2941
2942stock SaveChests(id)
2943{
2944 if(Loged[id] && gRegistered[id] && gCanSave)
2945 {
2946 new szQuery[1024], szChests[128];
2947 for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
2948
2949 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
2950
2951 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2952
2953 log_errors("[SAVE CHESTS] %s", szQuery);
2954 }
2955}
2956
2957stock SaveKeys(id)
2958{
2959 if(Loged[id] && gRegistered[id] && gCanSave)
2960 {
2961 new szQuery[1024];
2962
2963 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));
2964
2965 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2966
2967 log_errors("[SAVE KEYS] %s", szQuery);
2968 }
2969}
2970
2971stock SaveRang(id)
2972{
2973 if(Loged[id] && gRegistered[id] && gCanSave)
2974 {
2975 new szQuery[1024];
2976 formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `rang` = '%d' WHERE `username` = '%s';", TABLE_NAME, Rang[id], get_user_name_ex(id));
2977
2978 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2979
2980 log_errors("[SAVE RANG] %s", szQuery);
2981 }
2982}
2983
2984stock SaveKillers(id)
2985{
2986 if(Loged[id] && gRegistered[id] && gCanSave)
2987 {
2988 new szQuery[1024];
2989
2990 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));
2991
2992 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
2993
2994 log_errors("[SAVE KILLERS] %s", szQuery);
2995 }
2996}
2997
2998stock SaveGunsKills(id)
2999{
3000 if(Loged[id] && gRegistered[id] && gCanSave)
3001 {
3002 new szQuery[1024], szKSkins[1024];
3003
3004 for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
3005
3006 formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
3007
3008 SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
3009
3010 log_errors("[SAVE GUNS KILLS] %s", szQuery);
3011 }
3012}
3013
3014stock log_errors(const szText[], any:...)
3015{
3016 static szMessage[256];
3017 vformat(szMessage, 256, szText, 2);
3018
3019 log_to_file(g_logfile, szMessage);
3020
3021 return PLUGIN_HANDLED;
3022}
3023/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
3024*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1158\\ f0\\ fs16 \n\\ par }
3025*/