[TUT] Búsquedas de datos en Adv-Vault
#1
Tercer tutorial de Advanced Vault System

Para este tutorial vamos a usar la API del Advanced Vault System
Advanced Vault System


Utilizando el ejemplo de [TUT] Guardar/Cargar datos de un player (ejemplo zp) vamos a realizar diferente tipos de búsquedas.


Los Flags:
Código:
FINDFLAGS_EQUAL ; Si es igual a
FINDFLAGS_CONTAIN ; Si la cadena contiene
FINDFLAGS_CASE_SENSITIVE ; Si se ignoran las mayúsculas y minúsculas
FINDFLAGS_LESS ; Si es menor a
FINDFLAGS_GREATER, ; Si es mayor a
FINDFLAGS_NOT ; Si no es
FINDFLAGS_AND ; y
FINDFLAGS_OR ; o


Ejemplo #1: (Buscar los registros en el cual el campo ammopack es igual a 5)
Código PHP:
new keyindexkeynname[32]

adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_EQUAL// Iniciamos la busqueda

while((keyindex adv_vault_find_next(g_vault)))  // Si se encuentra una coincidencia devuelve el keyindex del registro,de lo contrario 0
{
    
adv_vault_get_keyname(g_vaultkeyindexkeyname31)
    
server_print("ID: (%d) - Key: (%s)"keyindexkeyname)
}
adv_vault_find_closed(g_vault// Finalizamos la busqueda 

Código PHP:
// Ejemplo #2: (Buscar los registros en el cual el campo ammopack es mayor a 5)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_GREATER)


// Ejemplo #3: (Buscar los registros en el cual el campo ammopack es menor a 5)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_LESS)


// Ejemplo #4: (Buscar los registros en el cual el campo ammopack es menor o igual a 5)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_EQUAL|FINDFLAGS_LESS)


// Ejemplo #5: (Buscar los registros en el cual el campo ammopack no es igual a 5)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_EQUAL|FINDFLAGS_NOT)


// Ejemplo #6: (Buscar los registros en el cual el campo ammopack es igual a 5 o 10)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_EQUAL|FINDFLAGS_ORg_campos[CAMPO_AMMOPACKS], 10FINDFLAGS_EQUAL)

// Ejemplo #7: (Buscar los registros en el cual el campo ammopack es igual a 5 y el campo level es igual a 1)
adv_vault_find_start(g_vaultg_campos[CAMPO_AMMOPACKS], 5FINDFLAGS_EQUAL|FINDFLAGS_ANDg_campos[CAMPO_LEVEL], 1FINDFLAGS_EQUAL)


// Ejemplo #8: (Buscar los registros en el cual la password contenga la palabra hola)
adv_vault_find_start(g_vaultg_campos[CAMPO_PASSWORD], "hola"FINDFLAGS_CONTAIN)


// Ejemplo #9: (Buscar los registros en el cual la password contenga la palabra "hola" o sea igual a "prueba")
adv_vault_find_start(g_vaultg_campos[CAMPO_PASSWORD], "hola"FINDFLAGS_CONTAIN|FINDFLAGS_OR,  g_campos[CAMPO_PASSWORD], "prueba"FINDFLAGS_EQUAL

Supongo que con la explicación de los flags y esos mini ejemplos es suficiente para que lo entiendan.


Otros tutoriales:
[TUT] Guardar/Cargar datos de un player (ejemplo zp)
[TUT] Crear rank/top15 con Adv-Vault
Responder
#2
// Ejemplo #5: (Buscar los registros en el cual el campo ammopack no es igual a 5)
adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_NOT)

Equal?
Todos los MODS VHL totalmente gratuitos  Descarga Aqui

Mis plugins:
STEAM: https://steamcommunity.com/id/Metrikcz/
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
Responder
#3
!=
si es igual a + negado = si no es igual a
Responder
#4
buen tutorial
Crab Crab Crab Crab
Responder
#5
Al principio me confundí, pero lo leí un par de veces y lo entendí bien.

Saludos destro ; Espero que sigas aportando Sonrisa
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
[Imagen: b_350_20_ffad41_e98100_000000_591f11.png]


Responder
#6
Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>

Código PHP:
    new keyindexkeyname[32], g_puntos_index[33][2], sum_puntos;
    
keyindex adv_vault_get_keyindex(g_vaultkeyname)
    
server_print("ID (%d) - Name: (%d)"keyindexname);
    
adv_vault_get_field(g_vaultg_campo[PUNTOS], g_puntos_indexcharsmax(g_puntos_index[]))
    
server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )"keyindexnameg_puntos_index[keyindex][0], g_puntos_index[keyindex][1]); 

name seria el <nombre> que pongo, pero solo obtengo esto

Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)

El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias
Responder
#7
Proba lo siguiente:
Código PHP:
register_concmd("zp_points""concmd__Points"ADMIN_LEVEL_A"<target> <amount> - Give points");

public 
concmd__Points(const id, const level, const cid) {
    if(!
cmd_access(idlevelcid2)) {
        return 
PLUGIN_HANDLED;
    }

    new 
sArg1[32];
    
read_argv(1sArg131);

    if(!
sArg1[0]) {
        return 
PLUGIN_HANDLED;
    }

    new 
iTarget;
    
iTarget cmd_target(idsArg1CMDTARGET_ALLOW_SELF);

    if(!
iTarget) {
        return 
PLUGIN_HANDLED;
    }

    new 
sArg2[12];
    
read_argv(2sArg211);

    if(!
sArg2[0]) {
        return 
PLUGIN_HANDLED;
    }

    new 
iAmount;
    
iAmount str_to_num(sArg2);

    if(
iAmount <= 0) {
        return 
PLUGIN_HANDLED;
    }

    new 
sKeyName[32];
    new 
iKeyId;

    
iKeyId adv_vault_get_keyindex(g_VaultsArg1);
    
adv_vault_get_keyname(g_VaultiKeyIdsKeyName31);

    
server_cmd("Id: %d - Nombre: %s"iKeyIdsKeyName);

    
// Si el campo de puntos es un Array
    
new iPoints;
    
iPoints adv_vault_get_field(g_Vaultg_Columns[C_POINTS], g_Points[iTarget], sizeof(g_points[]));
    
// Si el campo de puntos es un Int
    
iPoints adv_vault_get_field(g_Vaultg_Columns[C_POINTS]);

    
server_cmd("Id %d - Nombre: %s - Puntos: %d"iKeyIdsKeyNameiPoints);

    new 
iTotal;
    
iTotal iAmount iPoints;

    
server_print("Id: %d - NombrE: %s - Puntos: %d - A dar: %d - Total: %d"iKeyIdsKeyNameiPointsiAmountiTotal);

    
adv_vault_set_start(g_Vault);
    
adv_vault_set_field(g_Vaultg_Columns[C_POINTS], iTotal);
    
adv_vault_set_end(g_Vault_sKeyName);

    
server_print("Se han otorgado <%d> puntos al usuario <%s>"iTotalsKeyName);
    return 
PLUGIN_HANDLED;


Obviamente adapta a tus variables, ya que lo hice según mi instinto (?)
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#8
(24/02/2017, 12:28 AM)matrix123 escribió: Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>

Código PHP:
    new keyindexkeyname[32], g_puntos_index[33][2], sum_puntos;
    
keyindex adv_vault_get_keyindex(g_vaultkeyname)
    
server_print("ID (%d) - Name: (%d)"keyindexname);
    
adv_vault_get_field(g_vaultg_campo[PUNTOS], g_puntos_indexcharsmax(g_puntos_index[]))
    
server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )"keyindexnameg_puntos_index[keyindex][0], g_puntos_index[keyindex][1]); 

name seria el <nombre> que pongo, pero solo obtengo esto

Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)

El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias

Los campos son case-sensitive, por si las dudas. Si yo me apodo "Manu" y busco "manu" no va a encontrar nada.

Código PHP:
register_concmd"zp_puntos""CommandPoints"_"zp_puntos <name> <points>" );

public 
CommandPointsiId )
{
    new 
szKeyName[32], szNum[8];

    
read_argv1szKeyNamecharsmaxszKeyName ) );
    
read_argv2szNumcharsmaxszNum ) );

    new 
iKey adv_vault_get_keyindexg_vaultszKeyName );

    if( 
adv_vault_get_prepareg_vaultiKey ) )
    {
        new 
iPoints]; adv_vault_get_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
        
adv_vault_set_startg_vault );
        
        
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
        
adv_vault_set_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
adv_vault_set_endg_vaultiKey );
    }
    else
        
console_printiId"No se pudo sumar los puntos, usuario inexistente." );

No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes
.
Responder
#9
(24/02/2017, 12:57 AM)Treki escribió:
(24/02/2017, 12:28 AM)matrix123 escribió: Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>

Código PHP:
    new keyindexkeyname[32], g_puntos_index[33][2], sum_puntos;
    
keyindex adv_vault_get_keyindex(g_vaultkeyname)
    
server_print("ID (%d) - Name: (%d)"keyindexname);
    
adv_vault_get_field(g_vaultg_campo[PUNTOS], g_puntos_indexcharsmax(g_puntos_index[]))
    
server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )"keyindexnameg_puntos_index[keyindex][0], g_puntos_index[keyindex][1]); 

name seria el <nombre> que pongo, pero solo obtengo esto

Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)

El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias

Los campos son case-sensitive, por si las dudas. Si yo me apodo "Manu" y busco "manu" no va a encontrar nada.

Código PHP:
register_concmd"zp_puntos""CommandPoints"_"zp_puntos <name> <points>" );

public 
CommandPointsiId )
{
    new 
szKeyName[32], szNum[8];

    
read_argv1szKeyNamecharsmaxszKeyName ) );
    
read_argv2szNumcharsmaxszNum ) );

    new 
iKey adv_vault_get_keyindexg_vaultszKeyName );

    if( 
adv_vault_get_prepareg_vaultiKey ) )
    {
        new 
iPoints]; adv_vault_get_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
        
adv_vault_set_startg_vault );
        
        
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
        
adv_vault_set_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
adv_vault_set_endg_vaultiKey );
    }
    else
        
console_printiId"No se pudo sumar los puntos, usuario inexistente." );


son puntos humanos y puntos zombie por eso (es un array), ahora testeo

edit: lo tengo asi

Código PHP:
public cmd_puntos(idlevelcid)
{
    if(!(
get_user_flags(id)&ADMIN_RCON))
        return 
PLUGIN_HANDLED;

    new 
argarg read_argc()
    if(
arg 4)
    {
        
server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>")
        return 
PLUGIN_HANDLED;
    }
    
    new 
szKeyName[32], szNum[8], iTypè[10];

    
read_argv1szKeyNamecharsmaxszKeyName ) );
    
read_argv2iTypecharsmax(iType))
    
read_argv3szNumcharsmaxszNum ) );

    if(!
equali(iType"zombie") || !equali(iType"humano"))
    {
        
server_print("[ZP] tenes que poner ZOMBIE o HUMANO");
        return;
    }    
    new 
iKey adv_vault_get_keyindexg_vaultszKeyName );

    if( 
adv_vault_get_prepareg_vaultiKey ) )
    {
        new 
iPoints]; adv_vault_get_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_startg_vault );
        
        if(
equali(iType"humano"))
            
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
else if(equali(iType"zombie"))
            
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
adv_vault_set_endg_vaultiKey );
    }
    else
        
server_print("No se pudo sumar los puntos, usuario inexistente.");



no me compila ni tira errores, solo dice "[Finished ... seg]" pero no me compila ni dice nada más...


EDIT2: solucionado, era un error de acento (en iTypé) gracias treki
Responder
#10
(24/02/2017, 01:47 AM)matrix123 escribió: son puntos humanos y puntos zombie por eso (es un array), ahora testeo

edit: lo tengo asi

Código PHP:
public cmd_puntos(idlevelcid)
{
    if(!(
get_user_flags(id)&ADMIN_RCON))
        return 
PLUGIN_HANDLED;

    new 
argarg read_argc()
    if(
arg 4)
    {
        
server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>")
        return 
PLUGIN_HANDLED;
    }
    
    new 
szKeyName[32], szNum[8], iTypè[10];

    
read_argv1szKeyNamecharsmaxszKeyName ) );
    
read_argv2iTypecharsmax(iType))
    
read_argv3szNumcharsmaxszNum ) );

    if(!
equali(iType"zombie") || !equali(iType"humano"))
    {
        
server_print("[ZP] tenes que poner ZOMBIE o HUMANO");
        return;
    }    
    new 
iKey adv_vault_get_keyindexg_vaultszKeyName );

    if( 
adv_vault_get_prepareg_vaultiKey ) )
    {
        new 
iPoints]; adv_vault_get_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_startg_vault );
        
        if(
equali(iType"humano"))
            
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
else if(equali(iType"zombie"))
            
iPoints] += str_to_numszNum ); // No se cual de las dos celdas queres sumar
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
adv_vault_set_endg_vaultiKey );
    }
    else
        
server_print("No se pudo sumar los puntos, usuario inexistente.");



no me compila ni tira errores, solo dice "[Finished ... seg]" pero no me compila ni dice nada más...

Código PHP:
public cmd_puntos(idlevelcid)
{
    if(!(
get_user_flags(id)&ADMIN_RCON))
        return 
PLUGIN_HANDLED;

    new 
argarg read_argc()
    if(
arg 4)
    {
        
server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>")
        return 
PLUGIN_HANDLED;
    }
    
    new 
szKeyName[32], szNum[8], szType[8];

    
read_argv1szKeyNamecharsmaxszKeyName ) );
    
read_argv2szTypecharsmaxszType ) );
    
read_argv3szNumcharsmaxszNum ) );

    if( !
equaliszType"zombie" ) && !equaliszType"humano" ) )
    {
        
server_print"[ZP] Tenes que poner ZOMBIE o HUMANO" );
        
        return;
    }
    
    new 
iKey adv_vault_get_keyindexg_vaultszKeyName );

    if( 
adv_vault_get_prepareg_vaultiKey ) )
    {
        new 
iPoints]; adv_vault_get_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_startg_vault );
        
        if( 
equaliszType"humano" ) )
            
iPoints] += str_to_numszNum );
        else
            
iPoints] += str_to_numszNum );
        
        
server_print("ID (%d) - Name (%s) - Puntos (%d/%d)"iKeyszKeyNameiPoints[0], iPoints[1]);
        
adv_vault_set_fieldg_vaultg_campo[PUNTOS], iPointssizeofiPoints ) );
        
adv_vault_set_endg_vaultiKey );
    }
    else
        
server_print("No se pudo sumar los puntos, usuario inexistente.");

No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes
.
Responder
#11
Creo que modificaste lo mismo que yo, gracias treki !
Responder
#12
(24/02/2017, 02:10 AM)matrix123 escribió: Creo que modificaste lo mismo que yo, gracias treki !

Te funcionó? Tenías mal una condición, una condición irrelevante, y mal nombre de una variable (una tenía un carácter parecido a la 'e' que no era actualmente una 'e').
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes
.
Responder
#13
(24/02/2017, 02:17 AM)Treki escribió:
(24/02/2017, 02:10 AM)matrix123 escribió: Creo que modificaste lo mismo que yo, gracias treki !

Te funcionó? Tenías mal una condición, una condición irrelevante, y mal nombre de una variable (una tenía un carácter parecido a la 'e' que no era actualmente una 'e').

Habia editado un comentario diciendo q tenia una è y que me funcionó, gracias
Responder
#14
Como es para
Condicion & (condicion|condicion)
Todos los MODS VHL totalmente gratuitos  Descarga Aqui

Mis plugins:
STEAM: https://steamcommunity.com/id/Metrikcz/
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)