Añadir restricción a menu
#1
Hola a todos, bueno estuve indagando un poco por el foro pero soy nueva en esto y no entendí muy bien algunas cosas y vengo a pedir ayuda o si alguien me puede agregar una restricción a este menu de models resulta que me gustaría que dentro del new const le pudiera agregar a los lado el tipo e acceso para usar el modelo y de no tenerlo dentro del menu diga bloqueado ejemplo


Menu modelo player

1. Miku acceso admin_rcon

cuando no tenga acceso le aparezca así :

Menu modelo player

1. Miku [NO TIENES PERMISO]

y si lo escoge le tire un mensaje diciendo 'No tienes acceso a este modelo solo los con flag admin rcon' les dejo el código ojala me ayuden como dije soy medio nueva y e estado leyendo las veces que puedo tutoriales pero me cuesta aprender, tan solo tengan paciencia.

Código PHP:
#include <amxmodx>
#include <cstrike>
#include <amxmisc>

enum _:e_DataMdl MDL_NAME[50], MDL_DRT[33] }
new const 
g_szModels[][e_DataMdl] = {
    { 
"Model homero""homero" }
}
public 
plugin_precache() {
    new 
szBuffer[64], i;
    for(
0sizeof g_szModelsi++) {
        
formatex(szBuffercharsmax(szBuffer), "models/player/%s/%s.mdl"g_szModels[i][MDL_DRT], g_szModels[i][MDL_DRT])
        
precache_model(szBuffer)
    }
}
public 
plugin_init() {
    
register_clcmd("say /models""show_menu_models")
}
public 
show_menu_models(const id) {
    if(!
is_user_admin(id)) return PLUGIN_HANDLED;

    new 
szText[99], menu;
    
menu menu_create("Admin models menu""hModels")
    
    for(new 
0sizeof g_szModelsi++) {
        
formatex(szTextcharsmax(szText), "\w%s"g_szModels[i][MDL_NAME])
        
menu_additem(menuszText"")
    }
    
menu_setprop(menuMPROP_BACKNAME"Atras")
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente")
    
menu_setprop(menuMPROP_EXITNAME"Salir")
    
menu_display(idmenu0)
    
    return 
PLUGIN_HANDLED
}
public 
hModels(idmenuitem) {
    if(
item == MENU_EXIT || !is_user_admin(id) || !is_user_alive(id)) {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED;
    }
    
menu_destroy(menu)
    
cs_set_user_model(idg_szModels[item][MDL_DRT])
    return 
PLUGIN_HANDLED

Responder
#2
Código PHP:
#include <amxmodx>
#include <cstrike>
#include <amxmisc>

enum _:e_DataMdl MDL_NAME[50], MDL_DRT[33], MDL_ACCESS }
new const 
g_szModels[][e_DataMdl] = {
    { 
"Model homero""homero"ADMIN_BAN }
}
public 
plugin_precache() {
    new 
szBuffer[64], i;
    for(
0sizeof g_szModelsi++) {
        
formatex(szBuffercharsmax(szBuffer), "models/player/%s/%s.mdl"g_szModels[i][MDL_DRT], g_szModels[i][MDL_DRT])
        
precache_model(szBuffer)
    }
}
public 
plugin_init() {
    
register_clcmd("say /models""show_menu_models")
}
public 
show_menu_models(const id) {
    if(!
is_user_admin(id)) return PLUGIN_HANDLED;

    new 
szText[99], menu;
    
menu menu_create("Admin models menu""hModels")
    
    for(new 
0sizeof g_szModelsi++) {

        if (~
get_user_flags(id) & g_szModels[i][MDL_ACCESS])
            
formatex(szTextcharsmax(szText), "\d%s \r[BLOQUEADO]"g_szModels[i][MDL_NAME]);
        else
            
formatex(szTextcharsmax(szText), "\w%s"g_szModels[i][MDL_NAME]);

        
menu_additem(menuszText"")
    }
    
menu_setprop(menuMPROP_BACKNAME"Atras")
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente")
    
menu_setprop(menuMPROP_EXITNAME"Salir")
    
menu_display(idmenu0)
    
    return 
PLUGIN_HANDLED
}
public 
hModels(idmenuitem) {
    if(
item == MENU_EXIT || !is_user_admin(id) || !is_user_alive(id)) {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED;
    }
    
menu_destroy(menu)

    if (~
get_user_flags(id) & g_szModels[item][MDL_ACCESS])
    {
        
client_print(idprint_chat"No tienes acceso a este modelo");
        return 
PLUGIN_HANDLED;
    }

    
cs_set_user_model(idg_szModels[item][MDL_DRT])
    return 
PLUGIN_HANDLED

Responder
#3
Muchas gracias anda genial el plugin, tengo 3 dudas.


1- por que en algunos if le hacen un espacio entre medio del paréntesis a lo que me refiero :

Código PHP:
if (~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 
y a veces lo veo sin el espacio así :

Código PHP:
if(~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 

2- Para que es el ~ dentro del if ?
3- Como puedo agregar una opción dentro del menú para remover el modelo ? osea que vuelva al por defecto.
Responder
#4
(29/06/2020, 11:08 PM)pily escribió: Muchas gracias anda genial el plugin, tengo 3 dudas.


1- por que en algunos if le hacen un espacio entre medio del paréntesis a lo que me refiero :

Código PHP:
if (~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 
y a veces lo veo sin el espacio así :

Código PHP:
if(~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 

2- Para que es el ~ dentro del if ?
3- Como puedo agregar una opción dentro del menú para remover el modelo ? osea que vuelva al por defecto.

Lo del espacio en el if son formas de programar, y el ~ es un signo de negación, al igual que el !

Código:
! - Negación.
~ - Negación.
|| - O.
&& - Y.
< - Menor.
> - Mayor.
== - Igual.
<= Menor o igual.
>= Mayor o igual.
Corazón I dream of someday being able to have your near. Corazón
[Imagen: 76561199006140497.png]
Responder
#5
(29/06/2020, 11:08 PM)pily escribió: Muchas gracias anda genial el plugin, tengo 3 dudas.


1- por que en algunos if le hacen un espacio entre medio del paréntesis a lo que me refiero :

Código PHP:
if (~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 
y a veces lo veo sin el espacio así :

Código PHP:
if(~get_user_flags(id) & g_szModels[item][MDL_ACCESS]) 

2- Para que es el ~ dentro del if ?
3- Como puedo agregar una opción dentro del menú para remover el modelo ? osea que vuelva al por defecto.

1- Es algo que depende el programador, es por gusto nomas. No cambia nada.
2-

Código PHP:
if (~get_user_flags(id) & g_szModels[item][MDL_ACCESS])
{
// El simbolo significa NOT osea que si NO tiene el acceso necesario ejecutamos algo
}
else
{
// SI tiene el acceso necesario ejecutamos otra cosa...


3- https://amxmodx-es.com/Thread-Opci%C3%B3...5#pid48455

Edit:
https://amxmodx-es.com/Thread-Programaci...ncipiantes
https://amxmodx-es.com/Thread-Bitsums
Responder
#6
Quizá te podría ayudar a entender eso las proposiciones lógicas (creo que así se llamaban xd) y las tablas de verdad, ahí ves muchos casos de negación, y otros operadores.


Aunque eso va orientado un poco más a la electrónica en mi parecer.
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#7
(29/06/2020, 11:08 PM)pily escribió: 2- Para que es el ~ dentro del if ?

Sirve para negar una condición pero a nivel de bits, por ejemplo

Código PHP:
is_user_admin 

Esa native solo puede devolver el valor de 1/0, por lo tanto para denegar esa condicion se utiliza el operador lógico ' ! '

Código PHP:
get_user_flags 

Esta native devuelve un valor en bits, por lo tanto, para denegarlo se utiliza un operador logico diferente ' ~ '

EJEMPLO:

Código PHP:
if(~get_user_flags(id) & ADMIN_IMMUNITY

Aqui estoy preguntando si el jugador NO tiene acceso al flag de inmunidad "a"

en el include amxconst puedes ver el valor de cada acceso
Código PHP:
#define ADMIN_ALL          0      /* everyone */
#define ADMIN_IMMUNITY      (1<<0)  /* flag "a" */
#define ADMIN_RESERVATION  (1<<1)  /* flag "b" */
#define ADMIN_KICK          (1<<2)  /* flag "c" */
#define ADMIN_BAN          (1<<3)  /* flag "d" */
#define ADMIN_SLAY          (1<<4)  /* flag "e" */
#define ADMIN_MAP          (1<<5)  /* flag "f" */
#define ADMIN_CVAR          (1<<6)  /* flag "g" */
#define ADMIN_CFG          (1<<7)  /* flag "h" */
#define ADMIN_CHAT          (1<<8)  /* flag "i" */
#define ADMIN_VOTE          (1<<9)  /* flag "j" */
#define ADMIN_PASSWORD      (1<<10) /* flag "k" */
#define ADMIN_RCON          (1<<11) /* flag "l" */
#define ADMIN_LEVEL_A      (1<<12) /* flag "m" */
#define ADMIN_LEVEL_B      (1<<13) /* flag "n" */
#define ADMIN_LEVEL_C      (1<<14) /* flag "o" */
#define ADMIN_LEVEL_D      (1<<15) /* flag "p" */
#define ADMIN_LEVEL_E      (1<<16) /* flag "q" */
#define ADMIN_LEVEL_F      (1<<17) /* flag "r" */
#define ADMIN_LEVEL_G      (1<<18) /* flag "s" */
#define ADMIN_LEVEL_H      (1<<19) /* flag "t" */
#define ADMIN_MENU          (1<<20) /* flag "u" */
#define ADMIN_BAN_TEMP      (1<<21) /* flag "v" */
#define ADMIN_ADMIN        (1<<24) /* flag "y" */
#define ADMIN_USER          (1<<25) /* flag "z" */ 
[Imagen: 76561198068808877.png]
Responder
#8
Como lo hizo chema esta perfecto
_______________________________________________
Cada día aprendiendo un poco mas, de eso se trata la vida
_______________________________________________

[Imagen: averahoracapo.jpg]
Responder
#9
Gracias a los que respondieron, poco entendí pero iré leyendo cada vez que pueda para aprender mas y muchas gracias chema.


editado : tengo otra duda xd (sera la última) si ocupo el include cs_player_models_api como sería ya que me lo recomendaron mucho por el tema del comando en consola model.
Responder
#10
(30/06/2020, 01:59 PM)pily escribió: Gracias a los que respondieron, poco entendí pero iré leyendo cada vez que pueda para aprender mas y muchas gracias chema.


editado : tengo otra duda xd (sera la última) si ocupo el include cs_player_models_api como sería ya que me lo recomendaron mucho por el tema del comando en consola model.

Para darle el model.
Código PHP:
cs_set_player_model(id, const model[]) 

Para removerlo.
Código PHP:
cs_reset_player_model(id

Tienes que poner el api del plugin.

Código:
cs_player_models_api.amxx
tu-plugin.amxx
Corazón I dream of someday being able to have your near. Corazón
[Imagen: 76561199006140497.png]
Responder
#11
Muchisimas gracias ahora si los dejo de molestar jajja.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)