I found a few different methods out there
PHP Code:
ExecuteHamB(Ham_TakeDamage, attacker, inflictor, attacker, Float:damage, damagebits);
The one above. Does it call Ham_TakeDamage? meaning if i was to use this inside of Ham_TakeDamage callback would it make a loop and kill the person?
PHP Code:
#include <amxmodx>
#include <hamsandwich>
new dmg_reducer, dmg_mirror, bool:gBotsRegistered;
public plugin_init( )
{
register_plugin( "Variable Friendly Fire", "1.7", "=(GrG)= Doc Holiday" );
RegisterHam( Ham_TakeDamage, "player", "PlayerHurt");
dmg_reducer = get_cvar_pointer("mp_friendlyfire");
dmg_mirror = get_cvar_pointer("mp_mirrordamage");
}
public client_authorized( id )
{
if( !gBotsRegistered && is_user_bot( id ) )
{
set_task( 0.1, "register_bots", id );
}
}
public register_bots( id )
{
if( !gBotsRegistered && is_user_connected( id ) )
{
RegisterHamFromEntity( Ham_TakeDamage, id, "PlayerHurt");
gBotsRegistered = true;
}
}
public PlayerHurt( victim, inflictor, attacker, Float:damage, damagebits )
{
if(is_user_connected( attacker ) // Makes sure valid target
&& get_user_team(attacker) == get_user_team(victim)) //Checks if the same team
{
if(get_pcvar_num(dmg_mirror))
{
SetHamParamFloat(4, (damage * 2.86 ) * floatclamp(get_pcvar_float(dmg_reducer), 0.0, 1.0));
ExecuteHamB(Ham_TakeDamage, attacker, inflictor, attacker, Float:damage, damagebits);
}
else
{
SetHamParamFloat(4, (damage * 2.86 ) * floatclamp(get_pcvar_float(dmg_reducer), 0.0, 1.0));
}
}
}