AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   old amx_tripmines plugin (https://forums.alliedmods.net/showthread.php?t=26611)

MattOG 04-05-2006 15:54

old amx_tripmines plugin
 
::EDIT::
not sure if this should be here or the suggestions/requests forum, pls move if needed. Ta.

Is there anyone who can/would be willing to iron out the bugs in this plugin. It was trashed because the owner/author was banned from the forum. It's almost perfect just these error messages in console once a mine is destroyed, and sometimes the mines aren't shootable. (no, i'm not planting admin mines!!)

They occur most of the time someone shoots after a mine is destroyed (not just near the mine, but anywhere in the server).

Thanks.

Code:

L 04/04/2006 - 17:50:09: [ENGINE] Invalid player 0 (not in-game)
L 04/04/2006 - 17:50:09: [AMXX] Displaying debug trace (plugin "amx_tripmine.amxx")
L 04/04/2006 - 17:50:09: [AMXX] Run time error 10: native error (native "entity_get_vector")
L 04/04/2006 - 17:50:09: [AMXX]    [0] amx_tripmine.sma::detonate_mine (line 133)
L 04/04/2006 - 17:50:09: [AMXX]    [1] amx_tripmine.sma::Event_ShotFired (line 474)

L 04/04/2006 - 17:50:34: [ENGINE] Invalid entity 70
L 04/04/2006 - 17:50:34: [AMXX] Displaying debug trace (plugin "amx_tripmine.amxx")
L 04/04/2006 - 17:50:34: [AMXX] Run time error 10: native error (native "entity_get_vector")
L 04/04/2006 - 17:50:34: [AMXX]    [0] amx_tripmine.sma::FindMine (line 508)
L 04/04/2006 - 17:50:34: [AMXX]    [1] amx_tripmine.sma::Event_ShotFired (line 460)

Code:
#include <amxmodx> #include <amxmisc> #include <engine> #define MAX_MINES 10 #define MAX_PLAYERS   32 #define TASK_MOVE     15200 new g_nMineEnts[MAX_PLAYERS][MAX_MINES] new Float:g_fMdlSize[2][3] = { {-2.15, -4.3, -2.15}, {2.15, 4.3, 2.15} } new bool:planting_mine[33] new bool:waiting_time[33]=false new g_nMineAmmo[MAX_PLAYERS][2] new g_nCurWeapon[MAX_PLAYERS][2] new WAITTIME[32] new beam, boom public new_round(id){    g_nMineAmmo[id-1][0] = (get_cvar_num("sv_tmine_ammo")) } public client_connect(id) {    g_nMineAmmo[id-1][0] = (get_cvar_num("sv_tmine_ammo")) } detonate_mine(iCurrent) { new Float:vOrigin[3] entity_get_vector(iCurrent, EV_VEC_origin, vOrigin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(99) //99 = KillBeam write_short(iCurrent) message_end() message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(3) write_coord(floatround(vOrigin[0])) write_coord(floatround(vOrigin[1])) write_coord(floatround(vOrigin[2])) write_short(boom) write_byte(50) write_byte(15) write_byte(0) message_end() RadiusDamage(vOrigin, 10,50) remove_entity(iCurrent) } public CreateMine(id){      if (planting_mine[id]==false)     return PLUGIN_HANDLED        if( !is_user_alive( id ) )    {        client_print( id, print_chat, "You are Dead! You Have No Mines to Plant!" )        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)    g_nMineAmmo[id-1][0] -= 1    g_nMineEnts[id-1][g_nMineAmmo[id-1][1]] = create_entity( "info_target" )    if( g_nMineEnts[id-1][g_nMineAmmo[id-1][1]] == 0 )    {        client_print( id, print_chat, "You Planted A Dud!    :(" )        return PLUGIN_HANDLED    }    entity_set_string(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_SZ_classname, "tripmine")    entity_set_model(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], "models/v_tripmine.mdl")    entity_set_int(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_INT_body, 3)    entity_set_int(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_INT_sequence, 7)   // 7 = TRIPMINE_WORLD    entity_set_int(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_INT_solid, 2) //*************************ADDED BY ME*************************    set_size( g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], g_fMdlSize[0], g_fMdlSize[1] )    new Float:MinBox[3]    new Float:MaxBox[3]    MinBox[0] = -8.0    MinBox[1] = -8.0    MinBox[2] = -8.0    MaxBox[0] = 8.0    MaxBox[1] = 8.0    MaxBox[2] = 8.0    entity_set_vector(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_VEC_mins, MinBox)    entity_set_vector(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_VEC_maxs, MaxBox)    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)    if(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0) {       remove_entity(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]])       client_print( id, print_chat, "[TRIPMINES] You must plant the tripmine on a wall!")       return PLUGIN_HANDLED_MAIN    }    vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 8.0)    vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 8.0)    vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 8.0)    entity_set_origin(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], vNewOrigin)    vector_to_angle(vNormal, vEntAngles)    entity_set_vector(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_VEC_angles, vEntAngles)    new Float:vBeamEnd[3]    new Float:vTracedBeamEnd[3]    vBeamEnd[0] = vNewOrigin[0] + (vNormal[0] * 8192)    vBeamEnd[1] = vNewOrigin[1] + (vNormal[1] * 8192)    vBeamEnd[2] = vNewOrigin[2] + (vNormal[2] * 8192)    trace_line(-1, vNewOrigin, vBeamEnd, vTracedBeamEnd)    entity_set_vector(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_VEC_vuser1, vTracedBeamEnd)    entity_set_int(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], EV_INT_movetype, 5) //5 = movetype_fly, No grav, but collides.    emit_sound(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], CHAN_WEAPON, "weapons/mine_deploy.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)    emit_sound(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], CHAN_VOICE, "weapons/mine_charge.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)    waiting_time[id] = true    set_task( get_cvar_float("sv_tmine_wait"), "reset_wait", 1 )      new args[4]    num_to_str(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]], args, 4)    set_task( get_cvar_float("sv_tmine_activate"), "TripMineActivate", 0, args, 4)    return PLUGIN_HANDLED_MAIN } public reset_wait(id){    waiting_time[id] = false } public TripMineActivate(MineID[]) { new EntID = str_to_num(MineID) new Float:vOrigin[3] entity_get_vector(EntID, EV_VEC_origin, vOrigin) new Float:vEnd[3] entity_get_vector(EntID, EV_VEC_vuser1, vEnd) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(0) write_coord(floatround(vOrigin[0])) write_coord(floatround(vOrigin[1])) write_coord(floatround(vOrigin[2])) write_coord(floatround(vEnd[0]))   write_coord(floatround(vEnd[1]))   write_coord(floatround(vEnd[2]))   write_short(beam) write_byte(0) write_byte(0) write_byte(10) //Life write_byte(5) //Width write_byte(0) write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(get_cvar_num("sv_tmine_laseractive")) write_byte(0) message_end() entity_set_int(EntID, EV_INT_iuser2, 1) emit_sound(EntID, CHAN_VOICE, "weapons/mine_activate.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } public TripMineThink() {     new iCurrent     iCurrent = find_ent_by_class(-1, "tripmine")     while(iCurrent != 0) {     if(entity_get_int(iCurrent, EV_INT_iuser2) == 1) {         new Float:vOrigin[3]         entity_get_vector(iCurrent, EV_VEC_origin, vOrigin)         new Float:vEnd[3]         entity_get_vector(iCurrent, EV_VEC_vuser1, vEnd)         new Float:vTrace[3]         new iHit         iHit = trace_line(iCurrent, vOrigin, vEnd, vTrace)         if(iHit > 0) {             new szClassName[32]             entity_get_string(iHit, EV_SZ_classname, szClassName, 32);                     if(equal(szClassName, "player")) {         new id         new szNetName[32]         entity_get_string(iHit, EV_SZ_netname, szNetName, 32)         client_print(id, print_chat, "[TRIPMINES] %s detonated your mine.",szNetName)         detonate_mine(iCurrent)               }             }     }         iCurrent =  find_ent_by_class(iCurrent, "tripmine")    } } public LaserThink() { new iCurrent iCurrent = find_ent_by_class(-1, "tripmine") while(iCurrent != 0) { if(entity_get_int(iCurrent, EV_INT_iuser2) == 1) { new Float:vOrigin[3] entity_get_vector(iCurrent, EV_VEC_origin, vOrigin) new Float:vEnd[3] entity_get_vector(iCurrent, EV_VEC_vuser1, vEnd) message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(0) write_coord(floatround(vOrigin[0])) write_coord(floatround(vOrigin[1])) write_coord(floatround(vOrigin[2])) write_coord(floatround(vEnd[0])) write_coord(floatround(vEnd[1])) write_coord(floatround(vEnd[2])) write_short(beam) write_byte(0) write_byte(0) write_byte(10) //Life write_byte(5) //Width write_byte(0) write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(get_cvar_num("sv_tmine_laserstrength")) write_byte(0) message_end() } iCurrent =  find_ent_by_class(iCurrent, "tripmine") } } public Admin_CreateMine(id,level,cid){     if (!cmd_access(id,level,cid,1)) {        return PLUGIN_HANDLED     }     g_nMineAmmo[id-1][0] = g_nMineAmmo[id-1][0] + 1     planting_mine[id]=true     CreateMine(id)     return PLUGIN_HANDLED } public ClCmd_tMineHold( id ){     if( !is_user_alive( id ) )     {         client_print( id, print_chat, "You are Dead! You Have No Mines to Plant!" )         return PLUGIN_HANDLED     }     if( g_nMineAmmo[id-1][0] <= 0 )     {         client_print( id, print_chat, "You have NO Trip Mines to Plant!" )         return PLUGIN_HANDLED     }     if( CheckMovement( id ) )     {         client_print( id, print_chat, "Stand Still To Plant a Trip Mine!" )         return PLUGIN_HANDLED     }     if( waiting_time[id]==true )     {         num_to_str(get_cvar_num("sv_tmine_wait"), WAITTIME, 31)         client_print( id, print_chat, "Must wait %s seconds after planting a mine to plant another.",WAITTIME)         return PLUGIN_HANDLED     }     new Float:vOrigin[3]     new Float:vAngles[3]     new Float:vNormal[3]     new Float:vTraceDirection[3]     new Float:vTraceEnd[3]     new Float:vTraceResult[3]     entity_get_vector(id, EV_VEC_origin, vOrigin)     entity_get_vector(id, EV_VEC_v_angle, vAngles)     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)     if(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0) {        remove_entity(g_nMineEnts[id-1][g_nMineAmmo[id-1][1]])        client_print( id, print_chat, "[TRIPMINES] You must plant the tripmine on a wall!")        return PLUGIN_HANDLED_MAIN     }     new nMinePlant_Time = get_cvar_num( "sv_tmine_plant_time" )     message_begin( MSG_ONE, 108, {0,0,0}, id )     write_byte( nMinePlant_Time )       write_byte( 0 )                     message_end()     new pID[2]     pID[0] = id     set_task( 0.1, "CheckMove", (TASK_MOVE+id), pID, 1 )     set_task( float(nMinePlant_Time), "CreateMine", 1 )     planting_mine[id]=true     return PLUGIN_HANDLED } public ClCmd_tMineRelease( id ){     planting_mine[id]=false     if( task_exists( (TASK_MOVE+id) ) ){         remove_task( (TASK_MOVE+id) )     }     message_begin( MSG_ONE, 108, {0,0,0}, id )     write_byte( 0 )     write_byte( 0 )     message_end()     return PLUGIN_HANDLED } public CheckMove( p_aCmdArgs[] ){     new id = p_aCmdArgs[0]     if( CheckMovement( id ) )         ClCmd_tMineRelease( id )     else         set_task( 0.1, "CheckMove", (TASK_MOVE+id), p_aCmdArgs, 1 )     return PLUGIN_HANDLED } public Event_ShotFired( id ){     new wID = read_data( 2 )     new wAmmo = read_data( 3 )     if( g_nCurWeapon[id-1][0] != wID ) {         g_nCurWeapon[id-1][0] = wID         g_nCurWeapon[id-1][1] = wAmmo         return PLUGIN_CONTINUE     }     if( g_nCurWeapon[id-1][1] < wAmmo ){         g_nCurWeapon[id-1][1] = wAmmo         return PLUGIN_CONTINUE     }     if( g_nCurWeapon[id-1][1] == wAmmo )         return PLUGIN_CONTINUE     g_nCurWeapon[id-1][1] = wAmmo     g_nCurWeapon[id-1][0] = wID     new nPoint[3], nSize = get_cvar_num( "sv_tmine_size" )     get_user_origin( id, nPoint, 3 )     new nEntity = FindMine( nPoint, nSize )     if( nEntity > 0 ){         new pCmdArgs[2]         GetMine_Owner_Index( nEntity, pCmdArgs )         if( pCmdArgs[0] == id ){             client_print( id, print_chat, "You Shot One Of Your Own Mines!" )         }else{             new szMineOwner[32]             get_user_name( pCmdArgs[0], szMineOwner, 31 )             client_print( id, print_chat, "You Shot One Of %s's Proximity Mines!!", szMineOwner )         }     new iCurrent     iCurrent = find_ent_by_class(-1, "tripmine")         detonate_mine(iCurrent)     }     return PLUGIN_CONTINUE } GetMine_Owner_Index( nMineEntity, nOutput[] ) {     new nPlayers[MAX_PLAYERS], nNum, i, j     get_players( nPlayers, nNum, "c" )     nOutput[0] = nOutput[1] = 0     for( i = 0; i < nNum; i++ ) {         for( j = 0; j < MAX_MINES; j++ ) {             if( g_nMineEnts[nPlayers[i]-1][j] > 0 ) {                 if( nMineEntity == g_nMineEnts[nPlayers[i]-1][j] ) {                     nOutput[0] = nPlayers[i]    // Owner ID                     nOutput[1] = j              // Mine Index                     return                 }             }         }     }     return } FindMine( p_nUserOrigin[3], p_nRadius ) {     new nPlayers[MAX_PLAYERS], nNum, i, j     new nEOrigin[3], Float:fEOrigin[3]     new nProximity = 0     get_players( nPlayers, nNum, "c" )     for( i = 0; i < nNum; i++ ){         for( j = 0; j < MAX_MINES; j++ ){             if( g_nMineEnts[nPlayers[i]-1][j] != 0 ){                 entity_get_vector( g_nMineEnts[nPlayers[i]-1][j], EV_VEC_origin, fEOrigin )                 FVecIVec( fEOrigin, nEOrigin )                 nProximity = get_distance( p_nUserOrigin, nEOrigin )                 if( nProximity <= p_nRadius ){                     return g_nMineEnts[nPlayers[i]-1][j]                 }             }         }     }     return 0 } RemovePlantedMines( id ) {     for( new i = 0; i < MAX_MINES; i++ ) {         if( g_nMineEnts[id-1][i] > 0 ) {             remove_entity( g_nMineEnts[id-1][i] )             g_nMineEnts[id-1][i] = 0         }     }     g_nMineAmmo[id-1][1] = 0     return } public client_authorized( id ) {     g_nMineAmmo[id-1][0] = 0     RemovePlantedMines( id )     return PLUGIN_CONTINUE } public client_disconnect( id ) {     g_nMineAmmo[id-1][0] = 0     RemovePlantedMines( id )     return PLUGIN_CONTINUE } bool:CheckMovement( id ){     if( get_user_button( id ) & (IN_JUMP|IN_FORWARD|IN_BACK|IN_MOVELEFT|IN_MOVERIGHT) )         return true     return false } public plugin_precache() {    precache_sound("weapons/mine_deploy.wav")    precache_sound("weapons/mine_charge.wav")    precache_sound("weapons/mine_activate.wav")    precache_model("models/v_tripmine.mdl")    beam = precache_model("sprites/laserbeam.spr")    boom = precache_model("sprites/zerogxplode.spr")    return PLUGIN_CONTINUE } public plugin_init(){     register_plugin("Trip Mines","2.6","Blunted1 & Burnzy")     register_cvar("amx_tripmines","1",FCVAR_SERVER)     register_clcmd("+tmine","ClCmd_tMineHold",-1,"- Bind z +tmine   Then hold Z!")     register_clcmd("-tmine","ClCmd_tMineRelease",-1,"")     register_concmd("admin_tripmine","Admin_CreateMine", ADMIN_LEVEL_H)     register_event("ResetHUD","new_round","b")     register_event("CurWeapon","Event_ShotFired","b")     register_cvar("sv_tmine_plant_time","3")       register_cvar("sv_tmine_ammo","5")     register_cvar("sv_tmine_laserstrength","25")     register_cvar("sv_tmine_laseractive","100")         register_cvar("sv_tmine_activate","3")     register_cvar("sv_tmine_size","9")       register_cvar("sv_tmine_wait","10")     set_task(0.01,"TripMineThink",0,"",0,"b")     set_task(1.0,"LaserThink",0,"",0,"b")     set_task(2.0,"check_cvars",0,"",0,"b")     return PLUGIN_CONTINUE } public check_cvars() {     if (get_cvar_num("sv_tmine_ammo") > 10) {         server_print("[TRIPMINES] sv_tmine_ammo can not be greater than 10, setting cvar to 10 now.")         set_cvar_num("sv_tmine_ammo", 10)     }     if (get_cvar_num("sv_tmine_ammo") < 1) {         server_print("[TRIPMINES] sv_tmine_ammo can not be less than 1, setting cvar to 1 now.")         set_cvar_num("sv_tmine_ammo", 1)     }     if (get_cvar_num("sv_tmine_plant_time") > 15) {         server_print("[TRIPMINES] sv_tmine_plant_time can not be greater than 15, setting cvar to 15 now.")         set_cvar_num("sv_tmine_plant_time", 15)     }     if (get_cvar_num("sv_tmine_plant_time") < 2) {         server_print("[TRIPMINES] sv_tmine_plant_time can not be less than 2, setting cvar to 2 now.")         set_cvar_num("sv_tmine_plant_time", 2)     }     if (get_cvar_num("sv_tmine_wait") < 5 ) {         server_print("[TRIPMINES] sv_tmine_wait can not be less than 5, setting cvar to 5 now.")         set_cvar_num("sv_tmine_wait",5)     }     if (get_cvar_num("sv_tmine_wait") > 50 ) {         server_print("[TRIPMINES] sv_tmine_wait can not be greater than 50, setting cvar to 50 now.")         set_cvar_num("sv_tmine_wait",50)     }     if (get_cvar_num("sv_tmine_activate") < 1 ) {         server_print("[TRIPMINES] sv_tmine_activate can not be less than 1, setting cvar to 1 now.")         set_cvar_num("sv_tmine_activate",1)     }     if (get_cvar_num("sv_tmine_activate") > 10 ) {         server_print("[TRIPMINES] sv_tmine_activate can not be greater than 10, setting cvar to 10 now.")         set_cvar_num("sv_tmine_activate",10)     }     if (get_cvar_num("sv_tmine_size") < 8 ) {         server_print("[TRIPMINES] sv_tmine_size can not be less than 8, setting cvar to 8 now.")         set_cvar_num("sv_tmine_size",8)     }     if (get_cvar_num("sv_tmine_size") > 10 ) {         server_print("[TRIPMINES] sv_tmine_size can not be greater than 10, setting cvar to 10 now.")         set_cvar_num("sv_tmine_size",10)     }     if (get_cvar_num("sv_tmine_laseractive") < 100 ) {         server_print("[TRIPMINES] sv_tmine_laseractive can not be greater than 100, setting cvar to 100 now.")         set_cvar_num("sv_tmine_size",100)     }     if (get_cvar_num("sv_tmine_laseractive") > 200 ) {         server_print("[TRIPMINES] sv_tmine_laseractive can not be greater than 200, setting cvar to 200 now.")         set_cvar_num("sv_tmine_size",200)     }     if (get_cvar_num("sv_tmine_laserstrength") < 15 ) {         server_print("[TRIPMINES] sv_tmine_laserstrength can not be greater than 15, setting cvar to 15 now.")         set_cvar_num("sv_tmine_size",15)     }     if (get_cvar_num("sv_tmine_laserstrength") > 80 ) {         server_print("[TRIPMINES] sv_tmine_laserstrength can not be greater than 80, setting cvar to 80 now.")         set_cvar_num("sv_tmine_size",80)     } }

MattOG 04-13-2006 15:08

ba-dump, anyone?

SweatyBanana 04-13-2006 15:47

isnt the player not in server one because you are trying to execute the damage on the server, not only the players...I got that a while back with 1 of my plugins.

MattOG 04-14-2006 01:46

Quote:

Originally Posted by SweatyBanana
isnt the player not in server one because you are trying to execute the damage on the server, not only the players...I got that a while back with 1 of my plugins.

yeah, it tends to be a missing "is_user_connected || is_user_alive" bit, but i get lost when it comes to entities, so I'm not sure if the error is with that or something else, and rather than mess it up, I was hoping someone could give me a pointer in the right direction.


All times are GMT -4. The time now is 16:40.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.