Raised This Month: $51 Target: $400
 12% 

Jetpack


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
strangeguy
Senior Member
Join Date: Mar 2019
Old 01-17-2021 , 08:06   Jetpack
Reply With Quote #1

Hello!

Someone can add that jetpack will disappear after new round? Like it will disappear from player and he need to buy new in extra items.

Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <zombieplague>
#include <xs>

//Uncomment this if your server is running ZP50 and above.
//#define UseZP50

#if defined UseZP50
	#tryinclude <zp50_core>
	#tryinclude <zp50_items>
	#tryinclude <zp50_ammopacks>
	#tryinclude <zp50_class_survivor>
#else
	#tryinclude <zombieplague>
#endif

new bool:bIsAlive[33], iGas[33], SprSmoke, iMaxClients, iItem
#define JpPower 400
#define JpUp 200.0
#define MaxGas 20
#define ClassnameJp "n4d_jetpack"
#define ModelJp "models/zs/p_jp2.mdl"
#define SoundFly "zs/fly2.wav"
#define SoundBlow "zs/blow.wav"
#define ItemName "ML_JETPACK"
#define ItemCost 50

public plugin_precache()
{
	SprSmoke = precache_model("sprites/smoke.spr")
	precache_model(ModelJp)
	precache_sound(SoundFly)
	precache_sound(SoundBlow)
}

public plugin_init()
{
	register_plugin(ItemName, "0.0.1", "wbyokomo")
	
	RegisterHam(Ham_Spawn, "player", "OnSpawnPost", 1)
	RegisterHam(Ham_Killed, "player", "OnKilled")
	register_forward(FM_ClientDisconnect, "OnClientDisconnect")
	register_think(ClassnameJp, "OnThinkJetPack")
	
	iMaxClients = get_maxplayers()
	
	#if defined UseZP50
	iItem = zp_items_register(ItemName, ItemCost)
	#else
	iItem = zp_register_extra_item(ItemName, ItemCost, ZP_TEAM_HUMAN)
	#endif
	
	register_clcmd("say /jp","CmdBuyJetPack")
	register_dictionary("zombie_plague.txt")
}

//this forward is from CSBot_Init API by PRoSToTeM@, see http://forums.alliedmods.net/showpost.php?p=2080292&postcount=15
public CSBot_Init(id)
{
	RegisterHamFromEntity(Ham_Spawn, id, "OnSpawnPost", 1)
	RegisterHamFromEntity(Ham_Killed, id, "OnKilled")
}

public OnClientDisconnect(id)
{
	bIsAlive[id] = false
	ResetJetPack(id)
}

public OnSpawnPost(id)
{
	if(!is_user_alive(id)) return;
	
	bIsAlive[id] = true
}

public OnKilled(id)
{
	bIsAlive[id] = false
	ResetJetPack(id)
}

