Plugin-uri[ZP] Class: Smoker

Moderatori: Moderators, Founder

Mesaj

Avatar utilizator
CEO
Posts
3802
Descriere: Cand apesi pe T atragi human spre tine.

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()
}
Nume: [ZP] Class: Smoker
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
4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg): -

Imagini: -
========================
CONTACT : diliulro@yahoo.com
========================
Scrie răspuns