Sistema de Cuentas (Adv-Vault)
#1
Sistema de Cuentas (Adv-vault) v3.2

Requerimientos:
Contenido:
- Sistema de Cuentas por restriccón de nombres
- Protección de Cuentas por contraseña
- Sistema de Ban de cuentas por día/horas
- Sistema de Auto-Ingreso (A través de Setinfo)
- Cambio de contraseña
- Sistema de Ban automático: Esto se aplica cuando una cuenta es baneada, y si la persona que fue baneada se crea otra cuenta, se le banea automáticamente por evadir su cuenta original baneada.
Comandos:
- say /config: Abre un menú de configuración

- sys_ban <Nombre de la cuenta> <Días/Horas> <Razón>: Otorga ban de cuenta sobre un usuario
- sys_unban <Nombre de la cuenta>: Elimina el ban de cuenta a un usuario

- Otros:
Código PHP:
#define MAX_USERS 32

#define ADMIN_ACCESS_BANACCOUNT ADMIN_LEVEL_A

// Al activarlo, se usará una encriptación para las claves que se guarden en la DB
// Por defecto: DESACTIVADO (Para activarlo, descomentarlo)
// #define USE_SCRIPT_PASS

// Al activarlo, usaran la letra "M" para abrir el menú de configuración
// Por defecto: DESACTIVADO (Para activarlo, descomentarlo)
// #define USE_CHOOSETEAM

new const g_sPrefix[] = "!g[ACC]!y";
new const 
g_sConsolePrefix[] = "[ACC]";
new const 
g_sServerName[] = "Mi servidor";
new const 
g_sCommunityName[] = "Mi comunidad";
new const 
g_sCommunityWeb[] = "www.micomunidad.com";
new const 
g_sVaultName[] = "databaseAccounts"
Librerías usadas:
Las liberrías nuevas, están en la parte de DESCARGA
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <dhudmessage>
#include <api_chatcolor>
#include <adv_vault>
#include <safemenu>
#include <unixtime> 
Cambios (Changelog):
Código:
== CHANGELOG ==

    - v3.2
    [*] Se ha removido la librería api_oldmenu
    [*] Se ha agregado soporte para los usuarios Steam
    [*] Los usuarios no-steam pueden crearse cuentas pero son limitadas
    [*] Se ha renovado el código
    [*] Se arregladon problemas y errores de tipeo, código y otros

    - v3.1
    [*] Se han correjido errores de tipeo
    [*] Se agregó encriptación en las claves
    [*] Se agregó un activador para usar la letra "M" para el menú de configuración
    [*] Se arreglaron algunos errores de código

    - v3.0
    [*] Se ha mejorado el código
    [*] Se ha removido y agregado nuevas funciones para mayor rendimiento del sistema
    [*] Se han fixeado muchos errores con respecto a la anterior versión
    
    - v2.1
    [*] Se lanzó la versión FINAL
    [*] Se agregó una setinfo para guardar la contraseña
    [*] Se agregó información mostrando un ejemplo de ¿ Cómo agregar más campos al guardado ?
    [*] Se reemplazó el AutoLogin de IP por Contraseña (Utilizando el comando de la setinfo)
    [*] Se modificó el código para que sea más legible y entendible
    [*] Se arreglaron errores en las variables (Provoacaban overflow)
    [*] Se arregló un problema con el contador de caracteres
    [*] Se ha liberado memoria en las funciones que no lo necesita el uso de variables
    [*] Se removió la versión BETA
    
    - v2.0
    [*] Se arregló un error en el comando amx_bancuentas que se cancelaba la restricción al comando (Es decir que lo podía usar cualquiera)
    [*] Se optimizaron todos los chequeos (Condiciones)
    [*] Se eliminaron aquellos chequeos innecesarios
    [*] Se agregaron chequeos adicionales para evitar errores de tipeo
    [*] Se arregló un error con la obtención de la fecha sobre los usuarios baneados
    [*] Se agregó un nuevo stock: StringCount();
    [*] Se agregó nuevamente las restricciones al menú OldStyle (Gracias FierroCross)
    [*] client_infochanged(); --> FM_ClientUserInfoChanged
    [*] Agregado Callbacks a los menús
    [*] Se agregaron comentarios para entender más las funciones y demases
    [*] Se modificó la mayoría del código para un mejor uso
    
    - v1.5
    [*] Se cambió la estructura del Sistema
    [*] Se corrigió un mega BUG que crasheaba el CS con el Auto-ban
    [*] Se corrigió un mega BUG que las fechas no coincidian como corresponde
    [*] Se corrigió un BUG del menú al registrarse
    [*] Se corrigió un BUG que expulsaba al usuario que dio ban, en vez del al baneado
    [*] Se removió el comando menuselect para menú de estilo viejo (Se recomienda usar el estilo VGUI)
    [*] Se eliminó bastante código innecesario
    [*] Se agregaron menús y otras cosas eficientes
    [*] Se agrego la hora al momento de banear
    
    - v1.4
    [*] Se corrigieron varios bugs que se encontraron al probar el Sistema más profundamente
    [*] Se agrego un sistema de ban automático (Se explica en la parte de contenido)
    
    - v1.3
    [*] Se agregó un mejor sistema de restricción de caracteres
    [*] Se agregó un stock para remover las comillas con más facilidad (Gracias Mario.AR)
    [*] Se agregó un menú de confirmación de ban (Si acepta, lo banea instantaneamente, sino, vuelve al menú de ban)
    [*] Se arregló un problema con el auto-ingreso
    [*] Se arregló un problema con el guardado de datos y cargado de los mismos
    [*] Se mejoró el guardado de IP y el ingreso automático por su medio
    [*] Se mejoró el sistema de ban / desban de cuentas
    [*] Se mejoraron las variables booleanas (Utilizando Bitsums)
    [*] Se optimizó el plugin para mayor utilidad
    
    - v1.2
    [*] Se agregó un sistema de cambio de contraseña (A través de un comando)
    [*] Se agregó en el menú de Ban de cuenta, un Sub-menú que te muestra el listado de exclusiones realizadas.
    [*] Se optimizó el plugin y removido algunos comandos innecesarios
    [*] Se corrigieron algunos errores en el guardado
    [*] Se corrigió un error en la función de desbaneo de cuentas (A través del tiempo)
    [*] Se corrigieron algunas faltas de ortografía :S
    
    - v1.1:
    [*] Se agrego la restricción de caracteres especiales sobre los Nombres y contraseñas.
    [*] Se agregó el Fix Label para el registro de nombres.
    [*] Se arreglaron errores menores.
    
    - v1.0:
    [*] Lanzamiento del plugin.
    
== FIN ==
Créditos:
kikizon2: Por su sistema de cuentas también hecho por adv_vault. Me inspiró a que yo haga uno nuevo más dinámico y más cosas.
Destro: Por su sistema API de guardado Advance Vault System
Metrikcz: Por su Aporte: https://amxmodx-es.com/Thread-CODIGO-Bus...-Adv-Vault
meTaLiCroSS: https://amxmodx-es.com/Thread-Stack-erro...9#pid76339
Gracias a todos los que utilizaron este sistema y que cada vez ha mejorado y que seguirá mejorándose
Descarga:

.inc   api_chatcolor.inc (Tamaño: 1.21 KB / Descargas: 540)

.inc   safemenu.inc (Tamaño: 1.53 KB / Descargas: 524)

.inc   unixtime.inc (Tamaño: 2.19 KB / Descargas: 495)

Sistema NUEVO

.sma   Descargar AMXX / sys_accounts.sma (Tamaño: 45.38 KB / Descargas: 1,011)

.sma   Descargar AMXX / sys_accounts_text.sma (Tamaño: 2.11 KB / Descargas: 506)

Sistema VIEJO

.sma   Descargar AMXX / SisCuentas_AdvVault.sma (Tamaño: 34.5 KB / Descargas: 1,027)
Gracias a todos por usarlo!
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#2
Exelente mejor que el de kikizon.
Responder
#3
Me perdí de tantos [SPOILERs] jajajaja, muy bueno la verdad que me viene de maravilla. Buen trabajo axel.

Código PHP:
        ShowMenu_Registrarse(id);
        
ShowHUD_Message(id_, -1.00.104.0"¡ Las contraseñas no coinciden !^nInténralo nuevamete"); 

Trolleyes

