Descarcare: LINK RESURSE!
Cod: Selectaţi tot
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "[ZP] Zombie Class: Jockey (L4D2)"
#define VERSION "1.0"
#define AUTHOR "Dias"
#define TASK_AURA 100
#define DEFAULT_HUMAN_SPEED 300.0
// Zombie Attributes
new const zclass_name[] = "Jockey Zombie" // name
new const zclass_info[] = ">> Jumping grab <<" // description
new const zclass_model[] = "Jockey" // model
new const zclass_clawmodel[] = "v_jockey_hand.mdl" // claw model
const zclass_health = 6325 // health
const zclass_speed = 300 // speed
const Float:zclass_gravity = 0.6 // gravity
const Float:zclass_knockback = 1.0 // knockback
new sound_attack[]="jockey/jockey_attackloop01.wav"
new g_zclass_jockey
new g_jumping[33], g_start[33], g_can_use[33], Float:g_last_jump[33]
new g_controlling[33], g_controlled[33], g_controlling2[33], g_controlled2[33]
new cvar_cooldown, cvar_highjump
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
RegisterHam(Ham_Player_PreThink,"player","client_PostThink")
//RegisterHam(Ham_TakeDamage, "player", "fw_takedamage")
cvar_cooldown = register_cvar("zp_jockey_cooldown", "5.0")
cvar_highjump = register_cvar("zp_jockey_highjump", "500.0")
g_zclass_jockey = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public plugin_precache(){
precache_sound(sound_attack)
}
public zp_user_infected_post(id)
{
g_controlling[id] = 0
g_controlling2[id] = 0
g_controlled[id] = 0
g_controlled2[id] = 0
if(zp_get_user_zombie_class(id) == g_zclass_jockey)
{
g_can_use[id] = 1
client_print(id, print_center, zclass_info)
}
}
public fw_spawn_post(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED
g_controlling[id] = 0
g_controlling2[id] = 0
g_controlled[id] = 0
g_controlled2[id] = 0
return HAM_HANDLED
}
/*public fw_takedamage(victim, inflictor, attacker, Float:damage, damagebits)
{
if(!is_user_alive(victim) || !is_user_connected(victim))
return HAM_IGNORED
if(!is_user_alive(attacker) || !is_user_connected(attacker))
return HAM_IGNORED
if(g_controlled2[victim])
{
set_pev(g_controlled[victim], pev_maxspeed, DEFAULT_HUMAN_SPEED)
//set_pev(id, pev_maxspeed, zclass_speed)
g_controlled2[victim] = 0
g_controlling[g_controlled[victim]] = 0
g_controlling2[g_controlled[victim]] = 0
g_controlled[victim] = 0
}
return HAM_HANDLED
}*/
public make_aura(ent)
{
ent -= TASK_AURA
static Float:origin[3]
pev(ent, pev_origin, origin)
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(27)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]-10.0))
write_byte(10)
write_byte(255)
write_byte(255)
write_byte(0)
write_byte(100)
write_byte(100)
message_end()
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
static CurButton
CurButton = get_uc(uc_handle, UC_Buttons)
if(CurButton & IN_ATTACK2)
{
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_jockey)
{
if(g_can_use[id])
{
static Float:CurTime
CurTime = get_gametime()
if((CurTime - 3.0 > g_last_jump[id]) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
do_jump(id)
g_jumping[id] = 1
g_last_jump[id] = CurTime
}
}
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
}
if(g_controlling2[id])
{
CurButton &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, CurButton)
}
}
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_jockey)
{
if(g_controlled2[id])
{
set_pev(id, pev_gravity, 100.0)
} else {
set_pev(id, pev_gravity, zclass_gravity)
remove_task(id-TASK_AURA)
}
}
if(CurButton & IN_ATTACK)
{
if(g_controlling2[id])
{
CurButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, CurButton)
}
}
return FMRES_HANDLED
}
public fw_Touch(id, touched)
{
if(!pev_valid(id))
return FMRES_IGNORED
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
if(!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_jockey)
return FMRES_IGNORED
if(!g_can_use[id])
return FMRES_IGNORED
if(g_jumping[id])
{
if(is_user_alive(touched) && is_user_connected(touched))
{
if(!zp_get_user_zombie(touched)){
emit_sound(id,CHAN_VOICE,sound_attack,VOL_NORM,ATTN_NORM,0,PITCH_NORM)
static Float:Origin[3]
pev(touched, pev_origin, Origin)
Origin[2] += 75.0
set_pev(id, pev_origin, Origin)
g_start[id] = 0
g_controlling[touched] = id
g_controlling2[touched] = 1
g_controlled[id] = touched
g_controlled2[id] = 1
set_task(1.0, "set_time_start", id)
set_task(get_pcvar_float(cvar_cooldown), "reset_cooldown", id)
set_task(0.1, "make_aura", id+TASK_AURA, _, _, "b")
set_pev(id, pev_maxspeed, zclass_speed - 100.0)
g_can_use[id] = 0
}
}
g_jumping[id] = 0
}
return FMRES_HANDLED
}
public set_time_start(id)
{
g_start[id] = 1
}
public reset_cooldown(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_HANDLED
if(!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_jockey)
return PLUGIN_HANDLED
g_can_use[id] = 1
return PLUGIN_HANDLED
}
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_KNIFE)
return FMRES_IGNORED
if(g_controlling2[id])
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_jockey)
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
return FMRES_HANDLED
}
public client_PostThink(id)
{
if(!pev_valid(id))
return
if(!is_user_alive(id) || !is_user_connected(id))
return
if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_jockey && g_controlled2[id])
{
if(pev(g_controlled[id], pev_maxspeed) != 0.1)
{
set_pev(g_controlled[id], pev_maxspeed, 0.1)
}
static Float:Origin[3], Float:Origin2[3], Distance
pev(g_controlled[id], pev_origin, Origin)
pev(id, pev_origin, Origin2)
Distance = floatround(Origin2[2] - Origin[2])
if(Distance != 72 && Distance == 54)
{
hook_ent(g_controlled[id], id, 1000.0)
} else if(Distance != 54 && Distance == 72) {
hook_ent(g_controlled[id], id, 1000.0)
} else {
if(g_start[id])
{
set_pev(g_controlled[id], pev_maxspeed, DEFAULT_HUMAN_SPEED)
//set_pev(id, pev_maxspeed, zclass_speed)
g_controlled2[id] = 0
g_controlling[g_controlled[id]] = 0
g_controlling2[g_controlled[id]] = 0
g_controlled[id] = 0
}
}
}
if(g_controlling2[id])
{
if(get_user_weapon(id) != CSW_KNIFE)
engclient_cmd(id, "weapon_knife")
}
}
public do_jump(id)
{
static Float:Origin[3], Float:AimOrigin[3]
pev(id, pev_origin, Origin)
fm_get_aim_origin(id, AimOrigin)
new Float:TempOrigin[3]
new Float:len = floatabs(floatsqroot((AimOrigin[0] - Origin[0]) * (AimOrigin[0] - Origin[0]) + (AimOrigin[1] - Origin[1]) * (AimOrigin[1] - Origin[1]) + (AimOrigin[2] - Origin[2]) * (AimOrigin[2] - Origin[2]))) / 10
TempOrigin[0] = (AimOrigin[0] - Origin[0]) / len
TempOrigin[1] = (AimOrigin[1] - Origin[1]) / len
TempOrigin[2] = (AimOrigin[2] - Origin[2]) / len
new Float:Velocity[3]
Velocity[0] = TempOrigin[0] * 30.0
Velocity[1] = TempOrigin[1] * 30.0
Velocity[2] = get_pcvar_float(cvar_highjump)
set_pev(id, pev_velocity, Velocity)
}
public hook_ent(ent, victim, Float:speed)
{
static Float:fl_Velocity[3]
static Float:VicOrigin[3], Float:EntOrigin[3]
pev(ent, pev_origin, EntOrigin)
pev(victim, pev_origin, VicOrigin)
static Float:distance_f
distance_f = get_distance_f(EntOrigin, VicOrigin)
if (distance_f > 1.0)
{
new Float:fl_Time = distance_f / speed
fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time
fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time
fl_Velocity[2] = 0.0 //(VicOrigin[2] - EntOrigin[2]) / fl_Time
} else
{
fl_Velocity[0] = 0.0
fl_Velocity[1] = 0.0
fl_Velocity[2] = 0.0
}
entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
}
Versiune: 1.0
Link oficial: -
Instalare:
1. Fisierul zp_zclass_jockey.sma il puneti in addons/amxmodx/scripting
2. Fisierul zp_zclass_jockey.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins-zplague.ini si adaugati la urma:
Cod: Selectaţi tot
zp_zclass_jockey.amxx
Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):