pfn_touch error
1 Attachment(s)
hi
what's the problem in this code? It gives the below error message constantly and often crashes the server.
Code:
L 06/11/2010 - 14:53:48: [ENGINE] Invalid entity 291
L 06/11/2010 - 14:53:48: [AMXX] Displaying debug trace (plugin "portal.amxx")
L 06/11/2010 - 14:53:48: [AMXX] Run time error 10: native error (native "entity_
get_string")
L 06/11/2010 - 14:53:48: [AMXX] [0] portal.sma::pfn_touch (line 317)
L 06/11/2010 - 14:54:40: [ENGINE] Invalid entity 289
L 06/11/2010 - 14:54:40: [AMXX] Displaying debug trace (plugin "portal.amxx")
L 06/11/2010 - 14:54:40: [AMXX] Run time error 10: native error (native "entity_
get_string")
L 06/11/2010 - 14:54:40: [AMXX] [0] portal.sma::pfn_touch (line 317)
PHP Code:
/* AMX Portal * * (c) Copyright 2005, KleeneX * This file is provided as is (no warranties). * */
#include <amxmodx> #include <amxmisc> #include <fun> #include <engine>
#define MAX_PORTALS 10 #define MAX_TARGETS 10 #define MAX_ALLROUNDS 10 #define MAX_BLACKHOLES 10 #define MAX_STARGATEIN 10 #define MAX_STARGATEOUT 10
#define ADMIN_FLAG ADMIN_LEVEL_A new sgportal_model[64] = "sprites/portal1.spr" new sgtarget_model[64] = "sprites/portal1.spr"
new portal_model[64] = "sprites/e-tele1.spr" new target_model[64] = "sprites/b-tele1.spr" new allround_model[64] = "sprites/exit1.spr" new blackhole_model[64] = "models/blackhole.mdl"
new spr_portal, spr_target;
new cfgFolder[50], mapName[50]; #include "portal.inc"
public plugin_precache() { precache_model(portal_model) precache_model(target_model) precache_model(allround_model) precache_model(blackhole_model) spr_portal=precache_model(sgportal_model) spr_target=precache_model(sgtarget_model) precache_sound("debris/beamstart1.wav") precache_sound("debris/beamstart7.wav") precache_model("models/gate2.mdl") precache_sound("misc/sg1_siren.wav") precache_sound("misc/chevron.wav") }
public plugin_init() { register_plugin("AMX Portal", "1.4", "KleeneX") register_clcmd("amx_portal","create_portal",ADMIN_FLAG,": Create a Portal") register_clcmd("amx_ptarget","create_target",ADMIN_FLAG,": Create a Portal Target") register_clcmd("amx_aportal","create_allround",ADMIN_FLAG,": Create a Allround") register_clcmd("amx_blackhole","create_blackhole",ADMIN_FLAG,": Create a Blackhole") register_clcmd("amx_r_portal","remove_portal",ADMIN_FLAG,": Remove all Portals") register_clcmd("amx_r_ptarget","remove_target",ADMIN_FLAG,": Remove all Targets") register_clcmd("amx_r_aportal","remove_allround",ADMIN_FLAG,": Remove all Allrounds") register_clcmd("amx_r_blackhole","remove_blackhole",ADMIN_FLAG,": Remove all Blackholes") register_clcmd("amx_sgportal","create_sgportal",ADMIN_FLAG,":Create a Portal") register_clcmd("amx_sgptarget","create_sgtarget",ADMIN_FLAG,":Create a Portal Target") register_clcmd("amx_r_sgportal","remove_sgportal",ADMIN_FLAG,":Create a Stargate Portal") register_clcmd("amx_r_sgptarget","remove_sgtarget",ADMIN_FLAG,":Create a Stargate Portal Target") register_clcmd("amx_portalmenu","cmdPortalMenu",ADMIN_FLAG,": Open the Portal Menu") register_clcmd("amx_portalmenu2","cmdPortalMenu2",ADMIN_FLAG,": Open the Portal Menu2") register_menucmd(register_menuid("\rPortal Menu:"),1023,"actionPortalMenu") register_menucmd(register_menuid("\rPortal Menu2:"),1023,"actionPortalMenu2") get_configsdir(cfgFolder,49); get_mapname(mapName,49); register_concmd("saveportals","savePortals",ADMIN_FLAG,": save portals"); loadPortals(); }
public create_portal(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numPortals == MAX_PORTALS) { console_print(id, "Too many portals.") return PLUGIN_HANDLED } new Origin[3] get_user_origin(id,Origin) new Float:pOrigin[3] IVecFVec(Origin, Float:pOrigin); pOrigin[1] += 50 create_ent_portal(pOrigin); return PLUGIN_HANDLED }
public create_target(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numTargets == MAX_TARGETS) { console_print(id, "Too many targets.") return PLUGIN_HANDLED } new Origin[3] get_user_origin(id,Origin) new Float:pOrigin[3] IVecFVec(Origin, Float:pOrigin) pOrigin[1] += 50 create_ent_target(pOrigin); return PLUGIN_HANDLED }
public create_allround(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numAllrounds == MAX_ALLROUNDS) { console_print(id, "Too many allrounds.") return PLUGIN_HANDLED } new Origin[3] get_user_origin(id,Origin) new Float:pOrigin[3] IVecFVec(Origin, Float:pOrigin) pOrigin[1] += 50 create_ent_allround(pOrigin); return PLUGIN_HANDLED }
public create_blackhole(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numBlackholes == MAX_BLACKHOLES) { console_print(id, "Too many blackholes.") return PLUGIN_HANDLED } new Float:vOrigin[3] new Float:vAngles[3] entity_get_vector(id, EV_VEC_origin, vOrigin) entity_get_vector(id, EV_VEC_v_angle, vAngles) new Float:vNewOrigin[3] new Float:vNormal[3] new Float:vTraceDirection[3] new Float:vTraceEnd[3] new Float:vTraceResult[3] new Float:vEntAngles[3] VelocityByAim(id, 64, vTraceDirection) vTraceEnd[0] = vTraceDirection[0] + vOrigin[0] vTraceEnd[1] = vTraceDirection[1] + vOrigin[1] vTraceEnd[2] = vTraceDirection[2] + vOrigin[2] trace_line(id, vOrigin, vTraceEnd, vTraceResult) new bool:bad=(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0); vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 10.0) vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 10.0) vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 10.0) vector_to_angle(vNormal, vEntAngles); new blackhole=create_ent_blackhole(vNewOrigin, vEntAngles); if(bad) { remove_entity(blackhole) console_print(id, "You must create a blackhole on a wall!") numBlackholes--; return PLUGIN_HANDLED_MAIN } return PLUGIN_HANDLED; } public create_sgportal(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numStargateIn == MAX_STARGATEIN) { console_print(id, "Too many SG portals.") return PLUGIN_HANDLED } new Float:pOrigin[3] entity_get_vector(id, EV_VEC_origin, pOrigin) new Float:portal_angles[3] entity_get_vector(id, EV_VEC_v_angle, portal_angles) create_ent_sgportal(pOrigin, portal_angles,true); return PLUGIN_HANDLED }
public create_sgtarget(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED if(numStargateOut == MAX_STARGATEOUT) { console_print(id, "Too many SG targets.") return PLUGIN_HANDLED } new Float:pOrigin[3] entity_get_vector(id, EV_VEC_origin, pOrigin) new Float:portal_angles[3] entity_get_vector(id, EV_VEC_v_angle, portal_angles) create_ent_sgtarget(pOrigin,portal_angles); return PLUGIN_HANDLED }
public remove_portal(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numPortals; a++) { remove_entity(mapPortals[a]) } numPortals = 0 return PLUGIN_HANDLED }
public remove_target(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numTargets; a++) { remove_entity(mapTargets[a]) } numTargets = 0 return PLUGIN_HANDLED }
public remove_allround(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numAllrounds; a++) { remove_entity(mapAllrounds[a]) } numAllrounds = 0 return PLUGIN_HANDLED }
public remove_blackhole(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numBlackholes; a++) { remove_entity(mapBlackholes[a]) } numBlackholes = 0 return PLUGIN_HANDLED } public remove_sgportal(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numStargateIn; a++) { remove_entity(mapStargateIn[a]) } numStargateIn = 0 return PLUGIN_HANDLED }
public remove_sgtarget(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED for(new a = 0; a < numStargateOut; a++) { remove_entity(mapStargateOut[a]) } numStargateOut = 0 return PLUGIN_HANDLED } public server_frame() { for(new a = 0; a <= numPortals; ++a) { if(is_valid_ent(mapPortals[a])) { if(entity_get_float(mapPortals[a], EV_FL_frame) < 0.0 || entity_get_float(mapPortals[a], EV_FL_frame) > 25) { entity_set_float(mapPortals[a], EV_FL_frame, 0.0) } else entity_set_float(mapPortals[a], EV_FL_frame, entity_get_float(mapPortals[a], EV_FL_frame) + 0.5) } } for(new a = 0; a <= numTargets; ++a) { if(is_valid_ent(mapTargets[a])) { if(entity_get_float(mapTargets[a], EV_FL_frame) < 0.0 || entity_get_float(mapTargets[a], EV_FL_frame) > 25) { entity_set_float(mapTargets[a], EV_FL_frame, 0.0) } else entity_set_float(mapTargets[a], EV_FL_frame, entity_get_float(mapTargets[a], EV_FL_frame) + 0.5) } } for(new a = 0; a <= numAllrounds; ++a) { if(is_valid_ent(mapAllrounds[a])) { if(entity_get_float(mapAllrounds[a], EV_FL_frame) < 0.0 || entity_get_float(mapAllrounds[a], EV_FL_frame) > 25) { entity_set_float(mapAllrounds[a], EV_FL_frame, 0.0) } else entity_set_float(mapAllrounds[a], EV_FL_frame, entity_get_float(mapAllrounds[a], EV_FL_frame) + 0.5) } } for(new a = 0; a <= numBlackholes; ++a) { if(is_valid_ent(mapBlackholes[a])) { if(entity_get_float(mapBlackholes[a], EV_FL_frame) < 195.0 || entity_get_float(mapBlackholes[a], EV_FL_frame) > 255) { entity_set_float(mapBlackholes[a], EV_FL_frame, 195.0) } else entity_set_float(mapBlackholes[a], EV_FL_frame, entity_get_float(mapBlackholes[a], EV_FL_frame) + 1.5) } } new Float:new_frame = get_gametime() if( (new_frame - last_frame) >= ( 1.0 / framerate) ) { last_frame = new_frame for(new a = 0; a < numStargateIn; ++a) { if(is_valid_ent(mapStargateIn[a])) { entity_set_int(mapStargateIn[a], EV_INT_sequence, 1) frame[a] += 5.0 if(frame[a] >= 254.0) { frame[a] = 0.0 } entity_set_float(mapStargateIn[a], EV_FL_frame, frame[a]) if(frame[a] == 25 || frame[a] == 65 || frame[a] == 175 || frame[a] == 210 || frame[a] == 250) { emit_sound(mapStargateIn[a], CHAN_WEAPON, "misc/chevron.wav", 0.4, 2.6, 0, PITCH_NORM) } } } } }
public pfn_touch(ptr,ptd) { if (ptr > 0 && ptd > 0) { new Portal[32] entity_get_string(ptr, EV_SZ_classname, Portal, 31) if ( equal(Portal,"amx_portal") ) { if(numTargets == 0) return PLUGIN_HANDLED else{ new random_target, Origin[3] new Float:eOrigin[3] random_target = mapTargets[random_num(0,numTargets - 1)] entity_get_vector(random_target, EV_VEC_origin, eOrigin ) FVecIVec(Float:eOrigin,Origin) Origin[0] += 80 Origin[1] += 80 Origin[2] += 10 new Float:velocity[3] entity_get_vector(ptd, EV_VEC_velocity, velocity) emit_sound(ptr, CHAN_WEAPON, "debris/beamstart1.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) set_user_origin(ptd,Origin) velocity[2] = random_float(200.0, 225.0) entity_set_vector(ptd, EV_VEC_velocity, velocity) emit_sound(random_target, CHAN_WEAPON, "debris/beamstart7.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) } } if ( equal(Portal,"amx_aportal") ) { if(numAllrounds == 1) return PLUGIN_HANDLED else{ new random_target, Origin[3] new Float:eOrigin[3] random_target = mapAllrounds[random_num(0,numAllrounds - 1)] if(random_target != ptr) { entity_get_vector(random_target, EV_VEC_origin, eOrigin ) FVecIVec(Float:eOrigin,Origin) Origin[0] += 80 Origin[1] += 80 Origin[2] += 10 new Float:velocity[3] entity_get_vector(ptd, EV_VEC_velocity, velocity) emit_sound(ptr, CHAN_WEAPON, "debris/beamstart1.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) set_user_origin(ptd,Origin) velocity[2] = random_float(200.0, 225.0) entity_set_vector(ptd, EV_VEC_velocity, velocity) emit_sound(random_target, CHAN_WEAPON, "debris/beamstart7.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) } } } if ( equal(Portal,"amx_blackhole") ) { if(numBlackholes == 1) { //user_kill(ptd,1) return PLUGIN_HANDLED }else{ new random_target new Float:eOrigin[3] random_target = mapBlackholes[random_num(0,numBlackholes - 1)] if(random_target != ptr) { entity_get_vector(random_target, EV_VEC_origin, eOrigin ) new Float:vEntAngles[3] entity_get_vector(random_target, EV_VEC_angles, vEntAngles) if(vEntAngles[0] < 181) eOrigin[2] += 50 else if(vEntAngles[0] < 361) eOrigin[2] -= 50 if(vEntAngles[1] == 0) eOrigin[0] += 80 else if(vEntAngles[1] < 91) eOrigin[1] += 80 else if(vEntAngles[1] < 181) eOrigin[0] -= 80 else if(vEntAngles[1] < 271) eOrigin[1] -= 80 new Float:velocity[3] new players[32],pnum get_players(players,pnum) entity_get_vector(ptd, EV_VEC_velocity, velocity) emit_sound(ptr, CHAN_WEAPON, "debris/beamstart1.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) entity_set_vector(ptd,EV_VEC_origin,eOrigin) emit_sound(random_target, CHAN_WEAPON, "debris/beamstart7.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) if(vEntAngles[0] < 361 && vEntAngles[0] > 180) velocity[2] = random_float(-200.0, -225.0) else velocity[2] = random_float(200.0, 225.0) entity_set_vector(ptd, EV_VEC_velocity, velocity) } } } if ( equal(Portal,"amx_sgportal") ) { if(numStargateOut == 0) return PLUGIN_CONTINUE else{ new random_target, Origin[3] new Float:eOrigin[3] random_target = mapStargateOut[random_num(0,numTargets - 1)] entity_get_vector(random_target, EV_VEC_origin, eOrigin ) emit_sound(ptr, CHAN_WEAPON, "misc/sg1_siren.wav", 0.6, ATTN_STATIC, 0, PITCH_NORM) new Float:velocity[3] entity_get_vector(ptd, EV_VEC_velocity, velocity) FVecIVec(Float:eOrigin,Origin) Origin[2] += 10 set_user_origin(ptd,Origin) emit_sound(random_target, CHAN_WEAPON, "misc/sg1_siren.wav", 0.6, ATTN_STATIC, 0, PITCH_NORM) velocity[2] = random_float(200.0, 225.0) entity_set_vector(ptd, EV_VEC_velocity, velocity) } } if ( equal(Portal,"amx_sgptarget") ) { if(numAllrounds == 1) return PLUGIN_CONTINUE else{ new random_target, Origin[3] new Float:eOrigin[3] random_target = mapAllrounds[random_num(0,numAllrounds - 1)] if(random_target != ptr) { entity_get_vector(random_target, EV_VEC_origin, eOrigin ) FVecIVec(Float:eOrigin,Origin) emit_sound(ptr, CHAN_WEAPON, "debris/beamstart1.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) Origin[0] += 40 Origin[1] += 40 Origin[2] += 10 new Float:velocity[3] //entity_get_vector(ptd, EV_VEC_velocity, velocity) set_user_origin(ptd,Origin) emit_sound(random_target, CHAN_WEAPON, "debris/beamstart7.wav", 0.4, ATTN_NORM, 0, PITCH_NORM) //velocity[2] = random_float(200.0, 225.0) entity_set_vector(ptd, EV_VEC_velocity, velocity) } } } } return PLUGIN_CONTINUE }
public cmdPortalMenu(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED displayPortalMenu(id) return PLUGIN_HANDLED }
public displayPortalMenu(id) { new MenuBody[256], keys new nLen = format( MenuBody, 255, "\rPortal Menu:^n" ) if (numPortals == MAX_PORTALS) nLen += format( MenuBody[nLen], 255-nLen,"^n\w1. Create Portal \r(Limit reached)") else nLen += format( MenuBody[nLen], 255-nLen, "^n\w1. Create Portal" ) if (numTargets == MAX_TARGETS) nLen += format( MenuBody[nLen],255-nLen,"^n\w2. Create Target \r(Limit reached)") else nLen += format( MenuBody[nLen],255-nLen,"^n\w2. Create Target") if (numAllrounds == MAX_ALLROUNDS) nLen += format( MenuBody[nLen],255-nLen,"^n\w3. Create Allround \r(Limit reached)") else nLen += format( MenuBody[nLen],255-nLen,"^n\w3. Create Allround") if (numBlackholes == MAX_BLACKHOLES) nLen += format( MenuBody[nLen],255-nLen,"^n\w4. Create Blackhole \r(Limit reached)^n") else nLen += format( MenuBody[nLen],255-nLen,"^n\w4. Create Blackhole^n") nLen += format( MenuBody[nLen], 255-nLen, "^n\w5. Remove Portals" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\w6. Remove Targets" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\w7. Remove Allround" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\w8. Remove Blackholes^n" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\w9. Save^n" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\y0. Exit" ) keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9) show_menu( id, keys, MenuBody, -1) return PLUGIN_CONTINUE }
public actionPortalMenu(id,key) { new cid, level switch(key) { case 0: create_portal(id,level,cid) case 1: create_target(id,level,cid) case 2: create_allround(id,level,cid) case 3: create_blackhole(id,level,cid) case 4: remove_portal(id,level,cid) case 5: remove_target(id,level,cid) case 6: remove_allround(id,level,cid) case 7: remove_blackhole(id,level,cid) case 8: savePortals(id,level,cid) } if (key != 9) displayPortalMenu(id) return PLUGIN_HANDLED }
public cmdPortalMenu2(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED displayPortalMenu2(id) return PLUGIN_HANDLED } public displayPortalMenu2(id) { new MenuBody[256], keys new nLen = format( MenuBody, 255, "\rPortal Menu2:^n" ) if (numStargateIn == MAX_STARGATEIN) nLen += format( MenuBody[nLen], 255-nLen,"^n\w1. Create Stargate Portal \r(Limit reached)") else nLen += format( MenuBody[nLen], 255-nLen, "^n\w1. Create Stargate Portal" ) if (numStargateOut == MAX_STARGATEOUT) nLen += format( MenuBody[nLen],255-nLen,"^n\w2. Create Stargate Target \r(Limit reached)") else nLen += format( MenuBody[nLen],255-nLen,"^n\w2. Create Stargate Target") nLen += format( MenuBody[nLen], 255-nLen, "^n^n\w3. Remove Portals" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\w4. Remove Targets" ) nLen += format( MenuBody[nLen], 255-nLen, "^n^n\w9. Save^n" ) nLen += format( MenuBody[nLen], 255-nLen, "^n\y0. Exit" ) keys = (1<<0|1<<1|1<<2|1<<3|1<<8|1<<9) show_menu( id, keys, MenuBody, -1) return PLUGIN_CONTINUE }
public actionPortalMenu2(id,key) { new cid, level switch(key) { case 0: create_sgportal(id,level,cid) case 1: create_sgtarget(id,level,cid) case 2: remove_sgportal(id,level,cid) case 3: remove_sgtarget(id,level,cid) case 8: savePortals(id,level,cid) } if (key != 9) displayPortalMenu2(id) return PLUGIN_HANDLED }
public draw_sgportal(id) { if(!is_valid_ent(id)) return PLUGIN_HANDLED new spriteorigin[3], Float:spriteoriginF[3] entity_get_vector(id, EV_VEC_origin, spriteoriginF) FVecIVec(spriteoriginF,spriteorigin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(17) write_coord(spriteorigin[0]) write_coord(spriteorigin[1]) write_coord(spriteorigin[2]) write_short(spr_portal) write_byte(30) write_byte(255) message_end() set_task(2.0, "draw_sgportal", id) return PLUGIN_HANDLED } public draw_sgtarget(id) { if(!is_valid_ent(id)) return PLUGIN_HANDLED new spriteorigin[3], Float:spriteoriginF[3] entity_get_vector(id, EV_VEC_origin, spriteoriginF) FVecIVec(spriteoriginF,spriteorigin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(17) write_coord(spriteorigin[0]) write_coord(spriteorigin[1]) write_coord(spriteorigin[2]) write_short(spr_target) write_byte(30) write_byte(255) message_end() set_task(2.0, "draw_sgtarget", id) return PLUGIN_HANDLED }
|