Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Zombie Mod под Zombie Panic

, нужно
Статус пользователя firstzombie
сообщение 17.6.2009, 15:05
Сообщение #1
Стаж: 14 лет

Сообщений: 6
Благодарностей: 1
Полезность: 0

Нужен zombie mod под zombie panic. Помогите пожалуйста. ubeysya.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя firstzombie
сообщение 17.6.2009, 15:39
Сообщение #2
Стаж: 14 лет

Сообщений: 6
Благодарностей: 1
Полезность: 0

У мня biohazard может есть мод для него.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя egor_haker
сообщение 17.6.2009, 15:44
Сообщение #3


Стаж: 14 лет

Сообщений: 13
Благодарностей: 5
Полезность: 0

Да я делал сам. чтоб стать зомби надо чтоб тебя убили.
код на biohazard
Код
/* Biohazard mod
*  
*  by Cheap_Suit
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License as published by the
*  Free Software Foundation; either version 2 of the License, or (at
*  your option) any later version.
*
*  This program is distributed in the hope that it will be useful, but
*  WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation,
*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*  In addition, as a special exception, the author gives permission to
*  link the code of this program with the Half-Life Game Engine ("HL
*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
*  L.L.C ("Valve"). You must obey the GNU General Public License in all
*  respects for all of the code used other than the HL Engine and MODs
*  from Valve. If you modify this file, you may extend this exception
*  to your version of the file, but you are not obligated to do so. If
*  you do not wish to do so, delete this exception statement from your
*  version.
*/    

#define VERSION    "1.93"

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <xs>

#tryinclude "biohazard.cfg"

#if AMXX_VERSION_NUM < 180
    #assert AMX Mod X v1.8.0 or greater library required!
#elseif !defined _biohazardcfg_included
    #assert Biohazard configuration file required!
#endif

#define OFFSET_DEATH         444
#define OFFSET_TEAM         114
#define OFFSET_ARMOR         112
#define OFFSET_NVG         129
#define OFFSET_PRIMARYWEAPON     116
#define OFFSET_CLIPAMMO     51
#define OFFSET_WEAPONTYPE     43
#define EXTRAOFFSET_WEAPONS     4

#define OFFSET_AMMO_AWP     377
#define OFFSET_AMMO_SCOUT     378
#define OFFSET_AMMO_M249     379
#define OFFSET_AMMO_FAMAS     380
#define OFFSET_AMMO_M3         381
#define OFFSET_AMMO_USP     382
#define OFFSET_AMMO_FIVESEVEN     383
#define OFFSET_AMMO_DEAGLE     384
#define OFFSET_AMMO_P228     385
#define OFFSET_AMMO_GLOCK18     386

#define AMMOID_FLASHBANG     11
#define AMMOID_HEGRENADE     12
#define AMMOID_SGGRENADE     13
#define AMMOID_C4        14

#define TASKID_STRIPNGIVE    698
#define TASKID_STARTROUND     153
#define TASKID_NEWROUND        641
#define TASKID_BALANCETEAM     375
#define TASKID_UPDATESCR    264
#define TASKID_SETZOMBIE    635
#define TASKID_SPAWNDELAY    786
#define TASKID_GIVENADES    922

#define EQUIP_PRI        (1<<0)
#define EQUIP_SEC        (1<<1)
#define EQUIP_GREN        (1<<2)
#define EQUIP_ALL        (1<<0 | 1<<1 | 1<<2)

#define HAS_NVG         (1<<0)
#define ATTRIB_BOMB         (1<<1)
#define DMG_HEGRENADE         (1<<24)
#define AMMOID_NULL         (1<<0 | 1<<AMMOID_FLASHBANG | 1<<AMMOID_HEGRENADE | 1<<AMMOID_SGGRENADE | 1<<AMMOID_C4)
#define AMMOWP_NULL         (1<<0 | 1<<CSW_KNIFE | 1<<CSW_FLASHBANG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)

#define MAX_SPAWNS        128
#define MAX_AMMO        200
#define IMPULSE_FLASHLIGHT    100
#define MODEL_CLASSNAME        "player_model"
#define KNIFE_MODEL        "models/v_knife.mdl"

/*enum CsTeams
{
    CS_TEAM_UNASSIGNED    = 0,
    CS_TEAM_T         = 1,
    CS_TEAM_CT         = 2,
    CS_TEAM_SPECTATOR     = 3
}

enum CsArmorType
{
    CS_ARMOR_NONE         = 0,
    CS_ARMOR_KEVLAR     = 1,
    CS_ARMOR_VESTHELM     = 2
}*/

#define cs_get_user_team(%1)    CsTeams:get_pdata_int(%1, OFFSET_TEAM)
#define cs_get_user_deaths(%1)  get_pdata_int(%1, OFFSET_DEATH)
#define reset_user_primary(%1)  set_pdata_int(%1, OFFSET_PRIMARYWEAPON, 0)
#define set_weapon_ammo(%1,%2)  set_pdata_int(%1, OFFSET_CLIPAMMO, %2, EXTRAOFFSET_WEAPONS)
#define set_user_deaths(%1,%2)  set_pdata_int(%1, OFFSET_DEATH, %2)
#define is_player_alive(%1)     ((1 <= %1 <= g_maxplayers) && is_user_alive(%1))
#define _random(%1)             random_num(0, %1 - 1)

new cvar_regen_dly1, cvar_regen_dly2, cvar_randomspawn, cvar_zombie_spd, cvar_skyname, cvar_autobalance[2], cvar_starttime,
    cvar_lights, cvar_zombie_def, cvar_zombie_hp, cvar_blocknightvision, cvar_killbonus, cvar_gamedescription, cvar_enabled,
    cvar_autonvg, cvar_maxzombies, cvar_customsounds, cvar_hpbonus, cvar_knockback_hp, cvar_flashbang, cvar_weaponsmenu,
    cvar_zombie_atk, cvar_knockback_duck, cvar_hedmg_multi, cvar_zombie_regen, cvar_zombie_resist, cvar_buytime, cvar_ammo,
    cvar_zombie_instant, cvar_winsounds, cvar_botquota
    
new bool:g_brestorevel, Float:g_vecvel[3], bool:g_roundstarted, g_maxplayers, g_spawncount, bool:g_infecting, bool:g_gamestarted,
    Float:g_spawns[MAX_SPAWNS+1][9], g_zombieoftheround, g_fwd_spawn, bool:g_usingknifemodel, bool:g_usingplayermodel, g_equipmenu,
    g_primmenu, g_secmenu, g_fwd_result, g_fwd_infect, g_fwd_teamwin, g_fwd_gamestart, g_fwd_infect2, CsTeams:g_winningteam, g_radiofix,
    bool:g_czero, g_netclient_pdata, g_botclient_pdata, g_buyzone, Float:g_buytime

new bool:g_zombie[33], Float:g_regendelay[33], g_victim[33], bool:g_showmenu[33], g_weapons[33][2], bool:g_falling[33], g_lastteam[33],
    g_modelent[33], g_weaponent[33]

public plugin_precache()
{
    register_plugin("Biohazard", VERSION, "cheap_suit")
    register_cvar("bh_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
    set_cvar_string("bh_version", VERSION)
    
    cvar_enabled = register_cvar("bh_enabled", "1")
    if(!get_pcvar_num(cvar_enabled)) return
    
    g_usingplayermodel = (strlen(g_zombie_model) > 0) ? true : false
    g_usingknifemodel  = (strlen(g_zombie_claws) > 0) ? true : false
    if(g_usingplayermodel) precache_model(g_zombie_model)
    if(g_usingknifemodel)  precache_model(g_zombie_claws)
    
    new i
    for(i = 0; i < sizeof g_zombie_miss_sounds; i++) precache_sound(g_zombie_miss_sounds[i])
    for(i = 0; i < sizeof g_zombie_hit_sounds;  i++) precache_sound(g_zombie_hit_sounds[i])
    for(i = 0; i < sizeof g_scream_sounds;        i++) precache_sound(g_scream_sounds[i])
    for(i = 0; i < sizeof g_zombie_die_sounds;  i++) precache_sound(g_zombie_die_sounds[i])
    for(i = 0; i < sizeof g_zombie_win_sounds;  i++) precache_sound(g_zombie_win_sounds[i])
    
    g_fwd_spawn = register_forward(FM_Spawn, "fwd_spawn")
    new zone = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_bomb_target"))
    if(zone) dllfunc(DLLFunc_Spawn, zone), set_pev(zone, pev_solid, SOLID_NOT)
    
    g_buyzone = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone"))
    if(g_buyzone) dllfunc(DLLFunc_Spawn, g_buyzone), set_pev(g_buyzone, pev_solid, SOLID_NOT)
    
    #if FOG_ENABLE
    new fog = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_fog"))
    if(fog)
    {
        new DENSITY[10]
        formatex(DENSITY, 9, "0.00%d", clamp(FOG_DENSITY, 1, 99))
        
        fm_set_kvd(fog, "density", DENSITY, "env_fog")
        fm_set_kvd(fog, "rendercolor", FOG_COLOR, "env_fog")
    }
    #endif
}

public plugin_init()
{
    if(!get_pcvar_num(cvar_enabled)) return
    
    cvar_gamedescription  = register_cvar("bh_gamedescription",   "Biohazard")
    cvar_skyname          = register_cvar("bh_skyname",           "night")
    cvar_lights          = register_cvar("bh_lights",          "d")
    cvar_blocknightvision = register_cvar("bh_block_nvg",          "1")
    cvar_starttime          = register_cvar("bh_starttime",           "10.0")
    cvar_randomspawn      = register_cvar("bh_randomspawn",       "1")
    cvar_customsounds     = register_cvar("bh_customsounds",      "1")
    cvar_winsounds          = register_cvar("bh_winsounds",           "1")
    cvar_autonvg          = register_cvar("bh_autonvg",          "0")
    cvar_killbonus          = register_cvar("bh_zombie_kill_bonus", "2")
    cvar_buytime          = register_cvar("bh_buytime",           "0")
    cvar_weaponsmenu      = register_cvar("bh_weaponsmenu",       "0")
    cvar_ammo             = register_cvar("bh_ammo",           "0")
    cvar_hedmg_multi      = register_cvar("bh_hedmg_multi",       "1.0")
    cvar_maxzombies       = register_cvar("bh_maxzombies",           "25")
    cvar_flashbang           = register_cvar("bh_flashbang",           "1")
    cvar_zombie_instant   = register_cvar("bh_zombie_instant",    "0")
    cvar_zombie_hp          = register_cvar("bh_zombie_hp",           "200")
    cvar_knockback_hp     = register_cvar("bh_zombie_kb_hp",      "90")
    cvar_knockback_duck   = register_cvar("bh_zombie_kb_duck",    "1")
    cvar_hpbonus          = register_cvar("bh_zombie_hp_bonus",   "50")
    cvar_zombie_resist    = register_cvar("bh_zombie_resist",     "1")
    cvar_zombie_spd       = register_cvar("bh_zombie_speed",      "280.0")
    cvar_zombie_atk       = register_cvar("bh_zombie_atk_multi",  "2.0")
    cvar_zombie_def       = register_cvar("bh_zombie_def_multi",  "0.600")
    cvar_zombie_regen     = register_cvar("bh_zombie_regen",      "1")
    cvar_regen_dly1       = register_cvar("bh_zombie_regendly1",  "2.0")
    cvar_regen_dly2       = register_cvar("bh_zombie_regendly2",  "0.25")
    cvar_botquota          = get_cvar_pointer("bot_quota")
    cvar_autobalance[0]   = get_cvar_pointer("mp_autoteambalance")
    cvar_autobalance[1]   = get_pcvar_num(cvar_autobalance[0])
    set_pcvar_num(cvar_autobalance[0], 0)

    register_clcmd("nightvision", "cmd_nightvision")
    register_clcmd("chooseteam",  "cmd_chooseteam")
    register_clcmd("say guns",    "cmd_enablemenu")
    register_clcmd("say /guns",   "cmd_enablemenu")
    register_clcmd("amx_infect",  "cmd_infectuser", ADMIN_BAN, "<name or #userid>")
    register_menu("#RadioB", MENU_KEY_1, "cmd_fixradio", 1)
    
    RegisterHam(Ham_Use,                  "func_tank",       "bacon_use")
    RegisterHam(Ham_Use,                  "func_tankmortar", "bacon_use")
    RegisterHam(Ham_Use,                  "func_tankrocket", "bacon_use")
    RegisterHam(Ham_Use,                  "func_tanklaser",  "bacon_use")
    RegisterHam(Ham_Touch,                 "weaponbox",       "bacon_touch_weapon")
    RegisterHam(Ham_Touch,               "armoury_entity",  "bacon_touch_weapon")
    RegisterHam(Ham_Touch,               "weapon_shield",   "bacon_touch_weapon")
    RegisterHam(Ham_Item_Deploy,          "weapon_knife",    "bacon_item_deploy_post",       1)
    RegisterHam(Ham_Item_AttachToPlayer, "weapon_knife",     "bacon_item_attachtoplayer_post", 1)

    unregister_forward(FM_Spawn,         g_fwd_spawn)
    register_forward(FM_PlayerPreThink,    "fwd_playerprethink")
    register_forward(FM_PlayerPostThink,    "fwd_playerpostthink")
    register_forward(FM_CmdStart,        "fwd_cmdstart")
    register_forward(FM_EmitSound,        "fwd_emitsound")
    register_forward(FM_GetGameDescription, "fwd_gamedescription")
    register_forward(FM_CreateNamedEntity,    "fwd_createnamedentity")
    register_forward(FM_Sys_Error,        "fwd_sys_error")
    register_forward(FM_PlayerPreThink,    "fwd_playerprethink_post", 1)
    register_forward(FM_TraceLine,        "fwd_traceline_post",        1)
    register_forward(FM_TraceHull,         "fwd_tracehull_post",        1)

    register_message(get_user_msgid("Battery"),     "msg_battery")
    register_message(get_user_msgid("TextMsg"),     "msg_textmsg")
    register_message(get_user_msgid("SendAudio"),     "msg_sendaudio")
    register_message(get_user_msgid("DeathMsg"),     "msg_deathmsg")
    register_message(get_user_msgid("ScreenFade"),     "msg_screenfade")
    register_message(get_user_msgid("TeamInfo"),     "msg_teaminfo")
    register_message(get_user_msgid("ClCorpse"),     "msg_clcorpse")
    register_message(get_user_msgid("StatusIcon"),  "msg_statusicon")
    register_message(get_user_msgid("ScoreAttrib"), "msg_scoreattrib")
    register_message(get_user_msgid("AmmoX"),     "msg_ammox")
    register_message(get_user_msgid("CurWeapon"),   "msg_curweapon")

    register_event("TextMsg", "event_textmsg",   "a", "2=#Game_will_restart_in")
    register_event("HLTV",    "event_newround",  "a", "1=0", "2=0")
    register_event("Damage",  "event_damage",    "be")
    
    register_logevent("logevent_round_start", 2, "1=Round_Start")
    register_logevent("logevent_round_end",   2, "1=Round_End")
    
    g_fwd_infect     = CreateMultiForward("event_infect",     ET_CONTINUE, FP_CELL, FP_CELL)
    g_fwd_infect2     = CreateMultiForward("event_infect2",     ET_CONTINUE, FP_CELL)
    g_fwd_teamwin     = CreateMultiForward("event_teamwin",     ET_CONTINUE, FP_CELL)
    g_fwd_gamestart = CreateMultiForward("event_gamestart", ET_CONTINUE)
    g_maxplayers     = get_maxplayers()
    
    register_dictionary("biohazard.txt")
    build_menu(), get_spawnpoints()

    new modname[7]; get_modname(modname, 6)
    g_czero = equal(modname,"czero") ? true : false
}

public pdata_init(id)
{
    RegisterHamFromEntity(Ham_TakeDamage, id, "bacon_takedamage")
    RegisterHamFromEntity(Ham_Spawn,      id, "bacon_spawn_post", 1)
}

public build_menu()
{
    new title[32]
    formatex(title, 31, "%L", LANG_SERVER, "MENU_TITLE1")
    g_equipmenu = menu_create(title, "menu_equip", 0)
        
    formatex(title, 31, "%L", LANG_SERVER, "MENU_TITLE2")
    g_primmenu  = menu_create(title,    "menu_prim", 0)
    
    formatex(title, 31, "%L", LANG_SERVER, "MENU_TITLE3")
    g_secmenu   = menu_create(title,  "menu_sec",  0)

    new name[32]
    formatex(name, 31, "%L", LANG_SERVER, "MENU_NEWWEAPONS")
    menu_additem(g_equipmenu, name, "1", 0, -1)
    
    formatex(name, 31, "%L", LANG_SERVER, "MENU_PREVSETUP")
    menu_additem(g_equipmenu, name, "2", 0, -1)
    
    formatex(name, 31, "%L", LANG_SERVER, "MENU_DONTSHOW")
    menu_additem(g_equipmenu, name, "3", 0, -1)
    
    static i, num[3]
    for(i = 1; i < sizeof g_primmenunames; i++)
    {
        formatex(num, 2, "%d", i)
        menu_additem(g_primmenu, g_primmenunames[i], num, 0, -1)
    }
    
    for(i = 1; i < sizeof g_secmenunames; i++)
    {
        formatex(num, 2, "%d", i)
        menu_additem(g_secmenu, g_secmenunames[i], num, 0, -1)
    }
    return PLUGIN_HANDLED
}

public plugin_cfg()
{
    new file[64]; get_configsdir(file, 63)
    format(file, 63, "%s/bh_cvars.cfg", file)
    if(file_exists(file)) server_cmd("exec %s", file), server_exec()
    
    new light[2]
    get_pcvar_string(cvar_lights, light, 1)
    
    if(strlen(light) > 0)
    {
        set_task(1.0, "task_lights", _, _, _, "b")
        
        set_cvar_num("sv_skycolor_r", 0)
        set_cvar_num("sv_skycolor_g", 0)
        set_cvar_num("sv_skycolor_b", 0)
    }
        
    new skyname[32]
    get_pcvar_string(cvar_skyname, skyname, 31)
        
    if(strlen(skyname) > 0)
        set_cvar_string("sv_skyname", skyname)
}

public plugin_end()
    set_pcvar_num(cvar_autobalance[0], cvar_autobalance[1]), destroyforwards()

public destroyforwards()
{
    DestroyForward(g_fwd_infect),  DestroyForward(g_fwd_infect2)
    DestroyForward(g_fwd_teamwin), DestroyForward(g_fwd_gamestart)
}

public plugin_natives()
{
    register_library("biohazardf")
    register_native("is_game_started",     "native_game_started")
    register_native("is_user_zombie",      "native_is_user_zombie")
    register_native("is_user_firstzombie", "native_is_user_firstzombie")
    register_native("infect_user",         "native_infect_user")
    register_native("firstzombie",         "native_first_zombie")
}

public client_connect(id)
{
    g_lastteam[id] = -1, remove_model(g_modelent[id])
    g_showmenu[id] = true, clear_clientdata(id)
}

public client_putinserver(id)
{
    if(!g_netclient_pdata) set_task(1.0, "task_netclient_pdata", id)
    if(g_czero && !g_botclient_pdata) set_task(1.0, "task_botclient_pdata", id)
}

public client_disconnect(id)
{
    remove_task(TASKID_SETZOMBIE + id), remove_task(TASKID_STRIPNGIVE + id)
    remove_task(TASKID_UPDATESCR + id), remove_task(TASKID_SPAWNDELAY + id)
    remove_task(TASKID_GIVENADES + id), remove_model(g_modelent[id])
}

public clear_clientdata(id)
{
    g_victim[id] = 0, g_regendelay[id] = 0.0
    g_lastteam[id] = 0, g_weaponent[id] = 0
    g_zombie[id] = false, g_falling[id] = false
}

public remove_model(ent)
{
    static id; id = pev(ent, pev_owner)
    if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity, ent)
    g_modelent[id] = 0
}

public cmd_enablemenu(id)
{    
    if(!get_pcvar_num(cvar_weaponsmenu))
        return PLUGIN_CONTINUE
    
    client_print(id, print_chat, "%L", id, g_showmenu[id] == false ? "MENU_REENABLED" : "MENU_ALENABLED")
    g_showmenu[id] = true

    return PLUGIN_HANDLED_MAIN
}public cmd_nightvision(id)
    return (!g_zombie[id] && get_pcvar_num(cvar_blocknightvision)) ? PLUGIN_HANDLED : PLUGIN_CONTINUE

public cmd_chooseteam(id)
    return g_zombie[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE

public cmd_fixradio()
    g_radiofix = true

public cmd_infectuser(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return PLUGIN_HANDLED_MAIN
    
    static arg1[32], target
    read_argv(1, arg1, 31)
    
    target = cmd_target(id, arg1, 0)
    if(!is_user_alive(target))
    {
        console_print(id, "%L", id, "CMD_INVALIDUSER")
        return PLUGIN_HANDLED_MAIN
    }
    
    if(!allow_infection())
    {
        console_print(id, "%L", id, "CMD_MAXZOMBIES")
        return PLUGIN_HANDLED_MAIN
    }
    
    if(!g_gamestarted)
    {
        console_print(id, "%L", id, "CMD_NOTSTARTED")
        return PLUGIN_HANDLED_MAIN
    }
    
    if(!g_zombie[target])
    {
        infect_user(target)
        
        static name[32]; get_user_name(target, name, 31)
        console_print(id, "%L", id, "CMD_INFECTED", name)
    }
    return PLUGIN_HANDLED_MAIN
}

public msg_teaminfo(msgid, dest, id)
{
    id = get_msg_arg_int(1)
    if(is_user_alive(id) || !g_gamestarted)
        return PLUGIN_CONTINUE

    if(g_lastteam[id] == -1)
        return PLUGIN_CONTINUE
    
    static team[4]; get_msg_arg_string(2, team, 3)
    if(team[0] != 'U' || team[1] != 'N' || team[2] != 'A')
        return PLUGIN_CONTINUE

    id = randomly_pick_zombie()
    if(id)
    {
        if(!g_zombie[id])
        {
            infect_user(id)
            
            static name[32]
            get_user_name(id, name, 31)

            set_hudmessage(_, _, _, _, _, 1)
            show_hudmessage(0, "%L", LANG_PLAYER, "INFECTED_HUD", name)
        }
        else
        {
            cs_set_user_team2(id, CS_TEAM_CT)
            set_pev(id, pev_deadflag, DEAD_DISCARDBODY)
        }
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public msg_screenfade(msgid, dest, id)
{
    if(!get_pcvar_num(cvar_flashbang) || !is_user_connected(id))
        return PLUGIN_CONTINUE
    
    if(!g_zombie[id] ||!is_user_alive(id))
    {
        static data[4]
        data[0] = get_msg_arg_int(4); data[1] = get_msg_arg_int(5)
        data[2] = get_msg_arg_int(6); data[3] = get_msg_arg_int(7)
        
        if(data[0] == 255 && data[1] == 255 && data[2] == 255 && data[3] > 199)
            return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public msg_battery(msgid, dest, id)
{
    static armor; armor = get_msg_arg_int(1)
    if(armor > 0)
    {
        if(!is_user_alive(id) || !g_zombie[id])
            return PLUGIN_CONTINUE
        
        static CsArmorType:armortype
        cs_get_user_armor2(id, armortype)
        
        if(armortype != CS_ARMOR_NONE)
            cs_set_user_armor2(id, 0, CS_ARMOR_NONE)
        
        set_msg_arg_int(1, ARG_SHORT, 0)
    }
    return PLUGIN_CONTINUE
}

public msg_scoreattrib(msgid, dest, id)
{
    static attrib; attrib = get_msg_arg_int(2)
    if(attrib == ATTRIB_BOMB) set_msg_arg_int(2, ARG_BYTE, 0)
}

public msg_statusicon(msgid, dest, id)
{
    if(!is_user_connected(id))
        return PLUGIN_CONTINUE
    
    static icon[8]; get_msg_arg_string(2, icon, 7)
    if(icon[0] == 'c' && icon[1] == '4' || equal(icon, "defuser"))
        return PLUGIN_HANDLED
    
    return PLUGIN_CONTINUE
}

public msg_ammox(msgid, dest, id)
{
    static ammotype; ammotype = get_pcvar_num(cvar_ammo)
    if(!is_user_alive(id) || g_zombie[id] || ammotype != 1)
        return PLUGIN_CONTINUE
    
    static ammoid; ammoid = get_msg_arg_int(1)
    static bammo; bammo = get_msg_arg_int(2)
    
    if(!(AMMOID_NULL & (1<<ammoid)) && bammo != MAX_AMMO)
        set_msg_arg_int(2, ARG_BYTE, MAX_AMMO)

    return PLUGIN_CONTINUE
}

public msg_curweapon(msgid, dest, id)
{
    if(!is_user_alive(id) || !get_msg_arg_int(1))
        return PLUGIN_CONTINUE
    
    static weapon; weapon = get_msg_arg_int(2)
    if(g_zombie[id])
    {
        if(weapon != CSW_KNIFE && !task_exists(TASKID_STRIPNGIVE + id))
            set_task(0.2, "task_stripngive", TASKID_STRIPNGIVE + id)
        
        return PLUGIN_CONTINUE
    }
    else if(AMMOWP_NULL & (1<<weapon)) return PLUGIN_CONTINUE

    static ammotype; ammotype = get_pcvar_num(cvar_ammo)
    if(!ammotype) return PLUGIN_CONTINUE
    
    static max_clip; max_clip = get_weapon_maxclip(weapon)
    switch(ammotype)
    {
        case 1:
        {
            static ammo; ammo = get_user_bpammo(id, weapon)
            if(ammo < max_clip) set_user_bpammo(id, weapon, MAX_AMMO)
        }
        case 2:
        {
            static clip; clip = get_msg_arg_int(3)
            if(clip != max_clip) set_msg_arg_int(3, ARG_BYTE, max_clip)
            
            if(!pev_valid(g_weaponent[id]) || (pev_valid(g_weaponent[id])
            && cs_get_weapon_id(g_weaponent[id]) != weapon))
            {
                static weaponname[32]; get_weaponname(weapon, weaponname, 31)
                g_weaponent[id] = fm_find_ent_by_owner(-1, weaponname, id)
            }
            
            if(clip < 1 && pev_valid(g_weaponent[id]))
                set_weapon_ammo(g_weaponent[id], max_clip)
        }
    }
    return PLUGIN_CONTINUE
}

public msg_deathmsg(msgid, dest, id)
{
    static killer; killer = get_msg_arg_int(1)
    static victim; victim = get_msg_arg_int(2)
    if(!is_user_connected(killer))
        return PLUGIN_CONTINUE
    
    if(g_zombie[killer])
        set_msg_arg_string(4, g_zombie_weapname)

    else if(g_zombie[victim])
        set_pev(killer, pev_frags, pev(killer, pev_frags) + float(get_pcvar_num(cvar_killbonus)))

    return PLUGIN_CONTINUE
}

public msg_sendaudio(msgid, dest, id)
{
    static audiocode [22]; get_msg_arg_string(2, audiocode, 21)
    if(equal(audiocode[7], "MOVEOUT") || equal(audiocode[7], "LOCKNLOAD")
    || equal(audiocode[7], "LETSGO")  || (equal(audiocode[7], "GO") && !g_radiofix))
        set_msg_arg_string(2, "%!MRAD_ELIM"), g_radiofix = false

    else if(equal(audiocode[7], "terwin") && get_pcvar_num(cvar_winsounds))
        set_msg_arg_string(2, g_zombie_win_sounds[_random(sizeof g_zombie_win_sounds)])
    
    return PLUGIN_CONTINUE
}

public msg_textmsg(msgid, dest, id)
{
    if(get_msg_arg_int(1) != 4)
        return PLUGIN_CONTINUE
    
    static txtmsg[25], winmsg[32]
    get_msg_arg_string(2, txtmsg, 24)
    
    if(equal(txtmsg[1], "Game_bomb_drop"))
        return PLUGIN_HANDLED

    else if(equal(txtmsg[1], "Terrorists_Win"))
    {
        formatex(winmsg, 31, "%L", LANG_SERVER, "WIN_ZOMBIES")
        set_msg_arg_string(2, winmsg)
        
        g_winningteam = CS_TEAM_T
    }
    else if(equal(txtmsg[1], "Target_Saved") || equal(txtmsg[1], "CTs_Win"))
    {
        formatex(winmsg, 31, "%L", LANG_SERVER, "WIN_SURVIVORS")
        set_msg_arg_string(2, winmsg)
        
        g_winningteam = CS_TEAM_CT
    }
    return PLUGIN_CONTINUE
}

public msg_clcorpse(msgid, dest, id)
{
    id = get_msg_arg_int(12)
    if(!g_zombie[id])
        return PLUGIN_CONTINUE

    static ent; ent = fm_find_ent_by_owner(-1, MODEL_CLASSNAME, id)
    if(pev_valid(ent))
    {
        static model[64]
        pev(ent, pev_model, model, 63)    
        set_msg_arg_string(1, model)
    }
    return PLUGIN_CONTINUE
}

public logevent_round_start()
{
    g_roundstarted = true
    if(get_pcvar_num(cvar_weaponsmenu))
    {
        static id, CsTeams:team
        for(id = 1; id <= g_maxplayers; id++) if(is_user_alive(id))
        {
            team = cs_get_user_team(id)
            if(team == CS_TEAM_T || team == CS_TEAM_CT)
                g_showmenu[id] == true ? menu_display(id, g_equipmenu, 0) : equipweapon(id, EQUIP_ALL)
        }
    }
}

public logevent_round_end()
{
    g_gamestarted = false, g_roundstarted = false
    remove_task(TASKID_BALANCETEAM), remove_task(TASKID_STARTROUND)
    set_task(1.5, "task_balanceteam", TASKID_BALANCETEAM)
    
    if(g_winningteam > CS_TEAM_UNASSIGNED)
    {
        ExecuteForward(g_fwd_teamwin, g_fwd_result, g_winningteam)
        g_winningteam = CS_TEAM_UNASSIGNED
    }
}

public event_textmsg()
{
    static seconds[5]; read_data(3, seconds, 4)
    static Float:tasktime; tasktime = float(str_to_num(seconds)) - 0.5
    remove_task(TASKID_BALANCETEAM), set_task(tasktime, "task_balanceteam", TASKID_BALANCETEAM)
}

public event_newround()
{
    static buytime; buytime = get_pcvar_num(cvar_buytime)
    if(buytime) g_buytime = buytime + get_gametime()
    
    g_gamestarted = false, g_roundstarted = false
    remove_task(TASKID_NEWROUND), remove_task(TASKID_STARTROUND)
    
    set_task(0.1, "task_newround", TASKID_NEWROUND)
    set_task(get_pcvar_float(cvar_starttime), "task_startround", TASKID_STARTROUND)
}

public event_damage(victim)
{
    if(!is_user_alive(victim) || !g_gamestarted)
        return PLUGIN_CONTINUE
    
    if(g_zombie[victim])
    {
        g_regendelay[victim] = get_gametime() + get_pcvar_float(cvar_regen_dly1)
        return PLUGIN_CONTINUE
    }
    
    static attacker; attacker = get_user_attacker(victim)
    if(!is_user_alive(attacker) || !g_zombie[attacker] || g_infecting)
        return PLUGIN_CONTINUE
    
    g_infecting = true
    if(g_victim[attacker] == victim)
    {
        static Float:frags; pev(attacker, pev_frags, frags)
        static deaths; deaths = cs_get_user_deaths(victim)
        set_pev(attacker, pev_frags, frags  + 1.0)
        set_user_deaths(victim, deaths + 1)
                    
        static _msg_deathmsg
        if(!_msg_deathmsg) _msg_deathmsg = get_user_msgid("DeathMsg")
        
        message_begin(MSG_ALL, _msg_deathmsg)
        write_byte(attacker)
        write_byte(victim)
        write_byte(0)
        write_string("infection")
        message_end()
                    
        infect_user(victim)
        ExecuteForward(g_fwd_infect, g_fwd_result, attacker, victim)

        static params[2]; params[0] = attacker, params[1] = victim
        set_task(0.2, "task_updatescore", TASKID_UPDATESCR, params, 2)
        
        g_victim[attacker] = 0
    }
    g_infecting = false
    
    return PLUGIN_CONTINUE
}

public fwd_emitsound(id, channel, sample[], Float:volume, Float:attn, flag, pitch)
{    
    if(sample[6] == 'n' && sample[7] == 'v' && sample[8] == 'g')
        return FMRES_SUPERCEDE
    
    if(!is_user_connected(id) || !g_zombie[id])
        return FMRES_IGNORED
    
    if(sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i' && get_pcvar_num(cvar_customsounds))
    {
        if(sample[14] == 's' && sample[15] == 'l' && sample[16] == 'a')
        {
            emit_sound(id, channel, g_zombie_miss_sounds[_random(sizeof g_zombie_miss_sounds)], volume, attn, flag, pitch)
            return FMRES_SUPERCEDE
        }
        else if(sample[14] == 'h' && sample[15] == 'i' && sample[16] == 't' || sample[14] == 's' && sample[15] == 't' && sample[16] == 'a')
        {
            if(sample[17] == 'w' && sample[18] == 'a' && sample[19] == 'l')
                emit_sound(id, channel, g_zombie_miss_sounds[_random(sizeof g_zombie_miss_sounds)], volume, attn, flag, pitch)
            else
                emit_sound(id, channel, g_zombie_hit_sounds[_random(sizeof g_zombie_hit_sounds)], volume, attn, flag, pitch)
            
            return FMRES_SUPERCEDE
        }
    }            
    else if(sample[7] == 'd' && (sample[8] == 'i' && sample[9] == 'e' || sample[12] == '6'))
    {
        emit_sound(id, channel, g_zombie_die_sounds[_random(sizeof g_zombie_die_sounds)], volume, attn, flag, pitch)
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED
}

public fwd_cmdstart(id, handle, seed)
{
    if(!is_user_alive(id) || !g_zombie[id])
        return FMRES_IGNORED
    
    static impulse; impulse = get_uc(handle, UC_Impulse)
    if(impulse == IMPULSE_FLASHLIGHT)
    {
        set_uc(handle, UC_Impulse, 0)
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED
}

public fwd_playerprethink(id)
{
    if(!is_user_alive(id))
        return FMRES_IGNORED
    
    static flag; flag = pev(id, pev_flags)
    if(get_pcvar_num(cvar_zombie_resist))
    {
        if(flag & FL_ONGROUND)
        {
            pev(id, pev_velocity, g_vecvel)
            g_brestorevel = true
        }
    }

    if(g_zombie[id])
    {
        if(!(flag & FL_ONGROUND))
        {
            static Float:fallvelocity; pev(id, pev_flFallVelocity, fallvelocity)
            g_falling[id] = fallvelocity >= 350.0 ? true : false
        }
        
        if(get_pcvar_num(cvar_zombie_regen))
        {
            static Float:health; pev(id, pev_health, health)
            static Float:zombiehp; zombiehp = float(get_pcvar_num(cvar_zombie_hp))
            if(health < zombiehp)
            {
                static Float:gametime; gametime = get_gametime()
                if(g_regendelay[id] < gametime)
                {
                    set_pev(id, pev_health, health + 1.0)
                    g_regendelay[id] = gametime + get_pcvar_float(cvar_regen_dly2)
                }
            }
        }
        
        static ent; ent = g_modelent[id]
        if(pev_valid(ent))
        {
            if(!(pev(ent, pev_effects) & EF_NODRAW))
            {
                if(pev(id, pev_rendermode) != kRenderTransTexture)
                    set_pev(id, pev_rendermode, kRenderTransTexture)
                
                if(pev(id, pev_renderamt) != 0.0)
                    set_pev(id, pev_renderamt, 0.0)
            }
        }
    }
    return FMRES_IGNORED
}

public fwd_playerprethink_post(id)
{
    if(!g_brestorevel)
        return FMRES_IGNORED

    g_brestorevel = false
        
    static flag; flag = pev(id, pev_flags)
    if(!(flag & FL_ONTRAIN))
    {
        static ent; ent = pev(id, pev_groundentity)
        if(pev_valid(ent) && (flag & FL_CONVEYOR))
        {
            static Float:vectemp[3]
            pev(id, pev_basevelocity, vectemp)
            xs_vec_add(g_vecvel, vectemp, g_vecvel)
        }
            
        if(g_zombie[id])
        {
            static Float:health; pev(id, pev_health, health)
            static Float:kbhp; kbhp = float(get_pcvar_num(cvar_knockback_hp))
            if(get_pcvar_num(cvar_knockback_duck))
            {
                if(pev(id, pev_flags) & FL_DUCKING)
                    set_pev(id, pev_velocity, g_vecvel)
                else if(health > kbhp)
                    set_pev(id, pev_velocity, g_vecvel)
            }
            else if(health > kbhp) set_pev(id, pev_velocity, g_vecvel)
        }
        return FMRES_HANDLED
    }
    return FMRES_IGNORED
}

public fwd_playerpostthink(id)
{
    if(!is_user_alive(id))
        return FMRES_IGNORED
    
    if(g_falling[id] && pev(id, pev_flags) & FL_ONGROUND)
        set_pev(id, pev_watertype, CONTENTS_WATER), g_falling[id] = false
    
    if(get_pcvar_num(cvar_buytime))
    {
        if(g_buytime > get_gametime() && pev_valid(g_buyzone) && !g_zombie[id])
            dllfunc(DLLFunc_Touch, g_buyzone, id)
    }
    return FMRES_IGNORED
}
    
public fwd_spawn(ent)
{
    if(!pev_valid(ent))
        return FMRES_IGNORED
    
    static objective_ents[][] =
    {
        "func_bomb_target",    "info_bomb_target",
        "hostage_entity",      "monster_scientist",
        "func_hostage_rescue", "info_hostage_rescue",
        "info_vip_start",      "func_vip_safetyzone",
        "func_escapezone"
    }

    static classname[32], i
    pev(ent, pev_classname, classname, 31)
    
    if(equal(classname, "func_buyzone"))
    {
        set_pev(ent, pev_solid, SOLID_NOT)
        return FMRES_SUPERCEDE
    }
    
    for(i = 0; i < sizeof objective_ents; ++i)
    {
        if(equal(classname, objective_ents[i]))
        {
            engfunc(EngFunc_RemoveEntity, ent)
            return FMRES_SUPERCEDE
        }
    }
    return FMRES_IGNORED
}

public fwd_gamedescription()
{
    static gamename[32]
    get_pcvar_string(cvar_gamedescription, gamename, 31)
    forward_return(FMV_STRING, gamename)
    
    return FMRES_SUPERCEDE
}  

public fwd_traceline_post(Float:start[3], Float:end[3], nomonsters, id, trace)
{
    if(!is_player_alive(id) || g_gamestarted)
        return FMRES_IGNORED
    
    static target; target = get_tr2(trace, TR_pHit)
    if(is_player_alive(target))
        set_tr2(trace, TR_flFraction, 1.0)

    return FMRES_IGNORED
}

public fwd_tracehull_post(Float:start[3], Float:end[3], nomonsters, hull, id, trace)
{
    if(!is_player_alive(id) || g_gamestarted)
        return FMRES_IGNORED

    static target; target = get_tr2(trace, TR_pHit)
    if(is_player_alive(target))
        set_tr2(trace, TR_flFraction, 1.0)
    
    return FMRES_IGNORED
}

public fwd_createnamedentity(entclassname)
{
    static classname[10]; engfunc(EngFunc_SzFromIndex, entclassname, classname, 9)
    return (classname[7] == 'c' && classname[8] == '4') ? FMRES_SUPERCEDE : FMRES_IGNORED
}

public fwd_sys_error()
    destroyforwards()

public bacon_item_attachtoplayer_post(ent, id)
{
    if(is_user_alive(id) && g_zombie[id])
        weapon_deployed(id)
}

public bacon_item_deploy_post(ent)
{
    static id; id = pev(ent, pev_owner)
    if(is_user_alive(id) && g_zombie[id])
        weapon_deployed(id)
}

public weapon_deployed(id)
{
    set_pev(id, pev_weaponmodel2, "")
    if(g_usingknifemodel)
        set_pev(id, pev_viewmodel2, g_zombie_claws)
    
    set_pev(id, pev_maxspeed, get_pcvar_float(cvar_zombie_spd))
}

public bacon_use(ent, caller, activator, use_type, Float:value)
    return (use_type == 2 && is_player_alive(caller) && g_zombie[caller]) ? HAM_SUPERCEDE : HAM_IGNORED

public bacon_takedamage(victim, inflictor, attacker, Float:damage, damagetype)
{
    if(damagetype & DMG_GENERIC || victim == attacker || !is_user_alive(victim) || !is_user_connected(attacker))
        return HAM_IGNORED

    if(!g_gamestarted || (!g_zombie[victim] && !g_zombie[attacker]))
    {
        SetHamParamFloat(4, 0.0)
        return HAM_HANDLED
    }
    
    static CsTeams:team[2]
    team[0] = cs_get_user_team(attacker), team[1] = cs_get_user_team(victim)
    
    if(team[0] == team[1])
        return HAM_IGNORED
    
    if(!g_zombie[attacker])
    {
        damage *= (damagetype & DMG_HEGRENADE) ? get_pcvar_float(cvar_hedmg_multi) : get_pcvar_float(cvar_zombie_def)
        SetHamParamFloat(4, damage)

        return HAM_HANDLED
    }
    else
    {
        if((damagetype & DMG_HEGRENADE) || get_user_weapon(attacker) != CSW_KNIFE)
            SetHamParamFloat(4, 0.0)
        else
        {
            static bool:infect; infect = allow_infection()
            if(!get_pcvar_num(cvar_zombie_instant))
            {
                static Float:health; pev(victim, pev_health, health)
                if(health > damage)  infect = false
            }       else if(g_infecting) infect = false
            g_victim[attacker] = infect ? victim : 0
            damage *= get_pcvar_float(cvar_zombie_atk)
            SetHamParamFloat(4, infect ? 999.99 : damage)
        }
        return HAM_HANDLED
    }
    return HAM_IGNORED
}

public bacon_spawn_post(id) if(is_user_alive(id))
{
    if(g_zombie[id])
    {
        clear_clientdata(id), reset_user_model(id)
        if(g_usingknifemodel)
        {
            static viewmodel[32]; pev(id, pev_viewmodel2, viewmodel, 31)
            if(equal(viewmodel, g_zombie_claws)) set_pev(id, pev_viewmodel2, KNIFE_MODEL)
        }
    }
    set_task(0.3, "task_spawned", TASKID_SPAWNDELAY + id)
}

public bacon_touch_weapon(ent, id)
    return (is_player_alive(id) && g_zombie[id]) ? HAM_SUPERCEDE : HAM_IGNORED

public task_spawned(taskid)
{
    static id; id = taskid - TASKID_SPAWNDELAY
    if(is_user_alive(id))
    {
        if(pev(id, pev_body)) set_pev(id, pev_body, 0)
        
        if(g_gamestarted)
        {
            static CsTeams:team; team = cs_get_user_team(id)
            if(team == CS_TEAM_T) cs_set_user_team2(id, CS_TEAM_CT)
        }
        
        if(get_pcvar_num(cvar_weaponsmenu) && g_roundstarted && g_showmenu[id])
            menu_display(id, g_equipmenu, 0)
    }
}

public task_lights()
{
    static light[2]
    get_pcvar_string(cvar_lights, light, 1)
    engfunc(EngFunc_LightStyle, 0, light)
}

public task_setzombie(taskid)
{
    static id; id = taskid - TASKID_SETZOMBIE
    set_zombie_attibutes(id)
}

public task_updatescore(params[])
{
    if(!g_gamestarted) return
    
    static attacker; attacker = params[0]
    static victim; victim = params[1]
    
    if(!is_user_connected(attacker))
        return
    
    static frags, deaths, team
    frags  = get_user_frags(attacker)
    deaths = cs_get_user_deaths(attacker)
    team   = get_user_team(attacker)
    
    static msg_scoreinfo
    if(!msg_scoreinfo) msg_scoreinfo = get_user_msgid("ScoreInfo")
    
    message_begin(MSG_ALL, msg_scoreinfo)
    write_byte(attacker)
    write_short(frags)
    write_short(deaths)
    write_short(0)
    write_short(team)
    message_end()
    
    if(!is_user_connected(victim))
        return
    
    frags  = get_user_frags(victim)
    deaths = cs_get_user_deaths(victim)
    team   = get_user_team(victim)
    
    message_begin(MSG_ALL, msg_scoreinfo)
    write_byte(victim)
    write_short(frags)
    write_short(deaths)
    write_short(0)
    write_short(team)
    message_end()
}

public task_stripngive(taskid)
{
    static id; id = taskid - TASKID_STRIPNGIVE
    if(is_user_alive(id))
    {
        fm_strip_user_weapons(id), reset_user_primary(id)
        bacon_give_weapon(id, "weapon_knife")
    }
}

public task_newround()
{
    static players[32], num, i, id, newzombie
    get_players(players, num, "a")

    newzombie = players[_random(num)]
    if(num > 2 && is_user_connected(g_zombieoftheround))
    {
        while(g_zombieoftheround == newzombie)
            newzombie = players[_random(num)]
    }
    g_zombieoftheround = newzombie

    for(i = 0; i < num; i++)
    {
        id = players[i]
        client_print(id, print_chat, "%L %L", id, "SCAN_RESULTS", id, g_zombieoftheround == id ? "SCAN_INFECTED" : "SCAN_CLEAN")
    }
    
    if(get_pcvar_num(cvar_randomspawn))
        randomly_place_everyone()
}

public task_startround()
{
    static players[32], num, i, id, newzombie
    get_players(players, num, "a")
    
    if(num > 2 && !is_user_alive(g_zombieoftheround))
    {
        newzombie = players[_random(num)]
        while(g_zombieoftheround == newzombie)
            newzombie = players[_random(num)]
        
        g_zombieoftheround = newzombie
    }
    
    if(!g_zombieoftheround) return
    
    for(i = 0; i < num; i++)
    {
        id = players[i]
        id == g_zombieoftheround ? infect_user(id) : cs_set_user_team2(id, CS_TEAM_CT)
    }
    
    static name[32]
    get_user_name(g_zombieoftheround, name, 31)

    set_hudmessage(_, _, _, _, _, 1)
    show_hudmessage(0, "%L", LANG_PLAYER, "INFECTED_HUD", name)
    client_print(0, print_chat, "%L", LANG_PLAYER, "INFECTED_TXT", name)
    
    g_gamestarted = true, ExecuteForward(g_fwd_gamestart, g_fwd_result)
}

public task_balanceteam()
{
    static players[CsTeams:3][32], count[CsTeams:3], i, id, CsTeams:team
    get_players(players[CS_TEAM_UNASSIGNED], count[CS_TEAM_UNASSIGNED])
    count[CS_TEAM_T] = 0, count[CS_TEAM_CT] = 0
    
    for(i = 0; i < count[CS_TEAM_UNASSIGNED]; i++)
    {
        id = players[CS_TEAM_UNASSIGNED][i], team = cs_get_user_team(id)
        if(team == CS_TEAM_T || team == CS_TEAM_CT)
            players[team][count[team]++] = id
    }

    if(abs(count[CS_TEAM_T] - count[CS_TEAM_CT]) <= 1) return

    static maxplayers; maxplayers = (count[CS_TEAM_T] + count[CS_TEAM_CT]) / 2
    if(count[CS_TEAM_T] > maxplayers)
    {
        for(i = 0; i < (count[CS_TEAM_T] - maxplayers); i++)
            cs_set_user_team(players[CS_TEAM_T][i], CS_TEAM_CT)
    }
    else
    {
        for(i = 0; i < (count[CS_TEAM_CT] - maxplayers); i++)
            cs_set_user_team(players[CS_TEAM_CT][i], CS_TEAM_T)
    }
}

public task_givenades(taskid)
{
    static id, i; id = taskid - TASKID_GIVENADES
    if(is_user_alive(id) && (strlen(g_grenades[0]) > 0))
    {
        for(i = 0; i < sizeof g_grenades; i++)
            bacon_give_weapon(id, g_grenades[i])
    }
}

public task_netclient_pdata(id) if(!g_netclient_pdata && is_user_connected(id))
{
    if(!g_czero || !(pev(id, pev_flags) & FL_FAKECLIENT) || !get_pcvar_num(cvar_botquota))
        pdata_init(id), g_netclient_pdata = 1
}

public task_botclient_pdata(id) if(!g_botclient_pdata && is_user_connected(id))
{
    if((pev(id,pev_flags) & FL_FAKECLIENT) && get_pcvar_num(cvar_botquota))
        pdata_init(id), g_botclient_pdata = 1
}

public infect_user(id)
{
    if(!is_user_alive(id)) return

    static _msg_scoreattrib
    if(!_msg_scoreattrib) _msg_scoreattrib = get_user_msgid("ScoreAttrib")
    
    message_begin(MSG_ALL, _msg_scoreattrib)
    write_byte(id)
    write_byte(0)
    message_end()
    
    static sound; sound = _random(sizeof g_scream_sounds)
    emit_sound(id, CHAN_STATIC, g_scream_sounds[sound], VOL_NORM, ATTN_NONE, 0, PITCH_NORM)
    
    menu_cancel(id), cs_set_user_team2(id, CS_TEAM_T)
    set_task(0.1, "task_setzombie", TASKID_SETZOMBIE + id)
}

public menu_equip(id, menu, item)
{
    if(item < 0) return PLUGIN_CONTINUE
    
    static cmd[2], name[64], access, callback, key
    menu_item_getinfo(menu, item, access, cmd, 1, name, 63, callback), key = str_to_num(cmd)
    
    switch(key)
    {
        case 1: menu_display(id, g_primmenu, 0)
        case 2: (g_weapons[id][0] > 0) ? equipweapon(id, EQUIP_ALL) : menu_display(id, g_primmenu, 0)
        case 3:
        {
            if(g_weapons[id][0] > 0)
            {
                g_showmenu[id] = false
                client_print(id, print_chat, "%L", id, "MENU_CMDENABLE")
                equipweapon(id, EQUIP_ALL)
            }
            else    menu_display(id, g_primmenu, 0)
        }
    }
    return PLUGIN_HANDLED
}

public menu_prim(id, menu, item)
{
    if(item < 0) return PLUGIN_HANDLED
    
    static cmd[6], name[64], access, callback
    menu_item_getinfo(menu, item, access, cmd, 5, name, 63, callback)
    
    g_weapons[id][0] = str_to_num(cmd)
    equipweapon(id, EQUIP_PRI)
    menu_display(id, g_secmenu, 0)

    return PLUGIN_HANDLED
}

public menu_sec(id, menu, item)
{
    if(item < 0) return PLUGIN_HANDLED
    
    static cmd[6], name[64], access, callback
    menu_item_getinfo(menu, item, access, cmd, 5, name, 63, callback)
    
    g_weapons[id][1] = str_to_num(cmd)
    equipweapon(id, EQUIP_SEC)
    equipweapon(id, EQUIP_GREN)

    return PLUGIN_HANDLED
}

public randomly_place_everyone()
{
    if(g_spawncount <= 0) return
    
    static players[32], num, id, i, CsTeams:team
    get_players(players, num, "a")

    for(i = 0; i < num; i++)
    {
        id = players[i]
        team = cs_get_user_team(id)
        
        if(team != CS_TEAM_T && team != CS_TEAM_CT || pev(id, pev_iuser1))
            continue
        
        static spawn_index
        spawn_index = _random(g_spawncount)
    
        static Float:spawndata[3]
        spawndata[0] = g_spawns[spawn_index][0]
        spawndata[1] = g_spawns[spawn_index][1]
        spawndata[2] = g_spawns[spawn_index][2]
        
        if(!fm_is_hull_vacant(spawndata, HULL_HUMAN))
        {
            static i
            for(i = spawn_index + 1; i != spawn_index; i++)
            {
                if(i >= g_spawncount) i = 0

                spawndata[0] = g_spawns[i][0]
                spawndata[1] = g_spawns[i][1]
                spawndata[2] = g_spawns[i][2]

                if(fm_is_hull_vacant(spawndata, HULL_HUMAN))
                {
                    spawn_index = i
                    break
                }
            }
        }

        spawndata[0] = g_spawns[spawn_index][0]
        spawndata[1] = g_spawns[spawn_index][1]
        spawndata[2] = g_spawns[spawn_index][2]
        engfunc(EngFunc_SetOrigin, id, spawndata)

        spawndata[0] = g_spawns[spawn_index][3]
        spawndata[1] = g_spawns[spawn_index][4]
        spawndata[2] = g_spawns[spawn_index][5]
        set_pev(id, pev_angles, spawndata)

        spawndata[0] = g_spawns[spawn_index][6]
        spawndata[1] = g_spawns[spawn_index][7]
        spawndata[2] = g_spawns[spawn_index][8]
        set_pev(id, pev_v_angle, spawndata)

        set_pev(id, pev_fixangle, 1)
    }
}

public get_spawnpoints()
{
    static configdir[32]; get_configsdir(configdir, 31)
    static mapname[32]; get_mapname(mapname, 31)
    
    static csdmfile[64], line[64], data[10][6]
    formatex(csdmfile, 63, "%s/csdm/%s.spawns.cfg", configdir, mapname)

    if(file_exists(csdmfile))
    {
        static file; file = fopen(csdmfile, "rt")
        while(file && !feof(file))
        {
            fgets(file, line, 63)
            if(!line[0] || str_count(line,' ') < 2) continue

            parse(line, data[0], 5, data[1], 5, data[2], 5, data[3], 5, data[4], 5, data[5], 5, data[6], 5, data[7], 5, data[8], 5, data[9], 5)

            g_spawns[g_spawncount][0] = floatstr(data[0]), g_spawns[g_spawncount][1] = floatstr(data[1])
            g_spawns[g_spawncount][2] = floatstr(data[2]), g_spawns[g_spawncount][3] = floatstr(data[3])
            g_spawns[g_spawncount][4] = floatstr(data[4]), g_spawns[g_spawncount][5] = floatstr(data[5])
            g_spawns[g_spawncount][6] = floatstr(data[7]), g_spawns[g_spawncount][7] = floatstr(data[8])
            g_spawns[g_spawncount][8] = floatstr(data[9])
            
            if(g_spawncount++ >= MAX_SPAWNS) break
        }
        if(file) fclose(file)
    }
}

public native_is_user_zombie(plugin, params)
{
    if(params != 1) return 0
        
    static index; index = get_param(1)
    if(!index) return 0
    
    return g_zombie[index] == true ? 1 : 0
}

public native_infect_user(plugin, params)
{
    if(params != 1) return 0
        
    static index; index = get_param(1)
    if(is_user_alive(index) && allow_infection() && g_gamestarted)
    {
        infect_user(index)
        return 1
    }
    return 0
}

public native_is_user_firstzombie(plugin, params)
{
    if(params != 1) return 0
        
    static index; index = get_param(1)
    return index == g_zombieoftheround ? 1 : 0
}

public native_first_zombie(plugin)
    return g_zombieoftheround

public native_game_started(plugin)
    return g_gamestarted

stock bool:fm_is_hull_vacant(const Float:origin[3], hull)
{
    static tr; tr = 0; engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
    return (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen)) ? true : false
}

stock fm_set_kvd(entity, const key[], const value[], const classname[] = "")
{
    set_kvd(0, KV_ClassName, classname), set_kvd(0, KV_KeyName, key)
    set_kvd(0, KV_Value, value), set_kvd(0, KV_fHandled, 0)

    return dllfunc(DLLFunc_KeyValue, entity, 0)
}

stock fm_strip_user_weapons(index)
{
    static stripent
    if(!pev_valid(stripent))
    {
        stripent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))
        dllfunc(DLLFunc_Spawn, stripent)
        set_pev(stripent, pev_solid, SOLID_NOT)
    }
    dllfunc(DLLFunc_Use, stripent, index)
    
    return 1
}

stock fm_set_entity_visibility(index, visible = 1)
    set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW)

stock fm_find_ent_by_owner(index, const classname[], owner)
{
    static ent; ent = index
    while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", classname)) && pev(ent, pev_owner) != owner) {}
    
    return ent
}

stock bacon_give_weapon(index, weapon[])
{
    if(!equal(weapon,"weapon_", 7)) return 0

    static ent; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon))
    if(!pev_valid(ent)) return 0
    
    set_pev(ent, pev_spawnflags, SF_NORESPAWN)
    dllfunc(DLLFunc_Spawn, ent)
  
    if(!ExecuteHamB(Ham_AddPlayerItem, index, ent))
    {
        if(pev_valid(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)
        return 0
    }
    ExecuteHamB(Ham_Item_AttachToPlayer, ent, index)

    return 1
}

stock cs_set_user_team2(index, {CsTeams,_}:team, update = 1)
{
    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
}

stock cs_get_user_armor2(index, &CsArmorType:armortype)
{
    static armorvalue; pev(index, pev_armorvalue, armorvalue)
    armortype = CsArmorType:get_pdata_int(index, OFFSET_ARMOR)
    
    return armorvalue
}

stock cs_set_user_armor2(index, armorvalue, CsArmorType:armortype)
{
    set_pev(index, pev_armorvalue, armorvalue)
    set_pdata_int(index, OFFSET_ARMOR, _:armortype)
    
    return 1
}

stock get_weapon_maxclip(weapon)
{
    static ammo
    switch(weapon)
    {
        case CSW_P228:              ammo = 13
        case CSW_GALI:              ammo = 35
        case CSW_USP:              ammo = 12
        case CSW_M249:              ammo = 100
        case CSW_M3:              ammo = 8
        case CSW_P90:              ammo = 50
        case CSW_SCOUT, CSW_AWP:      ammo = 10
        case CSW_XM1014, CSW_DEAGLE:     ammo = 7
        case CSW_UMP45, CSW_FAMAS:     ammo = 25
        case CSW_FIVESEVEN, CSW_GLOCK18,
        CSW_G3SG1:             ammo = 20
        case CSW_KNIFE, CSW_FLASHBANG,
        CSW_SMOKEGRENADE, CSW_HEGRENADE,
        CSW_C4:                 ammo = 0
        case CSW_SG552, CSW_AK47,
        CSW_MP5NAVY, CSW_M4A1,
        CSW_MAC10, CSW_SG550,
        CSW_AUG, CSW_ELITE, CSW_TMP:     ammo = 30
        default:             ammo = 0
    }
    return ammo
}

stock get_user_bpammo(index, weapon)
{
    static offset
    switch(weapon)
    {
        case CSW_AWP:                offset = OFFSET_AMMO_AWP
        case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_SCOUT
        case CSW_M249:               offset = OFFSET_AMMO_M249
        case CSW_FAMAS, CSW_M4A1, CSW_AUG,
        CSW_SG550, CSW_GALI, CSW_SG552:         offset = OFFSET_AMMO_FAMAS
        case CSW_M3, CSW_XM1014:         offset = OFFSET_AMMO_M3
        case CSW_USP, CSW_UMP45, CSW_MAC10:  offset = OFFSET_AMMO_USP
        case CSW_FIVESEVEN, CSW_P90:         offset = OFFSET_AMMO_FIVESEVEN
        case CSW_DEAGLE:             offset = OFFSET_AMMO_DEAGLE
        case CSW_P228:                 offset = OFFSET_AMMO_P228
        case CSW_GLOCK18, CSW_TMP, CSW_ELITE,
        CSW_MP5NAVY:                 offset = OFFSET_AMMO_GLOCK18
        default:                 offset = 0
    }
    return offset ? get_pdata_int(index, offset) : 0
}

stock set_user_bpammo(index, weapon, amount)
{
    static offset
    switch(weapon)
    {
        case CSW_AWP:                offset = OFFSET_AMMO_AWP
        case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_SCOUT
        case CSW_M249:               offset = OFFSET_AMMO_M249
        case CSW_FAMAS, CSW_M4A1, CSW_AUG,
        CSW_SG550, CSW_GALI, CSW_SG552:         offset = OFFSET_AMMO_FAMAS
        case CSW_M3, CSW_XM1014:         offset = OFFSET_AMMO_M3
        case CSW_USP, CSW_UMP45, CSW_MAC10:  offset = OFFSET_AMMO_USP
        case CSW_FIVESEVEN, CSW_P90:         offset = OFFSET_AMMO_FIVESEVEN
        case CSW_DEAGLE:             offset = OFFSET_AMMO_DEAGLE
        case CSW_P228:                 offset = OFFSET_AMMO_P228
        case CSW_GLOCK18, CSW_TMP, CSW_ELITE,
        CSW_MP5NAVY:                 offset = OFFSET_AMMO_GLOCK18
        default:                 offset = 0
    }
    
    if(offset) set_pdata_int(index, offset, amount)
    
    return 1
}

stock set_user_nvg(index)
{
    static nvg; nvg = get_pdata_int(index, OFFSET_NVG)
    if(!(nvg & HAS_NVG))
    {
        nvg |= HAS_NVG
        set_pdata_int(index, OFFSET_NVG, nvg)
    }
    return 1
}

stock str_count(str[], searchchar)
{
    static maxlen; maxlen = strlen(str)
    static i, count; count = 0
    
    for(i = 0; i <= maxlen; i++) if(str[i] == searchchar)
        count++

    return count
}

stock reset_user_model(index)
{
    set_pev(index, pev_rendermode, kRenderNormal)
    set_pev(index, pev_renderamt, 0.0)

    if(pev_valid(g_modelent[index]))
    {
        fm_set_entity_visibility(g_modelent[index], 0)
        set_pev(g_modelent[index], pev_movetype, MOVETYPE_NONE)
        set_pev(g_modelent[index], pev_aiment, 0)
    }
}

stock set_zombie_attibutes(index)
{
    if(!is_user_alive(index)) return

    cs_set_user_armor2(index, 0, CS_ARMOR_NONE), set_pev(index, pev_body, 0), g_zombie[index] = true
    
    if(!task_exists(TASKID_STRIPNGIVE + index))
        set_task(0.2, "task_stripngive", TASKID_STRIPNGIVE + index)
    
    if(g_usingplayermodel)
    {
        if(!pev_valid(g_modelent[index]))
        {
            static ent; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
            if(pev_valid(ent))
            {
                engfunc(EngFunc_SetModel, ent, g_zombie_model)
                set_pev(ent, pev_classname, MODEL_CLASSNAME)
                set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
                set_pev(ent, pev_aiment, index)
                set_pev(ent, pev_owner, index)
                
                g_modelent[index] = ent
            }
        }
        else
        {
            fm_set_entity_visibility(g_modelent[index], 1)
            set_pev(g_modelent[index], pev_movetype, MOVETYPE_FOLLOW)
            set_pev(g_modelent[index], pev_aiment, index)
        }
    }

    static Float:health; health = float(get_pcvar_num(cvar_zombie_hp))
    static Float:bonus; bonus = float(get_pcvar_num(cvar_hpbonus))
    set_pev(index, pev_health, g_zombieoftheround == index ? health + bonus : health)
    
    set_user_nvg(index)
    if(get_pcvar_num(cvar_autonvg)) engclient_cmd(index, "nightvision")
    
    static effects; effects = pev(index, pev_effects)
    if(effects & EF_DIMLIGHT)
    {
        static msg_flashlight
        if(!msg_flashlight) msg_flashlight = get_user_msgid("Flashlight")
        
        message_begin(MSG_ONE, msg_flashlight, _, index)
        write_byte(0)
        write_byte(100)
        message_end()
    
        set_pev(index, pev_effects, effects & ~EF_DIMLIGHT)
    }
    ExecuteForward(g_fwd_infect2, g_fwd_result, index)
}

stock bool:allow_infection()
{
    static index, count[2], maxzombies; count[0] = 0, count[1] = 0
    for(index = 1; index <= g_maxplayers; index++)
    {
        if(is_user_connected(index) && g_zombie[index]) count[0]++
        else if(is_user_alive(index)) count[1]++
    }
    
    maxzombies = clamp(get_pcvar_num(cvar_maxzombies), 1, 31)
    return (count[0] < maxzombies && count[1] > 1) ? true : false
}

stock randomly_pick_zombie()
{
    static index, players[2][32], data[4]
    data[0] = 0, data[1] = 0, data[2] = 0, data[3] = 0
    
    for(index = 1; index <= g_maxplayers; index++)
    {
        if(!is_user_alive(index)) continue
        
        if(g_zombie[index]) data[0]++, players[0][data[2]++] = index
        else             data[1]++, players[1][data[3]++] = index
    }
    
    if(data[0] > 1 &&  data[1] < 1) return players[0][_random(data[2])]
    return (data[0] < 1 && data[1] > 1) ?  players[1][_random(data[3])] : 0
}

stock equipweapon(id, weapon)
{
    if(!is_user_alive(id)) return

    static weaponid
    
    if(weapon & EQUIP_PRI)
    {
        fm_strip_user_weapons(id), bacon_give_weapon(id, "weapon_knife")
        bacon_give_weapon(id, g_primweaponnames[g_weapons[id][0]])
        
        weaponid = get_weaponid(g_primweaponnames[g_weapons[id][0]])
        set_user_bpammo(id, weaponid, MAX_AMMO)
    }
    
    if(weapon & EQUIP_SEC)
    {
        bacon_give_weapon(id, g_secweaponnames[g_weapons[id][1]])
            
        weaponid = get_weaponid(g_secweaponnames[g_weapons[id][1]])
        set_user_bpammo(id, weaponid, MAX_AMMO)
    }
    
    if(weapon & EQUIP_GREN)
        set_task(0.1, "task_givenades", id + TASKID_GIVENADES)
}

код на мод
Код
#include <amxmodx>
#include <biohazard>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#define MSG_CANTJOIN "You must be dead!"
#define MSG_GAMENOTSTARTED "The game has not started!"
#define MSG_NOPLACE "There are too many zombies on the server!"
#define MSG_ABUSE "You can not spawn now!"
#define MSG_ANNONCE "+zspawn to spawn as Zombie!"
#define MSG_CHOOSETEAM "You must choose a team before spawning!"
#define OFFSET_TEAM         114

new SayText, cvar_zspawn
new g_firstime[33]

new  cvar_zspawnmode

public plugin_init() {        
    register_plugin("bio_zspawn","1.0","bipbip")
    is_biomod_active() ? plugin_init2() : pause("ad")
}

public plugin_init2() {
    cvar_zspawn = register_cvar("bh_zspawn", "1")

    cvar_zspawnmode = register_cvar("bh_zspawnmode","1")

}


public client_connect(id) g_firstime[id] = 1;
public client_disconnect(id) g_firstime[id] = 1;

public client_putinserver(id) {
    set_task(1.0,"task_putinserver",id)
    
}
public cheese_killed(id) {
    if (get_pcvar_num(cvar_zspawnmode) == 1 && g_firstime[id]==0) {
        set_task(1.0,"task_respawn", id + 994)
        g_firstime[id] = 1
    }
}
public task_putinserver(id) {
    if (is_user_connected(id)) {
        g_firstime[id] = 1
        RegisterHamFromEntity(Ham_Spawn,      id, "cheese_spawn_post", 1)
        RegisterHamFromEntity(Ham_Killed, id, "cheese_killed",1)
        set_task(5.0,"task_annonce",id)
    }
}
public cheese_spawn_post(id) g_firstime[id] = 0;
public task_annonce(id) if (get_pcvar_num(cvar_zspawn)) {
    if (g_firstime[id] == 1 ) {
        static CsTeams: team
        team = cs_get_user_team(id)
        if (team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)
            if (is_game_started() && !is_user_alive(id)) green_print(id, MSG_ANNONCE)
        set_task(10.0,"task_annonce",id)
    }
}
public task_respawn(tid) {
    new id = tid - 994
    if (canjoin(id)) {
        g_firstime[id]++
        ExecuteHam(Ham_CS_RoundRespawn, id)
        infect_user(id)
        set_task(1.0,"task_infect",id)
    }

}
public task_infect(id) {
    cs_set_user_team2(id,CS_TEAM_T,1)
    client_cmd(id,"slot10")
}

bool: canjoin(id) {
    if (is_user_alive(id))     {
        green_print(id, MSG_CANTJOIN)
        return false
    }
    static CsTeams: team
    team = cs_get_user_team(id)
    
    if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED) {
        green_print(id, MSG_CHOOSETEAM)
        return false
    }
    
    if (!is_game_started())    {
        green_print(id, MSG_GAMENOTSTARTED)
        return false
    }
    if (g_firstime[id]==0) {
        green_print(id, MSG_ABUSE)
        return false
    }
    return true;
}
stock cs_set_user_team2(index, {CsTeams,_}:team, update = 1)
{
    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
}
stock green_print(index, const message[])
{
    new finalmsg[192];
    formatex(finalmsg, 191, "^x04[BIO] ^x01%s", message);
    message_begin(MSG_ONE, SayText, _, index);
    write_byte(index);
    write_string(finalmsg);
    message_end();
}

biohazard новый, ставить обязательно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя firstzombie
сообщение 17.6.2009, 15:48
Сообщение #4
Стаж: 14 лет

Сообщений: 6
Благодарностей: 1
Полезность: 0

Большое спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: