Не съм го тествал. На теория трябва да работи.
Радиоактивно зомби - през 2 секунди сваля кръвта на хората намиращи се в близост до него и зарежда своята. Кръвта на хората не може да падне под
.
Може да зареди двойно кръвта си. Ако базово е зададено с
, не повече. Опция да заразява моментално при докосване или да убива последния жив човек.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
new g_zclassid1, bool:off, g_msgDeathMsg, cvar_ammoinfect, g_msgScreenFade
new const zclass_name[] = { "Radio Active Zombie" } // name
new const zclass_info[] = { "Drains health and heals" } // description
new const zclass_model[] = { "zombie_mdl" } // model
new const zclass_clawmodel[] = { "v_zombie.mdl" } // claw model
const zclass_health = 3800 // health
const zclass_speed = 260 // speed
const Float:zclass_gravity = 0.9 // gravity
const Float:zclass_knockback = 0.6 // knockback
#define RADIATION_WARNING "!!!! WARNING !!!!^nRadiation Detected^n!!!! WARNING !!!!"
new cvar_zp_inf_kill, cvar_zp_radius, cvar_zp_damage, cvar_zp_heal
public plugin_init()
{
register_forward(FM_Touch, "fwd_touch")
cvar_ammoinfect = get_cvar_pointer("zp_zombie_infect_reward")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScreenFade = get_user_msgid("ScreenFade")
cvar_zp_inf_kill = register_cvar("zp_touch_infect_kill", "1") // 1 = instantly infect or kill(last human) with touch | 0 = normal
cvar_zp_damage = register_cvar("zp_aura_damage", "5") // Aura damage
cvar_zp_radius = register_cvar("zp_aura_radius", "250.0") // Aura radius
cvar_zp_heal = register_cvar("zp_aura_healing", "25") // Aura healing
register_event("Damage","event_pain_zombie","be","2!0","3=0")
}
public plugin_precache()
{
register_plugin("[ZP] ZM Class: Radioactive", "1.2", "jr_acn [Junin] & YankoNL")
g_zclassid1 = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public plugin_natives()
{
register_native("zp_is_zombie_class_rage", "native_is_zombie_class_rage", 1)
}
public native_is_zombie_class_rage(id)
{
return zp_get_user_zombie_class(id) == g_zclassid1;
}
public zp_user_infected_post(id, infector)
{
if(zp_get_user_zombie_class(id) != g_zclassid1 || zp_get_user_nemesis(id))
return;
fm_set_rendering(id, kRenderFxGlowShell, 100, 255, 0, kRenderNormal, 5);
radius_damage(id)
set_task(5.0, "zm_idle", id)
}
public zm_idle(id)
{
if (!is_user_connected(id) || !zp_get_user_zombie(id)
|| zp_get_user_zombie_class(id) != g_zclassid1
|| zp_get_user_nemesis(id) || !is_user_alive(id))
return;
set_task(5.0, "zm_idle", id)
}
public event_pain_zombie(id)
{
if (!is_user_connected(id) || !zp_get_user_zombie(id)
|| zp_get_user_zombie_class(id) != g_zclassid1
|| zp_get_user_nemesis(id) || !is_user_alive(id))
return;
}
public zp_user_unfrozen(id)
{
if(!is_user_alive(id) || !zp_get_user_zombie(id)
|| zp_get_user_nemesis(id) || zp_get_user_zombie_class(id) != g_zclassid1)
return;
fm_set_rendering(id, kRenderFxGlowShell, 100, 255, 0, kRenderNormal, 5);
}
public zp_user_stop_madness(id)
{
if(zp_get_user_zombie_class(id) != g_zclassid1)
return;
fm_set_rendering(id, kRenderFxGlowShell, 100, 255, 0, kRenderNormal, 5);
}
public aura(id)
{
if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)
|| zp_get_user_zombie_class(id) != g_zclassid1)
return;
{
// Retrieve player origin
static iOrigin[3]
get_user_origin(id, iOrigin)
// Colored Aura
message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin)
write_byte(TE_DLIGHT) // TE id
write_coord(iOrigin[0]) // x
write_coord(iOrigin[1]) // y
write_coord(iOrigin[2]) // z
write_byte(10) // radius
write_byte(100) // r
write_byte(255) // g
write_byte(0) // b
write_byte(2) // life
write_byte(0) // decay rate
message_end()
}
set_task(0.1, "aura", id)
}
public fwd_touch(victim, attacker)
{
if (get_pcvar_num(cvar_zp_inf_kill) == 1)
{
if(!is_user_alive(victim) || !is_user_alive(attacker) || !zp_get_user_zombie(attacker) || zp_get_user_zombie(victim)
|| zp_get_user_nemesis(attacker) || zp_get_user_nemesis(victim) || zp_get_user_survivor(victim)
|| zp_get_user_zombie_class(attacker) != g_zclassid1 || !is_user_connected(attacker) || off )
return;
set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0); // set last param to 2 if you want victim to gib
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
make_deathmsg(attacker, victim, 1, "none");
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_ammoinfect))
}
}
public radius_damage(id)
{
if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)
|| zp_get_user_zombie_class(id) != g_zclassid1)
return;
static Float:iOrigin[3], player
pev(id, pev_origin, iOrigin)
player = -1
while((player = engfunc(EngFunc_FindEntityInSphere, player, iOrigin, get_pcvar_float(cvar_zp_radius))) != 0)
{
if(player != id && is_user_alive(player) && !zp_get_user_zombie(player))
{
set_hudmessage(0, 200, 0, -1.00, 0.30, 1, 0.0, 2.0)
show_hudmessage(player, RADIATION_WARNING)
message_begin (MSG_ONE_UNRELIABLE, g_msgScreenFade, {0,0,0}, player)
write_short(1 * 2024)
write_short(1 * 1524)
write_short(0x0001)
write_byte(0)
write_byte(200)
write_byte(0)
write_byte(150)
message_end()
if(get_user_health(player) > 5) fm_set_user_health(player, get_user_health(player) - get_pcvar_num(cvar_zp_damage))
if(get_user_health(id) < zclass_health * 2) fm_set_user_health(id, get_user_health(id) + get_pcvar_num(cvar_zp_heal))
}
}
set_task(2.0, "radius_damage", id)
}
public zp_round_started() off = false
public zp_round_ended() off = true