public OnThinkJetPack(ent)
{
	if(ent < 1) return;
	
	static id; id = entity_get_edict(ent, EV_ENT_owner);
	if(!(1<=id<=iMaxClients)) return;
	if(!bIsAlive[id]) return;
	
	static button; button = entity_get_int(id, EV_INT_button);
	if((iGas[id] > 0) && (button & IN_DUCK) && (button & IN_JUMP))
	{
		static Float:Velocity[3], Float:Origin[3]
		velocity_by_aim(id, JpPower, Velocity)
		Velocity[2] = JpUp
		entity_set_vector(id, EV_VEC_velocity, Velocity)
		
		entity_get_vector(ent, EV_VEC_origin, Origin)
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
		write_byte(TE_BEAMFOLLOW)
		write_short(id)
		write_short(SprSmoke)
		write_byte(2)
		write_byte(7)
		write_byte(128)
		write_byte(32)
		write_byte(8)
		write_byte(192)
		message_end()
		
		iGas[id]--
		if(iGas[id] > 5) emit_sound(id, CHAN_WEAPON, SoundFly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		else emit_sound(id, CHAN_WEAPON, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
	}
	else
	{
		if((iGas[id] < MaxGas) && !(button & IN_DUCK) && !(button & IN_JUMP))
		{
			iGas[id]++
		}
	}
	
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1)
}

public CmdBuyJetPack(id)
{
	if(!bIsAlive[id]) return PLUGIN_HANDLED;
	
	#if defined UseZP50
	if(zp_core_is_zombie(id)) return PLUGIN_HANDLED;
	if(zp_class_survivor_get(id)) return PLUGIN_HANDLED;
	#else
	if(zp_get_user_zombie(id)) return PLUGIN_HANDLED;
	if(zp_get_user_survivor(id)) return PLUGIN_HANDLED;
	#endif
	
	static iAP
	#if defined UseZP50
	iAP = zp_ammopacks_get(id)
	#else
	iAP = zp_get_user_ammo_packs(id)
	#endif
	if(iAP < ItemCost) return PLUGIN_HANDLED;
	if(IsPlayerHasJetPack(id)) return PLUGIN_HANDLED;
	
	CreateJetPack(id)
	#if defined UseZP50
	zp_ammopacks_set(id, iAP-ItemCost)
	#else
	zp_set_user_ammo_packs(id, iAP-ItemCost)
	#endif
	client_print(id, print_chat, "[ZP] Kupiles JetPack, like a Boss. Przytrzymaj SKOK+KUCANIE aby poleciec.")
	
	return PLUGIN_HANDLED;
}

#if defined UseZP50
public zp_fw_items_select_pre(id, item, ignorecost)
{
	if(item != iItem) return ZP_ITEM_AVAILABLE;
	if(zp_core_is_zombie(id)) return ZP_ITEM_DONT_SHOW;
	if(IsPlayerHasJetPack(id)) return ZP_ITEM_NOT_AVAILABLE;
	
	return ZP_ITEM_AVAILABLE;
}

public zp_fw_items_select_post(id, item, ignorecost)
{
	if(item != iItem) return;
	
	CreateJetPack(id)
	client_print(id, print_chat, "[ZP] You just bought a JetPack, fly like a BOSS. Hold JUMP+DUCK to fly.")
}

public zp_fw_core_infect_post(id)
{
	ResetJetPack(id)
}

public zp_fw_core_cure_post(id)
{
	ResetJetPack(id)
}
#else
public zp_extra_item_selected(id, item)
{
	if(item == iItem)
	{
		if(IsPlayerHasJetPack(id)) return ZP_PLUGIN_HANDLED;
		
		CreateJetPack(id)
		client_print(id, print_chat, "[ZP] You just bought a JetPack, fly like a BOSS. Hold JUMP+DUCK to fly.")
	}
	
	return PLUGIN_CONTINUE;
}

public zp_user_infected_post(id)
{
	ResetJetPack(id)
}

public zp_user_humanized_post(id)
{
	ResetJetPack(id)
}
#endif

CreateJetPack(id)
{
	new ent = create_entity("info_target")
	if(ent < 1) return;
	
	new Float:Origin[3]
	entity_get_vector(id, EV_VEC_origin, Origin)
	entity_set_string(ent, EV_SZ_classname, ClassnameJp)
	entity_set_model(ent, ModelJp)
	entity_set_origin(ent, Origin)
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_FOLLOW)
	entity_set_edict(ent, EV_ENT_aiment, id)
	entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	entity_set_size(ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
	entity_set_edict(ent, EV_ENT_owner, id)
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1)
}

RemovePlayerJetPack(id)
{
	new ent = -1
	while((ent = find_ent_by_class(ent, ClassnameJp)))
	{
		if(entity_get_edict(ent, EV_ENT_owner) != id) continue;
		
		entity_set_float(ent, EV_FL_nextthink, 0.0)
		remove_entity(ent)
	}
}

IsPlayerHasJetPack(id)
{
	new ent = -1
	new bHasJP = 0
	while((ent = find_ent_by_class(ent, ClassnameJp)))
	{
		if(entity_get_edict(ent, EV_ENT_owner) == id)
		{
			bHasJP = 1
			break;
		}
	}
	
	return bHasJP;
}

