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

Jump Bomb for biohazard not work


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
zollymaN
Junior Member
Join Date: Aug 2021
Location: Romania
Old 08-25-2021 , 15:03   Jump Bomb for biohazard not work
Reply With Quote #1

Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <biohazard>
#include <bio_shop>

#define PLUGIN "[Bio] Extra Item: Jump Bomb"
#define VERSION "1.0"
#define AUTHOR "Dias"

#define PEV_NADE_TYPE pev_flTimeStepSound
#define NADE_TYPE_KNOCK 1111

new g_jump_bomb
new g_has_jump_bomb[33]
new g_knockbomb_spr_id

new const knockbomb_sound_exp[] = "bio9/zombi_bomb_exp.wav"
new const knockbomb_spr_exp[] = "sprites/bio9/zombiebomb_exp.spr"

new const v_model[] = "models/bio9/v_zombibomb.mdl"
new const p_model[] = "models/bio9/p_zombibomb.mdl"
new const w_model[] = "models/bio9/w_zombibomb.mdl"

new cvar_radius, cvar_power

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
	register_forward(FM_SetModel, "fw_SetModel")
	register_event("DeathMsg", "event_death", "a")
	register_event("CurWeapon", "event_weapon", "be", "1=1")
	
	cvar_radius = register_cvar("bh_knockbomb_radius", "250.0")
	cvar_power = register_cvar("bh_knockbomb_power", "100.0")
	
	g_jump_bomb = bio_register_item("Jump Bomb", 3500, "Make Human KnockBack", TEAM_ZOMBIE)
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheSound, knockbomb_sound_exp)
	
	engfunc(EngFunc_PrecacheModel, v_model)
	engfunc(EngFunc_PrecacheModel, p_model)
	engfunc(EngFunc_PrecacheModel, w_model)
	
	g_knockbomb_spr_id = engfunc(EngFunc_PrecacheModel, knockbomb_spr_exp)
}

public bio_item_selected(id, item)
{
	if(item != g_jump_bomb)
		return PLUGIN_HANDLED
		
	g_has_jump_bomb[id] = true
	fm_give_item(id, "weapon_hegrenade")
	
	return PLUGIN_CONTINUE
}

public event_weapon(id)
{
	static curweapon
	curweapon = get_user_weapon(id)
	
	if (is_user_zombie(id) && curweapon)
	{
		// set model zonbie bom
		if (g_has_jump_bomb[id] && curweapon == CSW_HEGRENADE)
		{
			set_pev(id, pev_viewmodel2, v_model)
			set_pev(id, pev_weaponmodel2, p_model)
		}
	}
}

public fw_SetModel(entity, const model[])
{
	// check valid ent
	if (!is_valid_ent(entity)) return FMRES_IGNORED

	// We don't care
	if (strlen(model) < 8) return FMRES_IGNORED;

// ######## Zombie Bomb
	// Get damage time of grenade
	static Float:dmgtime
	pev(entity, pev_dmgtime, dmgtime)
	
	// Grenade not yet thrown
	if (dmgtime == 0.0)
		return FMRES_IGNORED;
	
	// Get attacker
	static attacker
	attacker = pev(entity, pev_owner)
	
	if(!g_has_jump_bomb[attacker])
		return FMRES_IGNORED
	
	// Get whether grenade's owner is a zombie
	if (is_user_zombie(attacker))
	{
		if (model[9] == 'h' && model[10] == 'e') // Zombie Bomb
		{
			// Set grenade type on the thrown grenade entity
			set_pev(entity, PEV_NADE_TYPE, NADE_TYPE_KNOCK)
			engfunc(EngFunc_SetModel, entity, w_model)
		
			return FMRES_SUPERCEDE
		}
	}

	return FMRES_IGNORED
}

public event_death()
{
	static victim
	victim = read_data(2)
	
	if(g_has_jump_bomb[victim])
		g_has_jump_bomb[victim] = false
}

public fw_ThinkGrenade(entity)
{
	// Invalid entity
	if (!pev_valid(entity)) return FMRES_IGNORED;
	
	// Get damage time of grenade
	static Float:dmgtime
	pev(entity, pev_dmgtime, dmgtime)
	
	// Check if it's time to go off
	if (dmgtime > get_gametime())
		return HAM_IGNORED;
		
	static owner
	owner = pev(entity, pev_owner)
	
	if(!g_has_jump_bomb[owner])
		return HAM_IGNORED
	
	// Check if it's one of our custom nades
	switch (pev(entity, PEV_NADE_TYPE))
	{
		case NADE_TYPE_KNOCK:
		{
			knockbomb_explode(entity)
		}
		default: return HAM_IGNORED;
	}
	
	return HAM_SUPERCEDE;
}

public knockbomb_explode(ent)
{
	// Get origin
	static Float:originF[3]
	pev(ent, pev_origin, originF)
	
	// Make the explosion
	EffectZombieBomExp(ent)
	
	// explode sound
	engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, knockbomb_sound_exp, 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	// Get attacker
	static attacker
	attacker = pev(ent, pev_owner)
	
	// Collisions
	static victim
	victim = -1
	
	new Float:fOrigin[3],Float:fDistance,Float:fDamage
	while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, get_pcvar_float(cvar_radius))) != 0)
	{
		// Only effect alive non-spawnprotected humans
		if (!is_user_alive(victim))
			continue;
		
		// get value
		pev(victim, pev_origin, fOrigin)
		fDistance = get_distance_f(fOrigin, originF)
		fDamage = get_pcvar_float(cvar_power) - floatmul(get_pcvar_float(cvar_power), floatdiv(fDistance, get_pcvar_float(cvar_radius)))//get the damage value
		fDamage *= estimate_take_hurt(originF, victim, 0)//adjust
		if ( fDamage < 0 )
			continue

		// create effect
		manage_effect_action(victim, fOrigin, originF, fDistance, fDamage * 35.0)
		ExecuteHam(Ham_TakeDamage, victim, attacker, attacker, 0, DMG_BULLET)
	}
	
	g_has_jump_bomb[attacker] = false
	
	// Get rid of the grenade
	engfunc(EngFunc_RemoveEntity, ent)
}
public EffectZombieBomExp(id)
{
	static Float:origin[3];
	pev(id,pev_origin,origin);
    
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY); 
	write_byte(TE_EXPLOSION); // TE_EXPLOSION
	write_coord(floatround(origin[0])); // origin x
	write_coord(floatround(origin[1])); // origin y
	write_coord(floatround(origin[2])); // origin z
	write_short(g_knockbomb_spr_id); // sprites
	write_byte(40); // scale in 0.1's
	write_byte(30); // framerate
	write_byte(14); // flags 
	message_end(); // message end
}
public manage_effect_action(iEnt, Float:fEntOrigin[3], Float:fPoint[3], Float:fDistance, Float:fDamage)
{
	//return 1
	new Float:Velocity[3]
	pev(iEnt, pev_velocity, Velocity)
	
	new Float:fTime = floatdiv(fDistance, fDamage)
	new Float:fVelocity[3]
	fVelocity[0] = floatdiv((fEntOrigin[0] - fPoint[0]), fTime)
	fVelocity[1] = floatdiv((fEntOrigin[1] - fPoint[1]), fTime)
	fVelocity[2] = floatdiv((fEntOrigin[2] - fPoint[2]), fTime)
	set_pev(iEnt, pev_velocity, fVelocity)
	return 1
}

stock fm_give_item(id, const item[])
{
	static ent
	ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
	if (!pev_valid(ent)) return;
	
	static Float:originF[3]
	pev(id, pev_origin, originF)
	set_pev(ent, pev_origin, originF)
	set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
	dllfunc(DLLFunc_Spawn, ent)
	
	static save
	save = pev(ent, pev_solid)
	dllfunc(DLLFunc_Touch, ent, id)
	if (pev(ent, pev_solid) != save)
		return;
	
	engfunc(EngFunc_RemoveEntity, ent)
}

stock Float:estimate_take_hurt(Float:fPoint[3], ent, ignored) 
{
	new Float:fOrigin[3]
	new tr
	new Float:fFraction
	pev(ent, pev_origin, fOrigin)
	//UTIL_TraceLine ( vecSpot, vecSpot + Vector ( 0, 0, -40 ),  ignore_monsters, ENT(pev), & tr)
	engfunc(EngFunc_TraceLine, fPoint, fOrigin, DONT_IGNORE_MONSTERS, ignored, tr)
	get_tr2(tr, TR_flFraction, fFraction)
	if ( fFraction == 1.0 || get_tr2( tr, TR_pHit ) == ent )//no valid enity between the explode point & player
		return 1.0
	return 0.6//if has fraise, lessen blast hurt
}
to explain, when I'm a zombie and I want to buy from the shop "jump bomb", he gives me the grenade in the inventory but when I want to select it he automatically gives me the zm hands back and the grenade disappears from the inventory
zollymaN is offline
Reply



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

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

Forum Jump


All times are GMT -4. The time now is 00:23.


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