Buscar un campo (adv vault)
#1
Buenas, como puedo buscar un campo en adv vault.

Guardo los siguientes datos: Usuario, contraseña y nick. El usuario y el nick no pueden ser iguales a ningún otro que se haya registrado, pero tengo el problema que el nickname no se como buscarlo.

El usuario es fácil, utilizo adv_vault_get_prepare para saber si el usuario esta registrado o no, pero parece que no funciona igual para los otros campos.

Codigo:
Código PHP:
num {
    
FIELD_USERNAME 0,
    
FIELD_PASSWORD,
    
FIELD_NICKNAME,
    
MAX_FIELDS
}

new 
g_username[33][25]
new 
g_password[33][25]
new 
g_playername[33][37]

new 
g_fields[MAX_FIELDS]

new 
g_vault

// chequeos
if(strlen(g_username[id]) <= 0)
            {
                
ShowRegisterMenu(id)
                
ColorChat(idNORMAL"^3No has^4 Ingresado^3 un^4 Usuario^3!")
                return 
PLUGIN_HANDLED;
            }
            
            if(
strlen(g_password[id]) <= 0)
            {
                
ShowRegisterMenu(id)
                
ColorChat(idNORMAL"^3No has^4 Ingresado^3 una^4 Contraseña^3!")
                return 
PLUGIN_HANDLED;
            }
            
                        
// aca no funciona
            
if(adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playernameFINDFLAGS_EQUAL))
            {
                
ShowRegisterMenu(id)
                
ColorChat(idNORMAL"^3Tu^4 Nick^3 ya esta^4 Registrado^3!")
                
adv_vault_find_closed(g_vault
                return 
PLUGIN_HANDLED;
            }
            
            
adv_vault_set_start(g_vault)
            
adv_vault_set_field(g_vaultg_fields[FIELD_USERNAME], g_username[id])
            
adv_vault_set_field(g_vaultg_fields[FIELD_PASSWORD], g_password[id])
            
adv_vault_set_field(g_vaultg_fields[FIELD_NICKNAME], g_playername[id])
            
adv_vault_set_end(g_vault0g_username[id])
            
            
ColorChat(idNORMAL"^4Cuenta Creada Exitosamente^3!^4 -^3Usuario [^4 %s^3 ]^4 -^3Contraseña [^4 %s^3 ]^4 -^3Nick [^4 %s^3 ]"g_username[id], g_password[id], g_playername[id])
            
ShowAccountsMenu(id)
}

advault_prepare() // preparo datos
{
    
g_vault adv_vault_open("ACCOUNTS_HG"false)
    
g_fields[FIELD_USERNAME] = adv_vault_register_field(g_vault"USERNAMES"DATATYPE_STRING25)
    
g_fields[FIELD_PASSWORD] = adv_vault_register_field(g_vault"PASSWORDS"DATATYPE_STRING25)
    
g_fields[FIELD_NICKNAME] = adv_vault_register_field(g_vault"NICKNAMES"DATATYPE_STRING37)
    
adv_vault_init(g_vault)

[Imagen: 76561198068808877.png]
Responder
#2

Destro ya dejo una guia para buscar datos en ADV -> [TUT] Búsquedas de datos en Adv-Vault .

Asumo que el 'nickname' es diferente de la keyname (Usuario), y este lo guardas como cualquier dato, entonces haciendo uso de las natives provistas por la API, puedes conseguir una solución.
Responder
#3

Por lo que veo, adv_vault_find_start no devuelve necesariamente verdadero si se encontró una coincidencia o no.

En todo caso, de la forma en que Destro dejo debería funcionar. Intenta:

Código PHP:
// Código previo....

adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playername[id], FINDFLAGS_EQUAL)

if (
adv_vault_find_next(g_vault)) // Se asume que, al menos 1 coincidencia fue encontrada.
{
    
ShowRegisterMenu(id)
    
ColorChat(idNORMAL"^3Tu^4 Nick^3 ya esta^4 Registrado^3!")
    
adv_vault_find_closed(g_vault)
    return 
PLUGIN_HANDLED;
}

adv_vault_find_closed(g_vault// Detenemos la búsqueda, incluso si no encontramos resultados.

// Código posterior... 


Responder
#4
(13/12/2017, 09:58 AM)Chamo. escribió:
Por lo que veo, adv_vault_find_start no devuelve necesariamente verdadero si se encontró una coincidencia o no.

En todo caso, de la forma en que Destro dejo debería funcionar. Intenta:

Código PHP:
// Código previo....

adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playername[id], FINDFLAGS_EQUAL)

if (
adv_vault_find_next(g_vault)) // Se asume que, al menos 1 coincidencia fue encontrada.
{
    
ShowRegisterMenu(id)
    
ColorChat(idNORMAL"^3Tu^4 Nick^3 ya esta^4 Registrado^3!")
    
adv_vault_find_closed(g_vault)
    return 
PLUGIN_HANDLED;
}

adv_vault_find_closed(g_vault// Detenemos la búsqueda, incluso si no encontramos resultados.

// Código posterior... 



Gracias por responder chamo, pero aun sigue sin funcionar con el codigo que me pasaste.
No da ningun tipo de log solo que me deja seguir creando cuentas con el mismo nick
[Imagen: 76561198068808877.png]
Responder
#5

Postea todo el sistema de cuentas, desde cuando inicias el vault hasta donde guardas/cargas los datos, seguido de las funciones donde obtienes el nickname que escribe el jugador
Responder
#6
Código PHP:
advault_prepare()
{
    
g_vault adv_vault_open("ACCOUNTS_HG"false)
    
g_fields[FIELD_USERNAME] = adv_vault_register_field(g_vault"USERNAMES"DATATYPE_STRING25)
    
g_fields[FIELD_PASSWORD] = adv_vault_register_field(g_vault"PASSWORDS"DATATYPE_STRING25)
    
g_fields[FIELD_NICKNAME] = adv_vault_register_field(g_vault"NICKNAMES"DATATYPE_STRING37)
    
adv_vault_init(g_vault)

[Imagen: 76561198068808877.png]
Responder
#7
Código PHP:
adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playername[id], FINDFLAGS_EQUAL)

------->

adv_vault_find_start(g_vaultg_fields[FIELD_NICKNAME], g_playername[id], FINDFLAGS_EQUAL
Responder
#8
(13/12/2017, 05:15 PM)Exertency escribió:
Código PHP:
adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playername[id], FINDFLAGS_EQUAL)

------->

adv_vault_find_start(g_vaultg_fields[FIELD_NICKNAME], g_playername[id], FINDFLAGS_EQUAL

Dios.. xD ya funciona, te lo agradezco <3

Chamo.- Mil Gracias, si se pudiera dar doble reputación, te daría tres.
[Imagen: 76561198068808877.png]
Responder
#9
(13/12/2017, 05:15 PM)Exertency escribió:
Código PHP:
adv_vault_find_start(g_vaultg_fields[FIELD_PASSWORD], g_playername[id], FINDFLAGS_EQUAL)

------->

adv_vault_find_start(g_vaultg_fields[FIELD_NICKNAME], g_playername[id], FINDFLAGS_EQUAL


Cosas de la vida....Roflmao
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)