16/11/2019, 05:31 PM (Última modificación: 31/08/2021, 04:30 PM por Skylar. Edited 29 times in total.)
Admin Manager 1.7
Versión Final
Importante: El plugin debe ir activado primero en la lista, si es arriba de 'admin.amxx' mucho mejor.
Contenido:
Tipos de administradores + accesos del mismo
Sistema de vencimiento automático de administradores
Sistema de sanción/castigo de administradores + razón del mismo
Ingreso con password vía setinfo(comando en consola: setinfo _pw "password")
Pueden agregar los tipos de admin que ustedes quieran.
Archivo .ini - para que vean como funciona:
Código:
; Admin Manager
; 1.7
; Sky^^
[ Tipos de administradores ] - Agregar tipos de administradores
; Agregar tipo de admin + los accesos del mismo
; Ejemplo:
; SCRIPTER = abcdimnopqrsu
; Nota: No es necesario que el tipo de admin esté en mayúsculas.
[ Lista de administradores ] - Agregar administradores
; Uso: "Nombre/SteamID" "Password" "Tipo de admin" "Fecha de vencimiento" "Fecha de suspensión" "Razón de la suspensión"
; Ejemplo de admin sin vencimiento: "Skylar" "12345" "DUEÑO" "PERMANENTE" "" ""
; Ejemplo de admin con vencimiento: "Skylar" "12345" "DUEÑO" "16/12/2019" "" ""
; Ejemplo de como ponerle castigo: "Skylar" "12345" "DUEÑO" "31/12/2021" "05/01/2021" "ABUSAR DEL ADMIN"
; Ejemplo de admin a SteamID sin password: "STEAM_:0:12345" "" "DUEÑO" "PERMANENTE" "" ""
; Ejemplo de admin a SteamID con password: "STEAM_:0:12345" "12345" "DUEÑO" "PERMANENTE" "" ""
; Nota: Si el admin es vía SteamID es opcional agregarle password.
"Skylar" "12345" "DUEÑO" "PERMANENTE" "" ""
Aclaración: Lo que está entre corchetes no deben borrarlos ni modificarlos.
Testeé todo y funciona sin problemas, así que considero que está en su versión final, pero si llega a surgir algún problema o bug y si tengo ganas lo voy a arreglar.
17/11/2019, 07:01 PM (Última modificación: 18/11/2019, 11:56 AM por Niper.-.. Edited 4 times in total.)
Esta bien, pero que pasaría si yo entro con otro tag al del admin? O sea, te falta usar fn_LoadAdmins en client_infochanged.
Además g_AdminCount no le das ningún uso, sólo sumas pero no hace nada en sí, diria que le metas algún print o lo que quieras..
Después, en fn_LoadAdmins diria que uses remove_user_flags(id); para cada player que entre y si es admin, ahí haga el set_user_flags. Sólo es recomendación..
Después, usas equal en data user_name, o sea que el admin name es "pepe" si yo tengo "pepe5" no sería admin, entonces tranquilamente puedo hacerme pasar por admin cuando no lo soy. Deberias usar containi.
También, en vez de usar 2 ifs de "sections" es mejor un switch con "case 1" "case 2" y listo.
Para el sistema de suspensión yo tengo esto: (g_AdminType[id][SUSPENDIDO]) donde en "amxmodmenu" estaría bueno detectar si esta suspendido, entonces sí lo esta, bloquearle todas las opciones de amxmodmenu, pero, que el admin lo tenga, no sé si me explico.. O sea que los flags de su admin premium, dueño, etc, los tenga pero hacer un "if(g_AdminType[id][SUSPENDIDO])" y de ahí bloquearles, ejemplo..
Código PHP:
//Menú additem del "amxmodmenu" menu_additem(menu, g_AdminType[id][SUSPENDIDO] ? "\dExpulsar jugadores" : "Expulsar jugadores", "1"); //En el handler lo lleva a "amx_kickmenu(id)" Y dentro de "amx_kickmenu" haces la condición, así de esta el admin lo tiene pero no puede hacer nada public amx_kickmenu(id) { if(!(get_user_flags(id) & ADMIN_KICK)) { console_print(id, "%s No tienes acceso a este comando..", PREFIX_CONSOLE); return PLUGIN_HANDLED; }
if(g_AdminType[id][SUSPENDIDO]) { console_print(id, "%s Tu admin esta suspendido", PREFIX_CONSOLE); ColorChat(id, GREEN, "%s Tu admin esta suspendido", PREFIX_SAY); return PLUGIN_HANDLED; } }
Mi función es así:
Código PHP:
//Función LoadAdmins(id, const Name[] = "") //Luego de parsear los datos "nombre" "password" etc, haces: if(containi(Name, Nombre) != -1) public client_infochanged(id) LoadAdmins(id, NuevoNombre); public client_putinserver(id) LoadAdmins(id, GetName(id)); //GetName seria tu función donde detectarias el tag o steamid o lo que sea.
18/11/2019, 04:07 PM (Última modificación: 18/11/2019, 04:46 PM por Skylar. Edited 1 time in total.)
(17/11/2019, 07:01 PM)Niper.-. escribió: Esta bien, pero que pasaría si yo entro con otro tag al del admin? O sea, te falta usar fn_LoadAdmins en client_infochanged.
Además g_AdminCount no le das ningún uso, sólo sumas pero no hace nada en sí, diria que le metas algún print o lo que quieras..
Después, en fn_LoadAdmins diria que uses remove_user_flags(id); para cada player que entre y si es admin, ahí haga el set_user_flags. Sólo es recomendación..
Después, usas equal en data user_name, o sea que el admin name es "pepe" si yo tengo "pepe5" no sería admin, entonces tranquilamente puedo hacerme pasar por admin cuando no lo soy. Deberias usar containi.
También, en vez de usar 2 ifs de "sections" es mejor un switch con "case 1" "case 2" y listo.
Para el sistema de suspensión yo tengo esto: (g_AdminType[id][SUSPENDIDO]) donde en "amxmodmenu" estaría bueno detectar si esta suspendido, entonces sí lo esta, bloquearle todas las opciones de amxmodmenu, pero, que el admin lo tenga, no sé si me explico.. O sea que los flags de su admin premium, dueño, etc, los tenga pero hacer un "if(g_AdminType[id][SUSPENDIDO])" y de ahí bloquearles, ejemplo..
Código PHP:
//Menú additem del "amxmodmenu" menu_additem(menu, g_AdminType[id][SUSPENDIDO] ? "\dExpulsar jugadores" : "Expulsar jugadores", "1"); //En el handler lo lleva a "amx_kickmenu(id)" Y dentro de "amx_kickmenu" haces la condición, así de esta el admin lo tiene pero no puede hacer nada public amx_kickmenu(id) { if(!(get_user_flags(id) & ADMIN_KICK)) { console_print(id, "%s No tienes acceso a este comando..", PREFIX_CONSOLE); return PLUGIN_HANDLED; }
if(g_AdminType[id][SUSPENDIDO]) { console_print(id, "%s Tu admin esta suspendido", PREFIX_CONSOLE); ColorChat(id, GREEN, "%s Tu admin esta suspendido", PREFIX_SAY); return PLUGIN_HANDLED; } }
Mi función es así:
Código PHP:
//Función LoadAdmins(id, const Name[] = "") //Luego de parsear los datos "nombre" "password" etc, haces: if(containi(Name, Nombre) != -1) public client_infochanged(id) LoadAdmins(id, NuevoNombre); public client_putinserver(id) LoadAdmins(id, GetName(id)); //GetName seria tu función donde detectarias el tag o steamid o lo que sea.
Cita:Esta bien, pero que pasaría si yo entro con otro tag al del admin? O sea, te falta usar fn_LoadAdmins en client_infochanged.
Me olvidé de agregar client_infochanged, iba a bloquear el cambio de nombres dentro del server
Cita:Además g_AdminCount no le das ningún uso, sólo sumas pero no hace nada en sí, diria que le metas algún print o lo que quieras..
Tenía un log_amx para saber cuantos admin cargaban, pero los saqué y me olvidé de borrar esa variable jaja
Cita:Después, usas equal en data user_name, o sea que el admin name es "pepe" si yo tengo "pepe5" no sería admin, entonces tranquilamente puedo hacerme pasar por admin cuando no lo soy. Deberias usar containi.
No se si viste el sistema completo, pero si tenes el nombre igual al del archivo .ini te pide que ingreses la password del admin, si no ingresas la password, no te da los flags del mismo, así que está bien como está
Sobre lo demás yo creo que está bien así, si alguien quiere modificarlo de esa forma, es libre de hacerlo
Ahora actualizo sobre lo de infochanged
29/12/2019, 11:55 PM (Última modificación: 29/12/2019, 11:56 PM por Tomlex12.)
Hola una pregunta cuando yo pongo /admins me aparece el menu pero les aparece en el chats /admins a todos porqeu pasa eso?
osea ejemplo
>__<:/admins
me aparece el menu pero tambine aparece en el chats esto
>__<:/admins
(29/12/2019, 11:55 PM)Tomlex12 escribió: Hola una pregunta cuando yo pongo /admins me aparece el menu pero les aparece en el chats /admins a todos porqeu pasa eso?
osea ejemplo
>__<:/admins
me aparece el menu pero tambine aparece en el chats esto
>__<:/admins
Tienes otro plugin que posiblemente también hookee el say y por eso aparece
Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck
01/01/2020, 05:29 PM (Última modificación: 01/01/2020, 05:35 PM por Tomlex12. Edited 1 time in total.)
no no me da ningun error yo uso este plugin pero por ejemplo con el comando del amx que es para hablar a todos por la pantalla amx_psay o csay
yo escribo en el say los @@ pero cuando escribo los arrobas y mando el mensaje me aparece en el chat ejemplo
>__<: @@r hola
la cual no deberia aparecer en el chat
Error: Undefined symbol "MAX_AUTHID_LENGTH" on line 49
Error: Undefined symbol "MAX_AUTHID_LENGTH" on line 60
Error: Undefined symbol "MAX_AUTHID_LENGTH" on line 176
Error: Invalid expression, assumed zero on line 176
Error: Undefined symbol "szPw" on line 176
Error: Too many error messages on one line on line 176
Compilation aborted.
6 Errors.
Could not locate output file C:\Users\One Punch Man\Desktop\Compilados amxx\aoa_admins-ze.amx (compile failed).
(29/12/2019, 11:55 PM)Tomlex12 escribió: Hola una pregunta cuando yo pongo /admins me aparece el menu pero les aparece en el chats /admins a todos porqeu pasa eso?
osea ejemplo
>__<:/admins
me aparece el menu pero tambine aparece en el chats esto
>__<:/admins
Tienes otro plugin que posiblemente también hookee el say y por eso aparece
Header size: 2020 bytes
Code size: 19616 bytes
Data size: 59888 bytes
Stack/heap size: 16384 bytes; max. usage is unknown, due to recursion
Total requirements: 97908 bytes
Done.
[Finished in 0.4s]
ok, si tienes razón no hice ninguna, pero no entiendes la diferencia entre el 2 y el 3?
estoy diciendo que no compila en 1.8.3 no en 1.8.2 en 1.8.2 compila perfecto pero en 1.8.3 no..
Header size: 2020 bytes
Code size: 19616 bytes
Data size: 59888 bytes
Stack/heap size: 16384 bytes; max. usage is unknown, due to recursion
Total requirements: 97908 bytes
Done.
[Finished in 0.4s]
ok, si tienes razón no hice ninguna, pero no entiendes la diferencia entre el 2 y el 3?
estoy diciendo que no compila en 1.8.3 no en 1.8.2 en 1.8.2 compila perfecto pero en 1.8.3 no..
Parece que 1.8.3 no trae el límite del authid implementado, solo agrega '#define MAX_AUTHID_LENGTH 32' y ya debería compilar
Buenas yo soy encargado de una comunidad y puse el plugin todo bien . pero por que al entrar con el admin y pongo la pw 2 veces y entro en medio una de una partida por que me da slay ? pd: es un pregamer xd