Jetpack+Tesla

Pluginuri pentru modul AmxModX.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Rainq
Membru, skill +2
Membru, skill +2
Posts: 681
Joined: 21 Jul 2015, 19:50
Detinator Steam: Da
CS Status: Retras
Detinator server CS: zm.extreamcs.com
SteamID: mrainq
Reputatie: Fost super moderator
Fost detinator ZM.eXtreamCS.COM
Fost Membru Club eXtreamCS (trei luni)
Fond eXtream: 0
Location: Bucharest
Discord: manuraiders
Has thanked: 29 times
Been thanked: 51 times
Contact:

19 Mar 2021, 17:09

Image
Descriere: Jetpack+Tesla

Descarcare: download

Code: Select all

#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <zombieplague>

#define REGEN_TIME		0.2
#define HUD_TIME		0.3
#define ENT_TYPE_ROCKET		9340

new const jet_model_p[] = "models/zombimod/p_jetpack.mdl";
new const jet_model_v[] = "models/zombimod/v_jetpack.mdl";
new const jet_model_w[] = "models/zombimod/w_jetpack.mdl";
new const jet_model_rocket[] = "models/rpgrocket.mdl";

new const jet_beam_laser[] = "sprites/laserbeam.spr";
new const get_beam_end_laser_no_rtigger[] = "sprites/zombimod/no_trigger.spr";
new const set_beam_center_trigger[] = "sprites/zombimod/trigger_center.spr";
new const set_beam_ligting[] = "sprites/zombimod/lightning.spr";
new const sprite_grenade_ring[] = "sprites/shockwave.spr";
new const set_beam_no_trigger[] = "sprites/zombimod/no_trigger_zombie.spr";
new const spr_lighting[] = "sprites/lgtning.spr";

new const jet_sound_attack_1[] = "zombimod/tesla_attack_1.wav";
new const jet_sound_attack_1_end[] = "zombimod/tesla_attack_1_end.wav";
new const jet_sound_attack_2[] = "zombimod/tesla_attack_2.wav";
new const jet_sound_attack_2_activated[] = "zombimod/tesla_attack_2_activated.wav";
new const jet_sound_drop[] = "zombimod/tesla_drop.wav";
new const jet_sound_flight[] = "zombimod/tesla_flight.wav";
new const jet_sound_give[] = "zombimod/tesla_give.wav";
new const jet_sound_no_fuel[] = "zombimod/tesla_no_fuel.wav";
new const jet_sound_reload[] = "zombimod/tesla_reload.wav";

enum (+= 100)
{
	TASK_END_ATTACK_1,
	TASK_RELOAD_ATTACK_ONE,
	TASK_JET_HUD,
	TASK_JET_REGEN_ENERGY,
	TASK_SOUND_FLY,
	TASK_SOUND_NO_FUEL,
	TASK_RELOAD_ATTACK_TWO
}

new const name[] = "\rJetpack+Tesla";
const cost = 60;
new const name_unlimited[] = "\rEnergy Unlimited";
const cost_unlimited = 40;

new bool:jetpack[33], bool:reload_attack_one[33], bool:fly_sound[33];
new bool:reload_attack_two[33], bool:unlimited_energy[33];

new Float:g_current_fuel[33];

new g_jet_item, g_Beam_SprId, g_Burn_SprId, Burn_SprId_Center, Burn_SprId_ligting, Burn_SprId_zeml;
new g_exploSpr, g_MsgHudID, sprLightning, g_item_unlimited;

new cvar_array[50];

public plugin_init()
{
	register_plugin("[ZP] Extra: Jetpack+Bazooka", "1.6", ".NET");
	
	cvar_array[0] = register_cvar("zp_jet_fuel", "100");
	cvar_array[1] = register_cvar("zp_jet_attack_damage_1", "250.0");
	cvar_array[2] = register_cvar("zp_jet_reload_attack_1", "1.0");
	cvar_array[3] = register_cvar("zp_jet_fuel_decrease_attack_1", "10");
	cvar_array[4] = register_cvar("zp_jet_regen_fuel", "1.5"); // 0.2 milisecond
	cvar_array[5] = register_cvar("zp_jet_reload_attack_2", "15.0");
	cvar_array[6] = register_cvar("zp_jet_attack_damage_2", "750.0");
	cvar_array[7] = register_cvar("zp_jet_fuel_decrease_attack_2", "50");
	
	register_clcmd("drop","cmdDrop");
	
	register_event("CurWeapon", "CurWeaponModel", "be");
	register_event("DeathMsg", "DeathMessage", "a");
	
	register_forward(FM_PlayerPreThink, "fw_preThink");
	register_forward(FM_EmitSound, "fw_emitSound");
	register_forward(FM_Touch, "fw_touch");
	
	g_jet_item = zp_register_extra_item(name, cost, ZP_TEAM_HUMAN);
	g_item_unlimited = zp_register_extra_item(name_unlimited, cost_unlimited, ZP_TEAM_HUMAN);
	
	g_MsgHudID = CreateHudSyncObj();
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, jet_model_p);
	engfunc(EngFunc_PrecacheModel, jet_model_v);
	engfunc(EngFunc_PrecacheModel, jet_model_w);
	engfunc(EngFunc_PrecacheModel, jet_model_rocket);
	
	g_Beam_SprId = engfunc(EngFunc_PrecacheModel, jet_beam_laser);
	g_Burn_SprId = engfunc(EngFunc_PrecacheModel, get_beam_end_laser_no_rtigger);
	Burn_SprId_Center = engfunc(EngFunc_PrecacheModel, set_beam_center_trigger);
	Burn_SprId_ligting = engfunc(EngFunc_PrecacheModel, set_beam_ligting);
	Burn_SprId_zeml = engfunc(EngFunc_PrecacheModel, set_beam_no_trigger);
	g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring);
	sprLightning = engfunc(EngFunc_PrecacheModel, spr_lighting);
	
	engfunc(EngFunc_PrecacheSound, jet_sound_attack_1);
	engfunc(EngFunc_PrecacheSound, jet_sound_attack_1_end);
	engfunc(EngFunc_PrecacheSound, jet_sound_attack_2);
	engfunc(EngFunc_PrecacheSound, jet_sound_attack_2_activated);
	engfunc(EngFunc_PrecacheSound, jet_sound_drop);
	engfunc(EngFunc_PrecacheSound, jet_sound_flight);
	engfunc(EngFunc_PrecacheSound, jet_sound_give);
	engfunc(EngFunc_PrecacheSound, jet_sound_no_fuel);
	engfunc(EngFunc_PrecacheSound, jet_sound_reload);
}

public plugin_natives()
{
	register_native("is_jet", "native_is_jet", 1);
}

public client_connect(id)
{
	jetpack[id] = false;
	reload_attack_one[id] = false;
	reload_attack_two[id] = false;
	fly_sound[id] = false;
	unlimited_energy[id] = false;
}

public client_disconnect(id)
{
	jetpack[id] = false;
	reload_attack_one[id] = false;
	reload_attack_two[id] = false;
	fly_sound[id] = false;
	unlimited_energy[id] = false;
	
	if (task_exists(id+TASK_END_ATTACK_1))
		remove_task(id+TASK_END_ATTACK_1);
	if (task_exists(id+TASK_JET_HUD))
		remove_task(id+TASK_JET_HUD);
	if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
		remove_task(id+TASK_RELOAD_ATTACK_ONE);
	if (task_exists(id+TASK_JET_REGEN_ENERGY))
		remove_task(id+TASK_JET_REGEN_ENERGY);
	if (task_exists(id+TASK_SOUND_FLY))
		remove_task(id+TASK_SOUND_FLY);
	if (task_exists(id+TASK_SOUND_NO_FUEL))
		remove_task(id+TASK_SOUND_NO_FUEL);
	if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
		remove_task(id+TASK_RELOAD_ATTACK_TWO);
}

public zp_round_ended(winteam)
{
	remove_jetpack();
	
	for (new id = 1; id <= 32; id++)
	{
		if (is_user_connected(id) && is_user_alive(id) && jetpack[id])
		{
			jetpack[id] = false;
			reload_attack_one[id] = false;
			g_current_fuel[id] = 0.0;
			fly_sound[id] = false;
			reload_attack_two[id] = false;
			
			if (unlimited_energy[id])
			{
				unlimited_energy[id] = false;
				
				//colored_print(id, "^x04[ZP]^x01 The action of infinite energy has disappeared.");
			}
			
			if (task_exists(id+TASK_END_ATTACK_1))
				remove_task(id+TASK_END_ATTACK_1);
			if (task_exists(id+TASK_JET_HUD))
				remove_task(id+TASK_JET_HUD);
			if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
				remove_task(id+TASK_RELOAD_ATTACK_ONE);
			if (task_exists(id+TASK_JET_REGEN_ENERGY))
				remove_task(id+TASK_JET_REGEN_ENERGY);
			if (task_exists(id+TASK_SOUND_FLY))
				remove_task(id+TASK_SOUND_FLY);
			if (task_exists(id+TASK_SOUND_NO_FUEL))
				remove_task(id+TASK_SOUND_NO_FUEL);
			if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
				remove_task(id+TASK_RELOAD_ATTACK_TWO);
			
			new clip, ammo;
			new weapon = get_user_weapon(id, clip, ammo);
			
			if (weapon == CSW_KNIFE)
			{
				if (!zp_get_user_zombie(id) && !zp_get_user_nemesis(id))
				{
					set_pev(id, pev_viewmodel2, "models/v_knife.mdl");
					set_pev(id, pev_weaponmodel2, "models/p_knife.mdl");
				}
			}
		}
	}
}

public remove_jetpack()
{
	set_task(1.0, "remove_jet");
}

public remove_jet(id)
{
	fm_remove_entity_name("zp_jp_jetpack");
	
	return PLUGIN_CONTINUE;
}

public fw_preThink(id)
{
	if (!is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	if (!jetpack[id])
		return PLUGIN_CONTINUE;
	
	if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id))
		return PLUGIN_CONTINUE;
	
	new clip, ammo;
	new weapon = get_user_weapon(id, clip, ammo)
	
	if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && reload_attack_one[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[3]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_attack_1, 1.0, ATTN_NORM, 0, PITCH_NORM);
		set_task(0.2, "end_attack_1", id+TASK_END_ATTACK_1);
		if (!unlimited_energy[id])
			g_current_fuel[id] -= get_pcvar_float(cvar_array[3]);
		
		reload_attack_one[id] = false;
		set_task(get_pcvar_float(cvar_array[2]), "func_reload_attack_one", id+TASK_RELOAD_ATTACK_ONE);
		
		static Float:startOrigin[3], Float:endOrigin[3], Float:endOrigin2[3];
		
		get_Postion(id, 40.0, 7.5, -5.0, startOrigin);
		get_Postion(id, 4096.0, 0.0, 0.0, endOrigin);
		
		static TrResult; TrResult = create_tr2();
		engfunc(EngFunc_TraceLine, startOrigin, endOrigin, DONT_IGNORE_MONSTERS, id, TrResult);
		
		get_weapon_attachment(id, endOrigin);
		global_get(glb_v_forward, endOrigin2);
		
		xs_vec_mul_scalar(endOrigin2, 1024.0, endOrigin2);
		xs_vec_add(endOrigin, endOrigin2, endOrigin2);
		
		get_tr2(TrResult, TR_vecEndPos, endOrigin);
		get_tr2(TrResult, TR_vecPlaneNormal, endOrigin2);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BEAMENTPOINT);
		write_short(id);
		engfunc(EngFunc_WriteCoord, endOrigin[0]);
		engfunc(EngFunc_WriteCoord, endOrigin[1]);
		engfunc(EngFunc_WriteCoord, endOrigin[2]);
		write_short(g_Beam_SprId);
		write_byte(0); // start frame
		write_byte(1); // frame rate 
		write_byte(1); // life
		write_byte(42); // line width
		write_byte(30); // noise amplitude
		write_byte(15); // red
		write_byte(15); // green
		write_byte(200); // blue
		write_byte(255); // brightness
		write_byte(0); // scroll speed
		message_end();
		
		xs_vec_mul_scalar(endOrigin2, 2.5, endOrigin2);
		xs_vec_add(endOrigin, endOrigin2, endOrigin2);
		
		message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
		write_byte(TE_EXPLOSION);
		engfunc(EngFunc_WriteCoord, endOrigin2[0]);
		engfunc(EngFunc_WriteCoord, endOrigin2[1]);
		engfunc(EngFunc_WriteCoord, endOrigin2[2]);
		write_short(g_Burn_SprId);
		write_byte(2);
		write_byte(30);
		write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND);
		message_end();
		
		static Hit; Hit = get_tr2(TrResult, TR_pHit);
		
		if (!is_user_alive(Hit))
		{
			message_begin (MSG_BROADCAST,SVC_TEMPENTITY);
			write_byte(TE_SPRITETRAIL);
			engfunc(EngFunc_WriteCoord, endOrigin2[0]);
			engfunc(EngFunc_WriteCoord, endOrigin2[1]);
			engfunc(EngFunc_WriteCoord, endOrigin2[2] + 50.0);
			engfunc(EngFunc_WriteCoord, endOrigin2[0]);
			engfunc(EngFunc_WriteCoord, endOrigin2[1]);
			engfunc(EngFunc_WriteCoord, endOrigin2[2]);
			write_short(Burn_SprId_zeml);
			write_byte(10) // (count)
			write_byte(random_num(5, 10)) // (life in 0.1's)
			write_byte(1) // byte (scale in 0.1's)
			write_byte(25) // (velocity along vector in 10's)
			write_byte(5) // (randomness of velocity in 10's)
			message_end();
			
			free_tr2(TrResult);
			
			return PLUGIN_CONTINUE;
		}
		
		if(is_user_alive(Hit) && (zp_get_user_zombie(Hit) || zp_get_user_nemesis(Hit))) 
		{
			do_attack(id, Hit, 0, get_pcvar_float(cvar_array[1]));
			
			new Float:originF[3];
			pev(Hit, pev_origin, originF);
			
			message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
			write_byte (TE_SPRITE);
			engfunc(EngFunc_WriteCoord, originF[0]);
			engfunc(EngFunc_WriteCoord, originF[1]);
			engfunc(EngFunc_WriteCoord, originF[2]);
			write_short(Burn_SprId_Center);
			write_byte(3);
			write_byte(180);
			message_end();
			
			message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
			write_byte (TE_SPRITE);
			engfunc(EngFunc_WriteCoord, originF[0]);
			engfunc(EngFunc_WriteCoord, originF[1]);
			engfunc(EngFunc_WriteCoord, originF[2] + 30.0);
			write_short(Burn_SprId_ligting);
			write_byte(10);
			write_byte(180);
			message_end();
			
			engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, originF, 0)
			write_byte(TE_BEAMCYLINDER)
			engfunc(EngFunc_WriteCoord, originF[0]) // x
			engfunc(EngFunc_WriteCoord, originF[1]) // y
			engfunc(EngFunc_WriteCoord, originF[2]) // z
			engfunc(EngFunc_WriteCoord, originF[0]) // x axis
			engfunc(EngFunc_WriteCoord, originF[1]) // y axis
			engfunc(EngFunc_WriteCoord, originF[2] + 555.0) // z axis
			write_short(g_exploSpr) // sprite
			write_byte(0) // startframe
			write_byte(0) // framerate
			write_byte(1) // life
			write_byte(25) // width
			write_byte(0) // noise
			write_byte(255) // red
			write_byte(255) // green
			write_byte(255) // blue
			write_byte(200) // brightness
			write_byte(0) // speed
			message_end()
		}
		
		free_tr2(TrResult);
	} else if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && !reload_attack_one[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[3]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_reload, 1.0, ATTN_NORM, 0, PITCH_NORM);

		return PLUGIN_CONTINUE;
	} else if ((pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_oldbuttons) & IN_ATTACK) && weapon == CSW_KNIFE && g_current_fuel[id] < get_pcvar_float(cvar_array[3]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_no_fuel, 1.0, ATTN_NORM, 0, PITCH_NORM);
		
		//colored_print(id, "^x04[ZP]^x01 Not enough energy required ^x04%.1f^x01.", get_pcvar_float(cvar_array[3]));
		
		return PLUGIN_CONTINUE;
	}
	
	if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && reload_attack_two[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[7]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_attack_2, 1.0, ATTN_NORM, 0, PITCH_NORM);
		if(!unlimited_energy[id])
			g_current_fuel[id] -= get_pcvar_float(cvar_array[7]);
		
		reload_attack_two[id] = false;
		set_task(get_pcvar_float(cvar_array[5]), "func_reload_attack_two", id+TASK_RELOAD_ATTACK_TWO);
		//---------------------------------------------------------------------------------------------------
		
		static Float:startOrigin[3], Float:endOrigin[3], Float:endOrigin2[3];
		
		get_Postion(id, 40.0, 7.5, -5.0, startOrigin);
		get_Postion(id, 4096.0, 0.0, 0.0, endOrigin);
		
		static TrResult; TrResult = create_tr2();
		engfunc(EngFunc_TraceLine, startOrigin, endOrigin, DONT_IGNORE_MONSTERS, id, TrResult);
		
		get_weapon_attachment(id, endOrigin);
		global_get(glb_v_forward, endOrigin2);
		
		xs_vec_mul_scalar(endOrigin2, 1024.0, endOrigin2);
		xs_vec_add(endOrigin, endOrigin2, endOrigin2);
		
		get_tr2(TrResult, TR_vecEndPos, endOrigin);
		get_tr2(TrResult, TR_vecPlaneNormal, endOrigin2);
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
		write_byte(TE_BEAMENTPOINT);
		write_short(id);
		engfunc(EngFunc_WriteCoord, endOrigin[0]);
		engfunc(EngFunc_WriteCoord, endOrigin[1]);
		engfunc(EngFunc_WriteCoord, endOrigin[2]);
		write_short(g_Beam_SprId);
		write_byte(0); // start frame
		write_byte(1); // frame rate 
		write_byte(5); // life
		write_byte(60); // line width
		write_byte(1); // noise amplitude
		write_byte(200); // red
		write_byte(200); // green
		write_byte(200); // blue
		write_byte(255); // brightness
		write_byte(0); // scroll speed
		message_end();
		
		xs_vec_mul_scalar(endOrigin2, 2.5, endOrigin2);
		xs_vec_add(endOrigin, endOrigin2, endOrigin2);
		
		engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, endOrigin2, 0)
		write_byte(TE_BEAMCYLINDER)
		engfunc(EngFunc_WriteCoord, endOrigin[0]) // x
		engfunc(EngFunc_WriteCoord, endOrigin[1]) // y
		engfunc(EngFunc_WriteCoord, endOrigin[2]) // z
		engfunc(EngFunc_WriteCoord, endOrigin[0]) // x axis
		engfunc(EngFunc_WriteCoord, endOrigin[1]) // y axis
		engfunc(EngFunc_WriteCoord, endOrigin[2] + 555.0) // z axis
		write_short(g_exploSpr) // sprite
		write_byte(0) // startframe
		write_byte(0) // framerate
		write_byte(5) // life
		write_byte(70) // width
		write_byte(0) // noise
		write_byte(255) // red
		write_byte(255) // green
		write_byte(255) // blue
		write_byte(200) // brightness
		write_byte(0) // speed
		message_end()
		
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
		write_byte (TE_SPRITE);
		engfunc(EngFunc_WriteCoord, endOrigin[0]);
		engfunc(EngFunc_WriteCoord, endOrigin[1]);
		engfunc(EngFunc_WriteCoord, endOrigin[2]);
		write_short(Burn_SprId_ligting);
		write_byte(35);
		write_byte(180);
		message_end();
		
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
		write_byte(TE_BEAMDISK);
		engfunc(EngFunc_WriteCoord, endOrigin[0]);
		engfunc(EngFunc_WriteCoord, endOrigin[1]);
		engfunc(EngFunc_WriteCoord, endOrigin[2]);
		engfunc(EngFunc_WriteCoord, 0);
		engfunc(EngFunc_WriteCoord, 0);
		engfunc(EngFunc_WriteCoord, 100);
		write_short(sprLightning);
		write_byte(0)		// byte (starting frame)
		write_byte(0)		// byte (frame rate in 0.1's)
		write_byte(10)		// byte (life in 0.1's)
		write_byte(0)		// byte (line width in 0.1's)
		write_byte(100)		// byte (noise amplitude in 0.01's)
		write_byte(255)		
		write_byte(255)
		write_byte(255)
		write_byte(255)		// byte (brightness)
		write_byte(0)		// byte (scroll speed in 0.1's)
		message_end()
		
		new rocket = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		
		if (pev_valid(rocket))
		{
			engfunc(EngFunc_SetModel, rocket, jet_model_rocket);
			engfunc(EngFunc_SetSize, rocket, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0});
			engfunc(EngFunc_SetOrigin, rocket, startOrigin);
			set_pev(rocket, pev_classname, "rocket_entity");
			set_pev(rocket, pev_dmg, get_pcvar_float(cvar_array[6]));
			set_pev(rocket, pev_owner, id);
			velocity_by_aim(id, 3000, startOrigin);
			set_pev(rocket, pev_velocity, startOrigin);
			new Float:vector[3];
			engfunc(EngFunc_VecToAngles, startOrigin, vector);
			set_pev(rocket, pev_angles, vector);
			set_pev(rocket, pev_flSwimTime, ENT_TYPE_ROCKET);
			set_pev(rocket, pev_movetype, MOVETYPE_FLY);
			set_pev(rocket, pev_effects, EF_LIGHT);
			set_pev(rocket, pev_solid, SOLID_BBOX);
		}
		
		free_tr2(TrResult);
	} else if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && !reload_attack_two[id] && g_current_fuel[id] >= get_pcvar_float(cvar_array[7]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_reload, 1.0, ATTN_NORM, 0, PITCH_NORM);

		return PLUGIN_CONTINUE;
	} else if ((pev(id, pev_button) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2) && weapon == CSW_KNIFE && g_current_fuel[id] < get_pcvar_float(cvar_array[7]))
	{
		emit_sound(id, CHAN_AUTO, jet_sound_no_fuel, 1.0, ATTN_NORM, 0, PITCH_NORM);
		
		//colored_print(id, "^x04[ZP]^x01 Not enough energy required ^x04%.1f^x01.", get_pcvar_float(cvar_array[7]));
	
		return PLUGIN_CONTINUE;
	}
	
	if ((pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_flags) & FL_ONGROUND) && (pev(id, pev_button) & IN_JUMP) && g_current_fuel[id] > 0.3 && get_user_weapon(id) == CSW_KNIFE)
	{
		new Float:velocity[3], Float:Speed;
		
		pev(id, pev_velocity, velocity);
		Speed = velocity[2] + random_float(30.0, 35.0);
		
		velocity_by_aim(id, 250, velocity);
		
		velocity[2] = Speed > 250.0 ? 250.0 : Speed;
		set_pev(id, pev_velocity, velocity);
		
		if (fly_sound[id])
		{
			if (task_exists(id+TASK_SOUND_FLY))
				remove_task(id+TASK_SOUND_FLY);
			
			emit_sound(id, CHAN_AUTO, jet_sound_flight, 1.0, ATTN_NORM, 0, PITCH_NORM);
			set_task(0.4, "sound_replace", id+TASK_SOUND_FLY);
			fly_sound[id] = false;
		}
		
		if (!unlimited_energy[id])
			g_current_fuel[id] -= 0.3;
	}
	
	return PLUGIN_CONTINUE;
}

public sound_replace(taskid)
{
	new id = taskid - TASK_SOUND_FLY;
	
	fly_sound[id] = true;
	
	if (task_exists(id+TASK_SOUND_FLY))
		remove_task(id+TASK_SOUND_FLY);
	
	return 1;
}

public end_attack_1(taskid)
{
	new id = taskid - TASK_END_ATTACK_1;
	
	emit_sound(id, CHAN_AUTO, jet_sound_attack_1_end, 1.0, ATTN_NORM, 0, PITCH_NORM);
	
	if (task_exists(id+TASK_END_ATTACK_1))
		remove_task(id+TASK_END_ATTACK_1);
	
	return 1;
}

public func_reload_attack_one(taskid)
{
	new id = taskid - TASK_RELOAD_ATTACK_ONE;
	
	reload_attack_one[id] = true;
	
	if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
		remove_task(id+TASK_RELOAD_ATTACK_ONE);
	
	return 1;
}

public func_reload_attack_two(taskid)
{
	new id = taskid - TASK_RELOAD_ATTACK_TWO;
	
	reload_attack_two[id] = true;
	emit_sound(id, CHAN_AUTO, jet_sound_attack_2_activated, 1.0, ATTN_NORM, 0, PITCH_NORM);
	
	if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
		remove_task(id+TASK_RELOAD_ATTACK_TWO);
	
	return 1;
}

public fw_emitSound(entity, channel, const sample[]) {
	if(is_user_alive(entity)) {
		new clip,ammo
		new weapon = get_user_weapon(entity,clip,ammo)
		
		if(jetpack[entity] && weapon == CSW_KNIFE) {
			if(equal(sample,"weapons/knife_slash1.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_slash2.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_deploy1.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_hitwall1.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_hit1.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_hit2.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_hit3.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_hit4.wav"))
				return FMRES_SUPERCEDE;
			if(equal(sample,"weapons/knife_stab.wav"))
				return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

public CurWeaponModel(id)
{
	if (zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_survivor(id))
		return PLUGIN_HANDLED;
	
	if (jetpack[id])
	{
		new clip, ammo;
		new weapon = get_user_weapon(id, clip, ammo);
		
		if (weapon == CSW_KNIFE)
		{
			check_model(id);
			
			if (task_exists(id+TASK_JET_HUD))
			{
				remove_task(id+TASK_JET_HUD);
				
				set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
			}
			
			if (task_exists(id+TASK_JET_REGEN_ENERGY) && !unlimited_energy[id])
			{
				remove_task(id+TASK_JET_REGEN_ENERGY);
				set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
			}
			
			client_cmd(id, "spk %s", jet_sound_give);
		}
			
		return PLUGIN_CONTINUE;
	}
	
	return PLUGIN_CONTINUE;
}

public show_hud(taskid)
{
	new id = taskid - TASK_JET_HUD;
	
	set_hudmessage(200, 85, 190, 0.85, -0.8, 0, 6.0, 0.4, 0.0, 0.0, -1);
	ShowSyncHudMsg(id, g_MsgHudID, "[Energy: %.1f]^n[Laser: %s]^n[Energy impact: %s]", g_current_fuel[id],
		reload_attack_one[id] == true ? "Full" : "Loading...",
		reload_attack_two[id] == true ? "Full" : "Loading...");
}

public fw_touch(prt, ptd)
{
	if (pev_valid(prt))
	{
		new classname[32];
		pev(prt, pev_classname, classname, charsmax(classname));
		
		if (equal(classname, "zp_jp_jetpack"))
		{
			new id = ptd;
				
			if (id > 0 && id < 34)
			{
				if (!jetpack[id] && !zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id) && is_user_alive(id))
				{
					jetpack[id] = true;
					reload_attack_one[id] = false;
					reload_attack_two[id] = false;
					set_task(get_pcvar_float(cvar_array[2]), "func_reload_attack_one", id+TASK_RELOAD_ATTACK_ONE);
					set_task(get_pcvar_float(cvar_array[5]), "func_reload_attack_two", id+TASK_RELOAD_ATTACK_TWO);
					
					if (unlimited_energy[id])
					{
						g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
						//colored_print(id, "^x04[ZP]^x01 You have bought endless energy.");
						//colored_print(id, "^x04[ZP]^x01 Energy charge is charged on %d.", get_pcvar_num(cvar_array[0]));
					} 
					else if (!unlimited_energy[id])
					{
						set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
						g_current_fuel[id] = 0.0;
					}
						
					client_cmd(id, "spk %s", jet_sound_give);
					engclient_cmd(id,"weapon_knife"), check_model(id);
					set_task(1.0, "show_hud", id+TASK_JET_HUD, "", 0, "b");
						
					engfunc(EngFunc_RemoveEntity, prt);
				}
			}
		}
		else if(equal(classname, "rocket_entity"))
		{
			static Float:fOrigin[3];
			pev(prt, pev_origin, fOrigin);
			
			static attacker; attacker = pev(prt, pev_owner);
			
			if (!is_user_connected(attacker))
			{
				engfunc(EngFunc_RemoveEntity, prt);
				
				return FMRES_IGNORED;
			}
			
			if (pev_valid(ptd) && !is_user_connected(ptd))
			{
				static szClassName[32];
				pev(ptd, pev_classname, szClassName, charsmax(szClassName));
				
				if(equal(szClassName, "func_breakable") && (pev(ptd, pev_solid) != SOLID_NOT))
					dllfunc(DLLFunc_Use, ptd, prt);
			}
			
			static victim; victim = -1;
			
			while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, 300.0)) != 0)
			{
				if (is_user_connected(victim) && zp_get_user_zombie(victim))
				{
					static Float:origin[3], Float:dist, Float:damage;
					
					pev(victim, pev_origin, origin);
					dist = get_distance_f(fOrigin, origin);
					damage = get_pcvar_float(cvar_array[6]) - (get_pcvar_float(cvar_array[6]) / 300.0) * dist;
					
					if (damage > 0.0)
					{
						ExecuteHamB(Ham_TakeDamage, victim, prt, attacker, damage, DMG_BULLET);
						
						message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0, 0, 0}, victim);
						write_short(1<<10);
						write_short(1<<10);
						write_short(0x0000);
						write_byte(200);
						write_byte(200);
						write_byte(200);
						write_byte(75);
						message_end();
						
						vector_angle_up(victim, 45.0, 65.0);
						
						engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0);
						write_byte(TE_IMPLOSION);
						engfunc(EngFunc_WriteCoord, origin[0]);
						engfunc(EngFunc_WriteCoord, origin[1]);
						engfunc(EngFunc_WriteCoord, origin[2]);
						write_byte(100);
						write_byte(50);
						write_byte(5);
						message_end();
						
						message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
						write_byte (TE_SPRITE);
						engfunc(EngFunc_WriteCoord, origin[0]);
						engfunc(EngFunc_WriteCoord, origin[1]);
						engfunc(EngFunc_WriteCoord, origin[2]);
						write_short(Burn_SprId_Center);
						write_byte(3);
						write_byte(180);
						message_end();
						
						engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, origin, 0)
						write_byte(TE_BEAMCYLINDER)
						engfunc(EngFunc_WriteCoord, origin[0]) // x
						engfunc(EngFunc_WriteCoord, origin[1]) // y
						engfunc(EngFunc_WriteCoord, origin[2]) // z
						engfunc(EngFunc_WriteCoord, origin[0]) // x axis
						engfunc(EngFunc_WriteCoord, origin[1]) // y axis
						engfunc(EngFunc_WriteCoord, origin[2] + 555.0) // z axis
						write_short(g_exploSpr) // sprite
						write_byte(0) // startframe
						write_byte(0) // framerate
						write_byte(1) // life
						write_byte(25) // width
						write_byte(0) // noise
						write_byte(255) // red
						write_byte(255) // green
						write_byte(255) // blue
						write_byte(200) // brightness
						write_byte(0) // speed
						message_end()
					}
				}
			}
			
			engfunc(EngFunc_RemoveEntity, prt);
		}
	}
	
	return FMRES_IGNORED;
}

public DeathMessage()
{
	new victim = read_data(2);
	
	if (jetpack[victim])
	{
		drop_jetpack(victim);
		
		jetpack[victim] = false;
		reload_attack_one[victim] = false;
		g_current_fuel[victim] = 0.0;
		fly_sound[victim] = false;
		reload_attack_two[victim] = false;
		
		if (task_exists(victim+TASK_END_ATTACK_1))
			remove_task(victim+TASK_END_ATTACK_1);
		if (task_exists(victim+TASK_JET_HUD))
			remove_task(victim+TASK_JET_HUD);
		if (task_exists(victim+TASK_RELOAD_ATTACK_ONE))
			remove_task(victim+TASK_RELOAD_ATTACK_ONE);
		if (task_exists(victim+TASK_JET_REGEN_ENERGY))
			remove_task(victim+TASK_JET_REGEN_ENERGY);
		if (task_exists(victim+TASK_SOUND_FLY))
			remove_task(victim+TASK_SOUND_FLY);
		if (task_exists(victim+TASK_SOUND_NO_FUEL))
			remove_task(victim+TASK_SOUND_NO_FUEL);
		if (task_exists(victim+TASK_RELOAD_ATTACK_TWO))
			remove_task(victim+TASK_RELOAD_ATTACK_TWO);
	}
	
	return PLUGIN_CONTINUE;
}

public check_model(id)
{
	set_pev(id, pev_viewmodel2, jet_model_v);
	set_pev(id, pev_weaponmodel2, jet_model_p);
}

public cmdDrop(id)
{
	if (jetpack[id])
	{
		new clip, ammo;
		new weapon = get_user_weapon(id, clip, ammo);
		
		if (weapon == CSW_KNIFE)
		{
			drop_jetpack(id);
			
			client_cmd(id, "spk %s", jet_sound_drop);
			
			if (task_exists(id+TASK_END_ATTACK_1))
				remove_task(id+TASK_END_ATTACK_1);
			if (task_exists(id+TASK_JET_HUD))
				remove_task(id+TASK_JET_HUD);
			if (task_exists(id+TASK_RELOAD_ATTACK_ONE))
				remove_task(id+TASK_RELOAD_ATTACK_ONE);
			if (task_exists(id+TASK_JET_REGEN_ENERGY))
				remove_task(id+TASK_JET_REGEN_ENERGY);
			if (task_exists(id+TASK_SOUND_FLY))
				remove_task(id+TASK_SOUND_FLY);
			if (task_exists(id+TASK_SOUND_NO_FUEL))
				remove_task(id+TASK_SOUND_NO_FUEL);
			if (task_exists(id+TASK_RELOAD_ATTACK_TWO))
				remove_task(id+TASK_RELOAD_ATTACK_TWO);
			
			jetpack[id] = false;
			reload_attack_one[id] = false;
			g_current_fuel[id] = 0.0;
			fly_sound[id] = false;
			reload_attack_two[id] = false;
			
			if (!zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
			{
				set_pev(id, pev_viewmodel2, "models/v_knife.mdl");
				set_pev(id, pev_weaponmodel2, "models/p_knife.mdl");
			}
			
			return PLUGIN_HANDLED;
		}
	}
	
	return PLUGIN_CONTINUE;
}

public drop_jetpack(id) {
	if(jetpack[id]) {
		new Float:Aim[3],Float:origin[3]
		velocity_by_aim(id, 70, Aim);
		pev(id, pev_origin, origin);
		
		origin[0] += Aim[0];
		origin[1] += Aim[1];
		
		new jetpack_target = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
		set_pev(jetpack_target, pev_classname, "zp_jp_jetpack");
		engfunc(EngFunc_SetModel, jetpack_target, jet_model_w);
		
		engfunc(EngFunc_SetSize, jetpack_target, Float:{-16.0,-16.0,-16.0}, Float:{16.0,16.0,16.0});
		set_pev(jetpack_target, pev_solid, 1);
		set_pev(jetpack_target, pev_movetype, 6);
		
		set_pev(jetpack_target, pev_origin, origin);
		
		jetpack[id] = false;
	}
	
	return 1;
}

public zp_extra_item_selected(id, itemid)
{
	if (itemid == g_jet_item)
	{
		new clip, ammo;
		new weapon = get_user_weapon(id, clip, ammo);
		
		if (jetpack[id])
		{
			//colored_print(id, "^x04[ZP]^x01 You already have a Jetpack + Tesla.");
			zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost);
			
			return PLUGIN_HANDLED;
		}
		
		jetpack[id] = true;
		reload_attack_one[id] = true;
		g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
		fly_sound[id] = true;
		reload_attack_two[id] = true;
		
		if (!unlimited_energy[id])
			set_task(REGEN_TIME, "regen_energy", id+TASK_JET_REGEN_ENERGY, "", 0, "b");
		
		client_cmd(id, "spk %s", jet_sound_give);
		
		if (weapon == CSW_KNIFE)
		{
			check_model(id);
			set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
		}
		else
		{
			engclient_cmd(id,"weapon_knife"), check_model(id);
			set_task(HUD_TIME, "show_hud", id+TASK_JET_HUD, "", 0, "b");
		}
		
		//colored_print(id, "^x04[ZP]^x01 You have received a jetpack + tesla.");
	}
	
	if (itemid == g_item_unlimited)
	{
		if (!jetpack[id])
		{
			//colored_print(id, "^x04[ZP]^x01 To get infinite energy, first buy Jetpack + Tesla.");
			zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost_unlimited);
			
			return PLUGIN_HANDLED;
		}
		
		if (unlimited_energy[id])
		{
			//colored_print(id, "^x04[ZP]^x01 You already have this effect.");
			zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + cost_unlimited);
			
			return PLUGIN_HANDLED;
		}
		
		unlimited_energy[id] = true;
		
		//colored_print(id, "^x04[ZP]^x01 You have acquired endless energy.");
	}
	
	return PLUGIN_CONTINUE;
}

public regen_energy(taskid)
{
	new id = taskid - TASK_JET_REGEN_ENERGY;
	
	if (g_current_fuel[id] > get_pcvar_float(cvar_array[0]))
	{
		g_current_fuel[id] = get_pcvar_float(cvar_array[0]);
		
		return;
	}
	
	if (g_current_fuel[id] < get_pcvar_float(cvar_array[0]))
	{
		if (pev(id, pev_flags) & FL_ONGROUND)
			g_current_fuel[id] += get_pcvar_float(cvar_array[4]);
	}
	
	return;
}

public zp_user_infected_post(id, infector, nemesis)
{
	if (nemesis || zp_get_user_zombie(id))
		cmdDrop(id);
}

stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
{ 
	static Float:vfEnd[3], viEnd[3];
	get_user_origin(id, viEnd, 3) ;
	IVecFVec(viEnd, vfEnd);
	
	static Float:fOrigin[3], Float:fAngle[3];
	
	pev(id, pev_origin, fOrigin);
	pev(id, pev_view_ofs, fAngle);
	
	xs_vec_add(fOrigin, fAngle, fOrigin) ;
	
	static Float:fAttack[3];
	
	xs_vec_sub(vfEnd, fOrigin, fAttack);
	xs_vec_sub(vfEnd, fOrigin, fAttack);
	
	static Float:fRate;
	
	fRate = fDis / vector_length(fAttack);
	xs_vec_mul_scalar(fAttack, fRate, fAttack);
	
	xs_vec_add(fOrigin, fAttack, output);
}

stock get_Postion(id, Float:forw, Float:right, Float:up, Float:vStart[])
{
	static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
	
	pev(id, pev_origin, vOrigin);
	pev(id, pev_view_ofs,vUp);
	xs_vec_add(vOrigin,vUp,vOrigin);
	pev(id, pev_v_angle, vAngle);
	
	angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward);
	angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight);
	angle_vector(vAngle, ANGLEVECTOR_UP, vUp);
	
	vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up;
	vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up;
	vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up;
}

stock do_attack(Attacker, Victim, Inflictor, Float:fDamage)
{
	fake_take_damage(Attacker, Victim, fDamage, Inflictor);
}

stock fake_take_damage(iAttacker, iVictim, Float:fDamage, iInflictor = 0, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
{
	iInflictor = (!iInflictor) ? iAttacker : iInflictor;
	ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit);
}

stock vector_angle_up(target, Float:vec_min, Float:vec_max)
{
	new Float:vector[3];
	pev(target, pev_velocity, vector);
	vector[2] += random_float(vec_min, vec_max);
	set_pev(target, pev_velocity, vector);
}

public native_is_jet(id)
{
	return jetpack[id];
}
Nume: Jetpack+Tesla
Versiune: 1.6
Link oficial: -

Instalare:
1. Fisierul zombimod_extra_jetpack.sma il puneti in addons/amxmodx/scripting
2. Fisierul zombimod_extra_jetpack.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:

Code: Select all

zombimod_extra_jetpack.amxx
4. Alti pasi necesari....

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

Code: Select all

	cvar_array[0] = register_cvar("zp_jet_fuel", "100");
	cvar_array[1] = register_cvar("zp_jet_attack_damage_1", "250.0");
	cvar_array[2] = register_cvar("zp_jet_reload_attack_1", "1.0");
	cvar_array[3] = register_cvar("zp_jet_fuel_decrease_attack_1", "10");
	cvar_array[4] = register_cvar("zp_jet_regen_fuel", "1.5"); // 0.2 milisecond
	cvar_array[5] = register_cvar("zp_jet_reload_attack_2", "15.0");
	cvar_array[6] = register_cvar("zp_jet_attack_damage_2", "750.0");
	cvar_array[7] = register_cvar("zp_jet_fuel_decrease_attack_2", "50");
Video:
Image
Post Reply

Return to “AmxModX”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 9 guests