ResetJetPack(id)
{
	iGas[id] = MaxGas
	RemovePlayerJetPack(id)
}
strangeguy is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 01-18-2021 , 00:28   Re: Jetpack
Reply With Quote #2

I can't thoroughly look through the code right now but I'd guess that you simply need to put ResetJetPack(id) in the OnSpawnPost(id) function after the alive check.
__________________
fysiks is online now
strangeguy
Senior Member
Join Date: Mar 2019
Old 01-18-2021 , 04:48   Re: Jetpack
Reply With Quote #3

I'm maked it like you say but it has no effect.

Code:
public OnSpawnPost(id)
{
        RemovePlayerJetPack(id)
	if(!is_user_alive(id)) return;
	
	bIsAlive[id] = true
}
strangeguy is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 01-18-2021 , 15:16   Re: Jetpack
Reply With Quote #4

I said to use ResetJetPack(id) and to put it after alive check, neither of which you did. Put ResetJetPack(id) after bIsAlive[id] = True.
__________________
fysiks is online now
strangeguy
Senior Member
Join Date: Mar 2019
Old 01-18-2021 , 18:52   Re: Jetpack
Reply With Quote #5

Sorry my mistake, now it's working. Thank you for help)
strangeguy is offline
stekiwnl
Junior Member
Join Date: May 2022
Old 07-09-2022 , 19:05   Re: Jetpack
Reply With Quote #6

Quote:
Originally Posted by fysiks View Post
I said to use ResetJetPack(id) and to put it after alive check, neither of which you did. Put ResetJetPack(id) after bIsAlive[id] = True.
Can you help me with my jetpack plugin aswell, I want the same thing, jetpack stay until round end, but my jetpack code is different
Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
native zp_get_user_zombie(id)
native zp_has_round_started()
native zp_register_extra_item(const name[], cost, teams)

new const ClassnameJetPack[] = "n4d_jetpack"
new const ClassnameRocket[] = "n4d_bazooka"
new const ModelVJetPack[] = "models/zp_apocalypse/v_thantos.mdl"
new const ModelPJetPack[] = "models/zp_apocalypse/p_thantos.mdl"
new const ModelWJetPack[] = "models/zp_apocalypse/w_thantos.mdl"
new const ModelRocket[] = "models/rpgrocket.mdl"
new const SoundPickup[] = "items/gunpickup2.wav"
new const SoundShoot[] = "zs/at4-1.wav"
new const SoundTravel[] = "zs/bfuu.wav"
new const SoundFly[] = "zs/fly.wav"
new const SoundBlow[] = "zs/blow.wav"

new bool:bHasJetPack[33]
new Float:fJetpackFuel[33]
new Float:fLastShoot[33]
new Float:fLastEffect[33]
new SprExp, SprTrail, ItemJetPack, iAllocInfoTarget, iMaxClients, MsgSayText
new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed
new Float:CMaxFuel, Float:CRadius, Float:CDamage, Float:CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed
#define IsPlayer(%0) (1<=%0<=iMaxClients)
#define ZP_TEAM_HUMAN (1<<1)
#define ZP_PLUGIN_HANDLED 97
#define PevEntType pev_flSwimTime
#define EntTypeJetPack 3904
#define EntTypeRocket 9340

//Uncomment this to draw ring effect
//#define DrawRing

//Uncomment this to draw flame effect
#define DrawFlame

#if defined DrawRing
new SprRing
#endif

#if defined DrawFlame
new SprFlame
#endif

public plugin_precache()
{
	precache_sound(SoundPickup)
	precache_sound(SoundShoot)
	precache_sound(SoundTravel)
	precache_sound(SoundFly)
	precache_sound(SoundBlow)
	
	SprExp = precache_model("sprites/zerogxplode.spr")
	SprTrail = precache_model("sprites/smoke.spr")
	
	#if defined DrawFlame
	SprFlame = precache_model("sprites/xfireball3.spr")
	#endif
	
	#if defined DrawRing
	SprRing = precache_model("sprites/shockwave.spr")
	#endif
	
	precache_model(ModelVJetPack)
	precache_model(ModelPJetPack)
	precache_model(ModelWJetPack)
	precache_model(ModelRocket)
}

