PHP- Kodu:
  /* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#define PLUGIN      "Ghost vl"
#define VERSION     "1.4"
#define AUTHOR      "vato loco [GE-S]"
#define PLUGIN_CVAR "ghost_vl"
#define iRandomNum              random_num(0,255)
#define MENU_KEYS_GHOST         MENU_KEY_1|MENU_KEY_2
#define HUD_HIDE_FLAGS          1<<0 | 1<<1 | 1<<3 | 1<<4 | 1<<5 | 1<<6
#define SB_ATTRIB_DEAD          1<<0
#define MAX_PLAYERS             32 + 1
#define MAX_LEN_LENGHT          100
#define GHOST_ORIGIN            3
#define XO_WEAPONS              4
#define XO_PLAYER               5
#define    m_iHideHUD            361
#define    m_iClientHideHUD        362
#define m_iRadiosLeft           192
#define m_pPlayer               41
#define m_flNextPrimaryAttack   46
#define m_flNextSecondaryAttack 47
#define IsPlayer(%1)            (1 <= %1 <= g_iMaxPlayers)
enum (+= 11111) 
{
    TASK_CROSS = 11111,     
    TASK_SPAWN,       
    TASK_STRIP,      
    TASK_CACHE     
}
new szPluginInfoMsg[MAX_LEN_LENGHT]
new szGhostInfoMsg[MAX_LEN_LENGHT]
new g_Cross[] = "+"
new const Float:VEC_DUCK_HULL_MIN[GHOST_ORIGIN] = {-16.0, -16.0, -18.0}
new const Float:VEC_DUCK_HULL_MAX[GHOST_ORIGIN] = {16.0, 16.0, 18.0}
new g_iIsSpectator[MAX_PLAYERS]
new Float:g_fSpwanPosition[MAX_PLAYERS][GHOST_ORIGIN]
new Float:g_fGhostPosition[MAX_PLAYERS][GHOST_ORIGIN]
new bool:g_bIsConnected[MAX_PLAYERS]
new bool:g_bIsAlive[MAX_PLAYERS]
new bool:g_bIsGhost[MAX_PLAYERS]
new bool:g_bIsBot[MAX_PLAYERS]
new bool:g_bAgree[MAX_PLAYERS]
new bool:g_bFirstSpwan[MAX_PLAYERS]
new bool:g_bRoundEnd
new bool:g_bBombIsPlanted
new Trie:g_tPlayerSound
new g_ScoreAttrib
new g_CurWeapon
new g_ClCorpse
new g_SyncCutomCross
new g_SyncPluginInfo
new g_SyncGhostInfo
new g_pCvar[8]
new g_iCachepCvar[8]
new g_iMaxPlayers
public plugin_init() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar(PLUGIN_CVAR, VERSION, FCVAR_SERVER|FCVAR_SPONLY, 0.0)
    
    register_menu("Ghost Menu - by vato loco [GE-S]", MENU_KEYS_GHOST , "GhostMenuHandler")
    
    register_event("HLTV", "ev_NewRound", "a", "1=0", "2=0")
    register_event("SpecHealth2", "ev_SpecHealth2", "bd")
    register_logevent("ev_RoundEnd",2,"1=Round_End")
    register_logevent("ev_FunctionP", 3, "2=Planted_The_Bomb")
    
    RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_KnifePrimaryAttack")
    RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_KnifeSecondaryAttack")
    RegisterHam(Ham_Touch, "weaponbox", "fw_WeaponTouch")
    RegisterHam(Ham_Touch, "armoury_entity", "fw_WeaponTouch")
    RegisterHam(Ham_Touch, "weapon_shield", "fw_WeaponTouch")
    RegisterHam(Ham_Player_PreThink, "player", "fw_PreThink_Post", 1)
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
    
    register_forward(FM_ClientKill,"fw_ClientKill")
    register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
    register_forward(FM_CmdStart, "fw_CmdStart")
    register_forward(FM_EmitSound, "fw_EmitSound")
    
    register_clcmd("radio1", "BlockCmd")
    register_clcmd("radio2", "BlockCmd")
    register_clcmd("radio3", "BlockCmd")
    
    g_pCvar[0] = register_cvar("ghost_spawn", "1")
    g_pCvar[1] = register_cvar("ghost_noclip", "0")
    g_pCvar[2] = register_cvar("ghost_kill", "0")
    g_pCvar[3] = register_cvar("ghost_visible", "0")
    g_pCvar[4] = register_cvar("ghost_sound", "1")
    g_pCvar[5] = register_cvar("ghost_menu", "1")
    g_pCvar[6] = register_cvar("ghost_respawn_delay", "0.5")
    g_pCvar[7] = register_cvar("ghost_effect", "0")
    
    g_ScoreAttrib = get_user_msgid("ScoreAttrib")
    g_CurWeapon = get_user_msgid("CurWeapon")
    g_ClCorpse = get_user_msgid("ClCorpse")
    register_message(g_ScoreAttrib, "MsgScoreAttrib")
    register_message( g_CurWeapon, "MsgCurWeapon")
    set_msg_block(g_ClCorpse, BLOCK_SET)
    
    g_SyncCutomCross = CreateHudSyncObj()
    g_SyncPluginInfo = CreateHudSyncObj()
    g_SyncGhostInfo = CreateHudSyncObj()
    g_iMaxPlayers = get_maxplayers()
    
    new const g_iPlayerSound[][] = {
        "items/gunpickup2.wav",
        "player/death6.wav", 
        "player/die1.wav",
        "player/die2.wav", 
        "player/die3.wav",
        "player/bhit_kevlar-1.wav", 
        "player/bhit_flesh-1.wav",
        "player/bhit_flesh-2.wav", 
        "player/bhit_flesh-3.wav",
        "player/pl_wade1.wav",
        "player/pl_wade2.wav"
    }
    g_tPlayerSound = TrieCreate()
    for(new i = 0; i < sizeof(g_iPlayerSound); i++)
    {
        TrieSetCell(g_tPlayerSound , g_iPlayerSound[i], i)
    }
    formatex(szPluginInfoMsg, sizeof szPluginInfoMsg - 1, "%s %s by %s", PLUGIN, VERSION, AUTHOR)
    formatex(szGhostInfoMsg, sizeof szGhostInfoMsg - 1, "You Are A Ghost Till Round End Have Fun!")
    set_task(1.0, "CustomCross", TASK_CROSS, _, _, "b")
}
public plugin_cfg()
{
    set_task(0.5, "CacheCvars", TASK_CACHE)
}
public client_putinserver(id) 
{
    g_bIsAlive[id] = false
    g_bIsConnected[id] = true
    g_bIsGhost[id] = false
    g_bAgree[id] = true
    g_bFirstSpwan[id] = true
    g_bIsBot[id] = bool:is_user_bot(id)
    g_iIsSpectator[id] = 0
}
public client_disconnect(id)
{
    g_bIsAlive[id] = false
    g_bIsConnected[id] = false
    g_bIsGhost[id] = false
    g_bIsBot[id] = false
    g_bAgree[id] = true
    g_bFirstSpwan[id] = true
    g_iIsSpectator[id] = 0
    
    if(!IsAlive(CS_TEAM_CT) || !IsAlive(CS_TEAM_T) && !g_bBombIsPlanted)
    {
        ForceRoundEnd()
    }
}
public ev_FunctionP()
{
    g_bBombIsPlanted = true
}
public ev_SpecHealth2(id)
{
    g_iIsSpectator[id] = read_data(2)
}
public ev_NewRound()
{
    g_bRoundEnd = false
    g_bBombIsPlanted = false
    CacheCvars()
    
    for(new i = 1; i <= g_iMaxPlayers; i++) 
    {
        if(g_bIsConnected[i])
        {
            remove_task(i + TASK_SPAWN)
            
            if(g_bIsGhost[i])
            {
                cs_set_user_deaths(i, cs_get_user_deaths(i) - 1)
                set_pdata_int(i, m_iClientHideHUD, 0)
                set_pdata_int(i, m_iHideHUD, 0)
                set_pev(i, pev_movetype, MOVETYPE_WALK)
                set_pev(i, pev_takedamage, DAMAGE_AIM)
                set_user_footsteps(i, 0)
                set_user_rendering(i)
            }
            g_bIsGhost[i] = false
        }
    }
}
public ev_RoundEnd()
{
    if(!g_bRoundEnd)
    {
        ForceRoundEnd()
    }
}
public fw_PlayerSpawn(id) 
{
    if(is_user_alive(id))
    {
        g_bIsAlive[id] = true
        g_iIsSpectator[id] = 0
        pev(id, pev_origin, g_fSpwanPosition[id])
        
        if(g_bIsGhost[id])
        {
            StripWeapons(id)
            SetUserGhost(id)
        }
        if(g_iCachepCvar[5] && g_bFirstSpwan[id] && !g_bIsBot[id])
        {
            GhostAgreeMenu(id)
        }
        g_bFirstSpwan[id] = false
    }
}
public fw_PlayerKilled(id) 
{
    g_bIsAlive[id] = false
    
    if(!g_bRoundEnd)
    {
        if(!IsAlive(CS_TEAM_CT) || !IsAlive(CS_TEAM_T) && !g_bBombIsPlanted)
        {
            ForceRoundEnd()
            return
        }
        if(g_bIsGhost[id] && !g_iCachepCvar[2] && !g_bRoundEnd)
        {
            g_fGhostPosition[id] = g_fSpwanPosition[id]
            set_task(float(g_iCachepCvar[6]), "RespawnGhost", id + TASK_SPAWN)
        }
        if(!g_bIsGhost[id] && !g_bIsBot[id] && g_bAgree[id] && !g_bRoundEnd)
        {
            new CsTeams:iTeam = cs_get_user_team(id)
            if(iTeam == CS_TEAM_T || iTeam == CS_TEAM_CT)
            {
                if(g_iCachepCvar[0])
                {
                    pev(id, pev_origin, g_fGhostPosition[id])
                }
                set_task(float(g_iCachepCvar[6]), "RespawnGhost", id + TASK_SPAWN)
            }
        }
    }
} 
public RespawnGhost(id)
{
    id -= TASK_SPAWN
    
    if(!g_bRoundEnd)
    {
        g_bIsGhost[id] = true
        ExecuteHamB(Ham_CS_RoundRespawn, id)
    }
}
public fw_KnifePrimaryAttack(iEnt)
{
    new id = get_pdata_cbase(iEnt, m_pPlayer, XO_WEAPONS)
    if(g_bIsGhost[id])
    {
        set_pdata_float(iEnt, m_flNextPrimaryAttack, 20.0, XO_WEAPONS)
        return HAM_SUPERCEDE
    } 
    return HAM_IGNORED
}
public fw_KnifeSecondaryAttack(iEnt)
{
    new id = get_pdata_cbase(iEnt, m_pPlayer, XO_WEAPONS)
    if(g_bIsGhost[id])
    {
        set_pdata_float(iEnt, m_flNextSecondaryAttack, 20.0, XO_WEAPONS)
        return HAM_SUPERCEDE
    } 
    return HAM_IGNORED
}
public fw_WeaponTouch(iEnt, id)
{
    return (IsPlayer(id) && g_bIsGhost[id]) ? HAM_SUPERCEDE : HAM_IGNORED
}
public fw_CmdStart(id, uc, seed) 
{
    if(g_bIsGhost[id]) 
    {
        new Buttons = get_uc(uc, UC_Buttons) 
        new Impulse = get_uc(uc, UC_Impulse)
        
        if(Buttons & IN_USE) 
        {     
            Buttons &= ~IN_USE     
            set_uc(uc, UC_Buttons, Buttons) 
        }
        if(Impulse == 100 || Impulse == 201) 
        { 
            set_uc(uc, UC_Impulse, 0)
            return FMRES_HANDLED
        }
    }
    return FMRES_IGNORED
}
public fw_EmitSound(id, channel, const sound[]) 
{
    if(TrieKeyExists(g_tPlayerSound, sound))
    {
        if(g_bIsGhost[id])
        {
            return FMRES_SUPERCEDE
        }
    }
    return FMRES_IGNORED
}
public fw_ClientKill(id)
{
    return g_bIsGhost[id] ? FMRES_SUPERCEDE : FMRES_IGNORED
}
public CustomCross()
{
    for(new i = 1; i <= g_iMaxPlayers; i++) 
    {
        if(g_bIsAlive[i] && g_bIsGhost[i])
        {
            ShowCustomSync(i, g_SyncCutomCross, g_Cross, iRandomNum, iRandomNum, iRandomNum, -1.0, 1)
            ShowCustomSync(i, g_SyncGhostInfo, szGhostInfoMsg, iRandomNum, iRandomNum, iRandomNum, 0.04, 2)
            ShowCustomSync(i, g_SyncPluginInfo, szPluginInfoMsg, 255, 50, 0, 0.95, 3)
        }
    }
}
public MsgScoreAttrib()
{
    new id = get_msg_arg_int(1)
    
    if(g_bIsGhost[id])
    {
        set_msg_arg_int(2, ARG_BYTE, SB_ATTRIB_DEAD)
    }
}
public MsgCurWeapon(Msgid, Dest, id)
{
    if(g_bIsAlive[id] && g_bIsGhost[id])
    {
        static iWeapon
        if(get_msg_arg_int(1))
        {
            iWeapon = get_msg_arg_int(2)
            if(iWeapon != CSW_KNIFE)
            {
                set_task(0.2, "StripWeapons", id + TASK_STRIP)
            }
        }
    }
}
public StripWeapons(id)
{
    new pid = id < TASK_STRIP ? id : id - TASK_STRIP
    
    if(g_bIsAlive[pid] && g_bIsGhost[pid])
    {
        strip_user_weapons(pid)
        give_item(pid, "weapon_knife")
    }
}
public BlockCmd(id)
{
    return g_bIsGhost[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE
} 
public fw_PreThink_Post(id)
{
    if(!g_bIsAlive[id])
        return
    
    static i
    for(i = 1; i <= g_iMaxPlayers; i++)
    {
        if(g_bIsGhost[id] != g_bIsGhost[i] || g_bIsGhost[id] && !g_bIsGhost[i])
        {
            if(g_bIsAlive[i])
            {
                set_pev(i, pev_solid, SOLID_NOT)
            }
        }
    }
}
public client_PostThink(id)
{
    if(!g_bIsAlive[id])
        return
    
    static i
    for(i = 1; i <= g_iMaxPlayers; i++)
    {
        if(id != i)
        {    
            if(g_bIsAlive[i] && !g_bIsGhost[i])
            {
                set_pev(i, pev_solid, SOLID_SLIDEBOX)
            }
        }
    }
}
public fw_AddToFullPack_Post(es, e, ent, host, hostflags, player, pSet) 
{
    if(!get_orig_retval() || !g_bIsAlive[host] && !g_iIsSpectator[host])
    {
        return FMRES_IGNORED
    }
    if(player) 
    {
        if(host != ent)
        {
            set_es(es, ES_Solid, SOLID_NOT)
            
            if(g_bIsGhost[ent])
            {
                set_es(es, ES_RenderFx, g_iCachepCvar[7] ? kRenderFxDistort : kRenderFxHologram)
                set_es(es, ES_RenderMode, kRenderTransAdd)
                set_es(es, ES_RenderAmt, 175)
                
                if(!g_iCachepCvar[3] && !g_bIsGhost[host])
                {
                    set_es(es, ES_Effects, get_es(es, ES_Effects) | EF_NODRAW)
                    set_es(es, ES_Origin, Float:{99999.9,99999.9,99999.9})
                }
            }
        }
    }
    return FMRES_IGNORED
}
public CacheCvars()
{
    g_iCachepCvar[0] = get_pcvar_num(g_pCvar[0])
    g_iCachepCvar[1] = get_pcvar_num(g_pCvar[1])
    g_iCachepCvar[2] = get_pcvar_num(g_pCvar[2])
    g_iCachepCvar[3] = get_pcvar_num(g_pCvar[3])
    g_iCachepCvar[4] = get_pcvar_num(g_pCvar[4])
    g_iCachepCvar[5] = get_pcvar_num(g_pCvar[5])
    g_iCachepCvar[6] = get_pcvar_num(g_pCvar[6])
    g_iCachepCvar[7] = get_pcvar_num(g_pCvar[7])
}
public GhostAgreeMenu(id)
{    
    static menu[512]
    
    new len = formatex(menu, sizeof menu -1,"\yGhost Menu - by vato loco [GE-S]^n^n")
    len += formatex(menu[len], sizeof menu -1 -len,"\r Do You Agree To Respawn As Ghost When Die?^n")
    len += formatex(menu[len], sizeof menu -1 -len,"\w1. Yes^n")
    len += formatex(menu[len], sizeof menu -1 -len,"\w2. No")
    
    show_menu(id, MENU_KEYS_GHOST , menu, -1)
}
public GhostMenuHandler(id, key) 
{
    switch(key) 
    {
        case 0: g_bAgree[id] = true
            
        case 1: g_bAgree[id] = false
            
    }
}
SetUserGhost(id) 
{ 
    set_pdata_int(id, m_iRadiosLeft, 0, XO_PLAYER)
    set_pdata_int(id, m_iClientHideHUD, 0)
    set_pdata_int(id, m_iHideHUD, HUD_HIDE_FLAGS)
    if(g_iCachepCvar[0])
    {
        engfunc(EngFunc_SetOrigin, id, g_fGhostPosition[id])
        set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
        SetUserDuck(id)
    }
    if(g_iCachepCvar[1])
    {
        set_pev(id, pev_movetype, MOVETYPE_NOCLIP)
    }
    set_pev(id, pev_solid, SOLID_NOT)
    set_pev(id, pev_takedamage, DAMAGE_NO)
    set_user_footsteps(id, 1)
    if(g_iCachepCvar[4])
    {
        client_cmd(id,"spk ambience/thunder_clap.wav")
    }
}
SetUserDuck(id) 
{
    set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING)
    engfunc( EngFunc_SetSize, id, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX)
}
IsAlive(CsTeams:iTeam) 
{
    new iAliveNum 
    
    for(new i = 1; i <= g_iMaxPlayers; i++) 
    {
        if(g_bIsAlive[i] && cs_get_user_team(i) == iTeam && !g_bIsGhost[i])
        {
            iAliveNum++ 
        }
    }
    return iAliveNum 
}
ForceRoundEnd() 
{ 
    g_bRoundEnd = true
    
    for(new i = 1; i <= g_iMaxPlayers; i++) 
    {
        if(g_bIsAlive[i] && g_bIsGhost[i])
        {
            set_pev(i, pev_takedamage, DAMAGE_AIM)
            set_pev(i, pev_movetype, MOVETYPE_WALK)
            user_silentkill(i)
        }
    }
}
ShowCustomSync(id, SyncType, Msg[], Red, Green, Blue, Float:yPos, Channel) 
{
    set_hudmessage(Red, Green, Blue, -1.0, yPos, _, _, 2.0, _,  _, Channel)
    ShowSyncHudMsg(id, SyncType, Msg)
}