Descarcare: LINK RESURSE!
Cod: Selectaţi tot
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <zombie_plague_special>
#define PLUGIN "[ZP] Class Smoker"
#define VERSION "1.3"
#define AUTHOR "4eRT"
#define DRAGSPEED 360.0
#define MAXDRAGS 10
#define COOLDDRAG 6.0
#define DMGTOSTOP 650
#define DRAGINF 2
new g_zclass_smoker, g_Line
new g_sndDrag[] = "zombie_plague/hook.wav"
new g_hooked[33], g_hooksLeft[33], g_ovr_dmg[33], Float:g_lastHook[33];
new zclass_name[] = { "Smoker Creature" }
new zclass_info[] = { "[T]" }
new zclass_model[] = { "zombimod_smoker" }
new zclass_clawmodel[] = { "v_zclass_smoker.mdl" }
new zclass_health = 4700
new zclass_speed = 240
new Float:zclass_gravity = 0.8
new Float:zclass_knockback = 1.2
public plugin_init()
{
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage",1);
RegisterHam(Ham_Spawn, "player", "newSpawn",1);
RegisterHam(Ham_Killed, "player", "smoker_death", 1);
register_logevent("logevent_round_end", 2, "1=Round_End")
}
public plugin_precache()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_zclass_smoker = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
precache_sound(g_sndDrag)
g_Line = precache_model("sprites/zombimod/zbeam4.spr");
}
public zp_user_infected_post(id, infector)
{
if(zp_get_user_zombie_class(id) == g_zclass_smoker)
{
g_hooksLeft[id] = 10;
}
if(!is_user_alive(id) )
if(zp_get_user_zombie_class(infector) == g_zclass_smoker)
{
g_hooksLeft[infector] += DRAGINF
if(g_hooked[infector] == id)
drag_end(infector);
}
}
public newSpawn(id)
if(is_user_connected(id) && g_hooked[id])
drag_end(id);
public zp_user_humanized_post(id)
{
if(g_hooked[id])
drag_end(id);
}
public client_impulse(id, impulse)
{
if(impulse == 201)
{
if(is_user_alive(id) && zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_smoker)
{
drag_start(id);
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public drag_start(id)
{
if(g_hooksLeft[id] <= 0)
{
return PLUGIN_HANDLED;
}
if(get_gametime() - g_lastHook[id] < COOLDDRAG)
{
client_print(id, print_center,"You can use drag in: %d sec.", floatround(COOLDDRAG - (get_gametime() - g_lastHook[id])));
return PLUGIN_HANDLED
}
if(g_hooked[id])
{
drag_end(id)
return PLUGIN_HANDLED
}
new hooktarget, body;
get_user_aiming(id, hooktarget, body);
if(is_user_alive(hooktarget))
{
if(!zp_get_user_zombie(hooktarget))
{
g_hooked[id] = hooktarget;
emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH);
}
else
{
return PLUGIN_HANDLED;
}
new parm[2];
parm[0] = id;
parm[1] = hooktarget;
set_task(0.1, "smoker_reelin", id, parm, 2, "b");
harpoon_target(parm);
new name[32];
get_user_name(hooktarget, name, charsmax(name));
}
else
{
g_hooked[id] = 0;
emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH);
}
g_hooksLeft[id]--;
g_lastHook[id] = get_gametime();
return PLUGIN_HANDLED;
}
public smoker_reelin(parm[])
{
new id = parm[0];
new victim = parm[1];
if(!g_hooked[id] || !is_user_alive(victim) || zp_get_user_zombie(victim))
{
drag_end(id);
return;
}
new Float:fl_Velocity[3];
new idOrigin[3], vicOrigin[3];
get_user_origin(victim, vicOrigin);
get_user_origin(id, idOrigin);
new distance = get_distance(idOrigin, vicOrigin);
if(distance > 1)
{
new Float:fl_Time = distance / DRAGSPEED
fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
fl_Velocity[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
fl_Velocity[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
}
else
{
fl_Velocity[0] = 0.0
fl_Velocity[1] = 0.0
fl_Velocity[2] = 0.0
}
entity_set_vector(victim, EV_VEC_velocity, fl_Velocity)
}
public drag_end(id)
{
g_hooked[id] = 0;
beam_remove(id);
remove_task(id);
}
public smoker_death(victim) // if smoker dies drag off
{
if(!is_user_connected(victim))
return;
beam_remove(victim);
if(g_hooked[victim])
drag_end(victim)
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage) // if take damage drag off
{
if(is_user_alive(attacker) && attacker != victim)
{
if(is_user_alive(victim) && zp_get_user_zombie_class(victim) == g_zclass_smoker && g_hooked[victim])
{
g_ovr_dmg[victim] = g_ovr_dmg[victim] + floatround(damage)
if(g_ovr_dmg[victim] >= DMGTOSTOP)
{
g_ovr_dmg[victim] = 0;
drag_end(victim);
return HAM_IGNORED;
}
}
}
return HAM_IGNORED;
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id))
return FMRES_IGNORED;
if(is_user_alive(id) && g_hooked[id])
set_pev(g_hooked[id], pev_maxspeed, 0.0);
return PLUGIN_CONTINUE;
}
public logevent_round_end()
{
for(new i = 1; i <= 32; i++)
{
if(g_hooked[i])
{
drag_end(i);
g_hooked[i] = 0;
}
}
}
public harpoon_target(parm[]) // set beam (ex. tongue:) if target is player
{
new id = parm[0]
new hooktarget = parm[1]
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(8) // TE_BEAMENTS
write_short(id)
write_short(hooktarget)
write_short(g_Line) // sprite index
write_byte(0) // start frame
write_byte(0) // framerate
write_byte(200) // life
write_byte(8) // width
write_byte(1) // noise
write_byte(155) // r, g, b
write_byte(155) // r, g, b
write_byte(55) // r, g, b
write_byte(90) // brightness
write_byte(10) // speed
message_end()
}
public beam_remove(id) // remove beam
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(99) //TE_KILLBEAM
write_short(id) //entity
message_end()
}
Versiune: 1.0
Link oficial: -
Instalare:
1. Fisierul zombie_creature_smoker.sma il puneti in addons/amxmodx/scripting
2. Fisierul zombie_creature_smoker.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Cod: Selectaţi tot
zombie_creature_smoker.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg): -
Imagini: -