EDIT:
Código PHP:
formatex(szTextcharsmax(szText), "\yTU CUENTA ESTPA BANEADA\r:^n\ 

SUPER EDIT v2 XD:
Código PHP:
    {
        
ShowHUD_Message(id_, -1.00.104.0"¡ El capo no debe estar vacío !^nInténralo nuevamete");
        return 
PLUGIN_HANDLED;
    }
    else if (
containi(szString" ") != -1)
    {
        
ShowHUD_Message(id_, -1.00.104.0"¡ El campo no debe contener espacios !^nInténralo nuevamete"); 
Responder
#4
>o< Chicoo Rubius pacman Excelente Lo Probare Proud
Arroba
Responder
#5
Excelente cuando tenga tiempo le hecho un ojo :3 un honor ser inspiración de otros pacman
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#6
Gracias :3. Ahí corregí mis horrores de ortografía x.x
Responder
#7
Definitivamente el que buscoooooooo! +1 :3 De verdad me gusto!

Código PHP:
        ShowHUD_Message(id_, -1.00.104.0"¡ El capo no debe estar vacío !^nInténralo nuevamente");
        return 
PLUGIN_HANDLED
[Imagen: 76561198086476173.png]
Responder
#8
Me resulta gracioso como alguien que no sabía casi nada una vez publicó un sistema de cuentas y el resto sigue usando exactamente la misma estructura luego de mucho tiempo.

A simple vista está bueno, al menos no es un copy&paste como otros sistemas de cuentas en adv_vault ^_^. Buen plugin.

Saludos.
Responder
#9
(27/12/2014, 11:47 PM)Treki escribió: Me resulta gracioso como alguien que no sabía casi nada público un sistema de cuentas y el resto sigue usando exactamente la misma estructura luego de mucho tiempo.
A que te referís ? O.o
Responder
#10
(27/12/2014, 11:52 PM)CSAxel escribió:
(27/12/2014, 11:47 PM)Treki escribió: Me resulta gracioso como alguien que no sabía casi nada público un sistema de cuentas y el resto sigue usando exactamente la misma estructura luego de mucho tiempo.
A que te referís ? O.o

creo que se siente orgulloso de ti ._., y le dice a los demas que usan el sistema de cuentas que anda dando vueltas que usen y hagan su propio sistema

Buen plugin pape, no me interesa en lo mas minimo el sistema, pero si unas funciones que tiene Lengua
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#11
(27/12/2014, 11:52 PM)CSAxel escribió:
(27/12/2014, 11:47 PM)Treki escribió: Me resulta gracioso como alguien que no sabía casi nada público un sistema de cuentas y el resto sigue usando exactamente la misma estructura luego de mucho tiempo.
A que te referís ? O.o

No se si sos alguien en alliedmodders, yo me refiero a algo bastante viejo. Muchos sistemas de cuentas "nuevos" que se fueron creando siempre tuvieron una estructura similar a los creados primero, incluso condiciones, variables, enums, etc.

Yo supongo que hay más de una forma de pensar un sistema de cuentas, pero la mayoría se basó en alguno para desarrollarlo.

EDIT: Que no se mal entienda, yo con lo de "alguien que no sabía casi nada" no me referí a ninguno de ustedes.
Responder
#12
Yo nunca publiqué nada en AM pero si estuve registrado. Igual, siempre me guié de los Sistemas anteriores, obviamente utilizando mi estructura, como se hacerlo, pero hay muchas cosas en las que se pueden optimizar y cambiar en este.

Con el paso del tiempo se dará. Mientras tanto no tenga errores, todo bien.
Responder
#13
¡Actualizado a v1.1!
Responder
#14
Gracias CSAxel esta muy bueno.
Responder
#15
Código PHP:
public CheckString(idszString[])
{
    static 
i;
    for (
0sizeof(g_szCaracteres); i++)
    {
        if (
containi(szStringg_szCaracteres[i]) != -1)
        {
            
ShowHUD_Message(id_, -1.00.104.0"¡ El caracter utilizado está prohibido !^nInténralo nuevamente");
            return 
PLUGIN_HANDLED;
        }
    } 

Código PHP:
ShowMenu_Registrarse(id);
        
ShowHUD_Message(id_, -1.00.104.0"¡ Las contraseñas no coinciden !^nInténralo nuevamente"); 

Nothingdohere
Responder
#16
Que tiene eso ? O.o
Responder
#17
(28/12/2014, 11:26 PM)CSAxel escribió: Que tiene eso ? O.o

Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Código:
Inténralo nuevamente
Responder
#18
¡Actualizado v1.2!
Responder
#19
Felicidades gay CSAxel. Tiene buena pinta y espero que sea un poco mas rapido ala hora de cargar y guardar datos Thats what she said
[Imagen: 76561198066347799.png]
Responder
#20
Te conviene usar regex en vez de hacer un loop (mas comodo).
Código PHP:
#include <amxmodx>
#include <regex>

#define PLUGIN "Test Regex"
#define VERSION "1.0"
#define AUTHOR "Kane"

new Regex:g_regexg_iret
new const g_pattern[] = ".*(\#| |/|\\|\(|\)|\%|[\s])"

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
// Add your code here...
    
new error[32]
    
g_regex regex_compile(g_patterng_ireterror31"i")
    
    if (
g_regex REGEX_OK)
        
log_amx("Error de Regex %d: %s"g_regexerror)
    
    new 
test[33]
    
formatex(test31"%Hola%")
    
CheckString(0test)
    
    
formatex(test31"#(\/)")
    
CheckString(0test)
    
    
formatex(test31"#Hawaii")
    
CheckString(0test)
}

public 
CheckString(idszString[])
{
    if (!
szString[0] || regex_match_c(szStringg_regexg_iret))
    {
        
server_print("La string (%s) tiene caracteres especiales"szString)
//        ShowHUD_Message(id, _, -1.0, 0.1, 0, 4.0, "¡ El caracter utilizado está prohibido !^nInténtalo nuevamente");
        
return PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;


Una recomendación, cuando por ejemplo agregas el callback al menú, queda mas legible si pones menu_additem(iMenu, "Identificarme", .callback = g_iMenuMakeCB); que andar poniendo _, _, _, g_iMenuMakeCB).

También cuando alguien se loguea/crea una cuenta, obtenes el keyindex y lo usas para:
- Guardar / Cargar
- Mostrárselo en ese menú (Tu numero de cuenta es: %d)

Despues tengo una duda, porque haces esto? (no tiene nada de malo, pero es medio tonto)
Código PHP:
if (iItem == MENU_EXIT)
    {
        
menu_destroy(iMenu);
        return 
PLUGIN_HANDLED;
    }
    
    switch (
iItem)
    {
        case 
0
        {
            
client_cmd(id"messagemode ^"INSERT_USERNAME^"");
            
ShowHUD_Message(id_, -1.00.103.5"¡ Ingresa una parte del Nombre del jugador !");
        }
        case 
1
        {
            
g_iTypeBan[id] = !(g_iTypeBan[id]);
            
ShowMenu_BanCuentas(id);
        }
        case 
2ShowMenu_ListaBan(id);
    } 
y no esto?
Código PHP:
switch (iItem)
    {
        case 
0
        {
            
client_cmd(id"messagemode ^"INSERT_USERNAME^"");
            
ShowHUD_Message(id_, -1.00.103.5"¡ Ingresa una parte del Nombre del jugador !");
        }
        case 
1
        {
            
g_iTypeBan[id] = !(g_iTypeBan[id]);
            
ShowMenu_BanCuentas(id);
        }
        case 
2ShowMenu_ListaBan(id);
        case 
MENU_EXIT:
        {
            
menu_destroy(iMenu);
            return 
PLUGIN_HANDLED;
        }
    } 

Y por ultimo sobre for (i = 0; i < 7; i++) show_dhudmessage(id, ""); :
Arkshine escribió:Sending empty string is the worst way you could use. This is not a solution, nor a worth trick, it will lead only to overflow issue and would be a nightmare to handle things properly, especially with 8 buffers.

And no, dHud doesn't offer a way to clear/overlay specific buffer, it doesn't work with channel and it has not been designed to be used like normal hud.
[..]
Arkshine escribió:Yes, but the context is different.

You have 8 stacked buffers.

It means server will have to track 8 buffers per player.
It means to clear one buffer, you will have to resend up to 8 client messages.

You can imagine issues will be :

- Broken message duration time
- Broken message effect on refresh
- Message flickering on refresh
- Client overflow

Of course, there are things you could do to handle some of these issues.
Though the biggest issue is the client overflow as nowadays plugins send already a lot of messages.

But at the end, just for a small functionality, you will have to deal with a lot of trouble/code.
You can't really call that a proper solution here.
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#21
(01/01/2015, 05:37 PM)Kane escribió: Te conviene usar regex en vez de hacer un loop (mas comodo).
Código PHP:
#include <amxmodx>
#include <regex>

#define PLUGIN "Test Regex"
#define VERSION "1.0"
#define AUTHOR "Kane"

new Regex:g_regexg_iret
new const g_pattern[] = ".*(\#| |/|\\|\(|\)|\%|[\s])"

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
// Add your code here...
    
new error[32]
    
g_regex regex_compile(g_patterng_ireterror31"i")
    
    if (
g_regex REGEX_OK)
        
log_amx("Error de Regex %d: %s"g_regexerror)
    
    new 
test[33]
    
formatex(test31"%Hola%")
    
CheckString(0test)
    
    
formatex(test31"#(\/)")
    
CheckString(0test)
    
    
formatex(test31"#Hawaii")
    
CheckString(0test)
}

public 
CheckString(idszString[])
{
    if (!
szString[0] || regex_match_c(szStringg_regexg_iret))
    {
        
server_print("La string (%s) tiene caracteres especiales"szString)
//        ShowHUD_Message(id, _, -1.0, 0.1, 0, 4.0, "¡ El caracter utilizado está prohibido !^nInténtalo nuevamente");
        
return PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;

Lo tomaré en cuenta

(01/01/2015, 05:37 PM)Kane escribió: Una recomendación, cuando por ejemplo agregas el callback al menú, queda mas legible si pones menu_additem(iMenu, "Identificarme", .callback = g_iMenuMakeCB); que andar poniendo _, _, _, g_iMenuMakeCB).
Ya me parecía que había visto algo parecido en un plugin que se utilizaba de esa manera una variable con Callback

(01/01/2015, 05:37 PM)Kane escribió: También cuando alguien se loguea/crea una cuenta, obtenes el keyindex y lo usas para:
- Guardar / Cargar
- Mostrárselo en ese menú (Tu numero de cuenta es: %d)
Ahora que lo pienso no hace falta.. Ya que guardas y cargas con el KeyName a través de su PJ y en el menú con adv_vault_get_keyindex(); solamente obtener el ID con su PJ... Y lo uso una sola vez

(01/01/2015, 05:37 PM)Kane escribió: Despues tengo una duda, porque haces esto? (no tiene nada de malo, pero es medio tonto)
Código PHP:
if (iItem == MENU_EXIT)
    {
        
menu_destroy(iMenu);
        return 
PLUGIN_HANDLED;
    }
    
    switch (
iItem)
    {
        case 
0
        {
            
client_cmd(id"messagemode ^"INSERT_USERNAME^"");
            
ShowHUD_Message(id_, -1.00.103.5"¡ Ingresa una parte del Nombre del jugador !");
        }
        case 
1
        {
            
g_iTypeBan[id] = !(g_iTypeBan[id]);
            
ShowMenu_BanCuentas(id);
        }
        case 
2ShowMenu_ListaBan(id);
    } 
y no esto?
Código PHP:
switch (iItem)
    {
        case 
0
        {
            
client_cmd(id"messagemode ^"INSERT_USERNAME^"");
            
ShowHUD_Message(id_, -1.00.103.5"¡ Ingresa una parte del Nombre del jugador !");
        }
        case 
1
        {
            
g_iTypeBan[id] = !(g_iTypeBan[id]);
            
ShowMenu_BanCuentas(id);
        }
        case 
2ShowMenu_ListaBan(id);
        case 
MENU_EXIT:
        {
            
menu_destroy(iMenu);
            return 
PLUGIN_HANDLED;
        }
    } 
Pasa que estoy acostumbrado a hacerlo de esa manera, pero bueno, no sería exactamente lo mismo ? (Por lo de usar una condición menos)

(01/01/2015, 05:37 PM)Kane escribió: Y por ultimo sobre for (i = 0; i < 7; i++) show_dhudmessage(id, ""); :
Arkshine escribió:Sending empty string is the worst way you could use. This is not a solution, nor a worth trick, it will lead only to overflow issue and would be a nightmare to handle things properly, especially with 8 buffers.

And no, dHud doesn't offer a way to clear/overlay specific buffer, it doesn't work with channel and it has not been designed to be used like normal hud.
[..]
Arkshine escribió:Yes, but the context is different.

You have 8 stacked buffers.

It means server will have to track 8 buffers per player.
It means to clear one buffer, you will have to resend up to 8 client messages.

You can imagine issues will be :

- Broken message duration time
- Broken message effect on refresh
- Message flickering on refresh
- Client overflow

Of course, there are things you could do to handle some of these issues.
Though the biggest issue is the client overflow as nowadays plugins send already a lot of messages.

But at the end, just for a small functionality, you will have to deal with a lot of trouble/code.
You can't really call that a proper solution here.
Ahora me fijo de corregirlo de alguna manera, pero, yo quiero usar DHUD para los mensajes, no hay otra forma para evitar que los mensajes se superpongan ?
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#22
tienes que tener el roccoxx module para lo del dhud
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#23
Por que, cuando unos amigos quieren entrar al servidor , entran con el Nickname Chango ~~ o con ??? caracteres diferentes, y dice que la cuenta esta prohibida
Responder
#24
Es cierto a mi me pasa lo mismo! Whatdone
[Imagen: 76561198086476173.png]
Responder
#25
A que te referís ?.. Esos son caracteres restringidos.. Y en la constante podes modificarlos.
Cuando pueda lo explico en el post
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)