[ H3LP ] Place entities
Hello, I'm trying to place entities according to the player aim origin and his vector[z] position (or more precisly ground position, whatever). It's working, but if I place two entities in the same position, one stay up of another and not in player "z" origin.
Create entity code:
Spoiler
Code:
insertSandbag( pPlayer)
{
new Float : flVecEntOrigin[ 3 ] , Float : flVecOrigin[ 3 ] ;
getAimOrigin( pPlayer, 50 , flVecEntOrigin) ;
entity_get_vector( pPlayer, EV_VEC_origin, flVecOrigin) ;
if ( ! isValidOrigin( pPlayer, flVecEntOrigin) )
{
zp_colored_print( pPlayer, "You can't insert sandbang here." )
return 0 ;
}
new pEntity = create_entity( g_szInfoTarget) ;
new Float : flHealth = get_pcvar_float ( cvar_sandbag_health) ;
entity_set_string( pEntity, EV_SZ_classname, g_szPallet) ;
entity_set_edict( pEntity, EV_ENT_owner, pPlayer) ;
entity_set_int( pEntity, EV_INT_movetype, MOVETYPE_FLY) ;
entity_set_int( pEntity, EV_INT_solid, SOLID_BBOX) ;
entity_set_model( pEntity, g_szPalletModel) ;
entity_set_size( pEntity, PALLET_MINS, PALLET_MAXS) ;
entity_set_origin( pEntity, flVecEntOrigin) ;
if ( flHealth)
{
entity_set_float( pEntity, EV_FL_takedamage, DAMAGE_AIM) ;
entity_set_float( pEntity, EV_FL_health, flHealth) ;
entity_set_float( pEntity, EV_FL_max_health, flHealth) ;
}
else
entity_set_float( pEntity, EV_FL_takedamage, DAMAGE_NO) ;
//drop_to_floor(pEntity);
if ( get_pcvar_num ( cvar_sandbag_glow) )
set_rendering( pEntity, kRenderFxGlowShell, RGB_MIN_VALUE, RGB_MAX_VALUE, RGB_MIN_VALUE, kRenderNormal, 25 ) ;
return 1 ;
}
Get aim origin code:
Spoiler
Code:
getAimOrigin( pPlayer, iDistance, Float : flVecDest[ 3 ] )
{
new Float : flVecOrigin[ 3 ] , Float : flVecViewOfs[ 3 ] , Float : flVecvelocity[ 3 ] ;
entity_get_vector( pPlayer, EV_VEC_origin, flVecOrigin) ;
entity_get_vector( pPlayer, EV_VEC_view_ofs, flVecViewOfs) ;
velocity_by_aim( pPlayer, iDistance, flVecvelocity) ;
vectorAdd( flVecOrigin, flVecViewOfs, flVecOrigin) ;
vectorAdd( flVecOrigin, flVecvelocity, flVecDest) ;
}
Validate origin code:
Spoiler
Code:
isValidOrigin( pPlayer, Float : flVecSrc[ 3 ] )
{
new Float : flVecOrigin[ 3 ] , Float : flVecHit[ 3 ] ;
entity_get_vector( pPlayer, EV_VEC_origin, flVecOrigin) ;
//engfunc(EngFunc_TraceLine, flVecOrigin, flVecSrc, DONT_IGNORE_MONSTERS, pPlayer);
//get_tr2(0, TR_vecEndPos, flVecSrc);
//global_get(glb_trace_endpos, flVecSrc);
//global_get(glb_trace_endpos, flVecSrc);
trace_line( pPlayer, flVecOrigin, flVecSrc, flVecHit) ;
flVecSrc[ 2 ] = flVecOrigin[ 2 ] ;
if ( point_contents( flVecSrc) != CONTENTS_EMPTY)
return 0 ;
message_begin ( MSG_BROADCAST, SVC_TEMPENTITY)
{
write_byte ( TE_BEAMPOINTS)
engfunc( EngFunc_WriteCoord, flVecOrigin[ 0 ] )
engfunc( EngFunc_WriteCoord, flVecOrigin[ 1 ] )
engfunc( EngFunc_WriteCoord, flVecOrigin[ 2 ] )
engfunc( EngFunc_WriteCoord, flVecSrc[ 0 ] )
engfunc( EngFunc_WriteCoord, flVecSrc[ 1 ] )
engfunc( EngFunc_WriteCoord, flVecSrc[ 2 ] )
write_short ( g_sIndexXenobeam)
write_byte ( 0 )
write_byte ( 0 )
write_byte ( 30 )
write_byte ( 25 )
write_byte ( 0 )
write_byte ( 255 )
write_byte ( 255 )
write_byte ( 255 )
write_byte ( 255 )
write_byte ( 0 )
}
message_end ( ) ;
return 1 ;
}
https://i.imgur.com/5AECyHu.png