Plugin-uriZP Class: Jockey

Moderatori: Moderators, Founder

Mesaj

Avatar utilizator
CEO
Posts
3802
Descriere: Jockey din left 4 dead 2


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)
}
Nume: ZP Class: Jockey
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
4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):
========================
CONTACT : diliulro@yahoo.com
========================
Scrie răspuns