Thread: [Solved] Multiple TraceHull
View Single Post
Natsheh
Veteran Member
Join Date: Sep 2012
Old 01-11-2021 , 13:24   Re: Multiple TraceHull
Reply With Quote #4

https://forums.alliedmods.net/showthread.php?t=292114

PHP Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>

#define PLUGIN "Entity Hit Effects"
#define VERSION "1.0"
#define AUTHOR "Natsheh"

new attacker_trace[33];

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
RegisterHam(Ham_TraceAttack"info_target""fw_TraceAttack_infotarget")
    
RegisterHam(Ham_TraceAttack"func_breakable""fw_TraceAttack_infotarget")
    
RegisterHam(Ham_TraceAttack"player""fw_TraceAttack_player")
}

public 
fw_TraceAttack_player(victimattackerFloat:damageFloat:direction[3], traceresultdamagebits)
{
    if(!
is_user_connected(attacker) || !(damagebits DMG_BULLET)) return FMRES_IGNORED;
    
    if((
attacker_trace[attacker] & (1<<(victim-1))))
    {
        
attacker_trace[attacker] &= ~(1<<(victim-1));
        
SetHamParamFloat(30.0)
        return 
HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fw_TraceAttack_infotarget(victimattackerFloat:damageFloat:direction[3], traceresultdamagebits)
{
    if(!
is_user_connected(attacker) || !(damagebits DMG_BULLET)) return FMRES_IGNORED;
    
    new 
Float:start_origin[3], Float:scanhit_end[3], Float:end_origin[3], tr3iHit 1Float:vDir[3], oldsolid pev(victimpev_solid);
    
get_tr2(traceresultTR_vecEndPosscanhit_end)
    
xs_vec_add(start_originscanhit_endstart_origin)
    
end_origin scanhit_end;
    
    
set_pev(victimpev_solidSOLID_NOT// ignoring the entity...
    
    
tr3 create_tr2();
    
vDir direction;
    
xs_vec_mul_scalar(vDir999.0vDir)
    
xs_vec_add(scanhit_endvDirscanhit_end)
    
    new 
oldents[33], oldsolids[33], iHitssizehits sizeof oldents;
    
    while( 
iHit )
    {
        
engfunc(EngFunc_TraceLinestart_originscanhit_end, (DONT_IGNORE_MONSTERS), attackertr3)
        
iHit get_tr2(tr3TR_pHit);
        
        if( 
iHit 0)
        {
            if( !(
sizehits iHits) ) break;
            
oldents[iHits] = iHit;
            
oldsolids[iHits] = pev(iHitpev_solid);
            
iHits ++;
            
set_pev(iHitpev_solidSOLID_NOT)
            if(
is_user_alive(iHit)) attacker_trace[attacker] |= (1<<(iHit-1));
        }
        
        
get_tr2(tr3TR_vecEndPosstart_origin)
    }
    
    
free_tr2(tr3)
    
    
// set back old solids....
    
set_pev(victimpev_solidoldsolid)
    
    for(new 
iiHitsi++)
    {
        
set_pev(oldents[i], pev_solidoldsolids[i])
    }
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_GUNSHOT)
    
engfunc(EngFunc_WriteCoordend_origin[0])
    
engfunc(EngFunc_WriteCoordend_origin[1])
    
engfunc(EngFunc_WriteCoordend_origin[2])
    
message_end()
    
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_SPARKS)
    
engfunc(EngFunc_WriteCoordend_origin[0])
    
engfunc(EngFunc_WriteCoordend_origin[1])
    
engfunc(EngFunc_WriteCoordend_origin[2])
    
message_end()
    
    return 
HAM_IGNORED;

also you can change the start position to the hit position of the traceline and then use the ignore ent thingy.
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !


Last edited by Natsheh; 01-11-2021 at 13:51.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh