Raised This Month: $ Target: $400
 0% 

Load fails: Plugin file open error SMA


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
alexn22
Junior Member
Join Date: Dec 2019
Old 01-02-2020 , 06:40   Load fails: Plugin file open error SMA
Reply With Quote #1

I found an addons on internet, i put it on my server.. and from that plugin
gone problems

THATS SMA code

Code:
/*============================================================
====================JAILBREAK BY BARSIK=======================
=====================BASED ON CSPUJBM=========================
============================================================*/

/* === HERE ARE DEFINES WHICH YOU CAN TURN ON/OFF === */

// -- Addons
//#define ctpunish_on			// Simon addon: Punish CT
#define er_fade				// End round fade screen
#define grab_on				// Grab for admins
#define hero_on				// Main prisoner
#define hook_on				// Hook(rope for admins)
#define jailmenu_on			// JB server menu
#define rs_on				// Round Sound (MP3)
#define supermenu_on			// Supermenu
#define svip_bhop_on			// Supervip bunnyhop
#define teammanager_on			// Team manager + balance
#define vipmenu_on			// VIP system
#define voice_on			// Simon addon: Voice
#define roulette_on			// Russian roulette
#define qasystem_on			// Question & Answer system
#define football_on			// Football system
#define blockcmds_on			// Block some client commands
#define donate_on			// Money transfer system
#define reasons_on			// Kill reasons
#define roundcontrol_on			// Use module 'RoundControl'

// -- Modifications
#define heroweapon_on			// Gives super-knife to Main Prisoner
#define vipdoublejump_on		// VIP can jump 2 times(1 time in mid-air)
#define nowpnsprites_on			// Removes weapon sprites
#define boxwpnmodels_on			// Boxing gloves models

/* === END OF THESE DEFINES === */

#define COPYFOR				"Fantick"
#define PREFIX				"Элитный побег"
#define ADMIN_SKYPE			"maximimm"

#define ADMIN_LEVEL			ADMIN_BAN	// d
#define SUPERADMIN_LEVEL		ADMIN_RCON	// l
#define VIP_LEVEL			ADMIN_LEVEL_A	// m
#define SUPERVIP_LEVEL			ADMIN_LEVEL_E	// q
#define HOOK_LEVEL			ADMIN_LEVEL_F	// r
#define GRAB_LEVEL			ADMIN_LEVEL_G	// s

/* === MODELS === */
#define PLAYER_MODEL			"justserver"
#define KATANA_P_MODEL			"models/cs-fantick/p_katana_knife.mdl"
#define KATANA_V_MODEL			"models/cs-fantick/v_katana_knife.mdl"
#define OTVERTKA_P_MODEL		"models/extreme-shop/p_otvertka_byess3.mdl"
#define OTVERTKA_V_MODEL		"models/servf/v_otvertka.mdl"
#define ELECTRO_P_MODEL			"models/extreme-shop/p_electro.mdl"
#define ELECTRO_V_MODEL			"models/extreme-shop/v_electro.mdl"
#define BALL_MODEL			"models/w_jb_ball.mdl"
/* === MUSIC === */
#define MUSIC_FD			"sound/servf/freeday1.mp3"
#define MUSIC_HNS			"sound/servf/mus1.mp3"
#define MUSIC_ZOMBIE			"sound/cs-fantick/JB/zombie.mp3"
#define PREMUSIC_BOX			"sound/cs-fantick/jb_box.mp3"
#define PREMUSIC_MAGIC			"sound/servf/magic1.mp3"
/* === SOUNDS === */
#define SOUND_BELL			"cs-fantick/klaxon1.wav"
#define SOUND_ALIEN			"alien_alarm.wav"
#define SOUND_DUEL			"duelka.wav"
#define SOUND_HOOK			"cs-fantick/tok.wav"
#define SOUND_ZOMBIE_BEGIN		"cs-fantick/zombie.wav"
#define SOUND_CBAR_WALL			"cs-fantick/fire_hitwall.wav"
#define SOUND_CBAR_MISS			"cs-fantick/fire_miss.wav"
#define SOUND_ERROR			"cs-fantick/error.wav"
#define SOUND_KNIFEKILL			"cs-fantick/knife.wav"
#define SOUND_MAGIC_SKILL		"servf/magic1.wav"
#define SOUND_BALL_BOUNCE		"balls/bounce.wav"
/* === SPRITES === */
#define SPRITE_HOOK			"sprites/tok.spr"
#define SPRITE_BEACON			"sprites/shockwave.spr"
#define SPRITE_FOOTBALL_ICON		"sprites/icon_ball.spr"

/* === RoundSound === */
#if defined rs_on
new const roundsound[][] = {
	"sound/servf/rend1.mp3",
	"sound/servf/rend2.mp3",
	"sound/servf/rend3.mp3",
	"sound/servf/rend4.mp3",
	"sound/servf/rend5.mp3",
	"sound/servf/rend6.mp3",
	"sound/servf/rend7.mp3",
	"sound/servf/rend8.mp3",
	"sound/servf/rend9.mp3",
	"sound/servf/rend10.mp3"
}
#endif

/*
	==================================================
	=== THERE IS NOTHING TO CHANGE BELOW THIS LINE ===
	==================================================
*/

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#if AMXX_VERSION_NUM <= 182
#include <dhudmessage>
#endif
#include <engine>
#include <fakemeta_util>
#include <hamsandwich>

#define VERSION				"3.2 [WIP]"

enum(+= 100) {
	TASK_STATUS = 2487000,
	TASK_FREEDAY,
	TASK_MINMODELS,
	TASK_ROUNDEND,
	TASK_GIVEITEMS,
	TASK_BEACON,
	TASK_FADE,
	TASK_ROLLCD,
	TASK_FREEENDPL,
	TASK_ATTACK,
	TASK_INVIS,
	TASK_INVISPL,
	TASK_LASTPLAYER,
	TASK_NOSIMON,
	TASK_ALLOWSIMON
}

#define HUD_DELAY			Float:1.0
#define CELL_RADIUS			Float:200.0

#define get_bit(%1,%2) 			(%1 & 1 << (%2 & 31))
#define set_bit(%1,%2)	 		%1 |= (1 << (%2 & 31))
#define clear_bit(%1,%2)		%1 &= ~(1 << (%2 & 31))

#define vec_copy(%1,%2)			(%2[0] = %1[0], %2[1] = %1[1],%2[2] = %1[2])

// Offsets
#define m_flTimeWeaponIdle		48
#define m_flNextAttack			83
#define OFFSET_TEAM			114
#define m_iPrimaryWeapon		116
#define OFFSET_INTERNALMODEL		126
#define m_fNextHudTextArgsGameTime	198
#define m_fGameHUDInitialized		349
#define OFFSET_CSDEATHS			444
#define m_iVGUI				510

// Alien screen color(RGB)
#define ALIEN_RED			210
#define ALIEN_GREEN			255
#define ALIEN_BLUE			255

enum _hud { _hudsync, Float:_x, Float:_y, Float:_time }
enum _duel { _name[16], _csw, _entname[32], _opt[32], _sel[32] }

new gp_PrecacheSpawn, gp_PrecacheKeyValue, gp_SuperKnifeMul, gp_BoxMax, gp_TalkMode, g_zombie[33],
gp_VoiceBlock, gp_RetryTime, gp_ButtonShoot, gp_SimonSteps, gp_GlowModels, mxplr, gp_AutoLastresquest, 
gp_NoGame, gp_Motd, gp_GameHP, g_human[33], gp_Effects, g_MaxClients, g_MsgStatusText, g_mp3menu[33],
g_MsgStatusIcon, nick[64], g_MsgClCorpse, g_MsgMOTD, gc_TalkMode, gc_VoiceBlock, gc_SimonSteps,
gc_ButtonShoot, cvar_minpl, Float:gc_SuperKnifeMul, bool:has_used[33], g_used = 0, WeaponsLocked,
fdcooldown[33], lastdeny, cvar_autogamefd, g_MsgText, BeaconSprite, g_mp3[33], g_iMessagesStatusIcon,
ExplodeSprite, g_victim, g_killer, g_systime, g_magic_color[33], g_iMessagesBuyClose, inviscd[33],
g_money[33], cvar_fdlen, g_SyncHud

#if defined reasons_on
new g_victim_r[33]
#endif

#if defined football_on
new const szEntity[][] = {
	"worldspawn", "func_wall", "func_door",  "func_door_rotating", "func_wall_toggle", "func_breakable",
	"func_pushable", "func_train", "func_illusionary", "func_button", "func_rot_button", "func_rotating"
}
new g_iBall, Float:g_vOrigin[3], red_team, blue_team, g_FootballStarted, g_iIconBall, bool:stop
new const g_szBallName[] = "jbb_ball"
#endif

#if defined donate_on
new v_id[33], Float:g_delay[33]
#endif

#if defined roulette_on
new g_has_revolver[33]
#endif

#if defined rs_on
new g_ermp3[33]
#endif

#if defined qasystem_on
new g_answer[6], g_question[32], bool:g_answered
#endif

#if defined teammanager_on
stock const FIRST_JOIN_MSG[] = "#Team_Select"
stock const FIRST_JOIN_MSG_SPEC[] = "#Team_Select_Spect"
stock const INGAME_JOIN_MSG[] = "#IG_Team_Select"
stock const INGAME_JOIN_MSG_SPEC[] = "#IG_Team_Select_Spect"
const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC)
stock const VGUI_JOIN_TEAM_NUM = 2
new Float:gametime, TCount, CTCount
#endif
#if defined supermenu_on
new g_usedmoney[33], g_usedhp[33], g_usedgrenades[33], g_usedgravity[33], g_usedturbo[33], g_usedrespawns[33]
#endif
#if defined hero_on
new g_hero[33]
#endif
#if defined hook_on
new bool:ishooked[32], hookorigin[32][3], Sbeam, cvar_hookupd
#endif
#if defined grab_on
new p_players_only, p_throw_force, p_min_dist, p_speed, p_grab_force, p_glow_r, p_glow_b, p_glow_g, p_glow_a, 
p_glow, client_data[33][4]
#endif

new keysmenu = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
new T_item_1, T_item_2, T_item_3, T_item_4, T_item_5, T_item_6, T_item_7,T_item_8, T_item_9, CT_item_1, CT_item_3,
bool:g_Otvertka[33], g_Katana[33], g_Electro[33], g_speed[33], g_HasWeapon[33]

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|
	(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_ELITE)|(1<<CSW_P228)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)|(1<<CSW_FIVESEVEN)
const ALL_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|
	(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)|(1<<CSW_ELITE)|(1<<CSW_P228)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)|(1<<CSW_FIVESEVEN)
enum Color { NORMAL = 1, GREEN, TEAM_COLOR, GREY, 	RED, BLUE }
new const TeamName[][] = { "", "TERRORIST", "CT", "SPECTATOR" }

/* === SOME MODELS AND SOUNDS === */
new const _FistModels[][] = { "models/p_bknuckles.mdl", "models/v_bknuckles.mdl" }
new const _SuperGun[][] = { "models/cs-fantick/p_fire_knife.mdl", "models/cs-fantick/v_fire_knife.mdl" } // Super Knife
new const _CTGun[][] = { "models/p_dubinka.mdl", "models/v_dubinka.mdl" } // CT Knife
new const _MagicGun[][] = { "models/servf/p_magic.mdl", "models/servf/v_magic.mdl" } // Magic day knife

#if defined boxwpnmodels_on
new const _BoxModels[][] = { "models/p_boxer.mdl", "models/v_boxer.mdl" }
#endif

new const _FistSounds[][] = { "weapons/cbar_hitbod2.wav", "weapons/bullet_hit1.wav", "weapons/bullet_hit2.wav" } // 1 - b   2 - w   3 - 1,2
new const _RemoveEntities[][] = {
	"func_hostage_rescue", "info_hostage_rescue", "func_bomb_target", "info_bomb_target",
	"hostage_entity", "info_vip_start", "func_vip_safetyzone", "func_escapezone"
}

new const _WeaponsFree[][] = { "weapon_m4a1", "weapon_deagle", "weapon_sg550", "weapon_elite", "weapon_ak47", "weapon_mp5navy", "weapon_m3" }
new const _WeaponsFreeCSW[] = { CSW_M4A1, CSW_DEAGLE, CSW_SG550, CSW_ELITE, CSW_AK47, CSW_MP5NAVY, CSW_M3 }

new const _Duel[][_duel] = {
	{ "Deagle", CSW_DEAGLE, "weapon_deagle", "UJBM_MENU_LASTREQ_OPT4", "UJBM_MENU_LASTREQ_SEL4" },
	{ "m4a1", CSW_M4A1, "weapon_m4a1", "UJBM_MENU_LASTREQ_OPT5", "UJBM_MENU_LASTREQ_SEL9" },
	{ "Grenades", CSW_HEGRENADE, "weapon_hegrenade", "UJBM_MENU_LASTREQ_OPT6", "UJBM_MENU_LASTREQ_SEL6" },
	{ "m249", CSW_M249, "weapon_m249", "UJBM_MENU_LASTREQ_OPT8", "UJBM_MENU_LASTREQ_SEL8" },
	{ "Awp", CSW_AWP, "weapon_awp", "UJBM_MENU_LASTREQ_OPT7", "UJBM_MENU_LASTREQ_SEL7" }
}

// DHudSync: 0=ttinfo / 1=info / 2=simon / 3=ctinfo / 4=player / 5=day / 6=center / 7=help / 8=timer
new const g_HudSync[][_hud] = {
	{0,  0.6,  0.2,  2.0},
	{0, -1.0,  0.7,  5.0},
	{0,  -1.0,  0.0,  2.0},
	{0,  0.1,  0.3,  2.0},
	{0, -1.0,  0.9,  3.0},
	{0,  0.75,  0.1,  3.0},
	{0, -1.0,  0.6,  3.0},
	{0,  0.8,  0.3, 20.0},
	{0, -1.0,  0.4,  3.0},
	{0,  0.1,  0.5,  2.0},
	{0,  -1.0,  0.55,  2.0}
}

new g_ShopCommands[][] = {
	"usp", "glock", "deagle", "p228", "elites", "fn57", "m3", "xm1014", "mp5", "tmp", "p90",
	"mac10", "ump45", "ak47", "galil", "famas", "sg552", "m4a1", "aug", "scout", "awp", "g3sg1",
	"sg550", "m249", "vest", "vesthelm", "flash", "hegren", "sgren", "defuser", "nvgs", "shield",
	"primammo", "secammo", "km45", "9x19mm", "nighthawk", "228compact", "fiveseven", "12gauge",
	"autoshotgun", "mp", "c90", "cv47", "defender", "clarion", "krieg552", "bullpup", "magnum",
	"d3au1", "krieg550", "buy", "buyequip", "cl_autobuy", "cl_rebuy", "cl_setautobuy",
	"cl_setrebuy", "client_buy_open", "shop"
}

#if defined blockcmds_on
new g_BlockedCommands[][] = {
	"radio1", "radio2", "radio3"
}
#endif

// Colors: 0:Simon / 1:Freeday / 2:CT Duel / 3:TT Duel
new const g_Colors[][3] = { {0, 255, 0}, {255, 140, 0}, {0, 0, 255}, {255, 0, 0} }

new Trie:g_CellManagers, g_JailDay, g_PlayerJoin, g_PlayerSpect[33], g_PlayerSimon[33],
g_PlayerWanted, g_PlayerSuperKnife, g_PlayerRevolt, g_PlayerFreeday, g_FreedayAuto,
g_PlayerLast, g_BoxStarted, g_Simon, g_SimonAllowed, g_SimonTalking, g_SimonVoice,
g_RoundStarted, g_RoundEnd, g_Duel, g_DuelA, g_DuelB, g_Buttons[10], g_GameMode = 1,
g_nogamerounds, g_BackToCT = 0, g_Fonarik = 0, g_FreedayAutoAll, can_roll[33],
g_HnsStarted, g_PlayerVoice[33], g_ShopPurchases[33], g_MagicStarted

#if defined roundcontrol_on
#define RC_SOUND			(1<<0)
#define RC_MESSAGE			(1<<1)
#define RC_SCORE			(1<<2)
#define RC_ALL				(RC_SOUND|RC_MESSAGE|RC_SCORE)
#define RC_CONTINUE			1
#define RC_SUPERCEDE			2
enum RoundControlEvent { RC_None = 0, RC_Target_Bombed, RC_VIP_Escaped, RC_VIP_Assassinated, RC_Terrorist_Escaped, RC_CTs_PreventEscape,
	RC_Escape_Terrorist_Neutralized, RC_Bomb_Defused, RC_CTs_Win, RC_Terrorist_Win, RC_Round_Draw, RC_All_Hostages_Rescued,
	RC_Target_Saved, RC_Hostages_Not_Rescued, RC_Terrorist_Not_Escaped, RC_VIP_Not_Escaped, RC_Game_Commencing
}
enum RoundControlWin { WINSTATUS_CT = 1, WINSTATUS_TERRORIST, WINSTATUS_DRAW }
forward RC_CheckWinConditions()
native RC_Commencing()
native RC_RoundEndForce(RoundControlWin:iWinStatus = WINSTATUS_CT,Float:fDelay = 5.0,iFlags = RC_ALL,const szSentence[] = "#Round_Draw",RoundControlEvent:iEventID = RC_None,iScore = 1,bool:bReset = false)
#endif

public plugin_init()  {
	unregister_forward(FM_Spawn, gp_PrecacheSpawn)
	unregister_forward(FM_KeyValue, gp_PrecacheKeyValue)
	register_plugin("JailBreak byBarsik", VERSION, "BaRSiK")
	register_dictionary("jb_barsik32.txt")
	g_MsgStatusText = get_user_msgid("StatusText")
	g_MsgStatusIcon = get_user_msgid("StatusIcon")
	g_MsgMOTD = get_user_msgid("MOTD")
	g_MsgClCorpse = get_user_msgid("ClCorpse")
	g_MsgText = get_user_msgid("TextMsg")
	g_iMessagesBuyClose = get_user_msgid("BuyClose")
	g_iMessagesStatusIcon = get_user_msgid("StatusIcon")
	register_message(g_MsgStatusText, "msg_statustext")
	register_message(g_MsgStatusIcon, "msg_statusicon")
	register_message(g_MsgMOTD, "msg_motd")
	register_message(g_MsgClCorpse, "msg_clcorpse")
	register_message(g_MsgText, "msg_txtmsg")
	register_message(get_user_msgid("SendAudio"), "msg_audio")
	register_message(get_user_msgid("Money"), "on_money_change")
	#if defined nowpnsprites_on
	register_message(get_user_msgid("WeapPickup"), "on_weapon_pickup")
	register_message(get_user_msgid("AmmoPickup"), "on_weapon_pickup")
	register_message(get_user_msgid("ItemPickup"), "on_weapon_pickup")
	#endif
	register_event("CurWeapon", "evCurWeapon", "be", "1=1", "2!29")
	register_event("CurWeapon", "current_weapon", "be", "1=1", "2=29")
	register_event("StatusValue", "player_status", "be", "1=2", "2!0")
	register_event("StatusValue", "player_status", "be", "1=1", "2=0")
	register_impulse(100, "impulse_100")
	RegisterHam(Ham_Touch, "weapon_hegrenade", "player_touchweapon")
	RegisterHam(Ham_Touch, "weaponbox", "player_touchweapon")
	RegisterHam(Ham_Touch, "armoury_entity", "player_touchweapon")
	RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
	RegisterHam(Ham_TakeDamage, "player", "player_damage")
	RegisterHam(Ham_TraceAttack, "player", "player_attack")
	RegisterHam(Ham_TraceAttack, "func_button", "button_attack")
	RegisterHam(Ham_Killed, "player", "player_killed", 1)
	RegisterHam(Ham_Killed, "player", "player_killed_pre")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_Knife_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_Knife_SecondaryAttack_Post", 1)
	register_forward(FM_SetClientKeyValue, "FM_SetClientKeyValue_pre")
	register_forward(FM_SetClientKeyValue, "set_client_kv")
	register_forward(FM_EmitSound, "sound_emit")
	register_forward(FM_Voice_SetClientListening, "voice_listening")
	register_forward(FM_CmdStart, "player_cmdstart", 1)
	register_forward(FM_Touch, "fw_Touch")
	register_event("DeathMsg", "DeathMsg", "a")
	
	#if defined grab_on
	register_forward(FM_PlayerPreThink, "fm_player_prethink")
	p_players_only = register_cvar("gp_players_only", "0")
	p_min_dist = register_cvar ("gp_min_dist", "90")
	p_throw_force = register_cvar("gp_throw_force", "500")
	p_grab_force = register_cvar("gp_grab_force", "8")
	p_speed = register_cvar("gp_speed", "5")
	p_glow_r = register_cvar("gp_glow_r", "50")
	p_glow_g = register_cvar("gp_glow_g", "50")
	p_glow_b = register_cvar("gp_glow_b", "50")
	p_glow_a = register_cvar("gp_glow_a", "111")
	p_glow = register_cvar("gp_glow", "1")
	register_clcmd("amx_grab", "force_grab", GRAB_LEVEL, "Grab client & teleport to you.")
	register_clcmd("+grab", "grab", GRAB_LEVEL, "bind a key to +grab")
	register_clcmd("-grab", "ungrab")
	register_clcmd("+push", "push", GRAB_LEVEL, "bind a key to +push")
	register_clcmd("-push", "push")
	register_clcmd("+pull", "pull", GRAB_LEVEL, "bind a key to +pull")
	register_clcmd("-pull", "pull")
	#endif
	
	#if defined donate_on
	register_clcmd("donate", "donate_hook")
	#endif
	
	register_logevent("round_end", 2, "1=Round_End")
	register_logevent("round_first", 2, "0=World triggered", "1&Restart_Round_")
	register_logevent("round_first", 2, "0=World triggered", "1=Game_Commencing")
	register_logevent("round_start", 2, "0=World triggered", "1=Round_Start")
	register_clcmd("say /roll", "cmd_roll")
	register_clcmd("drop","drop",0,"")
	register_clcmd("+simonvoice", "cmd_voiceon")
	register_clcmd("-simonvoice", "cmd_voiceoff")

	#if defined football_on
	RegisterHam(Ham_ObjectCaps, "player", "FwdHamObjectCaps", 1)
	register_think(g_szBallName, "FwdThinkBall")
	register_touch(g_szBallName, "player", "FwdTouchPlayer")
	for(new i; i < sizeof szEntity; i++)
		register_touch(g_szBallName, szEntity[i], "FwdTouchWorld")
	#endif
	
	#if defined voice_on
	register_clcmd("say /voice", "cmd_simon_micr")
	#endif
	
	#if defined qasystem_on
	register_clcmd("say","on_say")
	register_clcmd("say_team","on_say")
	#endif
	
	register_clcmd("say /fd", "cmd_freeday")
	register_clcmd("say /games", "cmd_simongamesmenu")
	register_clcmd("say /menu", "cmd_simonmenu")
	register_clcmd("simonmenu", "cmd_simonmenu")

	#if defined vipmenu_on
	register_clcmd("say /vipmenu", "VIPMenu")
	register_clcmd("vipmenu", "VIPMenu")
	register_clcmd("say vipmenu", "VIPMenu")
	register_clcmd("say_team /vipmenu", "VIPMenu")
	register_clcmd("say_team vipmenu", "VIPMenu")
	#endif
	
	#if defined hook_on
	cvar_hookupd = register_cvar("jb_hook_update", "0")
	register_clcmd("+hook","admin_hook",HOOK_LEVEL)
	register_clcmd("-hook","admin_hook_off",HOOK_LEVEL)
	#endif

	#if defined supermenu_on
	register_clcmd("supermenu","supermenu",SUPERVIP_LEVEL)
	#endif
	
	#if defined jailmenu_on
	register_clcmd("csp_menu", "jailmenu")
	#endif
	
	#if defined teammanager_on
	register_clcmd("chooseteam", "gamemenu")
	register_clcmd("jointeam", "gamemenu")
	register_clcmd("joinclass", "gamemenu")
	register_message(get_user_msgid("ShowMenu"), "message_ShowMenu")
	register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu")
	#endif
	
	register_clcmd("say /lr", "cmd_lastrequest")
	register_clcmd("say /duel", "cmd_lastrequest")
	register_clcmd("say /simon", "cmd_simon")
	
	gp_GlowModels = register_cvar("jb_glowmodels", "0")
	gp_SimonSteps = register_cvar("jb_simonsteps", "0")
	gp_SuperKnifeMul = register_cvar("jb_superknifemultiplier", "3.0")
	gp_BoxMax = register_cvar("jb_boxmax", "6")
	gp_RetryTime = register_cvar("jb_retrytime", "10.0")
	gp_AutoLastresquest = register_cvar("jb_autolastrequest", "1")
	gp_Motd = register_cvar("jb_motd", "0")
	gp_TalkMode = register_cvar("jb_talkmode", "2")	// 0-alltalk / 1-tt talk / 2-tt no talk
	gp_VoiceBlock = register_cvar("jb_blockvoice", "0")	// 0-dont block / 1-block voicerecord / 2-block voicerecord except simon
	gp_ButtonShoot = register_cvar("jb_buttonshoot", "1")	// 0-standard / 1-func_button shoots!
	gp_NoGame = register_cvar("jb_nogamerounds", "6")
	gp_GameHP = register_cvar("jb_hpmultiplier", "180")
	gp_Effects= register_cvar("jb_game_effects", "2")
	cvar_minpl = register_cvar("jb_min_players_to_respawn", "2")
	cvar_autogamefd = register_cvar("jb_autofd_after_game", "1")
	cvar_fdlen = register_cvar("jbb_fd_time", "120")
	g_MaxClients = get_global_int(GL_maxClients)
	for(new i = 0; i < sizeof(g_HudSync); i++)
		g_HudSync[i][_hudsync] = CreateHudSyncObj()
	g_SyncHud = CreateHudSyncObj()
	register_menu("MenuT", keysmenu, "ShopT")
	register_menu("MenuCT", keysmenu, "ShopCT")
	T_item_1 = register_cvar("jbb_vantuscost", "30")
	T_item_2 = register_cvar("jbb_katanacost", "130")
	T_item_3 = register_cvar("jbb_electrocost", "70")
	T_item_4 = register_cvar("jbb_speedcost", "100")
	T_item_5 = register_cvar("jbb_grenadecost", "40")
	T_item_6 = register_cvar("jbb_inviscost", "140")
	T_item_7 = register_cvar("jbb_gravitycost", "120")
	T_item_8 = register_cvar("jbb_weaponcost", "100")
	T_item_9 = register_cvar("jbb_freedaycost", "170")
	CT_item_1 = register_cvar("jbb_electrocostCT", "40")
	CT_item_3 = register_cvar("jbb_extracost", "120")
	register_event("CurWeapon", "WeaponChange", "be", "1=1")
	register_forward(FM_EmitSound, "fw_EmitSound")
	for(new iCommands = 0; iCommands < sizeof g_ShopCommands; iCommands++)
		register_clcmd(g_ShopCommands[iCommands], "clcmd_shop")
	
	#if defined blockcmds_on
	for(new iCommands = 0; iCommands < sizeof g_BlockedCommands; iCommands++)
		register_clcmd(g_BlockedCommands[iCommands], "clcmd_block")
	#endif
	
	setup_buttons()
	mxplr = get_maxplayers()
	return PLUGIN_CONTINUE
}

public plugin_precache() {
	static i, fmodel[128]
	formatex(fmodel, charsmax(fmodel), "models/player/%s/%s.mdl", PLAYER_MODEL, PLAYER_MODEL)
	precache_model(fmodel)
	precache_generic(MUSIC_ZOMBIE)
	precache_generic(MUSIC_HNS)
	precache_generic(MUSIC_FD)
	precache_generic(PREMUSIC_BOX)
	precache_generic(PREMUSIC_MAGIC)
	BeaconSprite = precache_model(SPRITE_BEACON)
	ExplodeSprite = precache_model("sprites/ex.spr")
	
	#if defined hook_on
	precache_sound(SOUND_HOOK)
	Sbeam = precache_model(SPRITE_HOOK)
	#endif
	
	#if defined football_on
	precache_model(BALL_MODEL)
	precache_sound(SOUND_BALL_BOUNCE)
	g_iIconBall = precache_model(SPRITE_FOOTBALL_ICON)
	#endif
	
	for(i = 0; i < sizeof(_FistModels); i++)
		precache_model(_FistModels[i])
	
	#if defined boxwpnmodels_on
	for(i = 0; i < sizeof(_BoxModels); i++)
		precache_model(_BoxModels[i])
	#endif
	
	for(i = 0; i < sizeof(_SuperGun); i++)
		precache_model(_SuperGun[i])
	
	for(i = 0; i < sizeof(_CTGun); i++)
		precache_model(_CTGun[i])
	
	for(i = 0; i < sizeof(_MagicGun); i++)
		precache_model(_MagicGun[i])
	
	for(i = 0; i < sizeof(_FistSounds); i++)
		precache_sound(_FistSounds[i])
	
	#if defined rs_on
	for(i = 0; i < sizeof roundsound; i++)
		precache_generic(roundsound[i])
	#endif
	
	precache_sound(SOUND_KNIFEKILL)
	precache_sound(SOUND_ERROR)
	precache_sound(SOUND_ALIEN)
	precache_sound(SOUND_DUEL)
	precache_sound(SOUND_BELL)
	precache_sound(SOUND_ZOMBIE_BEGIN)
	precache_sound("items/gunpickup2.wav")
	precache_sound(SOUND_CBAR_WALL)
	precache_sound(SOUND_CBAR_MISS)
	precache_sound(SOUND_MAGIC_SKILL)
	g_CellManagers = TrieCreate()
	gp_PrecacheSpawn = register_forward(FM_Spawn, "precache_spawn", 1)
	gp_PrecacheKeyValue = register_forward(FM_KeyValue, "precache_keyvalue", 1)
	precache_model(KATANA_P_MODEL)
	precache_model(KATANA_V_MODEL)
	precache_model(ELECTRO_P_MODEL)
	precache_model(ELECTRO_V_MODEL)
	precache_model(OTVERTKA_P_MODEL)
	precache_model(OTVERTKA_V_MODEL)
	precache_sound("weapons/katana_deploy.wav")
	precache_sound("weapons/katana_hit.wav")
	precache_sound("weapons/katana_hitwall.wav")
	precache_sound("weapons/katana_slash.wav")
	precache_sound("weapons/katana_stab.wav")
	precache_sound("extreme-shop/ESlash.wav")
	precache_sound("extreme-shop/EConvoca.wav")
	precache_sound("extreme-shop/EHitWall.wav")
	precache_sound("extreme-shop/EHit2.wav")
	precache_sound("extreme-shop/EStab.wav")
}

public plugin_natives() {
	register_library("ujbm")
	register_native ("get_simon", "_get_simon",0)
	register_native ("get_gamemode", "_get_gamemode",0)
	register_native ("get_fd", "_get_fd",0)
	register_native ("get_wanted", "_get_wanted",0)
	register_native ("get_last", "_get_last",0)
}

#if defined nowpnsprites_on
public on_weapon_pickup(msg_id, msg_dest, msg_entity)
	return PLUGIN_HANDLED
#endif

public evCurWeapon(id) {
	if(!is_user_alive(id))
		return
	
	new CsTeams:team = cs_get_user_team(id)
	new weapon = get_user_weapon(id)
	if(weapon != CSW_KNIFE && team == CS_TEAM_T && (g_GameMode == 3 || g_GameMode == 4)) {
		fm_strip_user_weapons(id)
		fm_give_item(id, "weapon_knife")
		if(g_GameMode == 3) fm_set_user_maxspeed(id, 225.0)
	} else if(team == CS_TEAM_CT && weapon != CSW_KNIFE && (g_GameMode == 5 || g_GameMode == 4 || g_GameMode == 8 || g_GameMode == 9)) {
		fm_strip_user_weapons(id)
		fm_give_item(id, "weapon_knife")
	}
}

public _get_simon(iPlugin, iParams)
	return g_Simon

public _get_last(iPlugin, iParams)
	return g_PlayerLast

public _get_gamemode(iPlugin, iParams)
	return g_GameMode

public bool:_get_fd(iPlugin, iParams) {
	new id = get_param(1)
	if (get_bit(g_PlayerFreeday, id)) return true
	return false
}


public bool:_get_wanted(iPlugin, iParams) {
	new id = get_param(1)
	if (get_bit(g_PlayerWanted, id)) return true
	return false
}

public precache_spawn(ent) {
	if(is_valid_ent(ent)) {
		static szClass[33]
		entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass))
		for(new i = 0; i < sizeof(_RemoveEntities); i++)
			if(equal(szClass, _RemoveEntities[i]))
			remove_entity(ent)
	}
}

public precache_keyvalue(ent, kvd_handle) {
	static info[32]
	if(!is_valid_ent(ent))
		return FMRES_IGNORED

	get_kvd(kvd_handle, KV_ClassName, info, charsmax(info))
	if(!equal(info, "multi_manager"))
		return FMRES_IGNORED

	get_kvd(kvd_handle, KV_KeyName, info, charsmax(info))
	TrieSetCell(g_CellManagers, info, ent)
	return FMRES_IGNORED
}

public client_putinserver(id) {
	clear_bit(g_PlayerJoin, id)
	clear_bit(g_PlayerSuperKnife, id)
	clear_bit(g_PlayerWanted, id)
	clear_bit(g_SimonTalking, id)
	clear_bit(g_SimonVoice, id)
	clear_bit(g_FreedayAuto, id)
	g_PlayerSpect[id] = 0
	g_PlayerSimon[id] = 0
	g_mp3[id] = 1
	g_mp3menu[id] = 1
	#if defined rs_on
	g_ermp3[id] = 1
	#endif
	can_roll[id] = true
	g_money[id] = 0
	first_join(id)
	#if defined hook_on
	remove_hook(id)
	#endif
	#if defined donate_on
	g_delay[id] = 0.0
	#endif
}

public client_disconnect(id) {
	if(g_Simon == id) {
		g_Simon = 0
		g_systime = get_systime()
		remove_task(TASK_NOSIMON)
		set_task(30.0, "task_fd", TASK_NOSIMON)
	}
	else if(g_PlayerLast == id || (g_Duel && (id == g_DuelA || id == g_DuelB))) {
		g_Duel = 0
		g_DuelA = 0
		g_DuelB = 0
		g_PlayerLast = 0
	}
	#if defined hook_on
	remove_hook(id)
	#endif
	#if defined grab_on
	kill_grab(id)
	#endif
	remove_task(TASK_ROLLCD + id)
	remove_task(TASK_FREEENDPL + id)
}

#if defined grab_on
public fm_player_prethink(id) {
	if(!is_user_connected(id))
		return FMRES_IGNORED
	
	new target
	if (client_data[id][0] == -1) {
		new Float:orig[3], Float:ret[3], name[32]
		get_view_pos(id, orig)
		ret = vel_by_aim(id, 9999)
		ret[0] += orig[0]
		ret[1] += orig[1]
		ret[2] += orig[2]
		target = traceline(orig, ret, id, ret)
		if(0 < target <= mxplr && (cs_get_user_team(id) == CS_TEAM_CT || cs_get_user_team(id) == CS_TEAM_T)) {
			if(is_grabbed(target, id)) return FMRES_IGNORED
			set_grabbed(id, target)
			get_user_name(target, name, 31)
			ColorChat(id, GREEN, "[%s]^x01 %L^x04 %s", PREFIX, LANG_SERVER, "JBB_GRAB_YOU", name)
			get_user_name(id, name, 31)
			ColorChat(target, GREEN, "[%s]^x01 %L^x04 %s", PREFIX, LANG_SERVER, "JBB_GRABBED_YOU", name)
		} else if(!get_pcvar_num(p_players_only) && cs_get_user_team(id) == CS_TEAM_CT && is_user_alive(id)) {
			new movetype
			if(target && pev_valid(target)) {
				movetype = pev(target, pev_movetype)
				if(movetype != MOVETYPE_WALK && movetype != MOVETYPE_STEP && movetype != MOVETYPE_TOSS)
					return FMRES_IGNORED
			} else {
				target = 0
				new ent = engfunc(EngFunc_FindEntityInSphere, -1, ret, 12.0)
				while(!target && ent > 0) {
					movetype = pev(ent, pev_movetype)
					if((movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS) && ent != id)
						target = ent
					ent = engfunc(EngFunc_FindEntityInSphere, ent, ret, 12.0)
				}
			}
			if(target) {
				if(is_grabbed(target, id)) return FMRES_IGNORED
				set_grabbed(id, target)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_GRAB_WPN")
			}
		}
	}
	target = client_data[id][0]
	if(target > 0) {
		if(!pev_valid(target) || (pev(target, pev_health) < 1 && pev(target, pev_max_health))) {
			unset_grabbed(id)
			return FMRES_IGNORED
		}
		new cdf = client_data[id][3]
		if (cdf & (1<<1))
			do_pull(id)
		else if (cdf & (1<<0))
			do_push(id)
		
		if(target > mxplr) grab_think(id)
	}
	target = client_data[id][1]
	if(target > 0) grab_think(target)
	return FMRES_IGNORED
}

public grab_think(id) {
	new target = client_data[id][0]
	if(pev(target, pev_movetype) == MOVETYPE_FLY && !(pev(target, pev_button) & IN_JUMP)) client_cmd(target, "+jump; wait; -jump")
	new Float:tmpvec[3], Float:tmpvec2[3], Float:torig[3], Float:tvel[3]
	get_view_pos(id, tmpvec)
	tmpvec2 = vel_by_aim(id, client_data[id][2])
	torig = get_target_origin_f(target)
	new force = get_pcvar_num(p_grab_force)
	tvel[0] = ((tmpvec[0] + tmpvec2[0]) - torig[0]) * force
	tvel[1] = ((tmpvec[1] + tmpvec2[1]) - torig[1]) * force
	tvel[2] = ((tmpvec[2] + tmpvec2[2]) - torig[2]) * force
	set_pev(target, pev_velocity, tvel)
}

stock Float:get_target_origin_f(id) {
	new Float:orig[3]
	pev(id, pev_origin, orig)
	if(id > mxplr) {
		new Float:mins[3], Float:maxs[3]
		pev(id, pev_mins, mins)
		pev(id, pev_maxs, maxs)
		if(!mins[2]) orig[2] += maxs[2] / 2
	}
	return orig
}

public grab(id) {
	if(!(get_user_flags(id) & GRAB_LEVEL && is_user_alive(id) && g_GameMode <= 1)) return PLUGIN_HANDLED
	if (!client_data[id][0]) client_data[id][0] = -1
	return PLUGIN_HANDLED
}

public ungrab(id) {
	unset_grabbed(id)
	return PLUGIN_HANDLED
}

public unset_grabbed(id) {
	new target = client_data[id][0]
	if(target > 0 && pev_valid(target)) {
		set_pev(target, pev_renderfx, kRenderFxNone)
		set_pev(target, pev_rendercolor, {255.0, 255.0, 255.0})
		set_pev(target, pev_rendermode, kRenderNormal)
		set_pev(target, pev_renderamt, 16.0)
		if(0 < target <= mxplr)
			client_data[target][1] = 0
	}
	client_data[id][0] = 0
}

public set_grabbed(id, target) {
	if(get_pcvar_num(p_glow)) {
		new Float:color[3]
		color[0] = get_pcvar_float(p_glow_r)
		color[1] = get_pcvar_float(p_glow_g)
		color[2] = get_pcvar_float(p_glow_b)
		set_pev(target, pev_renderfx, kRenderFxGlowShell)
		set_pev(target, pev_rendercolor, color)
		set_pev(target, pev_rendermode, kRenderTransColor)
		set_pev(target, pev_renderamt, get_pcvar_float(p_glow_a))
	}
	if(0 < target <= mxplr)
		client_data[target][1] = id
	client_data[id][3] = 0
	client_data[id][0] = target
	new Float:torig[3], Float:orig[3]
	pev(target, pev_origin, torig)
	pev(id, pev_origin, orig)
	client_data[id][2] = floatround(get_distance_f(torig, orig))
	if(client_data[id][2] < get_pcvar_num(p_min_dist)) client_data[id][2] = get_pcvar_num(p_min_dist)
}

public push(id) {
	client_data[id][3] ^= (1<<0)
	return PLUGIN_HANDLED
}

public pull(id) {
	client_data[id][3] ^= (1<<1)
	return PLUGIN_HANDLED
}

public do_push(id)
	if(client_data[id][2] < 9999)
		client_data[id][2] += get_pcvar_num(p_speed)

public do_pull(id) {
	new mindist = get_pcvar_num(p_min_dist)
	new len = client_data[id][2]
	if(len > mindist) {
		len -= get_pcvar_num(p_speed)
		if(len < mindist) len = mindist
		client_data[id][2] = len
	}
}

public force_grab(id) {
	if(~get_user_flags(id) & GRAB_LEVEL) return PLUGIN_HANDLED
	new arg[33]
	read_argv(1, arg, 32)
	new targetid = cmd_target(id, arg, 1)
	if(is_grabbed(targetid, id)) return PLUGIN_HANDLED
	if(!is_user_alive(targetid)) return PLUGIN_HANDLED
	new Float:tmpvec[3], Float:orig[3], Float:torig[3], Float:trace_ret[3]
	new bool:safe = false, i
	get_view_pos(id, orig)
	tmpvec = vel_by_aim(id, get_pcvar_num(p_min_dist))
	for(new j = 1; j < 11 && !safe; j++) {
		torig[0] = orig[0] + tmpvec[i] * j
		torig[1] = orig[1] + tmpvec[i] * j
		torig[2] = orig[2] + tmpvec[i] * j
		traceline(tmpvec, torig, id, trace_ret)
		if(get_distance_f(trace_ret, torig)) break
		engfunc(EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0)
		if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen))
			safe = true
	}
	pev(id, pev_origin, orig)
	new try[3]
	orig[2] += 2
	while(try[2] < 3 && !safe) {
		for(i = 0; i < 3; i++) switch(try[i]) {
			case 0 : torig[i] = orig[i] + (i == 2 ? 80 : 40)
			case 1 : torig[i] = orig[i]
			case 2 : torig[i] = orig[i] - (i == 2 ? 80 : 40)
		}
		traceline(tmpvec, torig, id, trace_ret)
		engfunc(EngFunc_TraceHull, torig, torig, 0, HULL_HUMAN, 0, 0)
		if (!get_tr2(0, TR_StartSolid) && !get_tr2(0, TR_AllSolid) && get_tr2(0, TR_InOpen) && !get_distance_f(trace_ret, torig)) safe = true
		try[0]++
		if(try[0] == 3) {
			try[0] = 0
			try[1]++
			if(try[1] == 3) {
				try[1] = 0
				try[2]++
			}
		}
	}
	if(safe) {
		set_pev(targetid, pev_origin, torig)
		set_grabbed(id, targetid)
	}
	else ColorChat(id, GREEN, "[%s]^x01 %L", LANG_SERVER, "JBB_GRAB_NOT")
	return PLUGIN_HANDLED
}

public is_grabbed(target, grabber) {
	for(new i = 1; i <= mxplr; i++)
		if(client_data[i][0] == target) {
			ColorChat(grabber, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_GRAB_ALREADY")
			unset_grabbed(grabber)
			return true
		}
	return false
}

public kill_grab(id) {
	if(client_data[id][0])
		unset_grabbed(id)
	else if(client_data[id][1])
		unset_grabbed(client_data[id][1])
}

stock traceline(const Float:vStart[3], const Float:vEnd[3], const pIgnore, Float:vHitPos[3]) {
	engfunc(EngFunc_TraceLine, vStart, vEnd, 0, pIgnore, 0)
	get_tr2(0, TR_vecEndPos, vHitPos)
	return get_tr2(0, TR_pHit)
}

stock get_view_pos(const id, Float:vViewPos[3]) {
	new Float:vOfs[3]
	pev(id, pev_origin, vViewPos)
	pev(id, pev_view_ofs, vOfs)
	vViewPos[0] += vOfs[0]
	vViewPos[1] += vOfs[1]
	vViewPos[2] += vOfs[2]
}

stock Float:vel_by_aim(id, speed = 1) {
	new Float:v1[3], Float:vBlah[3]
	pev(id, pev_v_angle, v1)
	engfunc(EngFunc_AngleVectors, v1, v1, vBlah, vBlah)
	v1[0] *= speed
	v1[1] *= speed
	v1[2] *= speed
	return v1
}
#endif

public DeathMsg() {
	new victim = read_data(2)
	#if defined grab_on
	kill_grab(victim)
	#endif
	#if defined reasons_on
	new killer = read_data(1)
	if (get_user_team(killer) == 2 && get_user_team(victim) == 1) {
		g_victim_r[killer] = victim
		new lang[128]
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON_MENU")
		new menu = menu_create(lang, "deathmsg_handler")
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON1")
		menu_additem(menu, lang, "1", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON2")
		menu_additem(menu, lang, "2", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON3")
		menu_additem(menu, lang, "3", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON4")
		menu_additem(menu, lang, "4", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON5")
		menu_additem(menu, lang, "5", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON6")
		menu_additem(menu, lang, "6", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_REASON7")
		menu_additem(menu, lang, "7", 0)
		formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SM_CLOSE")
		menu_setprop(menu, MPROP_EXITNAME, lang)
		menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
		if(g_GameMode <= 1) menu_display(killer, menu, 0)
	}
	#endif
}

#if defined reasons_on
public deathmsg_handler(id, menu, item) {
	if(item < 0 || g_GameMode > 1) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	new reason[12]
	switch (key) {
		case 1: reason = "JBB_REASON1"
		case 2: reason = "JBB_REASON2"
		case 3: reason = "JBB_REASON3"
		case 4: reason = "JBB_REASON4"
		case 5: reason = "JBB_REASON5"
		case 6: reason = "JBB_REASON6"
		case 7: {
			reason = "JBB_REASON7"
			set_bit(g_FreedayAuto, g_victim_r[id])
		}
	}
	static kname[32], vname[32]
	get_user_name(id, kname, charsmax(kname))
	get_user_name(g_victim_r[id], vname, charsmax(vname))
	replace_all(reason, charsmax(reason), "\y", "")
	replace_all(reason, charsmax(reason), "\d", "")
	replace_all(reason, charsmax(reason), "\w", "")
	replace_all(reason, charsmax(reason), "\r", "")
	ColorChat(0, GREEN, "[%s]^x01 %L ^x04^"%L^"", PREFIX, LANG_SERVER, "JBB_REASON_TEXT", kname, vname, LANG_SERVER, reason)
	return PLUGIN_HANDLED
}
#endif

public client_PostThink(id) {
	if(id != g_Simon || !gc_SimonSteps || !is_user_alive(id) || !(entity_get_int(id, EV_INT_flags) & FL_ONGROUND) || entity_get_int(id, EV_ENT_groundentity))
		return PLUGIN_CONTINUE
	
	static Float:origin[3]
	static Float:last[3]
	entity_get_vector(id, EV_VEC_origin, origin)
	if(get_distance_f(origin, last) < 32.0) {
		return PLUGIN_CONTINUE
	}
	vec_copy(origin, last)
	if(entity_get_int(id, EV_INT_bInDuck)) origin[2] -= 18.0
	else origin[2] -= 36.0
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0}, 0)
	write_byte(TE_WORLDDECAL)
	write_coord(floatround(origin[0]))
	write_coord(floatround(origin[1]))
	write_coord(floatround(origin[2]))
	write_byte(105)
	message_end()
	return PLUGIN_CONTINUE
}


public msg_statustext(msgid, dest, id)
	return PLUGIN_HANDLED

public msg_statusicon(msgid, dest, id) {
	static icon[5]
	get_msg_arg_string(2, icon, charsmax(icon))
	if(icon[0] == 'b' && icon[2] == 'y' && icon[3] == 'z') {
		set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public msg_motd(msgid, dest, id) {
	if(get_pcvar_num(gp_Motd))
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}

public msg_txtmsg(msgId, msgDest, msgEntity) {
	static msg[32]
	get_msg_arg_string(2, msg, charsmax(msg))
	if(equal(msg, "#Terrorists_Win")) {
		client_print(0, print_center, "%L", LANG_SERVER, "WIN_PRISONERS")
		return PLUGIN_HANDLED
	} else if(equal(msg, "#CTs_Win")) {
		client_print(0, print_center, "%L", LANG_SERVER, "WIN_GUARDS")
		return PLUGIN_HANDLED
	} else if(equal(msg, "#Game_Commencing") || equal(msg, "#Game_will_restart_in") || equal(msg, "#Game_teammate_attack") || equal(msg, "#Killed_Teammate") || equal(msg, "#Fire_in_the_hole"))
		return PLUGIN_HANDLED
	
	if(get_msg_args() != 5 || get_msg_argtype(3) != ARG_STRING || get_msg_argtype(5) != ARG_STRING)
		return PLUGIN_CONTINUE
	
	new arg3[16]
	get_msg_arg_string(3, arg3, 15)
	if(!equal(arg3, "#Game_radio"))
		return PLUGIN_CONTINUE
	
	new arg5[20]
	get_msg_arg_string(5, arg5, 19)
	if(equal(arg5, "#Fire_in_the_hole"))
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}

public msg_audio() {
	if(get_msg_args() != 3 || get_msg_argtype(2) != ARG_STRING)
		return PLUGIN_CONTINUE
	
	new arg2[20]
	get_msg_arg_string(2, arg2, 19)
	if(equal(arg2[1], "!MRAD_FIREINHOLE"))
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}

public msg_clcorpse(msgid, dest, id)
	return PLUGIN_HANDLED

public current_weapon(id) {
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
	
	if(get_user_weapon(id) != CSW_KNIFE)
		return PLUGIN_CONTINUE
	
	if(g_GameMode == 4 && g_MagicStarted) {
		set_pev(id, pev_viewmodel2, _MagicGun[1])
		set_pev(id, pev_weaponmodel2, _MagicGun[0])
		return PLUGIN_CONTINUE
	}
	
	if(g_DuelA == id || g_DuelB == id) {
		set_pev(id, pev_viewmodel2, _BoxModels[1])
		set_pev(id, pev_weaponmodel2, _BoxModels[0])
		return PLUGIN_CONTINUE
	}
	
	if(get_bit(g_PlayerSuperKnife, id)) {
		set_pev(id, pev_viewmodel2, _SuperGun[1])
		set_pev(id, pev_weaponmodel2, _SuperGun[0])
	} else if (cs_get_user_team(id) == CS_TEAM_T) {
		#if defined boxwpnmodels_on
		if(g_BoxStarted) {
			set_pev(id, pev_viewmodel2, _BoxModels[1])
			set_pev(id, pev_weaponmodel2, _BoxModels[0])
		} else {
			set_pev(id, pev_viewmodel2, _FistModels[1])
			set_pev(id, pev_weaponmodel2, _FistModels[0])
		}
		#else
		set_pev(id, pev_viewmodel2, _FistModels[1])
		set_pev(id, pev_weaponmodel2, _FistModels[0])
		#endif
	} else if (cs_get_user_team(id) == CS_TEAM_CT) {
		set_pev(id, pev_viewmodel2, _CTGun[1])
		set_pev(id, pev_weaponmodel2, _CTGun[0])
	}
	return PLUGIN_CONTINUE
}

public player_status(id) {
	static type, player, CsTeams:team, name[32], health
	type = read_data(1)
	player = read_data(2)
	switch(type) {
		case(1): ClearSyncHud(id, g_HudSync[1][_hudsync])
		case(2): {
			if(!is_user_connected(player))
				return PLUGIN_HANDLED
			
			team = cs_get_user_team(player)
			if((team != CS_TEAM_T) && (team != CS_TEAM_CT))
				return PLUGIN_HANDLED
			
			health = get_user_health(player)
			get_user_name(player, name, charsmax(name))
			if(player == g_Simon) player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER, "JBB_SIMON_STATUS", name)
			else player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER, (team == CS_TEAM_T) ? "UJBM_PRISONER_STATUS" : "UJBM_GUARD_STATUS", name, health)
		}
	}
	return PLUGIN_HANDLED
}

public impulse_100(id) {
	if(!get_bit(g_Fonarik,id))
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}

public player_spawn(id) {
	static CsTeams:team
	if(!is_user_connected(id))
		return HAM_IGNORED

	set_pdata_float(id, m_fNextHudTextArgsGameTime, get_gametime() + 999999.0)
	player_strip_weapons(id)
	if(g_RoundEnd) {
		g_RoundEnd = 0
		g_JailDay++
	}
	if(g_GameMode > 1 && g_GameMode != 100)
		user_silentkill(id)
	
	remove_task(TASK_FREEENDPL + id)
	g_Otvertka[id] = false
	g_Katana[id] = false
	g_Electro[id] = false
	g_speed[id] = false
	g_HasWeapon[id] = false
	#if defined roulette_on
	g_has_revolver[id] = false
	#endif
	#if defined voice_on
	if(g_PlayerVoice[id] > 0) g_PlayerVoice[id]--
	#endif
	#if defined donate_on
	g_delay[id] = 0.0
	#endif
	cs_set_user_nvg (id, false)
	g_magic_color[id] = 0
	g_ShopPurchases[id] = 0
	fm_give_item(id, "weapon_knife")
	remove_task(id + TASK_BEACON)
	remove_task(TASK_ROLLCD + id)
	roll_reset(id)
	fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
	clear_bit(g_PlayerWanted, id)
	clear_bit(g_PlayerSuperKnife, id)
	team = cs_get_user_team(id)
	switch(team) {
		case(CS_TEAM_T): {
			g_PlayerLast = 0
			jb_set_user_model(id, PLAYER_MODEL)
			entity_set_int(id, EV_INT_body, 2)
			if (g_GameMode == 0)
				entity_set_int(id, EV_INT_skin, 3)
			else if(get_bit(g_FreedayAuto, id)) {
				freeday_set(0, id)
				if (g_mp3[id]) client_cmd(id,"mp3 play %s", MUSIC_FD)
				clear_bit(g_FreedayAuto, id)
				get_user_name(id, nick, 63)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "UJBM_PRISONER_HASFREEDAY", nick)
			}
			else entity_set_int(id, EV_INT_skin, random_num(0, 2))
			cs_set_user_armor(id, 0, CS_ARMOR_NONE)
		}
		case(CS_TEAM_CT): {
			g_PlayerSimon[id]++
			entity_set_int(id, EV_INT_body, 3)
			cs_set_user_armor(id, 50, CS_ARMOR_VESTHELM)
		}
	}
	if (g_GameMode == 5) {
		if (cs_get_user_team(id) == CS_TEAM_CT){
			entity_set_int(id, EV_INT_body, 2)
			entity_set_int(id, EV_INT_skin, random_num(0, 2))
			set_bit(g_BackToCT, id)
			cs_set_user_team2(id, CS_TEAM_T)
		}
		new j = 0
		fm_strip_user_weapons(id)
		j = random_num(0, sizeof(_WeaponsFree) - 1)
		fm_give_item(id, "weapon_knife")
		fm_give_item(id, _WeaponsFree[j])
		cs_set_user_bpammo(id, _WeaponsFreeCSW[j], 1024)
	}
	return HAM_IGNORED
}

public task_inviz()
	fm_set_user_rendering(g_Simon, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)

public player_damage(victim, ent, attacker, Float:damage, bits) {
	#if defined grab_on
	if(bits & DMG_FALL && client_data[victim][1])
		return HAM_SUPERCEDE
	#endif
	
	if (!is_user_connected(attacker) || victim == attacker || !is_user_connected(victim))
		return HAM_IGNORED
	
	if(g_RoundEnd)
		return HAM_SUPERCEDE
	
	static CsTeams:ateam, CsTeams:vteam
	new armor, Float:newdamage
	ateam = cs_get_user_team(attacker)
	vteam = cs_get_user_team(victim)
	armor = get_user_armor(victim)
	newdamage = damage
	if(ateam == CS_TEAM_T && vteam == CS_TEAM_T && !g_BoxStarted && IsGrenade(ent))
		return HAM_SUPERCEDE
	
	if(task_exists(attacker + TASK_INVISPL)) {
		fm_set_user_rendering(attacker, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
		ColorChat(attacker, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "INVIS_END")
		remove_task(attacker + TASK_INVISPL)
	}
	if (get_user_weapon(attacker) == CSW_KNIFE && !IsGrenade(ent)) {
		if(g_Katana[attacker]) newdamage = damage*5.0
		else if(g_Electro[attacker]) newdamage = damage*3.0
		else if(g_Otvertka[attacker]) newdamage = damage*1.7
	}
	switch(g_GameMode) {
		case(2,9): {
			if(cs_get_user_team(victim) == CS_TEAM_CT)
				return HAM_SUPERCEDE
		}
		case(4): return HAM_SUPERCEDE
		case(5): {
			if(g_Simon == attacker) {
				fm_set_user_rendering(attacker, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
				remove_task(TASK_INVIS)
				set_task(3.1, "task_inviz", TASK_INVIS)
			}
		}
	}
	switch(g_Duel) {
		case(0): {
			if(attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerSuperKnife, attacker))
				newdamage = damage * gc_SuperKnifeMul
		}
		case(2): {
			if(attacker != g_PlayerLast)
				return HAM_SUPERCEDE
		}
		default: {
			if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
				return HAM_IGNORED
			
			return HAM_SUPERCEDE
		}
	}
	if(newdamage > armor) {
		cs_set_user_armor(victim, 0, CS_ARMOR_NONE)
		SetHamParamFloat(4, newdamage - armor)
		return HAM_OVERRIDE
	} else {
		cs_set_user_armor(victim, armor - floatround(newdamage, floatround_floor), CS_ARMOR_VESTHELM)
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED
}

public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits) {
	static CsTeams:vteam, CsTeams:ateam
	if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
		return HAM_IGNORED
	
	if(g_RoundEnd)
		return HAM_SUPERCEDE
	
	vteam = cs_get_user_team(victim)
	ateam = cs_get_user_team(attacker)
	if(ateam == CS_TEAM_CT && vteam == CS_TEAM_CT && g_GameMode != 4)
		return HAM_SUPERCEDE

	switch(g_Duel) {
		case(0): {
			if(ateam == CS_TEAM_CT && vteam == CS_TEAM_T) {
				if(get_bit(g_PlayerRevolt, victim)) {
					clear_bit(g_PlayerRevolt, victim)
					hud_status(0)
				}
				return HAM_IGNORED
			}
		}
		case(2): {
			if(attacker != g_PlayerLast)
				return HAM_SUPERCEDE
		}
		default: {
			if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
				return HAM_IGNORED
			
			return HAM_SUPERCEDE
		}
	}
	if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT &&g_GameMode <=1) {
		if(!g_PlayerRevolt)
			revolt_start()

		set_bit(g_PlayerRevolt, attacker)
		clear_bit(g_PlayerFreeday, attacker)
	}
	if(ateam == CS_TEAM_T && vteam == CS_TEAM_T && !g_BoxStarted)
		return HAM_SUPERCEDE
	
	if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT && (g_GameMode == 2 || g_GameMode == 9))
		return HAM_SUPERCEDE
	
	return HAM_IGNORED
}

public button_attack(button, id, Float:damage, Float:direction[3], tracehandle, damagebits) {
	if(is_valid_ent(button) && gc_ButtonShoot) {
		ExecuteHamB(Ham_Use, button, id, 0, 2, 1.0)
		entity_set_float(button, EV_FL_frame, 0.0)
	}
	return HAM_IGNORED
}

public task_last() {
	new Players[32]
	new playerCount, i, TAlive
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			remove_hook(Players[i])
			if (cs_get_user_team(Players[i]) == CS_TEAM_T)
				TAlive++
		}
	}
	if (TAlive <= get_pcvar_num(cvar_minpl)) lastdeny = 1
	if (TAlive == 1 && (g_GameMode <= 1 || g_GameMode == 99) && !g_RoundEnd) {
		set_lights("#OFF")
		client_cmd(0, "mp3 stop")
		g_GameMode = 99
		g_BoxStarted = 0
		for (i=0; i<playerCount; i++) {
			g_speed[Players[i]] = false
			fm_set_user_maxspeed(Players[i], 250.0)
			fm_set_user_gravity(Players[i], 1.0)
			if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
				g_PlayerLast = Players[i]
				if (get_pcvar_num(gp_AutoLastresquest)) cmd_lastrequest(Players[i])
				break
			}
		}

	} else if (TAlive == 1 && (g_GameMode == 2 || g_GameMode == 4 || g_GameMode == 9)) {
		set_lights("#OFF")
		for (i=0; i<playerCount; i++) {
			if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
				jb_set_money(Players[i], jb_get_money(Players[i]) + 70)
				#if defined roundcontrol_on
				RC_RoundEndForce(WINSTATUS_TERRORIST)
				#else
				user_kill(Players[i], 1)
				#endif
				new nick[64]
				get_user_name(Players[i], nick, 63)
				ColorChat(0, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "UJBM_WON_GAME", nick)
				break
			}
		}
	}
	return PLUGIN_CONTINUE
}

public client_death(killer, victim, wpnindex, hitplace, TK) {
	if((wpnindex == CSW_KNIFE) && is_user_alive(killer))
		engfunc(EngFunc_EmitSound, killer, CHAN_VOICE, SOUND_KNIFEKILL, 1.0, ATTN_NORM, 0, PITCH_NORM)
}

public player_killed(victim, attacker, shouldgib) {
	if(!is_user_connected(victim))
		return HAM_IGNORED
	
	static CsTeams:vteam, CsTeams:kteam
	if(!(0 < attacker <= g_MaxClients) || !is_user_connected(attacker)) kteam = CS_TEAM_UNASSIGNED
	else kteam = cs_get_user_team(attacker)
	vteam = cs_get_user_team(victim)
	remove_task(victim + TASK_BEACON)
	remove_task(attacker + TASK_BEACON)
	remove_task(TASK_FREEENDPL + attacker)
	remove_task(TASK_FREEENDPL + victim)
	remove_task(TASK_LASTPLAYER)
	switch (g_GameMode) {
		case 5: if (victim == g_Simon) jb_set_money(attacker, jb_get_money(attacker) + 70)
		default: {
			if(g_Simon == victim) {
				g_Simon = 0
				g_systime = get_systime()
				remove_task(TASK_NOSIMON)
				set_task(30.0, "task_fd", TASK_NOSIMON)
				ClearSyncHud(0, g_HudSync[2][_hudsync])
				hud_status(0)
				if (vteam == CS_TEAM_CT && kteam == CS_TEAM_T && is_user_connected(attacker))
					jb_set_money(attacker, jb_get_money(attacker) + 20)
			}
			else if (vteam == CS_TEAM_CT && kteam == CS_TEAM_T && is_user_connected(attacker))
				jb_set_money(attacker, jb_get_money(attacker) + 10)
			else if (vteam == CS_TEAM_T && kteam == CS_TEAM_T && is_user_connected(attacker)) {
				new money = jb_get_money(attacker)
				if(money >= 5) jb_set_money(attacker, money - 5)
				else jb_set_money(attacker, 0)
			}
			else if (vteam == CS_TEAM_T && kteam == CS_TEAM_CT && is_user_connected(attacker))
				jb_set_money(attacker, jb_get_money(attacker) + 5)
			
			if (get_bit(g_PlayerSuperKnife,victim)) clear_bit(g_PlayerSuperKnife, victim)
			switch(g_Duel)	{
				case(0): {
					switch(vteam) {
						case(CS_TEAM_CT): {
							if(kteam == CS_TEAM_T && !get_bit(g_PlayerWanted, attacker)) {
								set_bit(g_PlayerWanted, attacker)
								entity_set_int(attacker, EV_INT_skin, 4)
							}
						}
						case(CS_TEAM_T): {
							clear_bit(g_PlayerRevolt, victim)
							clear_bit(g_PlayerWanted, victim)
						}
					}
				}
				default: {
					if(g_Duel != 2 && (victim == g_DuelA || victim == g_DuelB)) {
						fm_set_user_rendering(g_DuelA, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
						fm_set_user_rendering(g_DuelB, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
						g_Duel = 0
						g_DuelA = 0
						g_DuelB = 0
						g_PlayerLast = 0
					}
				}
			}
			hud_status(0)
		}
	}
	set_task(1.0, "task_last", TASK_LASTPLAYER)
	return HAM_IGNORED
}

public set_client_kv(id, const info[], const key[]) {
	if(equal(key, "model"))
		return FMRES_SUPERCEDE
	
	return FMRES_IGNORED
}

public sound_emit(id, channel, sample[]) {
	if(is_user_alive(id))	{
		if (equal(sample, "weapons/knife_", 14))
		switch(sample[17]) {
			case('b'): emit_sound(id, CHAN_WEAPON, _FistSounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
			case('w'): {
				if (get_bit(g_PlayerSuperKnife,id))
					emit_sound(id, CHAN_WEAPON, SOUND_CBAR_WALL, 1.0, ATTN_NORM, 0, PITCH_LOW)
				else
					emit_sound(id, CHAN_WEAPON, _FistSounds[1], 1.0, ATTN_NORM, 0, PITCH_LOW)
			}
			case('1', '2'): emit_sound(id, CHAN_WEAPON, _FistSounds[2], random_float(0.5, 1.0), ATTN_NORM, 0, PITCH_NORM)
			case('s'): {
				if (get_bit(g_PlayerSuperKnife,id))
					emit_sound(id, CHAN_WEAPON, SOUND_CBAR_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
		}

		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public voice_listening(receiver, sender, bool:listen) {
	if((receiver == sender))
		return FMRES_IGNORED

	if(get_user_flags(sender) & (ADMIN_LEVEL | VIP_LEVEL)) {
		engfunc(EngFunc_SetClientListening, receiver, sender, true)
		return FMRES_SUPERCEDE
	}
	switch(gc_VoiceBlock) {
		case(2): {
			if(sender != g_Simon && !get_bit(g_SimonVoice, sender)) {
				engfunc(EngFunc_SetClientListening, receiver, sender, false)
				return FMRES_SUPERCEDE
			}
		}
		case(1): {
			if(!get_bit(g_SimonVoice, sender) && gc_VoiceBlock) {
				engfunc(EngFunc_SetClientListening, receiver, sender, false)
				return FMRES_SUPERCEDE
			}
		}
	}
	if(!is_user_alive(sender)) {
		engfunc(EngFunc_SetClientListening, receiver, sender, false)
		return FMRES_SUPERCEDE
	}
	if(sender == g_Simon) {
		engfunc(EngFunc_SetClientListening, receiver, sender, true)
		return FMRES_SUPERCEDE
	}
	if(g_PlayerVoice[sender] > 0) {
		engfunc(EngFunc_SetClientListening, receiver, sender, true)
		return FMRES_SUPERCEDE
	}
	listen = true
	if(g_SimonTalking && (sender != g_Simon)) listen = false
	else {
		static CsTeams:steam
		steam = cs_get_user_team(sender)
		switch(gc_TalkMode) {
			case(2): listen = (steam == CS_TEAM_CT)
			case(1): listen = (steam == CS_TEAM_CT || steam == CS_TEAM_T)
		}
	}
	engfunc(EngFunc_SetClientListening, receiver, sender, listen)
	return FMRES_SUPERCEDE
}

public player_cmdstart(id, uc, random) {
	if(!is_user_alive(id))
		return FMRES_IGNORED

	if(g_Duel > 3) if (_Duel[g_Duel - 4][_csw] != CSW_M249) cs_set_user_bpammo(id, _Duel[g_Duel - 4][_csw], 1)
	#if defined vipdoublejump_on
	static can_jump
	if(get_user_flags(id) & VIP_LEVEL && g_GameMode != 3) {
		new button = get_uc(uc, UC_Buttons)
		new oldbutton = pev(id, pev_oldbuttons)
		new flags = pev(id, pev_flags)
		if((button & IN_JUMP) && !(flags & FL_ONGROUND) && !(oldbutton & IN_JUMP) && can_jump & (1<<id)) {
			can_jump &=  ~(1<<id)
			new Float:velocity[3]
			pev(id, pev_velocity, velocity)
			velocity[2] = random_float(265.0,285.0)
			set_pev(id, pev_velocity, velocity)
		}
		else if(flags & FL_ONGROUND) can_jump |= (1<<id)
	}
	#endif
	return FMRES_IGNORED
}

public round_first() {
	g_JailDay = 0
	for(new i = 1; i <= g_MaxClients; i++) {
		g_PlayerSimon[i] = 0
	}
	set_cvar_num("sv_alltalk", 1)
	#if defined roundcontrol_on
	set_cvar_num("mp_roundtime", 500)
	#else
	set_cvar_num("mp_roundtime", 9)
	#endif
	set_cvar_num("mp_limitteams", 0)
	set_cvar_num("mp_autoteambalance", 0)
	set_cvar_num("mp_tkpunish", 0)
	set_cvar_num("mp_friendlyfire", 1)
	round_end()
	g_GameMode = 1
}

public round_end() {
	jb_unblockweapons()
	g_PlayerRevolt = 0
	g_PlayerFreeday = 0
	g_PlayerLast = 0
	g_BoxStarted = 0
	g_Simon = 0
	g_SimonAllowed = 0
	g_RoundStarted = 0
	g_RoundEnd = 1
	g_Duel = 0
	g_DuelA = 0
	g_DuelB = 0
	g_Fonarik = 0
	g_systime = 0
	g_answered = true
	remove_task(TASK_FREEDAY)
	remove_task(TASK_ROUNDEND)
	remove_task(TASK_GIVEITEMS)
	remove_task(TASK_NOSIMON)
	remove_task(TASK_ALLOWSIMON)
	new i
	for(i=0; i < sizeof(g_HudSync); i++)
		ClearSyncHud(0, g_HudSync[i][_hudsync])
	
	new Players[32], playerCount
	get_players(Players, playerCount, "c")
	#if defined rs_on
	new rsrand = random_num(0, charsmax(roundsound))
	#endif
	client_cmd(0, "mp3 stop")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			remove_task(TASK_FREEENDPL + Players[i])
			if (g_GameMode > 1) {
				if (get_bit(g_BackToCT, Players[i])) cs_set_user_team2(Players[i], CS_TEAM_CT)
				clear_bit(g_BackToCT, Players[i])
				jb_set_user_model(Players[i], PLAYER_MODEL)
				fm_set_user_maxspeed(Players[i], 250.0)
				menu_cancel(Players[i])
				player_strip_weapons(Players[i])
				fm_give_item(Players[i], "weapon_knife")
			}
			#if defined rs_on
			if(g_ermp3[Players[i]])
				client_cmd(Players[i], "mp3 play %s", roundsound[rsrand])
			#endif
		}
	}
	if (g_GameMode > 1) {
		set_lights("#OFF")
		remove_task(TASK_INVIS)
		g_BackToCT = 0
	}
	g_GameMode = 100
	#if defined er_fade
	remove_task(TASK_FADE)
	set_task(0.4, "fadescreen", TASK_FADE)
	set_task(1.0, "fadescreen", TASK_FADE)
	set_task(1.6, "fadescreen", TASK_FADE)
	set_task(2.2, "fadescreen", TASK_FADE)
	set_task(2.8, "fadescreen", TASK_FADE)
	set_task(3.4, "fadescreen", TASK_FADE)
	#endif
	#if defined football_on
	new iEntity
	while((iEntity = find_ent_by_class(iEntity, g_szBallName)) > 0) {
		remove_entity(iEntity)
	}
	fm_remove_entity_name(g_szBallName)
	g_FootballStarted = false
	blue_team = 0
	red_team = 0
	#endif
}

public SimonAllowed(taskid) {
	remove_task(taskid)
	g_SimonAllowed = 1
	remove_task(TASK_NOSIMON)
	if(g_GameMode != 1)
		return
	
	g_systime = get_systime()
	set_task(30.0, "task_fd", TASK_NOSIMON)
}

public task_fd(taskid) {
	remove_task(taskid)
	if(g_Simon == 0 && g_GameMode == 1) freeday_all()
}

public round_start() {
	gc_TalkMode = get_pcvar_num(gp_TalkMode)
	gc_VoiceBlock = get_pcvar_num(gp_VoiceBlock)
	gc_SimonSteps = get_pcvar_num(gp_SimonSteps)
	gc_ButtonShoot = get_pcvar_num(gp_ButtonShoot)
	gc_SuperKnifeMul = get_pcvar_float(gp_SuperKnifeMul)
	g_GameMode = 1
	g_SimonAllowed = 0
	arrayset(has_used, false, 33)
	if(g_nogamerounds > 0) g_nogamerounds--
	lastdeny = 0
	g_systime = 0
	g_GameMode = 1
	if(g_RoundEnd)
		return
	
	if((g_FreedayAutoAll && get_pcvar_num(cvar_autogamefd)) || g_JailDay <= 1)
		freeday_all()
	
	#if defined hero_on
	set_task(0.5,"makehero",0)
	#endif
	#if defined qasystem_on
	random_question()
	#endif
	remove_task(TASK_STATUS)
	set_task(HUD_DELAY - 0.1, "hud_status", TASK_STATUS, _, _, "b")
	set_task(4.0, "SimonAllowed", TASK_ALLOWSIMON)
	for(new id = 0; id < 33; id++) {
		g_human[id] = false
		g_zombie[id] = false
		if (fdcooldown[id] > 0) fdcooldown[id]--
		if (inviscd[id] > 0) inviscd[id]--
		#if defined supermenu_on
		g_usedmoney[id] = false
		g_usedgrenades[id] = false
		if (g_usedturbo[id] > 0) g_usedturbo[id] -= 1
		if (g_usedgravity[id] > 0) g_usedgravity[id] -= 1
		if (g_usedhp[id] > 0) g_usedhp[id] -= 1
		#endif
		#if defined football_on
		if(is_user_alive(id))
			Remove_IconBall(id)
		#endif
	}
	#if defined teammanager_on
	gametime = get_gametime()
	#endif
	set_lights("#OFF")
	jb_unblockweapons()
	g_used = 0
	remove_task(TASK_FADE)
}

public cmd_voiceon(id) {
	client_cmd(id, "+voicerecord")
	set_bit(g_SimonVoice, id)
	if(g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL)
		set_bit(g_SimonTalking, id)

	return PLUGIN_HANDLED
}

public cmd_voiceoff(id) {
	client_cmd(id, "-voicerecord")
	clear_bit(g_SimonVoice, id)
	if(g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL)
		clear_bit(g_SimonTalking, id)

	return PLUGIN_HANDLED
}

public cmd_simon(id) {
	static CsTeams:team, name[32]
	if(!is_user_connected(id))
		return PLUGIN_HANDLED

	team = cs_get_user_team(id)
	if(g_SimonAllowed != 0 && is_user_alive(id) && team == CS_TEAM_CT && !g_Simon && g_GameMode == 1) {
		remove_task(TASK_NOSIMON)
		g_Simon = id
		get_user_name(id, name, charsmax(name))
		entity_set_int(id, EV_INT_body, 1)
		g_PlayerSimon[id]--
		fm_set_user_health(id, get_user_health(id) + 100)
		cs_set_user_armor(id, get_user_armor(id) + 50, CS_ARMOR_VESTHELM)
		if(get_pcvar_num(gp_GlowModels))
			player_glow(id, g_Colors[0])
		cmd_simonmenu(id)
		hud_status(0)
	}
	new Players[32], playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i]))
			remove_hook(Players[i])
	}
	return PLUGIN_HANDLED
}

public cmd_box(id) {
	if((id == g_Simon || get_user_flags(id) & SUPERADMIN_LEVEL) && g_GameMode == 1) {
		new Players[32]
		new playerCount, i, TAlive
		get_players(Players, playerCount, "ac")
		for (i=0; i<playerCount; i++) {
			if (is_user_connected(Players[i])) if (cs_get_user_team(Players[i]) == CS_TEAM_T)
				TAlive++
		}
		if(TAlive<= get_pcvar_num(gp_BoxMax) && TAlive > 1 && !g_BoxStarted) {
			set_cvar_num("mp_tkpunish", 0)
			set_cvar_num("mp_friendlyfire", 1)
			g_BoxStarted = 1
			for(i = 1; i <= g_MaxClients; i++) {
				if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T) {
					fm_set_user_health(i, 100)
					current_weapon(i)
				}
			}
			player_dhudmessage(0, 1, 3.0, _, "%L", LANG_SERVER, "UJBM_GAME_BOX")
			client_cmd(0, "mp3 play %s", PREMUSIC_BOX)
		} else if(TAlive<= get_pcvar_num(gp_BoxMax) && TAlive > 1 && g_BoxStarted) {
			set_cvar_num("mp_tkpunish", 0)
			set_cvar_num("mp_friendlyfire", 0)
			g_BoxStarted = 0
			for(i = 1; i <= g_MaxClients; i++) {
				if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T) {
					fm_set_user_health(i, 100)
					current_weapon(i)
				}
			}
			player_dhudmessage(0, 1, 3.0, _, "%L", LANG_SERVER, "UJBM_GAME_BOX_OFF")
			client_cmd(0, "mp3 stop")
		}
		else player_dhudmessage(id, 1, 3.0, _, "%L", LANG_SERVER, "UJBM_GUARD_CANTBOX")
	}
	return PLUGIN_HANDLED
}

#if defined football_on
public UpdateBall(id) {
	if(is_valid_ent(g_iBall)) {
 		entity_set_vector(g_iBall, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
		entity_set_origin(g_iBall, g_vOrigin)
		entity_set_int(g_iBall, EV_INT_movetype, MOVETYPE_BOUNCE)
		engfunc(EngFunc_SetSize, g_iBall, Float:{-15.0, -15.0, -6.0}, Float:{15.0, 15.0, 12.0})
		entity_set_int(g_iBall, EV_INT_iuser1, 0)
        }
}

public football_menu(id) {
	new option[64]
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_CAPTION")
	new menu_ball = menu_create(option, "menu_foot")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_MENU1")
	menu_additem(menu_ball, option, "1")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_MENU2")
	menu_additem(menu_ball, option, "2")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_MENU3")
	menu_additem(menu_ball, option, "3")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_MENU4")
	menu_additem(menu_ball, option, "4")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_MENU5")
	menu_additem(menu_ball, option, "5")
	if(g_FootballStarted) {
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_PLUS_RED")
		menu_additem(menu_ball, option,"6")
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_PLUS_BLUE")
		menu_additem(menu_ball, option,"7")
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_ZERO")
		menu_additem(menu_ball, option, "8")
	}
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu_ball, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu_ball, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu_ball, MPROP_EXITNAME, option)
	menu_setprop(menu_ball, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu_ball, 0)
	return PLUGIN_HANDLED
}

public menu_foot(id, menu_ball, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu_ball)
		return PLUGIN_HANDLED
	}
	new data[6], iName[64], access, callback
	menu_item_getinfo(menu_ball, item, access, data, 5, iName, 63, callback)
	new key = str_to_num(data)
	switch(key) {
		case 1: {
			if(GetPlayersNum(1, 1) < 2) {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_FOOTBALL_NOPLAYERS")
				return PLUGIN_HANDLED
			}
			g_FootballStarted = true
			blue_team = 0
			red_team = 0
			football_menu(id)
		}
		case 2: {
			g_FootballStarted = false
			new iEntity
			while((iEntity = find_ent_by_class(iEntity, g_szBallName)) > 0)
				remove_entity(iEntity)
			
			fm_remove_entity_name(g_szBallName)
			set_dhudmessage(0, 255, 0, -1.0, 0.78, 0, 1.0, 7.0)
			if(blue_team > red_team)
				show_dhudmessage(0, "%L", LANG_SERVER, "JBB_FOOTBALL_WIN1")
			else if(blue_team < red_team)
				show_dhudmessage(0, "%L", LANG_SERVER, "JBB_FOOTBALL_WIN2")
			else if(blue_team == red_team)
				show_dhudmessage(0, "%L", LANG_SERVER, "JBB_FOOTBALL_WIN3")
			
			blue_team = 0
			red_team = 0
			for(new i = 0; i <= get_maxplayers(); i++) {
				if(!is_user_alive(i))
					continue
				
				Remove_IconBall(i)
			}
		}
		case 3: {
			if(is_valid_ent(g_iBall)) {
				entity_set_vector(g_iBall, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
				entity_set_origin(g_iBall, g_vOrigin)
				entity_set_int(g_iBall, EV_INT_movetype, MOVETYPE_BOUNCE)
				engfunc(EngFunc_SetSize, g_iBall, Float:{-15.0, -15.0, -6.0}, Float:{15.0, 15.0, 12.0})
				entity_set_int(g_iBall, EV_INT_iuser1, 0)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_FOOTBALL_SPAWNED")
	            	}
			football_menu(id)
		}
		case 4: {
			football_menu(id)
			if(pev_valid(g_iBall))
				return PLUGIN_CONTINUE
			
			CreateBall(id)
			return PLUGIN_HANDLED
		}
		case 5: {
			new iEntity
			while((iEntity = find_ent_by_class(iEntity, g_szBallName)) > 0)
				remove_entity(iEntity)
			
			fm_remove_entity_name(g_szBallName)
			for(new i = 0; i <= get_maxplayers(); i++) {
				if(!is_user_alive(i))
					continue
		
				Remove_IconBall(i)
			}
			football_menu(id)
		}
		case 6: { 
			red_team++
			football_menu(id)
		}
		case 7: { 
			blue_team++
			football_menu(id)
		}
		case 8: {
			red_team = 0
			blue_team = 0
			football_menu(id)
		}
	}
	return PLUGIN_HANDLED
}