public plugin_init()
{
	register_plugin("New Jetpack", "0.0.1", "Bad_Bud,wbyokomo")
	
	register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
	register_logevent("OnRoundEnd", 2, "1=Round_End")
	
	RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
	
	register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
	register_forward(FM_ClientDisconnect, "OnClientDisconnect")
	register_forward(FM_Touch, "OnTouch")
	
	CvarMaxFuel = register_cvar("jp_maxfuel", "300.0")
	CvarRadius = register_cvar("jp_radius", "650.0")
	CvarDamage = register_cvar("jp_damage", "1000.0")
	CvarSpeed = register_cvar("jp_speed", "300.0")
	CvarCooldown = register_cvar("jp_cooldown", "10.0")
	CvarRegen = register_cvar("jp_regen", "0.3")
	CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
	
	iMaxClients = get_maxplayers()
	MsgSayText = get_user_msgid("SayText")
	ItemJetPack = zp_register_extra_item("\r[Item] \wJetPack+Bazooka", 90, ZP_TEAM_HUMAN)
}

public plugin_cfg()
{
	iAllocInfoTarget = engfunc(EngFunc_AllocString, "info_target")
}

public client_putinserver(id)
{
	ResetValues(id)
}

public OnClientDisconnect(id)
{
	ResetValues(id)
}

public OnNewRound()
{
	RemoveAllJetPack()
	CMaxFuel = get_pcvar_float(CvarMaxFuel)
	CRadius = get_pcvar_float(CvarRadius)
	CDamage = get_pcvar_float(CvarDamage)
	CSpeed = get_pcvar_float(CvarSpeed)
	CCooldown = get_pcvar_float(CvarCooldown)
	CRegen = get_pcvar_float(CvarRegen)
	CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
}

public OnRoundEnd()
{
	RemoveAllJetPack()
}

public OnPlayerKilled(id)
{
	if(bHasJetPack[id]) //DropJetPack(id);
	
	ResetValues(id)
}

public zp_user_infected_pre(id)
{
	if(bHasJetPack[id]) //DropJetPack(id);
	
	ResetValues(id)
}

public zp_extra_item_selected(id, item)
{
	if(item == ItemJetPack)
	{
		if(bHasJetPack[id])
		{
			//zp_colored_print(id, "^x04[ZP]^x01 You already have this item.")
			return ZP_PLUGIN_HANDLED;
		}
		if (!zp_has_round_started())
		{
			zp_colored_print(id, "^x04[ZP]^x01 Wait for the round to begin!")
			return ZP_PLUGIN_HANDLED
		}
		bHasJetPack[id] = true
		//zp_colored_print(id, "^x04[ZP]^x01 You just bought a^x04 JetPack^x01, enjoy flying & killing zombies.")
		engclient_cmd(id, "weapon_knife")
	}
	
	return PLUGIN_CONTINUE;
}

public OnKnifeDeployPost(ent)
{
	if(pev_valid(ent) == 2)
	{
		static id; id = get_pdata_cbase(ent, 41, 4)
		if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
	}
}

public OnPlayerPreThink(id)
{	
	if(bHasJetPack[id])
	{
		static button, flag, Float:ctime, weapon
		button = pev(id, pev_button)
		flag = pev(id, pev_flags)
		ctime = get_gametime()
		weapon = get_user_weapon(id)
		
		if((weapon == CSW_KNIFE) && (button & IN_ATTACK2) && (fLastShoot[id] < ctime))
		{
			new ent = engfunc(EngFunc_CreateNamedEntity, iAllocInfoTarget)
			if(ent)
			{				
				set_pev(ent, pev_classname, ClassnameRocket)
				engfunc(EngFunc_SetModel, ent, ModelRocket)
				static Float:vecSrc[3]
				pev(id, pev_origin, vecSrc)
				vecSrc[2] += 16.0
				engfunc(EngFunc_SetOrigin, ent, vecSrc)
				set_pev(ent, pev_movetype, MOVETYPE_FLY)
				set_pev(ent, pev_solid, SOLID_BBOX)
				set_pev(ent, pev_effects, EF_LIGHT)
				engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
				set_pev(ent, pev_owner, id)
				static Float:vecVelocity[3]
				velocity_by_aim(id, CRocketSpeed, vecVelocity)
				set_pev(ent, pev_velocity, vecVelocity)
				static Float:vecAngles[3]
				engfunc(EngFunc_VecToAngles, vecVelocity, vecAngles)
				set_pev(ent, pev_angles, vecAngles)
				set_pev(ent, PevEntType, EntTypeRocket)
				
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
				write_byte(TE_BEAMFOLLOW)
				write_short(ent)
				write_short(SprTrail)
				write_byte(40)
				write_byte(5)
				write_byte(224)
				write_byte(224)
				write_byte(255)
				write_byte(192)
				message_end()
				
				emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
				emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
				fLastShoot[id] = ctime+CCooldown
			}
			else
			{
				fLastShoot[id] = ctime+1.5
			}
		}
		
		if((weapon == CSW_KNIFE) && (button & IN_DUCK) && (button & IN_JUMP) && !(flag & FL_ONGROUND) && (fJetpackFuel[id] > 0.0))
		{
			static Float:vVelocity[3], Float:vAngles[3], Float:vForward[3]
			pev(id, pev_velocity, vVelocity)
			pev(id, pev_angles, vAngles)
			vAngles[2] = 0.0
			angle_vector(vAngles, ANGLEVECTOR_FORWARD, vForward)
			vAngles = vForward
			vAngles[0] *= CSpeed
			vAngles[1] *= CSpeed
			vVelocity[0] = vAngles[0]
			vVelocity[1] = vAngles[1]
			if(vVelocity[2] < 300.0) vVelocity[2] += 35.0;
			set_pev(id, pev_velocity, vVelocity)
			
			if(fLastEffect[id] < ctime)
			{
				#if defined DrawFlame
				static Float:vOrigin[3]
				pev(id, pev_origin, vOrigin)
				engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0)
				write_byte(TE_SPRITE)
				engfunc(EngFunc_WriteCoord, vOrigin[0])
				engfunc(EngFunc_WriteCoord, vOrigin[1])
				engfunc(EngFunc_WriteCoord, vOrigin[2])
				write_short(SprFlame)
				write_byte(8)
				write_byte(128)
				message_end()
				#endif
				
				if(fJetpackFuel[id] > 80.0) emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM);
				else emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
				
				fLastEffect[id] = ctime+0.2
			}
			
			fJetpackFuel[id] -= 1.0
		}
		else if(!(button & IN_DUCK) && !(button & IN_JUMP) && fJetpackFuel[id] < CMaxFuel) fJetpackFuel[id] += CRegen;
	}
}

public OnTouch(ent, id)
{
	if(pev_valid(ent))
	{
		if(pev(ent, PevEntType) == EntTypeJetPack)
		{
			if(IsPlayer(id) && is_user_alive(id) && !zp_get_user_zombie(id) && !bHasJetPack[id])
			{
				engfunc(EngFunc_RemoveEntity, ent)
				bHasJetPack[id] = true
				emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
				engclient_cmd(id,"weapon_knife")
				ReplaceModel(id)
			}
		}
		else if(pev(ent, PevEntType) == EntTypeRocket)
		{
			static Float:fOrigin[3]
			pev(ent, pev_origin, fOrigin)
			
			engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
			write_byte(TE_EXPLOSION)
			engfunc(EngFunc_WriteCoord, fOrigin[0])
			engfunc(EngFunc_WriteCoord, fOrigin[1])
			engfunc(EngFunc_WriteCoord, fOrigin[2])
			write_short(SprExp)
			write_byte(40)
			write_byte(30)
			write_byte(10)
			message_end()
			
			#if defined DrawRing
			engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
			write_byte(TE_BEAMCYLINDER)
			engfunc(EngFunc_WriteCoord, fOrigin[0])
			engfunc(EngFunc_WriteCoord, fOrigin[1])
			engfunc(EngFunc_WriteCoord, fOrigin[2])
			engfunc(EngFunc_WriteCoord, fOrigin[0])
			engfunc(EngFunc_WriteCoord, fOrigin[1])
			engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
			write_short(SprRing)
			write_byte(0)
			write_byte(1)
			write_byte(6)
			write_byte(8)
			write_byte(10)
			write_byte(224)
			write_byte(224)
			write_byte(255)
			write_byte(192)
			write_byte(5)
			message_end()
			#endif
			
			static attacker; attacker = pev(ent, pev_owner)
			if(!is_user_connected(attacker))
			{
				engfunc(EngFunc_RemoveEntity, ent)
				return FMRES_IGNORED;
			}
			
			if(pev_valid(id) && !is_user_connected(id))
			{
				static szClassname[32]
				pev(id, pev_classname, szClassname, 31)
				if(equal(szClassname, "func_breakable") && (pev(id, pev_solid) != SOLID_NOT))
				{
					dllfunc(DLLFunc_Use, id, ent)
				}
			}
			
			static victim; victim = -1
			while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
			{
				if(is_user_alive(victim) && zp_get_user_zombie(victim))
				{
					static Float:originV[3], Float:dist, Float:damage
					pev(victim, pev_origin, originV)
					dist = get_distance_f(fOrigin, originV)
					damage = CDamage-(CDamage/CRadius)*dist
					if(damage > 0.0)
					{
						ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
						//client_print(attacker, print_chat, "[JpDebug] Rocket damage: %.1f", damage)
					}
				}
			}
			
			engfunc(EngFunc_RemoveEntity, ent)
		}
	}
	
	return FMRES_IGNORED;
}

ReplaceModel(id)
{
	set_pev(id, pev_viewmodel2, ModelVJetPack)
	set_pev(id, pev_weaponmodel2, ModelPJetPack)
}

RemoveAllJetPack()
{
	new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
	while(ent > 0)
	{
		engfunc(EngFunc_RemoveEntity, ent)
		ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
	}
}

ResetValues(id)
{
	bHasJetPack[id] = false
	fJetpackFuel[id] = get_pcvar_float(CvarMaxFuel)
}

zp_colored_print(target, const message[], any:...)
{
	static buffer[512], i, argscount
	argscount = numargs()
	
	if (!target)
	{
		static iPlayers[32], iNum, j, player
		get_players(iPlayers, iNum, "ch")
		for (j = 0; j < iNum; j++)
		{
			player = iPlayers[j]
			static changed[5], changedcount
			changedcount = 0
			
			for (i = 2; i < argscount; i++)
			{
				if (getarg(i) == LANG_PLAYER)
				{
					setarg(i, 0, player)
					changed[changedcount] = i
					changedcount++
				}
			}
			
			vformat(buffer, charsmax(buffer), message, 3)
			message_begin(MSG_ONE_UNRELIABLE, MsgSayText, _, player)
			write_byte(player)
			write_string(buffer)
			message_end()
			
			for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER);
		}
	}
	else
	{
		vformat(buffer, charsmax(buffer), message, 3)
		message_begin(MSG_ONE, MsgSayText, _, target)
		write_byte(target)
		write_string(buffer)
		message_end()
	}
}
stekiwnl is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 07-09-2022 , 21:14   Re: Jetpack
Reply With Quote #7

I think you should be able to simply add this code in the OnNewRound() function:

PHP Code:
    for( new 133i++ )
    {
        
ResetValues(i)
    } 
Try it out and see if it does what you're wanting.
__________________
fysiks is online now
stekiwnl
Junior Member
Join Date: May 2022
Old 07-10-2022 , 11:43   Re: Jetpack
Reply With Quote #8

Quote:
Originally Posted by fysiks View Post
I think you should be able to simply add this code in the OnNewRound() function:

PHP Code:
    for( new 133i++ )
    {
        
ResetValues(i)
    } 
Try it out and see if it does what you're wanting.
Thank you so much brother, works perfect <3
stekiwnl is offline
stekiwnl
Junior Member
Join Date: May 2022
Old 07-10-2022 , 19:33   Re: Jetpack
Reply With Quote #9

Quote:
Originally Posted by fysiks View Post
Try it out and see if it does what you're wanting.
Can you help me with another zombie plague human class plugin
I want when player choose class he cannot chose another class or cannot open the menu until new round
Code:
#include <amxmodx>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <zp_apocalypse>

#define HM1_FLAG ADMIN_BAN
#define HM2_FLAG ADMIN_KICK
#define HM3_FLAG ADMIN_CHAT
#define HM4_FLAG ADMIN_SLAY
#define HM5_FLAG ADMIN_VOTE

const PRIMARY_WEAPONS_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)


//new g_ent_playermodel[33];
new g_ent_weaponmodel[33];
new g_currentweapon[33];

new g_player_class[33]

public plugin_init()
{
	register_plugin("[ZP] Addon: Human Classes", "1.3", "fiendshard")
	register_clcmd("say /hm", "ClCmdSelectModel")
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	static weapon
	weapon = get_msg_arg_int(2)
	g_currentweapon[msg_entity] = weapon
	fm_set_weaponmodel_ent(msg_entity)
}


public ClCmdSelectModel(id, menuid)
{
	if(zp_get_user_zombie(id) || zp_has_round_started() || zp_get_user_assassin(id) || zp_get_user_nemesis(id) || zp_get_user_sniper(id) || zp_get_user_survivor(id))
	{
		return PLUGIN_HANDLED;
	}
	
	else if(!is_user_alive(id))
	{
		return PLUGIN_HANDLED;
	}
	else
	{
		human_menu(id)
	}
	return PLUGIN_CONTINUE;
}

public human_menu(id)
{
	new menu = menu_create("\yChoose Human Class", "human_menu_handler")
	menu_additem(menu, "\wArmorer \y(+500 Armor)", "1", 0)
	menu_additem(menu, "\wPounder \y(+300 HP)", "2", 0)
	menu_additem(menu, "\wJumper \y(Low Gravity)", "3", 0)
	menu_additem(menu, "\wFrost Soldier \y(x5 Frost Nades)", "4", 0)
	menu_additem(menu, "\Firebat \y(x5 Napalm Nades)", "5", 0)
	menu_setprop(menu,MPROP_EXITNAME,"Exit");
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
	menu_display(id, menu, 0)
	
}
public human_menu_handler(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new data[6], iName[64]
	new access, callback
	menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
	new key = str_to_num(data)
	switch(key)
	{
		case 1:
		{
			if(!(get_user_flags(id) & HM1_FLAG)) {
			client_print(id, print_chat, "You don't have access to this class!")
			return PLUGIN_HANDLED;
			}
			if(zp_get_user_zombie(id) || zp_get_user_survivor(id) || zp_get_user_sniper(id) || zp_get_user_assassin(id) || zp_get_user_nemesis(id)) return PLUGIN_HANDLED;
			g_player_class[id] = 1
			set_user_armor(id, 500)
			client_print(id, print_chat,"[ZP] Your selected Class is: Armored (500 Armor)")
		}
		case 2:
		{
			if(!(get_user_flags(id) & HM2_FLAG)) {
			client_print(id, print_chat, "You don't have access to this class!")
			return PLUGIN_HANDLED;
			}
			if(zp_get_user_zombie(id) || zp_get_user_survivor(id) || zp_get_user_sniper(id) || zp_get_user_assassin(id) || zp_get_user_nemesis(id)) return PLUGIN_HANDLED;
			g_player_class[id] = 2
			set_user_health(id, 300)
			client_print(id, print_chat,"[ZP] Your selected Class is: Pounder (300 HP)");
		}
		case 3: 
		{
			if(!(get_user_flags(id) & HM3_FLAG)) {
			client_print(id, print_chat, "You don't have access to this class!")
			return PLUGIN_HANDLED;
			}
			if(zp_get_user_zombie(id) || zp_get_user_survivor(id) || zp_get_user_sniper(id) || zp_get_user_assassin(id) || zp_get_user_nemesis(id)) return PLUGIN_HANDLED;
			g_player_class[id] = 3
			set_user_gravity(id, 0.50)
			client_print(id, print_chat,"[ZP] Your selected Class is: Jumper (Low Gravity)");
		}
		case 4: 
		{
			if(!(get_user_flags(id) & HM4_FLAG)) {
			client_print(id, print_chat, "You don't have access to this class!")
			return PLUGIN_HANDLED;
			}
			if(zp_get_user_zombie(id) || zp_get_user_survivor(id) || zp_get_user_sniper(id) || zp_get_user_assassin(id) || zp_get_user_nemesis(id)) return PLUGIN_HANDLED;
			g_player_class[id] = 4
			cs_set_user_bpammo(id, CSW_FLASHBANG, 5)
			client_print(id, print_chat,"[ZP] Your selected Class is: Frost Soldier (x5 Frost Nades)");
		}
		case 5: 
		{
			if(!(get_user_flags(id) & HM5_FLAG)) {
			client_print(id, print_chat, "You don't have access to this class!")
			return PLUGIN_HANDLED;
			}
			if(zp_get_user_zombie(id) || zp_get_user_survivor(id) || zp_get_user_sniper(id) || zp_get_user_assassin(id) || zp_get_user_nemesis(id)) return PLUGIN_HANDLED;
			g_player_class[id] = 5
			cs_set_user_bpammo(id, CSW_HEGRENADE, 5)
			client_print(id, print_chat,"[ZP] Your selected Class is: Firebat (x5 Napalm Nades)")
		}
	}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public zp_user_infected_post(id, infector)
{
	fm_remove_model_ents(id)
}

stock fm_remove_model_ents(id)
{
	if (pev_valid(g_ent_weaponmodel[id]))
	{
		engfunc(EngFunc_RemoveEntity, g_ent_weaponmodel[id])
		g_ent_weaponmodel[id] = 0
	}
}

stock fm_set_weaponmodel_ent(id)
{
	static model[100]
	pev(id, pev_weaponmodel2, model, sizeof model - 1)
	
	if (!pev_valid(g_ent_weaponmodel[id]))
	{
		g_ent_weaponmodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
		if (!pev_valid(g_ent_weaponmodel[id])) return;
		
		set_pev(g_ent_weaponmodel[id], pev_classname, "weapon_model")
		set_pev(g_ent_weaponmodel[id], pev_movetype, MOVETYPE_FOLLOW)
		set_pev(g_ent_weaponmodel[id], pev_aiment, id)
		set_pev(g_ent_weaponmodel[id], pev_owner, id)
	}
	
	engfunc(EngFunc_SetModel, g_ent_weaponmodel[id], model)
}

stock drop_primary_weapons(id)	
{
	static weapons [ 32 ], num, i, weaponid
	num = 0 
	get_user_weapons (id, weapons, num )
	
	for ( i = 0; i < num; i++ )
	{
		weaponid = weapons [ i ]
		if  ( ( (1<<weaponid) & PRIMARY_WEAPONS_BITSUM ) )		
		{
			static wname[32]
			get_weaponname(weaponid, wname, charsmax(wname))
			engclient_cmd(id, "drop", wname)
		}
	}
}
stekiwnl is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 07-10-2022 , 21:14   Re: Jetpack
Reply With Quote #10

New topic, new thread.
__________________
fysiks is online now
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:59.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode