Raised This Month: $12 Target: $400
 3% 

Help Jbextreme add box gloves at "/box" command


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Barlap
Senior Member
Join Date: Apr 2016
Location: Romania
Old 10-25-2016 , 15:03   Help Jbextreme add box gloves at "/box" command
Reply With Quote #1

Hello AlliedModders.
I Use Jorpito's plugin on my cs 1.6 jailbreak server.
I edited some things like hud and sounds, but i want to add box gloves when simon type /box.

I added the const
Code:
new const _BoxModels[][] = { "models/p_box.mdl", "models/v_box.mdl" }
I precached the resources
Code:
	for(i = 0; i < sizeof(_BoxModels); i++)
		precache_model(_BoxModels[i])
And i put the string to replace the models, but still not working
Code:
			set_pev(id, pev_viewmodel2, _BoxModels[1])
			set_pev(id, pev_weaponmodel2, _BoxModels[0])
Code:
/*
Changelog:

v1.9
	* Finally fixed voice control
	* Added cvar to disable team change
	* Fixed OldStyle team menu issue
	* Fixed crowbar user + he damage issue

v1.8
	* Fixed duel bug
	* Fixed clcmd/concmd flags problem
	* Added cell opener for maps with multi_manager 
	* Added cvar to enable last request
	* Added cvar to enable motd

v1.7
	* Fixed auto Simon mode

v1.6
	* Updated dictionary
	* Fixed last request abuse bug
	* Fixed voice mode bugs
	* Added auto team transfer to Guards that never been Simon
	* Added auto disconnect to Spectators that doesn't join any team in 3 rounds
	* Added blocking for hints messages
	* Added auto door open on freeday
	* Added /open command only for Simon

v1.5
	* Improved team select code
	* Improved team status code
	* Updated dictionary
	* Added custom model (using body+skin)
	* Added sounds
	* Added freeday menu command
	* Added lastrequest menu command & functionalities
	* Added help command
	* Added last prisoner hud message
	* Added cvar to change talk mode control (+simonvoice optional or required to talk)
	* Added cvar to allow shooting func_button to activate it
	* Added cvar to allow auto-freeday hud message after 60 seconds with no Simon selected
	* Added cvar to force round end after some time of auto-freeday
	* Added cvar to change game mode (classic counter for days)
	* Added simon footsteps decals (controlled by cvar)
	* Added restriction on HE for guards

v1.3
	* First public release
*/

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
 
#define PLUGIN_NAME	"JailBreak Extreme"
#define PLUGIN_AUTHOR	"JoRoPiTo"
#define PLUGIN_VERSION	"1.9"
#define PLUGIN_CVAR	"jbextreme"

#define TASK_STATUS	2487000
#define TASK_FREEDAY	2487100
#define TASK_ROUND	2487200
#define TASK_HELP		2487300
#define TASK_SAFETIME	2487400
#define TASK_FREEEND	2487500
#define TEAM_MENU		"#Team_Select_Spect"
#define TEAM_MENU2	"#Team_Select_Spect"
#define HUD_DELAY		Float:4.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_len(%1)		floatsqroot(%1[0] * %1[0] + %1[1] * %1[1] + %1[2] * %1[2])
#define vec_mul(%1,%2)		( %1[0] *= %2, %1[1] *= %2, %1[2] *= %2)
#define vec_copy(%1,%2)		( %2[0] = %1[0], %2[1] = %1[1],%2[2] = %1[2])

// Offsets
#define m_iPrimaryWeapon	116
#define m_iVGUI			510
#define m_fGameHUDInitialized	349
#define m_fNextHudTextArgsGameTime	198
 
enum _hud { _hudsync, Float:_x, Float:_y, Float:_time }
enum _lastrequest { _knife, _deagle, _freeday, _weapon }
enum _duel { _name[16], _csw, _entname[32], _opt[32], _sel[32] }

new gp_PrecacheSpawn
new gp_PrecacheKeyValue

new gp_CrowbarMax
new gp_CrowbarMul
new gp_TeamRatio
new gp_CtMax
new gp_BoxMax
new gp_TalkMode
new gp_VoiceBlock
new gp_RetryTime
new gp_RoundMax
new gp_ButtonShoot
new gp_SimonSteps
new gp_SimonRandom
new gp_GlowModels
new gp_AutoLastresquest
new gp_LastRequest
new gp_Motd
new gp_SpectRounds
new gp_NosimonRounds
new gp_AutoOpen
new gp_TeamChange

new g_MaxClients
new g_MsgStatusText
new g_MsgStatusIcon
new g_MsgVGUIMenu
new g_MsgShowMenu
new g_MsgClCorpse
new g_MsgMOTD

new gc_TalkMode
new gc_VoiceBlock
new gc_SimonSteps
new gc_ButtonShoot
new Float:gc_CrowbarMul

// Precache
new const _FistModels[][] = { "models/p_bknuckles.mdl", "models/v_pnike.mdl" }
new const _CrowbarModels[][] = { "models/p_realcrow.mdl", "models/v_realcrow.mdl" }
new const _BoxModels[][] = { "models/p_box.mdl", "models/v_box.mdl" }
new const _FistSounds[][] = { "weapons/cbar_hitbod2.wav", "weapons/cbar_hitbod1.wav", "weapons/bullet_hit1.wav", "weapons/bullet_hit2.wav" }
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_scout", "weapon_deagle", "weapon_mac10", "weapon_elite", "weapon_ak47", "weapon_m4a1", "weapon_mp5navy" }
new const _WeaponsFreeCSW[] = { CSW_SCOUT, CSW_DEAGLE, CSW_MAC10, CSW_ELITE, CSW_AK47, CSW_M4A1, CSW_MP5NAVY }
new const _WeaponsFreeAmmo[] = { 90, 35, 100, 120, 90, 90, 120 }

new const _Duel[][_duel] =
{
	{ "Deagle", CSW_DEAGLE, "weapon_deagle", "JBE_MENU_LASTREQ_OPT4", "JBE_MENU_LASTREQ_SEL4" },
	{ "Scout", CSW_SCOUT, "weapon_scout", "JBE_MENU_LASTREQ_OPT5", "JBE_MENU_LASTREQ_SEL5" },
	{ "Grenades", CSW_HEGRENADE, "weapon_hegrenade", "JBE_MENU_LASTREQ_OPT6", "JBE_MENU_LASTREQ_SEL6" },
	{ "Awp", CSW_AWP, "weapon_awp", "JBE_MENU_LASTREQ_OPT7", "JBE_MENU_LASTREQ_SEL7" }
}

// Reasons
new const g_Reasons[][] =  {
	"",
	"JBE_PRISONER_REASON_1",
	"JBE_PRISONER_REASON_2",
	"JBE_PRISONER_REASON_3",
	"JBE_PRISONER_REASON_4",
	"JBE_PRISONER_REASON_5",
	"JBE_PRISONER_REASON_6"
}

// HudSync: 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,  0.1,  0.2,  2.0},
	{0,  0.1,  0.3,  2.0},
	{0, -1.0,  0.9,  3.0},
	{0,  0.6,  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}
}

// 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 CsTeams:g_PlayerTeam[33]
new Float:g_SimonRandom
new Trie:g_CellManagers
new g_HelpText[512]
new g_JailDay
new g_PlayerJoin
new g_PlayerReason[33]
new g_PlayerSpect[33]
new g_PlayerSimon[33]
new g_PlayerNomic
new g_PlayerWanted
new g_PlayerCrowbar
new g_PlayerRevolt
new g_PlayerHelp
new g_PlayerFreeday
new g_PlayerLast
new g_FreedayAuto
new g_FreedayNext
new g_TeamCount[CsTeams]
new g_TeamAlive[CsTeams]
new g_BoxStarted
new g_CrowbarCount
new g_Simon
new g_SimonAllowed
new g_SimonTalking
new g_SimonVoice
new g_RoundStarted
new g_LastDenied
new g_Freeday
new g_BlockWeapons
new g_RoundEnd
new g_Duel
new g_DuelA
new g_DuelB
new g_SafeTime
new g_Buttons[10]
 
public plugin_init()
{
	unregister_forward(FM_Spawn, gp_PrecacheSpawn)
	unregister_forward(FM_KeyValue, gp_PrecacheKeyValue)
 
	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
	register_cvar(PLUGIN_CVAR, PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
 
	register_dictionary("jbextreme.txt")

	g_MsgStatusText = get_user_msgid("StatusText")
	g_MsgStatusIcon = get_user_msgid("StatusIcon")
	g_MsgVGUIMenu = get_user_msgid("VGUIMenu")
	g_MsgShowMenu = get_user_msgid("ShowMenu")
	g_MsgMOTD = get_user_msgid("MOTD")
	g_MsgClCorpse = get_user_msgid("ClCorpse")

	register_message(g_MsgStatusText, "msg_statustext")
	register_message(g_MsgStatusIcon, "msg_statusicon")
	register_message(g_MsgVGUIMenu, "msg_vguimenu")
	register_message(g_MsgShowMenu, "msg_showmenu")
	register_message(g_MsgMOTD, "msg_motd")
	register_message(g_MsgClCorpse, "msg_clcorpse")

	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_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_Touch, "weapon_hegrenade", "player_touchweapon")
	RegisterHam(Ham_Touch, "weaponbox", "player_touchweapon")
	RegisterHam(Ham_Touch, "armoury_entity", "player_touchweapon")

	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_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_menucmd(register_menuid(TEAM_MENU), 51, "team_select") 
	register_menucmd(register_menuid(TEAM_MENU2), 51, "team_select") 

	register_clcmd("jointeam", "cmd_jointeam")
	register_clcmd("joinclass", "cmd_joinclass")
	register_clcmd("+simonvoice", "cmd_voiceon")
	register_clcmd("-simonvoice", "cmd_voiceoff")

	register_clcmd("say /fd", "cmd_freeday")
	register_clcmd("say /freeday", "cmd_freeday")
	register_clcmd("say /day", "cmd_freeday")
	register_clcmd("say /lr", "cmd_lastrequest")
	register_clcmd("say /lastrequest", "cmd_lastrequest")
	register_clcmd("say /duel", "cmd_lastrequest")
	register_clcmd("say /simon", "cmd_simon")
	register_clcmd("say /open", "cmd_open")
	register_clcmd("say /nomic", "cmd_nomic")
	register_clcmd("say /box", "cmd_box")
	register_clcmd("say /help", "cmd_help")

	register_clcmd("jbe_freeday", "adm_freeday", ADMIN_KICK)
	register_concmd("jbe_nomic", "adm_nomic", ADMIN_KICK)
	register_concmd("jbe_open", "adm_open", ADMIN_KICK)
	register_concmd("jbe_box", "adm_box", ADMIN_KICK)
 
	gp_GlowModels = register_cvar("jbe_glowmodels", "0")
	gp_SimonSteps = register_cvar("jbe_simonsteps", "1")
	gp_CrowbarMul = register_cvar("jbe_crowbarmultiplier", "25.0")
	gp_CrowbarMax = register_cvar("jbe_maxcrowbar", "1")
	gp_TeamRatio = register_cvar("jbe_teamratio", "3")
	gp_TeamChange = register_cvar("jbe_teamchange", "0") // 0-disable team change for tt / 1-enable team change
	gp_CtMax = register_cvar("jbe_maxct", "6")
	gp_BoxMax = register_cvar("jbe_boxmax", "6")
	gp_RetryTime = register_cvar("jbe_retrytime", "10.0")
	gp_RoundMax = register_cvar("jbe_freedayround", "240.0")
	gp_AutoLastresquest = register_cvar("jbe_autolastrequest", "1")
	gp_LastRequest = register_cvar("jbe_lastrequest", "1")
	gp_Motd = register_cvar("jbe_motd", "1")
	gp_SpectRounds = register_cvar("jbe_spectrounds", "3")
	gp_NosimonRounds = register_cvar("jbe_nosimonrounds", "7")
	gp_SimonRandom = register_cvar("jbe_randomsimon", "0")
	gp_AutoOpen = register_cvar("jbe_autoopen", "1")
	gp_TalkMode = register_cvar("jbe_talkmode", "2")	// 0-alltak / 1-tt talk / 2-tt no talk
	gp_VoiceBlock = register_cvar("jbe_blockvoice", "2")	// 0-dont block / 1-block voicerecord / 2-block voicerecord except simon
	gp_ButtonShoot = register_cvar("jbe_buttonshoot", "1")	// 0-standard / 1-func_button shoots!
 
	g_MaxClients = get_global_int(GL_maxClients)
 
	for(new i = 0; i < sizeof(g_HudSync); i++)
		g_HudSync[i][_hudsync] = CreateHudSyncObj()

	formatex(g_HelpText, charsmax(g_HelpText), "%L^n^n%L^n^n%L^n^n%L",
			LANG_SERVER, "JBE_HELP_TITLE",
			LANG_SERVER, "JBE_HELP_BINDS",
			LANG_SERVER, "JBE_HELP_GUARD_CMDS",
			LANG_SERVER, "JBE_HELP_PRISONER_CMDS")

	setup_buttons()
}
 
public plugin_precache()
{
	static i
	precache_model("models/player/jb_csg/jb_csg.mdl")
 
	for(i = 0; i < sizeof(_FistModels); i++)
		precache_model(_FistModels[i])
 
	for(i = 0; i < sizeof(_CrowbarModels); i++)
		precache_model(_CrowbarModels[i])

	for(i = 0; i < sizeof(_BoxModels); i++)
		precache_model(_BoxModels[i])
 
	for(i = 0; i < sizeof(_FistSounds); i++)
		precache_sound(_FistSounds[i])

	precache_sound("jbone/lrsound.wav")
	precache_sound("jbone/brass_bell_C.wav")
	precache_sound("jbone/box.wav")
 
 	g_CellManagers = TrieCreate()
	gp_PrecacheSpawn = register_forward(FM_Spawn, "precache_spawn", 1)
	gp_PrecacheKeyValue = register_forward(FM_KeyValue, "precache_keyvalue", 1)
}

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)
	}
}


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

public client_putinserver(id)

	if(g_Simon == id)
	{
		g_Simon = 0
		ClearSyncHud(0, g_HudSync[2][_hudsync])
		player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_HASGONE")
	}
	else if(g_PlayerLast == id || (g_Duel && (id == g_DuelA || id == g_DuelB)))
	{
		g_Duel = 0
		g_DuelA = 0
		g_DuelB = 0
		g_LastDenied = 0
		g_BlockWeapons = 0
		g_PlayerLast = 0
	}
	team_count()
}

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_vguimenu(msgid, dest, id)
{
	static msgarg1
	static CsTeams:team

	msgarg1 = get_msg_arg_int(1)
	if(msgarg1 == 2)
	{
		team = cs_get_user_team(id)
		if((team == CS_TEAM_T) && !is_user_admin(id) && (is_user_alive(id) || !get_pcvar_num(gp_TeamChange)))
		{
			client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")
			return PLUGIN_HANDLED
		}
		show_menu(id, 51, TEAM_MENU, -1)
		return PLUGIN_HANDLED
	}

	return PLUGIN_CONTINUE
}

public msg_showmenu(msgid, dest, id)
{
	static msgarg1, roundloop
	static CsTeams:team
	msgarg1 = get_msg_arg_int(1)

	if(msgarg1 != 531 && msgarg1 != 563)
		return PLUGIN_CONTINUE

	roundloop = floatround(get_pcvar_float(gp_RetryTime) / 2)
	team = cs_get_user_team(id)

	if(team == CS_TEAM_T)
	{
		if(!is_user_admin(id) && (is_user_alive(id) || (g_RoundStarted >= roundloop) || !get_pcvar_num(gp_TeamChange)))
		{
			client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")
			return PLUGIN_HANDLED
		}
		else
		{
			show_menu(id, 51, TEAM_MENU, -1)
			return PLUGIN_HANDLED
		}
	}
	else
	{
		show_menu(id, 51, TEAM_MENU, -1)
		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_clcorpse(msgid, dest, id)
{
	return PLUGIN_HANDLED
}

public current_weapon(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE

	if(get_bit(g_PlayerCrowbar, id))
	{
		set_pev(id, pev_viewmodel2, _CrowbarModels[1])
		set_pev(id, pev_weaponmodel2, _CrowbarModels[0])
	}
	else
	{
		set_pev(id, pev_viewmodel2, _FistModels[1])
		set_pev(id, pev_weaponmodel2, _FistModels[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):
		{
			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))
			player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER,
				(team == CS_TEAM_T) ? "JBE_PRISONER_STATUS" : "JBE_GUARD_STATUS", name, health)
		}
	}
	
	return PLUGIN_HANDLED
}

public impulse_100(id)
{
	if(cs_get_user_team(id) == CS_TEAM_T)
		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++
	}

	set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

	clear_bit(g_PlayerCrowbar, id)
	clear_bit(g_PlayerWanted, id)
	team = cs_get_user_team(id)

	switch(team)
	{
		case(CS_TEAM_T):
		{
			g_PlayerLast = 0
			if(!g_PlayerReason[id])
				g_PlayerReason[id] = random_num(1, 6)

			player_hudmessage(id, 0, 5.0, {255, 0, 255}, "%L %L", LANG_SERVER, "JBE_PRISONER_REASON",
				LANG_SERVER, g_Reasons[g_PlayerReason[id]])

			set_user_info(id, "model", "jb_csg")
			entity_set_int(id, EV_INT_body, 2)
			if(is_freeday() || get_bit(g_FreedayAuto, id))
			{
				freeday_set(0, id)
				clear_bit(g_FreedayAuto, id)
			}
			else
			{
				entity_set_int(id, EV_INT_skin, random_num(0, 2))
			}

			if(g_CrowbarCount < get_pcvar_num(gp_CrowbarMax))
			{
				if(random_num(0, g_MaxClients) > (g_MaxClients / 2))
				{
					g_CrowbarCount++
					set_bit(g_PlayerCrowbar, id)
				}
			}
			cs_set_user_armor(id, 0, CS_ARMOR_NONE)
		}
		case(CS_TEAM_CT):
		{
			g_PlayerSimon[id]++
			set_user_info(id, "model", "jb_csg")
			entity_set_int(id, EV_INT_body, 3)
			cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)
		}
	}
	first_join(id)
	return HAM_IGNORED
}

public player_damage(victim, ent, attacker, Float:damage, bits)
{
	if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
		return HAM_IGNORED

	switch(g_Duel)
	{
		case(0):
		{
			if(attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerCrowbar, attacker) && cs_get_user_team(victim) != CS_TEAM_T)
			{
				SetHamParamFloat(4, damage * gc_CrowbarMul)
				return HAM_OVERRIDE
			}
		}
		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
		}
	}

	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

	vteam = cs_get_user_team(victim)
	ateam = cs_get_user_team(attacker)

	if(ateam == CS_TEAM_CT && vteam == CS_TEAM_CT)
		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_T && !g_BoxStarted)
		return HAM_SUPERCEDE

	if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT)
	{
		if(!g_PlayerRevolt)
			revolt_start()

		set_bit(g_PlayerRevolt, attacker)
	}

	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 player_killed(victim, attacker, shouldgib)
{
	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)
	if(g_Simon == victim)
	{
		g_Simon = 0
		ClearSyncHud(0, g_HudSync[2][_hudsync])
		player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_KILLED")
	}

	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 && (attacker == g_DuelA || attacker == g_DuelB))
			{
				set_user_rendering(victim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
				set_user_rendering(attacker, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
				g_Duel = 0
				g_LastDenied = 0
				g_BlockWeapons = 0
				g_PlayerLast = 0
				team_count()
			}
		}
	}
	hud_status(0)
	return HAM_IGNORED
}

public player_touchweapon(id, ent)
{
	static model[32], class[32]
	if(g_BlockWeapons)
		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
}

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) && equal(sample, "weapons/knife_", 14))
	{
		switch(sample[17])
		{
			case('b'):
			{
				emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
			case('w'):
			{
				emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod1.wav", 1.0, ATTN_NORM, 0, PITCH_LOW)
			}
			case('1', '2'):
			{
				emit_sound(id, CHAN_WEAPON, "weapons/bullet_hit2.wav", random_float(0.5, 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(is_user_admin(sender))
	{
		engfunc(EngFunc_SetClientListening, receiver, sender, true)
		return FMRES_SUPERCEDE
	}

	switch(gc_VoiceBlock)
	{
		case(2):
		{
			if((sender != g_Simon) && (!get_bit(g_SimonVoice, sender) && gc_VoiceBlock))
			{
				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
	}

	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(g_Duel > 3)
	{
		cs_set_user_bpammo(id, _Duel[g_Duel - 4][_csw], 1)
	}
}

public round_first()
{
	g_JailDay = 0
	for(new i = 1; i <= g_MaxClients; i++)
		g_PlayerSimon[i] = 0

	set_cvar_num("sv_alltalk", 1)
	set_cvar_num("mp_roundtime", 2)
	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()
}

public round_end()
{
	static CsTeams:team
	static maxnosimon, spectrounds
	g_SafeTime = 0
	g_PlayerRevolt = 0
	g_PlayerFreeday = 0
	g_PlayerLast = 0
	g_BoxStarted = 0
	g_CrowbarCount = 0
	g_Simon = 0
	g_SimonAllowed = 0
	g_RoundStarted = 0
	g_LastDenied = 0
	g_BlockWeapons = 0
	g_TeamCount[CS_TEAM_T] = 0
	g_TeamCount[CS_TEAM_CT] = 0
	g_Freeday = 0
	g_FreedayNext = (random_num(0,99) >= 95)
	g_RoundEnd = 1
	g_Duel = 0

	remove_task(TASK_STATUS)
	remove_task(TASK_FREEDAY)
	remove_task(TASK_FREEEND)
	remove_task(TASK_ROUND)
	maxnosimon = get_pcvar_num(gp_NosimonRounds)
	spectrounds = get_pcvar_num(gp_SpectRounds)
	for(new i = 1; i <= g_MaxClients; i++)
	{
		if(!is_user_connected(i))
			continue

		menu_cancel(i)
		team = cs_get_user_team(i)
		player_strip_weapons(i)
		switch(team)
		{
			case(CS_TEAM_CT):
			{
				if(g_PlayerSimon[i] > maxnosimon)
				{
					cmd_nomic(i)
				}
			}
			case(CS_TEAM_SPECTATOR,CS_TEAM_UNASSIGNED):
			{
				g_PlayerSpect[i]++
				if(g_PlayerSpect[i] > spectrounds)
				{
					client_cmd(i, "disconnect")
					server_print("JBE Disconnected spectator client #%i", i)
				}
				else
				{
					show_menu(i, 51, TEAM_MENU, -1)
				}
			}
		}
	}
	for(new i = 0; i < sizeof(g_HudSync); i++)
		ClearSyncHud(0, g_HudSync[i][_hudsync])

}

public round_start()
{
	if(g_RoundEnd)
		return

	team_count()
	if(!g_Simon && is_freeday())
	{
		g_Freeday = 1
		emit_sound(0, CHAN_AUTO, "jbone/csg_ding.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
		check_freeday(TASK_FREEDAY)
	}
	else
	{
		set_task(60.0, "check_freeday", TASK_FREEDAY)
	}
	set_task(HUD_DELAY, "hud_status", TASK_STATUS, _, _, "b")
	set_task(get_pcvar_float(gp_RetryTime) + 1.0, "safe_time", TASK_SAFETIME)
	set_task(120.0, "freeday_end", TASK_FREEDAY)
	g_SimonRandom = get_pcvar_num(gp_SimonRandom) ? random_float(15.0, 45.0) : 0.0
	g_SimonAllowed = 1
	g_FreedayNext = 0
}

public cmd_jointeam(id)
{
	return PLUGIN_HANDLED
}

public cmd_joinclass(id)
{
	return PLUGIN_HANDLED
}

public cmd_voiceon(id)
{
	client_cmd(id, "+voicerecord")
	set_bit(g_SimonVoice, id)
	if(g_Simon == id || is_user_admin(id))
		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 || is_user_admin(id))
		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 && !g_Freeday && is_user_alive(id) && team == CS_TEAM_CT && !g_Simon)
	{
		g_Simon = id
		get_user_name(id, name, charsmax(name))
		entity_set_int(id, EV_INT_body, 1)
		g_PlayerSimon[id]--
		if(get_pcvar_num(gp_GlowModels))
			player_glow(id, g_Colors[0])

		hud_status(0)
	}
	return PLUGIN_HANDLED
}

public cmd_open(id)
{
	if(id == g_Simon)
		jail_open()

	return PLUGIN_HANDLED
}

public cmd_nomic(id)
{
	static CsTeams:team
	team = cs_get_user_team(id)
	if(team == CS_TEAM_CT)
	{
		server_print("JBE Transfered guard to prisoners team client #%i", id)
		if(g_Simon == id)
		{
			g_Simon = 0
			player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_TRANSFERED")
		}
		if(!is_user_admin(id))
			set_bit(g_PlayerNomic, id)

		user_silentkill(id)
		cs_set_user_team(id, CS_TEAM_T)
	}
	return PLUGIN_HANDLED
}

public cmd_box(id)
{
	static i
	if((id < 0) || (is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT))
	{
		if(g_TeamAlive[CS_TEAM_T] <= get_pcvar_num(gp_BoxMax) && g_TeamAlive[CS_TEAM_T] > 1)
		{
			for(i = 1; i <= g_MaxClients; i++)
				if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
					set_user_health(i, 100)

			set_cvar_num("mp_tkpunish", 0)
			set_cvar_num("mp_friendlyfire", 1)
			g_BoxStarted = 1
			player_hudmessage(0, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_BOX")
			set_pev(id, pev_viewmodel2, _BoxModels[1])
			set_pev(id, pev_weaponmodel2, _BoxModels[0])
			client_cmd(0, "spk ^"jbone/box.wav^"");
		}
		else
		{
			player_hudmessage(id, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_CANTBOX")
		}
	}
	return PLUGIN_HANDLED
}

public cmd_help(id)
{
	if(id > g_MaxClients)
		id -= TASK_HELP

	remove_task(TASK_HELP + id)
	switch(get_bit(g_PlayerHelp, id))
	{
		case(0):
		{
			set_bit(g_PlayerHelp, id)
			player_hudmessage(id, 7, 15.0, {230, 100, 10}, "%s", g_HelpText)
			set_task(15.0, "cmd_help", TASK_HELP + id)
		}
		default:
		{
			clear_bit(g_PlayerHelp, id)
			ClearSyncHud(id, g_HudSync[7][_hudsync])
		}
	}
}

public cmd_freeday(id)
{
	static menu, menuname[32], option[64]
	if(!is_freeday() && ((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id)))
	{
		formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_FREEDAY")
		menu = menu_create(menuname, "freeday_choice")

		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_PLAYER")
		menu_additem(menu, option, "1", 0)

		formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_ALL")
		menu_additem(menu, option, "2", 0)

		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) || is_user_admin(id))
		menu_players(id, CS_TEAM_T, id, 1, "freeday_select", "%L", LANG_SERVER, "JBE_MENU_FREEDAY")

	return PLUGIN_CONTINUE
}

public cmd_lastrequest(id)
{
	static i, num[5], menu, menuname[32], option[64]
	if(!get_pcvar_num(gp_LastRequest) || g_Freeday || g_LastDenied || id != g_PlayerLast || g_RoundEnd || get_bit(g_PlayerWanted, id) || get_bit(g_PlayerFreeday, id) || !is_user_alive(id))
		return PLUGIN_CONTINUE

	formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_LASTREQ")
	menu = menu_create(menuname, "lastrequest_select")

	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT1")
	menu_additem(menu, option, "1", 0)

	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT2")
	menu_additem(menu, option, "2", 0)

	formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_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)
	}

	menu_display(id, menu)
	return PLUGIN_CONTINUE
}

public adm_freeday(id)
{
	static player, user[32]
	if(!is_user_admin(id))
		return PLUGIN_CONTINUE

	read_argv(1, user, charsmax(user))
	player = cmd_target(id, user, 2)
	if(is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_T)
	{
		freeday_set(id, player)
	}
	return PLUGIN_HANDLED
}

public adm_nomic(id)
{
	static player, user[32]
	if(id == 0 || is_user_admin(id))
	{
		read_argv(1, user, charsmax(user))
		player = cmd_target(id, user, 3)
		if(is_user_connected(player))
		{
			cmd_nomic(player)
		}
	}
	return PLUGIN_HANDLED
}

public adm_open(id)
{
	if(!is_user_admin(id))
		return PLUGIN_CONTINUE

	jail_open()
	return PLUGIN_HANDLED
}

public adm_box(id)
{
	if(!is_user_admin(id))
		return PLUGIN_CONTINUE

	cmd_box(-1)
	return PLUGIN_HANDLED
}

public team_select(id, key)
{
	static CsTeams:team, roundloop, admin

	roundloop = get_pcvar_num(gp_RetryTime) / 2
	team = cs_get_user_team(id)
	admin = is_user_admin(id)
	team_count()

	if(!admin && (team == CS_TEAM_UNASSIGNED) && (g_RoundStarted >= roundloop) && g_TeamCount[CS_TEAM_CT] && g_TeamCount[CS_TEAM_T] && !is_user_alive(id))
	{
		team_join(id, CS_TEAM_SPECTATOR)
		client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTJOIN")
		return PLUGIN_HANDLED
	}


	switch(key)
	{
		case(0):
		{
			if(team == CS_TEAM_T)
				return PLUGIN_HANDLED

			g_PlayerReason[id] = random_num(1, 6)

			team_join(id, CS_TEAM_T)
		}
		case(1):
		{
			if(team == CS_TEAM_CT || (!admin && get_bit(g_PlayerNomic, id)))
				return PLUGIN_HANDLED

			if(g_TeamCount[CS_TEAM_CT] < ctcount_allowed() || admin)
				team_join(id, CS_TEAM_CT)
			else
				client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CTFULL")
		}
		case(5):
		{
			user_silentkill(id)
			team_join(id, CS_TEAM_SPECTATOR)
		}
	}
	return PLUGIN_HANDLED
}

public team_join(id, CsTeams:team)
{
	static restore, vgui, msgblock

	restore = get_pdata_int(id, m_iVGUI)
	vgui = restore & (1<<0)
	if(vgui)
		set_pdata_int(id, m_iVGUI, restore & ~(1<<0))

	switch(team)
	{
		case CS_TEAM_SPECTATOR:
		{
			msgblock = get_msg_block(g_MsgShowMenu)
			set_msg_block(g_MsgShowMenu, BLOCK_ONCE)
			dllfunc(DLLFunc_ClientPutInServer, id)
			set_msg_block(g_MsgShowMenu, msgblock)
			set_pdata_int(id, m_fGameHUDInitialized, 1)
			engclient_cmd(id, "jointeam", "6")
		}
		case CS_TEAM_T, CS_TEAM_CT:
		{
			msgblock = get_msg_block(g_MsgShowMenu)
			set_msg_block(g_MsgShowMenu, BLOCK_ONCE)
			engclient_cmd(id, "jointeam", (team == CS_TEAM_CT) ? "2" : "1")
			engclient_cmd(id, "joinclass", "1")
			set_msg_block(g_MsgShowMenu, msgblock)
			g_PlayerSpect[id] = 0
		}
	}
	
	if(vgui)
		set_pdata_int(id, m_iVGUI, restore)
}

public team_count()
{
	static CsTeams:team, last
	g_TeamCount[CS_TEAM_UNASSIGNED] = 0
	g_TeamCount[CS_TEAM_T] = 0
	g_TeamCount[CS_TEAM_CT] = 0
	g_TeamCount[CS_TEAM_SPECTATOR] = 0
	g_TeamAlive[CS_TEAM_UNASSIGNED] = 0
	g_TeamAlive[CS_TEAM_T] = 0
	g_TeamAlive[CS_TEAM_CT] = 0
	g_TeamAlive[CS_TEAM_SPECTATOR] = 0
	for(new i = 1; i <= g_MaxClients; i++)
	{
		if(is_user_connected(i))
		{
			team = cs_get_user_team(i)
			g_TeamCount[team]++
			g_PlayerTeam[i] = team
			if(is_user_alive(i))
			{
				g_TeamAlive[team]++
				if(team == CS_TEAM_T)
					last = i
			}
		}
		else
		{
			g_PlayerTeam[i] = CS_TEAM_UNASSIGNED
		}
	}
	if(g_TeamAlive[CS_TEAM_T] == 1)
	{
		if(last != g_PlayerLast && g_SafeTime)
		{
			prisoner_last(last)
		}
	}
	else
	{
		if(g_Duel || g_DuelA || g_DuelB)
		{
			if(is_user_alive(g_DuelA))
			{
				set_user_rendering(g_DuelA, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
				player_strip_weapons(g_DuelA)
			}

			if(is_user_alive(g_DuelB))
			{
				set_user_rendering(g_DuelB, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
				player_strip_weapons(g_DuelB)
			}

		}
		g_PlayerLast = 0
		g_DuelA = 0
		g_DuelB = 0
		g_Duel = 0
	}
}

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")
}

public hud_status(task)
{
	static i, n
	new name[32], szStatus[64], wanted[1024]
 
	if(g_RoundStarted < (get_pcvar_num(gp_RetryTime) / 2))
		g_RoundStarted++

	if(!g_Freeday && !g_Simon && g_SimonAllowed && (0.0 < g_SimonRandom < get_gametime()))
	{
		cmd_simon(random_num(1, g_MaxClients))
	}

	n = 0
	formatex(wanted, charsmax(wanted), "%L", LANG_SERVER, "JBE_PRISONER_WANTED")
	n = strlen(wanted)
	for(i = 0; i < g_MaxClients; i++)
	{
		if(get_bit(g_PlayerWanted, i) && is_user_alive(i) && n < charsmax(wanted))
		{
			get_user_name(i, name, charsmax(name))
			n += copy(wanted[n], charsmax(wanted) - n, "^n^t")
			n += copy(wanted[n], charsmax(wanted) - n, name)
		}
	}

	team_count()
	formatex(szStatus, charsmax(szStatus), "%L", LANG_SERVER, "JBE_STATUS", g_TeamAlive[CS_TEAM_T], g_TeamCount[CS_TEAM_T])
	message_begin(MSG_BROADCAST, get_user_msgid("StatusText"), {0,0,0}, 0)
	write_byte(0)
	write_string(szStatus)
	message_end()

	if(g_Simon)
	{
		get_user_name(g_Simon, name, charsmax(name))
		player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_SIMON_FOLLOW", name)
	}
	else if(g_Freeday)
	{
		player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_FREEDAY")
	}

	if(g_PlayerWanted)
		player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%s", wanted)
	else if(g_PlayerRevolt)
		player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%L", LANG_SERVER, "JBE_PRISONER_REVOLT")

	player_hudmessage(0, 5, HUD_DELAY + 1.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_DAY", g_JailDay)

	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_CrowbarMul = get_pcvar_float(gp_CrowbarMul)

}

public safe_time(task)
{
	g_SafeTime = 1
}

public check_freeday(task)
{
	static Float:roundmax, i
	if(!g_Simon && !g_PlayerLast)
	{
		g_Freeday = 1
		hud_status(0)
		roundmax = get_pcvar_float(gp_RoundMax)
		if(roundmax > 0.0)
		{
			for(i = 1; i <= g_MaxClients; i++)
			{
				if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
					freeday_set(0, i)
			}
			emit_sound(0, CHAN_AUTO, "jbone/csg_ding.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
			player_hudmessage(0, 8, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))
			remove_task(TASK_ROUND)
			set_task(roundmax - 60.0, "check_end", TASK_ROUND)
		}
	}

	if(get_pcvar_num(gp_AutoOpen))
		jail_open()
}

public freeday_end(task)
{
	if(g_Freeday || g_PlayerFreeday)
	{
		emit_sound(0, CHAN_AUTO, "jbone/csg_ding.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
		player_hudmessage(0, 8, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_ENDFREEDAY")
	}
}

public check_end(task)
{
	team_count()
	for(new i = 1; i <= g_MaxClients; i++)
	{
		if(g_PlayerTeam[i] == CS_TEAM_T && is_user_alive(i))
		{
			user_silentkill(i)
			cs_set_user_deaths(i, get_user_deaths(i) - 1)
		}
	}
	for(new i = 1; i <= g_MaxClients; i++)
	{
		if(g_PlayerTeam[i] == CS_TEAM_CT && is_user_alive(i))
		{
			user_silentkill(i)
			cs_set_user_deaths(i, get_user_deaths(i) - 1)
		}
	}
	player_hudmessage(0, 6, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_ROUNDEND")
}

public prisoner_last(id)
{
	static name[32], Float:roundmax
	if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)
	{
		roundmax = get_pcvar_float(gp_RoundMax)
		get_user_name(id, name, charsmax(name))
		g_PlayerLast = id
		player_hudmessage(0, 6, 5.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_PRISONER_LAST", name)
		remove_task(TASK_ROUND)
		if(roundmax > 0.0)
		{
			player_hudmessage(0, 8, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))
			set_task(roundmax - 60.0, "check_end", TASK_ROUND)
		}
		if((g_TeamAlive[CS_TEAM_CT] > 0) && get_pcvar_num(gp_AutoLastresquest))
			cmd_lastrequest(id)
	}
}

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_LastDenied = 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, "JBE_MENU_LASTREQ_SEL3", src, LANG_SERVER, "JBE_MENU_DUEL_SEL", src, dst)
	player_hudmessage(0, 6, 3.0, {0, 255, 255}, option)

	g_DuelA = id
	clear_bit(g_PlayerCrowbar, id)
	player_strip_weapons(id)
	player_glow(id, g_Colors[3])
	set_user_health(id, 100)

	g_DuelB = player
	player_strip_weapons(player)
	player_glow(player, g_Colors[2])
	set_user_health(player, 100)
	g_BlockWeapons = 1
	return PLUGIN_HANDLED
}

public duel_guns(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu)
		g_LastDenied = 0
		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, "JBE_MENU_DUEL_SEL", src, dst)
	emit_sound(0, CHAN_AUTO, "jbone/lrsound.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	player_hudmessage(0, 6, 3.0, {0, 255, 255}, option)

	g_DuelA = id
	clear_bit(g_PlayerCrowbar, id)
	player_strip_weapons(id)
	gun = give_item(id, _Duel[g_Duel - 4][_entname])
	cs_set_weapon_ammo(gun, 1)
	set_user_health(id, 100)
	player_glow(id, g_Colors[3])

	g_DuelB = player
	player_strip_weapons(player)
	gun = give_item(player, _Duel[g_Duel - 4][_entname])
	cs_set_weapon_ammo(gun, 1)
	set_user_health(player, 100)
	player_glow(player, g_Colors[2])

	g_BlockWeapons = 1
	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) || is_user_admin(id))
			{
				g_Simon = 0
				get_user_name(id, dst, charsmax(dst))
				client_print(0, print_console, "%s gives freeday for everyone", dst)
				server_print("JBE Client %i gives freeday for everyone", id)
				check_freeday(TASK_FREEDAY)
			}
		}
	}
	return PLUGIN_HANDLED
}

public lastrequest_select(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		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, "JBE_MENU_LASTREQ_SEL1", dst)
			player_hudmessage(0, 6, 3.0, {0, 255, 255}, option)
			set_bit(g_FreedayAuto, id)
			user_silentkill(id)
		}
		case('2'):
		{
			formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL2", dst)
			player_hudmessage(0, 6, 3.0, {0, 255, 255}, option)
			g_Duel = 2
			player_strip_weapons_all()
			i = random_num(0, sizeof(_WeaponsFree) - 1)
			give_item(id, _WeaponsFree[i])
			g_BlockWeapons = 1
			cs_set_user_bpammo(id, _WeaponsFreeCSW[i], _WeaponsFreeAmmo[i])
		}
		case('3'):
		{
			g_Duel = 3
			menu_players(id, CS_TEAM_CT, 0, 1, "duel_knives", "%L", LANG_SERVER, "JBE_MENU_DUEL")
		}
		default:
		{
			g_Duel = str_to_num(data)
			menu_players(id, CS_TEAM_CT, 0, 1, "duel_guns", "%L", LANG_SERVER, "JBE_MENU_DUEL")
		}
	}
	g_LastDenied = 1
	menu_destroy(menu)
	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)
		entity_set_int(player, EV_INT_skin, 3)
		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_hudmessage(0, 6, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_GUARD_FREEDAYGIVE", src, dst)
		}
		else if(!is_freeday())
		{
			player_hudmessage(0, 6, 3.0, {0, 255, 255}, "%L", LANG_SERVER, "JBE_PRISONER_HASFREEDAY", dst)
		}
	}
}

stock first_join(id)
{
	if(!get_bit(g_PlayerJoin, id))
	{
		set_bit(g_PlayerJoin, id)
		clear_bit(g_PlayerHelp, id)
		set_task(5.0, "cmd_help", TASK_HELP + id)
	}
}

stock ctcount_allowed()
{
	static count
	count = ((g_TeamCount[CS_TEAM_T] + g_TeamCount[CS_TEAM_CT]) / get_pcvar_num(gp_TeamRatio))
	if(count < 2)
		count = 2
	else if(count > get_pcvar_num(gp_CtMax))
		count = get_pcvar_num(gp_CtMax)

	return count
}

stock player_hudmessage(id, hudid, Float:time = 0.0, color[3] = {0, 255, 255}, 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)
		}
	}
	menu_display(id, menu)
}

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

stock player_strip_weapons(id)
{
	strip_user_weapons(id)
	give_item(id, "weapon_knife")
	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))
		{
			player_strip_weapons(i)
		}
	}
}

stock is_freeday()
{
	return (g_FreedayNext || g_Freeday || (g_JailDay == 1))
}

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)
		}
	}
}
__________________

Last edited by Barlap; 10-28-2016 at 08:29.
Barlap is offline
Send a message via ICQ to Barlap Send a message via Skype™ to Barlap
crashbandicoot
BANNED
Join Date: Mar 2012
Location: why will u come XD?
Old 10-25-2016 , 15:09   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #2

https://forums.alliedmods.net/showthread.php?p=2464741 and https://forums.alliedmods.net/showthread.php?p=2464742 . So Can you GLOW V_WEAPON MODELS?
crashbandicoot is offline
Send a message via Skype™ to crashbandicoot
Natsheh
Veteran Member
Join Date: Sep 2012
Old 10-25-2016 , 17:19   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #3

hook Ham_Item_Deploy instead of current_weapon its much better.

PHP Code:
public plugin_init()
{
             
RegisterHam(Ham_Item_Deploy"weapon_knife""fw_knife_deploy"1)
}

#define WEAPON_LINUXDIFF      4
const m_iWeaponOwner 41

public fw_knife_deploy(const iKnife)
{
    if(!
pev_valid(iKnife))
        return 
HAM_IGNORED;
    
    new 
id get_pdata_cbase(iKnifem_iWeaponOwnerWEAPON_LINUXDIFF)
    
    
set_pev(idpev_viewmodel2string v_model)
    
set_pev(idpev_weaponmodel2string p_model)
    
    return 
HAM_HANDLED;


Quote:
Originally Posted by crashbandicoot View Post
and,

glowing the v model is impossible!

Last edited by Natsheh; 10-25-2016 at 17:21.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
Barlap
Senior Member
Join Date: Apr 2016
Location: Romania
Old 10-26-2016 , 07:50   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #4

Cand you add the code in the sma to work?
I don't know how
__________________
Barlap is offline
Send a message via ICQ to Barlap Send a message via Skype™ to Barlap
Natsheh
Veteran Member
Join Date: Sep 2012
Old 10-26-2016 , 08:09   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #5

here u go...
-_-

PHP Code:
/*
Changelog:

v1.9
    * Finally fixed voice control
    * Added cvar to disable team change
    * Fixed OldStyle team menu issue
    * Fixed crowbar user + he damage issue

v1.8
    * Fixed duel bug
    * Fixed clcmd/concmd flags problem
    * Added cell opener for maps with multi_manager 
    * Added cvar to enable last request
    * Added cvar to enable motd

v1.7
    * Fixed auto Simon mode

v1.6
    * Updated dictionary
    * Fixed last request abuse bug
    * Fixed voice mode bugs
    * Added auto team transfer to Guards that never been Simon
    * Added auto disconnect to Spectators that doesn't join any team in 3 rounds
    * Added blocking for hints messages
    * Added auto door open on freeday
    * Added /open command only for Simon

v1.5
    * Improved team select code
    * Improved team status code
    * Updated dictionary
    * Added custom model (using body+skin)
    * Added sounds
    * Added freeday menu command
    * Added lastrequest menu command & functionalities
    * Added help command
    * Added last prisoner hud message
    * Added cvar to change talk mode control (+simonvoice optional or required to talk)
    * Added cvar to allow shooting func_button to activate it
    * Added cvar to allow auto-freeday hud message after 60 seconds with no Simon selected
    * Added cvar to force round end after some time of auto-freeday
    * Added cvar to change game mode (classic counter for days)
    * Added simon footsteps decals (controlled by cvar)
    * Added restriction on HE for guards

v1.3
    * First public release
*/

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
 
#define PLUGIN_NAME    "JailBreak Extreme"
#define PLUGIN_AUTHOR    "JoRoPiTo"
#define PLUGIN_VERSION    "1.9"
#define PLUGIN_CVAR    "jbextreme"

#define TASK_STATUS    2487000
#define TASK_FREEDAY    2487100
#define TASK_ROUND    2487200
#define TASK_HELP        2487300
#define TASK_SAFETIME    2487400
#define TASK_FREEEND    2487500
#define TEAM_MENU        "#Team_Select_Spect"
#define TEAM_MENU2    "#Team_Select_Spect"
#define HUD_DELAY        Float:4.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_len(%1)        floatsqroot(%1[0] * %1[0] + %1[1] * %1[1] + %1[2] * %1[2])
#define vec_mul(%1,%2)        ( %1[0] *= %2, %1[1] *= %2, %1[2] *= %2)
#define vec_copy(%1,%2)        ( %2[0] = %1[0], %2[1] = %1[1],%2[2] = %1[2])

// Offsets
#define m_iPrimaryWeapon    116
#define m_iVGUI            510
#define m_fGameHUDInitialized    349
#define m_fNextHudTextArgsGameTime    198
 
enum _hud _hudsyncFloat:_xFloat:_yFloat:_time }
enum _lastrequest _knife_deagle_freeday_weapon }
enum _duel _name[16], _csw_entname[32], _opt[32], _sel[32] }

new 
gp_PrecacheSpawn
new gp_PrecacheKeyValue

new gp_CrowbarMax
new gp_CrowbarMul
new gp_TeamRatio
new gp_CtMax
new gp_BoxMax
new gp_TalkMode
new gp_VoiceBlock
new gp_RetryTime
new gp_RoundMax
new gp_ButtonShoot
new gp_SimonSteps
new gp_SimonRandom
new gp_GlowModels
new gp_AutoLastresquest
new gp_LastRequest
new gp_Motd
new gp_SpectRounds
new gp_NosimonRounds
new gp_AutoOpen
new gp_TeamChange

new g_MaxClients
new g_MsgStatusText
new g_MsgStatusIcon
new g_MsgVGUIMenu
new g_MsgShowMenu
new g_MsgClCorpse
new g_MsgMOTD

new gc_TalkMode
new gc_VoiceBlock
new gc_SimonSteps
new gc_ButtonShoot
new Float:gc_CrowbarMul

// Precache
new const _FistModels[][] = { "models/p_bknuckles.mdl""models/v_pnike.mdl" }
new const 
_CrowbarModels[][] = { "models/p_realcrow.mdl""models/v_realcrow.mdl" }
new const 
_BoxModels[][] = { "models/p_box.mdl""models/v_box.mdl" }
new const 
_FistSounds[][] = { "weapons/cbar_hitbod2.wav""weapons/cbar_hitbod1.wav""weapons/bullet_hit1.wav""weapons/bullet_hit2.wav" }
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_scout""weapon_deagle""weapon_mac10""weapon_elite""weapon_ak47""weapon_m4a1""weapon_mp5navy" }
new const 
_WeaponsFreeCSW[] = { CSW_SCOUTCSW_DEAGLECSW_MAC10CSW_ELITECSW_AK47CSW_M4A1CSW_MP5NAVY }
new const 
_WeaponsFreeAmmo[] = { 90351001209090120 }

new const 
_Duel[][_duel] =
{
    { 
"Deagle"CSW_DEAGLE"weapon_deagle""JBE_MENU_LASTREQ_OPT4""JBE_MENU_LASTREQ_SEL4" },
    { 
"Scout"CSW_SCOUT"weapon_scout""JBE_MENU_LASTREQ_OPT5""JBE_MENU_LASTREQ_SEL5" },
    { 
"Grenades"CSW_HEGRENADE"weapon_hegrenade""JBE_MENU_LASTREQ_OPT6""JBE_MENU_LASTREQ_SEL6" },
    { 
"Awp"CSW_AWP"weapon_awp""JBE_MENU_LASTREQ_OPT7""JBE_MENU_LASTREQ_SEL7" }
}

// Reasons
new const g_Reasons[][] =  {
    
"",
    
"JBE_PRISONER_REASON_1",
    
"JBE_PRISONER_REASON_2",
    
"JBE_PRISONER_REASON_3",
    
"JBE_PRISONER_REASON_4",
    
"JBE_PRISONER_REASON_5",
    
"JBE_PRISONER_REASON_6"
}

// HudSync: 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,  0.1,  0.2,  2.0},
    {
0,  0.1,  0.3,  2.0},
    {
0, -1.0,  0.9,  3.0},
    {
0,  0.6,  0.1,  3.0},
    {
0, -1.0,  0.6,  3.0},
    {
0,  0.8,  0.320.0},
    {
0, -1.0,  0.4,  3.0}
}

// Colors: 0:Simon / 1:Freeday / 2:CT Duel / 3:TT Duel
new const g_Colors[][3] = { {02550}, {2551400}, {00255}, {25500} }


new 
CsTeams:g_PlayerTeam[33]
new 
Float:g_SimonRandom
new Trie:g_CellManagers
new g_HelpText[512]
new 
g_JailDay
new g_PlayerJoin
new g_PlayerReason[33]
new 
g_PlayerSpect[33]
new 
g_PlayerSimon[33]
new 
g_PlayerNomic
new g_PlayerWanted
new g_PlayerCrowbar
new g_PlayerRevolt
new g_PlayerHelp
new g_PlayerFreeday
new g_PlayerLast
new g_FreedayAuto
new g_FreedayNext
new g_TeamCount[CsTeams]
new 
g_TeamAlive[CsTeams]
new 
g_BoxStarted
new g_CrowbarCount
new g_Simon
new g_SimonAllowed
new g_SimonTalking
new g_SimonVoice
new g_RoundStarted
new g_LastDenied
new g_Freeday
new g_BlockWeapons
new g_RoundEnd
new g_Duel
new g_DuelA
new g_DuelB
new g_SafeTime
new g_Buttons[10]
 
public 
plugin_init()
{
    
unregister_forward(FM_Spawngp_PrecacheSpawn)
    
unregister_forward(FM_KeyValuegp_PrecacheKeyValue)
 
    
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)
    
register_cvar(PLUGIN_CVARPLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY)
 
    
register_dictionary("jbextreme.txt")

    
g_MsgStatusText get_user_msgid("StatusText")
    
g_MsgStatusIcon get_user_msgid("StatusIcon")
    
g_MsgVGUIMenu get_user_msgid("VGUIMenu")
    
g_MsgShowMenu get_user_msgid("ShowMenu")
    
g_MsgMOTD get_user_msgid("MOTD")
    
g_MsgClCorpse get_user_msgid("ClCorpse")

    
register_message(g_MsgStatusText"msg_statustext")
    
register_message(g_MsgStatusIcon"msg_statusicon")
    
register_message(g_MsgVGUIMenu"msg_vguimenu")
    
register_message(g_MsgShowMenu"msg_showmenu")
    
register_message(g_MsgMOTD"msg_motd")
    
register_message(g_MsgClCorpse"msg_clcorpse")

    
RegisterHam(Ham_Item_Deploy"weapon_knife""fw_knife_deploy"1)
    
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_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_Touch"weapon_hegrenade""player_touchweapon")
    
RegisterHam(Ham_Touch"weaponbox""player_touchweapon")
    
RegisterHam(Ham_Touch"armoury_entity""player_touchweapon")

    
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_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_menucmd(register_menuid(TEAM_MENU), 51"team_select"
    
register_menucmd(register_menuid(TEAM_MENU2), 51"team_select"

    
register_clcmd("jointeam""cmd_jointeam")
    
register_clcmd("joinclass""cmd_joinclass")
    
register_clcmd("+simonvoice""cmd_voiceon")
    
register_clcmd("-simonvoice""cmd_voiceoff")

    
register_clcmd("say /fd""cmd_freeday")
    
register_clcmd("say /freeday""cmd_freeday")
    
register_clcmd("say /day""cmd_freeday")
    
register_clcmd("say /lr""cmd_lastrequest")
    
register_clcmd("say /lastrequest""cmd_lastrequest")
    
register_clcmd("say /duel""cmd_lastrequest")
    
register_clcmd("say /simon""cmd_simon")
    
register_clcmd("say /open""cmd_open")
    
register_clcmd("say /nomic""cmd_nomic")
    
register_clcmd("say /box""cmd_box")
    
register_clcmd("say /help""cmd_help")

    
register_clcmd("jbe_freeday""adm_freeday"ADMIN_KICK)
    
register_concmd("jbe_nomic""adm_nomic"ADMIN_KICK)
    
register_concmd("jbe_open""adm_open"ADMIN_KICK)
    
register_concmd("jbe_box""adm_box"ADMIN_KICK)
 
    
gp_GlowModels register_cvar("jbe_glowmodels""0")
    
gp_SimonSteps register_cvar("jbe_simonsteps""1")
    
gp_CrowbarMul register_cvar("jbe_crowbarmultiplier""25.0")
    
gp_CrowbarMax register_cvar("jbe_maxcrowbar""1")
    
gp_TeamRatio register_cvar("jbe_teamratio""3")
    
gp_TeamChange register_cvar("jbe_teamchange""0"// 0-disable team change for tt / 1-enable team change
    
gp_CtMax register_cvar("jbe_maxct""6")
    
gp_BoxMax register_cvar("jbe_boxmax""6")
    
gp_RetryTime register_cvar("jbe_retrytime""10.0")
    
gp_RoundMax register_cvar("jbe_freedayround""240.0")
    
gp_AutoLastresquest register_cvar("jbe_autolastrequest""1")
    
gp_LastRequest register_cvar("jbe_lastrequest""1")
    
gp_Motd register_cvar("jbe_motd""1")
    
gp_SpectRounds register_cvar("jbe_spectrounds""3")
    
gp_NosimonRounds register_cvar("jbe_nosimonrounds""7")
    
gp_SimonRandom register_cvar("jbe_randomsimon""0")
    
gp_AutoOpen register_cvar("jbe_autoopen""1")
    
gp_TalkMode register_cvar("jbe_talkmode""2")    // 0-alltak / 1-tt talk / 2-tt no talk
    
gp_VoiceBlock register_cvar("jbe_blockvoice""2")    // 0-dont block / 1-block voicerecord / 2-block voicerecord except simon
    
gp_ButtonShoot register_cvar("jbe_buttonshoot""1")    // 0-standard / 1-func_button shoots!
 
    
g_MaxClients get_global_int(GL_maxClients)
 
    for(new 
0sizeof(g_HudSync); i++)
        
g_HudSync[i][_hudsync] = CreateHudSyncObj()

    
formatex(g_HelpTextcharsmax(g_HelpText), "%L^n^n%L^n^n%L^n^n%L",
            
LANG_SERVER"JBE_HELP_TITLE",
            
LANG_SERVER"JBE_HELP_BINDS",
            
LANG_SERVER"JBE_HELP_GUARD_CMDS",
            
LANG_SERVER"JBE_HELP_PRISONER_CMDS")

    
setup_buttons()
}
 
public 
plugin_precache()
{
    static 
i
    precache_model
("models/player/jb_csg/jb_csg.mdl")
 
    for(
0sizeof(_FistModels); i++)
        
precache_model(_FistModels[i])
 
    for(
0sizeof(_CrowbarModels); i++)
        
precache_model(_CrowbarModels[i])

    for(
0sizeof(_BoxModels); i++)
        
precache_model(_BoxModels[i])
 
    for(
0sizeof(_FistSounds); i++)
        
precache_sound(_FistSounds[i])

    
precache_sound("jbone/lrsound.wav")
    
precache_sound("jbone/brass_bell_C.wav")
    
precache_sound("jbone/box.wav")
 
     
g_CellManagers TrieCreate()
    
gp_PrecacheSpawn register_forward(FM_Spawn"precache_spawn"1)
    
gp_PrecacheKeyValue register_forward(FM_KeyValue"precache_keyvalue"1)
}

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

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

    get_kvd
(kvd_handleKV_ClassNameinfocharsmax(info))
    if(!
equal(info"multi_manager"))
        return 
FMRES_IGNORED

    get_kvd
(kvd_handleKV_KeyNameinfocharsmax(info))
    
TrieSetCell(g_CellManagersinfoent)
    return 
FMRES_IGNORED
}

public 
client_putinserver(id)
{
    
clear_bit(g_PlayerJoinid)
    
clear_bit(g_PlayerHelpid)
    
clear_bit(g_PlayerCrowbarid)
    
clear_bit(g_PlayerNomicid)
    
clear_bit(g_PlayerWantedid)
    
clear_bit(g_SimonTalkingid)
    
clear_bit(g_SimonVoiceid)
    
g_PlayerSpect[id] = 0
    g_PlayerSimon
[id] = 0
}

public 
client_disconnect(id)
{
    if(
g_Simon == id)
    {
        
g_Simon 0
        ClearSyncHud
(0g_HudSync[2][_hudsync])
        
player_hudmessage(025.0_"%L"LANG_SERVER"JBE_SIMON_HASGONE")
    }
    else if(
g_PlayerLast == id || (g_Duel && (id == g_DuelA || id == g_DuelB)))
    {
        
g_Duel 0
        g_DuelA 
0
        g_DuelB 
0
        g_LastDenied 
0
        g_BlockWeapons 
0
        g_PlayerLast 
0
    
}
    
team_count()
}

public 
client_PostThink(id)
{
    if(
id != g_Simon || !gc_SimonSteps || !is_user_alive(id) ||
        !(
entity_get_int(idEV_INT_flags) & FL_ONGROUND) || entity_get_int(idEV_ENT_groundentity))
        return 
PLUGIN_CONTINUE
    
    
static Float:origin[3]
    static 
Float:last[3]

    
entity_get_vector(idEV_VEC_originorigin)
    if(
get_distance_f(originlast) < 32.0)
    {
        return 
PLUGIN_CONTINUE
    
}

    
vec_copy(originlast)
    if(
entity_get_int(idEV_INT_bInDuck))
        
origin[2] -= 18.0
    
else
        
origin[2] -= 36.0


    message_begin
(MSG_BROADCASTSVC_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(msgiddestid)
{
    return 
PLUGIN_HANDLED
}

public 
msg_statusicon(msgiddestid)
{
    static 
icon[5
    
get_msg_arg_string(2iconcharsmax(icon))
    if(
icon[0] == 'b' && icon[2] == 'y' && icon[3] == 'z')
    {
        
set_pdata_int(id235get_pdata_int(id235) & ~(1<<0))
        return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

public 
msg_vguimenu(msgiddestid)
{
    static 
msgarg1
    
static CsTeams:team

    msgarg1 
get_msg_arg_int(1)
    if(
msgarg1 == 2)
    {
        
team cs_get_user_team(id)
        if((
team == CS_TEAM_T) && !is_user_admin(id) && (is_user_alive(id) || !get_pcvar_num(gp_TeamChange)))
        {
            
client_print(idprint_center"%L"LANG_SERVER"JBE_TEAM_CANTCHANGE")
            return 
PLUGIN_HANDLED
        
}
        
show_menu(id51TEAM_MENU, -1)
        return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

public 
msg_showmenu(msgiddestid)
{
    static 
msgarg1roundloop
    
static CsTeams:team
    msgarg1 
get_msg_arg_int(1)

    if(
msgarg1 != 531 && msgarg1 != 563)
        return 
PLUGIN_CONTINUE

    roundloop 
floatround(get_pcvar_float(gp_RetryTime) / 2)
    
team cs_get_user_team(id)

    if(
team == CS_TEAM_T)
    {
        if(!
is_user_admin(id) && (is_user_alive(id) || (g_RoundStarted >= roundloop) || !get_pcvar_num(gp_TeamChange)))
        {
            
client_print(idprint_center"%L"LANG_SERVER"JBE_TEAM_CANTCHANGE")
            return 
PLUGIN_HANDLED
        
}
        else
        {
            
show_menu(id51TEAM_MENU, -1)
            return 
PLUGIN_HANDLED
        
}
    }
    else
    {
        
show_menu(id51TEAM_MENU, -1)
        return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

public 
msg_motd(msgiddestid)
{
    if(
get_pcvar_num(gp_Motd))
        return 
PLUGIN_HANDLED

    
return PLUGIN_CONTINUE
}

public 
msg_clcorpse(msgiddestid)
{
    return 
PLUGIN_HANDLED
}

#define WEAPON_LINUXDIFF      4
const m_iWeaponOwner 41

public fw_knife_deploy(const iKnife)
{
    if(!
pev_valid(iKnife))
        return 
HAM_IGNORED;
    
    new 
id get_pdata_cbase(iKnifem_iWeaponOwnerWEAPON_LINUXDIFF)
    
    if(!
is_user_alive(id) || get_user_team(id) != CS_TEAM_T)
        return 
HAM_IGNORED;
    
    
set_pev(idpev_viewmodel2get_bit(g_PlayerCrowbarid) ? _CrowbarModels[1]:_FistModels[1])
    
set_pev(idpev_weaponmodel2get_bit(g_PlayerCrowbarid) ? _CrowbarModels[0]:_FistModels[0])
    
    return 
HAM_HANDLED;
}  

public 
player_status(id)
{
    static 
typeplayerCsTeams:teamname[32], health
    type 
read_data(1)
    
player read_data(2)
    switch(
type)
    {
        case(
1):
        {
            
ClearSyncHud(idg_HudSync[1][_hudsync])
        }
        case(
2):
        {
            
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(playernamecharsmax(name))
            
player_hudmessage(id42.0, {02550}, "%L"LANG_SERVER,
                (
team == CS_TEAM_T) ? "JBE_PRISONER_STATUS" "JBE_GUARD_STATUS"namehealth)
        }
    }
    
    return 
PLUGIN_HANDLED
}

public 
impulse_100(id)
{
    if(
cs_get_user_team(id) == CS_TEAM_T)
        return 
PLUGIN_HANDLED

    
return PLUGIN_CONTINUE
}

public 
player_spawn(id)
{
    static 
CsTeams:team

    
if(!is_user_connected(id))
        return 
HAM_IGNORED

    set_pdata_float
(idm_fNextHudTextArgsGameTimeget_gametime() + 999999.0)
    
player_strip_weapons(id)
    if(
g_RoundEnd)
    {
        
g_RoundEnd 0
        g_JailDay
++
    }

    
set_user_rendering(idkRenderFxNone000kRenderNormal0)

    
clear_bit(g_PlayerCrowbarid)
    
clear_bit(g_PlayerWantedid)
    
team cs_get_user_team(id)

    switch(
team)
    {
        case(
CS_TEAM_T):
        {
            
g_PlayerLast 0
            
if(!g_PlayerReason[id])
                
g_PlayerReason[id] = random_num(16)

            
player_hudmessage(id05.0, {2550255}, "%L %L"LANG_SERVER"JBE_PRISONER_REASON",
                
LANG_SERVERg_Reasons[g_PlayerReason[id]])

            
set_user_info(id"model""jb_csg")
            
entity_set_int(idEV_INT_body2)
            if(
is_freeday() || get_bit(g_FreedayAutoid))
            {
                
freeday_set(0id)
                
clear_bit(g_FreedayAutoid)
            }
            else
            {
                
entity_set_int(idEV_INT_skinrandom_num(02))
            }

            if(
g_CrowbarCount get_pcvar_num(gp_CrowbarMax))
            {
                if(
random_num(0g_MaxClients) > (g_MaxClients 2))
                {
                    
g_CrowbarCount++
                    
set_bit(g_PlayerCrowbarid)
                }
            }
            
cs_set_user_armor(id0CS_ARMOR_NONE)
        }
        case(
CS_TEAM_CT):
        {
            
g_PlayerSimon[id]++
            
set_user_info(id"model""jb_csg")
            
entity_set_int(idEV_INT_body3)
            
cs_set_user_armor(id100CS_ARMOR_VESTHELM)
        }
    }
    
first_join(id)
    return 
HAM_IGNORED
}

public 
player_damage(victimentattackerFloat:damagebits)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
        return 
HAM_IGNORED

    
switch(g_Duel)
    {
        case(
0):
        {
            if(
attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerCrowbarattacker) && cs_get_user_team(victim) != CS_TEAM_T)
            {
                
SetHamParamFloat(4damage gc_CrowbarMul)
                return 
HAM_OVERRIDE
            
}
        }
        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
        
}
    }

    return 
HAM_IGNORED
}

public 
player_attack(victimattackerFloat:damageFloat:direction[3], tracehandledamagebits)
{
    static 
CsTeams:vteamCsTeams:ateam
    
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
        return 
HAM_IGNORED

    vteam 
cs_get_user_team(victim)
    
ateam cs_get_user_team(attacker)

    if(
ateam == CS_TEAM_CT && vteam == CS_TEAM_CT)
        return 
HAM_SUPERCEDE

    
switch(g_Duel)
    {
        case(
0):
        {
            if(
ateam == CS_TEAM_CT && vteam == CS_TEAM_T)
            {
                if(
get_bit(g_PlayerRevoltvictim))
                {
                    
clear_bit(g_PlayerRevoltvictim)
                    
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_T && !g_BoxStarted)
        return 
HAM_SUPERCEDE

    
if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT)
    {
        if(!
g_PlayerRevolt)
            
revolt_start()

        
set_bit(g_PlayerRevoltattacker)
    }

    return 
HAM_IGNORED
}

public 
button_attack(buttonidFloat:damageFloat:direction[3], tracehandledamagebits)
{
    if(
is_valid_ent(button) && gc_ButtonShoot)
    {
        
ExecuteHamB(Ham_Usebuttonid021.0)
        
entity_set_float(buttonEV_FL_frame0.0)
    }

    return 
HAM_IGNORED
}

public 
player_killed(victimattackershouldgib)
{
    static 
CsTeams:vteamCsTeams:kteam
    
if(!(attacker <= g_MaxClients) || !is_user_connected(attacker))
        
kteam CS_TEAM_UNASSIGNED
    
else
        
kteam cs_get_user_team(attacker)

    
vteam cs_get_user_team(victim)
    if(
g_Simon == victim)
    {
        
g_Simon 0
        ClearSyncHud
(0g_HudSync[2][_hudsync])
        
player_hudmessage(025.0_"%L"LANG_SERVER"JBE_SIMON_KILLED")
    }

    switch(
g_Duel)
    {
        case(
0):
        {
            switch(
vteam)
            {
                case(
CS_TEAM_CT):
                {
                    if(
kteam == CS_TEAM_T && !get_bit(g_PlayerWantedattacker))
                    {
                        
set_bit(g_PlayerWantedattacker)
                        
entity_set_int(attackerEV_INT_skin4)
                    }
                }
                case(
CS_TEAM_T):
                {
                    
clear_bit(g_PlayerRevoltvictim)
                    
clear_bit(g_PlayerWantedvictim)
                }
            }
        }
        default:
        {
            if(
g_Duel != && (attacker == g_DuelA || attacker == g_DuelB))
            {
                
set_user_rendering(victimkRenderFxNone000kRenderNormal0)
                
set_user_rendering(attackerkRenderFxNone000kRenderNormal0)
                
g_Duel 0
                g_LastDenied 
0
                g_BlockWeapons 
0
                g_PlayerLast 
0
                team_count
()
            }
        }
    }
    
hud_status(0)
    return 
HAM_IGNORED
}

public 
player_touchweapon(ident)
{
    static 
model[32], class[32]
    if(
g_BlockWeapons)
        return 
HAM_SUPERCEDE

    
if(is_valid_ent(id) && g_Duel != && is_user_alive(ent) && cs_get_user_team(ent) == CS_TEAM_CT)
    {
        
entity_get_string(idEV_SZ_modelmodelcharsmax(model))
        if(
model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
        {
            
entity_get_string(idEV_SZ_classname, class, charsmax(class))
            if(
equal(class, "weapon_hegrenade"))
                
remove_entity(id)

            return 
HAM_SUPERCEDE
        
}

    }

    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(idchannelsample[])
{
    if(
is_user_alive(id) && equal(sample"weapons/knife_"14))
    {
        switch(
sample[17])
        {
            case(
'b'):
            {
                
emit_sound(idCHAN_WEAPON"weapons/cbar_hitbod2.wav"1.0ATTN_NORM0PITCH_NORM)
            }
            case(
'w'):
            {
                
emit_sound(idCHAN_WEAPON"weapons/cbar_hitbod1.wav"1.0ATTN_NORM0PITCH_LOW)
            }
            case(
'1''2'):
            {
                
emit_sound(idCHAN_WEAPON"weapons/bullet_hit2.wav"random_float(0.51.0), ATTN_NORM0PITCH_NORM)
            }
        }
        return 
FMRES_SUPERCEDE
    
}
    return 
FMRES_IGNORED
}

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

    
if(is_user_admin(sender))
    {
        
engfunc(EngFunc_SetClientListeningreceiversendertrue)
        return 
FMRES_SUPERCEDE
    
}

    switch(
gc_VoiceBlock)
    {
        case(
2):
        {
            if((
sender != g_Simon) && (!get_bit(g_SimonVoicesender) && gc_VoiceBlock))
            {
                
engfunc(EngFunc_SetClientListeningreceiversenderfalse)
                return 
FMRES_SUPERCEDE
            
}
        }
        case(
1):
        {
            if(!
get_bit(g_SimonVoicesender) && gc_VoiceBlock)
            {
                
engfunc(EngFunc_SetClientListeningreceiversenderfalse)
                return 
FMRES_SUPERCEDE
            
}
        }
    }
    if(!
is_user_alive(sender))
    {
        
engfunc(EngFunc_SetClientListeningreceiversenderfalse)
        return 
FMRES_SUPERCEDE
    
}

    if(
sender == g_Simon)
    {
        
engfunc(EngFunc_SetClientListeningreceiversendertrue)
        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_SetClientListeningreceiversenderlisten)
    return 
FMRES_SUPERCEDE
}

public 
player_cmdstart(iducrandom)
{
    if(
g_Duel 3)
    {
        
cs_set_user_bpammo(id_Duel[g_Duel 4][_csw], 1)
    }
}

public 
round_first()
{
    
g_JailDay 0
    
for(new 1<= g_MaxClientsi++)
        
g_PlayerSimon[i] = 0

    set_cvar_num
("sv_alltalk"1)
    
set_cvar_num("mp_roundtime"2)
    
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()
}

public 
round_end()
{
    static 
CsTeams:team
    
static maxnosimonspectrounds
    g_SafeTime 
0
    g_PlayerRevolt 
0
    g_PlayerFreeday 
0
    g_PlayerLast 
0
    g_BoxStarted 
0
    g_CrowbarCount 
0
    g_Simon 
0
    g_SimonAllowed 
0
    g_RoundStarted 
0
    g_LastDenied 
0
    g_BlockWeapons 
0
    g_TeamCount
[CS_TEAM_T] = 0
    g_TeamCount
[CS_TEAM_CT] = 0
    g_Freeday 
0
    g_FreedayNext 
= (random_num(0,99) >= 95)
    
g_RoundEnd 1
    g_Duel 
0

    remove_task
(TASK_STATUS)
    
remove_task(TASK_FREEDAY)
    
remove_task(TASK_FREEEND)
    
remove_task(TASK_ROUND)
    
maxnosimon get_pcvar_num(gp_NosimonRounds)
    
spectrounds get_pcvar_num(gp_SpectRounds)
    for(new 
1<= g_MaxClientsi++)
    {
        if(!
is_user_connected(i))
            continue

        
menu_cancel(i)
        
team cs_get_user_team(i)
        
player_strip_weapons(i)
        switch(
team)
        {
            case(
CS_TEAM_CT):
            {
                if(
g_PlayerSimon[i] > maxnosimon)
                {
                    
cmd_nomic(i)
                }
            }
            case(
CS_TEAM_SPECTATOR,CS_TEAM_UNASSIGNED):
            {
                
g_PlayerSpect[i]++
                if(
g_PlayerSpect[i] > spectrounds)
                {
                    
client_cmd(i"disconnect")
                    
server_print("JBE Disconnected spectator client #%i"i)
                }
                else
                {
                    
show_menu(i51TEAM_MENU, -1)
                }
            }
        }
    }
    for(new 
0sizeof(g_HudSync); i++)
        
ClearSyncHud(0g_HudSync[i][_hudsync])

}

public 
round_start()
{
    if(
g_RoundEnd)
        return

    
team_count()
    if(!
g_Simon && is_freeday())
    {
        
g_Freeday 1
        emit_sound
(0CHAN_AUTO"jbone/csg_ding.wav"1.0ATTN_NORM0PITCH_NORM)
        
check_freeday(TASK_FREEDAY)
    }
    else
    {
        
set_task(60.0"check_freeday"TASK_FREEDAY)
    }
    
set_task(HUD_DELAY"hud_status"TASK_STATUS__"b")
    
set_task(get_pcvar_float(gp_RetryTime) + 1.0"safe_time"TASK_SAFETIME)
    
set_task(120.0"freeday_end"TASK_FREEDAY)
    
g_SimonRandom get_pcvar_num(gp_SimonRandom) ? random_float(15.045.0) : 0.0
    g_SimonAllowed 
1
    g_FreedayNext 
0
}

public 
cmd_jointeam(id)
{
    return 
PLUGIN_HANDLED
}

public 
cmd_joinclass(id)
{
    return 
PLUGIN_HANDLED
}

public 
cmd_voiceon(id)
{
    
client_cmd(id"+voicerecord")
    
set_bit(g_SimonVoiceid)
    if(
g_Simon == id || is_user_admin(id))
        
set_bit(g_SimonTalkingid)

    return 
PLUGIN_HANDLED
}

public 
cmd_voiceoff(id)
{
    
client_cmd(id"-voicerecord")
    
clear_bit(g_SimonVoiceid)
    if(
g_Simon == id || is_user_admin(id))
        
clear_bit(g_SimonTalkingid)

    return 
PLUGIN_HANDLED
}

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

    team 
cs_get_user_team(id)
    if(
g_SimonAllowed && !g_Freeday && is_user_alive(id) && team == CS_TEAM_CT && !g_Simon)
    {
        
g_Simon id
        get_user_name
(idnamecharsmax(name))
        
entity_set_int(idEV_INT_body1)
        
g_PlayerSimon[id]--
        if(
get_pcvar_num(gp_GlowModels))
            
player_glow(idg_Colors[0])

        
hud_status(0)
    }
    return 
PLUGIN_HANDLED
}

public 
cmd_open(id)
{
    if(
id == g_Simon)
        
jail_open()

    return 
PLUGIN_HANDLED
}

public 
cmd_nomic(id)
{
    static 
CsTeams:team
    team 
cs_get_user_team(id)
    if(
team == CS_TEAM_CT)
    {
        
server_print("JBE Transfered guard to prisoners team client #%i"id)
        if(
g_Simon == id)
        {
            
g_Simon 0
            player_hudmessage
(025.0_"%L"LANG_SERVER"JBE_SIMON_TRANSFERED")
        }
        if(!
is_user_admin(id))
            
set_bit(g_PlayerNomicid)

        
user_silentkill(id)
        
cs_set_user_team(idCS_TEAM_T)
    }
    return 
PLUGIN_HANDLED
}

public 
cmd_box(id)
{
    static 
i
    
if((id 0) || (is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT))
    {
        if(
g_TeamAlive[CS_TEAM_T] <= get_pcvar_num(gp_BoxMax) && g_TeamAlive[CS_TEAM_T] > 1)
        {
            for(
1<= g_MaxClientsi++)
                if(
is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
                    
set_user_health(i100)

            
set_cvar_num("mp_tkpunish"0)
            
set_cvar_num("mp_friendlyfire"1)
            
g_BoxStarted 1
            player_hudmessage
(013.0_"%L"LANG_SERVER"JBE_GUARD_BOX")
            
set_pev(idpev_viewmodel2_BoxModels[1])
            
set_pev(idpev_weaponmodel2_BoxModels[0])
            
client_cmd(0"spk ^"jbone/box.wav^"");
        }
        else
        {
            
player_hudmessage(id13.0_"%L"LANG_SERVER"JBE_GUARD_CANTBOX")
        }
    }
    return 
PLUGIN_HANDLED
}

public 
cmd_help(id)
{
    if(
id g_MaxClients)
        
id -= TASK_HELP

    remove_task
(TASK_HELP id)
    switch(
get_bit(g_PlayerHelpid))
    {
        case(
0):
        {
            
set_bit(g_PlayerHelpid)
            
player_hudmessage(id715.0, {23010010}, "%s"g_HelpText)
            
set_task(15.0"cmd_help"TASK_HELP id)
        }
        default:
        {
            
clear_bit(g_PlayerHelpid)
            
ClearSyncHud(idg_HudSync[7][_hudsync])
        }
    }
}

public 
cmd_freeday(id)
{
    static 
menumenuname[32], option[64]
    if(!
is_freeday() && ((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id)))
    {
        
formatex(menunamecharsmax(menuname), "%L"LANG_SERVER"JBE_MENU_FREEDAY")
        
menu menu_create(menuname"freeday_choice")

        
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_FREEDAY_PLAYER")
        
menu_additem(menuoption"1"0)

        
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_FREEDAY_ALL")
        
menu_additem(menuoption"2"0)

        
menu_display(idmenu)
    }
    return 
PLUGIN_HANDLED
}

public 
cmd_freeday_player(id)
{
    if((
is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id))
        
menu_players(idCS_TEAM_Tid1"freeday_select""%L"LANG_SERVER"JBE_MENU_FREEDAY")

    return 
PLUGIN_CONTINUE
}

public 
cmd_lastrequest(id)
{
    static 
inum[5], menumenuname[32], option[64]
    if(!
get_pcvar_num(gp_LastRequest) || g_Freeday || g_LastDenied || id != g_PlayerLast || g_RoundEnd || get_bit(g_PlayerWantedid) || get_bit(g_PlayerFreedayid) || !is_user_alive(id))
        return 
PLUGIN_CONTINUE

    formatex
(menunamecharsmax(menuname), "%L"LANG_SERVER"JBE_MENU_LASTREQ")
    
menu menu_create(menuname"lastrequest_select")

    
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_LASTREQ_OPT1")
    
menu_additem(menuoption"1"0)

    
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_LASTREQ_OPT2")
    
menu_additem(menuoption"2"0)

    
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_LASTREQ_OPT3")
    
menu_additem(menuoption"3"0)

    for(
0sizeof(_Duel); i++)
    {
        
num_to_str(4numcharsmax(num))
        
formatex(optioncharsmax(option), "%L"LANG_SERVER_Duel[i][_opt])
        
menu_additem(menuoptionnum0)
    }

    
menu_display(idmenu)
    return 
PLUGIN_CONTINUE
}

public 
adm_freeday(id)
{
    static 
playeruser[32]
    if(!
is_user_admin(id))
        return 
PLUGIN_CONTINUE

    read_argv
(1usercharsmax(user))
    
player cmd_target(iduser2)
    if(
is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_T)
    {
        
freeday_set(idplayer)
    }
    return 
PLUGIN_HANDLED
}

public 
adm_nomic(id)
{
    static 
playeruser[32]
    if(
id == || is_user_admin(id))
    {
        
read_argv(1usercharsmax(user))
        
player cmd_target(iduser3)
        if(
is_user_connected(player))
        {
            
cmd_nomic(player)
        }
    }
    return 
PLUGIN_HANDLED
}

public 
adm_open(id)
{
    if(!
is_user_admin(id))
        return 
PLUGIN_CONTINUE

    jail_open
()
    return 
PLUGIN_HANDLED
}

public 
adm_box(id)
{
    if(!
is_user_admin(id))
        return 
PLUGIN_CONTINUE

    cmd_box
(-1)
    return 
PLUGIN_HANDLED
}

public 
team_select(idkey)
{
    static 
CsTeams:teamroundloopadmin

    roundloop 
get_pcvar_num(gp_RetryTime) / 2
    team 
cs_get_user_team(id)
    
admin is_user_admin(id)
    
team_count()

    if(!
admin && (team == CS_TEAM_UNASSIGNED) && (g_RoundStarted >= roundloop) && g_TeamCount[CS_TEAM_CT] && g_TeamCount[CS_TEAM_T] && !is_user_alive(id))
    {
        
team_join(idCS_TEAM_SPECTATOR)
        
client_print(idprint_center"%L"LANG_SERVER"JBE_TEAM_CANTJOIN")
        return 
PLUGIN_HANDLED
    
}


    switch(
key)
    {
        case(
0):
        {
            if(
team == CS_TEAM_T)
                return 
PLUGIN_HANDLED

            g_PlayerReason
[id] = random_num(16)

            
team_join(idCS_TEAM_T)
        }
        case(
1):
        {
            if(
team == CS_TEAM_CT || (!admin && get_bit(g_PlayerNomicid)))
                return 
PLUGIN_HANDLED

            
if(g_TeamCount[CS_TEAM_CT] < ctcount_allowed() || admin)
                
team_join(idCS_TEAM_CT)
            else
                
client_print(idprint_center"%L"LANG_SERVER"JBE_TEAM_CTFULL")
        }
        case(
5):
        {
            
user_silentkill(id)
            
team_join(idCS_TEAM_SPECTATOR)
        }
    }
    return 
PLUGIN_HANDLED
}

public 
team_join(idCsTeams:team)
{
    static 
restorevguimsgblock

    restore 
get_pdata_int(idm_iVGUI)
    
vgui restore & (1<<0)
    if(
vgui)
        
set_pdata_int(idm_iVGUIrestore & ~(1<<0))

    switch(
team)
    {
        case 
CS_TEAM_SPECTATOR:
        {
            
msgblock get_msg_block(g_MsgShowMenu)
            
set_msg_block(g_MsgShowMenuBLOCK_ONCE)
            
dllfunc(DLLFunc_ClientPutInServerid)
            
set_msg_block(g_MsgShowMenumsgblock)
            
set_pdata_int(idm_fGameHUDInitialized1)
            
engclient_cmd(id"jointeam""6")
        }
        case 
CS_TEAM_TCS_TEAM_CT:
        {
            
msgblock get_msg_block(g_MsgShowMenu)
            
set_msg_block(g_MsgShowMenuBLOCK_ONCE)
            
engclient_cmd(id"jointeam", (team == CS_TEAM_CT) ? "2" "1")
            
engclient_cmd(id"joinclass""1")
            
set_msg_block(g_MsgShowMenumsgblock)
            
g_PlayerSpect[id] = 0
        
}
    }
    
    if(
vgui)
        
set_pdata_int(idm_iVGUIrestore)
}

public 
team_count()
{
    static 
CsTeams:teamlast
    g_TeamCount
[CS_TEAM_UNASSIGNED] = 0
    g_TeamCount
[CS_TEAM_T] = 0
    g_TeamCount
[CS_TEAM_CT] = 0
    g_TeamCount
[CS_TEAM_SPECTATOR] = 0
    g_TeamAlive
[CS_TEAM_UNASSIGNED] = 0
    g_TeamAlive
[CS_TEAM_T] = 0
    g_TeamAlive
[CS_TEAM_CT] = 0
    g_TeamAlive
[CS_TEAM_SPECTATOR] = 0
    
for(new 1<= g_MaxClientsi++)
    {
        if(
is_user_connected(i))
        {
            
team cs_get_user_team(i)
            
g_TeamCount[team]++
            
g_PlayerTeam[i] = team
            
if(is_user_alive(i))
            {
                
g_TeamAlive[team]++
                if(
team == CS_TEAM_T)
                    
last i
            
}
        }
        else
        {
            
g_PlayerTeam[i] = CS_TEAM_UNASSIGNED
        
}
    }
    if(
g_TeamAlive[CS_TEAM_T] == 1)
    {
        if(
last != g_PlayerLast && g_SafeTime)
        {
            
prisoner_last(last)
        }
    }
    else
    {
        if(
g_Duel || g_DuelA || g_DuelB)
        {
            if(
is_user_alive(g_DuelA))
            {
                
set_user_rendering(g_DuelAkRenderFxNone000kRenderNormal0)
                
player_strip_weapons(g_DuelA)
            }

            if(
is_user_alive(g_DuelB))
            {
                
set_user_rendering(g_DuelBkRenderFxNone000kRenderNormal0)
                
player_strip_weapons(g_DuelB)
            }

        }
        
g_PlayerLast 0
        g_DuelA 
0
        g_DuelB 
0
        g_Duel 
0
    
}
}

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")
}

public 
hud_status(task)
{
    static 
in
    
new name[32], szStatus[64], wanted[1024]
 
    if(
g_RoundStarted < (get_pcvar_num(gp_RetryTime) / 2))
        
g_RoundStarted++

    if(!
g_Freeday && !g_Simon && g_SimonAllowed && (0.0 g_SimonRandom get_gametime()))
    {
        
cmd_simon(random_num(1g_MaxClients))
    }

    
0
    formatex
(wantedcharsmax(wanted), "%L"LANG_SERVER"JBE_PRISONER_WANTED")
    
strlen(wanted)
    for(
0g_MaxClientsi++)
    {
        if(
get_bit(g_PlayerWantedi) && is_user_alive(i) && charsmax(wanted))
        {
            
get_user_name(inamecharsmax(name))
            
+= copy(wanted[n], charsmax(wanted) - n"^n^t")
            
+= copy(wanted[n], charsmax(wanted) - nname)
        }
    }

    
team_count()
    
formatex(szStatuscharsmax(szStatus), "%L"LANG_SERVER"JBE_STATUS"g_TeamAlive[CS_TEAM_T], g_TeamCount[CS_TEAM_T])
    
message_begin(MSG_BROADCASTget_user_msgid("StatusText"), {0,0,0}, 0)
    
write_byte(0)
    
write_string(szStatus)
    
message_end()

    if(
g_Simon)
    {
        
get_user_name(g_Simonnamecharsmax(name))
        
player_hudmessage(02HUD_DELAY 1.0, {0255255}, "%L"LANG_SERVER"JBE_SIMON_FOLLOW"name)
    }
    else if(
g_Freeday)
    {
        
player_hudmessage(02HUD_DELAY 1.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_FREEDAY")
    }

    if(
g_PlayerWanted)
        
player_hudmessage(03HUD_DELAY 1.0, {2552550}, "%s"wanted)
    else if(
g_PlayerRevolt)
        
player_hudmessage(03HUD_DELAY 1.0, {2552550}, "%L"LANG_SERVER"JBE_PRISONER_REVOLT")

    
player_hudmessage(05HUD_DELAY 1.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_DAY"g_JailDay)

    
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_CrowbarMul get_pcvar_float(gp_CrowbarMul)

}

public 
safe_time(task)
{
    
g_SafeTime 1
}

public 
check_freeday(task)
{
    static 
Float:roundmaxi
    
if(!g_Simon && !g_PlayerLast)
    {
        
g_Freeday 1
        hud_status
(0)
        
roundmax get_pcvar_float(gp_RoundMax)
        if(
roundmax 0.0)
        {
            for(
1<= g_MaxClientsi++)
            {
                if(
is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
                    
freeday_set(0i)
            }
            
emit_sound(0CHAN_AUTO"jbone/csg_ding.wav"1.0ATTN_NORM0PITCH_NORM)
            
player_hudmessage(083.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_ENDTIMER"floatround(roundmax 60.0))
            
remove_task(TASK_ROUND)
            
set_task(roundmax 60.0"check_end"TASK_ROUND)
        }
    }

    if(
get_pcvar_num(gp_AutoOpen))
        
jail_open()
}

public 
freeday_end(task)
{
    if(
g_Freeday || g_PlayerFreeday)
    {
        
emit_sound(0CHAN_AUTO"jbone/csg_ding.wav"1.0ATTN_NORM0PITCH_NORM)
        
player_hudmessage(083.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_ENDFREEDAY")
    }
}

public 
check_end(task)
{
    
team_count()
    for(new 
1<= g_MaxClientsi++)
    {
        if(
g_PlayerTeam[i] == CS_TEAM_T && is_user_alive(i))
        {
            
user_silentkill(i)
            
cs_set_user_deaths(iget_user_deaths(i) - 1)
        }
    }
    for(new 
1<= g_MaxClientsi++)
    {
        if(
g_PlayerTeam[i] == CS_TEAM_CT && is_user_alive(i))
        {
            
user_silentkill(i)
            
cs_set_user_deaths(iget_user_deaths(i) - 1)
        }
    }
    
player_hudmessage(063.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_ROUNDEND")
}

public 
prisoner_last(id)
{
    static 
name[32], Float:roundmax
    
if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)
    {
        
roundmax get_pcvar_float(gp_RoundMax)
        
get_user_name(idnamecharsmax(name))
        
g_PlayerLast id
        player_hudmessage
(065.0, {0255255}, "%L"LANG_SERVER"JBE_PRISONER_LAST"name)
        
remove_task(TASK_ROUND)
        if(
roundmax 0.0)
        {
            
player_hudmessage(083.0, {0255255}, "%L"LANG_SERVER"JBE_STATUS_ENDTIMER"floatround(roundmax 60.0))
            
set_task(roundmax 60.0"check_end"TASK_ROUND)
        }
        if((
g_TeamAlive[CS_TEAM_CT] > 0) && get_pcvar_num(gp_AutoLastresquest))
            
cmd_lastrequest(id)
    }
}

public 
freeday_select(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}

    static 
dst[32], data[5], playeraccesscallback

    menu_item_getinfo
(menuitemaccessdatacharsmax(data), dstcharsmax(dst), callback)
    
player str_to_num(data)
    
freeday_set(idplayer)
    return 
PLUGIN_HANDLED
}

public 
duel_knives(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        
g_LastDenied 0
        
return PLUGIN_HANDLED
    
}

    static 
dst[32], data[5], accesscallbackoption[128], playersrc[32]

    
menu_item_getinfo(menuitemaccessdatacharsmax(data), dstcharsmax(dst), callback)
    
get_user_name(idsrccharsmax(src))
    
player str_to_num(data)
    
formatex(optioncharsmax(option), "%L^n%L"LANG_SERVER"JBE_MENU_LASTREQ_SEL3"srcLANG_SERVER"JBE_MENU_DUEL_SEL"srcdst)
    
player_hudmessage(063.0, {0255255}, option)

    
g_DuelA id
    clear_bit
(g_PlayerCrowbarid)
    
player_strip_weapons(id)
    
player_glow(idg_Colors[3])
    
set_user_health(id100)

    
g_DuelB player
    player_strip_weapons
(player)
    
player_glow(playerg_Colors[2])
    
set_user_health(player100)
    
g_BlockWeapons 1
    
return PLUGIN_HANDLED
}

public 
duel_guns(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        
g_LastDenied 0
        g_Duel 
0
        
return PLUGIN_HANDLED
    
}

    static 
gundst[32], data[5], accesscallbackoption[128], playersrc[32]

    
menu_item_getinfo(menuitemaccessdatacharsmax(data), dstcharsmax(dst), callback)
    
get_user_name(idsrccharsmax(src))
    
player str_to_num(data)
    
formatex(optioncharsmax(option), "%L^n%L"LANG_SERVER_Duel[g_Duel 4][_sel], srcLANG_SERVER"JBE_MENU_DUEL_SEL"srcdst)
    
emit_sound(0CHAN_AUTO"jbone/lrsound.wav"1.0ATTN_NORM0PITCH_NORM)
    
player_hudmessage(063.0, {0255255}, option)

    
g_DuelA id
    clear_bit
(g_PlayerCrowbarid)
    
player_strip_weapons(id)
    
gun give_item(id_Duel[g_Duel 4][_entname])
    
cs_set_weapon_ammo(gun1)
    
set_user_health(id100)
    
player_glow(idg_Colors[3])

    
g_DuelB player
    player_strip_weapons
(player)
    
gun give_item(player_Duel[g_Duel 4][_entname])
    
cs_set_weapon_ammo(gun1)
    
set_user_health(player100)
    
player_glow(playerg_Colors[2])

    
g_BlockWeapons 1
    
return PLUGIN_HANDLED
}

public 
freeday_choice(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}

    static 
dst[32], data[5], accesscallback

    menu_item_getinfo
(menuitemaccessdatacharsmax(data), dstcharsmax(dst), callback)
    
menu_destroy(menu)
    
get_user_name(iddstcharsmax(dst))
    switch(
data[0])
    {
        case(
'1'):
        {
            
cmd_freeday_player(id)
        }
        case(
'2'):
        {
            if((
id == g_Simon) || is_user_admin(id))
            {
                
g_Simon 0
                get_user_name
(iddstcharsmax(dst))
                
client_print(0print_console"%s gives freeday for everyone"dst)
                
server_print("JBE Client %i gives freeday for everyone"id)
                
check_freeday(TASK_FREEDAY)
            }
        }
    }
    return 
PLUGIN_HANDLED
}

public 
lastrequest_select(idmenuitem)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}

    static 
idst[32], data[5], accesscallbackoption[64]

    
menu_item_getinfo(menuitemaccessdatacharsmax(data), dstcharsmax(dst), callback)
    
get_user_name(iddstcharsmax(dst))
    switch(
data[0])
    {
        case(
'1'):
        {
            
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_LASTREQ_SEL1"dst)
            
player_hudmessage(063.0, {0255255}, option)
            
set_bit(g_FreedayAutoid)
            
user_silentkill(id)
        }
        case(
'2'):
        {
            
formatex(optioncharsmax(option), "%L"LANG_SERVER"JBE_MENU_LASTREQ_SEL2"dst)
            
player_hudmessage(063.0, {0255255}, option)
            
g_Duel 2
            player_strip_weapons_all
()
            
random_num(0sizeof(_WeaponsFree) - 1)
            
give_item(id_WeaponsFree[i])
            
g_BlockWeapons 1
            cs_set_user_bpammo
(id_WeaponsFreeCSW[i], _WeaponsFreeAmmo[i])
        }
        case(
'3'):
        {
            
g_Duel 3
            menu_players
(idCS_TEAM_CT01"duel_knives""%L"LANG_SERVER"JBE_MENU_DUEL")
        }
        default:
        {
            
g_Duel str_to_num(data)
            
menu_players(idCS_TEAM_CT01"duel_guns""%L"LANG_SERVER"JBE_MENU_DUEL")
        }
    }
    
g_LastDenied 1
    menu_destroy
(menu)
    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_FindEntityByStringent[0], "classname""info_player_deathmatch")))
    {
        
pev(ent[0], pev_originorigin)
        while((
ent[1] = engfunc(EngFunc_FindEntityInSphereent[1], originCELL_RADIUS)))
        {
            if(!
is_valid_ent(ent[1]))
                continue

            
entity_get_string(ent[1], EV_SZ_classnameinfocharsmax(info))
            if(!
equal(info"func_door"))
                continue

            
entity_get_string(ent[1], EV_SZ_targetnameinfocharsmax(info))
            if(!
info[0])
                continue

            if(
TrieKeyExists(g_CellManagersinfo))
            {
                
TrieGetCell(g_CellManagersinfoent[2])
            }
            else
            {
                
ent[2] = engfunc(EngFunc_FindEntityByString0"target"info)
            }

            if(
is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttonssizeof(g_Buttons)) < 0))
            {
                
g_Buttons[pos] = ent[2]
                
pos++
                break
            }
        }
    }
    
TrieDestroy(g_CellManagers)
}

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

stock freeday_set(idplayer)
{
    static 
src[32], dst[32]
    
get_user_name(playerdstcharsmax(dst))

    if(
is_user_alive(player) && !get_bit(g_PlayerWantedplayer))
    {
        
set_bit(g_PlayerFreedayplayer)
        
entity_set_int(playerEV_INT_skin3)
        if(
get_pcvar_num(gp_GlowModels))
            
player_glow(playerg_Colors[1])

        if(
id <= g_MaxClients)
        {
            
get_user_name(idsrccharsmax(src))
            
player_hudmessage(063.0, {0255255}, "%L"LANG_SERVER"JBE_GUARD_FREEDAYGIVE"srcdst)
        }
        else if(!
is_freeday())
        {
            
player_hudmessage(063.0, {0255255}, "%L"LANG_SERVER"JBE_PRISONER_HASFREEDAY"dst)
        }
    }
}

stock first_join(id)
{
    if(!
get_bit(g_PlayerJoinid))
    {
        
set_bit(g_PlayerJoinid)
        
clear_bit(g_PlayerHelpid)
        
set_task(5.0"cmd_help"TASK_HELP id)
    }
}

stock ctcount_allowed()
{
    static 
count
    count 
= ((g_TeamCount[CS_TEAM_T] + g_TeamCount[CS_TEAM_CT]) / get_pcvar_num(gp_TeamRatio))
    if(
count 2)
        
count 2
    
else if(count get_pcvar_num(gp_CtMax))
        
count get_pcvar_num(gp_CtMax)

    return 
count
}

stock player_hudmessage(idhudidFloat:time 0.0color[3] = {0255255}, msg[], any:...)
{
    static 
text[512], Float:xFloat:y
    x 
g_HudSync[hudid][_x]
    
g_HudSync[hudid][_y]
    
    if(
time 0)
        
set_hudmessage(color[0], color[1], color[2], xy00.00time0.000.00)
    else
        
set_hudmessage(color[0], color[1], color[2], xy00.00g_HudSync[hudid][_time], 0.000.00)

    
vformat(textcharsmax(text), msg6)
    
ShowSyncHudMsg(idg_HudSync[hudid][_hudsync], text)
}

stock menu_players(idCsTeams:teamskipalivecallback[], title[], any:...)
{
    static 
iname[32], num[5], menumenuname[32]
    
vformat(menunamecharsmax(menuname), title7)
    
menu menu_create(menunamecallback)
    for(
1<= g_MaxClientsi++)
    {
        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(inamecharsmax(name))
            
num_to_str(inumcharsmax(num))
            
menu_additem(menunamenum0)
        }
    }
    
menu_display(idmenu)
}

stock player_glow(idcolor[3], amount=40)
{
    
set_user_rendering(idkRenderFxGlowShellcolor[0], color[1], color[2], kRenderNormalamount)
}

stock player_strip_weapons(id)
{
    
strip_user_weapons(id)
    
give_item(id"weapon_knife")
    
set_pdata_int(idm_iPrimaryWeapon0)
}

stock player_strip_weapons_all()
{
    for(new 
1<= g_MaxClientsi++)
    {
        if(
is_user_alive(i))
        {
            
player_strip_weapons(i)
        }
    }
}

stock is_freeday()
{
    return (
g_FreedayNext || g_Freeday || (g_JailDay == 1))
}

public 
jail_open()
{
    static 
i
    
for(0sizeof(g_Buttons); i++)
    {
        if(
g_Buttons[i])
        {
            
ExecuteHamB(Ham_Useg_Buttons[i], 0011.0)
            
entity_set_float(g_Buttons[i], EV_FL_frame0.0)
        }
    }


Last edited by Natsheh; 10-26-2016 at 08:45.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
Barlap
Senior Member
Join Date: Apr 2016
Location: Romania
Old 10-26-2016 , 08:32   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #6

when i type /box the ct recive box gloves and when i chand the weapon disapear.
I want only prisoners(T) to get box gloves.
__________________
Barlap is offline
Send a message via ICQ to Barlap Send a message via Skype™ to Barlap
Natsheh
Veteran Member
Join Date: Sep 2012
Old 10-26-2016 , 08:46   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #7

fix that by yourself its scripting help section not requests...

btw i updated the code.. only t's will get box.

Last edited by Natsheh; 10-26-2016 at 08:47.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
Craxor
Veteran Member
Join Date: Jan 2016
Location: Romania
Old 10-26-2016 , 09:21   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #8

You do not need to make loop just for one single string, put directly the varible.
__________________
Project: Among Us
Craxor is offline
Send a message via ICQ to Craxor
crashbandicoot
BANNED
Join Date: Mar 2012
Location: why will u come XD?
Old 10-26-2016 , 09:33   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #9

pev_nextthink //it user for what?
pev_ltime //it user for what?
pev_impacttime 0.000000 //it user for what?
pev_starttime 0.000000 //it user for what?

pev_groupinfo 0.000000 //it user for what?
pev_controller 0.000000 //it user for what?
pev_dmg_save 0.000000 //it user for what?
pev_chain 0 //it user for what?
pev_message //it user for what?
pev_blending 0.000000 //it user for what?
pev_controller_0 38081536.000000 //it user for what?
pev_controller_1 38081536.000000 //it user for what?
pev_controller_2 38081536.000000 //it user for what?
pev_controller_3 38081536.000000 //it user for what?
pev_blending_0 38081704.000000 //it user for what?
pev_blending_1 38081664.000000 //it user for what?

pev_float_start //I think They have same function By floatmax.Am I true ?
pev_float_end //I think They have same function By floatmax.Am I true ?

pev_int_start //it user for what?
pev_int_end //it user for what?

pev_edict_start //it user for what?
pev_edict_end //it user for what?

pev_byte_start //it user for what?
pev_byte_end //it user for what?

pev_bytearray_start //it user for what?
pev_bytearray_end //it user for what?

pev_string_start //it user for what?
pev_string_end //it user for what?

pev_absolute_start //it user for what?
pev_absolute_end //it user for what?

pev_startpos 0.000000 //it user for what?
pev_endpos 0.000000 //it user for what?

pev_string2_start //it user for what?
pev_string2_end //it user for what?

pev_vecarray_start //it user for what?
pev_vecarray_emd //it user for what?

https://forums.alliedmods.net/showthread.php?p=2464742 my questions here1
https://forums.alliedmods.net/showthread.php?p=2464741 my questions here2

hi . Do you know explain about them ? help please . I will pray for you
crashbandicoot is offline
Send a message via Skype™ to crashbandicoot
Barlap
Senior Member
Join Date: Apr 2016
Location: Romania
Old 10-27-2016 , 13:36   Re: Help Jbextreme add box gloves at "/box" command
Reply With Quote #10

solved!
T/C
__________________
Barlap is offline
Send a message via ICQ to Barlap Send a message via Skype™ to Barlap
Reply


Thread Tools
Display Modes

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 01:21.


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