Available extra item

Unpaid Requests, Public Plugins
Post Reply
czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

extra item

#1

Post by czirimbolo » 5 years ago

Can some help me to convert this?

Code: Select all

#include <zombie_escape>
#include <engine>

#define JETPACK_COST 1000

new const ClassInfoTarget[] = "info_target"
new const ClassBreakAble[] = "func_breakable"
new const ClassnameJetPack[] = "n4d_jetpack"
new const ClassnameRocket[] = "n4d_bazooka"
new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
new const ModelRocket[] = "models/rpgrocket.mdl"
new const SoundPickup[] = "items/gunpickup2.wav"
new const SoundShoot[] = "mu/at4-1.wav"
new const SoundTravel[] = "mu/bfuu.wav"
new const SoundFly[] = "mu/fly.wav"
new const SoundBlow[] = "mu/blow.wav"

new bool:bHasJetPack[33]
new Float:fJetpackFuel[33]
new Float:fLastShoot[33]
new SprExp, SprTrail, ItemJetPack, MsgSayText
new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
#define ZP_TEAM_HUMAN (1<<1)
#define ZP_PLUGIN_HANDLED 97

//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.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
	
	register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
	register_logevent("OnRoundEnd", 2, "1=Round_End")
	
	RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
	RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
	RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
	RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
	
	register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
	
	register_touch(ClassnameRocket, "*", "OnTouchRocket")
	register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
	register_think(ClassnameJetPack, "OnThinkJetPack")
	
	CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
	CvarRadius = register_cvar("jp_radius", "250.0")
	CvarDamage = register_cvar("jp_damage", "600.0")
	CvarSpeed = register_cvar("jp_speed", "300")
	CvarCooldown = register_cvar("jp_cooldown", "10.0")
	CvarRegen = register_cvar("jp_regen", "0.5")
	CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
	CvarRemove = register_cvar("jp_remove_time", "420.0")
	
	MsgSayText = get_user_msgid("SayText")
	ItemJetPack = ze_register_item("Jetpack", 1000, 0)
	
	register_clcmd("drop", "CmdDropJP")
}

public client_putinserver(id)
{
	ResetValues(id)
}

public client_disconnected(id)
{
	ResetValues(id)
}

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

public OnRoundEnd()
{
	RemoveAllJetPack()
}

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

public OnPlayerJump(id)
{
	if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
	{
		static Float:vVelocity[3], Float:upSpeed
		pev(id, pev_velocity, vVelocity)
		upSpeed = vVelocity[2] + 35.0
		velocity_by_aim(id, CSpeed, vVelocity)
		vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
		set_pev(id, pev_velocity, vVelocity)
		
		#if defined DrawFlame
		pev(id, pev_origin, vVelocity)
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
		write_byte(TE_SPRITE)
		engfunc(EngFunc_WriteCoord, vVelocity[0])
		engfunc(EngFunc_WriteCoord, vVelocity[1])
		engfunc(EngFunc_WriteCoord, vVelocity[2])
		write_short(SprFlame)
		write_byte(8)
		write_byte(128)
		message_end()
		#endif
		
		fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		fJetpackFuel[id] -= 1.0
	}
}

public ze_select_item_pre(id, itemid)
{
    // Return Available and we will block it in Post, So it dosen't affect other plugins
    if (itemid != ItemJetPack)
        return ZE_ITEM_AVAILABLE
   
    // Available for Humans only, So don't show it for zombies
    if (ze_is_user_zombie(id))
        return ZE_ITEM_DONT_SHOW
   
    return ZE_ITEM_AVAILABLE
}


public ze_select_item_post(id, item)
{
	if(item == ItemJetPack)
	{
		if(bHasJetPack[id])
		{
			ze_colored_print(id, "You already have this item.")
			return ZP_PLUGIN_HANDLED;
		}
		
		bHasJetPack[id] = true
		ze_colored_print(id, "JetPack usage: JUMP+DUCK")
		engclient_cmd(id, "weapon_knife")
		ReplaceModel(id)
	}
	
	return PLUGIN_CONTINUE;
}

public OnKnifeSecAtkPost(ent2)
{
	if(pev_valid(ent2) == 2)
	{
		static id, Float:ctime
		id = get_pdata_cbase(ent2, 41, 4)
		ctime = get_gametime()
		if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
		{
			new ent = create_entity(ClassInfoTarget)
			if(ent)
			{
				engfunc(EngFunc_SetModel, ent, ModelRocket)
				engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
				new Float:fOrigin[3]
				pev(id, pev_origin, fOrigin)
				fOrigin[2] += 16.0
				engfunc(EngFunc_SetOrigin, ent, fOrigin)
				set_pev(ent, pev_classname, ClassnameRocket)
				set_pev(ent, pev_dmg, 100.0)
				set_pev(ent, pev_owner, id)
				velocity_by_aim(id, CRocketSpeed, fOrigin)
				set_pev(ent, pev_velocity, fOrigin)
				new Float:vecAngles[3]
				engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
				set_pev(ent, pev_angles, vecAngles)	
				set_pev(ent, pev_movetype, MOVETYPE_FLY)
				set_pev(ent, pev_effects, EF_LIGHT)
				set_pev(ent, pev_solid, SOLID_BBOX)
				
				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)
				
				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()
				
				fLastShoot[id] = ctime+CCooldown
			}
			else
			{
				client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
				fLastShoot[id] = ctime+1.5
			}
		}
	}
}

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] && fJetpackFuel[id] < CMaxFuel)
	{
		static button; button = pev(id, pev_button)
		if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
	}
}

public OnTouchRocket(ent, id)
{
	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 PLUGIN_CONTINUE;
	}
	
	if(pev_valid(id) && !is_user_connected(id))
	{
		static szClassname[32]
		pev(id, pev_classname, szClassname, 31)
		if(equal(szClassname, ClassBreakAble) && (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) && ze_is_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, "[Jp] Rocket damage: %.1f", damage)
			}
		}
	}
	
	engfunc(EngFunc_RemoveEntity, ent)
	
	return PLUGIN_CONTINUE;
}

public OnTouchJetPack(ent, id)
{
	if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_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)
	}
}

public OnThinkJetPack(ent)
{
	if(pev_valid(ent) == 2)
	{
		switch(pev(ent, pev_flTimeStepSound))
		{
			case 200:
			{
				set_pev(ent, pev_iuser4, 22222)
				set_pev(ent, pev_flTimeStepSound, 201)
				set_pev(ent, pev_nextthink, get_gametime()+CRemove)
			}
			case 201:
			{
				engfunc(EngFunc_RemoveEntity, ent)
			}
		}
	}
}

public CmdDropJP(id)
{
	if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
	{
		DropJetPack(id)
		bHasJetPack[id] = false
		set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
		set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
		return PLUGIN_HANDLED;
	}
	
	return PLUGIN_CONTINUE;
}

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

DropJetPack(id)
{
	new ent = create_entity(ClassInfoTarget)
	if(!ent) return;
	
	engfunc(EngFunc_SetModel, ent, ModelWJetPack)
	engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
	new Float:fOrigin[3]
	pev(id, pev_origin, fOrigin)
	fOrigin[2] += 16.0
	engfunc(EngFunc_SetOrigin, ent, fOrigin)
	set_pev(ent, pev_classname, ClassnameJetPack)
	velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
	set_pev(ent, pev_velocity, fOrigin)	
	set_pev(ent, pev_movetype, MOVETYPE_TOSS)
	set_pev(ent, pev_effects, EF_LIGHT)
	set_pev(ent, pev_iuser4, 11111)
	set_pev(ent, pev_solid, SOLID_TRIGGER)
	set_pev(ent, pev_flTimeStepSound, 200)
	set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
}

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] = CMaxFuel
}

ze_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()
	}
}
//// jetpack.sma
//
// C:\Users\macie\Documents\Compiler v1.8.3\scripting\jetpack.sma(440) : error 025: function heading differs from prototype
// C:\Users\macie\Documents\Compiler v1.8.3\scripting\jetpack.sma(441) : error 021: symbol already defined: "ze_colored_print"
//
// 2 Errors.
Image

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#2

