Enviar respuesta 
[TUT] Búsquedas de datos en Adv-Vault
Autor Mensaje
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #1
[TUT] Búsquedas de datos en Adv-Vault
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

(Este mensaje fue modificado por última vez en: 01/12/2014 05:42 PM por Destro.)
04/09/2014 05:04 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Metrikcz Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 827
Registro en: Oct 2013
Reputación: 19
Mensaje: #2
RE: [TUT] Búsquedas de datos en Adv-Vault
// 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:
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
04/09/2014 05:57 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #3
RE: [TUT] Búsquedas de datos en Adv-Vault
!=
si es igual a + negado = si no es igual a

04/09/2014 06:04 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
ivan Sin conexión
Miembro Sr.


Mensajes: 628
Registro en: Oct 2013
Reputación: 7
Mensaje: #4
RE: [TUT] Búsquedas de datos en Adv-Vault
buen tutorial
04/09/2014 06:10 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Evil Spiret Sin conexión
Miembro Sr.


Mensajes: 578
Registro en: Dec 2013
Reputación: 12
Mensaje: #5
RE: [TUT] Búsquedas de datos en Adv-Vault
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
Image
(Este mensaje fue modificado por última vez en: 04/09/2014 08:39 PM por Evil Spiret.)
04/09/2014 08:39 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
matrix123 Sin conexión
Miembro Destacado


1k
Mensajes: 1,441
Registro en: Oct 2014
Reputación: 16
Mensaje: #6
RE: [TUT] Búsquedas de datos en Adv-Vault
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

24/02/2017 12:28 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
CSAxel Sin conexión
Miembro Héroe


Plugin developer 1k
Mensajes: 1,837
Registro en: Dec 2013
Reputación: 40
Mensaje: #7
RE: [TUT] Búsquedas de datos en Adv-Vault
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 (?)
(Este mensaje fue modificado por última vez en: 24/02/2017 12:55 AM por CSAxel.)
24/02/2017 12:54 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Treki Ausente
Suspendido


Plugin developer Donador AMXX Support Pensador Medalla de aportes Trebol purpura
Mensajes: 870
Registro en: Oct 2013
Mensaje: #8
RE: [TUT] Búsquedas de datos en Adv-Vault
(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." );

(Este mensaje fue modificado por última vez en: 24/02/2017 01:04 AM por Treki.)
24/02/2017 12:57 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
matrix123 Sin conexión
Miembro Destacado


1k
Mensajes: 1,441
Registro en: Oct 2014
Reputación: 16
Mensaje: #9
RE: [TUT] Búsquedas de datos en Adv-Vault
(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

(Este mensaje fue modificado por última vez en: 24/02/2017 02:02 AM por matrix123.)
24/02/2017 01:47 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Treki Ausente
Suspendido


Plugin developer Donador AMXX Support Pensador Medalla de aportes Trebol purpura
Mensajes: 870
Registro en: Oct 2013
Mensaje: #10
RE: [TUT] Búsquedas de datos en Adv-Vault
(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.");

(Este mensaje fue modificado por última vez en: 24/02/2017 02:00 AM por Treki.)
24/02/2017 02:00 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS