|
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); }
|
|