Post by Night Fury » 5 years ago

  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26.  
  27. //Uncomment this to draw ring effect
  28. //#define DrawRing
  29.  
  30. //Uncomment this to draw flame effect
  31. //#define DrawFlame
  32.  
  33. #if defined DrawRing
  34. new SprRing
  35. #endif
  36.  
  37. #if defined DrawFlame
  38. new SprFlame
  39. #endif
  40.  
  41. public plugin_precache()
  42. {
  43.     precache_sound(SoundPickup)
  44.     precache_sound(SoundShoot)
  45.     precache_sound(SoundTravel)
  46.     precache_sound(SoundFly)
  47.     precache_sound(SoundBlow)
  48.    
  49.     SprExp = precache_model("sprites/zerogxplode.spr")
  50.     SprTrail = precache_model("sprites/smoke.spr")
  51.    
  52.     #if defined DrawFlame
  53.     SprFlame = precache_model("sprites/xfireball3.spr")
  54.     #endif
  55.    
  56.     #if defined DrawRing
  57.     SprRing = precache_model("sprites/shockwave.spr")
  58.     #endif
  59.    
  60.     precache_model(ModelVJetPack)
  61.     precache_model(ModelPJetPack)
  62.     precache_model(ModelWJetPack)
  63.     precache_model(ModelRocket)
  64. }
  65.  
  66. public plugin_init()
  67. {
  68.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  69.    
  70.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  71.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  72.    
  73.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  74.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  75.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  76.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  77.    
  78.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  79.    
  80.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  81.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  82.     register_think(ClassnameJetPack, "OnThinkJetPack")
  83.    
  84.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  85.     CvarRadius = register_cvar("jp_radius", "250.0")
  86.     CvarDamage = register_cvar("jp_damage", "600.0")
  87.     CvarSpeed = register_cvar("jp_speed", "300")
  88.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  89.     CvarRegen = register_cvar("jp_regen", "0.5")
  90.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  91.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  92.  
  93.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  94.    
  95.     register_clcmd("drop", "CmdDropJP")
  96. }
  97.  
  98. public client_putinserver(id)
  99. {
  100.     ResetValues(id)
  101. }
  102.  
  103. public client_disconnected(id)
  104. {
  105.     ResetValues(id)
  106. }
  107.  
  108. public OnNewRound()
  109. {
  110.     RemoveAllJetPack()
  111.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  112.     CRadius = get_pcvar_float(CvarRadius)
  113.     CDamage = get_pcvar_float(CvarDamage)
  114.     CSpeed = get_pcvar_num(CvarSpeed)
  115.     CCooldown = get_pcvar_float(CvarCooldown)
  116.     CRegen = get_pcvar_float(CvarRegen)
  117.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  118.     CRemove = get_pcvar_float(CvarRemove)
  119. }
  120.  
  121. public OnRoundEnd()
  122. {
  123.     RemoveAllJetPack()
  124. }
  125.  
  126. public OnPlayerKilled(id)
  127. {
  128.     if(bHasJetPack[id]) DropJetPack(id);
  129.    
  130.     ResetValues(id)
  131. }
  132.  
  133. public OnPlayerJump(id)
  134. {
  135.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  136.     {
  137.         static Float:vVelocity[3], Float:upSpeed
  138.         pev(id, pev_velocity, vVelocity)
  139.         upSpeed = vVelocity[2] + 35.0
  140.         velocity_by_aim(id, CSpeed, vVelocity)
  141.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  142.         set_pev(id, pev_velocity, vVelocity)
  143.        
  144.         #if defined DrawFlame
  145.         pev(id, pev_origin, vVelocity)
  146.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  147.         write_byte(TE_SPRITE)
  148.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  149.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  150.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  151.         write_short(SprFlame)
  152.         write_byte(8)
  153.         write_byte(128)
  154.         message_end()
  155.         #endif
  156.        
  157.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  158.         fJetpackFuel[id] -= 1.0
  159.     }
  160. }
  161.  
  162. public ze_select_item_pre(id, itemid)
  163. {
  164.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  165.     if (itemid != ItemJetPack)
  166.         return ZE_ITEM_AVAILABLE
  167.    
  168.     // Available for Humans only, So don't show it for zombies
  169.     if (ze_is_user_zombie(id))
  170.         return ZE_ITEM_DONT_SHOW
  171.  
  172.     if (bHasJetPack[id])
  173.         return ZE_ITEM_UNAVAILABLE
  174.    
  175.     return ZE_ITEM_AVAILABLE
  176. }
  177.  
  178.  
  179. public ze_select_item_post(id, item)
  180. {
  181.     if (item == ItemJetPack)
  182.     {
  183.         bHasJetPack[id] = true
  184.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  185.         engclient_cmd(id, "weapon_knife")
  186.         ReplaceModel(id)
  187.     }
  188. }
  189.  
  190. public OnKnifeSecAtkPost(ent2)
  191. {
  192.     if(pev_valid(ent2) == 2)
  193.     {
  194.         static id, Float:ctime
  195.         id = get_pdata_cbase(ent2, 41, 4)
  196.         ctime = get_gametime()
  197.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  198.         {
  199.             new ent = create_entity(ClassInfoTarget)
  200.             if(ent)
  201.             {
  202.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  203.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  204.                 new Float:fOrigin[3]
  205.                 pev(id, pev_origin, fOrigin)
  206.                 fOrigin[2] += 16.0
  207.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  208.                 set_pev(ent, pev_classname, ClassnameRocket)
  209.                 set_pev(ent, pev_dmg, 100.0)
  210.                 set_pev(ent, pev_owner, id)
  211.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  212.                 set_pev(ent, pev_velocity, fOrigin)
  213.                 new Float:vecAngles[3]
  214.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  215.                 set_pev(ent, pev_angles, vecAngles)
  216.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  217.                 set_pev(ent, pev_effects, EF_LIGHT)
  218.                 set_pev(ent, pev_solid, SOLID_BBOX)
  219.                
  220.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  221.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  222.                
  223.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  224.                 write_byte(TE_BEAMFOLLOW)
  225.                 write_short(ent)
  226.                 write_short(SprTrail)
  227.                 write_byte(40)
  228.                 write_byte(5)
  229.                 write_byte(224)
  230.                 write_byte(224)
  231.                 write_byte(255)
  232.                 write_byte(192)
  233.                 message_end()
  234.                
  235.                 fLastShoot[id] = ctime+CCooldown
  236.             }
  237.             else
  238.             {
  239.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  240.                 fLastShoot[id] = ctime+1.5
  241.             }
  242.         }
  243.     }
  244. }
  245.  
  246. public OnKnifeDeployPost(ent)
  247. {
  248.     if(pev_valid(ent) == 2)
  249.     {
  250.         static id; id = get_pdata_cbase(ent, 41, 4)
  251.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  252.     }
  253. }
  254.  
  255. public OnPlayerPreThink(id)
  256. {
  257.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  258.     {
  259.         static button; button = pev(id, pev_button)
  260.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  261.     }
  262. }
  263.  
  264. public OnTouchRocket(ent, id)
  265. {
  266.     static Float:fOrigin[3]
  267.     pev(ent, pev_origin, fOrigin)
  268.    
  269.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  270.     write_byte(TE_EXPLOSION)
  271.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  272.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  273.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  274.     write_short(SprExp)
  275.     write_byte(40)
  276.     write_byte(30)
  277.     write_byte(10)
  278.     message_end()
  279.    
  280.     #if defined DrawRing
  281.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  282.     write_byte(TE_BEAMCYLINDER)
  283.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  284.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  285.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  286.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  287.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  288.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  289.     write_short(SprRing)
  290.     write_byte(0)
  291.     write_byte(1)
  292.     write_byte(6)
  293.     write_byte(8)
  294.     write_byte(10)
  295.     write_byte(224)
  296.     write_byte(224)
  297.     write_byte(255)
  298.     write_byte(192)
  299.     write_byte(5)
  300.     message_end()
  301.     #endif
  302.    
  303.     static attacker; attacker = pev(ent, pev_owner)
  304.     if(!is_user_connected(attacker))
  305.     {
  306.         engfunc(EngFunc_RemoveEntity, ent)
  307.         return PLUGIN_CONTINUE;
  308.     }
  309.    
  310.     if(pev_valid(id) && !is_user_connected(id))
  311.     {
  312.         static szClassname[32]
  313.         pev(id, pev_classname, szClassname, 31)
  314.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  315.         {
  316.             dllfunc(DLLFunc_Use, id, ent)
  317.         }
  318.     }
  319.    
  320.     static victim; victim = -1
  321.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  322.     {
  323.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  324.         {
  325.             static Float:originV[3], Float:dist, Float:damage
  326.             pev(victim, pev_origin, originV)
  327.             dist = get_distance_f(fOrigin, originV)
  328.             damage = CDamage-(CDamage/CRadius)*dist
  329.             if(damage > 0.0)
  330.             {
  331.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  332.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  333.             }
  334.         }
  335.     }
  336.    
  337.     engfunc(EngFunc_RemoveEntity, ent)
  338.    
  339.     return PLUGIN_CONTINUE;
  340. }
  341.  
  342. public OnTouchJetPack(ent, id)
  343. {
  344.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  345.     {
  346.         engfunc(EngFunc_RemoveEntity, ent)
  347.         bHasJetPack[id] = true
  348.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  349.         engclient_cmd(id,"weapon_knife")
  350.         ReplaceModel(id)
  351.     }
  352. }
  353.  
  354. public OnThinkJetPack(ent)
  355. {
  356.     if(pev_valid(ent) == 2)
  357.     {
  358.         switch(pev(ent, pev_flTimeStepSound))
  359.         {
  360.             case 200:
  361.             {
  362.                 set_pev(ent, pev_iuser4, 22222)
  363.                 set_pev(ent, pev_flTimeStepSound, 201)
  364.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  365.             }
  366.             case 201:
  367.             {
  368.                 engfunc(EngFunc_RemoveEntity, ent)
  369.             }
  370.         }
  371.     }
  372. }
  373.  
  374. public CmdDropJP(id)
  375. {
  376.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  377.     {
  378.         DropJetPack(id)
  379.         bHasJetPack[id] = false
  380.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  381.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  382.         return PLUGIN_HANDLED;
  383.     }
  384.    
  385.     return PLUGIN_CONTINUE;
  386. }
  387.  
  388. ReplaceModel(id)
  389. {
  390.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  391.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  392. }
  393.  
  394. DropJetPack(id)
  395. {
  396.     new ent = create_entity(ClassInfoTarget)
  397.     if(!ent) return;
  398.    
  399.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  400.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  401.     new Float:fOrigin[3]
  402.     pev(id, pev_origin, fOrigin)
  403.     fOrigin[2] += 16.0
  404.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  405.     set_pev(ent, pev_classname, ClassnameJetPack)
  406.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  407.     set_pev(ent, pev_velocity, fOrigin)
  408.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  409.     set_pev(ent, pev_effects, EF_LIGHT)
  410.     set_pev(ent, pev_iuser4, 11111)
  411.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  412.     set_pev(ent, pev_flTimeStepSound, 200)
  413.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  414. }
  415.  
  416. RemoveAllJetPack()
  417. {
  418.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  419.     while(ent > 0)
  420.     {
  421.         engfunc(EngFunc_RemoveEntity, ent)
  422.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  423.     }
  424. }
  425.  
  426. ResetValues(id)
  427. {
  428.     bHasJetPack[id] = false
  429.     fJetpackFuel[id] = CMaxFuel
  430. }
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#3

Post by czirimbolo » 5 years ago

Thanks jack its working, but can you also block this weapon for zombies? Or tell me what I should add to code. When I get infected, I am a zombie with jetpack :)
Image

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#4

Post by Mark » 5 years ago

czirimbolo wrote: 5 years ago Thanks jack its working, but can you also block this weapon for zombies? Or tell me what I should add to code. When I get infected, I am a zombie with jetpack :)
Try!
  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26.  
  27. //Uncomment this to draw ring effect
  28. //#define DrawRing
  29.  
  30. //Uncomment this to draw flame effect
  31. //#define DrawFlame
  32.  
  33. #if defined DrawRing
  34. new SprRing
  35. #endif
  36.  
  37. #if defined DrawFlame
  38. new SprFlame
  39. #endif
  40.  
  41. public plugin_precache()
  42. {
  43.     precache_sound(SoundPickup)
  44.     precache_sound(SoundShoot)
  45.     precache_sound(SoundTravel)
  46.     precache_sound(SoundFly)
  47.     precache_sound(SoundBlow)
  48.    
  49.     SprExp = precache_model("sprites/zerogxplode.spr")
  50.     SprTrail = precache_model("sprites/smoke.spr")
  51.    
  52.     #if defined DrawFlame
  53.     SprFlame = precache_model("sprites/xfireball3.spr")
  54.     #endif
  55.    
  56.     #if defined DrawRing
  57.     SprRing = precache_model("sprites/shockwave.spr")
  58.     #endif
  59.    
  60.     precache_model(ModelVJetPack)
  61.     precache_model(ModelPJetPack)
  62.     precache_model(ModelWJetPack)
  63.     precache_model(ModelRocket)
  64. }
  65.  
  66. public plugin_init()
  67. {
  68.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  69.    
  70.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  71.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  72.    
  73.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  74.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  75.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  76.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  77.    
  78.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  79.    
  80.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  81.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  82.     register_think(ClassnameJetPack, "OnThinkJetPack")
  83.    
  84.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  85.     CvarRadius = register_cvar("jp_radius", "250.0")
  86.     CvarDamage = register_cvar("jp_damage", "600.0")
  87.     CvarSpeed = register_cvar("jp_speed", "300")
  88.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  89.     CvarRegen = register_cvar("jp_regen", "0.5")
  90.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  91.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  92.  
  93.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  94.    
  95.     register_clcmd("drop", "CmdDropJP")
  96. }
  97.  
  98. public client_putinserver(id)
  99. {
  100.     ResetValues(id)
  101. }
  102.  
  103. public ze_user_infected(iVictim)
  104. {
  105.     ResetValues(iVictim)
  106. }
  107.  
  108. public client_disconnected(id)
  109. {
  110.     ResetValues(id)
  111. }
  112.  
  113. public OnNewRound()
  114. {
  115.     RemoveAllJetPack()
  116.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  117.     CRadius = get_pcvar_float(CvarRadius)
  118.     CDamage = get_pcvar_float(CvarDamage)
  119.     CSpeed = get_pcvar_num(CvarSpeed)
  120.     CCooldown = get_pcvar_float(CvarCooldown)
  121.     CRegen = get_pcvar_float(CvarRegen)
  122.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  123.     CRemove = get_pcvar_float(CvarRemove)
  124. }
  125.  
  126. public OnRoundEnd()
  127. {
  128.     RemoveAllJetPack()
  129. }
  130.  
  131. public OnPlayerKilled(id)
  132. {
  133.     if(bHasJetPack[id]) DropJetPack(id);
  134.    
  135.     ResetValues(id)
  136. }
  137.  
  138. public OnPlayerJump(id)
  139. {
  140.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  141.     {
  142.         static Float:vVelocity[3], Float:upSpeed
  143.         pev(id, pev_velocity, vVelocity)
  144.         upSpeed = vVelocity[2] + 35.0
  145.         velocity_by_aim(id, CSpeed, vVelocity)
  146.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  147.         set_pev(id, pev_velocity, vVelocity)
  148.        
  149.         #if defined DrawFlame
  150.         pev(id, pev_origin, vVelocity)
  151.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  152.         write_byte(TE_SPRITE)
  153.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  154.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  155.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  156.         write_short(SprFlame)
  157.         write_byte(8)
  158.         write_byte(128)
  159.         message_end()
  160.         #endif
  161.        
  162.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  163.         fJetpackFuel[id] -= 1.0
  164.     }
  165. }
  166.  
  167. public ze_select_item_pre(id, itemid)
  168. {
  169.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  170.     if (itemid != ItemJetPack)
  171.         return ZE_ITEM_AVAILABLE
  172.    
  173.     // Available for Humans only, So don't show it for zombies
  174.     if (ze_is_user_zombie(id))
  175.         return ZE_ITEM_DONT_SHOW
  176.  
  177.     if (bHasJetPack[id])
  178.         return ZE_ITEM_UNAVAILABLE
  179.    
  180.     return ZE_ITEM_AVAILABLE
  181. }
  182.  
  183.  
  184. public ze_select_item_post(id, item)
  185. {
  186.     if (item == ItemJetPack)
  187.     {
  188.         bHasJetPack[id] = true
  189.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  190.         engclient_cmd(id, "weapon_knife")
  191.         ReplaceModel(id)
  192.     }
  193. }
  194.  
  195. public OnKnifeSecAtkPost(ent2)
  196. {
  197.     if(pev_valid(ent2) == 2)
  198.     {
  199.         static id, Float:ctime
  200.         id = get_pdata_cbase(ent2, 41, 4)
  201.         ctime = get_gametime()
  202.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  203.         {
  204.             new ent = create_entity(ClassInfoTarget)
  205.             if(ent)
  206.             {
  207.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  208.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  209.                 new Float:fOrigin[3]
  210.                 pev(id, pev_origin, fOrigin)
  211.                 fOrigin[2] += 16.0
  212.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  213.                 set_pev(ent, pev_classname, ClassnameRocket)
  214.                 set_pev(ent, pev_dmg, 100.0)
  215.                 set_pev(ent, pev_owner, id)
  216.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  217.                 set_pev(ent, pev_velocity, fOrigin)
  218.                 new Float:vecAngles[3]
  219.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  220.                 set_pev(ent, pev_angles, vecAngles)
  221.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  222.                 set_pev(ent, pev_effects, EF_LIGHT)
  223.                 set_pev(ent, pev_solid, SOLID_BBOX)
  224.                
  225.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  226.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  227.                
  228.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  229.                 write_byte(TE_BEAMFOLLOW)
  230.                 write_short(ent)
  231.                 write_short(SprTrail)
  232.                 write_byte(40)
  233.                 write_byte(5)
  234.                 write_byte(224)
  235.                 write_byte(224)
  236.                 write_byte(255)
  237.                 write_byte(192)
  238.                 message_end()
  239.                
  240.                 fLastShoot[id] = ctime+CCooldown
  241.             }
  242.             else
  243.             {
  244.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  245.                 fLastShoot[id] = ctime+1.5
  246.             }
  247.         }
  248.     }
  249. }
  250.  
  251. public OnKnifeDeployPost(ent)
  252. {
  253.     if(pev_valid(ent) == 2)
  254.     {
  255.         static id; id = get_pdata_cbase(ent, 41, 4)
  256.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  257.     }
  258. }
  259.  
  260. public OnPlayerPreThink(id)
  261. {
  262.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  263.     {
  264.         static button; button = pev(id, pev_button)
  265.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  266.     }
  267. }
  268.  
  269. public OnTouchRocket(ent, id)
  270. {
  271.     static Float:fOrigin[3]
  272.     pev(ent, pev_origin, fOrigin)
  273.    
  274.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  275.     write_byte(TE_EXPLOSION)
  276.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  277.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  278.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  279.     write_short(SprExp)
  280.     write_byte(40)
  281.     write_byte(30)
  282.     write_byte(10)
  283.     message_end()
  284.    
  285.     #if defined DrawRing
  286.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  287.     write_byte(TE_BEAMCYLINDER)
  288.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  289.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  290.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  291.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  292.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  293.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  294.     write_short(SprRing)
  295.     write_byte(0)
  296.     write_byte(1)
  297.     write_byte(6)
  298.     write_byte(8)
  299.     write_byte(10)
  300.     write_byte(224)
  301.     write_byte(224)
  302.     write_byte(255)
  303.     write_byte(192)
  304.     write_byte(5)
  305.     message_end()
  306.     #endif
  307.    
  308.     static attacker; attacker = pev(ent, pev_owner)
  309.     if(!is_user_connected(attacker))
  310.     {
  311.         engfunc(EngFunc_RemoveEntity, ent)
  312.         return PLUGIN_CONTINUE;
  313.     }
  314.    
  315.     if(pev_valid(id) && !is_user_connected(id))
  316.     {
  317.         static szClassname[32]
  318.         pev(id, pev_classname, szClassname, 31)
  319.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  320.         {
  321.             dllfunc(DLLFunc_Use, id, ent)
  322.         }
  323.     }
  324.    
  325.     static victim; victim = -1
  326.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  327.     {
  328.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  329.         {
  330.             static Float:originV[3], Float:dist, Float:damage
  331.             pev(victim, pev_origin, originV)
  332.             dist = get_distance_f(fOrigin, originV)
  333.             damage = CDamage-(CDamage/CRadius)*dist
  334.             if(damage > 0.0)
  335.             {
  336.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  337.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  338.             }
  339.         }
  340.     }
  341.    
  342.     engfunc(EngFunc_RemoveEntity, ent)
  343.    
  344.     return PLUGIN_CONTINUE;
  345. }
  346.  
  347. public OnTouchJetPack(ent, id)
  348. {
  349.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  350.     {
  351.         engfunc(EngFunc_RemoveEntity, ent)
  352.         bHasJetPack[id] = true
  353.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  354.         engclient_cmd(id,"weapon_knife")
  355.         ReplaceModel(id)
  356.     }
  357. }
  358.  
  359. public OnThinkJetPack(ent)
  360. {
  361.     if(pev_valid(ent) == 2)
  362.     {
  363.         switch(pev(ent, pev_flTimeStepSound))
  364.         {
  365.             case 200:
  366.             {
  367.                 set_pev(ent, pev_iuser4, 22222)
  368.                 set_pev(ent, pev_flTimeStepSound, 201)
  369.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  370.             }
  371.             case 201:
  372.             {
  373.                 engfunc(EngFunc_RemoveEntity, ent)
  374.             }
  375.         }
  376.     }
  377. }
  378.  
  379. public CmdDropJP(id)
  380. {
  381.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  382.     {
  383.         DropJetPack(id)
  384.         bHasJetPack[id] = false
  385.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  386.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  387.         return PLUGIN_HANDLED;
  388.     }
  389.    
  390.     return PLUGIN_CONTINUE;
  391. }
  392.  
  393. ReplaceModel(id)
  394. {
  395.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  396.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  397. }
  398.  
  399. DropJetPack(id)
  400. {
  401.     new ent = create_entity(ClassInfoTarget)
  402.     if(!ent) return;
  403.    
  404.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  405.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  406.     new Float:fOrigin[3]
  407.     pev(id, pev_origin, fOrigin)
  408.     fOrigin[2] += 16.0
  409.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  410.     set_pev(ent, pev_classname, ClassnameJetPack)
  411.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  412.     set_pev(ent, pev_velocity, fOrigin)
  413.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  414.     set_pev(ent, pev_effects, EF_LIGHT)
  415.     set_pev(ent, pev_iuser4, 11111)
  416.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  417.     set_pev(ent, pev_flTimeStepSound, 200)
  418.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  419. }
  420.  
  421. RemoveAllJetPack()
  422. {
  423.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  424.     while(ent > 0)
  425.     {
  426.         engfunc(EngFunc_RemoveEntity, ent)
  427.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  428.     }
  429. }
  430.  
  431. ResetValues(id)
  432. {
  433.     bHasJetPack[id] = false
  434.     fJetpackFuel[id] = CMaxFuel
  435. }

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#5

Post by czirimbolo » 5 years ago

Thanks, one more thing, can you make it for 1 round only? and make it working after 20 seconds?
Image

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#6

Post by Mark » 5 years ago

czirimbolo wrote: 5 years ago Thanks, one more thing, can you make it for 1 round only? and make it working after 20 seconds?
1 time a round or 1 time a map.

Working for 20 seconds after what? Not sure what you mean?

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#7

Post by czirimbolo » 5 years ago

1 time per round, and I want to block buying this item in first 20 seconds of the round
Image

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#8

Post by Mark » 5 years ago

czirimbolo wrote: 5 years ago 1 time per round, and I want to block buying this item in first 20 seconds of the round
Let me know if this works for one round ill think how todo the time. Maybe we do it on zombie Choosen?
  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack, g_iUsedTimes[33], g_pCvarUseTimes
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26.  
  27. //Uncomment this to draw ring effect
  28. //#define DrawRing
  29.  
  30. //Uncomment this to draw flame effect
  31. //#define DrawFlame
  32.  
  33. #if defined DrawRing
  34. new SprRing
  35. #endif
  36.  
  37. #if defined DrawFlame
  38. new SprFlame
  39. #endif
  40.  
  41. public plugin_precache()
  42. {
  43.     precache_sound(SoundPickup)
  44.     precache_sound(SoundShoot)
  45.     precache_sound(SoundTravel)
  46.     precache_sound(SoundFly)
  47.     precache_sound(SoundBlow)
  48.    
  49.     SprExp = precache_model("sprites/zerogxplode.spr")
  50.     SprTrail = precache_model("sprites/smoke.spr")
  51.    
  52.     #if defined DrawFlame
  53.     SprFlame = precache_model("sprites/xfireball3.spr")
  54.     #endif
  55.    
  56.     #if defined DrawRing
  57.     SprRing = precache_model("sprites/shockwave.spr")
  58.     #endif
  59.    
  60.     precache_model(ModelVJetPack)
  61.     precache_model(ModelPJetPack)
  62.     precache_model(ModelWJetPack)
  63.     precache_model(ModelRocket)
  64. }
  65.  
  66. public plugin_init()
  67. {
  68.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  69.    
  70.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  71.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  72.    
  73.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  74.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  75.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  76.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  77.    
  78.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  79.    
  80.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  81.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  82.     register_think(ClassnameJetPack, "OnThinkJetPack")
  83.    
  84.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  85.     CvarRadius = register_cvar("jp_radius", "250.0")
  86.     CvarDamage = register_cvar("jp_damage", "600.0")
  87.     CvarSpeed = register_cvar("jp_speed", "300")
  88.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  89.     CvarRegen = register_cvar("jp_regen", "0.5")
  90.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  91.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  92.    
  93.     g_pCvarUseTimes = register_cvar("ze_jetpack_uses", "1")
  94.  
  95.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  96.    
  97.     register_clcmd("drop", "CmdDropJP")
  98. }
  99.  
  100. public client_putinserver(id)
  101. {
  102.     ResetValues(id)
  103. }
  104.  
  105. public ze_user_humanized(id)
  106. {
  107.     g_iUsedTimes[id] = 0
  108. }
  109.  
  110. public ze_user_infected(iVictim)
  111. {
  112.     ResetValues(iVictim)
  113. }
  114.  
  115. public client_disconnected(id)
  116. {
  117.     ResetValues(id)
  118.     g_iUsedTimes[id] = 0
  119. }
  120.  
  121. public OnNewRound()
  122. {
  123.     RemoveAllJetPack()
  124.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  125.     CRadius = get_pcvar_float(CvarRadius)
  126.     CDamage = get_pcvar_float(CvarDamage)
  127.     CSpeed = get_pcvar_num(CvarSpeed)
  128.     CCooldown = get_pcvar_float(CvarCooldown)
  129.     CRegen = get_pcvar_float(CvarRegen)
  130.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  131.     CRemove = get_pcvar_float(CvarRemove)
  132. }
  133.  
  134. public OnRoundEnd()
  135. {
  136.     RemoveAllJetPack()
  137. }
  138.  
  139. public OnPlayerKilled(id)
  140. {
  141.     if(bHasJetPack[id]) DropJetPack(id);
  142.    
  143.     ResetValues(id)
  144. }
  145.  
  146. public OnPlayerJump(id)
  147. {
  148.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  149.     {
  150.         static Float:vVelocity[3], Float:upSpeed
  151.         pev(id, pev_velocity, vVelocity)
  152.         upSpeed = vVelocity[2] + 35.0
  153.         velocity_by_aim(id, CSpeed, vVelocity)
  154.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  155.         set_pev(id, pev_velocity, vVelocity)
  156.        
  157.         #if defined DrawFlame
  158.         pev(id, pev_origin, vVelocity)
  159.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  160.         write_byte(TE_SPRITE)
  161.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  162.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  163.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  164.         write_short(SprFlame)
  165.         write_byte(8)
  166.         write_byte(128)
  167.         message_end()
  168.         #endif
  169.        
  170.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  171.         fJetpackFuel[id] -= 1.0
  172.     }
  173. }
  174.  
  175. public ze_select_item_pre(id, itemid)
  176. {
  177.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  178.     if (itemid != ItemJetPack)
  179.         return ZE_ITEM_AVAILABLE
  180.    
  181.     // Available for Humans only, So don't show it for zombies
  182.     if (ze_is_user_zombie(id))
  183.         return ZE_ITEM_DONT_SHOW
  184.  
  185.     if (bHasJetPack[id])
  186.         return ZE_ITEM_UNAVAILABLE
  187.    
  188.     return ZE_ITEM_AVAILABLE
  189. }
  190.  
  191.  
  192. public ze_select_item_post(id, item)
  193. {
  194.     if (g_iUsedTimes[id] >= get_pcvar_num(g_pCvarUseTimes))
  195.     {
  196.         ze_colored_print(id, "!tYou can only open Jet Pack !y[!g%dx!y] per round!", get_pcvar_num(g_pCvarUseTimes))
  197.         return PLUGIN_HANDLED
  198.     }
  199.    
  200.     if (item == ItemJetPack)
  201.     {
  202.         bHasJetPack[id] = true
  203.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  204.         engclient_cmd(id, "weapon_knife")
  205.         ReplaceModel(id)
  206.         g_iUsedTimes[id]++
  207.     }
  208.  
  209.     return PLUGIN_CONTINUE
  210. }
  211.  
  212. public OnKnifeSecAtkPost(ent2)
  213. {
  214.     if(pev_valid(ent2) == 2)
  215.     {
  216.         static id, Float:ctime
  217.         id = get_pdata_cbase(ent2, 41, 4)
  218.         ctime = get_gametime()
  219.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  220.         {
  221.             new ent = create_entity(ClassInfoTarget)
  222.             if(ent)
  223.             {
  224.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  225.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  226.                 new Float:fOrigin[3]
  227.                 pev(id, pev_origin, fOrigin)
  228.                 fOrigin[2] += 16.0
  229.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  230.                 set_pev(ent, pev_classname, ClassnameRocket)
  231.                 set_pev(ent, pev_dmg, 100.0)
  232.                 set_pev(ent, pev_owner, id)
  233.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  234.                 set_pev(ent, pev_velocity, fOrigin)
  235.                 new Float:vecAngles[3]
  236.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  237.                 set_pev(ent, pev_angles, vecAngles)
  238.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  239.                 set_pev(ent, pev_effects, EF_LIGHT)
  240.                 set_pev(ent, pev_solid, SOLID_BBOX)
  241.                
  242.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  243.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  244.                
  245.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  246.                 write_byte(TE_BEAMFOLLOW)
  247.                 write_short(ent)
  248.                 write_short(SprTrail)
  249.                 write_byte(40)
  250.                 write_byte(5)
  251.                 write_byte(224)
  252.                 write_byte(224)
  253.                 write_byte(255)
  254.                 write_byte(192)
  255.                 message_end()
  256.                
  257.                 fLastShoot[id] = ctime+CCooldown
  258.             }
  259.             else
  260.             {
  261.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  262.                 fLastShoot[id] = ctime+1.5
  263.             }
  264.         }
  265.     }
  266. }
  267.  
  268. public OnKnifeDeployPost(ent)
  269. {
  270.     if(pev_valid(ent) == 2)
  271.     {
  272.         static id; id = get_pdata_cbase(ent, 41, 4)
  273.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  274.     }
  275. }
  276.  
  277. public OnPlayerPreThink(id)
  278. {
  279.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  280.     {
  281.         static button; button = pev(id, pev_button)
  282.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  283.     }
  284. }
  285.  
  286. public OnTouchRocket(ent, id)
  287. {
  288.     static Float:fOrigin[3]
  289.     pev(ent, pev_origin, fOrigin)
  290.    
  291.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  292.     write_byte(TE_EXPLOSION)
  293.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  294.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  295.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  296.     write_short(SprExp)
  297.     write_byte(40)
  298.     write_byte(30)
  299.     write_byte(10)
  300.     message_end()
  301.    
  302.     #if defined DrawRing
  303.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  304.     write_byte(TE_BEAMCYLINDER)
  305.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  306.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  307.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  308.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  309.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  310.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  311.     write_short(SprRing)
  312.     write_byte(0)
  313.     write_byte(1)
  314.     write_byte(6)
  315.     write_byte(8)
  316.     write_byte(10)
  317.     write_byte(224)
  318.     write_byte(224)
  319.     write_byte(255)
  320.     write_byte(192)
  321.     write_byte(5)
  322.     message_end()
  323.     #endif
  324.    
  325.     static attacker; attacker = pev(ent, pev_owner)
  326.     if(!is_user_connected(attacker))
  327.     {
  328.         engfunc(EngFunc_RemoveEntity, ent)
  329.         return PLUGIN_CONTINUE;
  330.     }
  331.    
  332.     if(pev_valid(id) && !is_user_connected(id))
  333.     {
  334.         static szClassname[32]
  335.         pev(id, pev_classname, szClassname, 31)
  336.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  337.         {
  338.             dllfunc(DLLFunc_Use, id, ent)
  339.         }
  340.     }
  341.    
  342.     static victim; victim = -1
  343.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  344.     {
  345.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  346.         {
  347.             static Float:originV[3], Float:dist, Float:damage
  348.             pev(victim, pev_origin, originV)
  349.             dist = get_distance_f(fOrigin, originV)
  350.             damage = CDamage-(CDamage/CRadius)*dist
  351.             if(damage > 0.0)
  352.             {
  353.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  354.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  355.             }
  356.         }
  357.     }
  358.    
  359.     engfunc(EngFunc_RemoveEntity, ent)
  360.    
  361.     return PLUGIN_CONTINUE;
  362. }
  363.  
  364. public OnTouchJetPack(ent, id)
  365. {
  366.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  367.     {
  368.         engfunc(EngFunc_RemoveEntity, ent)
  369.         bHasJetPack[id] = true
  370.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  371.         engclient_cmd(id,"weapon_knife")
  372.         ReplaceModel(id)
  373.     }
  374. }
  375.  
  376. public OnThinkJetPack(ent)
  377. {
  378.     if(pev_valid(ent) == 2)
  379.     {
  380.         switch(pev(ent, pev_flTimeStepSound))
  381.         {
  382.             case 200:
  383.             {
  384.                 set_pev(ent, pev_iuser4, 22222)
  385.                 set_pev(ent, pev_flTimeStepSound, 201)
  386.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  387.             }
  388.             case 201:
  389.             {
  390.                 engfunc(EngFunc_RemoveEntity, ent)
  391.             }
  392.         }
  393.     }
  394. }
  395.  
  396. public CmdDropJP(id)
  397. {
  398.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  399.     {
  400.         DropJetPack(id)
  401.         bHasJetPack[id] = false
  402.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  403.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  404.         return PLUGIN_HANDLED;
  405.     }
  406.    
  407.     return PLUGIN_CONTINUE;
  408. }
  409.  
  410. ReplaceModel(id)
  411. {
  412.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  413.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  414. }
  415.  
  416. DropJetPack(id)
  417. {
  418.     new ent = create_entity(ClassInfoTarget)
  419.     if(!ent) return;
  420.    
  421.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  422.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  423.     new Float:fOrigin[3]
  424.     pev(id, pev_origin, fOrigin)
  425.     fOrigin[2] += 16.0
  426.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  427.     set_pev(ent, pev_classname, ClassnameJetPack)
  428.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  429.     set_pev(ent, pev_velocity, fOrigin)
  430.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  431.     set_pev(ent, pev_effects, EF_LIGHT)
  432.     set_pev(ent, pev_iuser4, 11111)
  433.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  434.     set_pev(ent, pev_flTimeStepSound, 200)
  435.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  436. }
  437.  
  438. RemoveAllJetPack()
  439. {
  440.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  441.     while(ent > 0)
  442.     {
  443.         engfunc(EngFunc_RemoveEntity, ent)
  444.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  445.     }
  446. }
  447.  
  448. ResetValues(id)
  449. {
  450.     bHasJetPack[id] = false
  451.     fJetpackFuel[id] = CMaxFuel
  452. }

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#9

Post by Raheem » 5 years ago

Mark wrote: 5 years ago Let me know if this works for one round ill think how todo the time. Maybe we do it on zombie Choosen?
  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack, g_iUsedTimes[33], g_pCvarUseTimes
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26.  
  27. //Uncomment this to draw ring effect
  28. //#define DrawRing
  29.  
  30. //Uncomment this to draw flame effect
  31. //#define DrawFlame
  32.  
  33. #if defined DrawRing
  34. new SprRing
  35. #endif
  36.  
  37. #if defined DrawFlame
  38. new SprFlame
  39. #endif
  40.  
  41. public plugin_precache()
  42. {
  43.     precache_sound(SoundPickup)
  44.     precache_sound(SoundShoot)
  45.     precache_sound(SoundTravel)
  46.     precache_sound(SoundFly)
  47.     precache_sound(SoundBlow)
  48.    
  49.     SprExp = precache_model("sprites/zerogxplode.spr")
  50.     SprTrail = precache_model("sprites/smoke.spr")
  51.    
  52.     #if defined DrawFlame
  53.     SprFlame = precache_model("sprites/xfireball3.spr")
  54.     #endif
  55.    
  56.     #if defined DrawRing
  57.     SprRing = precache_model("sprites/shockwave.spr")
  58.     #endif
  59.    
  60.     precache_model(ModelVJetPack)
  61.     precache_model(ModelPJetPack)
  62.     precache_model(ModelWJetPack)
  63.     precache_model(ModelRocket)
  64. }
  65.  
  66. public plugin_init()
  67. {
  68.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  69.    
  70.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  71.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  72.    
  73.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  74.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  75.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  76.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  77.    
  78.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  79.    
  80.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  81.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  82.     register_think(ClassnameJetPack, "OnThinkJetPack")
  83.    
  84.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  85.     CvarRadius = register_cvar("jp_radius", "250.0")
  86.     CvarDamage = register_cvar("jp_damage", "600.0")
  87.     CvarSpeed = register_cvar("jp_speed", "300")
  88.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  89.     CvarRegen = register_cvar("jp_regen", "0.5")
  90.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  91.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  92.    
  93.     g_pCvarUseTimes = register_cvar("ze_jetpack_uses", "1")
  94.  
  95.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  96.    
  97.     register_clcmd("drop", "CmdDropJP")
  98. }
  99.  
  100. public client_putinserver(id)
  101. {
  102.     ResetValues(id)
  103. }
  104.  
  105. public ze_user_humanized(id)
  106. {
  107.     g_iUsedTimes[id] = 0
  108. }
  109.  
  110. public ze_user_infected(iVictim)
  111. {
  112.     ResetValues(iVictim)
  113. }
  114.  
  115. public client_disconnected(id)
  116. {
  117.     ResetValues(id)
  118.     g_iUsedTimes[id] = 0
  119. }
  120.  
  121. public OnNewRound()
  122. {
  123.     RemoveAllJetPack()
  124.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  125.     CRadius = get_pcvar_float(CvarRadius)
  126.     CDamage = get_pcvar_float(CvarDamage)
  127.     CSpeed = get_pcvar_num(CvarSpeed)
  128.     CCooldown = get_pcvar_float(CvarCooldown)
  129.     CRegen = get_pcvar_float(CvarRegen)
  130.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  131.     CRemove = get_pcvar_float(CvarRemove)
  132. }
  133.  
  134. public OnRoundEnd()
  135. {
  136.     RemoveAllJetPack()
  137. }
  138.  
  139. public OnPlayerKilled(id)
  140. {
  141.     if(bHasJetPack[id]) DropJetPack(id);
  142.    
  143.     ResetValues(id)
  144. }
  145.  
  146. public OnPlayerJump(id)
  147. {
  148.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  149.     {
  150.         static Float:vVelocity[3], Float:upSpeed
  151.         pev(id, pev_velocity, vVelocity)
  152.         upSpeed = vVelocity[2] + 35.0
  153.         velocity_by_aim(id, CSpeed, vVelocity)
  154.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  155.         set_pev(id, pev_velocity, vVelocity)
  156.        
  157.         #if defined DrawFlame
  158.         pev(id, pev_origin, vVelocity)
  159.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  160.         write_byte(TE_SPRITE)
  161.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  162.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  163.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  164.         write_short(SprFlame)
  165.         write_byte(8)
  166.         write_byte(128)
  167.         message_end()
  168.         #endif
  169.        
  170.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  171.         fJetpackFuel[id] -= 1.0
  172.     }
  173. }
  174.  
  175. public ze_select_item_pre(id, itemid)
  176. {
  177.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  178.     if (itemid != ItemJetPack)
  179.         return ZE_ITEM_AVAILABLE
  180.    
  181.     // Available for Humans only, So don't show it for zombies
  182.     if (ze_is_user_zombie(id))
  183.         return ZE_ITEM_DONT_SHOW
  184.  
  185.     if (bHasJetPack[id])
  186.         return ZE_ITEM_UNAVAILABLE
  187.    
  188.     return ZE_ITEM_AVAILABLE
  189. }
  190.  
  191.  
  192. public ze_select_item_post(id, item)
  193. {
  194.     if (g_iUsedTimes[id] >= get_pcvar_num(g_pCvarUseTimes))
  195.     {
  196.         ze_colored_print(id, "!tYou can only open Jet Pack !y[!g%dx!y] per round!", get_pcvar_num(g_pCvarUseTimes))
  197.         return PLUGIN_HANDLED
  198.     }
  199.    
  200.     if (item == ItemJetPack)
  201.     {
  202.         bHasJetPack[id] = true
  203.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  204.         engclient_cmd(id, "weapon_knife")
  205.         ReplaceModel(id)
  206.         g_iUsedTimes[id]++
  207.     }
  208.  
  209.     return PLUGIN_CONTINUE
  210. }
  211.  
  212. public OnKnifeSecAtkPost(ent2)
  213. {
  214.     if(pev_valid(ent2) == 2)
  215.     {
  216.         static id, Float:ctime
  217.         id = get_pdata_cbase(ent2, 41, 4)
  218.         ctime = get_gametime()
  219.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  220.         {
  221.             new ent = create_entity(ClassInfoTarget)
  222.             if(ent)
  223.             {
  224.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  225.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  226.                 new Float:fOrigin[3]
  227.                 pev(id, pev_origin, fOrigin)
  228.                 fOrigin[2] += 16.0
  229.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  230.                 set_pev(ent, pev_classname, ClassnameRocket)
  231.                 set_pev(ent, pev_dmg, 100.0)
  232.                 set_pev(ent, pev_owner, id)
  233.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  234.                 set_pev(ent, pev_velocity, fOrigin)
  235.                 new Float:vecAngles[3]
  236.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  237.                 set_pev(ent, pev_angles, vecAngles)
  238.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  239.                 set_pev(ent, pev_effects, EF_LIGHT)
  240.                 set_pev(ent, pev_solid, SOLID_BBOX)
  241.                
  242.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  243.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  244.                
  245.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  246.                 write_byte(TE_BEAMFOLLOW)
  247.                 write_short(ent)
  248.                 write_short(SprTrail)
  249.                 write_byte(40)
  250.                 write_byte(5)
  251.                 write_byte(224)
  252.                 write_byte(224)
  253.                 write_byte(255)
  254.                 write_byte(192)
  255.                 message_end()
  256.                
  257.                 fLastShoot[id] = ctime+CCooldown
  258.             }
  259.             else
  260.             {
  261.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  262.                 fLastShoot[id] = ctime+1.5
  263.             }
  264.         }
  265.     }
  266. }
  267.  
  268. public OnKnifeDeployPost(ent)
  269. {
  270.     if(pev_valid(ent) == 2)
  271.     {
  272.         static id; id = get_pdata_cbase(ent, 41, 4)
  273.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  274.     }
  275. }
  276.  
  277. public OnPlayerPreThink(id)
  278. {
  279.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  280.     {
  281.         static button; button = pev(id, pev_button)
  282.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  283.     }
  284. }
  285.  
  286. public OnTouchRocket(ent, id)
  287. {
  288.     static Float:fOrigin[3]
  289.     pev(ent, pev_origin, fOrigin)
  290.    
  291.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  292.     write_byte(TE_EXPLOSION)
  293.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  294.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  295.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  296.     write_short(SprExp)
  297.     write_byte(40)
  298.     write_byte(30)
  299.     write_byte(10)
  300.     message_end()
  301.    
  302.     #if defined DrawRing
  303.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  304.     write_byte(TE_BEAMCYLINDER)
  305.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  306.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  307.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  308.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  309.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  310.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  311.     write_short(SprRing)
  312.     write_byte(0)
  313.     write_byte(1)
  314.     write_byte(6)
  315.     write_byte(8)
  316.     write_byte(10)
  317.     write_byte(224)
  318.     write_byte(224)
  319.     write_byte(255)
  320.     write_byte(192)
  321.     write_byte(5)
  322.     message_end()
  323.     #endif
  324.    
  325.     static attacker; attacker = pev(ent, pev_owner)
  326.     if(!is_user_connected(attacker))
  327.     {
  328.         engfunc(EngFunc_RemoveEntity, ent)
  329.         return PLUGIN_CONTINUE;
  330.     }
  331.    
  332.     if(pev_valid(id) && !is_user_connected(id))
  333.     {
  334.         static szClassname[32]
  335.         pev(id, pev_classname, szClassname, 31)
  336.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  337.         {
  338.             dllfunc(DLLFunc_Use, id, ent)
  339.         }
  340.     }
  341.    
  342.     static victim; victim = -1
  343.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  344.     {
  345.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  346.         {
  347.             static Float:originV[3], Float:dist, Float:damage
  348.             pev(victim, pev_origin, originV)
  349.             dist = get_distance_f(fOrigin, originV)
  350.             damage = CDamage-(CDamage/CRadius)*dist
  351.             if(damage > 0.0)
  352.             {
  353.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  354.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  355.             }
  356.         }
  357.     }
  358.    
  359.     engfunc(EngFunc_RemoveEntity, ent)
  360.    
  361.     return PLUGIN_CONTINUE;
  362. }
  363.  
  364. public OnTouchJetPack(ent, id)
  365. {
  366.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  367.     {
  368.         engfunc(EngFunc_RemoveEntity, ent)
  369.         bHasJetPack[id] = true
  370.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  371.         engclient_cmd(id,"weapon_knife")
  372.         ReplaceModel(id)
  373.     }
  374. }
  375.  
  376. public OnThinkJetPack(ent)
  377. {
  378.     if(pev_valid(ent) == 2)
  379.     {
  380.         switch(pev(ent, pev_flTimeStepSound))
  381.         {
  382.             case 200:
  383.             {
  384.                 set_pev(ent, pev_iuser4, 22222)
  385.                 set_pev(ent, pev_flTimeStepSound, 201)
  386.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  387.             }
  388.             case 201:
  389.             {
  390.                 engfunc(EngFunc_RemoveEntity, ent)
  391.             }
  392.         }
  393.     }
  394. }
  395.  
  396. public CmdDropJP(id)
  397. {
  398.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  399.     {
  400.         DropJetPack(id)
  401.         bHasJetPack[id] = false
  402.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  403.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  404.         return PLUGIN_HANDLED;
  405.     }
  406.    
  407.     return PLUGIN_CONTINUE;
  408. }
  409.  
  410. ReplaceModel(id)
  411. {
  412.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  413.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  414. }
  415.  
  416. DropJetPack(id)
  417. {
  418.     new ent = create_entity(ClassInfoTarget)
  419.     if(!ent) return;
  420.    
  421.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  422.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  423.     new Float:fOrigin[3]
  424.     pev(id, pev_origin, fOrigin)
  425.     fOrigin[2] += 16.0
  426.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  427.     set_pev(ent, pev_classname, ClassnameJetPack)
  428.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  429.     set_pev(ent, pev_velocity, fOrigin)
  430.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  431.     set_pev(ent, pev_effects, EF_LIGHT)
  432.     set_pev(ent, pev_iuser4, 11111)
  433.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  434.     set_pev(ent, pev_flTimeStepSound, 200)
  435.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  436. }
  437.  
  438. RemoveAllJetPack()
  439. {
  440.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  441.     while(ent > 0)
  442.     {
  443.         engfunc(EngFunc_RemoveEntity, ent)
  444.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  445.     }
  446. }
  447.  
  448. ResetValues(id)
  449. {
  450.     bHasJetPack[id] = false
  451.     fJetpackFuel[id] = CMaxFuel
  452. }
I think he means that he need the item only to stay one round, and next round it's gone if player still have. Also block 20 seconds we can make via a task (check this code):

  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26. new bool:g_bBlockBuy
  27.  
  28. //Uncomment this to draw ring effect
  29. //#define DrawRing
  30.  
  31. //Uncomment this to draw flame effect
  32. //#define DrawFlame
  33.  
  34. #if defined DrawRing
  35. new SprRing
  36. #endif
  37.  
  38. #if defined DrawFlame
  39. new SprFlame
  40. #endif
  41.  
  42. public plugin_precache()
  43. {
  44.     precache_sound(SoundPickup)
  45.     precache_sound(SoundShoot)
  46.     precache_sound(SoundTravel)
  47.     precache_sound(SoundFly)
  48.     precache_sound(SoundBlow)
  49.    
  50.     SprExp = precache_model("sprites/zerogxplode.spr")
  51.     SprTrail = precache_model("sprites/smoke.spr")
  52.    
  53.     #if defined DrawFlame
  54.     SprFlame = precache_model("sprites/xfireball3.spr")
  55.     #endif
  56.    
  57.     #if defined DrawRing
  58.     SprRing = precache_model("sprites/shockwave.spr")
  59.     #endif
  60.    
  61.     precache_model(ModelVJetPack)
  62.     precache_model(ModelPJetPack)
  63.     precache_model(ModelWJetPack)
  64.     precache_model(ModelRocket)
  65. }
  66.  
  67. public plugin_init()
  68. {
  69.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  70.    
  71.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  72.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  73.    
  74.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  75.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  76.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  77.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  78.    
  79.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  80.    
  81.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  82.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  83.     register_think(ClassnameJetPack, "OnThinkJetPack")
  84.    
  85.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  86.     CvarRadius = register_cvar("jp_radius", "250.0")
  87.     CvarDamage = register_cvar("jp_damage", "600.0")
  88.     CvarSpeed = register_cvar("jp_speed", "300")
  89.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  90.     CvarRegen = register_cvar("jp_regen", "0.5")
  91.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  92.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  93.  
  94.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  95.    
  96.     register_clcmd("drop", "CmdDropJP")
  97. }
  98.  
  99. public client_putinserver(id)
  100. {
  101.     ResetValues(id)
  102. }
  103.  
  104. public ze_user_infected(iVictim)
  105. {
  106.     ResetValues(iVictim)
  107. }
  108.  
  109. public client_disconnected(id)
  110. {
  111.     ResetValues(id)
  112. }
  113.  
  114. public ze_game_started()
  115. {
  116.     g_bBlockBuy = true
  117.     set_task(20.0, "EnableBuy")
  118. }
  119.  
  120. public EnableBuy()
  121. {
  122.     g_bBlockBuy = false
  123. }
  124.  
  125. public OnNewRound()
  126. {
  127.     RemoveAllJetPack()
  128.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  129.     CRadius = get_pcvar_float(CvarRadius)
  130.     CDamage = get_pcvar_float(CvarDamage)
  131.     CSpeed = get_pcvar_num(CvarSpeed)
  132.     CCooldown = get_pcvar_float(CvarCooldown)
  133.     CRegen = get_pcvar_float(CvarRegen)
  134.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  135.     CRemove = get_pcvar_float(CvarRemove)
  136. }
  137.  
  138. public ze_user_humanized(id)
  139. {
  140.     ResetValues(id) // Item lasts only one round
  141. }
  142.  
  143. public OnRoundEnd()
  144. {
  145.     RemoveAllJetPack()
  146. }
  147.  
  148. public OnPlayerKilled(id)
  149. {
  150.     if(bHasJetPack[id]) DropJetPack(id);
  151.    
  152.     ResetValues(id)
  153. }
  154.  
  155. public OnPlayerJump(id)
  156. {
  157.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  158.     {
  159.         static Float:vVelocity[3], Float:upSpeed
  160.         pev(id, pev_velocity, vVelocity)
  161.         upSpeed = vVelocity[2] + 35.0
  162.         velocity_by_aim(id, CSpeed, vVelocity)
  163.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  164.         set_pev(id, pev_velocity, vVelocity)
  165.        
  166.         #if defined DrawFlame
  167.         pev(id, pev_origin, vVelocity)
  168.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  169.         write_byte(TE_SPRITE)
  170.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  171.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  172.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  173.         write_short(SprFlame)
  174.         write_byte(8)
  175.         write_byte(128)
  176.         message_end()
  177.         #endif
  178.        
  179.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  180.         fJetpackFuel[id] -= 1.0
  181.     }
  182. }
  183.  
  184. public ze_select_item_pre(id, itemid)
  185. {
  186.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  187.     if (itemid != ItemJetPack)
  188.         return ZE_ITEM_AVAILABLE
  189.    
  190.     // Available for Humans only, So don't show it for zombies
  191.     if (ze_is_user_zombie(id))
  192.         return ZE_ITEM_DONT_SHOW
  193.  
  194.     if (bHasJetPack[id])
  195.         return ZE_ITEM_UNAVAILABLE
  196.    
  197.     if (g_bBlockBuy && itemid == ItemJetPack)
  198.         return ZE_ITEM_UNAVAILABLE
  199.    
  200.     return ZE_ITEM_AVAILABLE
  201. }
  202.  
  203.  
  204. public ze_select_item_post(id, item)
  205. {
  206.     if (item == ItemJetPack)
  207.     {
  208.         bHasJetPack[id] = true
  209.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  210.         engclient_cmd(id, "weapon_knife")
  211.         ReplaceModel(id)
  212.     }
  213. }
  214.  
  215. public OnKnifeSecAtkPost(ent2)
  216. {
  217.     if(pev_valid(ent2) == 2)
  218.     {
  219.         static id, Float:ctime
  220.         id = get_pdata_cbase(ent2, 41, 4)
  221.         ctime = get_gametime()
  222.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  223.         {
  224.             new ent = create_entity(ClassInfoTarget)
  225.             if(ent)
  226.             {
  227.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  228.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  229.                 new Float:fOrigin[3]
  230.                 pev(id, pev_origin, fOrigin)
  231.                 fOrigin[2] += 16.0
  232.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  233.                 set_pev(ent, pev_classname, ClassnameRocket)
  234.                 set_pev(ent, pev_dmg, 100.0)
  235.                 set_pev(ent, pev_owner, id)
  236.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  237.                 set_pev(ent, pev_velocity, fOrigin)
  238.                 new Float:vecAngles[3]
  239.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  240.                 set_pev(ent, pev_angles, vecAngles)
  241.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  242.                 set_pev(ent, pev_effects, EF_LIGHT)
  243.                 set_pev(ent, pev_solid, SOLID_BBOX)
  244.                
  245.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  246.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  247.                
  248.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  249.                 write_byte(TE_BEAMFOLLOW)
  250.                 write_short(ent)
  251.                 write_short(SprTrail)
  252.                 write_byte(40)
  253.                 write_byte(5)
  254.                 write_byte(224)
  255.                 write_byte(224)
  256.                 write_byte(255)
  257.                 write_byte(192)
  258.                 message_end()
  259.                
  260.                 fLastShoot[id] = ctime+CCooldown
  261.             }
  262.             else
  263.             {
  264.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  265.                 fLastShoot[id] = ctime+1.5
  266.             }
  267.         }
  268.     }
  269. }
  270.  
  271. public OnKnifeDeployPost(ent)
  272. {
  273.     if(pev_valid(ent) == 2)
  274.     {
  275.         static id; id = get_pdata_cbase(ent, 41, 4)
  276.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  277.     }
  278. }
  279.  
  280. public OnPlayerPreThink(id)
  281. {
  282.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  283.     {
  284.         static button; button = pev(id, pev_button)
  285.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  286.     }
  287. }
  288.  
  289. public OnTouchRocket(ent, id)
  290. {
  291.     static Float:fOrigin[3]
  292.     pev(ent, pev_origin, fOrigin)
  293.    
  294.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  295.     write_byte(TE_EXPLOSION)
  296.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  297.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  298.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  299.     write_short(SprExp)
  300.     write_byte(40)
  301.     write_byte(30)
  302.     write_byte(10)
  303.     message_end()
  304.    
  305.     #if defined DrawRing
  306.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  307.     write_byte(TE_BEAMCYLINDER)
  308.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  309.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  310.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  311.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  312.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  313.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  314.     write_short(SprRing)
  315.     write_byte(0)
  316.     write_byte(1)
  317.     write_byte(6)
  318.     write_byte(8)
  319.     write_byte(10)
  320.     write_byte(224)
  321.     write_byte(224)
  322.     write_byte(255)
  323.     write_byte(192)
  324.     write_byte(5)
  325.     message_end()
  326.     #endif
  327.    
  328.     static attacker; attacker = pev(ent, pev_owner)
  329.     if(!is_user_connected(attacker))
  330.     {
  331.         engfunc(EngFunc_RemoveEntity, ent)
  332.         return PLUGIN_CONTINUE;
  333.     }
  334.    
  335.     if(pev_valid(id) && !is_user_connected(id))
  336.     {
  337.         static szClassname[32]
  338.         pev(id, pev_classname, szClassname, 31)
  339.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  340.         {
  341.             dllfunc(DLLFunc_Use, id, ent)
  342.         }
  343.     }
  344.    
  345.     static victim; victim = -1
  346.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  347.     {
  348.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  349.         {
  350.             static Float:originV[3], Float:dist, Float:damage
  351.             pev(victim, pev_origin, originV)
  352.             dist = get_distance_f(fOrigin, originV)
  353.             damage = CDamage-(CDamage/CRadius)*dist
  354.             if(damage > 0.0)
  355.             {
  356.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  357.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  358.             }
  359.         }
  360.     }
  361.    
  362.     engfunc(EngFunc_RemoveEntity, ent)
  363.    
  364.     return PLUGIN_CONTINUE;
  365. }
  366.  
  367. public OnTouchJetPack(ent, id)
  368. {
  369.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  370.     {
  371.         engfunc(EngFunc_RemoveEntity, ent)
  372.         bHasJetPack[id] = true
  373.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  374.         engclient_cmd(id,"weapon_knife")
  375.         ReplaceModel(id)
  376.     }
  377. }
  378.  
  379. public OnThinkJetPack(ent)
  380. {
  381.     if(pev_valid(ent) == 2)
  382.     {
  383.         switch(pev(ent, pev_flTimeStepSound))
  384.         {
  385.             case 200:
  386.             {
  387.                 set_pev(ent, pev_iuser4, 22222)
  388.                 set_pev(ent, pev_flTimeStepSound, 201)
  389.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  390.             }
  391.             case 201:
  392.             {
  393.                 engfunc(EngFunc_RemoveEntity, ent)
  394.             }
  395.         }
  396.     }
  397. }
  398.  
  399. public CmdDropJP(id)
  400. {
  401.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  402.     {
  403.         DropJetPack(id)
  404.         bHasJetPack[id] = false
  405.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  406.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  407.         return PLUGIN_HANDLED;
  408.     }
  409.    
  410.     return PLUGIN_CONTINUE;
  411. }
  412.  
  413. ReplaceModel(id)
  414. {
  415.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  416.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  417. }
  418.  
  419. DropJetPack(id)
  420. {
  421.     new ent = create_entity(ClassInfoTarget)
  422.     if(!ent) return;
  423.    
  424.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  425.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  426.     new Float:fOrigin[3]
  427.     pev(id, pev_origin, fOrigin)
  428.     fOrigin[2] += 16.0
  429.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  430.     set_pev(ent, pev_classname, ClassnameJetPack)
  431.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  432.     set_pev(ent, pev_velocity, fOrigin)
  433.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  434.     set_pev(ent, pev_effects, EF_LIGHT)
  435.     set_pev(ent, pev_iuser4, 11111)
  436.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  437.     set_pev(ent, pev_flTimeStepSound, 200)
  438.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  439. }
  440.  
  441. RemoveAllJetPack()
  442. {
  443.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  444.     while(ent > 0)
  445.     {
  446.         engfunc(EngFunc_RemoveEntity, ent)
  447.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  448.     }
  449. }
  450.  
  451. ResetValues(id)
  452. {
  453.     bHasJetPack[id] = false
  454.     fJetpackFuel[id] = CMaxFuel
  455. }

- Added it's only for one round!
- Block in first 20 seconds from each new round!
He who fails to plan is planning to fail

User avatar
Mark
VIP
VIP
United States of America
Posts: 283
Joined: 5 years ago
Location: Des Moines/USA
Contact:

#10

Post by Mark » 5 years ago

Raheem wrote: 5 years ago
Mark wrote: 5 years ago Let me know if this works for one round ill think how todo the time. Maybe we do it on zombie Choosen?
  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack, g_iUsedTimes[33], g_pCvarUseTimes
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26.  
  27. //Uncomment this to draw ring effect
  28. //#define DrawRing
  29.  
  30. //Uncomment this to draw flame effect
  31. //#define DrawFlame
  32.  
  33. #if defined DrawRing
  34. new SprRing
  35. #endif
  36.  
  37. #if defined DrawFlame
  38. new SprFlame
  39. #endif
  40.  
  41. public plugin_precache()
  42. {
  43.     precache_sound(SoundPickup)
  44.     precache_sound(SoundShoot)
  45.     precache_sound(SoundTravel)
  46.     precache_sound(SoundFly)
  47.     precache_sound(SoundBlow)
  48.    
  49.     SprExp = precache_model("sprites/zerogxplode.spr")
  50.     SprTrail = precache_model("sprites/smoke.spr")
  51.    
  52.     #if defined DrawFlame
  53.     SprFlame = precache_model("sprites/xfireball3.spr")
  54.     #endif
  55.    
  56.     #if defined DrawRing
  57.     SprRing = precache_model("sprites/shockwave.spr")
  58.     #endif
  59.    
  60.     precache_model(ModelVJetPack)
  61.     precache_model(ModelPJetPack)
  62.     precache_model(ModelWJetPack)
  63.     precache_model(ModelRocket)
  64. }
  65.  
  66. public plugin_init()
  67. {
  68.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  69.    
  70.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  71.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  72.    
  73.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  74.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  75.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  76.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  77.    
  78.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  79.    
  80.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  81.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  82.     register_think(ClassnameJetPack, "OnThinkJetPack")
  83.    
  84.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  85.     CvarRadius = register_cvar("jp_radius", "250.0")
  86.     CvarDamage = register_cvar("jp_damage", "600.0")
  87.     CvarSpeed = register_cvar("jp_speed", "300")
  88.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  89.     CvarRegen = register_cvar("jp_regen", "0.5")
  90.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  91.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  92.    
  93.     g_pCvarUseTimes = register_cvar("ze_jetpack_uses", "1")
  94.  
  95.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  96.    
  97.     register_clcmd("drop", "CmdDropJP")
  98. }
  99.  
  100. public client_putinserver(id)
  101. {
  102.     ResetValues(id)
  103. }
  104.  
  105. public ze_user_humanized(id)
  106. {
  107.     g_iUsedTimes[id] = 0
  108. }
  109.  
  110. public ze_user_infected(iVictim)
  111. {
  112.     ResetValues(iVictim)
  113. }
  114.  
  115. public client_disconnected(id)
  116. {
  117.     ResetValues(id)
  118.     g_iUsedTimes[id] = 0
  119. }
  120.  
  121. public OnNewRound()
  122. {
  123.     RemoveAllJetPack()
  124.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  125.     CRadius = get_pcvar_float(CvarRadius)
  126.     CDamage = get_pcvar_float(CvarDamage)
  127.     CSpeed = get_pcvar_num(CvarSpeed)
  128.     CCooldown = get_pcvar_float(CvarCooldown)
  129.     CRegen = get_pcvar_float(CvarRegen)
  130.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  131.     CRemove = get_pcvar_float(CvarRemove)
  132. }
  133.  
  134. public OnRoundEnd()
  135. {
  136.     RemoveAllJetPack()
  137. }
  138.  
  139. public OnPlayerKilled(id)
  140. {
  141.     if(bHasJetPack[id]) DropJetPack(id);
  142.    
  143.     ResetValues(id)
  144. }
  145.  
  146. public OnPlayerJump(id)
  147. {
  148.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  149.     {
  150.         static Float:vVelocity[3], Float:upSpeed
  151.         pev(id, pev_velocity, vVelocity)
  152.         upSpeed = vVelocity[2] + 35.0
  153.         velocity_by_aim(id, CSpeed, vVelocity)
  154.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  155.         set_pev(id, pev_velocity, vVelocity)
  156.        
  157.         #if defined DrawFlame
  158.         pev(id, pev_origin, vVelocity)
  159.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  160.         write_byte(TE_SPRITE)
  161.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  162.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  163.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  164.         write_short(SprFlame)
  165.         write_byte(8)
  166.         write_byte(128)
  167.         message_end()
  168.         #endif
  169.        
  170.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  171.         fJetpackFuel[id] -= 1.0
  172.     }
  173. }
  174.  
  175. public ze_select_item_pre(id, itemid)
  176. {
  177.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  178.     if (itemid != ItemJetPack)
  179.         return ZE_ITEM_AVAILABLE
  180.    
  181.     // Available for Humans only, So don't show it for zombies
  182.     if (ze_is_user_zombie(id))
  183.         return ZE_ITEM_DONT_SHOW
  184.  
  185.     if (bHasJetPack[id])
  186.         return ZE_ITEM_UNAVAILABLE
  187.    
  188.     return ZE_ITEM_AVAILABLE
  189. }
  190.  
  191.  
  192. public ze_select_item_post(id, item)
  193. {
  194.     if (g_iUsedTimes[id] >= get_pcvar_num(g_pCvarUseTimes))
  195.     {
  196.         ze_colored_print(id, "!tYou can only open Jet Pack !y[!g%dx!y] per round!", get_pcvar_num(g_pCvarUseTimes))
  197.         return PLUGIN_HANDLED
  198.     }
  199.    
  200.     if (item == ItemJetPack)
  201.     {
  202.         bHasJetPack[id] = true
  203.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  204.         engclient_cmd(id, "weapon_knife")
  205.         ReplaceModel(id)
  206.         g_iUsedTimes[id]++
  207.     }
  208.  
  209.     return PLUGIN_CONTINUE
  210. }
  211.  
  212. public OnKnifeSecAtkPost(ent2)
  213. {
  214.     if(pev_valid(ent2) == 2)
  215.     {
  216.         static id, Float:ctime
  217.         id = get_pdata_cbase(ent2, 41, 4)
  218.         ctime = get_gametime()
  219.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  220.         {
  221.             new ent = create_entity(ClassInfoTarget)
  222.             if(ent)
  223.             {
  224.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  225.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  226.                 new Float:fOrigin[3]
  227.                 pev(id, pev_origin, fOrigin)
  228.                 fOrigin[2] += 16.0
  229.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  230.                 set_pev(ent, pev_classname, ClassnameRocket)
  231.                 set_pev(ent, pev_dmg, 100.0)
  232.                 set_pev(ent, pev_owner, id)
  233.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  234.                 set_pev(ent, pev_velocity, fOrigin)
  235.                 new Float:vecAngles[3]
  236.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  237.                 set_pev(ent, pev_angles, vecAngles)
  238.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  239.                 set_pev(ent, pev_effects, EF_LIGHT)
  240.                 set_pev(ent, pev_solid, SOLID_BBOX)
  241.                
  242.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  243.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  244.                
  245.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  246.                 write_byte(TE_BEAMFOLLOW)
  247.                 write_short(ent)
  248.                 write_short(SprTrail)
  249.                 write_byte(40)
  250.                 write_byte(5)
  251.                 write_byte(224)
  252.                 write_byte(224)
  253.                 write_byte(255)
  254.                 write_byte(192)
  255.                 message_end()
  256.                
  257.                 fLastShoot[id] = ctime+CCooldown
  258.             }
  259.             else
  260.             {
  261.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  262.                 fLastShoot[id] = ctime+1.5
  263.             }
  264.         }
  265.     }
  266. }
  267.  
  268. public OnKnifeDeployPost(ent)
  269. {
  270.     if(pev_valid(ent) == 2)
  271.     {
  272.         static id; id = get_pdata_cbase(ent, 41, 4)
  273.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  274.     }
  275. }
  276.  
  277. public OnPlayerPreThink(id)
  278. {
  279.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  280.     {
  281.         static button; button = pev(id, pev_button)
  282.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  283.     }
  284. }
  285.  
  286. public OnTouchRocket(ent, id)
  287. {
  288.     static Float:fOrigin[3]
  289.     pev(ent, pev_origin, fOrigin)
  290.    
  291.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  292.     write_byte(TE_EXPLOSION)
  293.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  294.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  295.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  296.     write_short(SprExp)
  297.     write_byte(40)
  298.     write_byte(30)
  299.     write_byte(10)
  300.     message_end()
  301.    
  302.     #if defined DrawRing
  303.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  304.     write_byte(TE_BEAMCYLINDER)
  305.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  306.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  307.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  308.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  309.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  310.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  311.     write_short(SprRing)
  312.     write_byte(0)
  313.     write_byte(1)
  314.     write_byte(6)
  315.     write_byte(8)
  316.     write_byte(10)
  317.     write_byte(224)
  318.     write_byte(224)
  319.     write_byte(255)
  320.     write_byte(192)
  321.     write_byte(5)
  322.     message_end()
  323.     #endif
  324.    
  325.     static attacker; attacker = pev(ent, pev_owner)
  326.     if(!is_user_connected(attacker))
  327.     {
  328.         engfunc(EngFunc_RemoveEntity, ent)
  329.         return PLUGIN_CONTINUE;
  330.     }
  331.    
  332.     if(pev_valid(id) && !is_user_connected(id))
  333.     {
  334.         static szClassname[32]
  335.         pev(id, pev_classname, szClassname, 31)
  336.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  337.         {
  338.             dllfunc(DLLFunc_Use, id, ent)
  339.         }
  340.     }
  341.    
  342.     static victim; victim = -1
  343.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  344.     {
  345.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  346.         {
  347.             static Float:originV[3], Float:dist, Float:damage
  348.             pev(victim, pev_origin, originV)
  349.             dist = get_distance_f(fOrigin, originV)
  350.             damage = CDamage-(CDamage/CRadius)*dist
  351.             if(damage > 0.0)
  352.             {
  353.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  354.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  355.             }
  356.         }
  357.     }
  358.    
  359.     engfunc(EngFunc_RemoveEntity, ent)
  360.    
  361.     return PLUGIN_CONTINUE;
  362. }
  363.  
  364. public OnTouchJetPack(ent, id)
  365. {
  366.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  367.     {
  368.         engfunc(EngFunc_RemoveEntity, ent)
  369.         bHasJetPack[id] = true
  370.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  371.         engclient_cmd(id,"weapon_knife")
  372.         ReplaceModel(id)
  373.     }
  374. }
  375.  
  376. public OnThinkJetPack(ent)
  377. {
  378.     if(pev_valid(ent) == 2)
  379.     {
  380.         switch(pev(ent, pev_flTimeStepSound))
  381.         {
  382.             case 200:
  383.             {
  384.                 set_pev(ent, pev_iuser4, 22222)
  385.                 set_pev(ent, pev_flTimeStepSound, 201)
  386.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  387.             }
  388.             case 201:
  389.             {
  390.                 engfunc(EngFunc_RemoveEntity, ent)
  391.             }
  392.         }
  393.     }
  394. }
  395.  
  396. public CmdDropJP(id)
  397. {
  398.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  399.     {
  400.         DropJetPack(id)
  401.         bHasJetPack[id] = false
  402.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  403.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  404.         return PLUGIN_HANDLED;
  405.     }
  406.    
  407.     return PLUGIN_CONTINUE;
  408. }
  409.  
  410. ReplaceModel(id)
  411. {
  412.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  413.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  414. }
  415.  
  416. DropJetPack(id)
  417. {
  418.     new ent = create_entity(ClassInfoTarget)
  419.     if(!ent) return;
  420.    
  421.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  422.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  423.     new Float:fOrigin[3]
  424.     pev(id, pev_origin, fOrigin)
  425.     fOrigin[2] += 16.0
  426.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  427.     set_pev(ent, pev_classname, ClassnameJetPack)
  428.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  429.     set_pev(ent, pev_velocity, fOrigin)
  430.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  431.     set_pev(ent, pev_effects, EF_LIGHT)
  432.     set_pev(ent, pev_iuser4, 11111)
  433.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  434.     set_pev(ent, pev_flTimeStepSound, 200)
  435.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  436. }
  437.  
  438. RemoveAllJetPack()
  439. {
  440.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  441.     while(ent > 0)
  442.     {
  443.         engfunc(EngFunc_RemoveEntity, ent)
  444.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  445.     }
  446. }
  447.  
  448. ResetValues(id)
  449. {
  450.     bHasJetPack[id] = false
  451.     fJetpackFuel[id] = CMaxFuel
  452. }
I think he means that he need the item only to stay one round, and next round it's gone if player still have. Also block 20 seconds we can make via a task (check this code):

  1. #include <zombie_escape>
  2. #include <engine>
  3.  
  4. #define JETPACK_COST 1000
  5.  
  6. new const ClassInfoTarget[] = "info_target"
  7. new const ClassBreakAble[] = "func_breakable"
  8. new const ClassnameJetPack[] = "n4d_jetpack"
  9. new const ClassnameRocket[] = "n4d_bazooka"
  10. new const ModelVJetPack[] = "models/mu/v_jp_mu.mdl"
  11. new const ModelPJetPack[] = "models/mu/p_jp_mu.mdl"
  12. new const ModelWJetPack[] = "models/mu/w_jp_mu.mdl"
  13. new const ModelRocket[] = "models/rpgrocket.mdl"
  14. new const SoundPickup[] = "items/gunpickup2.wav"
  15. new const SoundShoot[] = "mu/at4-1.wav"
  16. new const SoundTravel[] = "mu/bfuu.wav"
  17. new const SoundFly[] = "mu/fly.wav"
  18. new const SoundBlow[] = "mu/blow.wav"
  19.  
  20. new bool:bHasJetPack[33]
  21. new Float:fJetpackFuel[33]
  22. new Float:fLastShoot[33]
  23. new SprExp, SprTrail, ItemJetPack
  24. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed, CvarRemove
  25. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed, Float:CRemove
  26. new bool:g_bBlockBuy
  27.  
  28. //Uncomment this to draw ring effect
  29. //#define DrawRing
  30.  
  31. //Uncomment this to draw flame effect
  32. //#define DrawFlame
  33.  
  34. #if defined DrawRing
  35. new SprRing
  36. #endif
  37.  
  38. #if defined DrawFlame
  39. new SprFlame
  40. #endif
  41.  
  42. public plugin_precache()
  43. {
  44.     precache_sound(SoundPickup)
  45.     precache_sound(SoundShoot)
  46.     precache_sound(SoundTravel)
  47.     precache_sound(SoundFly)
  48.     precache_sound(SoundBlow)
  49.    
  50.     SprExp = precache_model("sprites/zerogxplode.spr")
  51.     SprTrail = precache_model("sprites/smoke.spr")
  52.    
  53.     #if defined DrawFlame
  54.     SprFlame = precache_model("sprites/xfireball3.spr")
  55.     #endif
  56.    
  57.     #if defined DrawRing
  58.     SprRing = precache_model("sprites/shockwave.spr")
  59.     #endif
  60.    
  61.     precache_model(ModelVJetPack)
  62.     precache_model(ModelPJetPack)
  63.     precache_model(ModelWJetPack)
  64.     precache_model(ModelRocket)
  65. }
  66.  
  67. public plugin_init()
  68. {
  69.     register_plugin("New Jetpack", "0.0.3", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  70.    
  71.     register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  72.     register_logevent("OnRoundEnd", 2, "1=Round_End")
  73.    
  74.     RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  75.     RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  76.     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  77.     RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  78.    
  79.     register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  80.    
  81.     register_touch(ClassnameRocket, "*", "OnTouchRocket")
  82.     register_touch(ClassnameJetPack, "player", "OnTouchJetPack")
  83.     register_think(ClassnameJetPack, "OnThinkJetPack")
  84.    
  85.     CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  86.     CvarRadius = register_cvar("jp_radius", "250.0")
  87.     CvarDamage = register_cvar("jp_damage", "600.0")
  88.     CvarSpeed = register_cvar("jp_speed", "300")
  89.     CvarCooldown = register_cvar("jp_cooldown", "10.0")
  90.     CvarRegen = register_cvar("jp_regen", "0.5")
  91.     CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  92.     CvarRemove = register_cvar("jp_remove_time", "420.0")
  93.  
  94.     ItemJetPack = ze_register_item("Jetpack", JETPACK_COST, 0)
  95.    
  96.     register_clcmd("drop", "CmdDropJP")
  97. }
  98.  
  99. public client_putinserver(id)
  100. {
  101.     ResetValues(id)
  102. }
  103.  
  104. public ze_user_infected(iVictim)
  105. {
  106.     ResetValues(iVictim)
  107. }
  108.  
  109. public client_disconnected(id)
  110. {
  111.     ResetValues(id)
  112. }
  113.  
  114. public ze_game_started()
  115. {
  116.     g_bBlockBuy = true
  117.     set_task(20.0, "EnableBuy")
  118. }
  119.  
  120. public EnableBuy()
  121. {
  122.     g_bBlockBuy = false
  123. }
  124.  
  125. public OnNewRound()
  126. {
  127.     RemoveAllJetPack()
  128.     CMaxFuel = get_pcvar_float(CvarMaxFuel)
  129.     CRadius = get_pcvar_float(CvarRadius)
  130.     CDamage = get_pcvar_float(CvarDamage)
  131.     CSpeed = get_pcvar_num(CvarSpeed)
  132.     CCooldown = get_pcvar_float(CvarCooldown)
  133.     CRegen = get_pcvar_float(CvarRegen)
  134.     CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  135.     CRemove = get_pcvar_float(CvarRemove)
  136. }
  137.  
  138. public ze_user_humanized(id)
  139. {
  140.     ResetValues(id) // Item lasts only one round
  141. }
  142.  
  143. public OnRoundEnd()
  144. {
  145.     RemoveAllJetPack()
  146. }
  147.  
  148. public OnPlayerKilled(id)
  149. {
  150.     if(bHasJetPack[id]) DropJetPack(id);
  151.    
  152.     ResetValues(id)
  153. }
  154.  
  155. public OnPlayerJump(id)
  156. {
  157.     if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  158.     {
  159.         static Float:vVelocity[3], Float:upSpeed
  160.         pev(id, pev_velocity, vVelocity)
  161.         upSpeed = vVelocity[2] + 35.0
  162.         velocity_by_aim(id, CSpeed, vVelocity)
  163.         vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  164.         set_pev(id, pev_velocity, vVelocity)
  165.        
  166.         #if defined DrawFlame
  167.         pev(id, pev_origin, vVelocity)
  168.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  169.         write_byte(TE_SPRITE)
  170.         engfunc(EngFunc_WriteCoord, vVelocity[0])
  171.         engfunc(EngFunc_WriteCoord, vVelocity[1])
  172.         engfunc(EngFunc_WriteCoord, vVelocity[2])
  173.         write_short(SprFlame)
  174.         write_byte(8)
  175.         write_byte(128)
  176.         message_end()
  177.         #endif
  178.        
  179.         fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0,  PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  180.         fJetpackFuel[id] -= 1.0
  181.     }
  182. }
  183.  
  184. public ze_select_item_pre(id, itemid)
  185. {
  186.     // Return Available and we will block it in Post, So it dosen't affect other plugins
  187.     if (itemid != ItemJetPack)
  188.         return ZE_ITEM_AVAILABLE
  189.    
  190.     // Available for Humans only, So don't show it for zombies
  191.     if (ze_is_user_zombie(id))
  192.         return ZE_ITEM_DONT_SHOW
  193.  
  194.     if (bHasJetPack[id])
  195.         return ZE_ITEM_UNAVAILABLE
  196.    
  197.     if (g_bBlockBuy && itemid == ItemJetPack)
  198.         return ZE_ITEM_UNAVAILABLE
  199.    
  200.     return ZE_ITEM_AVAILABLE
  201. }
  202.  
  203.  
  204. public ze_select_item_post(id, item)
  205. {
  206.     if (item == ItemJetPack)
  207.     {
  208.         bHasJetPack[id] = true
  209.         ze_colored_print(id, "JetPack usage: JUMP+DUCK")
  210.         engclient_cmd(id, "weapon_knife")
  211.         ReplaceModel(id)
  212.     }
  213. }
  214.  
  215. public OnKnifeSecAtkPost(ent2)
  216. {
  217.     if(pev_valid(ent2) == 2)
  218.     {
  219.         static id, Float:ctime
  220.         id = get_pdata_cbase(ent2, 41, 4)
  221.         ctime = get_gametime()
  222.         if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  223.         {
  224.             new ent = create_entity(ClassInfoTarget)
  225.             if(ent)
  226.             {
  227.                 engfunc(EngFunc_SetModel, ent, ModelRocket)
  228.                 engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  229.                 new Float:fOrigin[3]
  230.                 pev(id, pev_origin, fOrigin)
  231.                 fOrigin[2] += 16.0
  232.                 engfunc(EngFunc_SetOrigin, ent, fOrigin)
  233.                 set_pev(ent, pev_classname, ClassnameRocket)
  234.                 set_pev(ent, pev_dmg, 100.0)
  235.                 set_pev(ent, pev_owner, id)
  236.                 velocity_by_aim(id, CRocketSpeed, fOrigin)
  237.                 set_pev(ent, pev_velocity, fOrigin)
  238.                 new Float:vecAngles[3]
  239.                 engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  240.                 set_pev(ent, pev_angles, vecAngles)
  241.                 set_pev(ent, pev_movetype, MOVETYPE_FLY)
  242.                 set_pev(ent, pev_effects, EF_LIGHT)
  243.                 set_pev(ent, pev_solid, SOLID_BBOX)
  244.                
  245.                 emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  246.                 emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  247.                
  248.                 message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  249.                 write_byte(TE_BEAMFOLLOW)
  250.                 write_short(ent)
  251.                 write_short(SprTrail)
  252.                 write_byte(40)
  253.                 write_byte(5)
  254.                 write_byte(224)
  255.                 write_byte(224)
  256.                 write_byte(255)
  257.                 write_byte(192)
  258.                 message_end()
  259.                
  260.                 fLastShoot[id] = ctime+CCooldown
  261.             }
  262.             else
  263.             {
  264.                 client_print(id, print_chat, "[JpDebug] Failed to create rocket.")
  265.                 fLastShoot[id] = ctime+1.5
  266.             }
  267.         }
  268.     }
  269. }
  270.  
  271. public OnKnifeDeployPost(ent)
  272. {
  273.     if(pev_valid(ent) == 2)
  274.     {
  275.         static id; id = get_pdata_cbase(ent, 41, 4)
  276.         if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  277.     }
  278. }
  279.  
  280. public OnPlayerPreThink(id)
  281. {
  282.     if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  283.     {
  284.         static button; button = pev(id, pev_button)
  285.         if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  286.     }
  287. }
  288.  
  289. public OnTouchRocket(ent, id)
  290. {
  291.     static Float:fOrigin[3]
  292.     pev(ent, pev_origin, fOrigin)
  293.    
  294.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  295.     write_byte(TE_EXPLOSION)
  296.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  297.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  298.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  299.     write_short(SprExp)
  300.     write_byte(40)
  301.     write_byte(30)
  302.     write_byte(10)
  303.     message_end()
  304.    
  305.     #if defined DrawRing
  306.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  307.     write_byte(TE_BEAMCYLINDER)
  308.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  309.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  310.     engfunc(EngFunc_WriteCoord, fOrigin[2])
  311.     engfunc(EngFunc_WriteCoord, fOrigin[0])
  312.     engfunc(EngFunc_WriteCoord, fOrigin[1])
  313.     engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  314.     write_short(SprRing)
  315.     write_byte(0)
  316.     write_byte(1)
  317.     write_byte(6)
  318.     write_byte(8)
  319.     write_byte(10)
  320.     write_byte(224)
  321.     write_byte(224)
  322.     write_byte(255)
  323.     write_byte(192)
  324.     write_byte(5)
  325.     message_end()
  326.     #endif
  327.    
  328.     static attacker; attacker = pev(ent, pev_owner)
  329.     if(!is_user_connected(attacker))
  330.     {
  331.         engfunc(EngFunc_RemoveEntity, ent)
  332.         return PLUGIN_CONTINUE;
  333.     }
  334.    
  335.     if(pev_valid(id) && !is_user_connected(id))
  336.     {
  337.         static szClassname[32]
  338.         pev(id, pev_classname, szClassname, 31)
  339.         if(equal(szClassname, ClassBreakAble) && (pev(id, pev_solid) != SOLID_NOT))
  340.         {
  341.             dllfunc(DLLFunc_Use, id, ent)
  342.         }
  343.     }
  344.    
  345.     static victim; victim = -1
  346.     while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  347.     {
  348.         if(is_user_alive(victim) && ze_is_user_zombie(victim))
  349.         {
  350.             static Float:originV[3], Float:dist, Float:damage
  351.             pev(victim, pev_origin, originV)
  352.             dist = get_distance_f(fOrigin, originV)
  353.             damage = CDamage-(CDamage/CRadius)*dist
  354.             if(damage > 0.0)
  355.             {
  356.                 ExecuteHamB(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  357.                 //client_print(attacker, print_chat, "[Jp] Rocket damage: %.1f", damage)
  358.             }
  359.         }
  360.     }
  361.    
  362.     engfunc(EngFunc_RemoveEntity, ent)
  363.    
  364.     return PLUGIN_CONTINUE;
  365. }
  366.  
  367. public OnTouchJetPack(ent, id)
  368. {
  369.     if((pev(ent, pev_iuser4) != 11111) && is_user_alive(id) && !ze_is_user_zombie(id) && !bHasJetPack[id])
  370.     {
  371.         engfunc(EngFunc_RemoveEntity, ent)
  372.         bHasJetPack[id] = true
  373.         emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  374.         engclient_cmd(id,"weapon_knife")
  375.         ReplaceModel(id)
  376.     }
  377. }
  378.  
  379. public OnThinkJetPack(ent)
  380. {
  381.     if(pev_valid(ent) == 2)
  382.     {
  383.         switch(pev(ent, pev_flTimeStepSound))
  384.         {
  385.             case 200:
  386.             {
  387.                 set_pev(ent, pev_iuser4, 22222)
  388.                 set_pev(ent, pev_flTimeStepSound, 201)
  389.                 set_pev(ent, pev_nextthink, get_gametime()+CRemove)
  390.             }
  391.             case 201:
  392.             {
  393.                 engfunc(EngFunc_RemoveEntity, ent)
  394.             }
  395.         }
  396.     }
  397. }
  398.  
  399. public CmdDropJP(id)
  400. {
  401.     if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  402.     {
  403.         DropJetPack(id)
  404.         bHasJetPack[id] = false
  405.         set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  406.         set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  407.         return PLUGIN_HANDLED;
  408.     }
  409.    
  410.     return PLUGIN_CONTINUE;
  411. }
  412.  
  413. ReplaceModel(id)
  414. {
  415.     set_pev(id, pev_viewmodel2, ModelVJetPack)
  416.     set_pev(id, pev_weaponmodel2, ModelPJetPack)
  417. }
  418.  
  419. DropJetPack(id)
  420. {
  421.     new ent = create_entity(ClassInfoTarget)
  422.     if(!ent) return;
  423.    
  424.     engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  425.     engfunc(EngFunc_SetSize, ent, Float:{-8.0, -8.0, -8.0}, Float:{8.0, 8.0, 8.0})
  426.     new Float:fOrigin[3]
  427.     pev(id, pev_origin, fOrigin)
  428.     fOrigin[2] += 16.0
  429.     engfunc(EngFunc_SetOrigin, ent, fOrigin)
  430.     set_pev(ent, pev_classname, ClassnameJetPack)
  431.     velocity_by_aim(id, 800, fOrigin) //if it too far then reduce it
  432.     set_pev(ent, pev_velocity, fOrigin)
  433.     set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  434.     set_pev(ent, pev_effects, EF_LIGHT)
  435.     set_pev(ent, pev_iuser4, 11111)
  436.     set_pev(ent, pev_solid, SOLID_TRIGGER)
  437.     set_pev(ent, pev_flTimeStepSound, 200)
  438.     set_pev(ent, pev_nextthink, get_gametime()+2.0) // prevent drop/pickup exploit
  439. }
  440.  
  441. RemoveAllJetPack()
  442. {
  443.     new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  444.     while(ent > 0)
  445.     {
  446.         engfunc(EngFunc_RemoveEntity, ent)
  447.         ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  448.     }
  449. }
  450.  
  451. ResetValues(id)
  452. {
  453.     bHasJetPack[id] = false
  454.     fJetpackFuel[id] = CMaxFuel
  455. }

- Added it's only for one round!
- Block in first 20 seconds from each new round!
Yep looks good to me :D

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#11

Post by czirimbolo » 5 years ago

Thanks guys, working well. Solved!
Image

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 1 guest