AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Load fails: Plugin file open error SMA (https://forums.alliedmods.net/showthread.php?t=320659)

alexn22 01-02-2020 06:40

Load fails: Plugin file open error SMA
 
I found an addons on internet, i put it on my server.. and from that plugin
gone problems

THATS SMA code

Code:

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

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

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

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

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

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

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

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

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

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

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

#define VERSION                                "3.2 [WIP]"

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

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

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

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

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

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

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

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

#if defined reasons_on
new g_victim_r[33]
#endif

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

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

#if defined roulette_on
new g_has_revolver[33]
#endif

#if defined rs_on
new g_ermp3[33]
#endif

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

public _get_simon(iPlugin, iParams)
        return g_Simon

public _get_last(iPlugin, iParams)
        return g_PlayerLast

public _get_gamemode(iPlugin, iParams)
        return g_GameMode

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


public msg_statustext(msgid, dest, id)
        return PLUGIN_HANDLED

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

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

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

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

public msg_clcorpse(msgid, dest, id)
        return PLUGIN_HANDLED

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                return FMRES_SUPERCEDE
        }
        return FMRES_IGNORED
}

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

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

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

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

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

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

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

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

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

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

        return PLUGIN_HANDLED
}

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

        return PLUGIN_HANDLED
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return PLUGIN_HANDLED
}
#endif

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

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

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

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

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

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

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

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

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

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

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

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

        return PLUGIN_HANDLED
}

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

public jb_blockweapons()
        WeaponsLocked = true

public jb_unblockweapons()
        WeaponsLocked = false

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FindPlayer() {
        new i = -1
        while(i <= mxplr) {
                if(is_user_connected(++i))
                        return i
        }
        return -1
}

Please help me with that sma, i need for server

redivcram 01-02-2020 07:07

Re: Load fails: Plugin file open error SMA
 
Woah. That's a huge code no one, including you, will ponder on.

You can tell us your problem, first.

alexn22 01-02-2020 16:02

Re: Load fails: Plugin file open error SMA
 
Quote:

Originally Posted by redivcram (Post 2678750)
Woah. That's a huge code no one, including you, will ponder on.

You can tell us your problem, first.

I got Re: Load fails: Plugin file open error
With that sma code

redivcram 01-02-2020 16:37

Re: Load fails: Plugin file open error SMA
 
Copy the full error log and paste it here, between [code] tags.

Shadows Adi 01-09-2020 08:30

Re: Load fails: Plugin file open error SMA
 
Quote:

Originally Posted by alexn22 (Post 2678799)
I got Re: Load fails: Plugin file open error
With that sma code

try to copy name of the plugin and paste it in plugins.ini with .amxx extension.


All times are GMT -4. The time now is 02:41.

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