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