Necesito modificar el plugin portal
#1
que tal. tengo este plugin de portales que esta muy bueno, pero no quedan guardado en el mapa. tiene un menú pero no hay opción de guardar.
me gustaría que tenga la opción de guardar y que queden permanentemente en el mapa hasta que un admin los elimine.

Código PHP:
/* 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 ADMIN_FLAG     ADMIN_LEVEL_A

new mapPortals[MAX_PORTALS]
new 
mapTargets[MAX_TARGETS]
new 
mapAllrounds[MAX_ALLROUNDS]
new 
mapBlackholes[MAX_BLACKHOLES]

new 
numPortals
new numTargets
new numAllrounds
new numBlackholes

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"

public plugin_precache() {
    
precache_model(portal_model)
    
precache_model(target_model)
    
precache_model(allround_model)
    
precache_model(blackhole_model)
    
precache_sound("debris/beamstart1.wav")
    
precache_sound("debris/beamstart7.wav")
}

public 
plugin_init() {
    
register_plugin("AMX Portal""1.4""KleeneX")
    
register_clcmd("amx_portal","create_portal",ADMIN_FLAG,": Crear un Portal")
    
register_clcmd("amx_ptarget","create_target",ADMIN_FLAG,": Crear un Portal de Salida")
    
register_clcmd("amx_aportal","create_allround",ADMIN_FLAG,": Crear un Biacceso")
    
register_clcmd("amx_blackhole","create_blackhole",ADMIN_FLAG,": Crear un Hoyo Negro")
    
    
register_clcmd("amx_r_portal","remove_portal",ADMIN_FLAG,": Remover todos los Portales")
    
register_clcmd("amx_r_ptarget","remove_target",ADMIN_FLAG,": Remover todos los Portales de Salida")
    
register_clcmd("amx_r_aportal","remove_allround",ADMIN_FLAG,": Remover todos los Biaccesos")
    
register_clcmd("amx_r_blackhole","remove_blackhole",ADMIN_FLAG,": Remover todos los Hoyos Negros")
    
    
register_clcmd("amx_portalmenu","cmdPortalMenu",ADMIN_FLAG,": Abrir el Portal Menu")
    
register_menucmd(register_menuid("\rMenu:"),1023,"actionPortalMenu")
}

public 
create_portal(id,level,cid) {
    if (!
cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
    
if(numPortals == MAX_PORTALS) {
        
console_print(id"Maximo de Entrada.")
        return 
PLUGIN_HANDLED
    
}
    
    new 
Origin[3]
    
get_user_origin(id,Origin)
    
    new 
Float:pOrigin[3]
    
IVecFVec(OriginFloat:pOrigin)
    
    new 
portal create_entity("info_target")
    
entity_set_string(portal,EV_SZ_classname,"amx_portal")
    
    
entity_set_model(portalportal_model)
    
entity_set_int(portalEV_INT_flagsFL_ALWAYSTHINK)
    
set_rendering(portalkRenderFxNone000kRenderTransAdd255)
    
    new 
Float:MinBox[3] = {-16.0, -16.00.0}
    new 
Float:MaxBox[3] = {16.016.016.0}
    
entity_set_vector(portalEV_VEC_minsMinBox)
    
entity_set_vector(portalEV_VEC_maxsMaxBox)
    
    
entity_set_int(portalEV_INT_solid1)
    
    
pOrigin[1] += 50
    entity_set_origin
(portal,pOrigin)
    
    
mapPortals[numPortals] = portal
    
++numPortals
    
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"Maximo de Salida.")
        return 
PLUGIN_HANDLED
    
}
    
    new 
Origin[3]
    
get_user_origin(id,Origin)
    
    new 
Float:pOrigin[3]
    
IVecFVec(OriginFloat:pOrigin)
    
    new 
target create_entity("info_target")
    
entity_set_string(target,EV_SZ_classname,"amx_ptarget")
    
    
entity_set_model(targettarget_model)
    
entity_set_int(targetEV_INT_flagsFL_ALWAYSTHINK)
    
set_rendering(targetkRenderFxNone000kRenderTransAdd255)
    
    
pOrigin[1] += 50
    entity_set_origin
(target,pOrigin)
    
    
mapTargets[numTargets] = target
    
++numTargets
    
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"Maximo de Portales Biacceso.")
        return 
PLUGIN_HANDLED
    
}
    
    new 
Origin[3]
    
get_user_origin(id,Origin)
    
    new 
Float:pOrigin[3]
    
IVecFVec(OriginFloat:pOrigin)
    
    new 
allround create_entity("info_target")
    
entity_set_string(allround,EV_SZ_classname,"amx_aportal")
    
    
entity_set_model(allroundallround_model)
    
entity_set_int(allroundEV_INT_flagsFL_ALWAYSTHINK)
    
set_rendering(allroundkRenderFxNone000kRenderTransAdd255)
    
    new 
Float:MinBox[3] = {-16.0, -16.00.0}
    new 
Float:MaxBox[3] = {16.016.016.0}
    
entity_set_vector(allroundEV_VEC_minsMinBox)
    
entity_set_vector(allroundEV_VEC_maxsMaxBox)
    
    
entity_set_int(allroundEV_INT_solid1)
    
    
pOrigin[1] += 50
    entity_set_origin
(allround,pOrigin)
    
    
mapAllrounds[numAllrounds] = allround
    
++numAllrounds
    
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"Maximo de Hoyos Negros.")
        return 
PLUGIN_HANDLED
    
}
    
    new 
Float:vOrigin[3]
    new 
Float:vAngles[3]
    
entity_get_vector(idEV_VEC_originvOrigin)
    
entity_get_vector(idEV_VEC_v_anglevAngles)
    
    new 
blackhole create_entity("info_target")
    
    
entity_set_string(blackholeEV_SZ_classname"amx_blackhole")
    
    
entity_set_model(blackholeblackhole_model)
    
entity_set_size(blackholeFloat:{-40.0,-30.0,-40.0}, Float:{40.0,30.0,40.0})
    
    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(id64vTraceDirection)
    
    
vTraceEnd[0] = vTraceDirection[0] + vOrigin[0]
    
vTraceEnd[1] = vTraceDirection[1] + vOrigin[1]
    
vTraceEnd[2] = vTraceDirection[2] + vOrigin[2]
    
    
trace_line(idvOriginvTraceEndvTraceResult)
    
    if(
trace_normal(idvOriginvTraceEndvNormal) == 0) {
        
remove_entity(blackhole)
        
console_print(id"Puedes crear Hoyos Negros en las paredes")
        return 
PLUGIN_HANDLED_MAIN
    
}
    
    
vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 10.0)
    
vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 10.0)
    
vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 10.0)
    
    
entity_set_int(blackholeEV_INT_solid1)
    
entity_set_int(blackholeEV_INT_flagsFL_ALWAYSTHINK)
    
    
entity_set_origin(blackholevNewOrigin)
    
vector_to_angle(vNormalvEntAngles)
    
    
entity_set_vector(blackholeEV_VEC_anglesvEntAngles)
    
    
mapBlackholes[numBlackholes] = blackhole
    
++numBlackholes
    
return PLUGIN_HANDLED
}

public 
remove_portal(id,level,cid) {
    if (!
cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
    
for(new 0numPortalsa++) {
        
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 0numTargetsa++) {
        
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 0numAllroundsa++) {
        
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 0numBlackholesa++) {
        
remove_entity(mapBlackholes[a])
    }
    
numBlackholes 0
    
return PLUGIN_HANDLED
}

public 
server_frame() {
    for(new 
0<= 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_frame0.0)
            }
            else 
entity_set_float(mapPortals[a], EV_FL_frameentity_get_float(mapPortals[a], EV_FL_frame) + 0.5)
        }
    }
    for(new 
0<= 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_frame0.0)
            }
            else 
entity_set_float(mapTargets[a], EV_FL_frameentity_get_float(mapTargets[a], EV_FL_frame) + 0.5)
        }
    }
    for(new 
0<= 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_frame0.0)
            }
            else 
entity_set_float(mapAllrounds[a], EV_FL_frameentity_get_float(mapAllrounds[a], EV_FL_frame) + 0.5)
        }
    }
    for(new 
0<= 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_frame195.0)
            }
            else 
entity_set_float(mapBlackholes[a], EV_FL_frameentity_get_float(mapBlackholes[a], EV_FL_frame) + 1.5)
        }
    }
}

public 
pfn_touch(ptr,ptd) {
    if (
ptr && ptd 0) {
        new 
Portal[32]
        
entity_get_string(ptrEV_SZ_classnamePortal31)
        if ( 
equal(Portal,"amx_portal") ) {
            if(
numTargets == 0) return PLUGIN_HANDLED
            
else{
                new 
random_targetOrigin[3]
                new 
Float:eOrigin[3]
                
random_target mapTargets[random_num(0,numTargets 1)]
                
entity_get_vector(random_targetEV_VEC_origineOrigin )
                
FVecIVec(Float:eOrigin,Origin)
                
                
Origin[0] += 80
                Origin
[1] += 80
                Origin
[2] += 10
                
                
new Float:velocity[3]
                
entity_get_vector(ptdEV_VEC_velocityvelocity)
                
emit_sound(ptrCHAN_WEAPON"debris/beamstart1.wav"0.4ATTN_NORM0PITCH_NORM)
                
                
set_user_origin(ptd,Origin)
                
                
velocity[2] = random_float(200.0225.0)
                
entity_set_vector(ptdEV_VEC_velocityvelocity)
                
emit_sound(random_targetCHAN_WEAPON"debris/beamstart7.wav"0.4ATTN_NORM0PITCH_NORM)
            }
        }
        if ( 
equal(Portal,"amx_aportal") ) {
            if(
numAllrounds == 1) return PLUGIN_HANDLED
            
else{
                new 
random_targetOrigin[3]
                new 
Float:eOrigin[3]
                
random_target mapAllrounds[random_num(0,numAllrounds 1)]
                if(
random_target != ptr) {
                    
entity_get_vector(random_targetEV_VEC_origineOrigin )
                    
FVecIVec(Float:eOrigin,Origin)
                    
                    
Origin[0] += 80
                    Origin
[1] += 80
                    Origin
[2] += 10
                    
                    
new Float:velocity[3]
                    
entity_get_vector(ptdEV_VEC_velocityvelocity)
                    
emit_sound(ptrCHAN_WEAPON"debris/beamstart1.wav"0.4ATTN_NORM0PITCH_NORM)
                    
                    
set_user_origin(ptd,Origin)
                    
                    
velocity[2] = random_float(200.0225.0)
                    
entity_set_vector(ptdEV_VEC_velocityvelocity)
                    
emit_sound(random_targetCHAN_WEAPON"debris/beamstart7.wav"0.4ATTN_NORM0PITCH_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_targetEV_VEC_origineOrigin )
                    
                    new 
Float:vEntAngles[3]
                    
entity_get_vector(random_targetEV_VEC_anglesvEntAngles)
                    
                    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(ptdEV_VEC_velocityvelocity)
                    
                    
emit_sound(ptrCHAN_WEAPON"debris/beamstart1.wav"0.4ATTN_NORM0PITCH_NORM)
                    
entity_set_vector(ptd,EV_VEC_origin,eOrigin)
                    
emit_sound(random_targetCHAN_WEAPON"debris/beamstart7.wav"0.4ATTN_NORM0PITCH_NORM)
                    
                    if(
vEntAngles[0] < 361 && vEntAngles[0] > 180)    
                    
velocity[2] = random_float(-200.0, -225.0)
                    else
                    
velocity[2] = random_float(200.0225.0)
                    
entity_set_vector(ptdEV_VEC_velocityvelocity)
                }
            }
        }
    }
    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 formatMenuBody255"\rMenu:^n" )
    
    if (
numPortals == MAX_PORTALSnLen += formatMenuBody[nLen], 255-nLen,"^n\w1. Crear Entrada \r(Max)")
    else 
nLen += formatMenuBody[nLen], 255-nLen"^n\w1. Crear Entrada" )
    if (
numTargets == MAX_TARGETSnLen += formatMenuBody[nLen],255-nLen,"^n\w2. Crear Salida \r(Max)")
    else 
nLen += formatMenuBody[nLen],255-nLen,"^n\w2. Crear Salida")
    if (
numAllrounds == MAX_ALLROUNDSnLen += formatMenuBody[nLen],255-nLen,"^n\w3. Crear Portal Biacceso \r(Max)")
    else 
nLen += formatMenuBody[nLen],255-nLen,"^n\w3. Crear Portal Biacceso")
    if (
numBlackholes == MAX_BLACKHOLESnLen += formatMenuBody[nLen],255-nLen,"^n\w4. Crear Hoyo Negro \r(Max)^n")
    else 
nLen += formatMenuBody[nLen],255-nLen,"^n\w4. Crear Hoyo Negro^n")
    
nLen += formatMenuBody[nLen], 255-nLen"^n\w5. Remover Entrada" )
    
nLen += formatMenuBody[nLen], 255-nLen"^n\w6. Remover Salida" )
    
nLen += formatMenuBody[nLen], 255-nLen"^n\w7. Remover Portales Biacceso" )
    
nLen += formatMenuBody[nLen], 255-nLen"^n\w8. Remover Hoyos Negros^n" )
    
nLen += formatMenuBody[nLen], 255-nLen"^n\y0. Salir" )
    
    
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
    
    
show_menuidkeysMenuBody, -1)
    
    return 
PLUGIN_CONTINUE
}

public 
actionPortalMenu(id,key) {
    new 
cidlevel
    
switch(key) {
        case 
0create_portal(id,level,cid)
        case 
1create_target(id,level,cid)
        case 
2create_allround(id,level,cid)
        case 
3create_blackhole(id,level,cid)
        case 
4remove_portal(id,level,cid)
        case 
5remove_target(id,level,cid)
        case 
6remove_allround(id,level,cid)
        case 
7remove_blackhole(id,level,cid)
    }
    if (
key != 9displayPortalMenu(id)
    return 
PLUGIN_HANDLED

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)