Senior Member
08-10-2012
, 10:12
register_touch dont work
#1
when I'm on a sprite, nothing happens
plugin_init
PHP Code:
register_touch ( "env_sprite" , "player" , "portal_touch" )
PHP Code:
public set_portal ( id ) { new g_ent new Float : g_aim_origin [ 3 ] new Float : g_ent_angles [ 3 ] set_pev ( g_ent , pev_scale , 1.0 ) g_ent = create_entity ( "env_sprite" ) entity_set_string ( g_ent , EV_SZ_classname , "iportal" ) engfunc ( EngFunc_SetModel , g_ent , "sprites/portal.spr" ) static Float : normal [ 3 ] fm_get_aim_origin_normal ( id , g_aim_origin , normal ) normal [ 0 ] *= - 1.0 normal [ 1 ] *= - 1.0 normal [ 2 ] *= - 1.0 vector_to_angle ( normal , g_ent_angles ) engfunc ( EngFunc_SetOrigin , g_ent , g_aim_origin ) set_pev ( g_ent , pev_angles , g_ent_angles ) entity_set_size ( g_ent , Float :{ 0.0 , 0.0 , 0.0 }, Float :{ 30.0 , 30.0 , 30.0 }) entity_set_int ( g_ent , EV_INT_solid , SOLID_TRIGGER ) set_pev ( g_ent , pev_rendermode , kRenderTransAdd ) set_pev ( g_ent , pev_renderamt , 220.0 ) set_pev ( g_ent , pev_framerate , 15.0 ) set_pev ( g_ent , pev_spawnflags , SF_SPRITE_STARTON ) DispatchSpawn ( g_ent ) set_pev ( g_ent , pev_angles , g_ent_angles ) entity_set_edict ( g_ent , EV_ENT_owner , id ) player_portals [ id ]++ if( player_portal [ id ] == 1 ) { player_portal1 [ id ] = g_ent client_print ( id , print_chat , "POR %d" , player_portal1 [ id ]) } else if( player_portal [ id ] == 2 ) { player_portal2 [ id ] = g_ent client_print ( id , print_chat , "POR %d" , player_portal2 [ id ]) } return PLUGIN_CONTINUE ; }
touch
PHP Code:
public portal_touch ( ptr , id ) { if( is_user_alive ( id )) { static szClassName [ 32 ] pev ( ptr , pev_classname , szClassName , sizeof szClassName - 1 ) if( equal ( szClassName , "iportal" )) { return FMRES_IGNORED if( player_portal1 [ id ] == ptr ) { new Float : fOrigin [ 3 ]; pev ( player_portal2 [ id ], pev_origin , fOrigin ); set_user_origin ( id , fOrigin ) parseAngle ( id , player_portal1 [ id ], player_portal2 [ id ]); client_print ( id , print_chat , "POR %d" , player_portal2 [ id ]) } else if( player_portal2 [ id ] == ptr ) { new Float : fOrigin [ 3 ]; pev ( player_portal1 [ id ], pev_origin , fOrigin ); set_user_origin ( id , fOrigin ) parseAngle ( id , player_portal2 [ id ], player_portal1 [ id ]); client_print ( id , print_chat , "POR %d" , player_portal1 [ id ]) } } } server_cmd ( "say Touch ID: %d" , id ) return FMRES_IGNORED }
other used functions
Spoiler
PHP Code:
stock fm_get_aim_origin_normal ( index , Float : origin [ 3 ], Float : normal [ 3 ]) { static Float : start [ 3 ], Float : view_ofs [ 3 ] pev ( index , pev_origin , start ) pev ( index , pev_view_ofs , view_ofs ) xs_vec_add ( start , view_ofs , start ) static Float : dest [ 3 ] pev ( index , pev_v_angle , dest ) engfunc ( EngFunc_MakeVectors , dest ) global_get ( glb_v_forward , dest ) xs_vec_mul_scalar ( dest , 9999.0 , dest ) xs_vec_add ( start , dest , dest ) static tr , Float : dist tr = create_tr2 () engfunc ( EngFunc_TraceLine , start , dest , DONT_IGNORE_MONSTERS , index , tr ) get_tr2 ( tr , TR_vecEndPos , origin ) dist = get_distance_f ( start , origin ) origin [ 0 ] -= ( origin [ 0 ] - start [ 0 ])/ dist origin [ 1 ] -= ( origin [ 1 ] - start [ 1 ])/ dist origin [ 2 ] -= ( origin [ 2 ] - start [ 2 ])/ dist get_tr2 ( tr , TR_vecPlaneNormal , normal ) free_tr2 ( tr ) } parseAngle ( id , in , out ){ new Float : fAngles [ 3 ]; pev ( id , pev_v_angle , fAngles ); angle_vector ( fAngles , ANGLEVECTOR_FORWARD , fAngles ); new Float : fNormalIn [ 3 ]; pev ( in , pev_vuser1 , fNormalIn ); xs_vec_neg ( fNormalIn , fNormalIn ); new Float : fNormalOut [ 3 ]; pev ( out , pev_vuser1 , fNormalOut ); xs_vec_sub ( fAngles , fNormalIn , fAngles ); xs_vec_add ( fAngles , fNormalOut , fAngles ); //fAngles[2] = -fAngles[2]; vector_to_angle ( fAngles , fAngles ); set_pev ( id , pev_angles , fAngles ); set_pev ( id , pev_fixangle , 1 ); pev ( id , pev_velocity , fAngles ); new Float : fSpeed = vector_length ( fAngles ); xs_vec_normalize ( fAngles , fAngles ); xs_vec_sub ( fAngles , fNormalIn , fAngles ); xs_vec_add ( fAngles , fNormalOut , fAngles ); xs_vec_normalize ( fAngles , fAngles ); xs_vec_mul_scalar ( fAngles , fSpeed , fAngles ); set_pev ( id , pev_velocity , fAngles ); }