GetPlayersNum(iTeam, iAlive) {
	new iPlayersNum
	for(new iPlayers = get_maxplayers(); iPlayers > 0; iPlayers--) {
		if(!is_user_connected(iPlayers))
			continue
		
		if(get_user_team(iPlayers) == iTeam && (is_user_alive(iPlayers) == iAlive || iAlive == 2))
			iPlayersNum++
	}
	return iPlayersNum
}

public FwdHamObjectCaps(id) {
	if(pev_valid(g_iBall) && is_user_alive(id)) {
        	static iOwner
		iOwner = pev(g_iBall, pev_iuser1)
		if(iOwner == id)
			KickBall(id)
	}
}

public FwdThinkBall(iEntity) {
	if(!is_valid_ent(g_iBall))
		return PLUGIN_HANDLED
	
	set_pev(iEntity, pev_nextthink, halflife_time() + 0.05)
	new Float:fVelocity[3], Float:fAngles[3]
	pev(iEntity, pev_velocity, fVelocity)    
	static Float:vOrigin[3], Float:vBallVelocity[3]
	pev(iEntity, pev_origin, vOrigin)
	pev(iEntity, pev_velocity, vBallVelocity)    
	static iOwner
	iOwner = pev(iEntity, pev_iuser1)
	static iSolid; iSolid = pev(iEntity, pev_solid)
	static Float:flGametime, Float:flLastThink
	flGametime = get_gametime()
	if(flLastThink < flGametime) 
		flLastThink = flGametime + 3.0
	
	if(iOwner > 0) {
		static Float:vOwnerOrigin[3]
		pev(iOwner, pev_origin, vOwnerOrigin)
		static const Float:vVelocity[3] = {1.0, 1.0, 0.0}
		Anim(iEntity, 0) 
		stop = false
		if(!is_user_alive(iOwner)) {
			set_pev(iEntity, pev_iuser1, 0)
			vOwnerOrigin[2] += 8.0
			set_pev(iEntity, pev_origin, vOwnerOrigin)
			set_pev(iEntity, pev_velocity, vVelocity)
			return PLUGIN_CONTINUE
		}
		if(iSolid != SOLID_NOT)
			set_pev(iEntity, pev_solid, SOLID_NOT)
		
		static Float:vAngles[3], Float:vReturn[3]
		pev(iOwner, pev_v_angle, vAngles)
		vReturn[0] = (floatcos(vAngles[1], degrees) * 55.0) + vOwnerOrigin[0]
		vReturn[1] = (floatsin(vAngles[1], degrees) * 55.0) + vOwnerOrigin[1]
		vReturn[2] = vOwnerOrigin[2]
		vReturn[2] -= (entity_get_int(iOwner, EV_INT_flags) & FL_DUCKING) ? 10 : 30
       	 	set_pev(iEntity, pev_velocity, vVelocity)
        	set_pev(iEntity, pev_origin, vReturn)
	} else {
		if(iSolid != SOLID_BBOX)
			set_pev(iEntity, pev_solid, SOLID_BBOX)
		
		vector_to_angle(fVelocity, fAngles)
		fAngles[0] = 0.0
		set_pev(iEntity, pev_angles, fAngles)
		if(!stop) {
			Anim(iEntity, 1)
			stop = true
		}
		static Float:flLastVerticalOrigin
		if(vBallVelocity[2] == 0.0) {
			static iCounts
			Anim(iEntity, 0)
			if(flLastVerticalOrigin > vOrigin[2]) {
				iCounts++
				if(iCounts > 10) {
					iCounts = 0
					UpdateBall(0)
				}
			} else {
				iCounts = 0
				if(PointContents(vOrigin) != CONTENTS_EMPTY)
					UpdateBall(0)
			}
			flLastVerticalOrigin = vOrigin[2]
		}
	}
	return PLUGIN_CONTINUE
}

KickBall(id) {
	static Float:vOrigin[3]
	pev(g_iBall, pev_origin, vOrigin)
	if(PointContents(vOrigin) != CONTENTS_EMPTY)
		return PLUGIN_HANDLED
	
	new Float:vVelocity[3]
	velocity_by_aim(id, 700, vVelocity)
	set_pev(g_iBall, pev_solid, SOLID_BBOX)
	engfunc(EngFunc_SetSize, g_iBall, Float:{-15.0, -15.0, -6.0}, Float:{15.0, 15.0, 12.0})
	set_pev(g_iBall, pev_iuser1, 0)
	set_pev(g_iBall, pev_velocity, vVelocity)
	Remove_IconBall(id)
	return PLUGIN_CONTINUE
}

public FwdTouchPlayer(Ball, id) {
	if(is_user_bot(id))
		return PLUGIN_CONTINUE
	
	static iOwner
	iOwner = pev(Ball, pev_iuser1)
	if(iOwner == 0) {
		set_pev(Ball, pev_iuser1, id)
		Show_IconBall(id)
	}
	return PLUGIN_CONTINUE
}

public FwdTouchWorld(Ball, World) {
	static Float:vVelocity[3]
	pev(Ball, pev_velocity, vVelocity)
	if(floatround(vector_length(vVelocity)) > 10) {
		vVelocity[0] *= 0.85
		vVelocity[1] *= 0.85
		vVelocity[2] *= 0.85
		set_pev(Ball, pev_velocity, vVelocity)
		emit_sound(Ball, CHAN_ITEM, SOUND_BALL_BOUNCE, 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
	return PLUGIN_CONTINUE
}

CreateBall(id, Float:vOrigin[3] = {0.0, 0.0, 0.0}) {
	if(!id)
        	return 0
	
	g_iBall = create_entity("info_target")
	if(is_valid_ent(g_iBall)) {
		set_pev(g_iBall, pev_classname, g_szBallName)
		set_pev(g_iBall, pev_solid, SOLID_BBOX)
		set_pev(g_iBall, pev_movetype, MOVETYPE_BOUNCE)
		engfunc(EngFunc_SetModel, g_iBall, BALL_MODEL)
		set_pev(g_iBall, pev_skin, random_num(0, 2))
		engfunc(EngFunc_SetSize, g_iBall, Float:{-15.0, -15.0, -6.0}, Float:{15.0, 15.0, 12.0})
		Anim(g_iBall, 0)
		set_pev(g_iBall, pev_nextthink, get_gametime() + 0.05)
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_FOOTBALL_SPAWNED")
		new iOrigin[3]
		get_user_origin(id, iOrigin, 3)
		IVecFVec(iOrigin, vOrigin)
		vOrigin[2] += 10.0
		set_pev(g_iBall, pev_origin, vOrigin)
		g_vOrigin = vOrigin
		return g_iBall
	}
	return -1
}

Anim(ent, sequence) {
	set_pev(ent, pev_sequence, sequence)
	set_pev(ent, pev_animtime, halflife_time())
	set_pev(ent, pev_framerate, 1.0)
}

Show_IconBall(id) {
	message_begin(MSG_ALL, SVC_TEMPENTITY)
	write_byte(TE_PLAYERATTACHMENT)
	write_byte(id)
	write_coord(44)
	write_short(g_iIconBall)
	write_short(3000)
	message_end()
}

Remove_IconBall(id) {
	message_begin(MSG_ALL, SVC_TEMPENTITY)
	write_byte(TE_KILLPLAYERATTACHMENTS)
	write_byte(id)
	message_end()
}
#endif

public cmd_minmodels(id) {
	if(id > g_MaxClients)
		id -= TASK_MINMODELS

	remove_task(TASK_MINMODELS + id)
	client_cmd(id,"cl_minmodels 0")
}

public cmd_freeday(id) {
	if (g_GameMode == 1) {
		static menu, menuname[32], option[64]
		if((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) {
			formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_MENU_FREEDAY")
			menu = menu_create(menuname, "freeday_choice")
			formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_FREEDAY_PLAYER")
			menu_additem(menu, option, "1", 0)
			formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_FREEDAY_ALL")
			menu_additem(menu, option, "2", 0)
			formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
			menu_setprop(menu, MPROP_NEXTNAME, option)
			formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
			menu_setprop(menu, MPROP_BACKNAME, option)
			formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
			menu_setprop(menu, MPROP_EXITNAME, option)
			menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
			menu_display(id, menu)
		}
	}
	return PLUGIN_HANDLED
}

public cmd_freeday_player(id) {
	if((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL)
		menu_players(id, CS_TEAM_T, id, 1, "freeday_select", "%L", LANG_SERVER, "UJBM_MENU_FREEDAY")
	
	return PLUGIN_CONTINUE
}

#if defined ctpunish_on
public cmd_punish(id) {
	if((id  == g_Simon) || get_user_flags(id) & ADMIN_LEVEL)
		menu_players(id, CS_TEAM_CT, id, 1, "cmd_punish_ct", "%L", LANG_SERVER, "UJBM_MENU_PUNISH")
	
	return PLUGIN_CONTINUE
}
#endif

public client_PreThink(id) {
	if (!is_user_alive(id))
		return PLUGIN_CONTINUE
	
	message_begin(MSG_ONE, g_iMessagesStatusIcon, _, id)
	if(g_GameMode <= 1 || g_GameMode == 3) write_byte(1)
	else write_byte(0)
	write_string("buyzone")
	write_byte(0)
	write_byte(160)
	write_byte(0)
	message_end()
	
	#if defined svip_bhop_on
	if (!(get_user_flags(id) & SUPERVIP_LEVEL) || g_GameMode > 1)
		return PLUGIN_CONTINUE
	
	entity_set_float(id, EV_FL_fuser2, 0.0)		
	if (entity_get_int(id, EV_INT_button) & 2) {	
		new flags = entity_get_int(id, EV_INT_flags)
		if (flags & (1<<11))
			return PLUGIN_CONTINUE
		if (entity_get_int(id, EV_INT_waterlevel) >= 2)
			return PLUGIN_CONTINUE
		if (!(flags & (1<<9)))
			return PLUGIN_CONTINUE
		
		new Float:velocity[3]
		entity_get_vector(id, EV_VEC_velocity, velocity)
		velocity[2] += 250.0
		entity_set_vector(id, EV_VEC_velocity, velocity)
		entity_set_int(id, EV_INT_gaitsequence, 6)
	}
	#endif
	return PLUGIN_CONTINUE
}

public cmd_lastrequest(id) {
	static i, num[5], menu, menuname[32], option[64]
	if(g_PlayerLast != id || g_GameMode != 99) task_last()
	if(g_PlayerLast !=id || !is_user_alive(id) || g_GameMode != 99 || g_RoundEnd || g_Duel > 0)
		return PLUGIN_CONTINUE
	
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ")
	menu = menu_create(menuname, "lastrequest_select")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ_OPT1")
	menu_additem(menu, option, "1", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ_OPT2")
	menu_additem(menu, option, "2", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ_OPT3")
	menu_additem(menu, option, "3", 0)
	for(i = 0; i < sizeof(_Duel); i++) {
		num_to_str(i + 4, num, charsmax(num))
		formatex(option, charsmax(option), "%L", LANG_SERVER, _Duel[i][_opt])
		menu_additem(menu, option, num, 0)
	}
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu)
	return PLUGIN_CONTINUE
}

public lastrequest_select(id, menu, item) {
	if(item == MENU_EXIT || g_PlayerLast != id) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static i, dst[32], data[5], access, callback, option[64]
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case('1'): {
			formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ_SEL1", dst)
			player_dhudmessage(0, 6, 3.0, {0, 255, 0}, option)
			jb_set_money(id, jb_get_money(id) + 70)
			#if defined roundcontrol_on
			RC_RoundEndForce(WINSTATUS_TERRORIST)
			#else
			user_kill(id, 1)
			#endif
		}
		case('2'): {
			formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_LASTREQ_SEL2", dst)
			player_dhudmessage(0, 6, 3.0, {0, 255, 0}, option)
			g_Duel = 2
			player_strip_weapons_all()
			i = random_num(0, sizeof(_WeaponsFree) - 1)
			fm_give_item(id, _WeaponsFree[i])
			fm_give_item(id, "weapon_knife")
			cs_set_user_bpammo(id, _WeaponsFreeCSW[i], 1024)
			// Knife for CT
			new Players[32]
			new playerCount, asd
			get_players(Players, playerCount, "ac")
			for (asd=0; asd<playerCount; asd++) {
				if (is_user_connected(Players[asd]))
					if (cs_get_user_team(Players[asd]) == CS_TEAM_CT) fm_give_item(Players[asd], "weapon_knife")
			}
			jb_blockweapons()
		}
		case('3'): menu_players(id, CS_TEAM_CT, 0, 1, "duel_knives", "%L", LANG_SERVER, "UJBM_MENU_DUEL")
		default: {
			g_Duel = str_to_num(data)
			menu_players(id, CS_TEAM_CT, 0, 1, "duel_guns", "%L", LANG_SERVER, "UJBM_MENU_DUEL")
		}
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public revolt_start() {
	client_cmd(0,"speak ambience/siren")
	set_task(8.0, "stop_sound")
	hud_status(0)
}

public stop_sound(task)
	client_cmd(0, "stopsound")

stock show_count() {
	new Players[32]
	new playerCount, i,TAlive,TAll
	new szStatus[64]
	get_players(Players, playerCount, "c")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
				TAll++
				if (is_user_alive(Players[i])) TAlive++
			}
		}
	}
	formatex(szStatus, charsmax(szStatus), "%L", LANG_SERVER, "UJBM_STATUS", TAlive,TAll)
	message_begin(MSG_BROADCAST, get_user_msgid("StatusText"), {0,0,0}, 0)
	write_byte(0)
	write_string(szStatus)
	message_end()
}

public hud_status(task) {
	if(g_RoundStarted < (get_pcvar_num(gp_RetryTime) / 2))
		g_RoundStarted++
	
	count_teams()
	new TAlive, bool:send
	new text_alives[32], role[64], info[128], warden[32], text[1024], text_question[64], text_spect[700], name[36],
		text_skin[32], text_minigames[128]
	for (new id = 1; id <= g_MaxClients; id++) {
		if (is_user_alive(id)) {
			if (cs_get_user_team(id) == CS_TEAM_T)
				TAlive++
		}
	}
	if(TAlive > 1) formatex(text_alives, charsmax(text_alives), "^n  %L", LANG_SERVER, "JBB_ALIVET", TAlive, TCount)
	#if defined qasystem_on
	if(!g_answered) formatex(text_question, charsmax(text_question), "^n^n[%L]^n  %s = ?", LANG_SERVER, "JBB_QUESTION", g_question)
	#endif
	if(g_BoxStarted && g_GameMode == 1)
		formatex(text_minigames, charsmax(text_minigames), "^n^n[%L]^n  %L", LANG_SERVER, "JBB_MINIGAMES", LANG_SERVER, "JBB_BOX_ON")
	else
		text_minigames = ""
	switch(g_GameMode) {
		case 100: {
			formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_ENDR")
			formatex(role, charsmax(role), "%L %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_ENDED")
		}
		case 99: formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_LAST")
		case 0: {
			new this_timeleft = get_pcvar_num(cvar_fdlen)+g_systime-get_systime()
			if(this_timeleft >= 0 && this_timeleft <= 1800) formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_FD", jb_timer(this_timeleft))
			else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_FD")
		}
		case 1: {
			if(g_Simon) {
				get_user_name(g_Simon, warden, charsmax(warden))
				formatex(info, charsmax(info), "%L: %s", LANG_SERVER, "JBB_STATUS_WARDEN", warden)
			} else {
				new this_timeleft = 30+g_systime-get_systime()
				if(g_SimonAllowed && this_timeleft >= 0 && this_timeleft <= 1800)
					formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_NOWARDEN", jb_timer(this_timeleft))
				else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_NOWARDEN")
			}
		}
		case 2: {
			if(g_HnsStarted) {
				new this_timeleft = 181+g_systime-get_systime()
				if(this_timeleft >= 0 && this_timeleft <= 1800)
					formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_HNS", jb_timer(this_timeleft))
				else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_HNS")
			}
			else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_HNS_HIDE")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
		case 3: {
			new this_timeleft = 241+g_systime-get_systime()
			if(this_timeleft >= 0 && this_timeleft <= 1800) formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_ZOMBIE", jb_timer(this_timeleft))
			else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_ZOMBIE")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
		case 4: {
			if(g_MagicStarted) formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_MAGIC")
			else {
				new this_timeleft = 20+g_systime-get_systime()
				if(this_timeleft >= 0 && this_timeleft <= 1800)
					formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_MAGIC_HIDE", jb_timer(this_timeleft))
				else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_MAGIC_HIDE")
			}
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
		case 5: {
			get_user_name(g_Simon, warden, charsmax(warden))
			formatex(info, charsmax(info), "%L: %s (HP: %d)", LANG_SERVER, "JBB_STATUS_ALIEN", warden, get_user_health(g_Simon))
		}
		case 6: {
			formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_ATTACK")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
		/*case 7: {
			formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_SPARTA")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}*/
		case 8: {
			formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_DEFENCE")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
		case 9: {
			if(g_HnsStarted) {
				new this_timeleft = 181+g_systime-get_systime()
				if(this_timeleft >= 0 && this_timeleft <= 1800) formatex(info, charsmax(info), "%L [%s]", LANG_SERVER, "JBB_STATUS_CHASE", jb_timer(this_timeleft))
				else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_CHASE")
			}
			else formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_CHASE_HIDE")
			formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
		}
	}
	switch(g_Duel) {
		case 2: formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_LR2")
		default: {
			if(g_Duel > 0 && is_user_alive(g_DuelA) && is_user_alive(g_DuelB)) {
				new name1[32], name2[32]
				get_user_name(g_DuelA, name1, charsmax(name1))
				get_user_name(g_DuelB, name2, charsmax(name2))
				formatex(info, charsmax(info), "%L", LANG_SERVER, "JBB_STATUS_DUEL", name1, name2)
			}
		}
	}
	for (new id = 1; id <= g_MaxClients; id++) {
		if(is_user_alive(id)) {
			new skin = entity_get_int(id, EV_INT_skin)
			new CsTeams:team = cs_get_user_team(id)
			if(cs_get_user_money(id) != jb_get_money(id)) cs_set_user_money(id, jb_get_money(id))
			if(team == CS_TEAM_T && g_GameMode == 1) {
				switch(skin) {
					case 0: formatex(text_skin, charsmax(text_skin), "^n  %L", LANG_SERVER, "JBB_COLOR0")
					case 1: formatex(text_skin, charsmax(text_skin), "^n  %L", LANG_SERVER, "JBB_COLOR1")
					case 2: formatex(text_skin, charsmax(text_skin), "^n  %L", LANG_SERVER, "JBB_COLOR2")
				}
			}
			else text_skin = ""
			switch(g_GameMode) {
				case 99: {
					if(team == CS_TEAM_T) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_LAST")
					else if(team == CS_TEAM_CT) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_CT")
					else formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ERROR")
				}
				case 0: {
					if(team == CS_TEAM_T) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_T")
					else if(team == CS_TEAM_CT) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_CT")
					else formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ERROR")
				}
				case 1: {
					if(g_Simon == id) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_WARDEN")
					else if(team == CS_TEAM_T) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_T")
					else if(team == CS_TEAM_CT) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_CT")
					else formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ERROR")
				}
				case 5: {
					if(g_Simon == id) formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_ALIEN")
					else formatex(role, charsmax(role), "%L: %L", LANG_SERVER, "JBB_STATUS_ROLE", LANG_SERVER, "JBB_ROLE_PLAYER")
				}
			}
			send = false
			formatex(text_spect, charsmax(text_spect), "^n^n[%L]^n  ", LANG_SERVER, "JBB_SPECTATING")
			for(new dead = 1; dead <= mxplr; dead++) {
				if(is_user_connected(dead)) {
					if(is_user_alive(dead) || is_user_bot(dead))
						continue
	
					if(pev(dead, pev_iuser2) == id) {
						get_user_name(dead, name, 32)
						add(name, 35, "^n  ", 0)
						add(text_spect, 699, name, 0)
						send = true
					}
				}
			}
			if(send == true) formatex(text, charsmax(text), "[%L]^n  %s^n  %s%s%s%s%s%s", LANG_SERVER, "JBB_STATUS_INFO", info, role, text_skin, text_alives, text_question, text_minigames, text_spect)
			else formatex(text, charsmax(text), "[%L]^n  %s^n  %s%s%s%s%s", LANG_SERVER, "JBB_STATUS_INFO", info, role, text_skin, text_alives, text_question, text_minigames)
			if(g_GameMode == 99) set_hudmessage(0, 200, 200, 0.75, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
			else if(get_bit(g_PlayerWanted, id)) set_hudmessage(200, 0, 0, 0.75, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
			else if(g_GameMode == 0 || get_bit(g_PlayerFreeday, id)) set_hudmessage(0, 200, 0, 0.75, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
			else set_hudmessage(200, 200, 0, 0.75, 0.15, 0, 0.0, HUD_DELAY, 0.0, 0.0, -1)
			ShowSyncHudMsg(id, g_SyncHud, text)
		} else if(is_user_connected(id)) {
			new spect
			send = false
			for(new i = 1; i <= mxplr; i++)	{
				if(pev(id, pev_iuser2) == i && is_user_alive(i) && !spect) {
					new text_spect1[300]
					get_user_name(i, name, 31)
					formatex(text_spect1, charsmax(text_spect1), "^n^n[%L]^n  %L: %s^n  %L: %dHP %dAP^n  %L: %d",
						LANG_SERVER, "JBB_SPECTATING", LANG_SERVER, "JBB_SPECT_NAME", name, LANG_SERVER, "JBB_SPECT_HP",
						get_user_health(i), get_user_armor(i), LANG_SERVER, "JBB_SPECT_FRAGS", jb_get_money(i))
					formatex(text, charsmax(text), "[%L]^n  %s%s%s%s%s", LANG_SERVER, "JBB_STATUS_INFO", info, text_alives, text_question, text_minigames, text_spect1)
					if(g_GameMode == 99) set_hudmessage(0, 200, 200, 0.75, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
					else set_hudmessage(200, 200, 0, 0.75, 0.15, 0, 0.0, HUD_DELAY, 0.0, 0.0, -1)
					spect = true
				}
			}
			if(!spect) formatex(text, charsmax(text), "[%L]^n  %s%s%s", LANG_SERVER, "JBB_STATUS_INFO", info, text_alives, text_question)
			if(g_GameMode == 99) set_hudmessage(0, 200, 200, 0.75, 0.15, 0, 0.0, 1.1, 0.0, 0.0, -1)
			else set_hudmessage(200, 200, 0, 0.75, 0.15, 0, 0.0, HUD_DELAY, 0.0, 0.0, -1)
			ShowSyncHudMsg(id, g_SyncHud, text)
		}
	}
}

public freeday_select(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], player, access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	player = str_to_num(data)
	freeday_set(id, player)
	return PLUGIN_HANDLED
}

public duel_knives(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		g_Duel = 0
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback, option[128], player, src[32]
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	get_user_name(id, src, charsmax(src))
	player = str_to_num(data)
	formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, "UJBM_MENU_LASTREQ_SEL3", src, LANG_SERVER, "UJBM_MENU_DUEL_SEL", src, dst)
	player_dhudmessage(0, 6, 3.0, {0, 255, 0}, option)
	g_Duel = 3
	g_DuelA = id
	clear_bit(g_PlayerSuperKnife, id)
	player_strip_weapons(id)
	fm_give_item(id, "weapon_knife")
	player_glow(id, g_Colors[3])
	fm_set_user_health(id, 100)
	g_DuelB = player
	player_strip_weapons(player)
	fm_give_item(player, "weapon_knife")
	player_glow(player, g_Colors[2])
	fm_set_user_health(player, 100)
	jb_blockweapons()
	set_task(1.0, "Beacon", g_DuelA + TASK_BEACON)
	set_task(1.0, "Beacon", g_DuelB + TASK_BEACON)
	return PLUGIN_HANDLED
}

public duel_guns(id, menu, item) {
	if(item == MENU_EXIT || g_PlayerLast != id) {
		menu_destroy(menu)
		g_Duel = 0
		return PLUGIN_HANDLED
	}
	static gun, dst[32], data[5], access, callback, option[128], player, src[32]
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	get_user_name(id, src, charsmax(src))
	player = str_to_num(data)
	formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, _Duel[g_Duel - 4][_sel], src, LANG_SERVER, "UJBM_MENU_DUEL_SEL", src, dst)
	emit_sound(0, CHAN_AUTO, SOUND_DUEL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	player_dhudmessage(0, 6, 3.0, {0, 255, 0}, option)
	switch (_Duel[g_Duel - 4][_csw]) {
		case  CSW_M249: {
			if(id > 0 && is_user_alive(id)) {
				g_DuelA = id
				player_strip_weapons(id)
				gun = fm_give_item(id, _Duel[g_Duel - 4][_entname])
				cs_set_weapon_ammo(gun, 2000)
				cs_set_user_bpammo(id,CSW_M249,0)
				fm_set_user_health(id, 2000)
				entity_set_int(id, EV_INT_body, 4)
				player_glow(id, g_Colors[3])
				set_task(1.0, "Beacon", g_DuelA + TASK_BEACON)
			}
			if(player > 0 && is_user_alive(player)) {
				g_DuelB = player
				player_strip_weapons(player)
				gun = fm_give_item(player, _Duel[g_Duel - 4][_entname])
				cs_set_weapon_ammo(gun, 2000)
				fm_set_user_health(player, 2000)
				cs_set_user_bpammo(player,CSW_M249,0)
				entity_set_int(player, EV_INT_body, 4)
				player_glow(player, g_Colors[2])
				set_task(1.0, "Beacon", g_DuelB + TASK_BEACON)
			}
		}
		default: {
			if(id > 0 && is_user_alive(id)) {
				player_strip_weapons(id)
				g_DuelA = id
				gun = fm_give_item(id, _Duel[g_Duel - 4][_entname])
				if(pev_valid(gun))
					cs_set_weapon_ammo(gun, 1)
				fm_set_user_health(id, 100)
				player_glow(id, g_Colors[3])
				set_task(1.0, "Beacon", g_DuelA + TASK_BEACON)
			}
			if(player > 0 && is_user_alive(player)) {
				g_DuelB = player
				player_strip_weapons(player)
				gun = fm_give_item(player, _Duel[g_Duel - 4][_entname])
				if(pev_valid(gun))
					cs_set_weapon_ammo(gun, 1)
				fm_set_user_health(player, 100)
				player_glow(player, g_Colors[2])
				set_task(1.0, "Beacon", g_DuelB + TASK_BEACON)
			}
		}
	}
	jb_blockweapons()
	return PLUGIN_HANDLED
}

public freeday_choice(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case('1'): cmd_freeday_player(id)
		case('2'): {
			if((id == g_Simon || get_user_flags(id) & SUPERADMIN_LEVEL) && g_GameMode == 1) {
				entity_set_int(g_Simon, EV_INT_body, 3)
				g_Simon = 0
				g_FreedayAutoAll = 0
				get_user_name(id, dst, charsmax(dst))
				client_print(0, print_console, "[Fantick] Freeday by %s", dst)
				server_print("[Fantick] Client %i gives freeday for everyone", id)
				set_dhudmessage(100, 0, 0, 0.03, 0.55, 0, 2.0, 3.0, 0.2, 0.2)
				show_dhudmessage(0, "%s %L", dst, LANG_SERVER, "UJBM_FREEDAY_ALL")
				g_GameMode = 0
				g_nogamerounds++
				remove_task(TASK_NOSIMON)
				emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
				hud_status(0)
				g_PlayerFreeday = 0
				g_systime = get_systime()
				jail_open()
				new Players[32]
				new playerCount, i
				get_players(Players, playerCount, "ac")
				for (i=0; i<playerCount; i++) {
					entity_set_int(Players[i], EV_INT_skin, 3)
					if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_FD)
				}
				remove_task(TASK_ROUNDEND)
				set_task(get_pcvar_float(cvar_fdlen), "task_freeday_end",TASK_ROUNDEND)
			}
		}
	}
	return PLUGIN_HANDLED
}

public setup_buttons() {
	new ent[3]
	new Float:origin[3]
	new info[32]
	new pos
	while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch"))) {
		pev(ent[0], pev_origin, origin)
		while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS))) {
			if(!is_valid_ent(ent[1]))
				continue
			
			entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))
			if(!equal(info, "func_door"))
				continue
			
			entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))
			if(!info[0])
				continue
			
			if(TrieKeyExists(g_CellManagers, info)) TrieGetCell(g_CellManagers, info, ent[2])
			else ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)
			if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0)) {
				g_Buttons[pos] = ent[2]
				pos++
				break
			}
		}
	}
	TrieDestroy(g_CellManagers)
}

stock in_array(needle, data[], size) {
	for(new i = 0; i < size; i++) {
		if(data[i] == needle)
			return i
	}
	return -1
}

stock freeday_set(id, player) {
	static src[32], dst[32]
	get_user_name(player, dst, charsmax(dst))
	if(is_user_alive(player) && !get_bit(g_PlayerWanted, player)) {
		set_bit(g_PlayerFreeday, player)
		remove_task(TASK_FREEENDPL + player)
		set_task(get_pcvar_float(cvar_fdlen), "player_freeday_end", TASK_FREEENDPL + player)
		entity_set_int(player, EV_INT_skin, 3)
		if (g_mp3[player]) client_cmd(player,"mp3 play %s", MUSIC_FD)
		if(get_pcvar_num(gp_GlowModels))
			player_glow(player, g_Colors[1])

		if(0 < id <= g_MaxClients) {
			get_user_name(id, src, charsmax(src))
			player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "UJBM_GUARD_FREEDAYGIVE", src, dst)
		}
		else if(g_GameMode == 1) player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "UJBM_PRISONER_HASFREEDAY", dst)
	}
}

stock first_join(id) {
	if (get_bit(g_PlayerJoin, id)) return PLUGIN_CONTINUE
	set_task(20.0, "cmd_minmodels", TASK_MINMODELS + id)
	set_bit(g_PlayerJoin, id)
	return PLUGIN_CONTINUE
}


stock player_dhudmessage(id, hudid, Float:time = 0.0, color[3] = {0, 255, 0}, msg[], any:...) {
	static text[512], Float:x, Float:y
	x = g_HudSync[hudid][_x]
	y = g_HudSync[hudid][_y]
	if(time > 0) set_dhudmessage(color[0], color[1], color[2], x, y, 0, 0.00, time, 0.00, 0.00)
	else set_dhudmessage(color[0], color[1], color[2], x, y, 0, 0.00, g_HudSync[hudid][_time], 0.00, 0.00)
	vformat(text, charsmax(text), msg, 6)
	show_dhudmessage(id, text)
}

stock player_hudmessage(id, hudid, Float:time = 0.0, color[3] = {0, 255, 0}, msg[], any:...) {
	static text[512], Float:x, Float:y
	x = g_HudSync[hudid][_x]
	y = g_HudSync[hudid][_y]
	if(time > 0) set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, time, 0.00, 0.00)
	else set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, g_HudSync[hudid][_time], 0.00, 0.00)
	vformat(text, charsmax(text), msg, 6)
	ShowSyncHudMsg(id, g_HudSync[hudid][_hudsync], text)
}

stock menu_players(id, CsTeams:team, skip, alive, callback[], title[], any:...) {
	static i, name[32], num[5], menu, menuname[32]
	vformat(menuname, charsmax(menuname), title, 7)
	menu = menu_create(menuname, callback)
	for(i = 1; i <= g_MaxClients; i++) {
		if(!is_user_connected(i) || (alive && !is_user_alive(i)) || (skip == i))
			continue
		
		if(!(team == CS_TEAM_T || team == CS_TEAM_CT) || ((team == CS_TEAM_T || team == CS_TEAM_CT) && (cs_get_user_team(i) == team))) {
			get_user_name(i, name, charsmax(name))
			num_to_str(i, num, charsmax(num))
			menu_additem(menu, name, num, 0)
		}
	}
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, menuname)
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, menuname)
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, menuname)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu)
}

stock player_glow(id, color[3], amount=40) 
	fm_set_user_rendering(id, kRenderFxGlowShell, color[0], color[1], color[2], kRenderNormal, amount)

stock player_strip_weapons(id) {
	g_Otvertka[id] = false
	g_Katana[id] = false
	g_Electro[id] = false
	g_speed[id] = false
	g_HasWeapon[id] = false
	fm_strip_user_weapons(id)
	set_pdata_int(id, m_iPrimaryWeapon, 0)
}

stock player_strip_weapons_all() {
	for(new i = 1; i <= g_MaxClients; i++) {
		if(is_user_alive(i)) {
			drop_weapons_all(i, 1)
			player_strip_weapons(i)
		}
	}
}

public jail_open() {
	static i
	for(i = 0; i < sizeof(g_Buttons); i++) {
		if(g_Buttons[i]) {
			ExecuteHamB(Ham_Use, g_Buttons[i], 0, 0, 1, 1.0)
			entity_set_float(g_Buttons[i], EV_FL_frame, 0.0)
		}
	}
}

public FM_SetClientKeyValue_pre(id, const szInfoBuffer[], const szKey[]) {
	if(equal(szKey, "model")) {
		new szModel[32]
		jb_get_user_model(id, szModel, charsmax(szModel))
  		if(!equal(szModel, PLAYER_MODEL))
			jb_set_user_model(id, PLAYER_MODEL)
		
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public jb_set_user_model(id, const szModel[]) {
	engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", szModel)
	new szBuffer[64]
	formatex(szBuffer, charsmax(szBuffer), "models/player/%s/%s.mdl", szModel, szModel)
	set_pdata_int(id, 491, engfunc(EngFunc_ModelIndex, szBuffer), 5)
}

public jb_get_user_model(id, model[], len)
	engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", model, len)

/*public client_infochanged(id) {
	new fmodel[64]
	formatex(fmodel, charsmax(fmodel), "models/player/%s/%s.mdl", PLAYER_MODEL, PLAYER_MODEL)
	if (is_user_connected(id)) {
		engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", PLAYER_MODEL)	
		set_pdata_int(id, 491, engfunc(EngFunc_ModelIndex, fmodel), 5)
		//set_user_info(id, "model", PLAYER_MODEL)
	}
}*/

public cmd_game_zombie() {
	if (g_GameMode != 1)
		return PLUGIN_CONTINUE
	
	g_FreedayAutoAll = 1
	jail_open()
	g_GameMode = 3
	g_BoxStarted = 0
	jb_blockweapons()
	entity_set_int(g_Simon, EV_INT_body, 3)
	g_Simon = 0
	g_nogamerounds = get_pcvar_num(gp_NoGame)
	g_systime = get_systime()
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_ZOMBIE)
			if (cs_get_user_team(Players[i]) == CS_TEAM_T) make_zombie(Players[i])
			else if (cs_get_user_team(Players[i]) == CS_TEAM_CT) make_human(Players[i])
		}
	}
	emit_sound(0, CHAN_AUTO, SOUND_ZOMBIE_BEGIN, 1.0, ATTN_NORM, 0, PITCH_NORM)
	if (get_pcvar_num (gp_Effects) > 0) set_lights("d")
	set_task(241.0, "task_zombie_end",TASK_ROUNDEND)
	return PLUGIN_CONTINUE
}

public make_zombie(id) {
	player_strip_weapons(id)
	g_zombie[id] = true
	fm_give_item(id, "weapon_knife")
	fm_set_user_maxspeed(id, 225.0)
	fm_set_user_health(id, 2000)
	cs_set_user_armor(id, 0, CS_ARMOR_NONE)
	cs_set_user_nvg (id, true)
	engclient_cmd(id, "nightvision")
	entity_set_int(id, EV_INT_body, 4)
	clear_bit(g_PlayerSuperKnife, id)
	if(get_user_flags(id) & VIP_LEVEL) fm_set_user_gravity(id, 0.65)
	else fm_set_user_gravity(id, 0.9)
}

public make_human(id) {
	fm_strip_user_weapons(id)
	g_human[id] = true
	fm_give_item(id, "weapon_xm1014")
	cs_set_user_bpammo(id, CSW_XM1014, 1024)
	fm_give_item(id, "weapon_knife")
	fm_set_user_health(id, 100)
	cs_set_user_armor(id, 0, CS_ARMOR_NONE)
	fm_set_user_maxspeed(id, 250.0)
	if(get_user_flags(id) & VIP_LEVEL) fm_set_user_gravity(id, 0.75)
	else fm_set_user_gravity(id, 1.0)
	set_bit(g_Fonarik, id)
}

public shop_zombie(id) {
	if(!is_user_alive(id))
		return PLUGIN_HANDLED
	
	message_begin(MSG_ONE, g_iMessagesBuyClose, _, id)
	message_end()
	new option[64], header[128], menu
	switch(cs_get_user_team(id)) {
		case CS_TEAM_T: {
			formatex(header, charsmax(header), "\y%L", LANG_SERVER, "JBB_SHOPZ_ZOMBIE")
			menu = menu_create(header, "shop_zombie_handler")
			if(jb_get_money(id) >= 70 && g_ShopPurchases[id] != 2) formatex(option, charsmax(option), "%L \R\y70$", LANG_SERVER, "JBB_SHOPZ_ZARMOR")
			else formatex(option, charsmax(option), "\d%L \R70$", LANG_SERVER, "JBB_SHOPZ_ZARMOR")
			menu_additem(menu, option, "1", 0)
		}
		case CS_TEAM_CT: {
			formatex(header, charsmax(header), "\y%L", LANG_SERVER, "JBB_SHOPZ_HUMAN")
			menu = menu_create(header, "shop_zombie_handler")
			if(jb_get_money(id) >= 40) formatex(option, charsmax(option), "%L \R\y40$", LANG_SERVER, "JBB_SHOPZ_NVG")
			else formatex(option, charsmax(option), "\d%L \R40$", LANG_SERVER, "JBB_SHOPZ_NVG")
			menu_additem(menu, option, "1", 0)
			if(jb_get_money(id) >= 80) formatex(option, charsmax(option), "M4A1 \R80$")
			else formatex(option, charsmax(option), "\dM4A1 \R80$")
			menu_additem(menu, option, "2", 0)
		}
	}
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SHOP_EXIT")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
	return PLUGIN_HANDLED
}

public shop_zombie_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	if(!is_user_alive(id)) return PLUGIN_HANDLED
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	new user_money = jb_get_money(id)
	switch (key) {
		case 1: {
			if(cs_get_user_team(id) == CS_TEAM_T) {
				if(user_money < 70) ColorChat(id, GREEN, "[%s]^x01 %s", PREFIX, LANG_SERVER, "NO_MONEY")
				else if(g_ShopPurchases[id] == 2) ColorChat(id, GREEN, "[%s]^x01 %s", PREFIX, LANG_SERVER, "JBB_SHOP_ALREADY")
				else {
					g_ShopPurchases[id] = 2
					cs_set_user_armor(id, 700, CS_ARMOR_VESTHELM)
					ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
					jb_set_money(id, user_money - 70)
				}
			} else {
				if(user_money < 40) ColorChat(id, GREEN, "[%s]^x01 %s", PREFIX, LANG_SERVER, "NO_MONEY")
				else {
					cs_set_user_nvg(id, 1)
					client_cmd(id, "nightvision")
					ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
					jb_set_money(id, user_money - 40)
				}
			}
		}
		case 2: {
			if(cs_get_user_team(id) == CS_TEAM_CT) {
				if(jb_get_money(id) < 80) ColorChat(id, GREEN, "[%s]^x01 %s", PREFIX, LANG_SERVER, "NO_MONEY")
				else {
					drop_weapons_prim(id, 1)
					fm_give_item(id, "weapon_m4a1")
					cs_set_user_bpammo(id, CSW_M4A1, 1024)
					jb_set_money(id, user_money - 80)
				}
			}
		}
	}
	return PLUGIN_HANDLED
}

public cmd_hns_start() {
	g_systime = get_systime()
	g_HnsStarted = 1
	jb_unblockweapons()
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
			fm_give_item(Players[i], "weapon_knife")
			current_weapon(Players[i])
			fm_give_item(Players[i], "weapon_flashbang")
			fm_give_item(Players[i], "weapon_smokegrenade")
			fm_set_user_maxspeed(Players[i], 300.0)
			fm_set_user_health(Players[i], 100)
		} else {
			fm_give_item(Players[i], "weapon_knife")
			current_weapon(Players[i])
			fm_give_item(Players[i], "weapon_smokegrenade")
			set_bit(g_Fonarik, Players[i])
			client_cmd(Players[i], "impulse 100")
			message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, Players[i])
			write_short(1<<10)
			write_short(1<<10)
			write_short(0x0000) // fade out
			write_byte(0)
			write_byte(0)
			write_byte(0)
			write_byte(255)
			message_end()
			new j = random_num(0, sizeof(_WeaponsFree) - 1)
			fm_give_item(Players[i], _WeaponsFree[j])
			cs_set_user_bpammo(Players[i], _WeaponsFreeCSW[j], 1024)
			new n = random_num(0, sizeof(_WeaponsFree) - 1)
			while (n == j) {
				n = random_num(0, sizeof(_WeaponsFree) - 1)
			}
			fm_give_item(Players[i], _WeaponsFree[n])
			cs_set_user_bpammo(Players[i], _WeaponsFreeCSW[n], 1024)
		}
		if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_HNS)
	}
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	jb_blockweapons()
	remove_task(TASK_ROUNDEND)
	set_task(181.0, "task_hns_end",TASK_ROUNDEND)
	return PLUGIN_CONTINUE
}

public cmd_chase_start() {
	g_systime = get_systime()
	g_HnsStarted = 1
	jb_unblockweapons()
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
			fm_give_item(Players[i], "weapon_knife")
			current_weapon(Players[i])
			fm_set_user_maxspeed(Players[i], 250.0)
			fm_set_user_gravity(Players[i], 1.0)
			fm_set_user_health(Players[i], 100)
		} else {
			fm_give_item(Players[i], "weapon_knife")
			fm_set_user_maxspeed(Players[i], 500.0)
			fm_set_user_gravity(Players[i], 0.75)
			g_speed[Players[i]] = true
			current_weapon(Players[i])
			set_bit(g_Fonarik, Players[i])
			client_cmd(Players[i], "impulse 100")
			message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, Players[i])
			write_short(1<<10)
			write_short(1<<10)
			write_short(0x0000) // fade out
			write_byte(0)
			write_byte(0)
			write_byte(0)
			write_byte(255)
			message_end()
		}
		if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_HNS)
	}
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	jb_blockweapons()
	remove_task(TASK_ROUNDEND)
	set_task(181.0, "task_hns_end",TASK_ROUNDEND)
	return PLUGIN_CONTINUE
}

public task_zombie_end() {
	client_cmd(0, "mp3 stop")
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	g_PlayerFreeday = 0
	set_dhudmessage(0, 255, 0, -1.0, 0.35, 0, 6.0, 15.0)
	show_dhudmessage(0, "%L", LANG_SERVER, "JBB_ENDGAME")
	new playerCount, i
	new Players[32]
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		#if defined roundcontrol_on
		RC_RoundEndForce(WINSTATUS_CT)
		#else
		if (cs_get_user_team(Players[i]) == CS_TEAM_T && is_user_alive(Players[i]))
			user_kill(Players[i], 1)
		#endif
		if (cs_get_user_team(Players[i]) == CS_TEAM_CT && is_user_alive(Players[i]))
			jb_set_money(Players[i], jb_get_money(Players[i]) + 30)
	}
	return PLUGIN_CONTINUE
}

public task_hns_end() {
	client_cmd(0, "mp3 stop")
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	g_PlayerFreeday = 0
	set_dhudmessage(0, 255, 0, -1.0, 0.35, 0, 6.0, 15.0)
	show_dhudmessage(0, "%L", LANG_SERVER, "JBB_ENDGAME")
	new playerCount, i
	new Players[32]
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (cs_get_user_team(Players[i]) == CS_TEAM_T && is_user_alive(Players[i]))
			jb_set_money(Players[i], jb_get_money(Players[i]) + 30)
		#if defined roundcontrol_on
		RC_RoundEndForce(WINSTATUS_TERRORIST)
		#else
		if (cs_get_user_team(Players[i]) == CS_TEAM_CT && is_user_alive(Players[i]))
			user_kill(Players[i], 1)
		#endif
	}
	return PLUGIN_CONTINUE
}

public cmd_game_hns(chase) {
	if (g_GameMode != 1)
		return PLUGIN_HANDLED
	
	g_FreedayAutoAll = 1
	g_nogamerounds = get_pcvar_num(gp_NoGame)
	g_BoxStarted = 0
	g_HnsStarted = 0
	jail_open()
	if (!chase) g_GameMode = 2
	else g_GameMode = 9
	entity_set_int(g_Simon, EV_INT_body, 3)
	g_Simon = 0
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	set_lights("c")
	jb_blockweapons()
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (cs_get_user_team(Players[i]) == CS_TEAM_T) {
			g_speed[Players[i]] = false
			fm_set_user_gravity(Players[i], 0.5)
			fm_strip_user_weapons(Players[i])
		}
		if (cs_get_user_team(Players[i]) == CS_TEAM_CT) {
			fm_strip_user_weapons(Players[i])
			message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, Players[i])
			write_short(~0)
			write_short(~0)
			write_short(0x0004) // stay faded
			write_byte(0)
			write_byte(0)
			write_byte(0)
			write_byte(255)
			message_end()
		}
		jb_blockweapons()
	}
	if (!chase) set_task(20.0,"cmd_hns_start",TASK_GIVEITEMS)
	else set_task(20.0,"cmd_chase_start",TASK_GIVEITEMS)
	return PLUGIN_HANDLED
}

#if defined voice_on
public enable_player_voice(id, player, amount) {
	static src[32], dst[32]
	get_user_name(player, dst, charsmax(dst))
	switch(amount) {
		case 0: {
			g_PlayerVoice[player] = 0
			if(0 < id <= g_MaxClients) {
				get_user_name(id, src, charsmax(src))
				player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBB_VOICE_DISABLED", src, dst)
			}
		}
		case 1: {
			if(g_PlayerVoice[player] < 1) g_PlayerVoice[player] = 1
			if(0 < id <= g_MaxClients) {
				get_user_name(id, src, charsmax(src))
				player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBB_VOICE_ENABLED1", src, dst)
			}
		}
		case 3: {
			g_PlayerVoice[player] = 3
			if(0 < id <= g_MaxClients) {
				get_user_name(id, src, charsmax(src))
				player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBB_VOICE_ENABLED3", src, dst)
			}
		}
	}
}

public voice_disable_select(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], player, access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	player = str_to_num(data)
	enable_player_voice(id, player, 0)
	cmd_simonmenu(id)
	return PLUGIN_HANDLED
}

public voice_enable1_select(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], player, access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	player = str_to_num(data)
	enable_player_voice(id, player, 1)
	cmd_simonmenu(id)
	return PLUGIN_HANDLED
}

public voice_enable3_select(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], player, access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	player = str_to_num(data)
	enable_player_voice(id, player, 3)
	cmd_simonmenu(id)
	return PLUGIN_HANDLED
}

public cmd_simon_micr(id) {
	if (g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) {
		static menu, option[64]
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MENU_VOICE")
		menu = menu_create(option, "cmd_simon_micr_handler")
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_VOICE_TAKE")
		menu_additem(menu, option, "1", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_VOICE_GIVE1")
		menu_additem(menu, option, "2", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_VOICE_GIVE3")
		menu_additem(menu, option, "3", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
		menu_setprop(menu, MPROP_NEXTNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
		menu_setprop(menu, MPROP_BACKNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
		menu_setprop(menu, MPROP_EXITNAME, option)
		menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
		menu_display(id, menu)
	}
	return PLUGIN_HANDLED
}

public cmd_simon_micr_handler(id, menu, item) {
	if(item == MENU_EXIT || g_GameMode != 1) {
		menu_destroy(menu)
		cmd_simonmenu(id)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case ('1'): menu_players(id, CS_TEAM_T, 0, 1, "voice_disable_select", "%L", LANG_SERVER, "JBB_VOICE_TAKE")
		case ('2'): menu_players(id, CS_TEAM_T, 0, 1, "voice_enable1_select", "%L", LANG_SERVER, "JBB_VOICE_GIVE1")
		case ('3'): menu_players(id, CS_TEAM_T, 0, 1, "voice_enable3_select", "%L", LANG_SERVER, "JBB_VOICE_GIVE3")
	}
	return PLUGIN_HANDLED
}
#endif

public divide_teams(id) {
	if (g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) {
		new playerCount, i
		new Players[32]
		new bool:orange = true
		get_players(Players, playerCount, "ac")
		for (i=0; i<playerCount; i++) {
			if (cs_get_user_team(Players[i]) == CS_TEAM_T && is_user_alive(Players[i]) && !get_bit(g_PlayerFreeday, Players[i]) && !get_bit(g_PlayerWanted, Players[i])) {
				if (orange) {
					entity_set_int(Players[i], EV_INT_skin, 0)
					orange=false
				} else {
					entity_set_int(Players[i], EV_INT_skin, 1)
					orange=true
				}
			}
		}
	}
	return PLUGIN_HANDLED
}

bool:GameAllowed() {
	if (g_GameMode > 1 || g_nogamerounds > 0)
		return false
	
	return true
}

public cmd_simonmenu(id) {
	if(g_GameMode != 1) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_NOOPEN_GM")
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	if (g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) {
		static menu, menuname[32], option[64]
		formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU")
		menu = menu_create(menuname, "simon_choice")
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_OPEN")
		menu_additem(menu, option, "1", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_FD")
		menu_additem(menu, option, "2", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_CLR")
		menu_additem(menu, option, "3", 0)
		#if defined voice_on
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_VOICE")
		menu_additem(menu, option, "4", 0)
		#endif
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_GONG")
		menu_additem(menu, option, "5", 0)
		if(g_GameMode <= 1) formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_SIMON_GAMES")
		else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_SIMON_GAMES")
		menu_additem(menu, option, "6", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_SIMON_MINIGAMES")
		menu_additem(menu, option, "7", 0)
		#if defined ctpunish_on
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_PUNISH")
		menu_additem(menu, option, "8", 0)
		#endif
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MENU_MUSIC")
		menu_additem(menu, option, "9", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
		menu_setprop(menu, MPROP_NEXTNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
		menu_setprop(menu, MPROP_BACKNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
		menu_setprop(menu, MPROP_EXITNAME, option)
		menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
		menu_display(id, menu)
	}
	return PLUGIN_HANDLED
}

public simon_choice(id, menu, item) {
	if(item == MENU_EXIT || !(id == g_Simon || get_user_flags(id) & SUPERADMIN_LEVEL)) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case('1'): {
			jail_open()
			cmd_simonmenu(id)
		}
		case('2'): cmd_freeday(id)
		case('3'): divide_teams(id)
		#if defined voice_on
		case('4'): cmd_simon_micr(id)
		#endif
		case('5'): 	{
			if(~get_user_flags(id) & SUPERADMIN_LEVEL && id != g_Simon)
			{
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RIGHTS_OR_SIMON")
				return PLUGIN_HANDLED
			}
			emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
			cmd_simonmenu(id)
			get_user_name(id, nick, 63)
			set_dhudmessage(100, 0, 0, 0.03, 0.55, 0, 1.0, 3.0, 0.2, 0.2)
			show_dhudmessage(0, "%s %L", nick, LANG_SERVER, "UJBM_RINGED")
		}
		case('6'): cmd_simongamesmenu(id)
		case('7'): minigames(id)
		#if defined ctpunish_on
		case('8'): cmd_punish(id)
		#endif
		case('9'): cmd_music(id)
	}
	return PLUGIN_HANDLED
}

public cmd_music(id) {
	if(g_Simon != id && ~get_user_flags(id) & SUPERADMIN_LEVEL) {
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	
	static menu, menuname[32], option[64]
	formatex(menuname, charsmax(menuname), "%L^n\d%L", LANG_SERVER, "JBB_MENU_MUSIC", LANG_SERVER, "JBB_MENU_MUSIC1")
	menu = menu_create(menuname, "cmd_music_handler")
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MUSIC_STOP")
	menu_additem(menu, option, "1", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MUSIC_FD")
	menu_additem(menu, option, "2", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MUSIC_ZM")
	menu_additem(menu, option, "3", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_MUSIC_HNS")
	menu_additem(menu, option, "4", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu)
	return PLUGIN_HANDLED
}

public cmd_music_handler(id, menu, item) {
	if(item == MENU_EXIT || !(id == g_Simon || get_user_flags(id) & SUPERADMIN_LEVEL)) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	new playerCount, i
	new Players[32]
	get_players(Players, playerCount, "ac")
	switch(data[0]) {
		case ('1'): {
			for (i=0; i<playerCount; i++) if(is_user_connected(Players[i])) {
				if(g_mp3menu[Players[i]]) client_cmd(Players[i], "mp3 stop")
			}
			cmd_music(id)
		}
		case ('2'): {
			for (i=0; i<playerCount; i++) if(is_user_connected(Players[i])) {
				if(g_mp3menu[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_FD)
			}
			cmd_music(id)
		}
		case ('3'): {
			for (i=0; i<playerCount; i++) if(is_user_connected(Players[i])) {
				if(g_mp3menu[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_ZOMBIE)
			}
			cmd_music(id)
		}
		case ('4'): {
			for (i=0; i<playerCount; i++) if(is_user_connected(Players[i])) {
				if(g_mp3menu[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_HNS)
			}
			cmd_music(id)
		}
	}
	return PLUGIN_HANDLED
}

public minigames(id) {
	if(g_GameMode != 1) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_NOOPEN_GM")
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	if (g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) {
		static menu, menuname[32], option[64]
		formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_SIMON_MINIGAMES")
		menu = menu_create(menuname, "minigames_choice")
		if(!g_BoxStarted) formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_GUARD_BOX")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_GUARD_BOX_OFF")
		menu_additem(menu, option, "1", 0)
		#if defined football_on
		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBB_FOOTBALL_CAPTION")
		menu_additem(menu, option, "2", 0)
		#endif
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
		menu_setprop(menu, MPROP_NEXTNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
		menu_setprop(menu, MPROP_BACKNAME, option)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
		menu_setprop(menu, MPROP_EXITNAME, option)
		menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
		menu_display(id, menu)
	}
	return PLUGIN_HANDLED
}

public minigames_choice(id, menu, item) {
	if(item == MENU_EXIT || g_GameMode != 1) {
		menu_destroy(menu)
		cmd_simonmenu(id)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case ('1'): cmd_box(id)
		#if defined football_on
		case ('2'): football_menu(id)
		#endif
	}
	return PLUGIN_HANDLED
}

public simon_gameschoice(id, menu, item) {
	if(item == MENU_EXIT || g_GameMode != 1) {
		menu_destroy(menu)
		cmd_simonmenu(id)
		return PLUGIN_HANDLED
	}
	static dst[32], data[5], access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	menu_destroy(menu)
	get_user_name(id, dst, charsmax(dst))
	switch(data[0]) {
		case('1'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_game_alien()
		case('2'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL)cmd_game_zombie()
		case('3'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_game_hns(0)
		case('4'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_game_hns(1)
		case('5'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_game_magic()
		case('6'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_attack()
		//case('7'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_sparta()
		case('8'): if (GameAllowed() || (get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_defence()
	}
	return PLUGIN_HANDLED
}

public cmd_simongamesmenu(id) {
	if(g_GameMode != 1) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_NOOPEN_GM")
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	if (g_Simon != id && !(get_user_flags(id) & ADMIN_LEVEL && cs_get_user_team(id) == CS_TEAM_CT) && ~get_user_flags(id) & SUPERADMIN_LEVEL)
		return PLUGIN_HANDLED
	
	static menu, menuname[32], option[64]
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU")
	menu = menu_create(menuname, "simon_gameschoice")
	if (GameAllowed() || get_user_flags(id) & ADMIN_LEVEL) {
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_ALIEN2")
		menu_additem(menu, option, "1", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_ZM")
		menu_additem(menu, option, "2", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_HNS")
		menu_additem(menu, option, "3", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_CHASE")
		menu_additem(menu, option, "4", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_MAGIC")
		menu_additem(menu, option, "5", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_ATTACK")
		menu_additem(menu, option, "6", 0)
		//formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_SPARTA")
		//menu_additem(menu, option, "7", 0)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_DEFENCE")
		menu_additem(menu, option, "8", 0)
	} else {
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_ALIEN2")
		menu_additem(menu, option, "1", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_ZM")
		menu_additem(menu, option, "2", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_MENU_SIMONMENU_HNS")
		menu_additem(menu, option, "3", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_CHASE")
		menu_additem(menu, option, "4", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_MAGIC")
		menu_additem(menu, option, "5", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_ATTACK")
		menu_additem(menu, option, "6", 0)
		//formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_SPARTA")
		//menu_additem(menu, option, "7", 0)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_DEFENCE")
		menu_additem(menu, option, "8", 0)
	}
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu)
	return PLUGIN_HANDLED
}

stock cs_set_user_team2(index, {CsTeams,_}:team, update = 1) {
	if (index == g_Simon) {
		g_Simon = 0
		g_systime = get_systime()
		remove_task(TASK_NOSIMON)
		set_task(30.0, "task_fd", TASK_NOSIMON)
		hud_status(0)
	}
	set_pdata_int(index, OFFSET_TEAM, _:team)
	set_pev(index, pev_team, _:team)
	if(update) {
		static _msg_teaminfo
		if(!_msg_teaminfo) _msg_teaminfo = get_user_msgid("TeamInfo")
		static teaminfo[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
		
		message_begin(MSG_ALL, _msg_teaminfo)
		write_byte(index)
		write_string(teaminfo[_:team])
		message_end()
	}
	return 1
}

public give_items_alien() {
	fm_give_item(g_Simon, "item_assaultsuit")
	fm_give_item(g_Simon, "weapon_knife")
	set_bit(g_PlayerSuperKnife, g_Simon)
	current_weapon(g_Simon)
}

public cmd_game_alien() {
	if (g_Simon == 0) return PLUGIN_HANDLED
	g_FreedayAutoAll = 1
	g_nogamerounds = get_pcvar_num(gp_NoGame)
	g_BoxStarted = 0
	jail_open()
	g_GameMode = 5
	jb_blockweapons()
	server_cmd("jb_block_teams")
	hud_status(0)
	new Players[32], playerCount, i
	new ctnum, ctid[33]
	get_players(Players, playerCount, "ac")
	count_teams()
	if(CTCount > 1) g_Simon = 0
	for (i=0; i<playerCount; i++) {
		if(cs_get_user_team(Players[i]) == CS_TEAM_CT) {
			ctnum++
			ctid[ctnum] = Players[i]
		}
	}
	if(CTCount > 1) g_Simon = ctid[random_num(1, ctnum)]
	for (i=0; i<playerCount; i++) {
		fm_strip_user_weapons(Players[i])
		if (g_Simon != Players[i]) {
			if (cs_get_user_team(Players[i]) == CS_TEAM_CT) {
				entity_set_int(Players[i], EV_INT_body, 2)
				entity_set_int(Players[i], EV_INT_skin, random_num(0, 2))
				set_bit(g_BackToCT, Players[i])
				cs_set_user_team2(Players[i], CS_TEAM_T)
			}
			fm_give_item(Players[i], "weapon_knife")
			new j = random_num(0, sizeof(_WeaponsFree) - 1)
			fm_give_item(Players[i], _WeaponsFree[j])
			cs_set_user_bpammo(Players[i], _WeaponsFreeCSW[j], 1024)
			new n = random_num(0, sizeof(_WeaponsFree) - 1)
			while (n == j) {
				n = random_num(0, sizeof(_WeaponsFree) - 1)
			}
			fm_give_item(Players[i], _WeaponsFree[n])
			cs_set_user_bpammo(Players[i], _WeaponsFreeCSW[n], 1024)
			g_speed[Players[i]] = false
			fm_set_user_maxspeed(Players[i], 250.0)
			fm_set_user_gravity(Players[i], 1.0)
		}
	}
	fm_set_user_rendering(g_Simon, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
	message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, g_Simon)
	write_short(~0)
	write_short(~0)
	write_short(0x0004) // stay faded
	write_byte(ALIEN_RED)
	write_byte(ALIEN_GREEN)
	write_byte(ALIEN_BLUE)
	write_byte(100)
	message_end()
	fm_set_user_maxspeed(g_Simon, 320.0)
	fm_set_user_gravity(g_Simon, 1.0)
	entity_set_int(g_Simon, EV_INT_body, 5)
	new hp = get_pcvar_num(gp_GameHP)
	if (hp < 20) hp = 200
	fm_set_user_health(g_Simon, hp*playerCount)
	set_task(20.0, "give_items_alien", TASK_GIVEITEMS)
	set_lights("z")
	emit_sound(0, CHAN_VOICE, SOUND_ALIEN, 1.0, ATTN_NORM, 0, PITCH_LOW)
	set_task(5.0, "stop_sound")
	return PLUGIN_HANDLED
}

#if defined ctpunish_on
public cmd_punish_ct(id, menu, item) {
	if(item == MENU_EXIT || (g_Simon != id && ~get_user_flags(id) & ADMIN_LEVEL)) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	static dst[32],src[32], data[5], player, access, callback
	menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
	player = str_to_num(data)
	if (g_Simon == player) return PLUGIN_CONTINUE
	entity_set_int(player, EV_INT_body, 2)
	entity_set_int(player, EV_INT_skin, random_num(0, 2))
	set_bit(g_BackToCT,player)
	cs_set_user_team2(player, CS_TEAM_T)
	fm_strip_user_weapons(player)
	fm_give_item(player, "weapon_knife")
	current_weapon(player)
	get_user_name(player, dst, charsmax(dst))
	get_user_name(id, src, charsmax(src))
	player_dhudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "UJBM_SIMON_PUNISH", src, dst,dst)

	return PLUGIN_HANDLED
}
#endif

public drop(id) {
	#if defined grab_on
	new target = client_data[id][0]
	if(target > 0) {
		set_pev(target, pev_velocity, vel_by_aim(id, get_pcvar_num(p_throw_force)))
		unset_grabbed(id)
		return PLUGIN_HANDLED
	}
	#endif
	if (WeaponsLocked) return PLUGIN_HANDLED
	return PLUGIN_CONTINUE
}

public task_freeday_end() {
	client_cmd(0, "mp3 stop")
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	g_GameMode = 1
	if(g_nogamerounds > 0) g_nogamerounds--
	g_PlayerFreeday = 0
	remove_task(TASK_NOSIMON)
	g_systime = get_systime()
	set_task(30.0, "task_fd", TASK_NOSIMON)
	set_dhudmessage(0, 255, 0, -1.0, 0.35, 0, 6.0, 15.0)
	show_dhudmessage(0, "%L", LANG_SERVER, "UJBM_STATUS_ENDFREEDAY")
	new playerCount, i
	new Players[32]
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (cs_get_user_team(Players[i]) == CS_TEAM_T && is_user_alive(Players[i]) && !get_bit(g_PlayerWanted, Players[i]))
			entity_set_int(Players[i], EV_INT_skin, random_num(0,2))
	}
	return PLUGIN_CONTINUE
}

public player_freeday_end(id) {
	remove_task(id)
	id -= TASK_FREEENDPL
	new name[32]
	if (is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T && get_bit(g_PlayerFreeday, id)) {
		get_user_name(id, name, 31)
		clear_bit(g_PlayerFreeday, id)
		entity_set_int(id, EV_INT_skin, random_num(0,2))
		client_cmd(id, "mp3 stop")
		emit_sound(id, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
		ColorChat(0, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_FREEDAY_PLEND", name)
	}
}

/* === VIP MENU === */
#if defined vipmenu_on
public VIPMenu(id) {
	new menuname[32], option[128]
	if(~get_user_flags(id) & VIP_LEVEL) {
		ColorChat(id, GREEN, "[%s]^x01 %L.", PREFIX, LANG_SERVER, "ACCESS_DENIED")
		client_cmd(id, "spk %s", SOUND_ERROR)
	} else {
		formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "UJBM_VIP_MENU")
		new vip_menu = menu_create(menuname, "vipmenu_handler")
		if(has_used[id]) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_MONEY")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_MONEY")
		menu_additem(vip_menu, option, "1", 0)
		if(has_used[id] || g_GameMode > 1 || !is_user_alive(id)) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_GRENADES")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_GRENADES")
		menu_additem(vip_menu, option, "2", 0)
		if(has_used[id] || g_GameMode > 1 || !is_user_alive(id)) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_GRAVITY")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_GRAVITY")
		menu_additem(vip_menu, option, "3", 0)
		if(has_used[id] || g_GameMode > 1 || !is_user_alive(id)) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_SPEED")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_SPEED")
		menu_additem(vip_menu, option, "4", 0)
		if(has_used[id] || g_GameMode > 1 || !is_user_alive(id)) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_HEAL")
		else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_HEAL")
		menu_additem(vip_menu, option, "5", 0)
		if(!lastdeny && g_GameMode <= 1 && (cs_get_user_team(id) == CS_TEAM_T || cs_get_user_team(id) == CS_TEAM_CT)) {
			if(has_used[id] || is_user_alive(id)) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "UJBM_VIP_RESPAWN")
			else formatex(option, charsmax(option), "%L", LANG_SERVER, "UJBM_VIP_RESPAWN")
			menu_additem(vip_menu, option, "6", 0)
		}
		menu_setprop(vip_menu, MPROP_EXIT, MEXIT_ALL)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
		menu_setprop(vip_menu, MPROP_EXITNAME, option)
		menu_setprop(vip_menu, MPROP_NUMBER_COLOR, "\w")
		menu_display(id, vip_menu, 0)
	}
}

public vipmenu_handler(id, menu, item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	if(has_used[id]) {
		ColorChat(id, GREEN, "[%s]^x01 %L.", PREFIX, LANG_SERVER, "UJBM_VIP_USED")
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	new data[6], iName[64]
	new access, callback
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
	new key = str_to_num(data)
	if(key != 1 && g_GameMode > 1) {
		client_cmd(id, "spk %s", SOUND_ERROR)
		return PLUGIN_HANDLED
	}
	switch(key) {
		case 1: {
			jb_set_money(id, jb_get_money(id) + 30)
			has_used[id] = true
		}
		case 2: {
			if(is_user_alive(id)) {
				if (cs_get_user_team(id) == CS_TEAM_T) fm_give_item(id, "weapon_hegrenade")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_smokegrenade")
				has_used[id] = true
			}
		}
		case 3: {
			if(is_user_alive(id)) {
				fm_set_user_gravity(id, 0.4)
				has_used[id] = true
			}
		}
		case 4: {
			if(is_user_alive(id)) {
				fm_set_user_maxspeed(id, 500.0)
				g_speed[id] = true
				has_used[id] = true
			}
		}
		case 5: {
			if(is_user_alive(id)) {
				fm_set_user_health(id, 200)
				cs_set_user_armor(id, get_user_armor(id) + 50, CS_ARMOR_VESTHELM)
				has_used[id] = true
			}
		}
		case 6: {
			if(!is_user_alive(id) && !lastdeny && g_GameMode <= 1) {
				ExecuteHamB(Ham_CS_RoundRespawn, id)
				fm_give_item(id, "weapon_knife")
				has_used[id] = true
			}
		}
	}
	menu_destroy(menu)
   	return PLUGIN_HANDLED
}
#endif

/* === QA SYSTEM === */
#if defined qasystem_on
public on_say(id) {
	if(g_answered)
		return PLUGIN_CONTINUE
	
	static say[192]
	new name[32]
	read_args(say, sizeof(say) - 1)
	remove_quotes(say)
	for (new a = 0; a < 34; a++) {
		if(equal(g_answer, say)) {
			g_answered = true
			jb_set_money(id, jb_get_money(id) + 20)
			get_user_name(id, name, 31)
			ColorChat(0, GREEN, "[%s]^x01 %s %L", PREFIX, name, LANG_SERVER, "JBB_ANSWERED")
			hud_status(0)
			return PLUGIN_HANDLED
		} 
	}
	return PLUGIN_CONTINUE
}

random_question() {
	new answer = 1001, question[32], q1, q2, q3, q4, q5, type
	while(answer > 1000 || answer < -1000) {
		q1 = random_num(0, 300)
		q2 = random_num(0, 300)
		q3 = random_num(0, 300)
		q4 = random_num(2, 5)
		q5 = random_num(2, 5)
		type = random_num(1, 5)
		switch(type) {
			case 1: {
				formatex(question, charsmax(question), "%d+%d+%d", q1, q2, q3)
				answer = q1+q2+q3
			}
			case 2: {
				formatex(question, charsmax(question), "%d+%d-%d", q1, q2, q3)
				answer = q1+q2-q3
			}
			case 3: {
				formatex(question, charsmax(question), "%d-%d+%d", q1, q2, q3)
				answer = q1-q2+q3
			}
			case 4: {
				formatex(question, charsmax(question), "%d-%d-%d", q1, q2, q3)
				answer = q1-q2-q3
			}
			case 5: {
				formatex(question, charsmax(question), "%d*%d-%d*%d", q1, q4, q2, q5)
				answer = q1*q4-q2*q5
			}
		}
	}
	g_answered = false
	g_question = question
	formatex(g_answer, charsmax(g_answer), "%d", answer)
}
#endif

/* === MAIN PRISONER === */
#if defined hero_on
public makehero() {
	static players[32], num,i, id
	get_players(players, num, "a")
	if(num > 0) {
		for(i = 0; i < num; i++)
		g_hero[players[i]] = false
		i = 0
		id = players[random(num)]
		i++
		if (cs_get_user_team(id) == CS_TEAM_T) {
			jb_set_money(id, jb_get_money(id) + 20)
			get_user_name(id, nick, 31)
			cs_set_user_armor(id, 75, CS_ARMOR_VESTHELM)
			fm_set_user_health(id, 150)
			#if defined heroweapon_on
			set_bit(g_PlayerSuperKnife, id)
			current_weapon(id)
			#endif
			g_hero[id] = true
		}
		else set_task(0.5,"makehero",0)
	}
	return PLUGIN_CONTINUE
}
#endif

public WeaponChange(id) {
	if(g_speed[id]) fm_set_user_maxspeed(id, 500.0)
	if (read_data(1) != 1)
		return
	
	new weapon = read_data(2)
	if (weapon == CSW_KNIFE && g_Katana[id]) {
		set_pev(id, pev_viewmodel2, KATANA_V_MODEL)
		set_pev(id, pev_weaponmodel2, KATANA_P_MODEL)
	} else if (weapon == CSW_KNIFE && g_Otvertka[id]) {
		set_pev(id, pev_viewmodel2, OTVERTKA_V_MODEL)
		set_pev(id, pev_weaponmodel2, OTVERTKA_P_MODEL)
	} else if (weapon == CSW_KNIFE && g_Electro[id]) {
		set_pev(id, pev_viewmodel2, ELECTRO_V_MODEL)
		set_pev(id, pev_weaponmodel2, ELECTRO_P_MODEL)
	}
}

public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) {
	if (!is_user_connected(id))
		return FMRES_IGNORED
	
	if (g_Katana[id] && equal(sample[8], "kni", 3)) {
		volume = 0.6
		if (equal(sample[14], "sla", 3)) {
			engfunc(EngFunc_EmitSound, id, channel, "weapons/katana_slash.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
		if(equal(sample,"weapons/knife_deploy1.wav")) {
			engfunc(EngFunc_EmitSound, id, channel, "weapons/katana_deploy.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
		if (equal(sample[14], "hit", 3)) {
			if (sample[17] == 'w') {
				engfunc(EngFunc_EmitSound, id, channel,"weapons/katana_hitwall.wav", volume, attn, flags, pitch)
				return FMRES_SUPERCEDE
			} else {
				engfunc(EngFunc_EmitSound, id, channel, "weapons/katana_hit.wav", volume, attn, flags, pitch)
				return FMRES_SUPERCEDE
			}
		}
		if (equal(sample[14], "sta", 3)) {
			engfunc(EngFunc_EmitSound, id, channel, "weapons/katana_stab.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
	}
	if (g_Electro[id] && equal(sample[8], "kni", 3)) {
		volume = 0.6
		if (equal(sample[14], "sla", 3)) {
			engfunc(EngFunc_EmitSound, id, channel, "extreme-shop/ESlash.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
		if(equal(sample,"weapons/knife_deploy1.wav")) {
			engfunc(EngFunc_EmitSound, id, channel, "extreme-shop/EConvoca.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
		if (equal(sample[14], "hit", 3)) {
			if (sample[17] == 'w') {
				engfunc(EngFunc_EmitSound, id, channel,"extreme-shop/EHitWall.wav", volume, attn, flags, pitch)
				return FMRES_SUPERCEDE
			} else {
				engfunc(EngFunc_EmitSound, id, channel, "extreme-shop/EHit2.wav", volume, attn, flags, pitch)
				return FMRES_SUPERCEDE
			}
		}
		if (equal(sample[14], "sta", 3)) {
			engfunc(EngFunc_EmitSound, id, channel, "extreme-shop/EStab.wav", volume, attn, flags, pitch)
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

#if defined blockcmds_on
public clcmd_block(id)
	return PLUGIN_HANDLED
#endif

public clcmd_shop(id) {
	if(!is_user_alive(id))
		return PLUGIN_HANDLED
	
	if(g_GameMode == 3) {
		shop_zombie(id)
		return PLUGIN_HANDLED
	}
	
	if(g_GameMode > 1)
		return PLUGIN_HANDLED
	
	message_begin(MSG_ONE, g_iMessagesBuyClose, _, id)
	message_end()
	static menu[500], len
	new cost, money
	len = 0
	money = jb_get_money(id)
	if(get_user_team(id) == 1) {
		len += formatex(menu[len], charsmax(menu) - len, "%L^n\y%L: \w%d^n^n", LANG_SERVER, "SHOP_T", LANG_SERVER, "SHOP_MONEY", money)
		cost = get_pcvar_num(T_item_1)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "1. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN1", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d1. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN1", cost)
		cost = get_pcvar_num(T_item_2)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "2. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN2", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d2. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN2", cost)
		cost = get_pcvar_num(T_item_3)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "3. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN3", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d3. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN3", cost)
		cost = get_pcvar_num(T_item_4)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "4. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN4", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d4. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN4", cost)
		cost = get_pcvar_num(T_item_5)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "5. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN5", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d5. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN5", cost)
		cost = get_pcvar_num(T_item_7)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "6. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN6", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d6. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN6", cost)
		cost = get_pcvar_num(T_item_8)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "7. \wUSP\R\y%d$^n", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d7. USP\R%d$^n", cost)
		cost = get_pcvar_num(T_item_9)
		if (!fdcooldown[id] && !get_bit(g_FreedayAuto, id) && money >= cost) len += formatex(menu[len], charsmax(menu) - len, "8. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN7", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d8. %L\R%d $^n", LANG_SERVER, "SHOP_T_WPN7", cost)
		cost = get_pcvar_num(T_item_6)
		if (!inviscd[id] && money >= cost) len += formatex(menu[len], charsmax(menu) - len, "9. \w%L\R\y%d$^n^n", LANG_SERVER, "SHOP_T_WPN8", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d9. %L\R\d%d$^n^n", LANG_SERVER, "SHOP_T_WPN8", cost)
		len += formatex(menu[len], charsmax(menu) - len, "0. \w%L^n", LANG_SERVER, "SHOP_EXIT")
		show_menu(id, keysmenu, menu, -1, "MenuT")
	}
	if(get_user_team(id) == 2) {
		len += formatex(menu[len], charsmax(menu) - len, "%L^n\y%L: \w%d^n^n", LANG_SERVER, "SHOP_CT", LANG_SERVER, "SHOP_MONEY", money)
		cost = get_pcvar_num(CT_item_1)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "1. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_T_WPN3", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d1. %L\R%d$^n", LANG_SERVER, "SHOP_T_WPN3", cost)
		cost = get_pcvar_num(CT_item_3)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "2. \w%L\R\y%d$^n", LANG_SERVER, "SHOP_CT_WPN1", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d2. %L\R%d$^n", LANG_SERVER, "SHOP_CT_WPN1", cost)
		cost = get_pcvar_num(T_item_4)
		if(money >= cost) len += formatex(menu[len], charsmax(menu) - len, "3. \w%L\R\y%d$^n^n", LANG_SERVER, "SHOP_T_WPN4", cost)
		else len += formatex(menu[len], charsmax(menu) - len, "\d3. %L\R%d$^n^n", LANG_SERVER, "SHOP_T_WPN4", cost)
		len += formatex(menu[len], charsmax(menu) - len, "0. \w%L^n", LANG_SERVER, "SHOP_EXIT")
		show_menu(id, keysmenu, menu, -1, "MenuCT")
	}

	return PLUGIN_HANDLED
}

public ShopT(id, key) {
	new alive = is_user_alive(id)
	new team = get_user_team(id)
	new user_money = jb_get_money(id)
	new CostT1 = get_pcvar_num(T_item_1)
	new CostT2 = get_pcvar_num(T_item_2)
	new CostT3 = get_pcvar_num(T_item_3)
	new CostT4 = get_pcvar_num(T_item_4)
	new CostT5 = get_pcvar_num(T_item_5)
	new CostT6 = get_pcvar_num(T_item_6)
	new CostT7 = get_pcvar_num(T_item_7)
	new CostT8 = get_pcvar_num(T_item_8)
	new CostT9 = get_pcvar_num(T_item_9)
	switch(key) {
		case 0: {
			if(user_money >= CostT1 && alive && team == 1 && !g_HasWeapon[id]) {
				clear_bit(g_PlayerSuperKnife, id)
				engclient_cmd(id, "weapon_knife")
				set_pev(id, pev_viewmodel2, OTVERTKA_V_MODEL)
				set_pev(id, pev_weaponmodel2, OTVERTKA_P_MODEL)
				g_Otvertka[id] = true
				g_HasWeapon[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT1)
			}
			else if(g_HasWeapon[id]) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "ALREADY_HAVE")
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 1: {
			if(user_money >= CostT2 && alive && team == 1 && !g_HasWeapon[id]) {
				clear_bit(g_PlayerSuperKnife, id)
				engclient_cmd(id, "weapon_knife")
				set_pev(id, pev_viewmodel2, KATANA_V_MODEL)
				set_pev(id, pev_weaponmodel2, KATANA_P_MODEL)
				g_Katana[id] = true
				g_HasWeapon[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT2)
			}
			else if(g_HasWeapon[id]) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "ALREADY_HAVE")
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 2: {
			if(user_money >= CostT3 && alive && team == 1 && !g_HasWeapon[id]) {
				clear_bit(g_PlayerSuperKnife, id)
				engclient_cmd(id, "weapon_knife")
				set_pev(id, pev_viewmodel2, ELECTRO_V_MODEL)
				set_pev(id, pev_weaponmodel2, ELECTRO_P_MODEL)
				g_Electro[id] = true
				g_HasWeapon[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT3)
			}
			else if(g_HasWeapon[id]) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "ALREADY_HAVE")
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 3: {
			if(user_money >= CostT4 && alive && team == 1) {
				fm_set_user_maxspeed(id, 500.0)
				g_speed[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT4)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 4: {
			if(user_money >= CostT5 && alive && team == 1) {
				fm_give_item(id, "weapon_hegrenade")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_smokegrenade")
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT5)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 5: {
			if(user_money >= CostT7 && alive & team == 1) {
				fm_set_user_gravity(id, 0.2)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT7)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L!", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 6: {
			if(user_money >= CostT8 && alive & team == 1) {
				drop_weapons_sec(id, 1)
				cs_set_weapon_ammo(fm_give_item(id, "weapon_usp"), 6)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT8)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 7: {
			if(user_money >= CostT9 && alive & team == 1 && fdcooldown[id] == 0) {
				set_bit(g_FreedayAuto, id)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT9)
				fdcooldown[id] = 6
			}
			else if(fdcooldown[id] > 0) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "SIX_ROUNDS")
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 8: {
			if(user_money >= CostT6 && alive & team == 1 && inviscd[id] == 0) {
				fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
				set_task(8.0, "removeinvis", id+TASK_INVISPL)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostT6)
				inviscd[id] = 6
			}
			else if(inviscd[id] > 0) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "SIX_ROUNDS")
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
	}
}

public removeinvis(id) {
	id -= TASK_INVISPL
	if(is_user_alive(id)) {
		fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "INVIS_END")
	}
}

public ShopCT(id, key) {
	    new alive = is_user_alive(id)
	    new team = get_user_team(id)
	    new user_money = jb_get_money(id)
	    new CostCT1 = get_pcvar_num(CT_item_1)
	    new CostCT2 = get_pcvar_num(CT_item_3)
	    new CostCT3 = get_pcvar_num(T_item_4)
	    switch(key) {
	    	case 0: {
			if(user_money >= CostCT1 && alive && team == 2) {
				engclient_cmd(id, "weapon_knife")
				set_pev(id, pev_viewmodel2, ELECTRO_V_MODEL)
				set_pev(id, pev_weaponmodel2, ELECTRO_P_MODEL)
				g_Electro[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostCT1)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 1: {
			if(user_money >= CostCT2 && alive && team == 2) {
				cs_set_user_armor(id, 75, CS_ARMOR_VESTHELM)
				fm_set_user_health(id, get_user_health(id) + 300)
				fm_give_item(id, "weapon_m249")
				cs_set_user_bpammo(id, CSW_M249, 200)
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostCT2)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
		case 2: {
			if(user_money >= CostCT3 && alive && team == 2) {
				fm_set_user_maxspeed(id, 500.0)
				g_speed[id] = true
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "BUY_SUCCESS")
				jb_set_money(id, user_money - CostCT3)
			}
			else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
		}
	}
}

bool:IsGrenade(i_Inflictor) {
	static s_Classname[8]
	pev(i_Inflictor, pev_classname, s_Classname, charsmax(s_Classname))
	return equal(s_Classname, "grenade") ? true : false
}

/* === GAME:ATTACK === */
public cmd_attack() {
	if (g_Simon == 0) return PLUGIN_HANDLED
	if (g_used == 0) {
		g_FreedayAutoAll = 1
		g_used = 1
		g_nogamerounds = get_pcvar_num(gp_NoGame)
		jail_open()
		g_GameMode = 6
		g_BoxStarted = 0
		entity_set_int(g_Simon, EV_INT_body, 3)
		g_Simon = 0
		set_lights("d")
		new i
		for(i = 1; i <= mxplr; i++) {
			if((is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)) {
				fm_set_user_health(i, 200)
				fm_set_user_maxspeed(i, 250.0)
				g_speed[i] = false
				fm_set_user_gravity(i, 1.0)
			}
			else if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T) {
				fm_set_user_health(i, 100)
				cs_set_user_armor(i, 50, CS_ARMOR_VESTHELM)
				g_speed[i] = false
				fm_set_user_gravity(i, 1.0)
				new item=random_num(0,11)
				if (!item) fm_give_item(i, "weapon_awp")
				else if(item < 6) fm_give_item(i, "weapon_m4a1")
				else fm_give_item(i, "weapon_ak47")
				cs_set_user_bpammo(i, CSW_AWP, 30)
				cs_set_user_bpammo(i, CSW_M4A1, 90)
				cs_set_user_bpammo(i, CSW_AK47, 90)
			}
		}
		jb_blockweapons()
	}
	return PLUGIN_HANDLED
}

/* === GAME:DEFENCE === */
public cmd_defence() {
	if (g_Simon == 0) return PLUGIN_HANDLED
	if (g_used == 0) {
		g_FreedayAutoAll = 1
		g_used = 1
		g_nogamerounds = get_pcvar_num(gp_NoGame)
		jail_open()
		g_GameMode = 8
		g_BoxStarted = 0
		entity_set_int(g_Simon, EV_INT_body, 3)
		g_Simon = 0
		set_lights("j")
		new i
		for(i = 1; i <= mxplr; i++) {
			if((is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)) {
				fm_strip_user_weapons(i)
				fm_set_user_rendering(i, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
				fm_give_item(i, "weapon_knife")
				fm_set_user_health(i, 250)
				cs_set_user_armor(i, 0, CS_ARMOR_NONE)
				fm_set_user_maxspeed(i, 250.0)
				g_speed[i] = false
				fm_set_user_gravity(i, 0.9)
			}
			else if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T) {
				fm_strip_user_weapons(i)
				fm_set_user_health(i, 100)
				cs_set_user_armor(i, 0, CS_ARMOR_NONE)
				fm_give_item(i, "weapon_m249")
				cs_set_user_bpammo(i,CSW_M249,1000)
				fm_give_item(i, "weapon_knife")
				fm_set_user_maxspeed(i, 250.0)
				g_speed[i] = false
				fm_set_user_gravity(i, 1.0)
			}
		}
		jb_blockweapons()
	}
	return PLUGIN_HANDLED
}

/* === GAME:SPARTA === */
/*public cmd_sparta(){
	if (g_Simon == 0)return PLUGIN_HANDLED
	if (g_used == 0) {
		g_FreedayAutoAll = 1
		g_used = 1
		g_nogamerounds = get_pcvar_num(gp_NoGame)
		jail_open()
		g_GameMode = 7
		g_BoxStarted = 0
		entity_set_int(g_Simon, EV_INT_body, 3)
		g_Simon = 0
		set_lights("f")
		new i
		for(i = 1; i <= g_MaxClients; i++) {
			if((is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_CT)) {
				fm_strip_user_weapons(i)
				fm_give_item(i, "weapon_m4a1")
				fm_give_item(i, "weapon_ak47")
				cs_set_user_bpammo(i, CSW_AK47, 300)
				cs_set_user_bpammo(i, CSW_M4A1, 300)
				fm_set_user_health(i, 222)
			}
			else if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T) {
				fm_strip_user_weapons(i)
				fm_set_user_health(i, 200)
				cs_set_user_armor(i, 25, CS_ARMOR_VESTHELM)
				fm_give_item(i, "weapon_knife")
				fm_give_item(i, "weapon_shield")
			}
		}
		jb_blockweapons()
	}
	return PLUGIN_HANDLED
}*/

/* === DROP WEAPONS STOCK === */
stock drop_weapons_prim(id, dropwhat) {
	static weapons[32], num, i, weaponid
	num = 0
	get_user_weapons(id, weapons, num)
	for (i = 0; i < num; i++) {
		weaponid = weapons[i]
		if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) {
			static wname[32]
			get_weaponname(weaponid, wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock drop_weapons_sec(id, dropwhat) {
	static weapons[32], num, i, weaponid
	num = 0
	get_user_weapons(id, weapons, num)
	for (i = 0; i < num; i++) {
		weaponid = weapons[i]
		if (dropwhat == 1 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)) {
			static wname[32]
			get_weaponname(weaponid, wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock drop_weapons_all(id, dropwhat) {
	static weapons[32], num, i, weaponid
	num = 0
	get_user_weapons(id, weapons, num)
	for (i = 0; i < num; i++) {
		weaponid = weapons[i]
		if (dropwhat == 1 && ((1<<weaponid) & ALL_WEAPONS_BIT_SUM)) {
			static wname[32]
			get_weaponname(weaponid, wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}


/* === HOOK === */
#if defined hook_on
public admin_hook(id) {
	if(g_GameMode > 1 || (g_Simon > 0 && cs_get_user_team(id) == CS_TEAM_T && !get_bit(g_PlayerFreeday, id)) || ~get_user_flags(id) & HOOK_LEVEL || !is_user_alive(id) || !g_SimonAllowed)
		return PLUGIN_HANDLED

	get_user_origin(id,hookorigin[id-1],3)
	ishooked[id-1] = true
	emit_sound(id,CHAN_STATIC,SOUND_HOOK,1.0,ATTN_NORM,0,PITCH_NORM)
	set_task(0.1,"hook_task",id,"",0,"ab")
	hook_task(id)
	return PLUGIN_HANDLED
}

public is_hooked(id)
	return ishooked[id-1]

public admin_hook_off(id) {
	remove_hook(id)
	return PLUGIN_HANDLED
}

public hook_task(id) {
	if(!is_user_connected(id) || !is_user_alive(id))
		remove_hook(id)

	remove_beam(id)
	if (get_pcvar_num(cvar_hookupd)) get_user_origin(id,hookorigin[id-1],3)
	emit_sound(id,CHAN_STATIC,SOUND_HOOK,0.2,ATTN_NORM,0,PITCH_NORM)
	draw_hook(id)
	new origin[3], Float:velocity[3]
	get_user_origin(id,origin)
	new distance = get_distance(hookorigin[id-1],origin)
	if(distance > 25)  {
		velocity[0] = (hookorigin[id-1][0] - origin[0]) * (2.0 * 300 / distance)
		velocity[1] = (hookorigin[id-1][1] - origin[1]) * (2.0 * 300 / distance)
		velocity[2] = (hookorigin[id-1][2] - origin[2]) * (2.0 * 300 / distance)

		entity_set_vector(id,EV_VEC_velocity,velocity)
	} else {
		entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
		remove_hook(id)
	}
}

public draw_hook(id) {
	static num[4]
	num[0] = random_num(0,255)
	num[1] = random_num(0,255)
	num[2] = random_num(0,255)
	num[3] = random_num(50,255)
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(1)					// TE_BEAMENTPOINT
	write_short(id)					// entid
	write_coord(hookorigin[id-1][0])	// origin
	write_coord(hookorigin[id-1][1])	// origin
	write_coord(hookorigin[id-1][2])	// origin
	write_short(Sbeam)				// sprite index
	write_byte(0)					// start frame
	write_byte(0)					// framerate
	write_byte(100)				// life
	write_byte(10)					// width
	write_byte(0)					// noise
	write_byte(num[0])				// r
	write_byte(num[1])				// g
	write_byte(num[2])				// b
	write_byte(num[3])				// brightness
	write_byte(0)					// speed
	message_end()
}

public remove_hook(id) {
	if(task_exists(id)) remove_task(id)
	remove_beam(id)
	ishooked[id-1] = false
}

public remove_beam(id) {
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(99) // TE_KILLBEAM
	write_short(id)
	message_end()
}
#endif

public jb_blockweapons()
	WeaponsLocked = true

public jb_unblockweapons()
	WeaponsLocked = false

public player_touchweapon(id, ent) {
	static model[32], class[32]
	if(WeaponsLocked)
		return HAM_SUPERCEDE
	
	if(is_valid_ent(id) && g_Duel != 6 && is_user_alive(ent) && cs_get_user_team(ent) == CS_TEAM_CT) {
		entity_get_string(id, EV_SZ_model, model, charsmax(model))
		if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g') {
			entity_get_string(id, EV_SZ_classname, class, charsmax(class))
			if(equal(class, "weapon_hegrenade"))
				remove_entity(id)
			
			return HAM_SUPERCEDE
		}
	}
	return HAM_IGNORED
}

#if defined supermenu_on
public supermenu(id) {
	if(~get_user_flags(id) & SUPERVIP_LEVEL || (cs_get_user_team(id) != CS_TEAM_T && cs_get_user_team(id) != CS_TEAM_CT))
		return PLUGIN_HANDLED
	
	new menuname[32], option[64]
	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "SM_MENU_NAME")
	new menu = menu_create(menuname, "supermenu_handler")
	
	// Respawn
	if (g_usedrespawns[id] < 5 && !lastdeny && g_GameMode <= 1 && !is_user_alive(id))
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_RESPAWN", 5 - g_usedrespawns[id])
	else
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_RESPAWN", 5 - g_usedrespawns[id])
	menu_additem(menu, option, "1", 0)
	
	// Health
	if (cs_get_user_team(id) == CS_TEAM_CT && g_usedhp[id] == 0 && is_user_alive(id) && g_GameMode <= 1)
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_HP")
	else
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_HP")
	menu_additem(menu, option, "2", 0)
	
	// Grenades
	if (g_usedgrenades[id] || !is_user_alive(id) || g_GameMode > 1)
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_GRENADES")
	else
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_GRENADES")
	menu_additem(menu, option, "3", 0)
	
	// Gravity
	if (g_usedgravity[id] > 0 || g_GameMode > 1 || !is_user_alive(id))
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_GRAVITY")
	else
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_GRAVITY")
	menu_additem(menu, option, "4", 0)
	
	// Speed
	if (g_usedturbo[id] > 0 || g_GameMode > 1 || !is_user_alive(id))
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_SPEED")
	else
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_SPEED")
	menu_additem(menu, option, "5", 0)
	
	// Money
	if (!g_usedmoney[id])
		formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_MONEY")
	else
		formatex(option, charsmax(option), "\d%L^n", LANG_SERVER, "SM_MONEY")
	menu_additem(menu, option, "6", 0)
	
	if(g_GameMode <= 1 || g_GameMode == 99) 
		formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_DISABLE")
	else
		formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SM_DISABLE")
	menu_additem(menu, option, "7", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
	return PLUGIN_HANDLED
}

public supermenu_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	switch (key) {
		case 1: {
			if(g_usedrespawns[id] < 5 && !is_user_alive(id) && !lastdeny && g_GameMode <= 1) {
				ExecuteHamB(Ham_CS_RoundRespawn, id)
				fm_give_item(id, "weapon_knife")
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_T) ColorChat(0, RED, "%L", LANG_SERVER, "SM_T_RESPAWN", nick)
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_RESPAWN", nick)
				g_usedrespawns[id]++
			} else if (g_usedrespawns[id] == 5) {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_RESPAWN_COOLDOWN")
			} else if (is_user_alive(id)) {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CANT_RESPAWN")
			}
		}
		case 2: {
			if (cs_get_user_team(id) == CS_TEAM_T) {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_T_CANT_HEAL")
			} else if (cs_get_user_team(id) == CS_TEAM_CT && g_usedhp[id] == 0 && is_user_alive(id) && g_GameMode <= 1) {
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_HEAL", nick)
				fm_set_user_health(id, get_user_health(id) + 300)
				cs_set_user_armor(id, get_user_armor(id) + 50, CS_ARMOR_VESTHELM)
				g_usedhp[id] = 5
			} else if (cs_get_user_team(id) == CS_TEAM_CT) {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CT_CANT_HEAL")
			}
		}
		case 3: {
			if(!g_usedgrenades[id] && is_user_alive(id) && g_GameMode <= 1){
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_T) ColorChat(0, RED, "%L", LANG_SERVER, "SM_T_GRENADES")
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_GRENADES", nick)
				if (cs_get_user_team(id) == CS_TEAM_T) fm_give_item(id, "weapon_hegrenade")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_flashbang")
				fm_give_item(id, "weapon_smokegrenade")
				g_usedgrenades[id] = true
			} else {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CANT_GRENADES")
			}
		}
		case 4: {
			if (g_usedgravity[id] == 0 && is_user_alive(id) && g_GameMode <= 1) {
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_T) ColorChat(0, RED, "%L", LANG_SERVER, "SM_T_JUMP", nick)
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_JUMP", nick)
				fm_set_user_gravity(id, 0.35)
				g_usedgravity[id] = 2
			} else {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CANT_JUMP")
			}
		}
		case 5: {
			if (g_usedturbo[id] == 0 && is_user_alive(id) && g_GameMode <= 1) {
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_T) ColorChat(0, RED, "%L", LANG_SERVER, "SM_T_SPEED", nick)
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_SPEED", nick)
				fm_set_user_maxspeed(id, 500.0)
				g_speed[id] = true
				g_usedturbo[id] = 2
			} else {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CANT_SPEED")
			}
		}
		case 6: {
			if (g_usedmoney[id]) {
				client_cmd(id, "spk %s", SOUND_ERROR)
				client_print(id, print_center, "%L", LANG_SERVER, "SM_CANT_MONEY")
			} else {
				new nick[64]
				get_user_name(id, nick, 63)
				if (cs_get_user_team(id) == CS_TEAM_T) ColorChat(0, RED, "%L", LANG_SERVER, "SM_T_MONEY", nick)
				if (cs_get_user_team(id) == CS_TEAM_CT) ColorChat(0, BLUE, "%L", LANG_SERVER, "SM_CT_MONEY", nick)
				jb_set_money(id, jb_get_money(id) + 20)
				g_usedmoney[id] = true
			}
		}
		case 7: {
			if(g_GameMode > 1 && g_GameMode != 99)
				return PLUGIN_HANDLED
			
			g_speed[id] = false
			fm_set_user_maxspeed(id, 250.0)
			fm_set_user_gravity(id, 1.0)
		}
	}
	return PLUGIN_HANDLED
}
#endif

/* === SERVER MENU === */
#if defined jailmenu_on
public jailmenu(id) {
	new option[64], header[128]
	if(g_PlayerLast != id || g_GameMode != 99) {
		remove_task(TASK_LASTPLAYER)
		set_task(1.0, "task_last", TASK_LASTPLAYER)
	}
	formatex(header, charsmax(header), "\y%L", LANG_SERVER, "SRVMENU")
	new menu = menu_create(header, "jailmenu_handler")
	if (g_PlayerLast !=id || !is_user_alive(id) || g_GameMode != 99 || g_RoundEnd || g_Duel > 0) formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_LAST")
	else formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_LAST")
	menu_additem(menu, option, "1", 0)
	if (is_user_alive(id) && g_GameMode < 2) formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_SHOP")
	else if(is_user_alive(id) && g_GameMode == 3) {
		if(cs_get_user_team(id) == CS_TEAM_T) formatex(option, charsmax(option), "\y%L", LANG_SERVER, "SRVMENU_SHOP_Z")
		else if(cs_get_user_team(id) == CS_TEAM_CT) formatex(option, charsmax(option), "\y%L", LANG_SERVER, "SRVMENU_SHOP_H")
		else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_SHOP")
	}
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_SHOP")
	menu_additem(menu, option, "2", 0)
	if (g_Simon == 0 && g_GameMode == 1 && cs_get_user_team(id) == CS_TEAM_CT) formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_SIMON")
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_SIMON")
	menu_additem(menu, option, "3", 0)
	if ((g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) && g_GameMode == 1) formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_SMENU")
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_SMENU")
	menu_additem(menu, option, "4", 0)
	if (g_GameMode != 1 || g_Simon == id) formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_OPEN")
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "SRVMENU_OPEN")
	menu_additem(menu, option, "5", 0)
	#if defined roulette_on
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_ROULETTE")
	menu_additem(menu, option, "6", 0)
	#endif
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SRVMENU_MUSIC")
	menu_additem(menu, option, "7", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
	return PLUGIN_HANDLED
}

public jailmenu_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	switch (key) {
		case 1: {
			if(cs_get_user_team(id) == CS_TEAM_T && is_user_alive(id)) cmd_lastrequest(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "CANT_OPEN_LR")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
			}
		}
		case 2: {
			if (is_user_alive(id) && g_GameMode < 2) clcmd_shop(id)
			else if(is_user_alive(id) && g_GameMode == 3) shop_zombie(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "CANT_OPEN_SHOP")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
			}
		}
		case 3: {
			if (g_Simon == 0 && g_GameMode == 1 && cs_get_user_team(id) == CS_TEAM_CT) cmd_simon(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "CANT_SIMON")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
			}
		}
		case 4: {
			if(g_GameMode != 1) {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_NOOPEN_GM")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
				return PLUGIN_HANDLED
			}
			if (g_Simon == id || get_user_flags(id) & SUPERADMIN_LEVEL) cmd_simonmenu(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RIGHTS_OR_SIMON")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
			}
		}
		case 5: {
			if (g_GameMode != 1 || g_Simon == id) {
				jail_open()
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JAILS_OPENED")
			}
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "CANT_OPEN_JAILS")
				client_cmd(id, "spk %s", SOUND_ERROR)
				jailmenu(id)
			}
		}
		#if defined roulette_on
		case 6: roulettemenu(id)
		#endif
		case 7: musicmenu(id)
	}
	return PLUGIN_HANDLED
}
#endif

/* === AUTO FREEDAY === */
public freeday_all() {
	new Players[32], playerCount, i
	g_Simon = 0
	g_FreedayAutoAll = 0
	client_print(0, print_console, "[Fantick] Event: Auto Freeday")
	g_GameMode = 0
	g_nogamerounds++
	remove_task(TASK_NOSIMON)
	emit_sound(0, CHAN_AUTO, SOUND_BELL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	hud_status(0)
	g_PlayerFreeday = 0
	g_systime = get_systime()
	jail_open()
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		remove_task(TASK_FREEENDPL + Players[i])
		entity_set_int(Players[i], EV_INT_skin, 3)
		if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", MUSIC_FD)
	}
	remove_task(TASK_ROUNDEND)
	set_task(get_pcvar_float(cvar_fdlen), "task_freeday_end",TASK_ROUNDEND)
}

/* === DUEL EFFECT === */
public Beacon(id) {
	id -= TASK_BEACON
	if(!is_user_connected(id))
		return PLUGIN_HANDLED
	
	if(cs_get_user_team(id) == CS_TEAM_CT) {
		static origin[3]
		get_user_origin(id, origin)
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_BEAMCYLINDER)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2]-20)	
		write_coord(origin[0]) 
		write_coord(origin[1]) 
		write_coord(origin[2]+200)
		write_short(BeaconSprite)
		write_byte(0)
		write_byte(1)
		write_byte(6)
		write_byte(2) 
		write_byte(1) 
		write_byte(0) 
		write_byte(0) 
		write_byte(255) 
		write_byte(255)
		write_byte(0)
		message_end()
	} else {
		static origin[3]
		get_user_origin(id, origin)
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_BEAMCYLINDER)
		write_coord(origin[0])
		write_coord(origin[1])
		write_coord(origin[2]-20)	
		write_coord(origin[0]) 
		write_coord(origin[1])
		write_coord(origin[2]+200)
		write_short(BeaconSprite)
		write_byte(0)
		write_byte(1)
		write_byte(6)
		write_byte(2) 
		write_byte(1) 
		write_byte(255) 
		write_byte(0) 
		write_byte(0) 
		write_byte(255)
		write_byte(0)
		message_end()
	}
	set_task(1.0, "Beacon", id + TASK_BEACON)	
	return PLUGIN_CONTINUE
}

/* === END ROUND DANCE=== */
#if defined er_fade
public fadescreen() {
	message_begin(MSG_BROADCAST, get_user_msgid("ScreenFade"))
	write_short(1<<12)			// Duration
	write_short(1<<12)			// Hold time
	write_short(0x0001)			// Fade type
	write_byte (random_num(20, 255))	// Red
	write_byte (random_num(20, 255))	// Green
	write_byte (random_num(20, 255))	// Blue
	write_byte (255)			// Alpha
	message_end()
}
#endif

/* === ABOUT === */
public about(id) {
	// DO NOT TOUCH THIS CODE
	// I won't give updates to you if you change this
	ColorChat(id, GREEN, "[%s] ^x01Версия:^x04 %s^x01. Собрал сборку^x04 BaRSiK^x01. Skype^x04 baarsik2", PREFIX, VERSION)
	ColorChat(id, NORMAL, "Копия сделана специально для^x04 %s^x01", COPYFOR)
	ColorChat(id, NORMAL, "Связь с администратором: Skype^x04 %s", ADMIN_SKYPE)
}

/* === ROULETTE === */
#if defined roulette_on
public roulettemenu(id) {
	new option[64], header[128]
	formatex(header, charsmax(header), "%L", LANG_SERVER, "RM_HEADER")
	new menu = menu_create(header, "roulettemenu_handler")
	if(!g_has_revolver[id] && is_user_alive(id) && jb_get_money(id) >= 30 && g_GameMode <= 1) formatex(option, charsmax(option), "%L", LANG_SERVER, "RM_BUY")
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "RM_BUY")
	menu_additem(menu, option, "1", 0)
	if(g_has_revolver[id] && is_user_alive(id) && g_GameMode <= 1) formatex(option, charsmax(option), "%L", LANG_SERVER, "RM_LUCK")
	else formatex(option, charsmax(option), "\d%L", LANG_SERVER, "RM_LUCK")
	menu_additem(menu, option, "2", 0)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
}

public roulettemenu_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	switch (key) {
	case 1: {
		if(jb_get_money(id) >= 30 && is_user_alive(id) && !g_has_revolver[id] && g_GameMode <= 1) {
			jb_set_money(id, jb_get_money(id) - 30)
			g_has_revolver[id] = true
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_OKBUY")
			roulettemenu(id)
		} else if(g_has_revolver[id]) {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_ALREADY")
			roulettemenu(id)
		} else if(!is_user_alive(id)) {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_DEAD")
			roulettemenu(id)
		} else if(g_GameMode > 1) {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_GAME")
			roulettemenu(id)
		} else {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
			roulettemenu(id)
		}
	}
	case 2: {
		if(g_has_revolver[id] && is_user_alive(id) && g_GameMode <= 1) {
			tryluck(id)
		} else if (!is_user_alive(id)) {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_DEAD")
		} else if(g_GameMode > 1) {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_GAME")
			roulettemenu(id)
		} else {
			client_cmd(id, "spk %s", SOUND_ERROR)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_NO_REVOLVER")
			roulettemenu(id)
		}
	}
	}
	return PLUGIN_HANDLED
}

public tryluck(id) {
	new lucky = random_num(0, 22)
	if (0 <= lucky <= 11) {
		if(get_user_health(id) <= 100) {
			user_kill(id, 1)
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "RM_SHOT")
		} else {
			fm_set_user_health(id, get_user_health(id) - 100)
			ColorChat(id, GREEN, "[%s]^x01 %L^x04 %L", PREFIX, LANG_SERVER, "RM_SHOT_HP", LANG_SERVER, "RM_SHOT_HP_REWARD")
		}
	} else if (12 <= lucky <= 15) {
		jb_set_money(id, jb_get_money(id) + 20)
		ColorChat(id, GREEN, "[%s]^x01 %L^x04 20$", PREFIX, LANG_SERVER, "RM_MONEY")
	}
	else if (16 <= lucky <= 18) {
		if(cs_get_user_team(id) == CS_TEAM_T) {
			drop_weapons_sec(id, 1)
			cs_set_weapon_ammo(fm_give_item(id, "weapon_deagle"), 5)
			client_cmd(id, "weapon_knife")
			ColorChat(id, GREEN, "[%s]^x01 %L^x04 Deagle", PREFIX, LANG_SERVER, "RM_DEAGLE")
		} else {
			fm_set_user_health(id, get_user_health(id) + 100)
			cs_set_user_armor(id, get_user_armor(id) + 20, CS_ARMOR_VESTHELM)
			ColorChat(id, GREEN, "[%s]^x01 %L^x04 %L", PREFIX, LANG_SERVER, "RM_HP", LANG_SERVER, "RM_HP_REWARD")
		}
	} else if (lucky == 19) {
		fm_set_user_maxspeed(id, 500.0)
		g_speed[id] = true
		ColorChat(id, GREEN, "[%s]^x01 %L ^x04 %L", PREFIX, LANG_SERVER, "RM_SPEED", LANG_SERVER, "RM_SPEED_REWARD")
	} else if (lucky == 20) {
		fm_set_user_gravity(id, 0.35)
		ColorChat(id, GREEN, "[%s]^x01 %L^x04 %L", PREFIX, LANG_SERVER, "RM_GRAVITY", LANG_SERVER, "RM_GRAVITY_REWARD")
	}
	else if (lucky == 21) {
		jb_set_money(id, jb_get_money(id) + 50)
		ColorChat(id, GREEN, "[%s]^x01 %L^x04 50$", PREFIX, LANG_SERVER, "RM_MONEY_GREAT")
	} else if (lucky == 22) {
		engclient_cmd(id, "weapon_knife")
		set_pev(id, pev_viewmodel2, KATANA_V_MODEL)
		set_pev(id, pev_weaponmodel2, KATANA_P_MODEL)
		g_Katana[id] = true
		g_HasWeapon[id] = true
		ColorChat(id, GREEN, "[%s]^x01 %L^x04 %L", PREFIX, LANG_SERVER, "RM_KATANA", LANG_SERVER, "RM_KATANA_REWARD")
	}
}
#endif

/* === MUSIC MENU === */
public musicmenu(id) {
	new option[64], header[128]
	formatex(header, charsmax(header), "%L", LANG_SERVER, "MM_HEADER")
	new menu = menu_create(header, "musicmenu_handler")
	if (!g_mp3[id]) formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_MUSIC", LANG_SERVER, "JBB_OFF")
	else formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_MUSIC", LANG_SERVER, "JBB_ON")
	menu_additem(menu, option, "1", 0)
	#if defined rs_on
	if (!g_ermp3[id]) formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_ERMUSIC", LANG_SERVER, "JBB_OFF")
	else formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_ERMUSIC", LANG_SERVER, "JBB_ON")
	menu_additem(menu, option, "2", 0)
	#endif
	if (!g_mp3menu[id]) formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_MUSIC_MENU", LANG_SERVER, "JBB_OFF")
	else formatex(option, charsmax(option), "%L: \y[%L]", LANG_SERVER, "MM_MUSIC_MENU", LANG_SERVER, "JBB_ON")
	menu_additem(menu, option, "3", 0)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "MM_STOPMUSIC")
	menu_additem(menu, option, "4", 0)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_MORE")
	menu_setprop(menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_BACK")
	menu_setprop(menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L^n", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, option)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
}

public musicmenu_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	switch (key) {
	case 1: {
		if(g_mp3[id]) {
			g_mp3[id] = 0
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICOFF")
			musicmenu(id)
		} else {
			g_mp3[id] = 1
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICON")
			musicmenu(id)
		}
	}
	#if defined rs_on
	case 2: {
		if(g_ermp3[id]) {
			g_ermp3[id] = 0
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICOFF")
			musicmenu(id)
		} else {
			g_ermp3[id] = 1
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICON")
			musicmenu(id)
		}
	}
	#endif
	case 3: {
		if(g_mp3menu[id]) {
			g_mp3menu[id] = 0
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICOFF")
			musicmenu(id)
		} else {
			g_mp3menu[id] = 1
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_MUSICON")
			musicmenu(id)
		}
	}
	case 4: {
		client_cmd(id, "mp3 stop")
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "MM_STOPPED")
		musicmenu(id)
	}
	}
	return PLUGIN_HANDLED
}

/* === GAME: MAGIC === */
public cmd_game_magic() {
	if (g_GameMode != 1)
		return PLUGIN_CONTINUE
	
	g_FreedayAutoAll = 1
	jail_open()
	g_GameMode = 4
	g_MagicStarted = 0
	g_BoxStarted = 0
	g_systime = get_systime()
	jb_blockweapons()
	entity_set_int(g_Simon, EV_INT_body, 3)
	g_Simon = 0
	g_nogamerounds = get_pcvar_num(gp_NoGame)
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			if (g_mp3[Players[i]]) client_cmd(Players[i], "mp3 play %s", PREMUSIC_MAGIC)
			player_strip_weapons(Players[i])
			fm_give_item(Players[i], "weapon_knife")
			fm_set_user_health(Players[i], 100)
			cs_set_user_armor(Players[i], 0, CS_ARMOR_NONE)
			g_magic_color[Players[i]] = random_num(0, 7)
		}
	}
	set_lights("h")
	set_task(20.0,"cmd_magic_start",TASK_GIVEITEMS)
	return PLUGIN_CONTINUE
}

public cmd_magic_start(taskid) {
	remove_task(taskid)
	g_MagicStarted = 1
	new Players[32]
	new playerCount, i
	get_players(Players, playerCount, "ac")
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			current_weapon(Players[i])
			fm_set_user_health(Players[i], 100)
			cs_set_user_armor(Players[i], 0, CS_ARMOR_NONE)
		}
	}
}

public do_skill(id) {
	emit_sound(id, CHAN_WEAPON, SOUND_MAGIC_SKILL, 1.0, ATTN_NORM, 0, PITCH_NORM)
	message_begin(MSG_ONE, SVC_WEAPONANIM, _, id)
	write_byte(4)
	write_byte(pev(id, pev_body))
	message_end()
	entity_set_int(id, EV_INT_sequence, 10)
	launch_light(id+TASK_ATTACK)
}

public launch_light(taskid) {
	new id = taskid - TASK_ATTACK
	if (task_exists(id+TASK_ATTACK)) remove_task(id+TASK_ATTACK)
	if (!is_user_alive(id)) return
	
	// check
	new Float: fOrigin[3], Float:fAngle[3],Float: fVelocity[3]
	pev(id, pev_origin, fOrigin)
	pev(id, pev_view_ofs, fAngle)
	fm_velocity_by_aim(id, 2.0, fVelocity, fAngle)
	fAngle[0] *= -1.0
	
	// create ent
	new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	set_pev(ent, pev_classname, "magic_skill")
	engfunc(EngFunc_SetModel, ent, "models/w_hegrenade.mdl")
	set_pev(ent, pev_mins, Float:{-1.0, -1.0, -1.0})
	set_pev(ent, pev_maxs, Float:{1.0, 1.0, 1.0})
	set_pev(ent, pev_origin, fOrigin)
	fOrigin[0] += fVelocity[0]
	fOrigin[1] += fVelocity[1]
	fOrigin[2] += fVelocity[2]
	set_pev(ent, pev_movetype, MOVETYPE_BOUNCE)
	set_pev(ent, pev_gravity, 0.01)
	fVelocity[0] *= 1000
	fVelocity[1] *= 1000
	fVelocity[2] *= 1000
	set_pev(ent, pev_velocity, fVelocity)
	set_pev(ent, pev_owner, id)
	set_pev(ent, pev_angles, fAngle)
	set_pev(ent, pev_solid, SOLID_BBOX) //store the enitty id
	
	// invisible ent
	fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
	
	new magic_red = define_color(id, 1)
	new magic_green = define_color(id, 2)
	new magic_blue = define_color(id, 3)
	
	//show trail   
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)
	write_short(ent) //entity
	write_short(Sbeam) //model
	write_byte(5) //life
	write_byte(3) //width
	write_byte(magic_red)
	write_byte(magic_green)
	write_byte(magic_blue)
	write_byte(200)
	message_end()
	return
}

public define_color(id, num) {
	if(!is_user_connected(id))
		return 0
	
	switch(g_magic_color[id]) {
		case 1: {
			if(num == 1) return 255
			else if(num == 2) return 0
			else if(num == 3) return 0
		}
		case 2: {
			if(num == 1) return 0
			else if(num == 2) return 255
			else if(num == 3) return 0
		}
		case 3: {
			if(num == 1) return 124
			else if(num == 2) return 252
			else if(num == 3) return 0
		}
		case 4: {
			if(num == 1) return 255
			else if(num == 2) return 215
			else if(num == 3) return 0
		}
		case 5: {
			if(num == 1) return 255
			else if(num == 2) return 20
			else if(num == 3) return 147
		}
		case 6: {
			if(num == 1) return 0
			else if(num == 2) return 191
			else if(num == 3) return 255
		}
		case 7: {
			if(num == 1) return 144
			else if(num == 2) return 238
			else if(num == 3) return 144
		}
		default: {
			if(num == 1) return 0
			else if(num == 2) return 0
			else if(num == 3) return 255
		}
	}
	return 0
}

public fw_Touch(ent, victim) {
	if (!pev_valid(ent)) return FMRES_IGNORED
	
	new EntClassName[32]
	entity_get_string(ent, EV_SZ_classname, EntClassName, charsmax(EntClassName))
	if (equal(EntClassName, "magic_skill")) {
		light_exp(ent, victim)
		remove_entity(ent)
	}
	return FMRES_IGNORED
}

light_exp(ent, victim) {
	if (!pev_valid(ent))
		return
	
	new attacker = pev(ent, pev_owner)
	new randoms = random_num(30, 50)
	if (is_user_alive(victim) && is_user_connected(attacker)) if(cs_get_user_team(victim) == cs_get_user_team(attacker)) {
		if(get_user_health(victim) > randoms) {
			fm_set_user_health(victim, get_user_health(victim) - randoms)
			message_begin(MSG_ONE, get_user_msgid("ScreenShake"), _, victim)
			write_short(12 << 12)
			write_short(5 << 12)
			write_short(8 << 12)
			message_end()
			message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, victim)
			write_short(1<<10)
			write_short(1<<10)
			write_short(0x0000)
			write_byte(200)
			write_byte(0)
			write_byte(0)
			write_byte(75)
			message_end()
		} else {
			g_victim = victim
			g_killer = attacker
			user_slap(victim, randoms, 1)
			jb_set_money(attacker, jb_get_money(attacker) + 10)
		}
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, attacker)
		write_short(1<<10)
		write_short(1<<10)
		write_short(0x0000)
		write_byte(0)
		write_byte(0)
		write_byte(200)
		write_byte(75)
		message_end()
	}
	static Float:origin[3]
	pev(ent, pev_origin, origin)
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION) // TE_EXPLOSION
	write_coord(floatround(origin[0])) // origin x
	write_coord(floatround(origin[1])) // origin y
	write_coord(floatround(origin[2])) // origin z
	write_short(ExplodeSprite) // sprites
	write_byte(12) // scale in 0.1's
	write_byte(30) // framerate
	write_byte(14) // flags
	message_end() // message end
}

public player_killed_pre(id, ida, sgibs) {
	new gmsgDeathMsg = get_user_msgid("DeathMsg")
	if(id == g_victim && is_user_connected(g_killer)) {
		set_msg_block(gmsgDeathMsg, BLOCK_ONCE)
		message_begin(MSG_ALL, gmsgDeathMsg)
		write_byte(g_killer)
		write_byte(id)
		write_byte(1)
		write_string("knife")
		message_end()
		g_killer = 0
		g_victim = 0
	}
}

public fw_Knife_PrimaryAttack_Post(knife) {
	static id
	id = get_pdata_cbase(knife, 41, 4)
	if(is_user_connected(id) && g_GameMode == 4 && g_MagicStarted) {
		do_skill(id)
		set_pdata_float(knife, 46, 2.0, 4)
		set_pdata_float(knife, 47, 2.0, 4)
		set_pdata_float(knife, 48, 2.0, 4)
	}
	return HAM_IGNORED
}

public fw_Knife_SecondaryAttack_Post(knife) {
	static id
	id = get_pdata_cbase(knife, 41, 4)
	if(is_user_connected(id) && g_GameMode == 4 && g_MagicStarted) {
		do_skill(id)
		set_pdata_float(knife, 46, 2.0, 4)
		set_pdata_float(knife, 47, 2.0, 4)
		set_pdata_float(knife, 48, 2.0, 4)
	}
	return HAM_IGNORED
}

/* === Money fix === */
public on_money_change(msg_id, msg_dest, msg_entity) {
	if(!is_user_connected(msg_entity))
		return PLUGIN_CONTINUE
	
	cs_set_user_money(msg_entity, jb_get_money(msg_entity))
	return PLUGIN_HANDLED
}

/* === ROLL === */
public cmd_roll(id) {
	if(!is_user_alive(id) || !can_roll[id]){
		client_print(id, print_center, "%L", LANG_SERVER, "JBB_ROLLCD")
		return PLUGIN_HANDLED
	}
	new name[32]
	new roll = random_num(1, 100)
	get_user_name(id, name, charsmax(name))
	client_print(0, print_chat, "%s %L %d (1-100)", name, LANG_SERVER, "JBB_ROLLED", roll)
	can_roll[id] = false
	set_task(40.0, "roll_reset", TASK_ROLLCD + id)
	return PLUGIN_HANDLED
}

public roll_reset(id) {
	if(id >= TASK_ROLLCD) id -= TASK_ROLLCD
	if(is_user_connected(id)) can_roll[id] = true
}

#if defined teammanager_on
public message_ShowMenu(iMsgid, iDest, id) {
	static sMenuCode[iMaxLen]
	get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1)
	if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC)) {
		set_autojoin_task(id, iMsgid)
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public message_VGUIMenu(iMsgid, iDest, id) {
	if(get_msg_arg_int(1) != VGUI_JOIN_TEAM_NUM)
		return PLUGIN_CONTINUE
	
	set_autojoin_task(id, iMsgid)
	return PLUGIN_HANDLED
}

public gamemenu(id) {
	#if defined teammanager_on
	if(cs_get_user_team(id) == CS_TEAM_UNASSIGNED) {
		chooseteam(id)
		return PLUGIN_HANDLED
	}
	new lang[128]
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_GMMENU")
	new menu = menu_create(lang, "gamemenu_handler")
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SRVMENU")
	menu_additem(menu, lang, "1", 0)
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_GM_CHOOSE_TEAM")
	menu_additem(menu, lang, "2", 0)
	if(get_user_flags(id) & VIP_LEVEL) formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SRVMENU_VIPMENU")
	else formatex(lang, charsmax(lang), "\d%L", LANG_SERVER, "SRVMENU_VIPMENU")
	menu_additem(menu, lang, "3", 0)
	if(get_user_flags(id) & SUPERVIP_LEVEL) formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SRVMENU_SM")
	else formatex(lang, charsmax(lang), "\d%L", LANG_SERVER, "SRVMENU_SM")
	menu_additem(menu, lang, "4", 0)
	#if defined donate_on
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_DONATE_MENUNAME")
	menu_additem(menu, lang, "5", 0)
	#endif
	// DO NOT CHANGE OR DELETE ITEM BELOW
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SRVMENU_ABOUT")
	menu_additem(menu, lang, "99", 0)
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(menu, MPROP_EXITNAME, lang)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	menu_display(id, menu, 0)
	return PLUGIN_HANDLED
	#else
	jailmenu(id)
	return PLUGIN_HANDLED
	#endif
}

#if defined teammanager_on
public gamemenu_handler(id, menu, item) {
	if(item < 0) return PLUGIN_CONTINUE
	new cmd[3], access, callback
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	switch (key) {
		case 1: jailmenu(id)
		case 2: chooseteam(id)
		case 3: {
			if(get_user_flags(id) & VIP_LEVEL) VIPMenu(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "ACCESS_DENIED")
				client_cmd(id, "spk %s", SOUND_ERROR)
				gamemenu(id)
			}
		}
		case 4: {
			if(get_user_flags(id) & SUPERVIP_LEVEL) supermenu(id)
			else {
				ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "ACCESS_DENIED")
				client_cmd(id, "spk %s", SOUND_ERROR)
				gamemenu(id)
			}
		}
		#if defined donate_on
		case 5: donatemenu(id)
		#endif
		case 99: about(id) // DO NOT CHANGE OR DELETE
	}
	return PLUGIN_HANDLED
}
#endif

#if defined donate_on
public donatemenu(id) {
	if(!is_user_connected(id))
		return PLUGIN_CONTINUE
	
	new Float:cooldown = get_gametime() - g_delay[id]
	if(cooldown < 30.0 && g_delay[id] != 0.0) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_CD", 30-floatround(cooldown))
		return PLUGIN_HANDLED
	}
	new buff[512], option[32], total
	formatex(buff, charsmax(buff), "%L", LANG_SERVER, "JBB_DONATE_MENUNAME")
	new i_Menu = menu_create(buff, "player_select_sub")
	new s_Players[32], i_Num, i_Player
	new s_Name[32], s_Player[10]
	get_players(s_Players, i_Num)
	for (new i; i < i_Num; i++) {
		i_Player = s_Players[i]
		get_user_name(i_Player, s_Name, charsmax(s_Name))
		num_to_str(i_Player, s_Player, charsmax(s_Player))
		if(i_Player != id) {
			menu_additem(i_Menu, s_Name, s_Player, 0)
			total++
		}
	}
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_MORE")
	menu_setprop(i_Menu, MPROP_NEXTNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_BACK")
	menu_setprop(i_Menu, MPROP_BACKNAME, option)
	formatex(option, charsmax(option), "%L", LANG_SERVER, "SM_CLOSE")
	menu_setprop(i_Menu, MPROP_EXITNAME, option)
	menu_setprop(i_Menu, MPROP_NUMBER_COLOR, "\w")
	if(total > 0) menu_display(id, i_Menu, 0)
	else ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_NOONE")
	return PLUGIN_HANDLED
}

public donate_hook(id) {
	new param[6]
	read_argv(1, param, charsmax(param))
	for (new x; x < strlen(param); x++) {
		if(!isdigit(param[x])) {
			ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_ONLYDIGIT")
			return PLUGIN_HANDLED
		}
	}
	new Float:cooldown = get_gametime() - g_delay[id]
	if(cooldown > 60.0 && g_delay[id] != 0.0) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_CD", 60-floatround(cooldown))
		return PLUGIN_HANDLED
	}
	give_money(id, str_to_num(param))
	return PLUGIN_HANDLED
}

public player_select_sub(id, menu, item) {
	if (item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new Float:cooldown = get_gametime() - g_delay[id]
	if(cooldown > 60.0 && g_delay[id] != 0.0) {
		ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_CD", 60-floatround(cooldown))
		return PLUGIN_HANDLED
	}
	new s_Data[6], s_Name[64], i_Access, i_Callback
	menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
	new i_Player = str_to_num(s_Data)
	v_id[id]=i_Player
	menu_destroy(menu)
	client_cmd(id, "messagemode ^"donate^"")
	ColorChat(id, GREEN, "[%s]^x01 %L^x04 10$", PREFIX, LANG_SERVER, "JBB_DONATE_NOW")
	return PLUGIN_HANDLED
}

public give_money(id, money) {
	if(jb_get_money(id) < money) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "NO_MONEY")
	else if(!is_user_connected(v_id[id])) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_DISC")
	else if(v_id[id] == id) ColorChat(id, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_SELF")
	else if(money < 10) ColorChat(id, GREEN, "[%s]^x01 %L^x04 10$ (%d)", PREFIX, LANG_SERVER, "JBB_DONATE_MIN", money)
	else {
		g_delay[id] = get_gametime()
		new d_name[33], r_name[33], newmoney
		get_user_name(id, d_name, charsmax(d_name))
		get_user_name(v_id[id], r_name, charsmax(r_name))
		newmoney = floatround(money*0.9)
		ColorChat(0, GREEN, "[%s]^x01 %L", PREFIX, LANG_SERVER, "JBB_DONATE_DONE", d_name, newmoney, r_name)
		jb_set_money(v_id[id], jb_get_money(v_id[id]) + newmoney)
		jb_set_money(id, jb_get_money(id) - money)
	}
}
#endif

public chooseteam(id) {
	count_teams()
	new formula = TCount - CTCount * 4
	new Float:gt = get_gametime() - gametime
	new Float:rt = get_cvar_float("mp_roundtime") * 60.0
	new lang[128]
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "JBB_CHOOSE_TEAM")
	new menu = menu_create(lang, "chooseteam_handler")
	if(cs_get_user_team(id) != CS_TEAM_T && (gt < rt - 1.0 || TCount == 0)) formatex(lang, charsmax(lang), "%L [\r%d\w]", LANG_SERVER, "JBB_CHOOSE_T", TCount)
	else formatex(lang, charsmax(lang), "\d%L [\r%d\d]", LANG_SERVER, "JBB_CHOOSE_T", TCount)
	menu_additem(menu, lang, "1", 0)
	if((formula > 1 || CTCount == 0) && (gt < rt - 1.0 || CTCount == 0) && cs_get_user_team(id) != CS_TEAM_CT && g_GameMode != 5) formatex(lang, charsmax(lang), "%L [\r%d\w]", LANG_SERVER, "JBB_CHOOSE_CT", CTCount)
	else formatex(lang, charsmax(lang), "\d%L [\r%d\d]", LANG_SERVER, "JBB_CHOOSE_CT", CTCount)
	menu_additem(menu, lang, "2", 0)
	formatex(lang, charsmax(lang), "%L", LANG_SERVER, "SM_CLOSE")
	if(cs_get_user_team(id) != CS_TEAM_UNASSIGNED) menu_setprop(menu, MPROP_EXITNAME, lang)
	else menu_setprop(menu, MPROP_EXIT, -1)
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\w")
	if(cs_get_user_team(id) == CS_TEAM_UNASSIGNED && gt < rt - 1.0) {
		new iMsgBlock = get_msg_block(OFFSET_TEAM)
		set_msg_block(OFFSET_TEAM, BLOCK_SET)
		new MsgBlock = get_msg_block(96)
		set_msg_block(96, BLOCK_SET)
		engclient_cmd(id, "jointeam", " 1")
		engclient_cmd(id, "joinclass", " 1")
		set_msg_block(OFFSET_TEAM, iMsgBlock)
		set_msg_block(96, MsgBlock)
	}
	else menu_display(id, menu, 0)
	return PLUGIN_HANDLED
}

public chooseteam_handler(id, menu, item) {
	new cmd[3], access, callback
	static restore, vgui, msgblock
	if(item == MENU_EXIT) {
		msgblock = get_msg_block(get_user_msgid("ShowMenu"))
		set_msg_block(get_user_msgid("ShowMenu"), BLOCK_ONCE)
		set_msg_block(get_user_msgid("ShowMenu"), msgblock)
		set_pdata_int(id, m_fGameHUDInitialized, 1)
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	restore = get_pdata_int(id, m_iVGUI)
	vgui = restore & (1<<0)
	if(vgui)
		set_pdata_int(id, m_iVGUI, restore & ~(1<<0))
	
	menu_item_getinfo(menu, item, access, cmd,2,_,_, callback)
	new key = str_to_num(cmd)
	new Float:gt = get_gametime() - gametime
	new Float:rt = get_cvar_float("mp_roundtime") * 60.0
	switch (key) {
		case 1: {
			msgblock = get_msg_block(get_user_msgid("ShowMenu"))
			set_msg_block(get_user_msgid("ShowMenu"), BLOCK_ONCE)
			if(gt >= rt - 1.0 && TCount != 0) client_print(id, print_center, "%L", LANG_SERVER, "JBB_CHOOSE_NEXT")
			else if(cs_get_user_team(id) == CS_TEAM_T) client_print(id, print_center, "%L", LANG_SERVER, "JBB_CHOOSE_AT")
			else {
			engclient_cmd(id, "jointeam", " 1")
			engclient_cmd(id, "joinclass", " 1")
			}
			set_msg_block(get_user_msgid("ShowMenu"), msgblock)
		}
		case 2: {
			count_teams()
			new formula = TCount - CTCount * 4
			msgblock = get_msg_block(get_user_msgid("ShowMenu"))
			set_msg_block(get_user_msgid("ShowMenu"), BLOCK_ONCE)
			if((gt >= rt - 1.0 && CTCount != 0) || g_GameMode == 5) client_print(id, print_center, "%L", LANG_SERVER, "JBB_CHOOSE_NEXT")
			else if(cs_get_user_team(id) == CS_TEAM_CT) client_print(id, print_center, "%L", LANG_SERVER, "JBB_CHOOSE_ACT")
			else if(formula > 1 || CTCount == 0) {
			engclient_cmd(id, "jointeam", " 2")
			engclient_cmd(id, "joinclass", " 2")
			}
			else client_print(id, print_center, "%L", LANG_SERVER, "JBB_CHOOSE_CTFULL")
			set_msg_block(get_user_msgid("ShowMenu"), msgblock)
		}
	}
	if(vgui)
		set_pdata_int(id, m_iVGUI, restore)
	return PLUGIN_HANDLED
}

public count_teams() {
	CTCount = 0
	TCount = 0
	new Players[32] 
	new playerCount, i 
	get_players(Players, playerCount, "") 
	for (i=0; i<playerCount; i++) {
		if (is_user_connected(Players[i])) {
			if (cs_get_user_team(Players[i]) == CS_TEAM_CT) CTCount++
			if (cs_get_user_team(Players[i]) == CS_TEAM_T) TCount++
		}
	}
}

public task_Autojoin(iParam[], id) {
	new iMsgBlock = get_msg_block(iParam[0])
	set_msg_block(iParam[0], BLOCK_SET)
	chooseteam(id)
	set_msg_block(iParam[0], iMsgBlock)
}

stock set_autojoin_task(id, iMsgid) {
	new iParam[2]
	iParam[0] = iMsgid
	set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam))
}
#endif

stock fm_velocity_by_aim(iIndex, Float:fDistance, Float:fVelocity[3], Float:fViewAngle[3]) {
	pev(iIndex, pev_v_angle, fViewAngle)
	fVelocity[0] = floatcos(fViewAngle[1], degrees) * fDistance
	fVelocity[1] = floatsin(fViewAngle[1], degrees) * fDistance
	fVelocity[2] = floatcos(fViewAngle[0]+90.0, degrees) * fDistance
	return 1
}

stock jb_timer(this_timeleft) {
	new string_timeleft[6], minutes, seconds
	if(this_timeleft >= 0 && this_timeleft <= 1800) {
		seconds = this_timeleft
		while(seconds >= 60) {
			minutes++
			seconds -= 60
		}
		if(minutes > 0) {
			if(seconds > 9) formatex(string_timeleft, charsmax(string_timeleft), "%d:%d", minutes, seconds)
			else formatex(string_timeleft, charsmax(string_timeleft), "%d:0%d", minutes, seconds)
		} else formatex(string_timeleft, charsmax(string_timeleft), "%d", seconds)
	}
	return string_timeleft
}

stock jb_set_money(id, amount) {
	if(!is_user_connected(id))
		return
	
	g_money[id] = amount
	cs_set_user_money(id, amount)
}

stock jb_get_money(id) {
	if(!is_user_connected(id))
		return 0
	
	return g_money[id]
}

/* === COLOR CHAT === */
ColorChat(id, Color:type, const msg[], any:...) {
	new message[256]
	switch(type) {
		case NORMAL: message[0] = 0x01
		case GREEN: message[0] = 0x04
		default: message[0] = 0x03
	}
	vformat(message[1], 251, msg, 4)
	message[192] = '^0'
	new team, ColorChange, index, MSG_Type
	if(id) {
		MSG_Type = MSG_ONE_UNRELIABLE
		index = id
	} else {
		index = FindPlayer()
		MSG_Type = MSG_BROADCAST
	}
	team = get_user_team(index)
	ColorChange = ColorSelection(index, MSG_Type, type)
	ShowColorMessage(index, MSG_Type, message)
	if(ColorChange) Team_Info(index, MSG_Type, TeamName[team])
}

ShowColorMessage(id, type, message[]) {
	static msgSayText
	if(!msgSayText) msgSayText = get_user_msgid("SayText")
	message_begin(type, msgSayText, _, id)
	write_byte(id)
	write_string(message)
	message_end()
}

Team_Info(id, type, team[]) {
	static msgTeamInfo
	if(!msgTeamInfo) msgTeamInfo = get_user_msgid("TeamInfo")
	message_begin(type, msgTeamInfo, _, id)
	write_byte(id)
	write_string(team)
	message_end()
	return 1
}

ColorSelection(index, type, Color:Type) {
	switch(Type) {
		case RED: return Team_Info(index, type, TeamName[1])
		case BLUE: return Team_Info(index, type, TeamName[2])
		case GREY: return Team_Info(index, type, TeamName[0])
	}
	return 0
}

FindPlayer() {
	new i = -1
	while(i <= mxplr) {
		if(is_user_connected(++i))
			return i
	}
	return -1
}
Please help me with that sma, i need for server
alexn22 is offline
redivcram
Veteran Member
Join Date: Jul 2014
Location: Serbia
Old 01-02-2020 , 07:07   Re: Load fails: Plugin file open error SMA
Reply With Quote #2

Woah. That's a huge code no one, including you, will ponder on.

You can tell us your problem, first.
redivcram is offline
alexn22
Junior Member
Join Date: Dec 2019
Old 01-02-2020 , 16:02   Re: Load fails: Plugin file open error SMA
Reply With Quote #3

Quote:
Originally Posted by redivcram View Post
Woah. That's a huge code no one, including you, will ponder on.

You can tell us your problem, first.
I got Re: Load fails: Plugin file open error
With that sma code
alexn22 is offline
redivcram
Veteran Member
Join Date: Jul 2014
Location: Serbia
Old 01-02-2020 , 16:37   Re: Load fails: Plugin file open error SMA
Reply With Quote #4

Copy the full error log and paste it here, between [code] tags.
redivcram is offline
Shadows Adi
AlliedModders Donor
Join Date: Aug 2019
Location: Romania
Old 01-09-2020 , 08:30   Re: Load fails: Plugin file open error SMA
Reply With Quote #5

Quote:
Originally Posted by alexn22 View Post
I got Re: Load fails: Plugin file open error
With that sma code
try to copy name of the plugin and paste it in plugins.ini with .amxx extension.
__________________


Accepting Paid Requests, contact PM.

MVP Of The Round View project on GITHUB / AlliedModders
CSGO REMAKE ~ CSGO MOD [STABLE + SOURCE CODE]
Shadows Adi is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 04:01.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode