/* amx_zombiebot */
/* Plugin by uPd4t3d Data */
/* Use this plugin with my map "as_resident_evil" and Counter-Strike Condition Zero */
/* This plugin is designed for as-maps only */
#include <amxmisc>
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <fun>
#define NO_TEAM 0
#define TERRORIST 1
#define COUNTERTERRORIST 2
#define SPECTATOR 3
#define VERSION "0.93 [2010-04-12]"
/* Use this plugin only with this map(s)... */
new zombie_maps[]="as_resident_evil,as_resident_evil_siege"
new team /* speichert welches Team */
new bot /* speichert ob es ein Bot ist */
new dog /* Wie viele Hunde */
new name[32] /* speichert den Namen eines Spielers */
new zombies=0 /* zählt die Anzahl der Zombies */
new t_count=0 /* zählt Ts ohne Bots */
new ct_count=0 /* zählt CTs ohne Bots */
new player_count=1 /* Zeiger auf Player der geprüft werden soll */
new ct_model_count=1 /* Zeiger auf das Model eines CT */
new end_round_flag=1 /* Flag, ob Rundenende ist */
new first_mdl[33] /* Flag, ob das erste Mal ein Model gesetzt wird */
new need_change[33] /* speichert, ob das Model gewechselt werden muß */
new mapname[32] /* speichert den Namen der Map */
new Float:spawn_delay=3.0 /* Verzögerung beim spawnen */
new is_vip=0 /* Variable um zu kucken, ob ein VIP lebt */
new is_bot_vip=0 /* falls ein Bot sich verlaufen hat */
new is_bot_dog[33] /* Der Bot ist ein Hund */
new vip_safe=-1 /* wenn der VIP es geschafft hat */
new vip_safetyzone[33] /* befindet sich der Spieler in der Safety-Zone */
new can_spawn[33] /* speichert ob Spieler spawnen darf! */
new config=0 /* speichert ob der Server konfiguriert wurde */
new ct_level[33] /* Level CT */
new ct_kill_count[33] /* zählt die Kills eines CTs im Level */
new t_level[33] /* Level T */
new t_death_count[33] /* zählt die Tode eines Ts im Level */
new drop[33] /* Info, ob T Waffe weggeschmissen hat */
new spec[33] /* Info, wie lange ein Spieler Spectator ist */
new steam_count=0 /* Zeiger auf die nächste zu vergebene Position in der Steam-Liste */
new steam_adr[40][20] /* Liste mit SteamIDs der Spieler */
new steam_level[40] /* Level des Spielers zur SteamID */
new steam_pos[33] /* Slot des Spielers, zeigt auf die Pos. der Steam-Liste */
new msg_screen_fade
public plugin_init() {
register_plugin("amx_zombiebot",VERSION,"uPd4t3d Data")
register_cvar("amx_zombiebot_version",VERSION,FCVAR_SERVER)
set_cvar_string("amx_zombiebot_version",VERSION)
register_cvar("amx_zombiebot","12") /* Anzahl der Bots im T-Team */
register_cvar("amx_zombiebot_debug","0") /* Debug- Infos */
config=0 /* Server ist noch nicht konfiguriert */
msg_screen_fade=get_user_msgid("ScreenFade")
get_mapname(mapname,31)
if (containi(zombie_maps,mapname) != -1) { /* ..nur bei Zombiemap */
register_concmd("amx_zombiebot_level","set_level",ADMIN_VOTE,"- add level for an admin")
register_concmd("amx_zombiebot_weapon","admin_weapon",ADMIN_VOTE,"- give admin weapons")
register_logevent("start_round",2,"0=World triggered","1=Round_Start") /* ..wenn die Runde anfängt */
register_logevent("end_round",2,"0=World triggered","1=Round_End") /* ..wenn die Runde zu Ende ist */
register_event("CurWeapon","cur_weapon","be","1=1") /* ..wenn jemand eine Waffe wählt */
register_event("ResetHUD","event_hud_reset","be") /* Aufruf je Spieler am Rundenstart */
register_clcmd("jointeam","join_team") /* ..wenn jemand einem Team beitritt */
register_forward(FM_ClientUserInfoChanged,"fw_info") /* Weiterleitung Info Changed */
register_forward(FM_Touch,"fw_touch") /* wenn ein Spieler etwas berührt */
register_forward(FM_PlayerPostThink,"change_models") /* Models ändern */
register_forward(FM_SetClientKeyValue,"fw_SetClientKeyValue" ) /* Verhindern, dass die Engine Models zurück setzt */
register_forward(FM_EmitSound,"fw_emitsound") /* Töne abändern */
server_cmd("bot_quota 0") /* Alle CZ-Bots vom Server schmeißen */
set_task(10.0,"server_config")
}
}
public set_level(id,level,cid){
if (!cmd_access(id,level,cid,1)){
return PLUGIN_HANDLED
}
if (get_user_team(id) == COUNTERTERRORIST) {
if (ct_level[id] < 9) {
ct_level[id]++
client_cmd(id,"spk items/suitchargeok1")
}
}
if (get_user_team(id) == TERRORIST) {
if (t_level[id] < 9) {
t_level[id]++
client_cmd(id,"spk items/suitchargeok1")
}
}
return PLUGIN_HANDLED
}
public admin_weapon(id,level,cid){
if (!cmd_access(id,level,cid,1)){
return PLUGIN_HANDLED
}
if (is_user_alive(id) && is_user_connected(id)) {
give_item(id,"weapon_m4a1")
cs_set_user_bpammo(id,CSW_M4A1,250)
give_item(id,"weapon_ak47")
cs_set_user_bpammo(id,CSW_AK47,250)
give_item(id,"weapon_deagle")
cs_set_user_bpammo(id,CSW_DEAGLE,250)
client_cmd(id,"spk items/suitchargeok1")
}
return PLUGIN_HANDLED
}
public server_config() {
server_cmd("bot_difficulty 3")
server_cmd("bot_allow_grenades 0")
server_cmd("bot_allow_machine_guns 0")
server_cmd("bot_allow_pistols 0")
server_cmd("bot_allow_rifles 0")
server_cmd("bot_allow_rogues 0")
server_cmd("bot_allow_shield 0")
server_cmd("bot_allow_shotguns 0")
server_cmd("bot_allow_snipers 0")
server_cmd("bot_allow_sub_machine_guns 0")
server_cmd("bot_chatter off")
server_cmd("bot_join_team t")
server_cmd("bot_walk 0")
server_cmd("bot_zombie 0")
server_cmd("bot_stop 0")
server_cmd("bot_quota 2")
set_cvar_num("mp_forcecamera",0)
set_cvar_num("mp_forcechasecam",0)
set_cvar_num("mp_limitteams",1)
set_cvar_num("mp_autoteambalance",0)
set_cvar_num("mp_flashlight",0)
set_cvar_num("mp_freezetime",1)
set_cvar_num("allow_spectators",1)
set_cvar_num("decalfrequency",300)
set_cvar_float("mp_roundtime",3.5)
set_cvar_num("sv_allowdownload",0)
set_cvar_num("sv_timeout",20)
set_cvar_num("sv_maxspeed",400)
set_cvar_num("sv_restartround",1)
config=1 /* Server wurde konfiguriert */
set_task(3.0,"check_death") /* Prüfung aktivieren */
}
public plugin_precache() {
get_mapname(mapname,31)
if (containi(zombie_maps,mapname) != -1) { /* Precaches vermeiden, wenn keine Zombiemap */
precache_model("models/player/zombiebot_1/zombiebot_1.mdl")
precache_model("models/player/zombiebot_2/zombiebot_2.mdl")
precache_model("models/player/zombiebot_3/zombiebot_3.mdl")
precache_model("models/player/zombiebot_4/zombiebot_4.mdl")
precache_model("models/player/zombiebot_5/zombiebot_5.mdl")
precache_model("models/player/zombiebot_6/zombiebot_6.mdl")
precache_model("models/player/zombiebot_7/zombiebot_7.mdl")
precache_model("models/player/zombiebot_8/zombiebot_8.mdl")
precache_model("models/player/zombiebot_9/zombiebot_9.mdl")
precache_model("models/player/zombiebot_ct1/zombiebot_ct1.mdl")
precache_model("models/player/zombiebot_ct2/zombiebot_ct2.mdl")
precache_model("models/player/zombiebot_ct3/zombiebot_ct3.mdl")
precache_model("models/player/zombiebot_ct4/zombiebot_ct4.mdl")
precache_model("models/player/zombiebot_ct5/zombiebot_ct5.mdl")
precache_model("models/player/zombiebot_ct6/zombiebot_ct6.mdl")
precache_model("models/player/zombiebot_ct7/zombiebot_ct7.mdl")
precache_model("models/player/zombiebot_ct8/zombiebot_ct8.mdl")
precache_model("models/player/zombiebot_ct9/zombiebot_ct9.mdl")
precache_model("models/player/zombiebot_ct10/zombiebot_ct10.mdl")
precache_model("models/player/zombiebot_ct11/zombiebot_ct11.mdl")
precache_model("models/player/zombiebot_ct12/zombiebot_ct12.mdl")
precache_model("models/player/zombiebot_dog/zombiebot_dog.mdl")
precache_model("models/player/zombiebot_vip/zombiebot_vip.mdl")
precache_model("models/v_knife_zombie.mdl")
precache_model("models/v_elite_zombiebot.mdl")
precache_model("models/v_knife_zombiebot.mdl")
precache_model("models/v_m249_zombiebot.mdl")
precache_model("models/v_m3_zombiebot.mdl")
precache_model("models/v_m4a1_zombiebot.mdl")
precache_model("models/v_mp5_zombiebot.mdl")
precache_model("models/v_tmp_zombiebot.mdl")
precache_model("models/v_sg552_zombiebot.mdl")
precache_model("models/v_usp_zombiebot.mdl")
precache_sound("weapons/hammerback.wav")
precache_sound("weapons/leftmagin.wav")
precache_sound("weapons/leftmagout.wav")
precache_sound("weapons/m249_boltpull.wav")
precache_sound("weapons/m4a1_boltpull.wav")
precache_sound("weapons/magbash.wav")
precache_sound("weapons/ready.wav")
precache_sound("weapons/rightmagin.wav")
precache_sound("weapons/rightmagout.wav")
precache_sound("weapons/sliderelease.wav")
precache_sound("zombiebot/attention.wav") /* - 15 Sek nach dem Betreten des Servers */
precache_sound("zombiebot/final_level.wav") /* - sofort beim Erreichen des Final Level */
precache_sound("zombiebot/level_up.wav")
precache_sound("zombiebot/one_level_down.wav")
precache_sound("zombiebot/safetyzone.wav") /* - ca 2-5 Sek. nach dem Spawn gegenüber dem VIP */
precache_sound("zombiebot/two_level_up.wav") /* - kurze Zeit nach dem Kill des VIP oder sofort beim Spawn für CTs wenn der VIP durchgebracht wurde */
precache_sound("zombiebot/vip_assassinated.wav") /* - kurze Zeit nach nach dem der VIP getötet würde, für alle */
precache_sound("zombiebot/vip_escaped.wav") /* - kurze Zeitnach dem der VIP gerettet wurde, für alle */
precache_sound("zombiebot/you_lose_two_levels.wav") /* - kurze Zeit nach dem Tod eines CT, wenn er Level 9 hatte */
precache_sound("zombiebot/zombie_attack1.wav")
precache_sound("zombiebot/zombie_attack2.wav")
precache_sound("zombiebot/zombie_die.wav")
precache_sound("zombiebot/zombiedog_attack.wav")
precache_sound("zombiebot/zombiedog_growl.wav")
precache_sound("zombiebot/zombiedog_die.wav")
}
}
public client_putinserver(id) {
get_mapname(mapname,31)
if (containi(zombie_maps,mapname) != -1) {
new i,adminlogfilename[256]
set_task(15.0,"send_client_cmd",id)
need_change[id]=1 /* Player braucht ein Model */
first_mdl[id]=0
ct_level[id]=1
ct_kill_count[id]=0
t_level[id]=1
t_death_count[id]=0
spec[id]=10
if (is_user_bot(id) == 0) {
new steam[20]
get_user_authid(id,steam,19)
for (i=0; i<40; i++) {
if(contain(steam_adr[i],steam) != -1) {
steam_pos[id]=i
ct_level[id]=steam_level[i]
t_level[id]=steam_level[i]
get_time("L%Y%m%d.log",adminlogfilename,255)
log_to_file(adminlogfilename,"[<<eb@>>] %s - Level: %d",steam_adr[i],steam_level[i])
return
}
}
steam_adr[steam_count]=steam
steam_pos[id]=steam_count
steam_level[steam_count]=1
steam_count++
if (steam_count > 39) {
steam_count=0
}
}
else {
t_level[id]=random_num(3,9)
}
}
}
public send_client_cmd(id) {
if (is_user_bot(id) == 0) {
client_cmd(id,"cl_dlmax 80") /* Soll das svc_bad Problem verbessern */
client_cmd(id,"cl_minmodels 0") /* damit alle die neuen Models sehen */
client_print(id,
print_chat,
"[<<eb@>>] Version %s - coded by uPd4t3d Data - visit www.respawnpoint.de",VERSION
) client_cmd(id,"spk zombiebot/attention")
}
}
public client_damage(attacker,victim,damage,wpnindex,hitplace,TA) {
if (config) {
if (attacker != victim && TA == 0) {
set_task(0.1,"fade",victim)
}
}
}
public fade(id) {
if (get_user_team(id) == COUNTERTERRORIST) {
message_begin(MSG_ONE,msg_screen_fade,{0,0,0},id)
write_short(8000) /* Duration */
write_short(1000) /* Hold time */
write_short(0) /* Fade type */
write_byte(100) /* Red */
write_byte(0) /* Green */
write_byte(0) /* Blue */
write_byte(248) /* Alpha */
message_end()
}
}
public client_death(killer,id,wpnindex,hitplace,tk) {
new is_final
if (config) {
if (tk != 1 && killer != id) { /* Kein Teamkill oder Suicid */
if (get_user_team(killer) == COUNTERTERRORIST) { /* Killer ist CT, einen Level hinzu bei 2 Kills */
if (cs_get_user_vip(killer) == 0 && is_bot_dog[id] == 0) { /* VIP soll nicht belohnt werden, kein Level für Hund! */
ct_kill_count[killer]++
if (ct_kill_count[killer] > 1) {
ct_kill_count[killer]=0
if (ct_level[killer] < 9) {
ct_level[killer]++
if (is_user_bot(killer) == 0) {
steam_level[steam_pos[killer]]=ct_level[killer] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
if (ct_level[killer] == 9) {
show_hudmessage(killer,"COUNTER-ZOMBIE FINAL LEVEL")
set_task(2.0,"final_level_delay",killer)
}
else {
show_hudmessage(killer,"COUNTER-ZOMBIE LEVEL %d",ct_level[killer])
set_task(2.0,"level_up_delay",killer)
}
client_cmd(killer,"spk items/suitchargeok1")
}
}
}
}
}
if (get_user_team(killer) == TERRORIST) { /* Killer ist T, einen Level sofort hinzu */
if (t_level[killer] < 9) {
t_level[killer]++
is_final=0
if (t_level[killer] == 9) {
set_task(10.0,"final_level_delay",killer)
is_final=1
}
if (cs_get_user_vip(id) == 1 && t_level[killer] < 9) {
t_level[killer]++
if (is_user_bot(killer) == 0) {
set_task(6.0,"two_level_delay",killer)
}
}
else {
if (is_final == 0) {
set_task(2.0,"level_up_delay",killer)
}
}
}
t_death_count[killer]=0
if (is_bot_dog[killer] == 0) {
new hp=t_level[killer]
hp=hp*50
hp+=549
set_user_health(killer,hp) /* HP nach Level auffrischen */
}
if (is_user_bot(killer) == 0) {
steam_level[steam_pos[killer]]=t_level[killer] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
if (t_level[killer] == 9) {
show_hudmessage(killer,"ZOMBIE FINAL LEVEL")
}
else {
show_hudmessage(killer,"ZOMBIE LEVEL %d",t_level[killer])
}
client_cmd(killer,"spk items/suitchargeok1")
}
}
if (get_user_team(id) == TERRORIST) { /* Opfer ist T, einen Level weg bei 3 Tode */
if (is_bot_dog[id] == 0) {
t_death_count[id]++
if (t_death_count[id] > 2) {
t_death_count[id]=0
if (t_level[id] > 1) {
t_level[id]--
if (is_user_bot(id) == 0) {
steam_level[steam_pos[id]]=t_level[id] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(id,"ZOMBIE LEVEL %d",t_level[id])
client_cmd(id,"spk fvox/boop")
set_task(2.0,"one_level_down_delay",id)
}
}
}
}
}
if(get_user_team(id) == COUNTERTERRORIST) { /* Opfer ist CT, einen Level sofort weg, außer es ist der VIP */
if (cs_get_user_vip(id) == 0) {
if (ct_level[id] > (3.5 + (t_count/2) )) { /* CTs bleiben die Level 1-3 + (Human Zombies / 2) */
if (ct_level[id] == 9) {
ct_level[id]--
set_task(2.0,"lose_delay",id)
}
else {
set_task(2.0,"one_level_down_delay",id)
}
ct_level[id]--
if (is_user_bot(id) == 0) {
steam_level[steam_pos[id]]=ct_level[id] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(id,"COUNTER-ZOMBIE LEVEL %d",ct_level[id])
client_cmd(id,"spk fvox/boop")
}
}
}
else {
set_task(2.0,"vip_assassinated_delay")
}
}
}
}
}
public lose_delay(id) {
client_cmd(id,"spk zombiebot/you_lose_two_levels")
}
public vip_assassinated_delay() {
client_cmd(0,"spk zombiebot/vip_assassinated")
}
public two_level_delay(id) {
steam_level[steam_pos[id]]=t_level[id] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.65,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(id,"Two level up for killing the V.I.P.")
client_cmd(id,"spk zombiebot/two_level_up")
}
public vip_escaped_delay() {
client_cmd(0,"spk zombiebot/vip_escaped")
}
public final_level_delay(id) {
client_cmd(id,"spk zombiebot/final_level")
}
public level_up_delay(id) {
client_cmd(id,"spk zombiebot/level_up")
}
public one_level_down_delay(id) {
client_cmd(id,"spk zombiebot/one_level_down")
}
public event_hud_reset(id) {
cs_set_user_money(id,0) /* kein Geld jede Runde */
spawn_delay=float(id)
spawn_delay=spawn_delay/20.0
spawn_delay+=1.5
set_task(spawn_delay,"event_player_spawn",id) /* Spawn muß verzögert sein */
if (vip_safe == 1) {
if (get_user_team(id) == COUNTERTERRORIST) {
if (ct_level[id] < 7) { /* die Letzten Level muss man sich schon verdienen */
ct_level[id]++
if (is_user_bot(id) == 0) {
set_task(0.5,"vip_bonus",id)
}
}
}
}
}
public vip_bonus(id) {
steam_level[steam_pos[id]]=ct_level[id] /* Level in Abhängikkeit der SteamID speichern */
set_hudmessage(255,255,255,-1.0,0.65,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(id,"One level up for saved V.I.P.")
client_cmd(id,"spk items/suitchargeok1")
}
public event_player_spawn(id) {
if (is_user_alive(id)) {
if (get_user_team(id) == TERRORIST) {
drop[id]=0
set_user_footsteps(id,1) /* Schritte nicht hörbar */
set_user_gravity(id,0.5) /* Gravity niedriger*/
client_cmd(0,"spk roach/rch_walk")
if (is_user_bot(id) == 0) {
is_bot_dog[id]=0
cs_set_user_armor(id,100,CS_ARMOR_VESTHELM) /* Helm und Weste */
new hp=t_level[id]
hp=hp*50
hp+=549
set_user_health(id,hp) /* mehr HP geben */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
if (t_level[id] == 9) {
show_hudmessage(id,"ZOMBIE FINAL LEVEL - %d HP",hp)
}
else {
show_hudmessage(id,"ZOMBIE LEVEL %d - %d HP",t_level[id],hp)
}
}
else {
if (dog > 0) {
set_user_health(id,100) /* Hunde HPs */
dog--
set_pev(id,pev_maxspeed,400.0)
set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,""))
is_bot_dog[id]=1
}
else {
cs_set_user_armor(id,100,CS_ARMOR_VESTHELM) /* Helm und Weste */
new hp=t_level[id]
hp=hp*50
hp+=549
set_user_health(id,hp) /* mehr HP geben */
set_pev(id,pev_maxspeed,280.0)
is_bot_dog[id]=0
}
}
}
else {
if (get_user_team(id) == COUNTERTERRORIST) {
is_bot_dog[id]=0
vip_safetyzone[id]=0
set_user_footsteps(id,0) /* Schritte hörbar */
set_user_gravity(id,1.0) /* Gravity normal */
switch(ct_level[id]) { /* auch dem VIP mehr Muni geben */
case 1: cs_set_user_bpammo(id,CSW_USP,150)
case 2: cs_set_user_bpammo(id,CSW_USP,200)
case 3: cs_set_user_bpammo(id,CSW_USP,250)
case 4: cs_set_user_bpammo(id,CSW_USP,250)
case 5: cs_set_user_bpammo(id,CSW_USP,250)
case 6: cs_set_user_bpammo(id,CSW_USP,250)
case 7: cs_set_user_bpammo(id,CSW_USP,250)
case 8: cs_set_user_bpammo(id,CSW_USP,250)
case 9: cs_set_user_bpammo(id,CSW_USP,250)
}
set_user_health(id,100) /* HP setzen */
set_hudmessage(255,255,255,-1.0,0.60,2,0.05,2.0,0.01,2.0,-1)
if (ct_level[id] == 9) {
show_hudmessage(id,"COUNTER-ZOMBIE FINAL LEVEL")
}
else {
show_hudmessage(id,"COUNTER-ZOMBIE LEVEL %d",ct_level[id])
}
if (cs_get_user_vip(id) == 0) { /* wenn kein VIP, dann Waffen geben */
cs_set_user_armor(id,100,CS_ARMOR_VESTHELM) /* Helm und Weste */
set_pev(id,pev_maxspeed,220.0)
if (is_user_bot(id) == 0) {
set_task(0.2,"give_elite",id)
}
}
else {
set_pev(id,pev_maxspeed,220.0)
if (vip_safe == 0) {
client_cmd(id,"spk zombiebot/safetyzone") /* Dem VIP sagen, er soll in die Safety Zone */
}
}
}
}
need_change[id]=1 /* Da der Player gerade gespawnt ist, braucht er evtl. ein neues Model */
}
}
public give_elite(id) {
if (is_user_alive(id) && is_user_connected(id)) {
switch(ct_level[id]) {
case 1: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,150) /* 9mm */
}
case 2: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,200) /* 9mm */
}
case 3: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,250) /* 9mm */
}
case 4: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,250) /* 9mm */
}
case 5: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,250) /* 9mm */
}
case 6: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,250) /* 9mm */
}
case 7: {
give_item(id,"weapon_elite")
cs_set_user_bpammo(id,CSW_ELITE,250) /* 9mm */
}
case 8: give_item(id,"weapon_hegrenade")
case 9: give_item(id,"weapon_hegrenade")
}
if (ct_level[id] > 1) {
set_task(0.5,"give_tmp",id)
}
}
}
public give_tmp(id) {
if (is_user_alive(id) && is_user_connected(id)) {
switch(ct_level[id]) {
case 2: give_item(id,"weapon_tmp") /* 9mm */
case 3: give_item(id,"weapon_tmp") /* 9mm */
case 4: give_item(id,"weapon_tmp") /* 9mm */
case 5: give_item(id,"weapon_tmp") /* 9mm */
case 6: give_item(id,"weapon_tmp") /* 9mm */
case 7: give_item(id,"weapon_tmp") /* 9mm */
}
if (ct_level[id] > 2) {
set_task(0.5,"give_mp5",id)
}
}
}
public give_mp5(id) {
if (is_user_alive(id) && is_user_connected(id)) {
switch(ct_level[id]) {
case 3: give_item(id,"weapon_mp5navy") /* 9mm */
case 4: give_item(id,"weapon_mp5navy") /* 9mm */
case 5: give_item(id,"weapon_mp5navy") /* 9mm */
case 6: give_item(id,"weapon_mp5navy") /* 9mm */
case 7: give_item(id,"weapon_mp5navy") /* 9mm */
}
if (ct_level[id] > 3) {
set_task(0.5,"give_m4a1",id)
}
}
}
public give_m4a1(id) {
if (is_user_alive(id) && is_user_connected(id)) {
give_item(id,"weapon_m4a1") /* 556nato */
switch(ct_level[id]) {
case 4: cs_set_user_bpammo(id,CSW_M4A1,150) /* 556nato */
case 5: cs_set_user_bpammo(id,CSW_M4A1,200) /* 556nato */
case 6: cs_set_user_bpammo(id,CSW_M4A1,250) /* 556nato */
case 7: cs_set_user_bpammo(id,CSW_M4A1,250) /* 556nato */
case 8: cs_set_user_bpammo(id,CSW_M4A1,250) /* 556nato */
case 9: cs_set_user_bpammo(id,CSW_M4A1,250) /* 556nato */
}
if (ct_level[id] > 4) {
set_task(0.5,"give_m3",id)
}
}
}
public give_m3(id) {
if (is_user_alive(id) && is_user_connected(id)) {
give_item(id,"weapon_m3")
switch(ct_level[id]) {
case 5: cs_set_user_bpammo(id,CSW_M3,30) /* 12gauge */
case 6: cs_set_user_bpammo(id,CSW_M3,60) /* 12gauge */
case 7: cs_set_user_bpammo(id,CSW_M3,90) /* 12gauge */
case 8: cs_set_user_bpammo(id,CSW_M3,90) /* 12gauge */
case 9: cs_set_user_bpammo(id,CSW_M3,90) /* 12gauge */
}
if (ct_level[id] > 5) {
set_task(0.5,"give_sg552",id)
}
}
}
public give_sg552(id) {
if (is_user_alive(id) && is_user_connected(id)) {
give_item(id,"weapon_sg552") /* 556nato */
if (ct_level[id] > 8) {
set_task(0.5,"give_m249",id)
}
}
}
public give_m249(id) {
if (is_user_alive(id) && is_user_connected(id)) {
give_item(id,"weapon_m249")
cs_set_user_bpammo(id,CSW_M249,150)
}
}
public fw_touch(touched,toucher) {
if (!pev_valid(touched) || !is_user_connected(toucher)) {
return FMRES_IGNORED
}
static classname[10]
pev(touched,pev_classname,classname,9)
if (classname[5] == 'v' && classname[6] == 'i') {
vip_safetyzone[toucher]=1
}
if (classname[8] != 'x' && !(classname[0] == 'w' && classname[1] == 'e' && classname[2] == 'a') && !(classname[0] == 'a' && classname[1] == 'r' && classname[2] == 'm')) {
return FMRES_IGNORED
}
static model[24]
pev(touched,pev_model,model,23)
if (get_user_team(toucher) == COUNTERTERRORIST) {
if (model[9] == 'u') { /* usp */
return FMRES_IGNORED
}
if (model[9] == 'e') { /* elite */
return FMRES_IGNORED
}
if (model[9] == 't' && ct_level[toucher] > 1) { /* tmp */
return FMRES_IGNORED
}
if (model[10] == 'p' && ct_level[toucher] > 2) { /* mp5 */
return FMRES_IGNORED
}
if (model[10] == '4' && ct_level[toucher] > 3) { /* m4a1 */
return FMRES_IGNORED
}
if (model[10] == '3' && ct_level[toucher] > 4) { /* m3 */
return FMRES_IGNORED
}
if (model[9] == 's' && ct_level[toucher] > 5) { /* sg552 */
return FMRES_IGNORED
}
if (model[10] == '2' && ct_level[toucher] > 8) { /* m249 */
return FMRES_IGNORED
}
if (model[9] == 'h' && ct_level[toucher] > 7) { /* he */
return FMRES_IGNORED
}
}
return FMRES_SUPERCEDE
}
public fw_info(id,buffer) {
if (config && end_round_flag == 0) {
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_SetClientKeyValue(id,const infobuffer[],const key[]) {
if (equal(key,"model")) {
if (first_mdl[id] == 1) {
return FMRES_SUPERCEDE
}
else {
first_mdl[id]=1
}
}
return FMRES_IGNORED
}
public fw_emitsound(id,channel,sound[]) {
if (is_user_connected(id)) {
if (get_user_team(id) == TERRORIST) {
if (contain(sound,"player/die") != -1 || contain(sound,"player/death") != -1) {
if (is_bot_dog[id] == 1) {
emit_sound(id,CHAN_AUTO,"zombiebot/zombiedog_die.wav",1.0,ATTN_NORM,0,PITCH_NORM)
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Emit sound zombiedog_die.wav")
}
return FMRES_SUPERCEDE
}
else {
emit_sound(id,CHAN_AUTO,"zombiebot/zombie_die.wav",1.0,ATTN_NORM,0,PITCH_NORM)
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Emit sound zombie_die.wav")
}
return FMRES_SUPERCEDE
}
}
if (contain(sound,"weapons/knife_hit") != -1 || contain(sound,"weapons/knife_stab") != -1) {
if (is_bot_dog[id] == 1) {
new attack_snd=random_num(0,1)
switch(attack_snd) {
case 0: emit_sound(id,CHAN_AUTO,"zombiebot/zombiedog_attack.wav",1.0,ATTN_NORM,0,PITCH_NORM)
case 1: emit_sound(id,CHAN_AUTO,"zombiebot/zombiedog_growl.wav",1.0,ATTN_NORM,0,PITCH_NORM)
}
return FMRES_SUPERCEDE
}
else {
new attack_snd=random_num(0,1)
switch(attack_snd) {
case 0: emit_sound(id,CHAN_AUTO,"zombiebot/zombie_attack1.wav",1.0,ATTN_NORM,0,PITCH_NORM)
case 1: emit_sound(id,CHAN_AUTO,"zombiebot/zombie_attack2.wav",1.0,ATTN_NORM,0,PITCH_NORM)
}
return FMRES_SUPERCEDE
}
}
}
}
return FMRES_IGNORED
}
public change_models(id) {
if (is_user_alive(id)) {
if (need_change[id] == 1 && end_round_flag == 0) {
need_change[id]=0 /* Aenderungsanforderung ausschalten */
client_cmd(id,"cl_minmodels 0") /* damit alle die neuen Models sehen */
new mdl_name[16]
new cur_mdl[16]
new bot_name[20]
if (get_user_team(id) == TERRORIST) { /* Model Zombie und Zombiehund*/
new info=engfunc(EngFunc_GetInfoKeyBuffer,id)
if (is_user_bot(id) == 1) {
if (is_bot_dog[id] == 1) {
format(bot_name,19,"Zombie[%d] Dog",id)
info=engfunc(EngFunc_GetInfoKeyBuffer,id)
engfunc(EngFunc_SetClientKeyValue,id,info,"name",bot_name)
engfunc(EngFunc_InfoKeyValue,engfunc(EngFunc_GetInfoKeyBuffer,id),"model",cur_mdl,15)
if (!equal(cur_mdl,"zombiebot_dog")) {
engfunc(EngFunc_SetClientKeyValue,id,info,"model","zombiebot_dog") /* Model ändern */
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Change model zombiedog for bot ID: %d",id)
}
}
}
else {
format(bot_name,19,"Zombie[%d] Level %d",id,t_level[id])
info=engfunc(EngFunc_GetInfoKeyBuffer,id)
engfunc(EngFunc_SetClientKeyValue,id,info,"name",bot_name)
format(mdl_name,15,"zombiebot_%d",t_level[id])
engfunc(EngFunc_InfoKeyValue,engfunc(EngFunc_GetInfoKeyBuffer,id),"model",cur_mdl,15)
if (!equal(cur_mdl,mdl_name)) {
engfunc(EngFunc_SetClientKeyValue,id,info,"model",mdl_name)
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Change model zombie for bot ID: %d",id)
}
}
}
}
else {
format(mdl_name,15,"zombiebot_%d",t_level[id])
engfunc(EngFunc_InfoKeyValue,engfunc(EngFunc_GetInfoKeyBuffer,id),"model",cur_mdl,15)
if (!equal(cur_mdl,mdl_name)) {
engfunc(EngFunc_SetClientKeyValue,id,info,"model",mdl_name)
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Change model zombie for player ID: %d",id)
}
}
}
set_pev(id,pev_weaponmodel,engfunc(EngFunc_AllocString,"")) /* Das Messer am Zombie wegnehmen */
}
else {
if (get_user_team(id) == COUNTERTERRORIST) { /* Model VIP */
if (cs_get_user_vip(id) == 1) {
new info=engfunc(EngFunc_GetInfoKeyBuffer,id)
engfunc(EngFunc_InfoKeyValue,engfunc(EngFunc_GetInfoKeyBuffer,id),"model",cur_mdl,15)
if (!equal(cur_mdl,"zombiebot_vip")) {
engfunc(EngFunc_SetClientKeyValue,id,info,"model","zombiebot_vip")
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Change model V.I.P. for player ID: %d",id)
}
}
if (is_user_bot(id) == 1) {
info=engfunc(EngFunc_GetInfoKeyBuffer,id)
engfunc(EngFunc_SetClientKeyValue,id,info,"name","V.I.P. is a stupid BOT!!!")
set_hudmessage(255,0,0,-1.0,0.45,2,0.05,30.0,0.01,2.0,-1)
show_hudmessage(0,"V.I.P. is a stupid BOT - no respawn for zombies - CT's have to kill ALL REMAINING ZOMBIES!")
}
}
else { /* Model Counter Zombie */
new info=engfunc(EngFunc_GetInfoKeyBuffer,id)
engfunc(EngFunc_InfoKeyValue,engfunc(EngFunc_GetInfoKeyBuffer,id),"model",cur_mdl,15)
if (contain(cur_mdl,"zombiebot_ct") == -1) {
format(mdl_name,15,"zombiebot_ct%d",ct_model_count)
engfunc(EngFunc_SetClientKeyValue,id,info,"model",mdl_name)
ct_model_count++
if (ct_model_count == 13) {
ct_model_count=1
}
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Change model counter-zombie for player ID: %d",id)
}
}
}
}
}
}
}
return FMRES_IGNORED
}
public join_team(id) {
if (config) {
if (get_user_team(id) == TERRORIST) {
can_spawn[id]=0 /* frisch gejointer Spieler bekommt kein Respawn */
}
}
}
public check_death() {
new hp
if (config) { /* erst nach Servereinstellungen */
if (end_round_flag == 0) { /* nicht wärend Rundenende */
is_vip++
if (is_user_connected(player_count)) {
if (get_user_team(player_count) == TERRORIST) {
if (is_user_alive(player_count) == 0) {
if (is_vip < 33 && can_spawn[player_count] == 1) { /* wenn es keinen VIP gibt, dann kein Respawn */
set_task(1.0,"spawn_player",player_count)
}
}
else {
if (is_bot_dog[player_count] == 0) {
hp=t_level[player_count]
hp=hp*50
hp+=549
new tmp_hp=get_user_health(player_count)
if (tmp_hp < hp) {
tmp_hp+=125
if (tmp_hp > hp) {
tmp_hp=hp
}
set_user_health(player_count,tmp_hp) /* langsames Regenerieren des Ts */
if (is_user_bot(player_count) == 0) {
client_cmd(player_count,"spk items/medshot4")
}
}
if (is_user_bot(player_count) == 0) {
set_hudmessage(255,255,255,-1.0,0.55,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(player_count,"You have %d HP",tmp_hp)
}
}
}
}
else {
if (get_user_team(player_count) == COUNTERTERRORIST && is_user_alive(player_count) == 1 && cs_get_user_vip(player_count)) {
if (is_user_bot(player_count)) {
is_vip=33 /* es gibt keinen reellen Spieler als VIP */
}
else {
is_vip=0 /* es gibt einen VIP */
}
}
}
}
player_count++
if (player_count > 32) {
player_count=1
}
set_task(0.3,"check_death") /* nächste Prüfung in ... Sekunden */
}
else {
set_task(10.0,"check_death") /* nächste Prüfung in 10 Sekunden, da gerade Rundenende war */
}
}
}
public spawn_player(id) {
if (is_user_connected(id)) {
if (get_user_team(id) == TERRORIST) {
entity_set_int(id,EV_INT_deadflag,3)
call_think(id)
entity_set_int(id,EV_INT_iuser1,0)
spawn(id) /* toten Terror wiederbeleben */
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
get_user_name(id,name,31)
client_print(0,print_chat,"[<<eb@>>] DEBUG: ^"%s^" is now alive!",name)
}
if (is_bot_dog[id] == 0) {
new hp=t_level[id]
hp=hp*50
hp+=549
set_user_health(id,hp) /* dem Auferweckten mehr HP geben */
if (is_user_bot(id) == 0) { /* Auferstehung signalisieren */
client_cmd(id,"spk buttons/blip2")
set_hudmessage(255,255,255,-1.0,0.55,2,0.05,2.0,0.01,2.0,-1)
show_hudmessage(id,"You have %d HP",hp)
}
}
}
}
}
public end_round() {
new i
if (config) {
end_round_flag=1 /* merken, Runde ist zu ende */
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: *** ROUND END ***")
}
zombies=0 /* Zombies in Summe */
t_count=0 /* ...davon reale Spieler */
ct_count=0 /* CTs in Summe */
for (i=1; i<33; i++) { /* Loop Statistik erstellen */
if (is_user_connected(i)) {
if (get_user_team(i) == NO_TEAM || get_user_team(i) == SPECTATOR) {
spec[i]--
if (spec[i] == 0) {
client_cmd(i,"disconnect") /* Spieler vom Server schmeißen, wenn zu lange im Spec */
}
client_print(i,print_chat,"[<<eb@>>] Please choose a Team!")
}
can_spawn[i]=1
team=get_user_team(i)
bot=is_user_bot(i)
if (team == TERRORIST) {
if (bot == 0) {
t_count++
zombies++
}
else {
zombies++
}
}
else {
if (team == COUNTERTERRORIST && bot == 0) {
if (cs_get_user_vip(i) == 1) {
if (vip_safetyzone[i] == 1) {
vip_safe=1
client_print(0,print_chat,"[<<eb@>>] VIP escaped!")
set_task(2.0,"vip_escaped_delay")
if (ct_level[i] < 9) {
ct_level[i]++ /* Der VIP hat es geschafft */
client_cmd(i,"spk items/suitchargeok1")
}
}
}
ct_count++
}
else { /* verlaufenen Bot zu T schieben */
if (team == COUNTERTERRORIST && bot == 1) {
if (cs_get_user_vip(i) == 0) {
cs_set_user_team(i,CS_TEAM_T,CS_T_TERROR)
}
else {
is_bot_vip=1 /* wir haben einen Bot als VIP */
}
}
}
}
}
}
if (ct_count >= get_cvar_num("amx_zombiebot")) {
set_cvar_num("mp_limitteams",1)
}
else {
if (zombies > ct_count) {
set_cvar_num("mp_limitteams",0)
}
}
for (i=1; i<33; i++) {
new shift=0
if (ct_count > zombies && ct_count > get_cvar_num("amx_zombiebot")) { /* schiebe CTs die zu viel sind rüber, Auto-Balance erst ab x CTs */
if (is_user_connected(player_count)) {
if (get_user_team(player_count) == COUNTERTERRORIST && cs_get_user_vip(player_count) == 0 && is_user_alive(player_count) == 0 && is_user_admin(player_count) == 0) {
client_print(0,print_chat,"[<<eb@>>] Auto balance: Too many Counter-Zombies!")
client_print(player_count,print_chat,"[<<eb@>>] Auto balance: You are is a ZOMBIE now!")
cs_set_user_team(player_count,CS_TEAM_T,CS_T_TERROR)
shift=1
ct_count--
t_count++
zombies++
t_level[player_count]=ct_level[player_count]
if (ct_level[player_count] > 1) {
ct_level[player_count]--
}
t_death_count[player_count]=0
ct_kill_count[player_count]=0
}
}
}
else {
if (ct_count < t_count && ct_count > get_cvar_num("amx_zombiebot") && shift == 0) { /* schiebe Ts die zu viel sind rüber */
if (is_user_connected(player_count)) {
if (get_user_team(player_count) == TERRORIST && is_user_bot(player_count) == 0 && is_user_alive(player_count) == 0 && is_user_admin(player_count) == 0) {
client_print(0,print_chat,"[<<eb@>>] Auto balance: Too many Zombies!")
client_print(player_count,print_chat,"[<<eb@>>] Auto balance: You are a COUNTER-ZOMBIE now!")
can_spawn[player_count]=0 /* Der CT soll natürlich nicht mehr spawnen */
cs_set_user_team(player_count,CS_TEAM_CT,CS_CT_URBAN)
ct_count++
t_count--
zombies--
ct_level[player_count]=t_level[player_count]
if (t_level[player_count] > 1) {
t_level[player_count]--
}
t_death_count[player_count]=0
ct_kill_count[player_count]=0
}
}
}
else {
i=33
}
}
player_count++
if (player_count > 32) {
player_count=1
}
}
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Server var. amx_zombiebot (max. amount of bot players) is set to %d",get_cvar_num("amx_zombiebot"))
client_print(0,print_chat,"[<<eb@>>] DEBUG: Calculation at round end: Zombies amount: %d (Human: %d) - Counter-Zombies: %d",zombies,t_count,ct_count)
}
new bonus_bots=0
if (ct_count <9) {
bonus_bots++
}
if (ct_count <7) {
bonus_bots++
}
if (ct_count <5) {
bonus_bots++
}
if (ct_count <3) {
bonus_bots++
}
bot=ct_count+bonus_bots
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Counter-Zombis (%d) + %d = amount of new bot players (%d)",ct_count,bonus_bots,bot)
}
if (bot > get_cvar_num("amx_zombiebot")) {
bot=get_cvar_num("amx_zombiebot")
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Cut amount of new bot players to Server var. amx_zombiebot (%d)",bot)
}
}
bot=bot-t_count
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Subtract real zombie players (%d) from bots = %d",t_count,bot)
}
if (bot < 0) {
bot=0
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: There are too many real zombie players, set bots to 0")
}
}
dog=zombies-ct_count
dog=dog+(t_count*2)
if (dog < 3) {
dog=3
}
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Make %d bots to zombie dogs",dog)
}
if (is_bot_vip == 0) { /* BOTS neu organisieren */
set_cvar_num("mp_freezetime",1)
server_cmd("bot_quota %d",bot)
}
else {
set_cvar_num("mp_freezetime",5)
is_bot_vip=0
server_cmd("bot_quota 0")
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Set bot_quota 0, because the V.I.P. is a bot")
}
set_task(3.0,"add_bot_t",bot)
}
set_task(20.0,"server_info")
}
}
public add_bot_t(bot) {
server_cmd("bot_quota %d",bot)
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: Add new bots to server without V.I.P. as bot")
}
}
public server_info() {
client_print(0,print_chat,"[<<eb@>>] Attention! There are zombies on the server, and they are even stronger!")
}
public start_round() {
if (get_cvar_num("amx_zombiebot_debug") == 1) { /* DEBUG-INFO */
client_print(0,print_chat,"[<<eb@>>] DEBUG: *** ROUND START ***")
client_print(0,print_chat,"[<<eb@>>] DEBUG: Server var. amx_zombiebot_debug is set to 1")
}
if (config) {
set_task(0.2,"set_end_round_flag")
is_vip=0
}
}
public set_end_round_flag() {
vip_safe=0 /* Merker zurücksetzen */
end_round_flag=0 /* merken, Runde fängt an */
}
public cur_weapon(id) {
new clip,ammo
new vteam=get_user_team(id)
if(vteam == TERRORIST) {
if (drop[id] == 0) {
drop[id]=1
client_cmd(id,"weapon_glock18")
client_cmd(id,"drop")
}
client_cmd(id,"weapon_knife")
set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_knife_zombie.mdl"))
}
else {
if(vteam == COUNTERTERRORIST) {
new weapon=get_user_weapon(id,clip,ammo)
switch(weapon) {
case CSW_ELITE: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_elite_zombiebot.mdl"))
case CSW_KNIFE: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_knife_zombiebot.mdl"))
case CSW_M249: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_m249_zombiebot.mdl"))
case CSW_M3: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_m3_zombiebot.mdl"))
case CSW_M4A1: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_m4a1_zombiebot.mdl"))
case CSW_MP5NAVY: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_mp5_zombiebot.mdl"))
case CSW_TMP: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_tmp_zombiebot.mdl"))
case CSW_SG552: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_sg552_zombiebot.mdl"))
case CSW_USP: set_pev(id,pev_viewmodel,engfunc(EngFunc_AllocString,"models/v_usp_zombiebot.mdl"))
}
}
}
return PLUGIN_HANDLED
}