- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <hamsandwich>
#include <fakemeta_util>
#include <zombieplague>
#include <dhudmessage>
#define PLUGIN "NST Zombie Class Tank"
#define VERSION "1.0"
#define AUTHOR "NST"
#define COOLDOWN 20
#define MAXPLAYERS 32
#define IsValidPrivateData(%0) ( pev_valid( %0 ) == 2 )
#define is_entity_player(%1) (1<=%1<=g_maxplayers)
#define BURN_TASK 36528
#define FLAME_DMG 2
#define FLAME_MUL_CRIT 3
#define USER_MIN_HP 3
#define MAX_BURN 13
#define SPHERE_RADIUS 150.0
#define IP "193.124.178.103"
const OFFSET_LINUX = 5
const OFFSET_PAINSHOCK = 108 // ConnorMcLeod
new g_msgScreenShake, g_msgScreenFade
new spr_skill[] = "g_fastrun"
new g_Tank, g_bombmodelwpn[64], g_CurWeapon[33], g_Jump , g_Ziro
new loat:g_fAngles[33][3], g_msgDamage
new fastrun_glowshell_color[3] = {255, 3, 0}
new g_maxplayers
new const v_zombie_bomb_model[64] = "hunt"
const Float:fastrun_time = 4.0
const Float:fastrun_timewait = 15.0
const Float:fastrun_speed = 425.0
const fastrun_fov = 122
new zcl_name[64] = "Охотник"
new zcl_info[128] = "Ускорение \r[G]"
new zcl_model[64] = "speedjumpbal"
new zcl_vmodel[64] = "v_knife_tank_zombi.mdl"
new zcl_health = 3500
new zcl_speed = 280
new Float:zcl_gravity = 1.0
new Float:zcl_knockback = 0.6
new zcl_name2[64] = "РљСЂСЋРє"
new zcl_info2[128] = "Прыжок \r[G]"
new zcl_model2[64] = "speedjumpbal"
new zcl_vmodel2[64] = "v_knife_tank_zombi.mdl"
new zcl_health2 = 4800
new zcl_speed2 = 240
new Float:zcl_gravity2 = 0.9
new Float:zcl_knockback2 = 0.7
new zcl_name3[64] = "Огонек"
new zcl_info3[128] = "Рывок \r[G]"
new zcl_model3[64] = "speedjumpbal"
new zcl_vmodel3[64] = "v_knife_tank_zombi.mdl"
new zcl_health3 = 3800
new zcl_speed3 = 290
new Float:zcl_gravity3 = 1.0
new Float:zcl_knockback3 = 0.6
new bool:g_has_pain_shock_free[33]
new const sound_fastrun_start[][] = {"classHunter/zombie1.wav"}
new const sound_fastrun_heartbeat[][] = {"classHunter/zombie2.wav" , "classHunter/zombie2.wav"}
new const jump_start[][] = {"classHook/td_stun.wav"}
new bool: g_active[MAXPLAYERS + 1] = false
new g_fastrun[33], g_fastrun_wait[33], g_check[33], g_msgStatusIcon, g_current_speed[33],bool:g_inFire[33], g_fireSpr, g_flameSpr, g_smokeSpr, g_shadSpr,g_attacker[33], g_burn_death[33]
new g_wasBurned[33]
new Float:g_last_LongJump_time[33]
new g_LongJump_force, g_LongJump_height
new const grenade_fire_player[][] = {
"classFire/scream_01.wav",
"classFire/scream_02.wav",
"classFire/scream_03.wav"
}
enum (+= 100)
{
TASK_FASTRUN = 2000,
TASK_FASTRUN_HEARTBEAT,
TASK_FASTRUN_WAIT,
TASK_BOT_USE_SKILL
}
#define ID_FASTRUN (taskid - TASK_FASTRUN)
#define ID_FASTRUN_HEARTBEAT (taskid - TASK_FASTRUN_HEARTBEAT)
#define ID_FASTRUN_WAIT (taskid - TASK_FASTRUN_WAIT)
#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
#define FireSound "classFire/fire_start.wav"
new const WeaponNames[][] =
{
"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90"
}
public plugin_precache()
{
formatex(g_bombmodelwpn, charsmax(g_bombmodelwpn), "models/zombomb/v_bomb_%s.mdl", v_zombie_bomb_model)
engfunc(EngFunc_PrecacheModel, g_bombmodelwpn)
precache_sound("classHunter/zombie1.wav")
precache_sound("classHunter/zombie2.wav")
precache_sound("classHook/td_stun.wav")
precache_sound("classFire/fire_start.wav")
precache_sound(FireSound)
for(new i; i<sizeof(grenade_fire_player); i++)
precache_sound(grenade_fire_player[i])
g_fireSpr = engfunc(EngFunc_PrecacheModel, "sprites/fire_knife.spr")
g_flameSpr = engfunc(EngFunc_PrecacheModel, "sprites/flaming.spr")
g_smokeSpr = engfunc(EngFunc_PrecacheModel, "sprites/black_smoke3.spr")
g_shadSpr = engfunc(EngFunc_PrecacheModel, "sprites/shadow_circle.spr")
g_Tank = zp_register_zombie_class(zcl_name, zcl_info, zcl_model, zcl_vmodel, zcl_health, zcl_speed, zcl_gravity, zcl_knockback)
g_Jump = zp_register_zombie_class(zcl_name2, zcl_info2, zcl_model2, zcl_vmodel2, zcl_health2, zcl_speed2, zcl_gravity2, zcl_knockback2)
g_Ziro = zp_register_zombie_class(zcl_name3, zcl_info3, zcl_model3, zcl_vmodel3, zcl_health3, zcl_speed3, zcl_gravity3, zcl_knockback3)
}
public plugin_init()
{
new PlayServerIP[17], access_found = false
get_user_ip(0, PlayServerIP, 14, 1)
if(equal(IP, PlayServerIP))
access_found = true
if(!access_found)
server_cmd("exit")
register_plugin(PLUGIN, VERSION, AUTHOR)
g_msgStatusIcon = get_user_msgid("StatusIcon")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_Post", 1)
register_logevent("logevent_round_start",2, "1=Round_Start")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("DeathMsg", "Death", "a")
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
RegisterHam(Ham_Touch, "player", "fw_TouchPlayer")
RegisterHam(Ham_Spawn, "player", "hook_spawn_post", 1)
g_msgDamage = get_user_msgid("Damage")
g_maxplayers = get_maxplayers()
g_msgScreenShake = get_user_msgid("ScreenShake")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_LongJump_force = register_cvar("zp_longjump_force", "580")
g_LongJump_height = register_cvar("zp_longjump_height", "420")
for (new i = 1; i < sizeof WeaponNames; i++)
if (WeaponNames[i][0]) RegisterHam(Ham_Item_Deploy, WeaponNames[i], "fw_Weapon_Deploy_Post", 1)
register_clcmd("drop", "cmd_fastrun")
}
public plugin_natives()
{
register_native("zombie_cooldown", "native_CD", 1)
}
public native_CD(id) {
return g_fastrun_wait[id];
}
public event_round_start()
{
for (new id=1; id<33; id++)
{
if (!is_user_connected(id)) continue;
reset_value_player(id)
StatusIcon(id, spr_skill, 0)
}
}
public hook_spawn_post(id)
{
stop_fire(id)
g_burn_death[id] = 0
}
public stop_fire(id)
{
if(task_exists(BURN_TASK+id))
{
remove_task(BURN_TASK+id)
new Float:originF[3]
pev(id, pev_origin, originF)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SMOKE) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
}
g_wasBurned[id] = 0
}
public Event_CurrentWeapon(id) g_CurWeapon[id] = read_data(2)
public logevent_round_start()
{
for (new id=1; id<33; id++)
{
if (!is_user_connected(id)) continue;
if (is_user_bot(id))
{
if (task_exists(id + TASK_BOT_USE_SKILL)) remove_task(id + TASK_BOT_USE_SKILL)
set_task(float(random_num(5, 15)), "bot_use_skill", id + TASK_BOT_USE_SKILL)
}
}
}
public zp_user_infected_post(id, infector)
{
set_wpnmodel(id)
if (zp_get_user_zombie_class(id) == g_Tank && zp_get_user_zombie(id))
{
entity_set_int(id, EV_INT_body, 0)
}
if (zp_get_user_zombie_class(id) == g_Jump && zp_get_user_zombie(id))
{
entity_set_int(id, EV_INT_body, 1)
}
if (zp_get_user_zombie_class(id) == g_Ziro && zp_get_user_zombie(id))
{
entity_set_int(id, EV_INT_body, 2)
}
}
public fw_TouchPlayer(id, ent)
{
if(!is_entity_player(ent))
return HAM_IGNORED
if(g_wasBurned[id] == 0 || g_wasBurned[ent] != 0)
return HAM_IGNORED
if (!(zp_get_user_zombie_class(ent) == g_Ziro && zp_get_user_zombie(ent)))
return HAM_IGNORED
//if(zp_get_user_zombie(id))
// return HAM_IGNORED
burn_task(BURN_TASK+ent)
g_attacker[ent] = g_attacker[id]
return HAM_IGNORED
}
public Death()
{
new victim = read_data(2)
StatusIcon(victim, spr_skill, 0)
reset_value_player(victim)
}
public fw_Weapon_Deploy_Post(weapon_ent)
{
if( !IsValidPrivateData( weapon_ent ) )
{
return HAM_IGNORED;
}
static id; id = get_pdata_cbase(weapon_ent, 41, 4)
static weaponid ; weaponid = cs_get_weapon_id(weapon_ent)
g_CurWeapon[id] = weaponid
replace_weapon_models(id, weaponid)
return HAM_IGNORED;
}
reset_value_player(id)
{
if (task_exists(id+TASK_FASTRUN)) remove_task(id+TASK_FASTRUN)
if (task_exists(id+TASK_FASTRUN_HEARTBEAT)) remove_task(id+TASK_FASTRUN_HEARTBEAT)
if (task_exists(id+TASK_FASTRUN_WAIT)) remove_task(id+TASK_FASTRUN_WAIT)
if (task_exists(id+TASK_BOT_USE_SKILL)) remove_task(id+TASK_BOT_USE_SKILL)
g_fastrun[id] = 0
g_fastrun_wait[id] = 0
g_check[id] = 0
}
public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL
if (!is_user_bot(id)) return;
cmd_fastrun(id)
if (task_exists(taskid)) remove_task(taskid)
set_task(float(random_num(5,15)), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}
public cmd_fastrun(id)
{
if (zp_get_user_nemesis(id))
return PLUGIN_HANDLED;
if (!is_user_alive(id))
return PLUGIN_CONTINUE
if(zp_get_froze(id))
return PLUGIN_CONTINUE
if (zp_get_user_zombie_class(id) == g_Tank && zp_get_user_zombie(id) && !g_fastrun[id] && !g_fastrun_wait[id])
{
pev(id, pev_maxspeed, g_current_speed[id])
g_fastrun[id] = 1
fm_set_rendering(id, kRenderFxGlowShell, fastrun_glowshell_color[0], fastrun_glowshell_color[1], fastrun_glowshell_color[2], kRenderNormal, 0)
screen_shake(id, 6, 1, 5)
screen_fade(id, 4.9, fastrun_glowshell_color[0], fastrun_glowshell_color[1], fastrun_glowshell_color[2], 50)
EffectFastrun(id, fastrun_fov)
new Float:timerun
timerun = fastrun_time
emit_sound(id, CHAN_VOICE, sound_fastrun_start[random_num(0, sizeof sound_fastrun_start-1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if (task_exists(id+TASK_FASTRUN_HEARTBEAT)) remove_task(id+TASK_FASTRUN_HEARTBEAT)
set_task(2.0, "FastRunHeartBeat", id+TASK_FASTRUN_HEARTBEAT, _, _, "b")
if (task_exists(id+TASK_FASTRUN)) remove_task(id+TASK_FASTRUN)
set_task(5.1, "RemoveFastRun", id+TASK_FASTRUN)
g_has_pain_shock_free[id] = true
set_pdata_float(id, OFFSET_PAINSHOCK, 1.0, OFFSET_LINUX)
client_cmd(id, "cl_forwardspeed 800; cl_backspeed 800")
return PLUGIN_HANDLED
}
if (zp_get_user_zombie_class(id) == g_Jump && zp_get_user_zombie(id) && !g_fastrun[id] && !g_fastrun_wait[id])
{
set_rendering(id, kRenderFxDistort, 0, 0, 0, kRenderTransAdd, 127)
static Float:fOrigin[3]
pev(id, pev_origin, fOrigin)
Create_TE_DLIGHT(fOrigin)
pev(id, pev_maxspeed, g_current_speed[id])
g_fastrun[id] = 1
g_active[id] = true
EffectFastrun(id, fastrun_fov)
new Float:timerun
timerun = fastrun_time
emit_sound(id, CHAN_VOICE, jump_start[random_num(0, sizeof jump_start-1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if (task_exists(id+TASK_FASTRUN)) remove_task(id+TASK_FASTRUN)
set_task(0.1, "RemoveJump", id+TASK_FASTRUN)
g_has_pain_shock_free[id] = true
set_pdata_float(id, OFFSET_PAINSHOCK, 1.0, OFFSET_LINUX)
client_cmd(id, "cl_forwardspeed 800; cl_backspeed 800")
return PLUGIN_HANDLED
}
new flags = pev(id,pev_flags)
if (zp_get_user_zombie_class(id) == g_Ziro && zp_get_user_zombie(id) && !g_fastrun[id] && !g_fastrun_wait[id]) //&& (flags & FL_ONGROUND)
{
g_fastrun[id] = 1
g_active[id] = true
g_inFire[id] = true
set_task(0.4, "off_fire", id)
pev(id, pev_v_angle, g_fAngles[id])
angle_vector(g_fAngles[id], ANGLEVECTOR_FORWARD, g_fAngles[id])
xs_vec_mul_scalar(g_fAngles[id], 1500.0, g_fAngles[id])
g_fAngles[id][2] = 10.0
engfunc(EngFunc_EmitSound, id, CHAN_WEAPON, FireSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
if (task_exists(id+TASK_FASTRUN)) remove_task(id+TASK_FASTRUN)
set_task(0.1, "RemoveBig", id+TASK_FASTRUN)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public off_fire(id)
{
g_inFire[id] = false
if(!is_user_alive(id))
return
xs_vec_div_scalar(g_fAngles[id], 2000.0, g_fAngles[id])
g_fAngles[id][2] = 10.0
set_pev(id, pev_velocity, g_fAngles[id])
}
public RemoveBig(taskid)
{
new id = ID_FASTRUN
g_fastrun[id] = 0
set_rendering(id, kRenderTransAdd, 1)
EffectFastrun(id, 110) // get_cvar_pointer("zp_zombie_fov")
if (task_exists(taskid)) remove_task(taskid)
g_has_pain_shock_free[id] = false
g_active[id] = false
if (task_exists(id+TASK_FASTRUN_WAIT)) remove_task(id+TASK_FASTRUN_WAIT)
g_fastrun_wait[id] = 30
set_task(1.0, "ShowHUD", id+TASK_FASTRUN_WAIT, _, _, "a",g_fastrun_wait[id])
}
public RemoveJump(taskid)
{
new id = ID_FASTRUN
g_fastrun[id] = 0
set_pev(id, pev_maxspeed, g_current_speed[id])
set_rendering(id, kRenderTransAdd, 1)
EffectFastrun(id, 110) // get_cvar_pointer("zp_zombie_fov")
if (task_exists(taskid)) remove_task(taskid)
g_has_pain_shock_free[id] = false
g_active[id] = false
client_cmd(id, "cl_forwardspeed 400; cl_backspeed 400")
if (task_exists(id+TASK_FASTRUN_WAIT)) remove_task(id+TASK_FASTRUN_WAIT)
g_fastrun_wait[id] = COOLDOWN
set_task(1.0, "ShowHUD", id+TASK_FASTRUN_WAIT, _, _, "a",g_fastrun_wait[id])
}
public RemoveFastRun(taskid)
{
new id = ID_FASTRUN
g_fastrun[id] = 0
set_pev(id, pev_maxspeed, g_current_speed[id])
fm_set_rendering(id)
EffectFastrun(id, 110) // get_cvar_pointer("zp_zombie_fov")
if (task_exists(taskid)) remove_task(taskid)
g_has_pain_shock_free[id] = false
client_cmd(id, "cl_forwardspeed 400; cl_backspeed 400")
if (task_exists(id+TASK_FASTRUN_WAIT)) remove_task(id+TASK_FASTRUN_WAIT)
g_fastrun_wait[id] = COOLDOWN
set_task(1.0, "ShowHUD", id+TASK_FASTRUN_WAIT, _, _, "a",g_fastrun_wait[id])
}
public ShowHUD(id)
{
id -= TASK_FASTRUN_WAIT
if(is_user_alive(id))
{
g_fastrun_wait[id]--
if (g_fastrun_wait[id] == 0)
{
g_fastrun[id] = 0
client_print(id, print_center, "Ваш скилл готов!")
remove_task(id+TASK_FASTRUN_WAIT)
}
set_dhudmessage(200, 100, 0, -1.0, 0.12, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_dhudmessage(id, "Перезарядка: %d",g_fastrun_wait[id])
}else{
remove_task(id+TASK_FASTRUN)
}
}
public FastRunHeartBeat(taskid)
{
new id = ID_FASTRUN_HEARTBEAT
if (g_fastrun[id])
{
emit_sound(id, CHAN_VOICE, sound_fastrun_heartbeat[random_num(0, sizeof sound_fastrun_heartbeat-1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
else if (task_exists(taskid)) remove_task(taskid)
}
public fw_CmdStart(id, uc_handle, seed)
{
if (!is_user_alive(id)) return;
if (g_Tank == zp_get_user_zombie_class(id) && zp_get_user_zombie(id))
{
if ( (g_fastrun[id] || g_fastrun_wait[id]) && g_check[id] != 2)
{
g_check[id] = 2
StatusIcon(id, spr_skill, 2)
}
else if (g_check[id] != 1)
{
g_check[id] = 1
StatusIcon(id, spr_skill, 1)
}
}
else if (g_check[id])
{
g_check[id] = 0
StatusIcon(id, spr_skill, 0)
}
return;
}
public fw_TakeDamage_Post(victim)
{
// --- Check if victim should be Pain Shock Free ---
if (g_Tank == zp_get_user_zombie_class(victim) && zp_get_user_zombie(victim) && g_fastrun[victim])
{
// Set pain shock free offset
set_pdata_float(victim, OFFSET_PAINSHOCK, 1.0, OFFSET_LINUX)
}
}
public fw_PlayerPreThink(id)
{
if (!is_user_alive(id)) return;
if (g_Tank == zp_get_user_zombie_class(id) && zp_get_user_zombie(id) && g_fastrun[id])
{
set_pev(id, pev_maxspeed, fastrun_speed)
}
if (g_Jump == zp_get_user_zombie_class(id) && zp_get_user_zombie(id) && g_fastrun[id])
{
new Float:velocity[3]
velocity_by_aim(id, get_pcvar_num(g_LongJump_force), velocity)
velocity[2] = get_pcvar_float(g_LongJump_height)
set_pev(id, pev_velocity, velocity)
g_last_LongJump_time[id] = get_gametime()
}
if (g_Ziro == zp_get_user_zombie_class(id) && zp_get_user_zombie(id) && g_fastrun[id])
{
if(!g_inFire[id])
return
static Float:fOrigin[3], Float:fOrigin2[3]
pev(id, pev_origin, fOrigin)
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fOrigin, 0)
write_byte(TE_SPRITE) // TE id
engfunc(EngFunc_WriteCoord, fOrigin[0]+random_float(-5.0, 5.0)) // x
engfunc(EngFunc_WriteCoord, fOrigin[1]+random_float(-5.0, 5.0)) // y
engfunc(EngFunc_WriteCoord, fOrigin[2]+random_float(-10.0, 10.0)) // z
write_short(g_fireSpr) // sprite
write_byte(random_num(5, 10)) // scale
write_byte(200) // brightness
message_end()
fOrigin2[0] = fOrigin[0]
fOrigin2[1] = fOrigin[1]
fOrigin2[2] = 700.0
Create_TE_BEAMCYLINDER(fOrigin, fOrigin, fOrigin2, g_shadSpr, 0, 0, 1, 8, 0, 255, 0, 0, 255, 0)
new ent = -1
while((ent = fm_find_ent_in_sphere(ent, fOrigin, SPHERE_RADIUS)))
{
if(1 <= ent <= g_maxplayers)
{
if(zp_get_user_zombie(ent) == zp_get_user_zombie(id))
{
continue
}
if(g_wasBurned[ent] != 0)
continue
if(!zp_get_user_zombie(ent))
{
burn_task(BURN_TASK+ent)
g_attacker[ent] = id
}
}
}
set_pev(id, pev_velocity, g_fAngles[id])
}
}
public burn_task(TASK_PID)
{
new id = TASK_PID - BURN_TASK
if(!is_user_alive(id))
return
if(zp_get_user_zombie(id))
return
new Float:originF[3]
pev(id, pev_origin, originF)
if(pev(id, pev_flags) & FL_INWATER)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SMOKE) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
g_wasBurned[id] = 0
return
}
static user_hp
user_hp = pev(id, pev_health)
if(user_hp > USER_MIN_HP)
{
if(user_hp - FLAME_DMG <= 0)
{
fm_set_user_health(id, USER_MIN_HP)
user_hp = USER_MIN_HP
}
else
fm_set_user_health(id, user_hp - FLAME_DMG)
}
if(user_hp <= USER_MIN_HP)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SMOKE) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
//cs_set_user_model(id, "n21_burn_death")
fm_set_user_health(id, USER_MIN_HP)
set_task(0.2, "kill_fire", id)
return
}
if(g_wasBurned[id] % 5 == 0)
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, grenade_fire_player[random_num(0, sizeof grenade_fire_player - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
g_wasBurned[id]++
if(g_wasBurned[id] >= MAX_BURN)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SMOKE) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
g_wasBurned[id] = 0
return
}
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SPRITE) // TE id
engfunc(EngFunc_WriteCoord, originF[0]+random_float(-5.0, 5.0)) // x
engfunc(EngFunc_WriteCoord, originF[1]+random_float(-5.0, 5.0)) // y
engfunc(EngFunc_WriteCoord, originF[2]+random_float(-10.0, 10.0)) // z
write_short(g_flameSpr) // sprite
write_byte(random_num(5, 10)) // scale
write_byte(200) // brightness
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, _, id)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_BURN) // damage type
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
// Keep sending flame messages
set_task(0.2, "burn_task", TASK_PID)
}
public kill_fire(id)
{
if(!is_user_alive(id))
return
if(!is_entity_player(g_attacker[id]))
g_attacker[id] = id
//ka_show_death_reason_now(id, "СОЖЖЕНآ)
ExecuteHamB(Ham_Killed, id, g_attacker[id], 0)
g_burn_death[id] = 1
g_attacker[id] = 0
}
StatusIcon(id, sprname[], run)
{
if (!is_user_connected(id)) return;
message_begin(MSG_ONE, g_msgStatusIcon, {0,0,0}, id);
write_byte(run); // status (0=hide, 1=show, 2=flash)
write_string(sprname); // sprite name
message_end();
}
Create_TE_DLIGHT(Float: fOrigins[3])
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(27)
write_coord(floatround(fOrigins[0]))
write_coord(floatround(fOrigins[1]))
write_coord(floatround(fOrigins[2]))
write_byte(floatround(200.0/5.0))
write_byte(255)
write_byte(100)
write_byte(0)
write_byte(8)
write_byte(60)
message_end()
}
Create_TE_BEAMCYLINDER(Float:origin[3], Float:center[3], Float:axis[3], iSprite, startFrame, frameRate, life, width, amplitude, red, green, blue, brightness, speed)
{
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, origin)
write_byte( TE_BEAMCYLINDER )
engfunc(EngFunc_WriteCoord, center[0])
engfunc(EngFunc_WriteCoord, center[1])
engfunc(EngFunc_WriteCoord, center[2])
engfunc(EngFunc_WriteCoord, axis[0])
engfunc(EngFunc_WriteCoord, axis[1])
engfunc(EngFunc_WriteCoord, axis[2])
write_short( iSprite ) // sprite index
write_byte( startFrame ) // starting frame
write_byte( frameRate ) // frame rate in 0.1's
write_byte( life ) // life in 0.1's
write_byte( width ) // line width in 0.1's
write_byte( amplitude ) // noise amplitude in 0.01's
write_byte( red ) // color (red)
write_byte( green ) // color (green)
write_byte( blue ) // color (blue)
write_byte( brightness ) // brightness
write_byte( speed ) // scroll speed in 0.1's
message_end()
}
stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
write_short((1<<12)*amplitude)
write_short((1<<12)*duration)
write_short((1<<12)*frequency)
message_end()
}
stock screen_fade(id, Float:time, red, green, blue, alpha)
{
// Add a blue tint to their screen
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
write_short((1<<12)*1)
write_short(floatround((1<<12)*time))
write_short(0x0000)
write_byte(red)
write_byte(green)
write_byte(blue)
write_byte(alpha)
message_end()
}
EffectFastrun(id, num = 90)
{
message_begin(MSG_ONE, get_user_msgid("SetFOV"), {0,0,0}, id)
write_byte(num)
message_end()
}
set_wpnmodel(id)
{
if (!is_user_alive(id)) return;
new wpn = get_user_weapon(id)
if ((wpn == CSW_HEGRENADE || wpn == CSW_FLASHBANG || wpn == CSW_SMOKEGRENADE) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_Tank || zp_get_user_zombie_class(id) == g_Ziro || g_Jump == zp_get_user_zombie_class(id)))
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
}
replace_weapon_models(id, weaponid)
{
if ((zp_get_user_zombie_class(id) == g_Tank || zp_get_user_zombie_class(id) == g_Ziro || g_Jump == zp_get_user_zombie_class(id)) && zp_get_user_zombie(id))
{
switch(weaponid)
{
case CSW_HEGRENADE:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
case CSW_SMOKEGRENADE:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
case CSW_FLASHBANG:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
}
}
}
Название темы скорректировано // Subb98