Cerere plugin Go!

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Post Reply
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

05 Mar 2019, 17:14

Plugin Cerut: As dori si eu cand un jucator primeste un cufar/cutie pe server (tin sa mentionez folosesc addons-ul cs go remake 1G de nubo) sa poata sa se deschida un (MOTD) in care sa ii pice cutia la fel ca in CS GO (https://www.youtube.com/watch?v=dzPMWgCKeQw) si mai jos as vrea un buton mic (OPEN) prin care sa le deschida!
Descriere (adica ce face el mai exact): Dechidere cutii cs go prin (MOTD)
Serverul ruleaza (HLDS/ReHLDS): amxmodx
Versiune AMX Mod X: 1.8.1
Modul Serverului: CS GO REMAKE (Versiunea 1G)
Last edited by Rainq on 07 Mar 2019, 20:49, edited 1 time in total.
Reason: Editat dupa model
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
RoyalServer
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

15 Mar 2019, 23:09

cineva ?
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
User avatar
DanN
Membru, skill 0
Membru, skill 0
Posts: 70
Joined: 30 Sep 2017, 22:12
Detinator Steam: Da
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: RobertshemA
SteamID: 84638588213
Fond eXtream: 0
Location: Cape Verde
Has thanked: 1 time
Contact:

16 Mar 2019, 18:14

Este imposibil sa faci cutia ca si in csgo pentru ca motd nu suporta animati si etc. Singurul lucru pe care il poti face la motd e sa afiseszi cuti sau alte chestii
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

16 Mar 2019, 18:30

DanN wrote:
16 Mar 2019, 18:14
Este imposibil sa faci cutia ca si in csgo pentru ca motd nu suporta animati si etc. Singurul lucru pe care il poti face la motd e sa afiseszi cuti sau alte chestii
din cate am inteles tine de php si sql deci se poate face
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
User avatar
dragonCSX
Membru, skill +1
Membru, skill +1
Posts: 281
Joined: 04 Feb 2017, 17:36
Detinator Steam: Da
CS Status: moneymaker.
Detinator server CS: xmas.arenadevils.ro
SteamID: csfweed01
Fond eXtream: 0
Location: Ploiesti
Discord: csfweed1337
Has thanked: 8 times
Been thanked: 6 times
Contact:

17 Mar 2019, 09:18

Ceva de genu' are Arkxes, dar nu un case opening in motd ci afiseara cutiile si skinurile acestora in motd.
Nimeni nu va face niciodata o munca asa de "deasa" pe moca , discuta cu arkxes , zorken , adeptii modului csgo remake !
>> XMAS.ARENADEVILS.RO # See you again in 2025 <<
>> DR.ARENADEVILS.RO # Official Deathrun Mod 2024 <<
User avatar
1TAP GOD
Membru, skill +1
Membru, skill +1
Posts: 152
Joined: 03 Sep 2018, 00:20
Detinator Steam: Da
SteamID: /id/assasinssmdfk
Fond eXtream: 0
Has thanked: 16 times
Been thanked: 16 times

17 Mar 2019, 11:18

Rainq wrote:
16 Mar 2019, 18:42
puNx wrote:
16 Mar 2019, 18:30
DanN wrote:
16 Mar 2019, 18:14
Este imposibil sa faci cutia ca si in csgo pentru ca motd nu suporta animati si etc. Singurul lucru pe care il poti face la motd e sa afiseszi cuti sau alte chestii
din cate am inteles tine de php si sql deci se poate face
si tu crezi ca e cineva aici sa faca chestia asta fara bani? daca era pluginul pe net,da era o treaba dar ce spui aici e un plugin care nu exista inca si probabil nu o sa existe.
Asa ceva este pe net dar nu in romania si funcționează pe bază modului lu deroid editat de Psychical :lifting_eyes:
http://prntscr.com/myzk9w
http://prntscr.com/myzkus
----------------Steam----------------
-----------------------------------------------------------
Image
And she be actin' funny, probably think a nigga need her
I thought I was faithful, she say I'm a cheater
They thought I was taken, I'm ready to mingle
User avatar
1TAP GOD
Membru, skill +1
Membru, skill +1
Posts: 152
Joined: 03 Sep 2018, 00:20
Detinator Steam: Da
SteamID: /id/assasinssmdfk
Fond eXtream: 0
Has thanked: 16 times
Been thanked: 16 times

17 Mar 2019, 15:38

----------------Steam----------------
-----------------------------------------------------------
Image
And she be actin' funny, probably think a nigga need her
I thought I was faithful, she say I'm a cheater
They thought I was taken, I'm ready to mingle
User avatar
DevilBoy.eXe
Super moderator
Super moderator
Posts: 1678
Joined: 05 Jun 2016, 23:04
Detinator Steam: Da
Detinator server CS: GO.WARED.RO
SteamID: DevilBoy_eXe
Reputatie: Super Moderator
Fond eXtream: 0
Location: beyond the time
Discord: zeux.
Has thanked: 15 times
Been thanked: 71 times
Contact:

17 Mar 2019, 18:33

Si de ce incerci sa faci chestia asta? Avand in vedere ca motd-ul la majoritatea cs-urilor este blocat nu vei reusi sa faci nimic decat sa ingreunezi jocul pentru jucatori
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

20 Mar 2019, 20:23

DevilBoy.eXe wrote:
17 Mar 2019, 18:33
Si de ce incerci sa faci chestia asta? Avand in vedere ca motd-ul la majoritatea cs-urilor este blocat nu vei reusi sa faci nimic decat sa ingreunezi jocul pentru jucatori
Deoarece nu am mai vazut pe niciun sv de cs go remake plugin-ul asta si mi sa parut interesant !
Edit: Nu ma lasa sa compilez "rcsgo" am incercat si local dar degeaba
SS: Image
Sursa:
| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <sqlx>
#include <supplybox>
#include <rcsgo>

// # Project by DeRoiD   https://forums.alliedmods.net/showthread.php?t=265653
// # Author by Psychical https://www.supergames.lt/topic/244152- ... 100€-1-ip/

new const PLUGIN[] = "Global Offensive";
new const VERSION[] = "4.62";
new const AUTHOR[] = "Psychical";

/*================================================================================
[MySQLx Vars, other]
=================================================================================*/
#define DB_HOST ""
#define DB_USER ""
#define DB_PASS ""
#define DB_DATA ""

#define TABLE_NAME "rcsgo_player"

#define EVENT "^1[^4Event^1]"			// Prefix'as prie tekstų Event

#define ACCESS_VIP ADMIN_LEVEL_H		// VIP access 
#define ACCESS_ADMIN ADMIN_BAN			// ADMIN access

#define SOUND_SOLD "ambience/quail1.wav"

new Handle:g_hTuple;
new g_msgid_ScreenFade, g_msgid_SyncHud;

#define MAX 400 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
#define MAX_RANGS 30

#define CHEST_ID 500 
#define CHEST_COUNT 7

#define KEY_ID 600
#define KEY_ID_TEXT "600"

#define POINTS_KILL_MIN 3 
#define POINTS_KILL_MAX 9 				

#define POINTS_KILL_HS 3 // Jei HS, Kiek pridės prie normaliu tasku

#define POINTS_KILL_VIP_FLAG ACCESS_VIP	// VIP access 
#define POINTS_KILL_MIN_VIP 2 // Pridedamas Prie POINTS_KILL_MIN
#define POINTS_KILL_MAX_VIP 5 // Pridedamas Prie POINTS_KILL_MAX

#define POINTS_KILL_ADMIN_FLAG ACCESS_ADMIN	// ADMIN access 
#define POINTS_KILL_MIN_ADMIN 5 // Pridedamas Prie POINTS_KILL_MIN
#define POINTS_KILL_MAX_ADMIN 7	// Pridedamas Prie POINTS_KILL_MAX

#define DROP_RATE_KEYS 500
#define DROP_RATE_CHEST 500

#define DROP_RATE_KILL 8  
#define DROP_RATE_PLANT 8 
#define DROP_RATE_DEF 8
#define DROP_RATE_HOSTAGE 8

#define DROP_RATE_VIP_FLAG ACCESS_VIP
#define DROP_RATE_KILL_VIP 12    
#define DROP_RATE_EXPLODE_VIP 12 
#define DROP_RATE_PLANT_VIP 12 
  
#define DROP_RATE_DEF_VIP 12    
#define DROP_RATE_HOSTAGE_VIP 12 

#define DROP_RATE_ADMIN_FLAG ACCESS_ADMIN
#define DROP_RATE_KILL_ADMIN 14
#define DROP_RATE_PLANT_ADMIN 14
#define DROP_RATE_DEF_ADMIN 14
#define DROP_RATE_HOSTAGE_ADMIN 14   

#define MIN_PASSWORD_LENGTH 4
#define MIN_CODE_LENGTH 6

#define MARKET_MIN_PRICE 50
#define MARKET_WAIT_ADD 3

#define HOSTAGE_ESCAPE 5
#define HOSTAGE_ESCAPE_STEAM 7
#define HOSTAGE_ESCAPE_VIP 9
#define HOSTAGE_ESCAPE_ADMIN 12
#define HOSTAGE_ESCAPE_SADMIN 14

#define HOSTAGE_KILL_PENALTY 15 // Reduce Points

#define BOMB_PLANTED_POINTS 3
#define BOMB_EXPLODE_POINTS 5
#define BOMB_DEFUSED_POINTS 7

#define BOMB_PLANTED_POINTS_VIP 5
#define BOMB_EXPLODE_POINTS_VIP 7
#define BOMB_DEFUSED_POINTS_VIP 9

#define BOMB_PLANTED_POINTS_ADMIN 7 
#define BOMB_EXPLODE_POINTS_ADMIN 9
#define BOMB_DEFUSED_POINTS_ADMIN 12

#define BOMB_PLANTED_POINTS_SADMIN 9
#define BOMB_EXPLODE_POINTS_SADMIN 12
#define BOMB_DEFUSED_POINTS_SADMIN 15

#define ROUND_WIN_POINTS 24

#define NEED_MIN_PLAYERS 4

new g_logfile[64];
new bool:gEnd = false;

#define TASKID_REMENU 100

new csgo_password_field;

new colchar[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ }

new cvar_refill_spawn;

// Cvar pointers
new p_allchat, p_alltalk, p_hidestat, p_teamchat;

// Vars to check if message has already been duplicated
new alv_sndr, alv_str2[26], alv_str4[101];
new msg[513];
new gWarnings[33] = 0;

/*=========*/
new bool:bTrade[33] = false;
new bool:bTradeAccepted[33] = false;
/*=========*/

/*================================================================================
=================================================================================*/

new const g_weapons[] = 
{
	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,
	CSW_GLOCK18, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_DEAGLE, CSW_SG552, CSW_AK47, CSW_P90
}
new const g_other_weapons[] = { CSW_KNIFE, CSW_HEGRENADE, CSW_C4 }
new 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 }
enum _:AmmoIds { ammo_none, ammo_338magnum = 1, ammo_762nato, ammo_556natobox, ammo_556nato, ammo_buckshot, ammo_45acp, ammo_57mm, ammo_50ae, ammo_357sig, ammo_9mm } 
new g_iAmmoMax[AmmoIds] = { -1, 30, 90, 200, 90, 32, 100, 100, 35, 52, 120 } 

new const g_iAmmoWeaponSharedBitSum[AmmoIds] = { 0, 
	(1<<CSW_AWP), (1<<CSW_SCOUT)|(1<<CSW_G3SG1)|(1<<CSW_AK47), (1<<CSW_M249), 
	(1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M4A1)|(1<<CSW_SG552), 
	(1<<CSW_XM1014)|(1<<CSW_M3), (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_USP), 
	(1<<CSW_P90)|(1<<CSW_FIVESEVEN), (1<<CSW_DEAGLE), (1<<CSW_P228), 
	(1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_ELITE)|(1<<CSW_GLOCK18) 
}
new g_msgid_AmmoX;

#pragma semicolon 1;

new WeaponNames[MAX][64], WeaponMdls[MAX][128], WeaponMdlsP[MAX][128], Weapons[MAX], WeaponDrop[MAX], AllWeapon;
new 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];
new Folder[48], SkinFile[48], RangFile[48], DefaFile[48], MenuMod[33];
new WeaponinMarket[33], inMarket[33], MarketPoints[33];
new SavedPassword[33][32], bool:Loged[33], bool:gLogged[33], bool:gRegistered[33], Password[33][32];
new DefaultSkin[33][32], DefaultSkinP[33][32], DefaultSkinW[33][32], NeedPatirtis[MAX_RANGS], Rangs[MAX_RANGS][32];
new gCanLoad, gCanSave;
new bUsingGuns[33][CSW_VESTHELM];
new gLastMarketTime[33] = 0;
new chestsList[CHEST_COUNT+1][128][512];
new chestsChance[CHEST_COUNT+1][128];

new aAmount[33], mAmount[33], uniqPrice[MAX];

new const eWeapon[][] =
{
"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
"weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
"weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
};

new const szWeaponNames[][] =
{
"", "P228", "", "Scout", "HE", "XM1014", "C4", "MAC10", "Aug", "SG", "Elite",
"Five Seven", "UMP45", "SG550", "Galil", "Famas", "USP", "Glock", "AWP", "MP5 Navy", "M249",
"M3", "M4A1", "TMP", "G3SG1", "FB", "Deagle", "SG552", "AK47", "Knife", "P90"
};

public plugin_precache()
{
	register_dictionary("globaloffensive.txt");

	get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));

	log_errors("-------------------- == --------------------");
	new Line[512], Data[9][128], Len;
	AllWeapon++;
	get_configsdir(Folder, 47);
	format(SkinFile, 47, "%s/rcsgo/skins.cfg", Folder);
	format(RangFile, 47, "%s/rcsgo/rangs.cfg", Folder);
	format(DefaFile, 47, "%s/rcsgo/dskins.cfg", Folder);
	
	if(file_exists(RangFile))
	{
		for(new i; i < file_size(RangFile, 1); i++)
		{
			if(i >= MAX_RANGS) {
				log_errors("[plugin_precache] Increase your MAX_RANGS define.");
				break;
			}
		
			read_file(RangFile, i, Line, 127, Len);
			parse(Line, Data[0], 31, Data[1], 31);
		
			copy(Rangs, 31, Data[0]);
			NeedPatirtis = str_to_num(Data[1]);
		}
	}

	if(file_exists(SkinFile))
	{
		for(new i; i < file_size(SkinFile, 1); i++)
		{
			if(AllWeapon >= MAX) 
			{
				log_errors("[plugin_precache] Increase your MAX define.");
				break;
			}
		
			read_file(SkinFile, i, Line, 512, Len);
		
			if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
				continue;
		
			// Ginklas, pavadinimas, v_, p_, chance - old
			// Ginklas, pavadinimas, v_, p_, chest, chance, number
			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);
		
			Weapons[AllWeapon] = str_to_num(Data[0]);
			copy(WeaponNames[AllWeapon], 63, Data[1]);
		
			if(ValidMdl(Data[2])) 
			{
				precache_model(Data[2]);
				copy(WeaponMdls[AllWeapon], 128, Data[2]);
			
				if(file_exists(Data[3]) && strlen(Data[3]) > 5) 
				{
					precache_model(Data[3]);
					copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
				}
			}
		
			WeaponDrop[AllWeapon] = str_to_num(Data[4]);
		
			chestsChance[str_to_num(Data[4])][str_to_num(Data[5])] += 1;
			chestsList[str_to_num(Data[4])][str_to_num(Data[5])][str_to_num(Data[6])] = AllWeapon;
			log_amx("chestsList[%s][%s][%s] = %d", Data[4], Data[5], Data[6], AllWeapon);
			
			uniqPrice[AllWeapon] = str_to_num(Data[7]);
			
			if(Data[8][0] == 'W') weaponRang[AllWeapon] = 4;
			else if(Data[8][0] == 'B') weaponRang[AllWeapon] = 3;
			else if(Data[8][0] == 'R') weaponRang[AllWeapon] = 2;
			else if(Data[8][0] == 'Y') weaponRang[AllWeapon] = 1;
			else weaponRang[AllWeapon] = 0;
		
			AllWeapon++;
		}
	}
	if(file_exists(DefaFile))
	{
		for(new i; i < file_size(DefaFile, 1); i++)
		{
			read_file(DefaFile, i, Line, 127, Len);
		
			if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
				continue;
		
			parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
		
			if(ValidMdl(Data[1])) 
			{
				precache_model(Data[1]);
				copy(DefaultSkin[str_to_num(Data[0])], 47, Data[1]);
		
				if(file_exists(Data[2]) && strlen(Data[2]) > 5) 
				{
					precache_model(Data[2]);
					copy(DefaultSkinP[str_to_num(Data[0])], 47, Data[2]);
				}
			
				if(file_exists(Data[3]) && strlen(Data[3]) > 5) 
				{
					precache_model(Data[3]);
					copy(DefaultSkinW[str_to_num(Data[0])], 47, Data[3]);
				}
			}
		}
	}

	precache_sound(SOUND_SOLD);

	g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);

	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);
	SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables);
}

public plugin_init()
{	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
	
	register_supply_box("Experience Box");
	
	register_clcmd("say /menu", "MenuOpen");
	register_clcmd("say /reg", "RegMenu");
	register_clcmd("say /register", "TradeMenu");
	register_clcmd("say /kills", "KillsLeft");
		
	register_clcmd("say menu", "MenuOpen");
	register_clcmd("say reg", "RegMenu");
	register_clcmd("say register", "TradeMenu");
	register_clcmd("say kills", "KillsLeft");

	register_clcmd("say !menu", "MenuOpen");
	register_clcmd("say !reg", "RegMenu");
	register_clcmd("say !register", "TradeMenu");
	register_clcmd("say !kills", "KillsLeft");

	register_clcmd("say .menu", "MenuOpen");
	register_clcmd("say .reg", "RegMenu");
	register_clcmd("say .register", "TradeMenu");
	register_clcmd("say .kills", "KillsLeft");

	register_clcmd("say /savepass", "SavePassword");
	
	register_clcmd("say /skins", "cmdUniq");
		
	register_clcmd("radio1", "MenuOpen");
	
	register_concmd("Cost", "MarketCost");
	register_concmd("Gift", "GiftPoint");
	register_concmd("setAmount", "SetAmount");
	register_concmd("setMarketAmount", "SetMarketAmount");
	register_concmd("UserPassword", "PlayerPassword");
	
	register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");
	register_event("TextMsg", "TextMsg_Killed_Hostage", "b", "1=4", "2=#Killed_Hostage");
	register_event("HLTV", "RoundStart", "a", "1=0", "2=0");

	register_forward(FM_ClientUserInfoChanged, "NameChange");
	register_forward(FM_SetModel, "SetModel");
	
	register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
	
	RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
	
	for(new i; i < sizeof(eWeapon); i++) 
	{
		if(strlen(eWeapon) > 3) 
		{
			RegisterHam(Ham_Item_Deploy, eWeapon, "WeaponSwitch", 1);
		}
	}
	csgo_password_field = register_cvar("csgo_password_field", "_rcsgo");
	
	g_msgid_ScreenFade = get_user_msgid("ScreenFade");
	g_msgid_SyncHud = CreateHudSyncObj();
	g_msgid_AmmoX = get_user_msgid("AmmoX");
	
	cvar_refill_spawn = register_cvar("csgo_refill_onspawn", "1");
	
	p_allchat = register_cvar("sv_allchat", "2");
	p_hidestat = register_cvar("ac_hidestatus", "0");
	p_teamchat = register_cvar("ac_teamchat", "0");
	register_cvar( "csgo_nick_show", "0" );
	
	p_alltalk = get_cvar_pointer( "sv_alltalk" );
	
	register_message(get_user_msgid("SayText"), "col_changer");
	
	set_task(5.0, "LoadConnected");
	gCanLoad = 0;
	gCanSave = 0;
	
	new iEnt = -1;
	while((iEnt = find_ent_by_class(iEnt, "env_sound")))
	{
		DispatchKeyValue(iEnt, "roomtype", "0");
		DispatchKeyValue(iEnt, "radius", "0");
	}
	
	format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
}

public plugin_cfg()
{
	if(!g_hTuple)
	{
		g_hTuple = SQL_MakeStdTuple();	
	}
	return 1;
}

public plugin_natives()
{
	register_native("cs_get_user_points", "native_cs_get_user_points", 1);
	register_native("cs_set_user_points", "native_cs_set_user_points", 1);
}

public native_cs_get_user_points(player)
{
	return Points[player];
}

public native_cs_set_user_points(player, prize)
{
	Points[player] = prize;
	SavePoints(player);
}

public sb_pickup(id)
{
	new iPlayers[32], iPlayersNum;
	get_players(iPlayers, iPlayersNum);
	
	new szName[32]; get_user_name(id, szName, 31);
	
	new Random = random_num(1, 100);
	new point = random_num(50, 300), points = random_num(100, 300), plus = random_num(200, 500);
	
	if(Random < 5)
	{
		drop_keys(id, DROP_RATE_KEYS);
	}
	else if(Random < 25)
	{
		drop_item(id, DROP_RATE_CHEST);
	}
	else if(iPlayersNum >= 0 && iPlayersNum <= 10)
	{			
		Points[id] += point;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, point);
	}
	else if(iPlayersNum >= 11 && iPlayersNum <= 20)
	{			
		Points[id] += points;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, points);
	}
	else if(iPlayersNum >= 21)
	{
		Points[id] += plus;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, plus);
	}	
}

public SavePassword(id)
{
	if(!Loged[id])
	{
		if(!gRegistered[id])
		{
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
			} else {
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
		}
		return PLUGIN_HANDLED;
	}
	
	new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
	set_user_info(id, passfield, SavedPassword[id]);
	client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]); 
	
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
	
	return PLUGIN_HANDLED;
}

public KillsLeft(id)
{
	if(!Loged[id])
	{
		if(!gRegistered[id])
		{
			print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		} else {
			print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
		}
		return PLUGIN_HANDLED;
	}
	
	if(get_user_flags(id) & ACCESS_ADMIN) 
	{
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_75", EVENT, 75 - (Killers[id] % 75), Killers[id] % 75);
	} 
	else if(get_user_flags(id) & ACCESS_VIP) 
	{
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_100", EVENT, 100 - (Killers[id] % 100), Killers[id] % 100);
	} else {	
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_125", EVENT, 125 - (Killers[id] % 125), Killers[id] % 125);
	}
	return PLUGIN_CONTINUE;
}

public TextMsg_Killed_Hostage(id)
{
	Points[id] -= HOSTAGE_KILL_PENALTY;
	
	set_hudmessage(255, 0, 0, -1.0, 0.15, 0, 6.0, 2.0);
	show_hudmessage(id, "%L", LANG_PLAYER, "POINT_REDUCE", HOSTAGE_KILL_PENALTY);
	
	SavePoints(id);
}

public Hostage_Rescued() 
{ 
	static loguser[80], name[32], id;
	read_logargv(0, loguser, 79);  parse_loguser(loguser, name, 31);
	id = get_user_index(name);
	
	if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
	
	if(get_user_flags(id) & ACCESS_ADMIN)
	{
		Points[id] += HOSTAGE_ESCAPE_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_ADMIN);
				
		drop_item(id, DROP_RATE_HOSTAGE_ADMIN);
		
		SavePoints(id);
	}
	else if(get_user_flags(id) & ACCESS_VIP)
	{
		Points[id] += HOSTAGE_ESCAPE_VIP;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_VIP);
		
		drop_item(id, DROP_RATE_HOSTAGE_VIP);
		
		SavePoints(id);
	}
	else
	{
		Points[id] += HOSTAGE_ESCAPE;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE);
		
		drop_item(id, DROP_RATE_HOSTAGE);
		
		SavePoints(id);
	}
} 

public LoadConnected()
{
	gCanLoad = 1;
	gCanSave = 1;
	
	for(new i=1; i <= get_maxplayers(); i++) 
	{
		if(is_user_connected(i)) 
		{
			add_delay(i);
		}
	}
}

public plugin_end()
{
	SQL_FreeHandle(g_hTuple);
}  

public bomb_explode(planter, defuser)
{
	if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)

	if(get_user_flags(planter) & ACCESS_ADMIN)
    {
		Points[planter] += BOMB_EXPLODE_POINTS_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_ADMIN);

		drop_item(planter, DROP_RATE_PLANT_ADMIN);
		
		SavePoints(planter);
	}	
	else if(get_user_flags(planter) & ACCESS_VIP)	
	{
		Points[planter] += BOMB_EXPLODE_POINTS_VIP;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_VIP);

		drop_item(planter, DROP_RATE_PLANT_VIP);
		
		SavePoints(planter);
    }	
	else
	{
		Points[planter] += BOMB_EXPLODE_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS);

		drop_item(planter, DROP_RATE_PLANT);
		
		SavePoints(planter);
	}
}

public bomb_planted(planter)
{
	if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)

	if(get_user_flags(planter) & ACCESS_ADMIN)
    {
		Points[planter] += BOMB_PLANTED_POINTS_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_ADMIN);

		drop_item(planter, DROP_RATE_PLANT_ADMIN);
		
		SavePoints(planter);
	}	
	else if(get_user_flags(planter) & ACCESS_VIP)	
	{
		Points[planter] += BOMB_PLANTED_POINTS_VIP;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_VIP);

		drop_item(planter, DROP_RATE_PLANT_VIP);
		
		SavePoints(planter);
    }	
	else
	{
		Points[planter] += BOMB_PLANTED_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS);

		drop_item(planter, DROP_RATE_PLANT);
		
		SavePoints(planter);
	}
}

public bomb_defused(defuser)
{
	if(is_user_connected(defuser) && get_playersnum() >= NEED_MIN_PLAYERS)
	
	if(get_user_flags(defuser) & ACCESS_ADMIN)
	{	
		Points[defuser] += BOMB_DEFUSED_POINTS_ADMIN;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_ADMIN);
	
		drop_item(defuser, DROP_RATE_DEF_ADMIN);
	
		SavePoints(defuser);
	}
	else if(get_user_flags(defuser) & ACCESS_VIP)
    {
		Points[defuser] += BOMB_DEFUSED_POINTS_VIP;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_VIP);
				
		drop_item(defuser, DROP_RATE_DEF_VIP);
		
		SavePoints(defuser);
    }
	else 	
	{
		Points[defuser] += BOMB_DEFUSED_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS);
				
		drop_item(defuser, DROP_RATE_DEF);
		
		SavePoints(defuser);
	}
}

public RoundStart() 
{
	gEnd = false;
}

public Message_SendAudio(iMsgId, iMsgDest, id)
{
	if(!id && !gEnd && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szSound[14]; get_msg_arg_string(2, szSound, charsmax(szSound));
		new iPlayers[32], iNum, tId;
			
		if(equal(szSound, "%!MRAD_ctwin"))
		{
			get_players(iPlayers, iNum, "ceh", "CT");

			for(new i; i < iNum; i++)
			{
				tId = iPlayers;
				
				if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_CT) 
				{
					continue;
				}
				
				Points[tId] += ROUND_WIN_POINTS;
				
				set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
				show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
							
				SavePoints(tId);
				SaveData(tId);
			}
			gEnd = true;
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CT_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
		}
		else if( equal(szSound, "%!MRAD_terwin") )
		{
			get_players(iPlayers, iNum, "ceh", "TERRORIST");

			for(new i; i < iNum; i++)
			{
				tId = iPlayers;
										
				if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_T) 
				{
					continue;
				}
				
				Points[tId] += ROUND_WIN_POINTS;

				set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
				show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
				
				SavePoints(tId);
				SaveData(tId);
			}
			gEnd = true;
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "T_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
		}
	}
}

public PlayerSpawn(id) 
{
	if(is_user_alive(id))
	{
		if(!Loged[id] && gRegistered[id])
		{
			RegMenu(id);
			set_user_maxspeed(id, 1.0);
					
			if(!equal(Password[id], SavedPassword[id]))
			{
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
			}
		}
		
		if(!gRegistered[id]) 
		{
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		}
		
		if(get_pcvar_num(cvar_refill_spawn))
		{
			static iWeapons[32], iNum, i, iGun; iNum = 0;
			get_user_weapons(id, iWeapons, iNum);
			
			for( i = 0; i < iNum; i++ ) 
			{ 
				for (new a = 0; a < sizeof (g_other_weapons); a++)
					if (iWeapons == g_other_weapons[a])
					continue;
				
				for (new a = 0; a < sizeof (g_weapons); a++) 
				{
					
					if(g_weapons[a] == iWeapons)
					{
						if (get_weapon_maxclip(iWeapons))
						{
							iGun = has_user_weapon(id, iWeapons);
							client_cmd(id, "spk ^"items/9mmclip1.wav^"");
							cs_set_weapon_ammo(iGun, get_weapon_maxclip(iWeapons[i]));
							SetFullBpAmmo(id, iWeapons[i]);
						}
					}
				}
			} 
		} 
		
		if(cs_get_user_team(id) == CS_TEAM_CT) 
		{
			cs_set_user_defuse(id, 1);
		}
	}
	return PLUGIN_CONTINUE;
}

public col_changer( msg_id, msg_dest, rcvr )
{
	new str2[26];
	get_msg_arg_string( 2, str2, 25 );
	if( equal( str2, "#Cstrike_Chat", 13 ) )
	{
		new str3[22];
		get_msg_arg_string( 3, str3, 21 );
		
		if( !strlen( str3 ) )
		{
			new str4[101];
			get_msg_arg_string( 4, str4, 100 );
			new sndr = get_msg_arg_int( 1 );
			
			new bool:is_team_msg = !bool:equal( str2, "#Cstrike_Chat_All", 17 );
			
			new sndr_team = get_user_team( sndr );
			new bool:is_sndr_spec = !bool:( 0 < sndr_team < 3 );
			
			new bool:same_as_last = bool:( alv_sndr == sndr && equal( alv_str2, str2 ) && equal( alv_str4, str4) );
			
			if( !same_as_last )
			{ // Duplicate message once
				new allchat = clamp( get_pcvar_num( p_allchat ), 0, 2 );
				if( allchat == 2 || ( allchat == 1 && clamp( get_pcvar_num( p_alltalk ), 0, 1 ) == 1 ) )
				{
					if( !( is_team_msg && ( is_sndr_spec || is_team_msg && get_pcvar_num( p_teamchat ) == 0 ) ) )
					{ // Don't duplicate if it's a spectator team message
						new flags[5], team[10];
						if( is_user_alive( sndr ) ) flags = "bch";
						else flags = "ach";
						
						if( is_team_msg )
						{
							add( flags[strlen( flags )], 4, "e" );
							if( sndr_team == 1 ) team = "TERRORIST";
							else team = "CT";
						}
						
						new players[32], num;
						get_players( players, num, flags, team );
						
						buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 ); // normal colors
						
						for( new i=0; i < num; i++ )
						{
							message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, players[i] );
							write_byte( sndr );
							write_string( msg );
							message_end();
						}
						
					}
					
					alv_sndr = sndr;
					alv_str2 = str2;
					alv_str4 = str4;
					
					if(task_exists(411))
						remove_task(411);
					
					set_task( 0.1, "task_clear_antiloop_vars", 411 );
				}
			}
			
			if(gLogged[sndr])
			{
				if( !same_as_last )
					buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 );
				
				set_msg_arg_string( 2, msg );
				set_msg_arg_string( 4, "" );
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[ ] )
{
	new sndr_name[33];
	get_user_name( sndr, sndr_name, 32);
	
	new prefix[126] = "^x01";
	if( get_pcvar_num( p_hidestat ) == 0 )
	{
		if( is_sndr_spec ) prefix = "^x01*SPEC* ";
		else if( !is_user_alive( sndr ) ) prefix = "^x01*DEAD* ";
	}

	if(is_user_connected(sndr))
    {
    	if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_RCON)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Savininkas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_B)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Vyr. Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
    	else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_C)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_D)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Administratorius] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
    	else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_E)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[ADMIN] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_H)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[VIP] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr]  && get_user_flags(sndr) & ADMIN_USER)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(!gLogged[sndr])
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Neprisijunges] ");
			add(prefix[strlen(prefix)-1], 29, szMsg);
		}
	}
	
	if( is_team_msg )
	{
		if( is_sndr_spec ) prefix = "^x01(Spectator) ";
		else if( sndr_team == 1 ) add( prefix[strlen(prefix)-1], 29, "^x01(Terrorist) " );
			else if( sndr_team == 2 ) add( prefix[strlen(prefix)-1], 29, "^x01(Counter-Terrorist) " );
		}
	
	format( msg, 512, "%s%s%s :  %s%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, colchar[msgcol], str4 );
	return PLUGIN_HANDLED;
}

public task_clear_antiloop_vars( )
{
	alv_sndr = 0;
	alv_str2 = "";
	alv_str4 = "";
	
	return PLUGIN_HANDLED;
}
 
public MenuOpen(id)
{
	if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
	
	aAmount[id] = 1;
	MenuMod[id] = 0;
	Menu(id);
	return PLUGIN_HANDLED;
}

public client_death(Killer, Victim, wpnindex, hitplace, TK)
{
	if(Killer == Victim) { return PLUGIN_HANDLED; }
	
	if(!gRegistered[Victim]) 
	{
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
	}
	
	if(!gRegistered[Killer]) 
	{
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
	}
		
	Patirtis[Killer] += 3;
	Kills[Killer]++;
		
	Killers[Killer]++;
	
	static kGun; kGun = get_user_weapon(Killer, _, _);
	new szName[32]; get_user_name(Killer, szName, 31);
		
	new rNum; rNum = random(CHEST_COUNT)+1;
	
	new Point = random_num(2000, 8000);
	
	if(bUsingGuns[Killer][kGun]) 
	{
		uWeaponKills[bUsingGuns[Killer][kGun]][Killer]++;
		SaveGunsKills(Killer);
		set_task(0.1, "UpdateStatusText", Killer);
	}
		
	if(Rang[Killer] < sizeof(Rangs) && Rang[Killer] < file_size(RangFile, 1))
	{
		if(Patirtis[Killer] >= NeedPatirtis[Rang[Killer]]) 
		{
			Rang[Killer]++;
			
			pKey[Killer] += Rang[Killer];
			Chest[Killer][rNum] += Rang[Killer];
			Points[Killer] += Point;
		
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_PASIEKE", Prefix, szName, Rangs[Rang[Killer]]);
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_BONUS", Prefix, szName, Rang[Killer], Rang[Killer], Point);

			SaveRang(Killer);
			SaveKeys(Killer);
			SaveChests(Killer);
		}

	}
		
	if(Killers[Killer] % 75 == 0 && get_user_flags(Killer) & ACCESS_ADMIN) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
	else if(Killers[Killer] % 100 == 0 && get_user_flags(Killer) & ACCESS_VIP) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
	else if(Killers[Killer] % 125 == 0) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
		
	new pPont, vPont, hsPont;
	pPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);

	if(hitplace == HIT_HEAD) { pPont += hsPont = POINTS_KILL_HS; }
	
	Points[Killer] += pPont;
	
	if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
	{
		vPont += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
		Points[Killer] += vPont;
	}
	else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
	{
		vPont += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
		Points[Killer] += vPont;
	}
	
	set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);	
	
	if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
			
			drop_item(Killer, DROP_RATE_KILL_ADMIN);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
			
			drop_item(Killer, DROP_RATE_KILL_ADMIN);
		}
	}
	else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
			
			drop_item(Killer, DROP_RATE_KILL_VIP);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
			
			drop_item(Killer, DROP_RATE_KILL_VIP);
		}
	}
	else 
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d HS", LANG_PLAYER, "POINT", pPont, hsPont);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L", LANG_PLAYER, "POINT", pPont);
		}
	}
	
	drop_item(Killer, DROP_RATE_KILL);
	
	SavePoints(Killer);
	SaveKillers(Killer);
	
	return PLUGIN_CONTINUE;
}

public SetModel(entity, model[])
{
	if(!pev_valid(entity))
		return FMRES_IGNORED;
	
	static Classname[32]; pev(entity, pev_classname, Classname, sizeof(Classname));
	
	if(!equal(Classname, "weaponbox"))
		return FMRES_IGNORED;
	
	static iOwner; iOwner = pev(entity, pev_owner);
	static iWeapon; iWeapon = get_user_weapon(iOwner, _, _);
	static weapon; weapon = find_ent_by_owner(-1, eWeapon[iWeapon], entity);
	
	if(bUsingGuns[iOwner][iWeapon] && !pev(weapon, pev_impulse))
	{
		if(!pev_valid(weapon))
			return FMRES_IGNORED;
		
		set_pev(weapon, pev_impulse, bUsingGuns[iOwner][iWeapon]);
		
		if(strlen(DefaultSkinW[iWeapon]) > 5) 
		{
			entity_set_model(entity, DefaultSkinW[iWeapon]);
			
			return FMRES_SUPERCEDE;
		}
		return FMRES_IGNORED;
	}
	
	return FMRES_IGNORED;
}

public MarketCost(id)
{
	if(inMarket[id] || !Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0)
	{
		client_cmd(id, "messagemode Cost");
		return PLUGIN_HANDLED;
	}
	else if(MARKET_MIN_PRICE > Cost)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
		client_cmd(id, "messagemode Cost");
		MarketPoints[id] = MARKET_MIN_PRICE;
		Menu(id);
		MenuMod[id] = 3;
		return PLUGIN_HANDLED;
	}
	else
	{
		MarketPoints[id] = Cost;
		Menu(id);
		MenuMod[id] = 3;
		return PLUGIN_CONTINUE;
	}
}
public SetMarketAmount(id)
{
	if(!Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 1)
	{
		client_cmd(id, "messagemode setMarketAmount");
		return PLUGIN_HANDLED;
	}
	else
	{
		mAmount[id] = Cost;
		Menu(id);
		MenuMod[id] = 3;
	}
	return PLUGIN_HANDLED;
}
public SetAmount(id)
{
	if(!Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0)
	{
		client_cmd(id, "messagemode setAmount");
		return PLUGIN_HANDLED;
	}
	else
	{
		aAmount[id] = Cost;
		Menu(id);
		MenuMod[id] = 5;
	}
	return PLUGIN_HANDLED;
}
public GiftPoint(id)
{
	if(inMarket[id] || !Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0 || Points[id] < Cost)
	{
		client_cmd(id, "messagemode Gift");
		return PLUGIN_HANDLED;
	}
	else
	{
		aPoints[id] = Cost;
		Menu(id);
		MenuMod[id] = 5;
		return PLUGIN_CONTINUE;
	}
}

public WeaponSwitch(Weapon)
{
	new id = get_pdata_cbase(Weapon, 41, 4);
	new wid = cs_get_weapon_id(Weapon);
	
	if(id > 32 || id < 1) 
	{
		return HAM_SUPERCEDE;
	}
	
	if(!is_user_connected(id)) 
	{
		return HAM_SUPERCEDE;
	}
	
	if(pev(Weapon, pev_impulse))
	{
		set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
		
		if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
		}
	}
	else if(bUsingGuns[id][wid])
	{
		set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
		
		if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
		}
		set_task(0.1, "UpdateStatusText", id);
	}
	else if(strlen(DefaultSkin[wid]) > 5)
	{
		if(cs_get_user_team(id) == CS_TEAM_CT && wid == 29) { wid = 31; }
		
		set_pev(id, pev_viewmodel2, DefaultSkin[wid]);
		
		if(strlen(DefaultSkinP[wid]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, DefaultSkinP[wid]);
		}
		set_task(0.1, "UpdateStatusText", id);
	}
	else 
	{
		set_task(0.1, "UpdateStatusText", id);
	}
	
	return HAM_IGNORED;
}

public Menu(id)
{
	if(!Loged[id]) { RegMenu(id); return; }
	
	new sMenu, szText[256];
	
	switch(MenuMod[id])
	{
		case -2: // Kazkas su dovanom
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				if(Chest[id][i] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
					
					new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
					menu_additem(sMenu, szText, szButton);
					
					All++;
				}
			}
			
			if(pKey[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
				menu_additem(sMenu, szText, KEY_ID_TEXT);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case -1: // Deti i turgu
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				if(Chest[id][i] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
					
					new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
					menu_additem(sMenu, szText, szButton);
					
					All++;
				}
			}
			
			if(pKey[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
				menu_additem(sMenu, szText, KEY_ID_TEXT);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 0: 
		{
			formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUTOSKINS");
			menu_additem(sMenu, szText, "1");
			
			formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTOCHESTOPEN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
			menu_additem(sMenu, szText, (!inMarket[id]) ? "2" : "0");
			
			formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUCHESTINFO");
			menu_additem(sMenu, szText, "7");
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOMARKET");
			menu_additem(sMenu, szText, "3");
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOSHOP");
			menu_additem(sMenu, szText, "6");
			
			formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
			menu_additem(sMenu, szText, (!inMarket[id]) ? "4" : "0");
			
			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]]);
			menu_additem(sMenu, szText, (!inMarket[id]) ? "5" : "0");
		}
		case 1: // Skinai
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOSKINS", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				formatex(String, 31, "%d %d", i, Weapons[i]);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 2: // Skrynios
		{
			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]);
			sMenu = menu_create(szText, "MenuHandler");

			new call = menu_makecallback("Call_Back");
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
				menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && pKey[id] > 0) ? -1 : call);
			}
		}
		case 3: // Turgus
		{
			aThing[id] = 0; 
			
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOMARKET", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			new call = menu_makecallback("Call_Back");
			
			aThing[32] = 0; 
			
			new String[32], All;
			new Name[32]; get_user_name(id, Name, 31);

			if(!inMarket[id])
			{
				for(new i = 1; i < AllWeapon; i++) 
				{
					if(i == WeaponinMarket[id] && uWeapon[i][id] > 0) 
					{
						formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACES", WeaponNames[i], szWeaponNames[Weapons[i]], MarketPoints[id]);
						All = 50;
					}
				}
				
				// log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
				if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
				{
					for(new i=1; i <=CHEST_COUNT; i++)
					{
						// log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
						if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
						{
							formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
							
							All++;
							break;
						}
					}
				}
				
				if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEK", MarketPoints[id], mAmount[id]);
					All++;
				}
				
				if(All == 0)
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
				
				menu_additem(sMenu, szText, "-1");
				
				if(All != 50)
				{
					formatex(szText, sizeof(szText), "Kiekis: \r%d", mAmount[id]);
					menu_additem(sMenu, szText, "-99");
				}
			}
			
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER,	(!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
			menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
			
			for(new x = 1; x <= get_maxplayers(); x++) 
			{
				if(!is_user_connected(x) || is_user_bot(x))
				continue;
				
				if(inMarket[x] && MarketPoints[x] > 0)
				{
				num_to_str(x, String, 31);
								
				if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
				{
					// log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
					
					new chId = (WeaponinMarket[x]-CHEST_ID)+1;
				
					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);
					menu_additem(sMenu, szText, String);
				}
				else if(KEY_ID == WeaponinMarket[x])
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK", MarketPoints[x], mAmount[x] > pKey[x] ? pKey[x] : mAmount[x], Name);
					menu_additem(sMenu, szText, String);
				}
				else
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS", WeaponNames[WeaponinMarket[x]], szWeaponNames[Weapons[WeaponinMarket[x]]], MarketPoints[x], Name);
					menu_additem(sMenu, szText, String);
					}
				}
			}
		}
		case 4: // Keitykla
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] == 0 || weaponRang[i] == 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 5: // Dovanos
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			new call = menu_makecallback("Call_Back");
			
			new All, Name[126], String[32];
			get_user_name(aTarget[id], Name, 31);
			
			if(aTarget[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
				menu_additem(sMenu, szText, "-1");
				
				for(new i = 1; i < AllWeapon; i++)
				{
					if(i == aThing[id] && uWeapon[i][id] > 0)
					{
						formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", WeaponNames[i]);
						menu_additem(sMenu, szText, "-2");
						All++;
					}
				}
				
				if(aThing[id] <= MAX && All == 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
					menu_additem(sMenu, szText, "-2");
				}
				else if(aThing[id] > MAX)
				{
					if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
					if(KEY_ID == aThing[id]) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK"); }
					
					menu_additem(sMenu, szText, "-2");
				}
				if(aThing[id] > MAX)
				{
					formatex(szText, sizeof(szText), "Kiekis: \r%d", aAmount[id]);
					menu_additem(sMenu, szText, "-75");
				}
				
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
				menu_additem(sMenu, szText, "-4");
				
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
				menu_additem(sMenu, szText, "-3");
			}
			else
			{
				for(new i = 1; i <= get_maxplayers(); i++)
				{
					if(is_user_connected(i) && !is_user_bot(i))
					{
						get_user_name(i, Name, 31);
					
						if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
					
						num_to_str(i, String, 31);
						menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
				}
			}
		}
	}
	case 6: // Parduotuvė
	{	
		formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "PMAIN", LANG_PLAYER, "YPOINT", Points[id]);
		sMenu = menu_create(szText, "MenuHandler");
		
		new call = menu_makecallback("Call_Back");
		new accesNum = get_access(id);
		new Float:gPercent = ((accesNum == 4) ? 0.9 : ((accesNum == 3) ? 0.94 : (accesNum == 2) ? 0.97 : 1.0));
		
		new gPrice = floatround(1700*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		gPrice = floatround(8000*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_5", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		gPrice = floatround(14000*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_10", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		for(new i=1; i <=CHEST_COUNT; i++)
		{
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), 1250);
			menu_additem(sMenu, szText, _, _, (Points[id] < 1250) ? call : -1);
		}
	}
	case 7: // Skrynių info
	{		
		formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "IMAIN", LANG_PLAYER, "YPOINT", Points[id]);
		sMenu = menu_create(szText, "MenuHandler");
		
		for(new i=1; i <=CHEST_COUNT; i++)
		{
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTINFOPIECE", chest_name(i));
			menu_additem(sMenu, szText);
			}
		}
	}
	menu_display(id, sMenu);
}

public Call_Back(id, menu, item)
	return ITEM_DISABLED;

public MenuHandler(id, gMenu, item)
{	
	if(item == MENU_EXIT)
	{
		MenuMod[id] = 0;
		menu_destroy(gMenu);
		return PLUGIN_HANDLED;
	}
	
	new aMenu[2], Data[4][32], sKey[32], Name[32], mName[32], Key;
	menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
	
	parse(Data[0], sKey, 31);
	Key = str_to_num(sKey);
	
	switch(MenuMod[id])
	{
		case -2:
		{
			MenuMod[id] = 5;
			aThing[id] = Key;
			
			Menu(id);
		}
		case -1:
		{
			MenuMod[id] = 3;
			WeaponinMarket[id] = Key;
			
			client_cmd(id, "messagemode Cost");
			
			Menu(id);
		}
		case 0:
		{
			MenuMod[id] = Key;
			Menu(id);
			
		}
		case 1:
		{
			parse(Data[0], Data[2], 31, Data[3], 31);
			
			if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2])) {
				bUsingGuns[id][str_to_num(Data[3])] = 0;
				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])]);
				} else {
				bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
				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])]);
				set_task(0.1, "UpdateStatusText", id);
			}
			
			static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");		
			for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }		
			formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
					
			SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
			
			log_errors("[SKIN CHANGE] %s", szQuery);
			
			MenuMod[id] = 1;
			Menu(id);
		}
		case 2:
		{
			if(Chest[id][(item+1)] <= 0)
			{
				Chest[id][(item+1)] = 0;
				
				if(pKey[id] < 0)
					pKey[id] = 0;
				
				return PLUGIN_CONTINUE;
			}
			
			Chest[id][(item+1)]--;
			pKey[id]--;
			
			new chest = item+1;
			
			new Float:rNum = random_float((random(5)*1.0), 175.0);
			new chance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : 100 ));
			/////////////////////////////////////////// 
			new skinsCnt = chestsChance[chest][chance];
			new skinNum = random(skinsCnt);
			new skinId = chestsList[chest][chance][skinNum];
			
			new szName[32]; get_user_name(id, szName, 31);
			
			
			if(1 <= chance <= 25) { print_color(0, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
			else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_SELF", Prefix, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
			
			uWeapon[skinId][id]++;
			SaveData(id);
			
			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);
			show_motd(id, szMotd, chest_name((item+1)));
			Menu(id);
		}
		case 3:
		{
			if(Key == -1) { MenuMod[id] = -1; Menu(id); }
			else if(Key == 0)
			{
				if(inMarket[id]) { inMarket[id] = false; }
				else if(MarketPoints[id] > 0)
				{
					if(mAmount[id] < 1) mAmount[id] = 1;
					get_user_name(id, Name, 31);
					
					switch(WeaponinMarket[id])
					{
						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]); }
						case KEY_ID: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, mAmount[id], MarketPoints[id]); }
						default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, WeaponNames[WeaponinMarket[id]], szWeaponNames[Weapons[WeaponinMarket[id]]], MarketPoints[id]); }
					}
					
					inMarket[id] = true;
				}
				gLastMarketTime[id] = get_systime();
				Menu(id);
			}
			
			
			else if(Key == -99)
			{
				client_cmd(id, "messagemode setMarketAmount");
			}
			else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
			{
				get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
				
				if(WeaponinMarket[Key] < CHEST_ID)
				{
					if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					
					print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
					uWeapon[WeaponinMarket[Key]][id]++;
					uWeapon[WeaponinMarket[Key]][Key]--;
					
					if(!uWeapon[WeaponinMarket[Key]][Key])
						for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
					
					static szQuery[512], szUGuns[128];
					format(szUGuns, sizeof(szUGuns), "");
					for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
					formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));					
					
					SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
					
					log_errors("[SKIN SHOP] %s", szQuery);
					
					format(szUGuns, sizeof(szUGuns), "");
					for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
					formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
										
					SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
					
					log_errors("[SKIN SHOP] %s", szQuery);
				}
				else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
				{
					new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
					
					if(Chest[Key][chId] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);

					Chest[id][chId]++;
					Chest[Key][chId]--;
				}
				else if(WeaponinMarket[Key] == KEY_ID)
				{
					if(pKey[Key] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					
					client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, MarketPoints[Key], Name);
										
					pKey[id]++; pKey[Key]--;
				}
				
				emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
				Points[Key] += MarketPoints[Key];
				Points[id] -= MarketPoints[Key];
				SaveData(Key);
				SaveData(id);
				mAmount[Key]--;
				
				if(mAmount[Key] <= 0)
				{
					inMarket[Key] = false;
					MarketPoints[Key] = 0;
					WeaponinMarket[Key] = 0;
				}
				MenuMod[id] = 0;
			}
		}
		case 4:
		{				
			new Random = random_num(1, 100);
					
			if(Random < 5 && weaponRang[Key] == 3)
			{
				new chest = item+1;	

				new chance = 5;
				new skinsCnt = chestsChance[chest][chance];
				new skinNum = random(skinsCnt);
				new skinId = chestsList[chest][chance][skinNum];
				
				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]]);
				
				uWeapon[skinId][id]++;
				SaveData(id);
			}
			else if(Random < 25 && weaponRang[Key] == 4)
			{
				new chest = item+1;	
				
				new chancerare = 25;
				new skinsCntrare = chestsChance[chest][chancerare];
				new skinNumrare = random(skinsCntrare);	
				new skinIdrare = chestsList[chest][chancerare][skinNumrare];
				
				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]]);
				
				uWeapon[skinIdrare][id]++;
				SaveData(id);
			}
			else 
				
			if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
			{
				uWeapon[Key][id]--;
				
				bUsingGuns[id][Weapons[Key]] = 0;
				
				if(!uWeapon[Key][id])
					uWeaponKills[Key][id] = 0;
					
				new Points;
					
				if(weaponRang[Key] == 1) Points = random_num(50, 2500);	   	  // Y
				else if(weaponRang[Key] == 2) Points = random_num(50, 2500);  // R
				if(weaponRang[Key] == 3) Points = random_num(50, 2500); 	  // B
				else if(weaponRang[Key] == 4) Points = random_num(200, 300);  // W
								
				cs_set_user_points(id, cs_get_user_points(id) +Points); 
				
				client_print_color(id, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "MENUTODUST", get_user_name_ex(id), Points);
				
				log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
				
				SaveData(id);
				} else {
				uWeapon[Key][id] = 0;
				SaveData(id);
			}
			
			Menu(id);
		}
		case 5:
		{
			if(Key == -1) { aTarget[id] = 0; }
			if(Key == -2) { MenuMod[id] = -2; }
			if(Key == -3)
			{
				if(!is_user_connected(aTarget[id])) 
				{
					return PLUGIN_CONTINUE;
				}
				
				if(aThing[id] < CHEST_ID)
				{
					if(uWeapon[aThing[id]][id] > 0)
					{
						uWeapon[aThing[id]][aTarget[id]]++;
						uWeapon[aThing[id]][id]--;
						
						if(!uWeapon[aThing[id]][id])
							for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
						
						static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");		
						for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }		
						formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
						
						SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
						
						log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
						log_errors("[SKIN GIFT] %s", szQuery);
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), WeaponNames[aThing[id]], szWeaponNames[Weapons[aThing[id]]]);
					}
					// else client_print_color(id, print_team_default, "Neturi tiek skinu!");
				}
				else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
				{
					new cId = aThing[id]-CHEST_ID;
					if(Chest[id][cId] >= aAmount[id])
					{
						Chest[aTarget[id]][cId]+=aAmount[id]; 
						Chest[id][cId]-=aAmount[id];
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), aAmount[id]);
					}
					else client_print_color(id, print_team_default, "Neturi tiek skryniu!");
				}
				else if(aThing[id] == KEY_ID)
				{
					if(pKey[id] >= aAmount[id])
					{
						pKey[aTarget[id]]+=aAmount[id]; pKey[id]-=aAmount[id];
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), aAmount[id]);
					}
					else client_print_color(id, print_team_default, "Neturi tiek raktu!");
				}
				
				if(aPoints[id] > 0 && Points[id] >= aPoints[id])
				{
					Points[aTarget[id]] += aPoints[id];
					Points[id] -= aPoints[id];
					client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
					log_errors("[SKINLOG PTS] %s padovanojo %s - %d tasku", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
				}
				
				SaveData(aTarget[id]);
				SaveData(id);
				
				MenuMod[id] = 0;
				aThing[id] = 0;
				aTarget[id] = 0;
				aPoints[id] = 0;
			}
			
			if(Key == -75)
			{
				client_cmd(id, "messagemode setAmount");
			}
			
			if(Key == -4) { client_cmd(id, "messagemode Gift"); }
			if(Key > 0) { aTarget[id] = Key; }
			Menu(id);
		}
		case 6:
		{
			new accesNum = get_access(id);
			new Float:gPercent = ((accesNum == 4) ? 0.92 : ((accesNum == 3) ? 0.96 : (accesNum == 2) ? 0.98 : 1.0));
			
			switch(item)
			{
				case 0: 
				{
					Points[id] -= floatround(1700*gPercent, floatround_floor);
					pKey[id]++;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix);
					SaveKeys(id);
				}
				case 1: 
				{
					Points[id] -= floatround(8000*gPercent, floatround_floor);
					pKey[id] += 5;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_5", Prefix);
					SaveKeys(id);
				}
				case 2: 
				{
					Points[id] -= floatround(14000*gPercent, floatround_floor);
					pKey[id] += 10;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_10", Prefix);
					SaveKeys(id);
				}
				case 3..(CHEST_COUNT+3):
				{
					Chest[id][item-2] += 1;
					
					Points[id] -= 1250;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, chest_name(item-2));
					
					SaveChests(id);
				}
			}
		}
		case 7:
		{
			new szMotd[126]; formatex(szMotd, charsmax(szMotd), "http://185.80.128.125/pbgo/b.php?chest=%d", (item+1));
			show_motd(id, szMotd, chest_name((item+1)));
			Menu(id);
		}
		default: { MenuMod[id] = 0; }
	}
	
	menu_destroy(gMenu);
	return PLUGIN_HANDLED;
}

public client_disconnected(id)
{
	Patirtis[id] = 0, Kills[id] = 0,Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
	for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
	for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
	for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
	
	gWarnings[id] = 0;
	WeaponinMarket[id] = 0;
	MarketPoints[id] = 0;
	inMarket[id] = 0;
	Password[id] = "";
	SavedPassword[id] = "";
	Loged[id] = false;
	gRegistered[id] = false;
	gLogged[id] = false;
	bTrade[id] = false;
	bTradeAccepted[id] = false;
}

public client_putinserver(id)
{
	Patirtis[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
	for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
	for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
	for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
	
	gWarnings[id] = 0;
	Password[id] = "";
	SavedPassword[id] = "";
	Loged[id] = false;
	bTrade[id] = false;
	bTradeAccepted[id] = false;
	gRegistered[id] = false;
	gLogged[id] = false;
	gLastMarketTime[id] = get_systime();

	if(gCanLoad) { set_task(0.5, "Registered", id); }
}

public add_delay(id)
{	
	switch(id)
	{
		case 1..8: set_task(0.1, "Registered", id);
			case 9..16: set_task(0.2, "Registered", id);
			case 17..24: set_task(0.3, "Registered", id);
			case 25..32: set_task(0.4, "Registered", id);
		}
}

//============================================================//
//                 [~ Saving / Loading datas ~]	              //
//============================================================//
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
{ 
	if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
	else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
}

public Login(id)
{
	if(!is_user_connected(id) || is_user_bot(id))
		return;
	
	static szQuery[256], iData[1]; iData[0] = id;
	formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
	
	SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
	
	log_errors("[LOGIN] %s", szQuery);
}

public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
{
	if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
	else 
	{ 
		new id = iData[0];
		
		if(SQL_NumResults(hQuery))
		{
			new szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256], szChests[128];
			
			SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
			Patirtis[id] = SQL_ReadResult(hQuery, 2); 
			Kills[id] = SQL_ReadResult(hQuery, 3);    
			Points[id] = SQL_ReadResult(hQuery, 4);   
			pKey[id] = SQL_ReadResult(hQuery, 5);	  
			Rang[id] = SQL_ReadResult(hQuery, 7);  	  
			Killers[id] = SQL_ReadResult(hQuery, 8);  
			
			SQL_ReadResult(hQuery, 9, szSkins, sizeof(szSkins));    
			SQL_ReadResult(hQuery, 10, szUGuns, sizeof(szUGuns));   
			SQL_ReadResult(hQuery, 11, szKSkins, sizeof(szKSkins)); 
			SQL_ReadResult(hQuery, 6, szChests, sizeof(szChests)); 
			
			SQL_NextRow(hQuery);
			
			new myNumbers[512+MAX];
			
			new count = ExplodeString(szSkins, myNumbers);
			if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
			
			count = ExplodeString(szKSkins, myNumbers);
			if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
			
			count = ExplodeString(szUGuns, myNumbers);
			if(count)
			{
				for(new i = 1; i < CSW_VESTHELM; i++)
				{
					if(myNumbers[i] <= MAX)
					{
						if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
						{
							bUsingGuns[id][i] = myNumbers[i];
						}
					}
				}
			}
			
			count = ExplodeString(szChests, myNumbers);
			if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
			
			if(!equal(Password[id], SavedPassword[id])) 
			{
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
			}
		}
		Loged[id] = true;
		UnsetBlack(id);
	} 
}

public SaveData(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		static szQuery[2048], szSkins[1024], szKSkins[1024], szUGuns[128], szChests[128];
		format(szSkins, sizeof(szSkins), "");
		format(szKSkins, sizeof(szKSkins), "");
		format(szUGuns, sizeof(szUGuns), "");
		format(szChests, sizeof(szChests), "");
		
		
		for(new i; i < MAX; i++)
		{
			format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]);
			format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]);
		}
		for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
		for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
		
		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);
		
		SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE] %s", szQuery);
	}
}

public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{
	if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
	else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
}

public UnsetBlack(id)
{
	set_user_maxspeed(id, 250.0);
	
	message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
	write_short(1<<10);
	write_short(1<<10);
	write_short(0x0000);
	write_byte(255);
	write_byte(255);
	write_byte(255);
	write_byte(50);
	message_end();
}

public TradeMenu(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	if(bTrade[id])
	{
		if(bTradeAccepted[id])
		{
			client_print_color(id, 3, "[Trade] Jus jau tradinate!");
			return PLUGIN_CONTINUE;
		}
		
		client_print_color(id, 3, "[Trade] Jums jau pasiulytas trade, jei sutinkate rasykita /sutinku arba /taccept");
		return PLUGIN_CONTINUE;
	}
	
	new Name[32], String[32], sMenu;
	
	sMenu = menu_create("Trade Menu", "MenuHandler");
	new call = menu_makecallback("Call_Back");
	
	for(new i; i < get_maxplayers(); i++)
	{
		if(is_user_connected(i) && !is_user_bot(i))
		{
			get_user_name(i, Name, 31);
			
			if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
			
			num_to_str(i, String, 31);
			menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
		}
	}
	
	menu_display(id, sMenu);
	
	return PLUGIN_CONTINUE;
}

public RegMenu(id)
{
	static sId; sId = id;
	id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
	
	if(Loged[id]) {
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
		Menu(id);
		return PLUGIN_HANDLED;
	}
	
	if(!gLogged[id] || !gCanLoad)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
		remove_task(id+TASKID_REMENU);
		set_task(1.0, "RegMenu", id+TASKID_REMENU);
		return PLUGIN_HANDLED;
	}
	remove_task(id+TASKID_REMENU);
	
	if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
		
		UnsetBlack(id);
		return PLUGIN_HANDLED;
	}
	
	if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
	{
		Login(id);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix);
		
		return PLUGIN_HANDLED;
	}
	
	new szString[128], Name[32];
	format(szString, sizeof(szString), "\r[\yPublic\r]\w - %L", LANG_PLAYER, "RMMAIN");
	new rMenu = menu_create(szString, "rMenuHandler");
	get_user_name(id, Name, 31);
	
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name);  // Client name
	menu_additem(rMenu, szString, "0");
	
	new szPassword[126];
	for(new i; i < strlen(Password[id]); i++) {
		format(szPassword, charsmax(szPassword), "%s*", szPassword);
	}
	
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword);   // Client password
	menu_additem(rMenu, szString, "1");
	
	if(!gRegistered[id]) // Not registered
	{
		format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
		menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
	}
	else
	{
		if(!Loged[id]) // Registered, but not logged
		{
			new gPassCheck = equal(SavedPassword[id], Password[id]);
			
			format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
			menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
		}
		else
		{
			Menu(id);
		}
	}
	
	menu_display(id, rMenu);
	return PLUGIN_HANDLED;
}

public rMenuHandler(id, gMenu, item)
{	
	if(item == MENU_EXIT)
	{
		menu_destroy(gMenu);
		return PLUGIN_CONTINUE;
	}
	
	new data[9], name[64], Key;
	new access, callback;
	menu_item_getinfo(gMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
	
	Key = str_to_num(data);
	
	switch(Key)
	{
		case 0: { RegMenu(id); }
		case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
		case 2:
		{
			if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
			{
				copy(SavedPassword[id], 31, Password[id]);
				Loged[id] = true;
				gRegistered[id] = true;
				SaveData(id);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix, Password[id]);
				
				UnsetBlack(id);
				
				new szName[32]; get_user_name(id, szName, 31);
				log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
				gWarnings[id] = 0;
				
				return PLUGIN_CONTINUE;
				} else {
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
				
				return PLUGIN_HANDLED;
			}
			// Menu(id);
		}
		case 3:
		{
			if(!Loged[id]) 
			{
				gWarnings[id] = 0;
				Login(id);
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public PlayerPassword(id)
{
	if(Loged[id]) 
	{
		return PLUGIN_HANDLED;
	}
	
	new Data[32]; read_args(Data, 31); remove_quotes(Data);
	
	if(strlen(Data) < MIN_PASSWORD_LENGTH)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
		client_cmd(id, "messagemode UserPassword");
		return PLUGIN_HANDLED;
	}
	else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
		gWarnings[id]++;
		
		if(gWarnings[id] >= 3) 
		{
			gWarnings[id] = 0;
			
			server_cmd("amx_kick #%d ^"Trying to hack other account!^"", get_user_userid(id));
		}
	}
	
	copy(Password[id], 31, Data);
	RegMenu(id);
	return PLUGIN_CONTINUE;
}

public NameChange(id)
{
	if(get_cvar_num("csgo_nick_show"))
		return FMRES_IGNORED;
	
	if(!is_user_connected(id) || is_user_bot(id))
		return FMRES_IGNORED;
	
	new OldName[32], NewName[32], Name[32];
	get_user_name(id, Name, 31);
	pev(id, pev_netname, OldName, charsmax(OldName));
	if(OldName[0])
	{
		get_user_info(id, "name", NewName, charsmax(NewName));
		if(!equal(OldName, NewName))
		{
			set_user_info(id, "name", OldName);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
			return FMRES_HANDLED;
		}
	}
	return FMRES_IGNORED;
}

public Registered(id)
{
	if(!is_user_connected(id) || is_user_bot(id))
		return;
	
	static szQuery[256], iData[1]; iData[0] = id;
	formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
	
	SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
	
	log_errors("[REGISTERED] %s", szQuery);
}

public QuerySelectReg( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{ 
	if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("[QuerySelectReg] %s", szError); return; }
	else
	{
		new id = iData[0];
		if(SQL_NumResults(hQuery))
		{
			gLogged[id] = true;
			gRegistered[id] = true;
			
			new passfield[32], password[32];
			get_pcvar_string(csgo_password_field, passfield, 31);
			get_user_info(id, passfield, password, 31);
			
			SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
			
			if(equal(password, SavedPassword[id])) {
				Password[id] = password;
			}
			
			new szName[32]; get_user_name(id, szName, 31);
			log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
		}
		else
		{
			gLogged[id] = true;
			gRegistered[id] = false;
			
			new szName[32]; get_user_name(id, szName, 31);
			log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
		}
	} 
}

public cmdUniq(id)
{
	if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }

	new szText[512], szid[64];

	formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "SMAIN", LANG_PLAYER, "YPOINT", Points[id]);
	new	sMenu = menu_create(szText, "MenuHandlerUniq");
		
	for(new i; i < AllWeapon; i++)
	{
		if(uniqPrice[i] > 0)
		{
			formatex(szText, charsmax(szText), "%s \r%d \w- \rTaškų", WeaponNames[i], uniqPrice[i]);
			formatex(szid, 63, "%d", i);
			menu_additem(sMenu, szText, szid, _, (Points[id] < uniqPrice[i]) ? -2 : -1);
		}
	}
	
	menu_setprop(sMenu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, sMenu);
	
	return PLUGIN_CONTINUE;
}

public MenuHandlerUniq(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new aMenu[2], Data[4][32], sKey[32];
	menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
	
	parse(Data[0], sKey, 31);
	new Key = str_to_num(sKey);
	
	if(Points[id] >= uniqPrice[Key])
	{
		uWeapon[Key][id]++;
		Points[id] -= uniqPrice[Key];
		SaveData(id);
		
		client_print_color(id, print_team_default, "%s ^3%s ^4Nusipirko ^3%s!", Prefix, get_user_name_ex(id), WeaponNames[Key]);
	}
	else {
		client_print_color(id, print_team_default, "%s ^3Nepakanka taškų!", Prefix);
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

/*STOCK'S Key's*/
stock drop_keys(id, dropKey)
{
	if(dropKey >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szName[32]; get_user_name(id, szName, 31);
		
		static additional_keys; additional_keys = 0;
		
		if(!additional_keys)
		{
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ALL", EVENT, szName, pKey);
			pKey[id]++;
		}
		SaveKeys(id);
	}
}

/*STOCK'S*/
stock drop_item(id, dropRate)
{
	if(dropRate >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szName[33], rNum, accesNum = get_access(id); get_user_name(id, szName, 32);
		rNum = random(CHEST_COUNT)+1;
		
		static additional_chests; additional_chests = 0;
		if(!random(5) && accesNum)
		{
			additional_chests = random(((accesNum == 1) ? 1 : (accesNum == 1) ? 1 : 1));
			
			if(additional_chests)
			{
				additional_chests++;
				client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHESTS", Prefix, szName, additional_chests, chest_name(rNum));
				Chest[id][rNum] += additional_chests;
			}
		}
		
		if(!additional_chests)
		{
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHEST", Prefix, szName, chest_name(rNum));
			Chest[id][rNum]++;
		}
		SaveChests(id);
	}
}

stock get_access(id)
{
	if(get_user_flags(id) & ACCESS_ADMIN) 
	{
		return 2;
		} else if(get_user_flags(id) & ACCESS_VIP) 
		{
		return 1;
	}
	
	return 0;
}

stock chest_name(iNum)
{
	new szReturn[126];
	
	switch(iNum)
	{
		case 1: { formatex(szReturn, charsmax(szReturn), "Falchion"); }
		case 2: { formatex(szReturn, charsmax(szReturn), "Wildfire"); }
		case 3: { formatex(szReturn, charsmax(szReturn), "Hunstman"); }
		case 4: { formatex(szReturn, charsmax(szReturn), "Spectrum"); }
		case 5: { formatex(szReturn, charsmax(szReturn), "Shadow"); }
		case 6: { formatex(szReturn, charsmax(szReturn), "Gamma"); }
		case 7: { formatex(szReturn, charsmax(szReturn), "Hydra"); }
	}
	
	return szReturn;
}

stock screen_color(id)
{
	message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
	write_short(1<<10);
	write_short(1<<10);
	write_short(0x0000);
	write_byte(255);
	write_byte(0);
	write_byte(0);
	write_byte(75);
}

stock ExplodeString(const string[], output[], olen = sizeof output)
{
	new len = strlen( string ); 									// We retrieve the length of the current string passed.
	
	if ( !len )  { return 0; } 										// If the string is empty we stop there.
	
	new i, c, j, count;
	new number[ 12 ];
	
	do
	{
	while ( string[ i ] == ' ' ) i++; 								// One or more spaces can be used between 2 numbers, so we move forward until we find a number.
	while ( ( number[ j++ ] = c = string[ i++ ] ) && c != ' ' ) {}  // We loop and save the number found until the next space found or end of string.
	
	output[ count++ ] = str_to_num( number ); 						// We convert the number saved previously into a number and we stored in output at the slot count.
	j = 0;
	}
	while ( i < len && count < olen );								// We should looping while we have not cross the string length.

	return count;
}

stock get_user_name_ex(id)
{
	new szName[33];
	get_user_name(id, szName, charsmax(szName));

	replace_all(szName, charsmax(szName), "'", "\'");
	replace_all(szName, charsmax(szName), "^"", "\^"");
	// replace_all(szName, charsmax(szName), ".", "");

	return szName;
}

stock print_color(const id, const input[], any:...)
{
	new Count = 1, Players[32];
	static Msg[191];
	vformat(Msg, 190, input, 3);

	replace_all(Msg, 190, "!g", "^4");
	replace_all(Msg, 190, "!y", "^1");
	replace_all(Msg, 190, "!t", "^3");

	if(id) Players[0] = id; else get_players(Players, Count, "ch");
	{
	for (new i = 0; i < Count; i++)
	{
	if (is_user_connected(Players[i]))
	{
		message_begin(MSG_ONE, get_user_msgid( "SayText" ), _, Players[i]);
		write_byte(Players[i]);
		write_string(Msg);
		message_end();
		}
		}
	}
	return PLUGIN_HANDLED;
	}

	stock bool:ValidMdl(Mdl[]) {
	return (containi(Mdl, ".mdl") != -1) ? true : false;
}

public UpdateStatusText(id)
{
	new szText[256], wId = get_user_weapon(id, _, _); 
	if(bUsingGuns[id][wId])
	formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wId]][id], WeaponNames[bUsingGuns[id][wId]]);
	else 
	formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK");
	
	set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
	ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
}

stock get_weapon_maxclip(wpnid = 0)
{
	for (new a = 0; a < sizeof (g_weapons); a++)
		if (wpnid == g_weapons[a])
		return g_max_clip[a];
	
	return false;
}

stock SetFullBpAmmo(id, iWeaponID)
{ 
	new iFullbpammo,iAmmoId;
	
	for(new i = 1; i < AmmoIds; i++) 
	{ 
		if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
		{ 
			iAmmoId = i;
			iFullbpammo = g_iAmmoMax[i];
			
			break;
		} 
	} 
	
	if(!iAmmoId)
		return;
	
	cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
	
	message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
	write_byte(iAmmoId);
	write_byte(iFullbpammo);
	message_end();
}

stock has_user_weapon(id, iCswId, iSlot = 0)
{
	new iWeapon;
	if( !iSlot )
	{
		static const iWeaponsSlots[] = {
			-1,
			2, // CSW_P228
			-1,
			1, // CSW_SCOUT
			4, // CSW_HEGRENADE
			1, // CSW_XM1014
			5, // CSW_C4
			1, // CSW_MAC10
			1, // CSW_AUG
			4, // CSW_SMOKEGRENADE
			2, // CSW_ELITE
			2, // CSW_FIVESEVEN
			1, // CSW_UMP45
			1, // CSW_SG550
			1, // CSW_GALIL
			1, // CSW_FAMAS
			2, // CSW_USP
			2, // CSW_GLOCK18
			1, // CSW_AWP
			1, // CSW_MP5NAVY
			1, // CSW_M249
			1, // CSW_M3
			1, // CSW_M4A1
			1, // CSW_TMP
			1, // CSW_G3SG1
			4, // CSW_FLASHBANG
			2, // CSW_DEAGLE
			1, // CSW_SG552
			1, // CSW_AK47
			3, // CSW_KNIFE
			1  // CSW_P90
		};
		iSlot = iWeaponsSlots[iCswId];
	}
	
	const XO_PLAYER = 5;
	const m_rgpPlayerItems_Slot0 = 367;
	
	iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
	
	const XO_WEAPON = 4;
	const m_pNext = 42;
	const m_iId = 43;
	
	while( iWeapon > 0 )
	{
		if( get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId )
			return iWeapon;
		
		iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
	}
	return 0;
}

stock SavePoints(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE POINTS] %s", szQuery);
	}
}

stock SaveChests(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024], szChests[128];
		for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
		
		formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
			
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE CHESTS] %s", szQuery);
	}
}

stock SaveKeys(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE KEYS] %s", szQuery);
	}
}

stock SaveRang(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `rang` = '%d' WHERE `username` = '%s';", TABLE_NAME, Rang[id], get_user_name_ex(id));
  
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
  
		log_errors("[SAVE RANG] %s", szQuery);
	}
}

stock SaveKillers(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE KILLERS] %s", szQuery);
	}
}

stock SaveGunsKills(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024], szKSkins[1024];
		
		for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
		
		formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE GUNS KILLS] %s", szQuery);
	}
}

stock log_errors(const szText[], any:...)
{
	static szMessage[256];
	vformat(szMessage, 256, szText, 2);
	
	log_to_file(g_logfile, szMessage);
	
	return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1158\\ f0\\ fs16 \n\\ par }
*/
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

20 Mar 2019, 20:50

puNx wrote:
20 Mar 2019, 20:23
DevilBoy.eXe wrote:
17 Mar 2019, 18:33
Si de ce incerci sa faci chestia asta? Avand in vedere ca motd-ul la majoritatea cs-urilor este blocat nu vei reusi sa faci nimic decat sa ingreunezi jocul pentru jucatori
Deoarece nu am mai vazut pe niciun sv de cs go remake plugin-ul asta si mi sa parut interesant !
Edit: Nu ma lasa sa compilez "rcsgo" am incercat si local dar degeaba
SS: Image
https://imgur.com/wLGPPNk
Sursa:
| Afiseaza codul
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <sqlx>
#include <supplybox>
#include <rcsgo>

// # Project by DeRoiD   https://forums.alliedmods.net/showthread.php?t=265653
// # Author by Psychical https://www.supergames.lt/topic/244152- ... 100€-1-ip/

new const PLUGIN[] = "Global Offensive";
new const VERSION[] = "4.62";
new const AUTHOR[] = "Psychical";

/*================================================================================
[MySQLx Vars, other]
=================================================================================*/
#define DB_HOST ""
#define DB_USER ""
#define DB_PASS ""
#define DB_DATA ""

#define TABLE_NAME "rcsgo_player"

#define EVENT "^1[^4Event^1]"			// Prefix'as prie tekstų Event

#define ACCESS_VIP ADMIN_LEVEL_H		// VIP access 
#define ACCESS_ADMIN ADMIN_BAN			// ADMIN access

#define SOUND_SOLD "ambience/quail1.wav"

new Handle:g_hTuple;
new g_msgid_ScreenFade, g_msgid_SyncHud;

#define MAX 400 // Jei MAX 200 tai CHEST_ID = 201 ir KEY_ID = 202
#define MAX_RANGS 30

#define CHEST_ID 500 
#define CHEST_COUNT 7

#define KEY_ID 600
#define KEY_ID_TEXT "600"

#define POINTS_KILL_MIN 3 
#define POINTS_KILL_MAX 9 				

#define POINTS_KILL_HS 3 // Jei HS, Kiek pridės prie normaliu tasku

#define POINTS_KILL_VIP_FLAG ACCESS_VIP	// VIP access 
#define POINTS_KILL_MIN_VIP 2 // Pridedamas Prie POINTS_KILL_MIN
#define POINTS_KILL_MAX_VIP 5 // Pridedamas Prie POINTS_KILL_MAX

#define POINTS_KILL_ADMIN_FLAG ACCESS_ADMIN	// ADMIN access 
#define POINTS_KILL_MIN_ADMIN 5 // Pridedamas Prie POINTS_KILL_MIN
#define POINTS_KILL_MAX_ADMIN 7	// Pridedamas Prie POINTS_KILL_MAX

#define DROP_RATE_KEYS 500
#define DROP_RATE_CHEST 500

#define DROP_RATE_KILL 8  
#define DROP_RATE_PLANT 8 
#define DROP_RATE_DEF 8
#define DROP_RATE_HOSTAGE 8

#define DROP_RATE_VIP_FLAG ACCESS_VIP
#define DROP_RATE_KILL_VIP 12    
#define DROP_RATE_EXPLODE_VIP 12 
#define DROP_RATE_PLANT_VIP 12 
  
#define DROP_RATE_DEF_VIP 12    
#define DROP_RATE_HOSTAGE_VIP 12 

#define DROP_RATE_ADMIN_FLAG ACCESS_ADMIN
#define DROP_RATE_KILL_ADMIN 14
#define DROP_RATE_PLANT_ADMIN 14
#define DROP_RATE_DEF_ADMIN 14
#define DROP_RATE_HOSTAGE_ADMIN 14   

#define MIN_PASSWORD_LENGTH 4
#define MIN_CODE_LENGTH 6

#define MARKET_MIN_PRICE 50
#define MARKET_WAIT_ADD 3

#define HOSTAGE_ESCAPE 5
#define HOSTAGE_ESCAPE_STEAM 7
#define HOSTAGE_ESCAPE_VIP 9
#define HOSTAGE_ESCAPE_ADMIN 12
#define HOSTAGE_ESCAPE_SADMIN 14

#define HOSTAGE_KILL_PENALTY 15 // Reduce Points

#define BOMB_PLANTED_POINTS 3
#define BOMB_EXPLODE_POINTS 5
#define BOMB_DEFUSED_POINTS 7

#define BOMB_PLANTED_POINTS_VIP 5
#define BOMB_EXPLODE_POINTS_VIP 7
#define BOMB_DEFUSED_POINTS_VIP 9

#define BOMB_PLANTED_POINTS_ADMIN 7 
#define BOMB_EXPLODE_POINTS_ADMIN 9
#define BOMB_DEFUSED_POINTS_ADMIN 12

#define BOMB_PLANTED_POINTS_SADMIN 9
#define BOMB_EXPLODE_POINTS_SADMIN 12
#define BOMB_DEFUSED_POINTS_SADMIN 15

#define ROUND_WIN_POINTS 24

#define NEED_MIN_PLAYERS 4

new g_logfile[64];
new bool:gEnd = false;

#define TASKID_REMENU 100

new csgo_password_field;

new colchar[3][2] = { "^x03"/*team col*/, "^x04"/*green*/, "^x01"/*white*/ }

new cvar_refill_spawn;

// Cvar pointers
new p_allchat, p_alltalk, p_hidestat, p_teamchat;

// Vars to check if message has already been duplicated
new alv_sndr, alv_str2[26], alv_str4[101];
new msg[513];
new gWarnings[33] = 0;

/*=========*/
new bool:bTrade[33] = false;
new bool:bTradeAccepted[33] = false;
/*=========*/

/*================================================================================
=================================================================================*/

new const g_weapons[] = 
{
	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,
	CSW_GLOCK18, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_DEAGLE, CSW_SG552, CSW_AK47, CSW_P90
}
new const g_other_weapons[] = { CSW_KNIFE, CSW_HEGRENADE, CSW_C4 }
new 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 }
enum _:AmmoIds { ammo_none, ammo_338magnum = 1, ammo_762nato, ammo_556natobox, ammo_556nato, ammo_buckshot, ammo_45acp, ammo_57mm, ammo_50ae, ammo_357sig, ammo_9mm } 
new g_iAmmoMax[AmmoIds] = { -1, 30, 90, 200, 90, 32, 100, 100, 35, 52, 120 } 

new const g_iAmmoWeaponSharedBitSum[AmmoIds] = { 0, 
	(1<<CSW_AWP), (1<<CSW_SCOUT)|(1<<CSW_G3SG1)|(1<<CSW_AK47), (1<<CSW_M249), 
	(1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M4A1)|(1<<CSW_SG552), 
	(1<<CSW_XM1014)|(1<<CSW_M3), (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_USP), 
	(1<<CSW_P90)|(1<<CSW_FIVESEVEN), (1<<CSW_DEAGLE), (1<<CSW_P228), 
	(1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_ELITE)|(1<<CSW_GLOCK18) 
}
new g_msgid_AmmoX;

#pragma semicolon 1;

new WeaponNames[MAX][64], WeaponMdls[MAX][128], WeaponMdlsP[MAX][128], Weapons[MAX], WeaponDrop[MAX], AllWeapon;
new 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];
new Folder[48], SkinFile[48], RangFile[48], DefaFile[48], MenuMod[33];
new WeaponinMarket[33], inMarket[33], MarketPoints[33];
new SavedPassword[33][32], bool:Loged[33], bool:gLogged[33], bool:gRegistered[33], Password[33][32];
new DefaultSkin[33][32], DefaultSkinP[33][32], DefaultSkinW[33][32], NeedPatirtis[MAX_RANGS], Rangs[MAX_RANGS][32];
new gCanLoad, gCanSave;
new bUsingGuns[33][CSW_VESTHELM];
new gLastMarketTime[33] = 0;
new chestsList[CHEST_COUNT+1][128][512];
new chestsChance[CHEST_COUNT+1][128];

new aAmount[33], mAmount[33], uniqPrice[MAX];

new const eWeapon[][] =
{
"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp",
"weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
"weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
};

new const szWeaponNames[][] =
{
"", "P228", "", "Scout", "HE", "XM1014", "C4", "MAC10", "Aug", "SG", "Elite",
"Five Seven", "UMP45", "SG550", "Galil", "Famas", "USP", "Glock", "AWP", "MP5 Navy", "M249",
"M3", "M4A1", "TMP", "G3SG1", "FB", "Deagle", "SG552", "AK47", "Knife", "P90"
};

public plugin_precache()
{
	register_dictionary("globaloffensive.txt");

	get_time("rcsgo_%Y%m%d.log", g_logfile, charsmax(g_logfile));

	log_errors("-------------------- == --------------------");
	new Line[512], Data[9][128], Len;
	AllWeapon++;
	get_configsdir(Folder, 47);
	format(SkinFile, 47, "%s/rcsgo/skins.cfg", Folder);
	format(RangFile, 47, "%s/rcsgo/rangs.cfg", Folder);
	format(DefaFile, 47, "%s/rcsgo/dskins.cfg", Folder);
	
	if(file_exists(RangFile))
	{
		for(new i; i < file_size(RangFile, 1); i++)
		{
			if(i >= MAX_RANGS) {
				log_errors("[plugin_precache] Increase your MAX_RANGS define.");
				break;
			}
		
			read_file(RangFile, i, Line, 127, Len);
			parse(Line, Data[0], 31, Data[1], 31);
		
			copy(Rangs, 31, Data[0]);
			NeedPatirtis = str_to_num(Data[1]);
		}
	}

	if(file_exists(SkinFile))
	{
		for(new i; i < file_size(SkinFile, 1); i++)
		{
			if(AllWeapon >= MAX) 
			{
				log_errors("[plugin_precache] Increase your MAX define.");
				break;
			}
		
			read_file(SkinFile, i, Line, 512, Len);
		
			if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
				continue;
		
			// Ginklas, pavadinimas, v_, p_, chance - old
			// Ginklas, pavadinimas, v_, p_, chest, chance, number
			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);
		
			Weapons[AllWeapon] = str_to_num(Data[0]);
			copy(WeaponNames[AllWeapon], 63, Data[1]);
		
			if(ValidMdl(Data[2])) 
			{
				precache_model(Data[2]);
				copy(WeaponMdls[AllWeapon], 128, Data[2]);
			
				if(file_exists(Data[3]) && strlen(Data[3]) > 5) 
				{
					precache_model(Data[3]);
					copy(WeaponMdlsP[AllWeapon], 128, Data[3]);
				}
			}
		
			WeaponDrop[AllWeapon] = str_to_num(Data[4]);
		
			chestsChance[str_to_num(Data[4])][str_to_num(Data[5])] += 1;
			chestsList[str_to_num(Data[4])][str_to_num(Data[5])][str_to_num(Data[6])] = AllWeapon;
			log_amx("chestsList[%s][%s][%s] = %d", Data[4], Data[5], Data[6], AllWeapon);
			
			uniqPrice[AllWeapon] = str_to_num(Data[7]);
			
			if(Data[8][0] == 'W') weaponRang[AllWeapon] = 4;
			else if(Data[8][0] == 'B') weaponRang[AllWeapon] = 3;
			else if(Data[8][0] == 'R') weaponRang[AllWeapon] = 2;
			else if(Data[8][0] == 'Y') weaponRang[AllWeapon] = 1;
			else weaponRang[AllWeapon] = 0;
		
			AllWeapon++;
		}
	}
	if(file_exists(DefaFile))
	{
		for(new i; i < file_size(DefaFile, 1); i++)
		{
			read_file(DefaFile, i, Line, 127, Len);
		
			if(strlen(Line) < 5 || Line[0] == ';' || (Line[0] == '/' && Line[1] == '/'))
				continue;
		
			parse(Line, Data[0], 31, Data[1], 47, Data[2], 47);
		
			if(ValidMdl(Data[1])) 
			{
				precache_model(Data[1]);
				copy(DefaultSkin[str_to_num(Data[0])], 47, Data[1]);
		
				if(file_exists(Data[2]) && strlen(Data[2]) > 5) 
				{
					precache_model(Data[2]);
					copy(DefaultSkinP[str_to_num(Data[0])], 47, Data[2]);
				}
			
				if(file_exists(Data[3]) && strlen(Data[3]) > 5) 
				{
					precache_model(Data[3]);
					copy(DefaultSkinW[str_to_num(Data[0])], 47, Data[3]);
				}
			}
		}
	}

	precache_sound(SOUND_SOLD);

	g_hTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_DATA);

	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);
	SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables);
}

public plugin_init()
{	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar(PLUGIN, VERSION, FCVAR_SERVER);
	
	register_supply_box("Experience Box");
	
	register_clcmd("say /menu", "MenuOpen");
	register_clcmd("say /reg", "RegMenu");
	register_clcmd("say /register", "TradeMenu");
	register_clcmd("say /kills", "KillsLeft");
		
	register_clcmd("say menu", "MenuOpen");
	register_clcmd("say reg", "RegMenu");
	register_clcmd("say register", "TradeMenu");
	register_clcmd("say kills", "KillsLeft");

	register_clcmd("say !menu", "MenuOpen");
	register_clcmd("say !reg", "RegMenu");
	register_clcmd("say !register", "TradeMenu");
	register_clcmd("say !kills", "KillsLeft");

	register_clcmd("say .menu", "MenuOpen");
	register_clcmd("say .reg", "RegMenu");
	register_clcmd("say .register", "TradeMenu");
	register_clcmd("say .kills", "KillsLeft");

	register_clcmd("say /savepass", "SavePassword");
	
	register_clcmd("say /skins", "cmdUniq");
		
	register_clcmd("radio1", "MenuOpen");
	
	register_concmd("Cost", "MarketCost");
	register_concmd("Gift", "GiftPoint");
	register_concmd("setAmount", "SetAmount");
	register_concmd("setMarketAmount", "SetMarketAmount");
	register_concmd("UserPassword", "PlayerPassword");
	
	register_logevent("Hostage_Rescued", 3, "2=Rescued_A_Hostage");
	register_event("TextMsg", "TextMsg_Killed_Hostage", "b", "1=4", "2=#Killed_Hostage");
	register_event("HLTV", "RoundStart", "a", "1=0", "2=0");

	register_forward(FM_ClientUserInfoChanged, "NameChange");
	register_forward(FM_SetModel, "SetModel");
	
	register_message(get_user_msgid("SendAudio"), "Message_SendAudio");
	
	RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
	
	for(new i; i < sizeof(eWeapon); i++) 
	{
		if(strlen(eWeapon) > 3) 
		{
			RegisterHam(Ham_Item_Deploy, eWeapon, "WeaponSwitch", 1);
		}
	}
	csgo_password_field = register_cvar("csgo_password_field", "_rcsgo");
	
	g_msgid_ScreenFade = get_user_msgid("ScreenFade");
	g_msgid_SyncHud = CreateHudSyncObj();
	g_msgid_AmmoX = get_user_msgid("AmmoX");
	
	cvar_refill_spawn = register_cvar("csgo_refill_onspawn", "1");
	
	p_allchat = register_cvar("sv_allchat", "2");
	p_hidestat = register_cvar("ac_hidestatus", "0");
	p_teamchat = register_cvar("ac_teamchat", "0");
	register_cvar( "csgo_nick_show", "0" );
	
	p_alltalk = get_cvar_pointer( "sv_alltalk" );
	
	register_message(get_user_msgid("SayText"), "col_changer");
	
	set_task(5.0, "LoadConnected");
	gCanLoad = 0;
	gCanSave = 0;
	
	new iEnt = -1;
	while((iEnt = find_ent_by_class(iEnt, "env_sound")))
	{
		DispatchKeyValue(iEnt, "roomtype", "0");
		DispatchKeyValue(iEnt, "radius", "0");
	}
	
	format(Prefix, 31, "%L", LANG_PLAYER, "PREFIX");
}

public plugin_cfg()
{
	if(!g_hTuple)
	{
		g_hTuple = SQL_MakeStdTuple();	
	}
	return 1;
}

public plugin_natives()
{
	register_native("cs_get_user_points", "native_cs_get_user_points", 1);
	register_native("cs_set_user_points", "native_cs_set_user_points", 1);
}

public native_cs_get_user_points(player)
{
	return Points[player];
}

public native_cs_set_user_points(player, prize)
{
	Points[player] = prize;
	SavePoints(player);
}

public sb_pickup(id)
{
	new iPlayers[32], iPlayersNum;
	get_players(iPlayers, iPlayersNum);
	
	new szName[32]; get_user_name(id, szName, 31);
	
	new Random = random_num(1, 100);
	new point = random_num(50, 300), points = random_num(100, 300), plus = random_num(200, 500);
	
	if(Random < 5)
	{
		drop_keys(id, DROP_RATE_KEYS);
	}
	else if(Random < 25)
	{
		drop_item(id, DROP_RATE_CHEST);
	}
	else if(iPlayersNum >= 0 && iPlayersNum <= 10)
	{			
		Points[id] += point;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, point);
	}
	else if(iPlayersNum >= 11 && iPlayersNum <= 20)
	{			
		Points[id] += points;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, points);
	}
	else if(iPlayersNum >= 21)
	{
		Points[id] += plus;
		client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_ALL", EVENT, szName, plus);
	}	
}

public SavePassword(id)
{
	if(!Loged[id])
	{
		if(!gRegistered[id])
		{
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
			} else {
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
		}
		return PLUGIN_HANDLED;
	}
	
	new passfield[32]; get_pcvar_string(csgo_password_field, passfield, 31);
	set_user_info(id, passfield, SavedPassword[id]);
	client_cmd(id, "setinfo %s %s", passfield, SavedPassword[id]); 
	
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SUCCESS_SAVED", Prefix);
	
	return PLUGIN_HANDLED;
}

public KillsLeft(id)
{
	if(!Loged[id])
	{
		if(!gRegistered[id])
		{
			print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			print_color(id, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		} else {
			print_color(id, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
		}
		return PLUGIN_HANDLED;
	}
	
	if(get_user_flags(id) & ACCESS_ADMIN) 
	{
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_75", EVENT, 75 - (Killers[id] % 75), Killers[id] % 75);
	} 
	else if(get_user_flags(id) & ACCESS_VIP) 
	{
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_100", EVENT, 100 - (Killers[id] % 100), Killers[id] % 100);
	} else {	
	client_print_color(id, print_team_default, "%L", LANG_PLAYER, "KILLS_SHOW_KEYS_125", EVENT, 125 - (Killers[id] % 125), Killers[id] % 125);
	}
	return PLUGIN_CONTINUE;
}

public TextMsg_Killed_Hostage(id)
{
	Points[id] -= HOSTAGE_KILL_PENALTY;
	
	set_hudmessage(255, 0, 0, -1.0, 0.15, 0, 6.0, 2.0);
	show_hudmessage(id, "%L", LANG_PLAYER, "POINT_REDUCE", HOSTAGE_KILL_PENALTY);
	
	SavePoints(id);
}

public Hostage_Rescued() 
{ 
	static loguser[80], name[32], id;
	read_logargv(0, loguser, 79);  parse_loguser(loguser, name, 31);
	id = get_user_index(name);
	
	if(is_user_connected(id) && get_playersnum() >= NEED_MIN_PLAYERS)
	
	if(get_user_flags(id) & ACCESS_ADMIN)
	{
		Points[id] += HOSTAGE_ESCAPE_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_ADMIN);
				
		drop_item(id, DROP_RATE_HOSTAGE_ADMIN);
		
		SavePoints(id);
	}
	else if(get_user_flags(id) & ACCESS_VIP)
	{
		Points[id] += HOSTAGE_ESCAPE_VIP;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE_VIP);
		
		drop_item(id, DROP_RATE_HOSTAGE_VIP);
		
		SavePoints(id);
	}
	else
	{
		Points[id] += HOSTAGE_ESCAPE;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(id, "%L", LANG_PLAYER, "POINT", HOSTAGE_ESCAPE);
		
		drop_item(id, DROP_RATE_HOSTAGE);
		
		SavePoints(id);
	}
} 

public LoadConnected()
{
	gCanLoad = 1;
	gCanSave = 1;
	
	for(new i=1; i <= get_maxplayers(); i++) 
	{
		if(is_user_connected(i)) 
		{
			add_delay(i);
		}
	}
}

public plugin_end()
{
	SQL_FreeHandle(g_hTuple);
}  

public bomb_explode(planter, defuser)
{
	if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)

	if(get_user_flags(planter) & ACCESS_ADMIN)
    {
		Points[planter] += BOMB_EXPLODE_POINTS_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_ADMIN);

		drop_item(planter, DROP_RATE_PLANT_ADMIN);
		
		SavePoints(planter);
	}	
	else if(get_user_flags(planter) & ACCESS_VIP)	
	{
		Points[planter] += BOMB_EXPLODE_POINTS_VIP;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS_VIP);

		drop_item(planter, DROP_RATE_PLANT_VIP);
		
		SavePoints(planter);
    }	
	else
	{
		Points[planter] += BOMB_EXPLODE_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_EXPLODE_POINTS);

		drop_item(planter, DROP_RATE_PLANT);
		
		SavePoints(planter);
	}
}

public bomb_planted(planter)
{
	if(is_user_connected(planter) && get_playersnum() >= NEED_MIN_PLAYERS)

	if(get_user_flags(planter) & ACCESS_ADMIN)
    {
		Points[planter] += BOMB_PLANTED_POINTS_ADMIN;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_ADMIN);

		drop_item(planter, DROP_RATE_PLANT_ADMIN);
		
		SavePoints(planter);
	}	
	else if(get_user_flags(planter) & ACCESS_VIP)	
	{
		Points[planter] += BOMB_PLANTED_POINTS_VIP;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS_VIP);

		drop_item(planter, DROP_RATE_PLANT_VIP);
		
		SavePoints(planter);
    }	
	else
	{
		Points[planter] += BOMB_PLANTED_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(planter, "%L", LANG_PLAYER, "POINT", BOMB_PLANTED_POINTS);

		drop_item(planter, DROP_RATE_PLANT);
		
		SavePoints(planter);
	}
}

public bomb_defused(defuser)
{
	if(is_user_connected(defuser) && get_playersnum() >= NEED_MIN_PLAYERS)
	
	if(get_user_flags(defuser) & ACCESS_ADMIN)
	{	
		Points[defuser] += BOMB_DEFUSED_POINTS_ADMIN;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_ADMIN);
	
		drop_item(defuser, DROP_RATE_DEF_ADMIN);
	
		SavePoints(defuser);
	}
	else if(get_user_flags(defuser) & ACCESS_VIP)
    {
		Points[defuser] += BOMB_DEFUSED_POINTS_VIP;
		
		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS_VIP);
				
		drop_item(defuser, DROP_RATE_DEF_VIP);
		
		SavePoints(defuser);
    }
	else 	
	{
		Points[defuser] += BOMB_DEFUSED_POINTS;

		set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
		show_hudmessage(defuser, "%L", LANG_PLAYER, "POINT", BOMB_DEFUSED_POINTS);
				
		drop_item(defuser, DROP_RATE_DEF);
		
		SavePoints(defuser);
	}
}

public RoundStart() 
{
	gEnd = false;
}

public Message_SendAudio(iMsgId, iMsgDest, id)
{
	if(!id && !gEnd && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szSound[14]; get_msg_arg_string(2, szSound, charsmax(szSound));
		new iPlayers[32], iNum, tId;
			
		if(equal(szSound, "%!MRAD_ctwin"))
		{
			get_players(iPlayers, iNum, "ceh", "CT");

			for(new i; i < iNum; i++)
			{
				tId = iPlayers;
				
				if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_CT) 
				{
					continue;
				}
				
				Points[tId] += ROUND_WIN_POINTS;
				
				set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
				show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
							
				SavePoints(tId);
				SaveData(tId);
			}
			gEnd = true;
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "CT_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
		}
		else if( equal(szSound, "%!MRAD_terwin") )
		{
			get_players(iPlayers, iNum, "ceh", "TERRORIST");

			for(new i; i < iNum; i++)
			{
				tId = iPlayers;
										
				if(!is_user_alive(tId) || cs_get_user_team(tId) != CS_TEAM_T) 
				{
					continue;
				}
				
				Points[tId] += ROUND_WIN_POINTS;

				set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);
				show_hudmessage(tId, "%L", LANG_PLAYER, "POINT", ROUND_WIN_POINTS);
				
				SavePoints(tId);
				SaveData(tId);
			}
			gEnd = true;
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "T_TEAM_WIN", Prefix, ROUND_WIN_POINTS);
		}
	}
}

public PlayerSpawn(id) 
{
	if(is_user_alive(id))
	{
		if(!Loged[id] && gRegistered[id])
		{
			RegMenu(id);
			set_user_maxspeed(id, 1.0);
					
			if(!equal(Password[id], SavedPassword[id]))
			{
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "LOGIN_FIRST", Prefix);
			}
		}
		
		if(!gRegistered[id]) 
		{
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		}
		
		if(get_pcvar_num(cvar_refill_spawn))
		{
			static iWeapons[32], iNum, i, iGun; iNum = 0;
			get_user_weapons(id, iWeapons, iNum);
			
			for( i = 0; i < iNum; i++ ) 
			{ 
				for (new a = 0; a < sizeof (g_other_weapons); a++)
					if (iWeapons == g_other_weapons[a])
					continue;
				
				for (new a = 0; a < sizeof (g_weapons); a++) 
				{
					
					if(g_weapons[a] == iWeapons)
					{
						if (get_weapon_maxclip(iWeapons))
						{
							iGun = has_user_weapon(id, iWeapons);
							client_cmd(id, "spk ^"items/9mmclip1.wav^"");
							cs_set_weapon_ammo(iGun, get_weapon_maxclip(iWeapons[i]));
							SetFullBpAmmo(id, iWeapons[i]);
						}
					}
				}
			} 
		} 
		
		if(cs_get_user_team(id) == CS_TEAM_CT) 
		{
			cs_set_user_defuse(id, 1);
		}
	}
	return PLUGIN_CONTINUE;
}

public col_changer( msg_id, msg_dest, rcvr )
{
	new str2[26];
	get_msg_arg_string( 2, str2, 25 );
	if( equal( str2, "#Cstrike_Chat", 13 ) )
	{
		new str3[22];
		get_msg_arg_string( 3, str3, 21 );
		
		if( !strlen( str3 ) )
		{
			new str4[101];
			get_msg_arg_string( 4, str4, 100 );
			new sndr = get_msg_arg_int( 1 );
			
			new bool:is_team_msg = !bool:equal( str2, "#Cstrike_Chat_All", 17 );
			
			new sndr_team = get_user_team( sndr );
			new bool:is_sndr_spec = !bool:( 0 < sndr_team < 3 );
			
			new bool:same_as_last = bool:( alv_sndr == sndr && equal( alv_str2, str2 ) && equal( alv_str4, str4) );
			
			if( !same_as_last )
			{ // Duplicate message once
				new allchat = clamp( get_pcvar_num( p_allchat ), 0, 2 );
				if( allchat == 2 || ( allchat == 1 && clamp( get_pcvar_num( p_alltalk ), 0, 1 ) == 1 ) )
				{
					if( !( is_team_msg && ( is_sndr_spec || is_team_msg && get_pcvar_num( p_teamchat ) == 0 ) ) )
					{ // Don't duplicate if it's a spectator team message
						new flags[5], team[10];
						if( is_user_alive( sndr ) ) flags = "bch";
						else flags = "ach";
						
						if( is_team_msg )
						{
							add( flags[strlen( flags )], 4, "e" );
							if( sndr_team == 1 ) team = "TERRORIST";
							else team = "CT";
						}
						
						new players[32], num;
						get_players( players, num, flags, team );
						
						buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 ); // normal colors
						
						for( new i=0; i < num; i++ )
						{
							message_begin( MSG_ONE, get_user_msgid( "SayText" ), _, players[i] );
							write_byte( sndr );
							write_string( msg );
							message_end();
						}
						
					}
					
					alv_sndr = sndr;
					alv_str2 = str2;
					alv_str4 = str4;
					
					if(task_exists(411))
						remove_task(411);
					
					set_task( 0.1, "task_clear_antiloop_vars", 411 );
				}
			}
			
			if(gLogged[sndr])
			{
				if( !same_as_last )
					buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, 0, 2, str4 );
				
				set_msg_arg_string( 2, msg );
				set_msg_arg_string( 4, "" );
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public buildmsg( sndr, is_sndr_spec, is_team_msg, sndr_team, namecol, msgcol, str4[ ] )
{
	new sndr_name[33];
	get_user_name( sndr, sndr_name, 32);
	
	new prefix[126] = "^x01";
	if( get_pcvar_num( p_hidestat ) == 0 )
	{
		if( is_sndr_spec ) prefix = "^x01*SPEC* ";
		else if( !is_user_alive( sndr ) ) prefix = "^x01*DEAD* ";
	}

	if(is_user_connected(sndr))
    {
    	if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_RCON)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Savininkas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_B)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Vyr. Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
    	else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_C)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Prižiūrėtojas] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_D)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Administratorius] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
    	else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_E)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[ADMIN] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}
		
		else if(gLogged[sndr] && get_user_flags(sndr) & ADMIN_LEVEL_H)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[VIP] | [%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(gLogged[sndr]  && get_user_flags(sndr) & ADMIN_USER)
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[%s] ", Rangs[Rang[sndr]]);
			add(prefix[strlen(prefix)-1], 64, szMsg);
		}

		else if(!gLogged[sndr])
		{
			new szMsg[64];
			format(szMsg, sizeof(szMsg)-1, "^4[Neprisijunges] ");
			add(prefix[strlen(prefix)-1], 29, szMsg);
		}
	}
	
	if( is_team_msg )
	{
		if( is_sndr_spec ) prefix = "^x01(Spectator) ";
		else if( sndr_team == 1 ) add( prefix[strlen(prefix)-1], 29, "^x01(Terrorist) " );
			else if( sndr_team == 2 ) add( prefix[strlen(prefix)-1], 29, "^x01(Counter-Terrorist) " );
		}
	
	format( msg, 512, "%s%s%s :  %s%s", strlen( prefix ) > 1 ? prefix : "", colchar[namecol], sndr_name, colchar[msgcol], str4 );
	return PLUGIN_HANDLED;
}

public task_clear_antiloop_vars( )
{
	alv_sndr = 0;
	alv_str2 = "";
	alv_str4 = "";
	
	return PLUGIN_HANDLED;
}
 
public MenuOpen(id)
{
	if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }
	
	aAmount[id] = 1;
	MenuMod[id] = 0;
	Menu(id);
	return PLUGIN_HANDLED;
}

public client_death(Killer, Victim, wpnindex, hitplace, TK)
{
	if(Killer == Victim) { return PLUGIN_HANDLED; }
	
	if(!gRegistered[Victim]) 
	{
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(Victim, print_team_default, "%L", LANG_PLAYER, "BLANK");
	}
	
	if(!gRegistered[Killer]) 
	{
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(Killer, print_team_default, "%L", LANG_PLAYER, "BLANK");
	}
		
	Patirtis[Killer] += 3;
	Kills[Killer]++;
		
	Killers[Killer]++;
	
	static kGun; kGun = get_user_weapon(Killer, _, _);
	new szName[32]; get_user_name(Killer, szName, 31);
		
	new rNum; rNum = random(CHEST_COUNT)+1;
	
	new Point = random_num(2000, 8000);
	
	if(bUsingGuns[Killer][kGun]) 
	{
		uWeaponKills[bUsingGuns[Killer][kGun]][Killer]++;
		SaveGunsKills(Killer);
		set_task(0.1, "UpdateStatusText", Killer);
	}
		
	if(Rang[Killer] < sizeof(Rangs) && Rang[Killer] < file_size(RangFile, 1))
	{
		if(Patirtis[Killer] >= NeedPatirtis[Rang[Killer]]) 
		{
			Rang[Killer]++;
			
			pKey[Killer] += Rang[Killer];
			Chest[Killer][rNum] += Rang[Killer];
			Points[Killer] += Point;
		
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_PASIEKE", Prefix, szName, Rangs[Rang[Killer]]);
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "MRANG_BONUS", Prefix, szName, Rang[Killer], Rang[Killer], Point);

			SaveRang(Killer);
			SaveKeys(Killer);
			SaveChests(Killer);
		}

	}
		
	if(Killers[Killer] % 75 == 0 && get_user_flags(Killer) & ACCESS_ADMIN) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
	else if(Killers[Killer] % 100 == 0 && get_user_flags(Killer) & ACCESS_VIP) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
	else if(Killers[Killer] % 125 == 0) 
	{
		drop_keys(Killer , DROP_RATE_KEYS);
		Killers[Killer] = 0;
	}
		
	new pPont, vPont, hsPont;
	pPont += random_num(POINTS_KILL_MIN, POINTS_KILL_MAX);

	if(hitplace == HIT_HEAD) { pPont += hsPont = POINTS_KILL_HS; }
	
	Points[Killer] += pPont;
	
	if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
	{
		vPont += random_num(POINTS_KILL_MIN_ADMIN, POINTS_KILL_MAX_ADMIN);
		Points[Killer] += vPont;
	}
	else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
	{
		vPont += random_num(POINTS_KILL_MIN_VIP, POINTS_KILL_MAX_VIP);
		Points[Killer] += vPont;
	}
	
	set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 6.0, 2.0);	
	
	if(get_user_flags(Killer) & POINTS_KILL_ADMIN_FLAG)
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
			
			drop_item(Killer, DROP_RATE_KILL_ADMIN);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
			
			drop_item(Killer, DROP_RATE_KILL_ADMIN);
		}
	}
	else if(get_user_flags(Killer) & POINTS_KILL_VIP_FLAG)
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus +%d HS", LANG_PLAYER, "POINT", pPont, vPont, hsPont);
			
			drop_item(Killer, DROP_RATE_KILL_VIP);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L +%d Bonus", LANG_PLAYER, "POINT", pPont, vPont);
			
			drop_item(Killer, DROP_RATE_KILL_VIP);
		}
	}
	else 
	{
		if(hitplace == HIT_HEAD) 
		{
			show_hudmessage(Killer, "^n%L +%d HS", LANG_PLAYER, "POINT", pPont, hsPont);
		}
		else 
		{
			show_hudmessage(Killer, "^n%L", LANG_PLAYER, "POINT", pPont);
		}
	}
	
	drop_item(Killer, DROP_RATE_KILL);
	
	SavePoints(Killer);
	SaveKillers(Killer);
	
	return PLUGIN_CONTINUE;
}

public SetModel(entity, model[])
{
	if(!pev_valid(entity))
		return FMRES_IGNORED;
	
	static Classname[32]; pev(entity, pev_classname, Classname, sizeof(Classname));
	
	if(!equal(Classname, "weaponbox"))
		return FMRES_IGNORED;
	
	static iOwner; iOwner = pev(entity, pev_owner);
	static iWeapon; iWeapon = get_user_weapon(iOwner, _, _);
	static weapon; weapon = find_ent_by_owner(-1, eWeapon[iWeapon], entity);
	
	if(bUsingGuns[iOwner][iWeapon] && !pev(weapon, pev_impulse))
	{
		if(!pev_valid(weapon))
			return FMRES_IGNORED;
		
		set_pev(weapon, pev_impulse, bUsingGuns[iOwner][iWeapon]);
		
		if(strlen(DefaultSkinW[iWeapon]) > 5) 
		{
			entity_set_model(entity, DefaultSkinW[iWeapon]);
			
			return FMRES_SUPERCEDE;
		}
		return FMRES_IGNORED;
	}
	
	return FMRES_IGNORED;
}

public MarketCost(id)
{
	if(inMarket[id] || !Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0)
	{
		client_cmd(id, "messagemode Cost");
		return PLUGIN_HANDLED;
	}
	else if(MARKET_MIN_PRICE > Cost)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NOTENOUGHTMARKET", Prefix, MARKET_MIN_PRICE);
		client_cmd(id, "messagemode Cost");
		MarketPoints[id] = MARKET_MIN_PRICE;
		Menu(id);
		MenuMod[id] = 3;
		return PLUGIN_HANDLED;
	}
	else
	{
		MarketPoints[id] = Cost;
		Menu(id);
		MenuMod[id] = 3;
		return PLUGIN_CONTINUE;
	}
}
public SetMarketAmount(id)
{
	if(!Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 1)
	{
		client_cmd(id, "messagemode setMarketAmount");
		return PLUGIN_HANDLED;
	}
	else
	{
		mAmount[id] = Cost;
		Menu(id);
		MenuMod[id] = 3;
	}
	return PLUGIN_HANDLED;
}
public SetAmount(id)
{
	if(!Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0)
	{
		client_cmd(id, "messagemode setAmount");
		return PLUGIN_HANDLED;
	}
	else
	{
		aAmount[id] = Cost;
		Menu(id);
		MenuMod[id] = 5;
	}
	return PLUGIN_HANDLED;
}
public GiftPoint(id)
{
	if(inMarket[id] || !Loged[id])
		return PLUGIN_HANDLED;
	
	new Data[32], Cost;
	read_args(Data, 31);
	remove_quotes(Data);
	
	Cost = str_to_num(Data);
	
	if(Cost < 0 || Points[id] < Cost)
	{
		client_cmd(id, "messagemode Gift");
		return PLUGIN_HANDLED;
	}
	else
	{
		aPoints[id] = Cost;
		Menu(id);
		MenuMod[id] = 5;
		return PLUGIN_CONTINUE;
	}
}

public WeaponSwitch(Weapon)
{
	new id = get_pdata_cbase(Weapon, 41, 4);
	new wid = cs_get_weapon_id(Weapon);
	
	if(id > 32 || id < 1) 
	{
		return HAM_SUPERCEDE;
	}
	
	if(!is_user_connected(id)) 
	{
		return HAM_SUPERCEDE;
	}
	
	if(pev(Weapon, pev_impulse))
	{
		set_pev(id, pev_viewmodel2, WeaponMdls[pev(Weapon, pev_impulse)]);
		
		if(strlen(WeaponMdlsP[pev(Weapon, pev_impulse)]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, WeaponMdlsP[pev(Weapon, pev_impulse)]);
		}
	}
	else if(bUsingGuns[id][wid])
	{
		set_pev(id, pev_viewmodel2, WeaponMdls[bUsingGuns[id][wid]]);
		
		if(strlen(WeaponMdlsP[bUsingGuns[id][wid]]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, WeaponMdlsP[bUsingGuns[id][wid]]);
		}
		set_task(0.1, "UpdateStatusText", id);
	}
	else if(strlen(DefaultSkin[wid]) > 5)
	{
		if(cs_get_user_team(id) == CS_TEAM_CT && wid == 29) { wid = 31; }
		
		set_pev(id, pev_viewmodel2, DefaultSkin[wid]);
		
		if(strlen(DefaultSkinP[wid]) > 5) 
		{
			set_pev(id, pev_weaponmodel2, DefaultSkinP[wid]);
		}
		set_task(0.1, "UpdateStatusText", id);
	}
	else 
	{
		set_task(0.1, "UpdateStatusText", id);
	}
	
	return HAM_IGNORED;
}

public Menu(id)
{
	if(!Loged[id]) { RegMenu(id); return; }
	
	new sMenu, szText[256];
	
	switch(MenuMod[id])
	{
		case -2: // Kazkas su dovanom
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				if(Chest[id][i] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
					
					new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i);
					menu_additem(sMenu, szText, szButton);
					
					All++;
				}
			}
			
			if(pKey[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
				menu_additem(sMenu, szText, KEY_ID_TEXT);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case -1: // Deti i turgu
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "GIFTCH", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				if(Chest[id][i] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
					
					new szButton[128]; formatex(szButton, charsmax(szButton), "%d", CHEST_ID+i-1);
					menu_additem(sMenu, szText, szButton);
					
					All++;
				}
			}
			
			if(pKey[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "KEYPIECE", pKey[id]);
				menu_additem(sMenu, szText, KEY_ID_TEXT);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 0: 
		{
			formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "MAIN", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUTOSKINS");
			menu_additem(sMenu, szText, "1");
			
			formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTOCHESTOPEN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
			menu_additem(sMenu, szText, (!inMarket[id]) ? "2" : "0");
			
			formatex(szText, sizeof(szText), "%L ^n\r------------", LANG_PLAYER, "MENUCHESTINFO");
			menu_additem(sMenu, szText, "7");
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOMARKET");
			menu_additem(sMenu, szText, "3");
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MENUTOSHOP");
			menu_additem(sMenu, szText, "6");
			
			formatex(szText, sizeof(szText), "%L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, (!inMarket[id]) ? "BLANK" : "INMARKET");
			menu_additem(sMenu, szText, (!inMarket[id]) ? "4" : "0");
			
			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]]);
			menu_additem(sMenu, szText, (!inMarket[id]) ? "5" : "0");
		}
		case 1: // Skinai
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOSKINS", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] <= 0)
					continue;
				
				formatex(String, 31, "%d %d", i, Weapons[i]);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 2: // Skrynios
		{
			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]);
			sMenu = menu_create(szText, "MenuHandler");

			new call = menu_makecallback("Call_Back");
			
			for(new i=1; i <=CHEST_COUNT; i++)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTPIECE", chest_name(i), Chest[id][i]);
				menu_additem(sMenu, szText, _, _, (Chest[id][i] > 0 && pKey[id] > 0) ? -1 : call);
			}
		}
		case 3: // Turgus
		{
			aThing[id] = 0; 
			
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOMARKET", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			new call = menu_makecallback("Call_Back");
			
			aThing[32] = 0; 
			
			new String[32], All;
			new Name[32]; get_user_name(id, Name, 31);

			if(!inMarket[id])
			{
				for(new i = 1; i < AllWeapon; i++) 
				{
					if(i == WeaponinMarket[id] && uWeapon[i][id] > 0) 
					{
						formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACES", WeaponNames[i], szWeaponNames[Weapons[i]], MarketPoints[id]);
						All = 50;
					}
				}
				
				// log_amx("Turgus. Rodo. %d <= %d <= %d && Chest[id][%d] > 0", CHEST_ID, WeaponinMarket[id], CHEST_ID+CHEST_COUNT, (WeaponinMarket[id]-CHEST_ID)+1);
				if(CHEST_ID <= WeaponinMarket[id] <= CHEST_ID+CHEST_COUNT && Chest[id][(WeaponinMarket[id]-CHEST_ID)+1] > 0)
				{
					for(new i=1; i <=CHEST_COUNT; i++)
					{
						// log_amx("Chest[id][%d] && %d == %d", i, (CHEST_ID+i-1), WeaponinMarket[id]);
						if(Chest[id][i] > 0 && ((CHEST_ID+i-1) == WeaponinMarket[id]))
						{
							formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEC", chest_name(i), MarketPoints[id], mAmount[id]);
							
							All++;
							break;
						}
					}
				}
				
				if(KEY_ID == WeaponinMarket[id] && pKey[id] > 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACEK", MarketPoints[id], mAmount[id]);
					All++;
				}
				
				if(All == 0)
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "MARKETPLACECH");
				
				menu_additem(sMenu, szText, "-1");
				
				if(All != 50)
				{
					formatex(szText, sizeof(szText), "Kiekis: \r%d", mAmount[id]);
					menu_additem(sMenu, szText, "-99");
				}
			}
			
			
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER,	(!inMarket[id]) ? "TOMARKETM" : "BACKMARKET");
			menu_additem(sMenu, szText, "0", _, ((get_systime()-gLastMarketTime[id]) > MARKET_WAIT_ADD) ? -1 : call);
			
			for(new x = 1; x <= get_maxplayers(); x++) 
			{
				if(!is_user_connected(x) || is_user_bot(x))
				continue;
				
				if(inMarket[x] && MarketPoints[x] > 0)
				{
				num_to_str(x, String, 31);
								
				if(CHEST_ID <= WeaponinMarket[x] <= CHEST_ID+CHEST_COUNT)
				{
					// log_amx("Turgus. Rodo. (%d-%d) = %d", WeaponinMarket[x], CHEST_ID, WeaponinMarket[x]-CHEST_ID);
					
					new chId = (WeaponinMarket[x]-CHEST_ID)+1;
				
					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);
					menu_additem(sMenu, szText, String);
				}
				else if(KEY_ID == WeaponinMarket[x])
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERK", MarketPoints[x], mAmount[x] > pKey[x] ? pKey[x] : mAmount[x], Name);
					menu_additem(sMenu, szText, String);
				}
				else
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SELLERS", WeaponNames[WeaponinMarket[x]], szWeaponNames[Weapons[WeaponinMarket[x]]], MarketPoints[x], Name);
					menu_additem(sMenu, szText, String);
					}
				}
			}
		}
		case 4: // Keitykla
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTODUSTBIN", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			
			new String[32], All;
			
			for(new i = 1; i < AllWeapon; i++)
			{
				if(uWeapon[i][id] == 0 || weaponRang[i] == 0)
					continue;
				
				num_to_str(i, String, 31);
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SKINPIECE", (bUsingGuns[id][Weapons[i]] == i) ? "\w" : "\y", WeaponNames[i], szWeaponNames[Weapons[i]], uWeapon[i][id]);
				menu_additem(sMenu, szText, String);
				All++;
			}
			
			if(All == 0)
			{
				MenuMod[id] = 0;
				Menu(id);
			}
		}
		case 5: // Dovanos
		{
			formatex(szText, sizeof(szText), "\r[\yPublic\r]\w -\r %L %L", LANG_PLAYER, "MENUTOGIFT", LANG_PLAYER, "YPOINT", Points[id]);
			sMenu = menu_create(szText, "MenuHandler");
			new call = menu_makecallback("Call_Back");
			
			new All, Name[126], String[32];
			get_user_name(aTarget[id], Name, 31);
			
			if(aTarget[id] > 0)
			{
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTT", Name);
				menu_additem(sMenu, szText, "-1");
				
				for(new i = 1; i < AllWeapon; i++)
				{
					if(i == aThing[id] && uWeapon[i][id] > 0)
					{
						formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTS", WeaponNames[i]);
						menu_additem(sMenu, szText, "-2");
						All++;
					}
				}
				
				if(aThing[id] <= MAX && All == 0)
				{
					formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTCH");
					menu_additem(sMenu, szText, "-2");
				}
				else if(aThing[id] > MAX)
				{
					if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTC", chest_name((aThing[id]-CHEST_ID))); }
					if(KEY_ID == aThing[id]) { formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTK"); }
					
					menu_additem(sMenu, szText, "-2");
				}
				if(aThing[id] > MAX)
				{
					formatex(szText, sizeof(szText), "Kiekis: \r%d", aAmount[id]);
					menu_additem(sMenu, szText, "-75");
				}
				
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "GIFTPOINTS", aPoints[id]);
				menu_additem(sMenu, szText, "-4");
				
				formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SENDGIFT");
				menu_additem(sMenu, szText, "-3");
			}
			else
			{
				for(new i = 1; i <= get_maxplayers(); i++)
				{
					if(is_user_connected(i) && !is_user_bot(i))
					{
						get_user_name(i, Name, 31);
					
						if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
					
						num_to_str(i, String, 31);
						menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
				}
			}
		}
	}
	case 6: // Parduotuvė
	{	
		formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "PMAIN", LANG_PLAYER, "YPOINT", Points[id]);
		sMenu = menu_create(szText, "MenuHandler");
		
		new call = menu_makecallback("Call_Back");
		new accesNum = get_access(id);
		new Float:gPercent = ((accesNum == 4) ? 0.9 : ((accesNum == 3) ? 0.94 : (accesNum == 2) ? 0.97 : 1.0));
		
		new gPrice = floatround(1700*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_1", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		gPrice = floatround(8000*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_5", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		gPrice = floatround(14000*gPercent, floatround_floor);
		formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPKEY_10", gPrice);
		menu_additem(sMenu, szText, _, _, (Points[id] < gPrice) ? call : -1);
		
		for(new i=1; i <=CHEST_COUNT; i++)
		{
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "SHOPCHEST_1", chest_name(i), 1250);
			menu_additem(sMenu, szText, _, _, (Points[id] < 1250) ? call : -1);
		}
	}
	case 7: // Skrynių info
	{		
		formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "IMAIN", LANG_PLAYER, "YPOINT", Points[id]);
		sMenu = menu_create(szText, "MenuHandler");
		
		for(new i=1; i <=CHEST_COUNT; i++)
		{
			formatex(szText, sizeof(szText), "%L", LANG_PLAYER, "CHESTINFOPIECE", chest_name(i));
			menu_additem(sMenu, szText);
			}
		}
	}
	menu_display(id, sMenu);
}

public Call_Back(id, menu, item)
	return ITEM_DISABLED;

public MenuHandler(id, gMenu, item)
{	
	if(item == MENU_EXIT)
	{
		MenuMod[id] = 0;
		menu_destroy(gMenu);
		return PLUGIN_HANDLED;
	}
	
	new aMenu[2], Data[4][32], sKey[32], Name[32], mName[32], Key;
	menu_item_getinfo(gMenu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
	
	parse(Data[0], sKey, 31);
	Key = str_to_num(sKey);
	
	switch(MenuMod[id])
	{
		case -2:
		{
			MenuMod[id] = 5;
			aThing[id] = Key;
			
			Menu(id);
		}
		case -1:
		{
			MenuMod[id] = 3;
			WeaponinMarket[id] = Key;
			
			client_cmd(id, "messagemode Cost");
			
			Menu(id);
		}
		case 0:
		{
			MenuMod[id] = Key;
			Menu(id);
			
		}
		case 1:
		{
			parse(Data[0], Data[2], 31, Data[3], 31);
			
			if(bUsingGuns[id][str_to_num(Data[3])] == str_to_num(Data[2])) {
				bUsingGuns[id][str_to_num(Data[3])] = 0;
				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])]);
				} else {
				bUsingGuns[id][str_to_num(Data[3])] = str_to_num(Data[2]);
				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])]);
				set_task(0.1, "UpdateStatusText", id);
			}
			
			static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");		
			for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }		
			formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
					
			SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
			
			log_errors("[SKIN CHANGE] %s", szQuery);
			
			MenuMod[id] = 1;
			Menu(id);
		}
		case 2:
		{
			if(Chest[id][(item+1)] <= 0)
			{
				Chest[id][(item+1)] = 0;
				
				if(pKey[id] < 0)
					pKey[id] = 0;
				
				return PLUGIN_CONTINUE;
			}
			
			Chest[id][(item+1)]--;
			pKey[id]--;
			
			new chest = item+1;
			
			new Float:rNum = random_float((random(5)*1.0), 175.0);
			new chance = (rNum <= 1.0) ? 1 : ((rNum <= 5.0) ? 5 : ((rNum <= 25) ? 25 : 100 ));
			/////////////////////////////////////////// 
			new skinsCnt = chestsChance[chest][chance];
			new skinNum = random(skinsCnt);
			new skinId = chestsList[chest][chance][skinNum];
			
			new szName[32]; get_user_name(id, szName, 31);
			
			
			if(1 <= chance <= 25) { print_color(0, "%L", LANG_PLAYER, "FOUNDITEM_ALL", Prefix, szName, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
			else { client_print_color(id, print_team_default, "%L", LANG_PLAYER, "FOUNDITEM_SELF", Prefix, WeaponNames[skinId], szWeaponNames[Weapons[skinId]]); }
			
			uWeapon[skinId][id]++;
			SaveData(id);
			
			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);
			show_motd(id, szMotd, chest_name((item+1)));
			Menu(id);
		}
		case 3:
		{
			if(Key == -1) { MenuMod[id] = -1; Menu(id); }
			else if(Key == 0)
			{
				if(inMarket[id]) { inMarket[id] = false; }
				else if(MarketPoints[id] > 0)
				{
					if(mAmount[id] < 1) mAmount[id] = 1;
					get_user_name(id, Name, 31);
					
					switch(WeaponinMarket[id])
					{
						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]); }
						case KEY_ID: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_KEY", Prefix, Name, mAmount[id], MarketPoints[id]); }
						default: { print_color(0, "%L", LANG_PLAYER, "TOMARKET_SKIN", Prefix, Name, WeaponNames[WeaponinMarket[id]], szWeaponNames[Weapons[WeaponinMarket[id]]], MarketPoints[id]); }
					}
					
					inMarket[id] = true;
				}
				gLastMarketTime[id] = get_systime();
				Menu(id);
			}
			
			
			else if(Key == -99)
			{
				client_cmd(id, "messagemode setMarketAmount");
			}
			else if(inMarket[Key] && Points[id] >= MarketPoints[Key])
			{
				get_user_name(Key, Name, 31); get_user_name(id, mName, 31);
				
				if(WeaponinMarket[Key] < CHEST_ID)
				{
					if(uWeapon[WeaponinMarket[Key]][Key] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					
					print_color(0, "!g%s%L", Prefix, LANG_PLAYER, "BUYMARKETITEM", mName, WeaponNames[WeaponinMarket[Key]], MarketPoints[Key], Name);
					uWeapon[WeaponinMarket[Key]][id]++;
					uWeapon[WeaponinMarket[Key]][Key]--;
					
					if(!uWeapon[WeaponinMarket[Key]][Key])
						for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[Key][i] == WeaponinMarket[Key]) { bUsingGuns[Key][i] = 0; uWeaponKills[i][Key] = 0; break; } }
					
					static szQuery[512], szUGuns[128];
					format(szUGuns, sizeof(szUGuns), "");
					for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
					formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));					
					
					SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
					
					log_errors("[SKIN SHOP] %s", szQuery);
					
					format(szUGuns, sizeof(szUGuns), "");
					for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[Key][i]); }
					formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(Key));
										
					SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
					
					log_errors("[SKIN SHOP] %s", szQuery);
				}
				else if(CHEST_ID <= WeaponinMarket[Key] <= CHEST_ID+CHEST_COUNT)
				{
					new chId = (WeaponinMarket[Key]-CHEST_ID)+1;
					
					if(Chest[Key][chId] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETCHEST", mName, chest_name(chId), MarketPoints[Key], Name);

					Chest[id][chId]++;
					Chest[Key][chId]--;
				}
				else if(WeaponinMarket[Key] == KEY_ID)
				{
					if(pKey[Key] <= 0)
					{
						inMarket[Key] = false;
						MarketPoints[Key] = 0;
						WeaponinMarket[Key] = 0;
						
						return PLUGIN_CONTINUE;
					}
					
					client_print_color(0, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "BUYMARKETKEY", mName, MarketPoints[Key], Name);
										
					pKey[id]++; pKey[Key]--;
				}
				
				emit_sound(Key, CHAN_ITEM, SOUND_SOLD, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );
				Points[Key] += MarketPoints[Key];
				Points[id] -= MarketPoints[Key];
				SaveData(Key);
				SaveData(id);
				mAmount[Key]--;
				
				if(mAmount[Key] <= 0)
				{
					inMarket[Key] = false;
					MarketPoints[Key] = 0;
					WeaponinMarket[Key] = 0;
				}
				MenuMod[id] = 0;
			}
		}
		case 4:
		{				
			new Random = random_num(1, 100);
					
			if(Random < 5 && weaponRang[Key] == 3)
			{
				new chest = item+1;	

				new chance = 5;
				new skinsCnt = chestsChance[chest][chance];
				new skinNum = random(skinsCnt);
				new skinId = chestsList[chest][chance][skinNum];
				
				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]]);
				
				uWeapon[skinId][id]++;
				SaveData(id);
			}
			else if(Random < 25 && weaponRang[Key] == 4)
			{
				new chest = item+1;	
				
				new chancerare = 25;
				new skinsCntrare = chestsChance[chest][chancerare];
				new skinNumrare = random(skinsCntrare);	
				new skinIdrare = chestsList[chest][chancerare][skinNumrare];
				
				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]]);
				
				uWeapon[skinIdrare][id]++;
				SaveData(id);
			}
			else 
				
			if(uWeapon[Key][id] > 0 && weaponRang[Key] > 0)
			{
				uWeapon[Key][id]--;
				
				bUsingGuns[id][Weapons[Key]] = 0;
				
				if(!uWeapon[Key][id])
					uWeaponKills[Key][id] = 0;
					
				new Points;
					
				if(weaponRang[Key] == 1) Points = random_num(50, 2500);	   	  // Y
				else if(weaponRang[Key] == 2) Points = random_num(50, 2500);  // R
				if(weaponRang[Key] == 3) Points = random_num(50, 2500); 	  // B
				else if(weaponRang[Key] == 4) Points = random_num(200, 300);  // W
								
				cs_set_user_points(id, cs_get_user_points(id) +Points); 
				
				client_print_color(id, print_team_default, "^4%s%L", Prefix, LANG_PLAYER, "MENUTODUST", get_user_name_ex(id), Points);
				
				log_errors("[SKINLOG TRASH] %s išsikeite %s", get_user_name_ex(id), WeaponNames[Key]);
				
				SaveData(id);
				} else {
				uWeapon[Key][id] = 0;
				SaveData(id);
			}
			
			Menu(id);
		}
		case 5:
		{
			if(Key == -1) { aTarget[id] = 0; }
			if(Key == -2) { MenuMod[id] = -2; }
			if(Key == -3)
			{
				if(!is_user_connected(aTarget[id])) 
				{
					return PLUGIN_CONTINUE;
				}
				
				if(aThing[id] < CHEST_ID)
				{
					if(uWeapon[aThing[id]][id] > 0)
					{
						uWeapon[aThing[id]][aTarget[id]]++;
						uWeapon[aThing[id]][id]--;
						
						if(!uWeapon[aThing[id]][id])
							for(new i; i < CSW_VESTHELM; i++) { if(bUsingGuns[id][i] == aThing[id]) { bUsingGuns[id][i] = 0; uWeaponKills[i][id] = 0; break; } }
						
						static szQuery[512], szUGuns[128]; format(szUGuns, sizeof(szUGuns), "");		
						for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }		
						formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `using_skins` = '%s' WHERE `username` = '%s';", TABLE_NAME, szUGuns, get_user_name_ex(id));
						
						SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
						
						log_errors("[SKIN GIFT] %s padovanojo %s - %s", get_user_name_ex(id), get_user_name_ex(aTarget[id]), WeaponNames[aThing[id]]);
						log_errors("[SKIN GIFT] %s", szQuery);
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_SKIN");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_SKIN", Prefix, get_user_name_ex(id), WeaponNames[aThing[id]], szWeaponNames[Weapons[aThing[id]]]);
					}
					// else client_print_color(id, print_team_default, "Neturi tiek skinu!");
				}
				else if(CHEST_ID <= aThing[id] <= CHEST_ID+CHEST_COUNT)
				{
					new cId = aThing[id]-CHEST_ID;
					if(Chest[id][cId] >= aAmount[id])
					{
						Chest[aTarget[id]][cId]+=aAmount[id]; 
						Chest[id][cId]-=aAmount[id];
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_CHEST");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_CHEST", Prefix, get_user_name_ex(id), aAmount[id]);
					}
					else client_print_color(id, print_team_default, "Neturi tiek skryniu!");
				}
				else if(aThing[id] == KEY_ID)
				{
					if(pKey[id] >= aAmount[id])
					{
						pKey[aTarget[id]]+=aAmount[id]; pKey[id]-=aAmount[id];
						
						client_print_color(id, print_team_default, "^4%s %L", Prefix, LANG_PLAYER, "GIFTSUCCESS_KEY");
						print_color(aTarget[id], "%L", LANG_PLAYER, "GIFTGOT_KEY", Prefix, get_user_name_ex(id), aAmount[id]);
					}
					else client_print_color(id, print_team_default, "Neturi tiek raktu!");
				}
				
				if(aPoints[id] > 0 && Points[id] >= aPoints[id])
				{
					Points[aTarget[id]] += aPoints[id];
					Points[id] -= aPoints[id];
					client_print_color(aTarget[id], print_team_default, "%L", LANG_PLAYER, "GIFTGOT_PTS", Prefix, get_user_name_ex(id), aPoints[id]);
					log_errors("[SKINLOG PTS] %s padovanojo %s - %d tasku", get_user_name_ex(id), get_user_name_ex(aTarget[id]), aPoints[id]);
				}
				
				SaveData(aTarget[id]);
				SaveData(id);
				
				MenuMod[id] = 0;
				aThing[id] = 0;
				aTarget[id] = 0;
				aPoints[id] = 0;
			}
			
			if(Key == -75)
			{
				client_cmd(id, "messagemode setAmount");
			}
			
			if(Key == -4) { client_cmd(id, "messagemode Gift"); }
			if(Key > 0) { aTarget[id] = Key; }
			Menu(id);
		}
		case 6:
		{
			new accesNum = get_access(id);
			new Float:gPercent = ((accesNum == 4) ? 0.92 : ((accesNum == 3) ? 0.96 : (accesNum == 2) ? 0.98 : 1.0));
			
			switch(item)
			{
				case 0: 
				{
					Points[id] -= floatround(1700*gPercent, floatround_floor);
					pKey[id]++;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_1", Prefix);
					SaveKeys(id);
				}
				case 1: 
				{
					Points[id] -= floatround(8000*gPercent, floatround_floor);
					pKey[id] += 5;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_5", Prefix);
					SaveKeys(id);
				}
				case 2: 
				{
					Points[id] -= floatround(14000*gPercent, floatround_floor);
					pKey[id] += 10;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTKEY_10", Prefix);
					SaveKeys(id);
				}
				case 3..(CHEST_COUNT+3):
				{
					Chest[id][item-2] += 1;
					
					Points[id] -= 1250;
					
					client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BOUGHTCHEST_1", Prefix, chest_name(item-2));
					
					SaveChests(id);
				}
			}
		}
		case 7:
		{
			new szMotd[126]; formatex(szMotd, charsmax(szMotd), "http://185.80.128.125/pbgo/b.php?chest=%d", (item+1));
			show_motd(id, szMotd, chest_name((item+1)));
			Menu(id);
		}
		default: { MenuMod[id] = 0; }
	}
	
	menu_destroy(gMenu);
	return PLUGIN_HANDLED;
}

public client_disconnected(id)
{
	Patirtis[id] = 0, Kills[id] = 0,Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
	for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
	for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
	for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
	
	gWarnings[id] = 0;
	WeaponinMarket[id] = 0;
	MarketPoints[id] = 0;
	inMarket[id] = 0;
	Password[id] = "";
	SavedPassword[id] = "";
	Loged[id] = false;
	gRegistered[id] = false;
	gLogged[id] = false;
	bTrade[id] = false;
	bTradeAccepted[id] = false;
}

public client_putinserver(id)
{
	Patirtis[id] = 0, Kills[id] = 0, Rang[id] = 0, Points[id] = 0, pKey[id] = 0, Killers[id] = 0;
	for(new i; i <= CHEST_COUNT; i++) { Chest[id][i] = 0; }
	for(new i; i < AllWeapon; i++) { uWeapon[i][id] = 0; }
	for(new i; i < CSW_VESTHELM; i++) { bUsingGuns[id][i] = 0; }
	
	gWarnings[id] = 0;
	Password[id] = "";
	SavedPassword[id] = "";
	Loged[id] = false;
	bTrade[id] = false;
	bTradeAccepted[id] = false;
	gRegistered[id] = false;
	gLogged[id] = false;
	gLastMarketTime[id] = get_systime();

	if(gCanLoad) { set_task(0.5, "Registered", id); }
}

public add_delay(id)
{	
	switch(id)
	{
		case 1..8: set_task(0.1, "Registered", id);
			case 9..16: set_task(0.2, "Registered", id);
			case 17..24: set_task(0.3, "Registered", id);
			case 25..32: set_task(0.4, "Registered", id);
		}
}

//============================================================//
//                 [~ Saving / Loading datas ~]	              //
//============================================================//
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime)
{ 
	if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
	else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
}

public Login(id)
{
	if(!is_user_connected(id) || is_user_bot(id))
		return;
	
	static szQuery[256], iData[1]; iData[0] = id;
	formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s' AND `password` = '%s'", TABLE_NAME, get_user_name_ex(id), Password[id]);
	
	SQL_ThreadQuery(g_hTuple, "QuerySelect", szQuery, iData, 1);
	
	log_errors("[LOGIN] %s", szQuery);
}

public QuerySelect(iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime)
{
	if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("%s", szError); return; }
	else 
	{ 
		new id = iData[0];
		
		if(SQL_NumResults(hQuery))
		{
			new szSkins[512+MAX], szKSkins[512+MAX], szUGuns[256], szChests[128];
			
			SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
			Patirtis[id] = SQL_ReadResult(hQuery, 2); 
			Kills[id] = SQL_ReadResult(hQuery, 3);    
			Points[id] = SQL_ReadResult(hQuery, 4);   
			pKey[id] = SQL_ReadResult(hQuery, 5);	  
			Rang[id] = SQL_ReadResult(hQuery, 7);  	  
			Killers[id] = SQL_ReadResult(hQuery, 8);  
			
			SQL_ReadResult(hQuery, 9, szSkins, sizeof(szSkins));    
			SQL_ReadResult(hQuery, 10, szUGuns, sizeof(szUGuns));   
			SQL_ReadResult(hQuery, 11, szKSkins, sizeof(szKSkins)); 
			SQL_ReadResult(hQuery, 6, szChests, sizeof(szChests)); 
			
			SQL_NextRow(hQuery);
			
			new myNumbers[512+MAX];
			
			new count = ExplodeString(szSkins, myNumbers);
			if(count) { for(new i = 1; i < MAX; i++) { uWeapon[i][id] = myNumbers[i]; } }
			
			count = ExplodeString(szKSkins, myNumbers);
			if(count) { for(new i = 1; i < MAX; i++) { uWeaponKills[i][id] = myNumbers[i]; } }
			
			count = ExplodeString(szUGuns, myNumbers);
			if(count)
			{
				for(new i = 1; i < CSW_VESTHELM; i++)
				{
					if(myNumbers[i] <= MAX)
					{
						if(uWeapon[myNumbers[i]][id] && i == Weapons[myNumbers[i]])
						{
							bUsingGuns[id][i] = myNumbers[i];
						}
					}
				}
			}
			
			count = ExplodeString(szChests, myNumbers);
			if(count) { for(new i = 1; i <= CHEST_COUNT; i++) { Chest[id][i] = myNumbers[i]; } }
			
			if(!equal(Password[id], SavedPassword[id])) 
			{
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "SAVE_PASS_ANNOUNCE", Prefix);
			}
		}
		Loged[id] = true;
		UnsetBlack(id);
	} 
}

public SaveData(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		static szQuery[2048], szSkins[1024], szKSkins[1024], szUGuns[128], szChests[128];
		format(szSkins, sizeof(szSkins), "");
		format(szKSkins, sizeof(szKSkins), "");
		format(szUGuns, sizeof(szUGuns), "");
		format(szChests, sizeof(szChests), "");
		
		
		for(new i; i < MAX; i++)
		{
			format(szSkins, sizeof(szSkins), "%s%d ", szSkins, uWeapon[i][id]);
			format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]);
		}
		for(new i; i < CSW_VESTHELM; i++) { format(szUGuns, sizeof(szUGuns), "%s%d ", szUGuns, bUsingGuns[id][i]); }
		for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
		
		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);
		
		SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE] %s", szQuery);
	}
}

public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{
	if(iFailState == TQUERY_CONNECT_FAILED) { log_errors("Nepavyko prisijungti prie duomenu bazes. [%d] %s", iError, szError); return; }
	else if(iFailState == TQUERY_QUERY_FAILED) { log_errors("Neapyko apdoroti uzklausos. [%d] %s", iError, szError); return; }
}

public UnsetBlack(id)
{
	set_user_maxspeed(id, 250.0);
	
	message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
	write_short(1<<10);
	write_short(1<<10);
	write_short(0x0000);
	write_byte(255);
	write_byte(255);
	write_byte(255);
	write_byte(50);
	message_end();
}

public TradeMenu(id)
{
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	if(bTrade[id])
	{
		if(bTradeAccepted[id])
		{
			client_print_color(id, 3, "[Trade] Jus jau tradinate!");
			return PLUGIN_CONTINUE;
		}
		
		client_print_color(id, 3, "[Trade] Jums jau pasiulytas trade, jei sutinkate rasykita /sutinku arba /taccept");
		return PLUGIN_CONTINUE;
	}
	
	new Name[32], String[32], sMenu;
	
	sMenu = menu_create("Trade Menu", "MenuHandler");
	new call = menu_makecallback("Call_Back");
	
	for(new i; i < get_maxplayers(); i++)
	{
		if(is_user_connected(i) && !is_user_bot(i))
		{
			get_user_name(i, Name, 31);
			
			if(!Loged[i]) { format(Name, charsmax(Name), "%s \r[n.l]", Name); }
			
			num_to_str(i, String, 31);
			menu_additem(sMenu, Name, String, _, (!Loged[i]) ? call : -1);
		}
	}
	
	menu_display(id, sMenu);
	
	return PLUGIN_CONTINUE;
}

public RegMenu(id)
{
	static sId; sId = id;
	id = ((id - TASKID_REMENU) < 0) ? id : id-TASKID_REMENU;
	
	if(Loged[id]) {
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "ALREADY_REGISTERED", Prefix);
		Menu(id);
		return PLUGIN_HANDLED;
	}
	
	if(!gLogged[id] || !gCanLoad)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "WAIT_SYSTEM_LOADING", Prefix);
		remove_task(id+TASKID_REMENU);
		set_task(1.0, "RegMenu", id+TASKID_REMENU);
		return PLUGIN_HANDLED;
	}
	remove_task(id+TASKID_REMENU);
	
	if(gLogged[id] && sId > 32 && gCanLoad && !gRegistered[id])
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_1", Prefix);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "NEED_REGISTER_2", Prefix);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BLANK");
		
		UnsetBlack(id);
		return PLUGIN_HANDLED;
	}
	
	if(equal(Password[id], SavedPassword[id]) && gRegistered[id])
	{
		Login(id);
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "AUTO_CONNECTED", Prefix);
		
		return PLUGIN_HANDLED;
	}
	
	new szString[128], Name[32];
	format(szString, sizeof(szString), "\r[\yPublic\r]\w - %L", LANG_PLAYER, "RMMAIN");
	new rMenu = menu_create(szString, "rMenuHandler");
	get_user_name(id, Name, 31);
	
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMACCOUNT", Name);  // Client name
	menu_additem(rMenu, szString, "0");
	
	new szPassword[126];
	for(new i; i < strlen(Password[id]); i++) {
		format(szPassword, charsmax(szPassword), "%s*", szPassword);
	}
	
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", Password[id]); // Client password
	format(szString, sizeof(szString), "%L", LANG_PLAYER, "RMP", szPassword);   // Client password
	menu_additem(rMenu, szString, "1");
	
	if(!gRegistered[id]) // Not registered
	{
		format(szString, sizeof(szString), "%s%L", (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "" :"\d", LANG_PLAYER, "RMR");
		menu_additem(rMenu, szString, (strlen(Password[id]) >= MIN_PASSWORD_LENGTH) ? "2" : "0");
	}
	else
	{
		if(!Loged[id]) // Registered, but not logged
		{
			new gPassCheck = equal(SavedPassword[id], Password[id]);
			
			format(szString, sizeof(szString), "%s%L", (gPassCheck) ? "" : "\d", LANG_PLAYER, "RMLOGIN");
			menu_additem(rMenu, szString, (gPassCheck) ? "3" : "0");
		}
		else
		{
			Menu(id);
		}
	}
	
	menu_display(id, rMenu);
	return PLUGIN_HANDLED;
}

public rMenuHandler(id, gMenu, item)
{	
	if(item == MENU_EXIT)
	{
		menu_destroy(gMenu);
		return PLUGIN_CONTINUE;
	}
	
	new data[9], name[64], Key;
	new access, callback;
	menu_item_getinfo(gMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
	
	Key = str_to_num(data);
	
	switch(Key)
	{
		case 0: { RegMenu(id); }
		case 1: { client_cmd(id, "messagemode UserPassword"); RegMenu(id); }
		case 2:
		{
			if(strlen(Password[id]) >= MIN_PASSWORD_LENGTH)
			{
				copy(SavedPassword[id], 31, Password[id]);
				Loged[id] = true;
				gRegistered[id] = true;
				SaveData(id);
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSUCCESS", Prefix, Password[id]);
				
				UnsetBlack(id);
				
				new szName[32]; get_user_name(id, szName, 31);
				log_errors("%s ivede slaptazodi [prisiregistravo]", szName);
				gWarnings[id] = 0;
				
				return PLUGIN_CONTINUE;
				} else {
				client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
				
				return PLUGIN_HANDLED;
			}
			// Menu(id);
		}
		case 3:
		{
			if(!Loged[id]) 
			{
				gWarnings[id] = 0;
				Login(id);
			}
		}
	}
	return PLUGIN_CONTINUE;
}

public PlayerPassword(id)
{
	if(Loged[id]) 
	{
		return PLUGIN_HANDLED;
	}
	
	new Data[32]; read_args(Data, 31); remove_quotes(Data);
	
	if(strlen(Data) < MIN_PASSWORD_LENGTH)
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERSHORT", Prefix);
		client_cmd(id, "messagemode UserPassword");
		return PLUGIN_HANDLED;
	}
	else if(!equal(SavedPassword[id], Data) && strlen(Data) > MIN_PASSWORD_LENGTH && !equal(Password[id], Data))
	{
		client_print_color(id, print_team_default, "%L", LANG_PLAYER, "BAD_PASSWORD", Prefix);
		gWarnings[id]++;
		
		if(gWarnings[id] >= 3) 
		{
			gWarnings[id] = 0;
			
			server_cmd("amx_kick #%d ^"Trying to hack other account!^"", get_user_userid(id));
		}
	}
	
	copy(Password[id], 31, Data);
	RegMenu(id);
	return PLUGIN_CONTINUE;
}

public NameChange(id)
{
	if(get_cvar_num("csgo_nick_show"))
		return FMRES_IGNORED;
	
	if(!is_user_connected(id) || is_user_bot(id))
		return FMRES_IGNORED;
	
	new OldName[32], NewName[32], Name[32];
	get_user_name(id, Name, 31);
	pev(id, pev_netname, OldName, charsmax(OldName));
	if(OldName[0])
	{
		get_user_info(id, "name", NewName, charsmax(NewName));
		if(!equal(OldName, NewName))
		{
			set_user_info(id, "name", OldName);
			client_print_color(id, print_team_default, "%L", LANG_PLAYER, "REGISTERNAMECHANGE", Prefix);
			return FMRES_HANDLED;
		}
	}
	return FMRES_IGNORED;
}

public Registered(id)
{
	if(!is_user_connected(id) || is_user_bot(id))
		return;
	
	static szQuery[256], iData[1]; iData[0] = id;
	formatex(szQuery, 255, "SELECT * FROM `%s` WHERE `username` = '%s'", TABLE_NAME, get_user_name_ex(id));
	
	SQL_ThreadQuery(g_hTuple, "QuerySelectReg", szQuery, iData, 1);
	
	log_errors("[REGISTERED] %s", szQuery);
}

public QuerySelectReg( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
{ 
	if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_errors("[QuerySelectReg] %s", szError); return; }
	else
	{
		new id = iData[0];
		if(SQL_NumResults(hQuery))
		{
			gLogged[id] = true;
			gRegistered[id] = true;
			
			new passfield[32], password[32];
			get_pcvar_string(csgo_password_field, passfield, 31);
			get_user_info(id, passfield, password, 31);
			
			SQL_ReadResult(hQuery, 1, SavedPassword[id], 32);
			
			if(equal(password, SavedPassword[id])) {
				Password[id] = password;
			}
			
			new szName[32]; get_user_name(id, szName, 31);
			log_errors("[Registered] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
		}
		else
		{
			gLogged[id] = true;
			gRegistered[id] = false;
			
			new szName[32]; get_user_name(id, szName, 31);
			log_errors("[Founded REG] %s - %s", szName, (gRegistered[id]) ? "true" : "false");
		}
	} 
}

public cmdUniq(id)
{
	if(!Loged[id]) { RegMenu(id); return PLUGIN_HANDLED; }

	new szText[512], szid[64];

	formatex(szText, sizeof(szText), "\r%L %L", LANG_PLAYER, "SMAIN", LANG_PLAYER, "YPOINT", Points[id]);
	new	sMenu = menu_create(szText, "MenuHandlerUniq");
		
	for(new i; i < AllWeapon; i++)
	{
		if(uniqPrice[i] > 0)
		{
			formatex(szText, charsmax(szText), "%s \r%d \w- \rTaškų", WeaponNames[i], uniqPrice[i]);
			formatex(szid, 63, "%d", i);
			menu_additem(sMenu, szText, szid, _, (Points[id] < uniqPrice[i]) ? -2 : -1);
		}
	}
	
	menu_setprop(sMenu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, sMenu);
	
	return PLUGIN_CONTINUE;
}

public MenuHandlerUniq(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new aMenu[2], Data[4][32], sKey[32];
	menu_item_getinfo(menu, item, aMenu[0], Data[0], 31, Data[1], 31, aMenu[1]);
	
	parse(Data[0], sKey, 31);
	new Key = str_to_num(sKey);
	
	if(Points[id] >= uniqPrice[Key])
	{
		uWeapon[Key][id]++;
		Points[id] -= uniqPrice[Key];
		SaveData(id);
		
		client_print_color(id, print_team_default, "%s ^3%s ^4Nusipirko ^3%s!", Prefix, get_user_name_ex(id), WeaponNames[Key]);
	}
	else {
		client_print_color(id, print_team_default, "%s ^3Nepakanka taškų!", Prefix);
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

/*STOCK'S Key's*/
stock drop_keys(id, dropKey)
{
	if(dropKey >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szName[32]; get_user_name(id, szName, 31);
		
		static additional_keys; additional_keys = 0;
		
		if(!additional_keys)
		{
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUND_KEYS_ALL", EVENT, szName, pKey);
			pKey[id]++;
		}
		SaveKeys(id);
	}
}

/*STOCK'S*/
stock drop_item(id, dropRate)
{
	if(dropRate >= random_float(0.0, 500.0) && get_playersnum() >= NEED_MIN_PLAYERS)
	{
		new szName[33], rNum, accesNum = get_access(id); get_user_name(id, szName, 32);
		rNum = random(CHEST_COUNT)+1;
		
		static additional_chests; additional_chests = 0;
		if(!random(5) && accesNum)
		{
			additional_chests = random(((accesNum == 1) ? 1 : (accesNum == 1) ? 1 : 1));
			
			if(additional_chests)
			{
				additional_chests++;
				client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHESTS", Prefix, szName, additional_chests, chest_name(rNum));
				Chest[id][rNum] += additional_chests;
			}
		}
		
		if(!additional_chests)
		{
			client_print_color(0, print_team_default, "%L", LANG_PLAYER, "FOUNDCHEST", Prefix, szName, chest_name(rNum));
			Chest[id][rNum]++;
		}
		SaveChests(id);
	}
}

stock get_access(id)
{
	if(get_user_flags(id) & ACCESS_ADMIN) 
	{
		return 2;
		} else if(get_user_flags(id) & ACCESS_VIP) 
		{
		return 1;
	}
	
	return 0;
}

stock chest_name(iNum)
{
	new szReturn[126];
	
	switch(iNum)
	{
		case 1: { formatex(szReturn, charsmax(szReturn), "Falchion"); }
		case 2: { formatex(szReturn, charsmax(szReturn), "Wildfire"); }
		case 3: { formatex(szReturn, charsmax(szReturn), "Hunstman"); }
		case 4: { formatex(szReturn, charsmax(szReturn), "Spectrum"); }
		case 5: { formatex(szReturn, charsmax(szReturn), "Shadow"); }
		case 6: { formatex(szReturn, charsmax(szReturn), "Gamma"); }
		case 7: { formatex(szReturn, charsmax(szReturn), "Hydra"); }
	}
	
	return szReturn;
}

stock screen_color(id)
{
	message_begin(MSG_ONE, g_msgid_ScreenFade, {0,0,0}, id);
	write_short(1<<10);
	write_short(1<<10);
	write_short(0x0000);
	write_byte(255);
	write_byte(0);
	write_byte(0);
	write_byte(75);
}

stock ExplodeString(const string[], output[], olen = sizeof output)
{
	new len = strlen( string ); 									// We retrieve the length of the current string passed.
	
	if ( !len )  { return 0; } 										// If the string is empty we stop there.
	
	new i, c, j, count;
	new number[ 12 ];
	
	do
	{
	while ( string[ i ] == ' ' ) i++; 								// One or more spaces can be used between 2 numbers, so we move forward until we find a number.
	while ( ( number[ j++ ] = c = string[ i++ ] ) && c != ' ' ) {}  // We loop and save the number found until the next space found or end of string.
	
	output[ count++ ] = str_to_num( number ); 						// We convert the number saved previously into a number and we stored in output at the slot count.
	j = 0;
	}
	while ( i < len && count < olen );								// We should looping while we have not cross the string length.

	return count;
}

stock get_user_name_ex(id)
{
	new szName[33];
	get_user_name(id, szName, charsmax(szName));

	replace_all(szName, charsmax(szName), "'", "\'");
	replace_all(szName, charsmax(szName), "^"", "\^"");
	// replace_all(szName, charsmax(szName), ".", "");

	return szName;
}

stock print_color(const id, const input[], any:...)
{
	new Count = 1, Players[32];
	static Msg[191];
	vformat(Msg, 190, input, 3);

	replace_all(Msg, 190, "!g", "^4");
	replace_all(Msg, 190, "!y", "^1");
	replace_all(Msg, 190, "!t", "^3");

	if(id) Players[0] = id; else get_players(Players, Count, "ch");
	{
	for (new i = 0; i < Count; i++)
	{
	if (is_user_connected(Players[i]))
	{
		message_begin(MSG_ONE, get_user_msgid( "SayText" ), _, Players[i]);
		write_byte(Players[i]);
		write_string(Msg);
		message_end();
		}
		}
	}
	return PLUGIN_HANDLED;
	}

	stock bool:ValidMdl(Mdl[]) {
	return (containi(Mdl, ".mdl") != -1) ? true : false;
}

public UpdateStatusText(id)
{
	new szText[256], wId = get_user_weapon(id, _, _); 
	if(bUsingGuns[id][wId])
	formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "KILLS_SHOW", uWeaponKills[bUsingGuns[id][wId]][id], WeaponNames[bUsingGuns[id][wId]]);
	else 
	formatex(szText, charsmax(szText), "%L", LANG_PLAYER, "BLANK");
	
	set_hudmessage(0, 255, 0, 0.01, 0.94, 0, 6.0, 12.0, 0.1, 0.2, 78);
	ShowSyncHudMsg(id, g_msgid_SyncHud, szText);
}

stock get_weapon_maxclip(wpnid = 0)
{
	for (new a = 0; a < sizeof (g_weapons); a++)
		if (wpnid == g_weapons[a])
		return g_max_clip[a];
	
	return false;
}

stock SetFullBpAmmo(id, iWeaponID)
{ 
	new iFullbpammo,iAmmoId;
	
	for(new i = 1; i < AmmoIds; i++) 
	{ 
		if(g_iAmmoWeaponSharedBitSum[i] & (1<<iWeaponID))
		{ 
			iAmmoId = i;
			iFullbpammo = g_iAmmoMax[i];
			
			break;
		} 
	} 
	
	if(!iAmmoId)
		return;
	
	cs_set_user_bpammo(id, iWeaponID, iFullbpammo);
	
	message_begin(MSG_ONE_UNRELIABLE, g_msgid_AmmoX, _, id);
	write_byte(iAmmoId);
	write_byte(iFullbpammo);
	message_end();
}

stock has_user_weapon(id, iCswId, iSlot = 0)
{
	new iWeapon;
	if( !iSlot )
	{
		static const iWeaponsSlots[] = {
			-1,
			2, // CSW_P228
			-1,
			1, // CSW_SCOUT
			4, // CSW_HEGRENADE
			1, // CSW_XM1014
			5, // CSW_C4
			1, // CSW_MAC10
			1, // CSW_AUG
			4, // CSW_SMOKEGRENADE
			2, // CSW_ELITE
			2, // CSW_FIVESEVEN
			1, // CSW_UMP45
			1, // CSW_SG550
			1, // CSW_GALIL
			1, // CSW_FAMAS
			2, // CSW_USP
			2, // CSW_GLOCK18
			1, // CSW_AWP
			1, // CSW_MP5NAVY
			1, // CSW_M249
			1, // CSW_M3
			1, // CSW_M4A1
			1, // CSW_TMP
			1, // CSW_G3SG1
			4, // CSW_FLASHBANG
			2, // CSW_DEAGLE
			1, // CSW_SG552
			1, // CSW_AK47
			3, // CSW_KNIFE
			1  // CSW_P90
		};
		iSlot = iWeaponsSlots[iCswId];
	}
	
	const XO_PLAYER = 5;
	const m_rgpPlayerItems_Slot0 = 367;
	
	iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_Slot0 + iSlot, XO_PLAYER);
	
	const XO_WEAPON = 4;
	const m_pNext = 42;
	const m_iId = 43;
	
	while( iWeapon > 0 )
	{
		if( get_pdata_int(iWeapon, m_iId, XO_WEAPON) == iCswId )
			return iWeapon;
		
		iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON);
	}
	return 0;
}

stock SavePoints(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE POINTS] %s", szQuery);
	}
}

stock SaveChests(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024], szChests[128];
		for(new i; i <= CHEST_COUNT; i++) { format(szChests, sizeof(szChests), "%s%d ", szChests, Chest[id][i]); }
		
		formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `points` = '%d', `chests` = '%s' WHERE `username` = '%s';", TABLE_NAME, Points[id], szChests, get_user_name_ex(id));
			
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE CHESTS] %s", szQuery);
	}
}

stock SaveKeys(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE KEYS] %s", szQuery);
	}
}

stock SaveRang(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		formatex(szQuery, sizeof(szQuery), "UPDATE `%s` SET `rang` = '%d' WHERE `username` = '%s';", TABLE_NAME, Rang[id], get_user_name_ex(id));
  
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
  
		log_errors("[SAVE RANG] %s", szQuery);
	}
}

stock SaveKillers(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024];
		
		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));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE KILLERS] %s", szQuery);
	}
}

stock SaveGunsKills(id)
{
	if(Loged[id] && gRegistered[id] && gCanSave)
	{
		new szQuery[1024], szKSkins[1024];
		
		for(new i; i < MAX; i++) { format(szKSkins, sizeof(szKSkins), "%s%d ", szKSkins, uWeaponKills[i][id]); }
		
		formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `skins_kills` = '%s' WHERE `username` = '%s';", TABLE_NAME, szKSkins, get_user_name_ex(id));
		
		SQL_ThreadQuery(g_hTuple, "QuerySetData", szQuery);
		
		log_errors("[SAVE GUNS KILLS] %s", szQuery);
	}
}

stock log_errors(const szText[], any:...)
{
	static szMessage[256];
	vformat(szMessage, 256, szText, 2);
	
	log_to_file(g_logfile, szMessage);
	
	return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1158\\ f0\\ fs16 \n\\ par }
*/
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
User avatar
1TAP GOD
Membru, skill +1
Membru, skill +1
Posts: 152
Joined: 03 Sep 2018, 00:20
Detinator Steam: Da
SteamID: /id/assasinssmdfk
Fond eXtream: 0
Has thanked: 16 times
Been thanked: 16 times

20 Mar 2019, 21:16

Rcsgo e un addons care are implementată funcția aia nu este plugin care face doar aia este tot modul
Umbla la .php si .sql acolo este ce cauti tu
----------------Steam----------------
-----------------------------------------------------------
Image
And she be actin' funny, probably think a nigga need her
I thought I was faithful, she say I'm a cheater
They thought I was taken, I'm ready to mingle
User avatar
puNx
Membru, skill 0
Membru, skill 0
Posts: 80
Joined: 07 Aug 2015, 18:26
Detinator Steam: Da
CS Status: :)
Detinator server CS: Furien.Enjoygame.RO
SteamID: #WAS
Fond eXtream: 0
Contact:

29 Mar 2019, 11:26

pai e decat sursa man,nu e si amxx,asta zic nu merge compilata
Image
Image
Furien.Enjoygame.Ro[+18][VIP FREE][Admine Free]

Ofer suport tehnic si incredere pentru servere de CS 1.6 !
Contact me:
Skype: vlad.vlad604
Y!M: [email protected]
Steam: zeT # ANUBIS (link: http://steamcommunity.com/id/vladpuNx/ )
Forum: puNx (PM me)
Pretul difera in functie de ce doreste clientul !
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 6 guests