PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplaguenightmare>
//#define MAXPLAYERS 32 // Max Players on CS 1.6 is 32 ... yea.
//
#define DISTANCE_FROM_PLAYER 10 // Edit this if you want.
new CVAR_FORCE, CVAR_DAMAGE, CVAR_RADIUS, CVAR_APNOPUSH;
new gSpriteGas, g_itemfear, g_maxplayers; //MsgBarTime,
new const gSoundScream[] = "garg/gar_attack1.wav";
//new const gSoundScared[] = "hgrunt/move!.wav";
public plugin_init()
{
// Register the Plugin
register_plugin("[ZPNM] Nemesis Scream", "1.1", "D i 5 7 i n c T, suNx")
CVAR_FORCE = register_cvar("zpnm_scream_force", "1757");
CVAR_DAMAGE = register_cvar("zpnm_scream_damage", "35");
CVAR_RADIUS = register_cvar("zpnm_scream_radius", "375");
CVAR_APNOPUSH = register_cvar("zpnm_scream_armor_no_push", "1")
g_maxplayers = get_maxplayers()
g_itemfear = zp_register_extra_item("Scream", 11, ZP_TEAM_NEMESIS) // ZP_TEAM_NEMESIS -> yea its for nemesis.
//
// MsgBarTime = get_user_msgid("BarTime");
}
public plugin_precache()
{
precache_sound(gSoundScream);
// precache_sound(gSoundScared);
gSpriteGas = precache_model("sprites/shockwave.spr");
}
// Item Selected forward
public zp_extra_item_selected(player, itemid)
{
// Check if the selected item matches any of our registered ones
if (itemid != g_itemfear)
return;
// {
// emit_sound(player, CHAN_ITEM, gSoundScared, 1.0, ATTN_NORM, 0, PITCH_NORM);
// set_task(1.0,"scare",player)
// show_progress(player, 1)
// }
scare(player)
}
// The main Scream Code. DO THE SCREAM !!!!!
// -----------------------------------------
public scare(id)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id)) return;
if (id < 1 || id > g_maxplayers) return;
new szName[ 32 ]
get_user_name( id, szName, 31 )
set_hudmessage( 255, 0, 0, 0.05, 0.45, 1, 0.0, 5.7, 1.0, 1.0, -1 )
show_hudmessage( 0, "Nemesis %s screams!!!", szName)
emit_sound(id, CHAN_ITEM, gSoundScream, 1.0, ATTN_NORM, 0, PITCH_NORM);
new distance;
new Float:f_origin[3], Float:f_origin2[3], Float:f_velocity[3];
new i_origin[3];
get_user_origin(id, i_origin, 1);
IVecFVec(i_origin, f_origin);
new Float:v_angles[3];
pev(id, pev_angles, v_angles);
f_origin[0] += floatcos(v_angles[1], degrees) * DISTANCE_FROM_PLAYER;
f_origin[1] += floatsin(v_angles[1], degrees) * DISTANCE_FROM_PLAYER;
f_origin[2] += floatsin(-v_angles[0], degrees) * DISTANCE_FROM_PLAYER;
velocity_by_aim(id, get_pcvar_num(CVAR_FORCE), f_velocity);
for (new player = 1; 0 < player <= g_maxplayers; player++)
{
if (!is_user_alive(player) || id == player || zp_get_user_zombie(player)) continue;
pev(player, pev_origin, f_origin2);
distance = floatround(get_distance_f(f_origin, f_origin2));
if (distance <= get_pcvar_num(CVAR_RADIUS))
{
// Victim has armour
if (get_pcvar_num(CVAR_DAMAGE) && pev(player, pev_armorvalue) > 0)
{
// Armour amount is more or equal to the wave damage
if (pev(player, pev_armorvalue) >= get_pcvar_num(CVAR_DAMAGE))
{
// Do damage to the armour
set_pev(player, pev_armorvalue, float(pev(player, pev_armorvalue) - get_pcvar_num(CVAR_DAMAGE)));
}
// Armour amount is less than the wave damage
else if (pev(player, pev_armorvalue) < get_pcvar_num(CVAR_DAMAGE))
{
// Victim's armour will be out
set_pev(player, pev_armorvalue, 0)
// The rest of the damage will affect the victim's health
new difference = get_pcvar_num(CVAR_DAMAGE) - pev(player, pev_armorvalue)
set_pev(player, pev_health, float(pev(player, pev_health)) - difference)
}
// Push the players back even if they have armour
if (!get_pcvar_num(CVAR_APNOPUSH))
{
set_pev(player, pev_velocity, f_velocity);
// set_pev(player, pev_maxspeed, 1.0)
}
}
// Victim doesn't have any armour
else if (get_pcvar_num(CVAR_DAMAGE) && pev(player, pev_armorvalue) <= 0)
{
// Victim will survive the wave
if (pev(player, pev_health) > get_pcvar_num(CVAR_DAMAGE))
set_pev(player, pev_health, float(pev(player, pev_health)) - get_pcvar_float(CVAR_DAMAGE));
// Kill the victims which have health lower or equal with the wave damage
else if (pev(player, pev_health) <= get_pcvar_num(CVAR_DAMAGE))
{
user_silentkill(player)
set_user_frags(id, get_user_frags(id)+1)
make_deathmsg(id, player, 1, "Nemesis Scream Wave")
}
set_pev(player, pev_velocity, f_velocity);
// set_pev(player, pev_maxspeed, 1.0)
}
}
}
// Smallest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, f_origin, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, f_origin[0]) // x
engfunc(EngFunc_WriteCoord, f_origin[1]) // y
engfunc(EngFunc_WriteCoord, f_origin[2]) // z
engfunc(EngFunc_WriteCoord, f_origin[0]) // x axis
engfunc(EngFunc_WriteCoord, f_origin[1]) // y axis
engfunc(EngFunc_WriteCoord, f_origin[2] + (get_pcvar_float(CVAR_RADIUS) * 2.0)) // z axis
write_short(gSpriteGas) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(200) // red
write_byte(0) // green
write_byte(50) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
/*=====
public show_progress(id, length)
{
message_begin(MSG_ONE, MsgBarTime, {0,0,0}, id);
write_byte(length);
write_byte(0);
message_end();
}
=======*/