Quote:
Originally Posted by PRoSToTeM@
Make your teammates non-solid before the attack and restore solid after the attack.
|
Ok, working
But where to restore solid? I tried TraceAttack_Post, FM_PlayerPostThink, but seems to be soon to restore solid and bullet doesn't overpass teammate.
My test plugin:
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
new bool:HasSemiclip[33]
const WEAPONS_TO_FIX = (1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_MP5NAVY)|(1<<CSW_M3)|(1<<CSW_TMP)|(1<<CSW_P90)
public plugin_init()
{
register_forward( FM_PlayerPostThink, "fwdPlayerPostThink" )
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Pre")
//RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Post", 1)
}
public fwdPlayerPostThink( id )
{
if( HasSemiclip[id] )
{
entity_set_int( id, EV_INT_solid, SOLID_SLIDEBOX )
HasSemiclip[id] = false
client_print(0, print_chat, "Debug solid final")
}
}
public fw_TraceAttack_Pre(victim, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType)
{
if (!is_user_connected(attacker)) // not player
return HAM_IGNORED;
if (cs_get_user_team(attacker) != cs_get_user_team(victim))
{
client_print(0, print_chat, "Debug team")
return HAM_IGNORED;
}
if (!((1<<get_user_weapon(attacker)) & WEAPONS_TO_FIX))
{
client_print(0, print_chat, "Debug weapon")
return HAM_IGNORED;
}
client_print(0, print_chat, "Debug solid")
entity_set_int(victim, EV_INT_solid, SOLID_NOT)
HasSemiclip[victim] = true
return HAM_HANDLED;
}
public fw_TraceAttack_Post(victim, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType)
{
if (!is_user_connected(attacker)) // not player
return HAM_IGNORED;
entity_set_int(victim, EV_INT_solid, SOLID_SLIDEBOX)
return HAM_HANDLED;
}