Allied Modders en español
[TUT] Crear rank/top15 con Adv-Vault - Versión para impresión

+- Allied Modders en español (https://amxmodx-es.com)
+-- Foro: AMX Mod X - Scripting (https://amxmodx-es.com/Forum-AMX-Mod-X-Scripting)
+--- Foro: Tutoriales / Guias (https://amxmodx-es.com/Forum-Tutoriales-Guias)
+--- Tema: [TUT] Crear rank/top15 con Adv-Vault (/Thread-TUT-Crear-rank-top15-con-Adv-Vault)



[TUT] Crear rank/top15 con Adv-Vault - Destro - 02/07/2014

Esto seria como una continuación al tutorial anterior [TUT] Guardar/Cargar datos de un player (ejemplo zp)

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


Teniendo en cuenta el code del anterior tutorial,ahora vamos a ver como obtener los datos para crear un top15 y un rank.

Código PHP:
/*No voy a explicar cada parámetro porque ya esta explicado en el include*/

/*Variable donde guardaremos el identificador del ordenamiento*/
new g_sort

public plugin_init()
{
    
/*Creamos el ordenamiento*/
    
g_sort adv_vault_sort_create(g_vaultORDER_DESC602000g_campos[CAMPO_RESET], g_campos[CAMPO_LEVEL], g_campos[CAMPO_AMMOPACKS])
}

funcion_top15(id)
{
    new 
rrlvlapkeyindexpj[32]
    
    
// Chequeamos que el loop no sea mayor a los resultados obtenidos
    
new toploop min(adv_vault_sort_numresult(g_vaultg_sort), 15)
    
    for(new 
position=1position <= toploopposition++)
    {
        
// Obtenemos el keyindex que este en la posición deseada
        
keyindex adv_vault_sort_position(g_vaultg_sortposition)
        
        
// Preparamos para obtener los datos
        
if(!adv_vault_get_prepare(g_vaultkeyindex)) continue
        
        
// Obtenemos los datos
        
ap adv_vault_get_field(g_vaultg_campos[CAMPO_AMMOPACKS])
        
lvl adv_vault_get_field(g_vaultg_campos[CAMPO_LEVEL])
        
rr adv_vault_get_field(g_vaultg_campos[CAMPO_RESET])
        
        
adv_vault_get_keyname(g_vaultkeyindexpj31)

        
console_print(id"#%d pj:[%s] - rr:[%d] - lvl:[%d] - ap:[%d]"positionpjrrlvlap)
    }
}

funcion_rank(id)
{
    
// Obtenemos en que posicion esta el key
    
new rank_position adv_vault_sort_key(g_vaultg_sort0g_pj[id])
    
    if(!
rank_positionclient_print(idprint_chat"No estas rankeado")
    else 
client_print(idprint_chat"Tu rank es %d de %d"rank_positionadv_vault_sort_numresult(g_vaultg_sort))



Otros tutoriales:
[TUT] Guardar/Cargar datos de un player (ejemplo zp)
[TUT] Búsquedas de datos en Adv-Vault


RE: [TUT] Crear rank/top15 con Adv-Vault - Kane - 02/07/2014

Código PHP:
new = toploop 
--->
Código PHP:
new toploop 



RE: [TUT] Crear rank/top15 con Adv-Vault - cLAANS - 02/07/2014

Muy bueno destro ..

Saludos,
cLAANS.-


RE: [TUT] Crear rank/top15 con Adv-Vault - Frosst - 03/07/2014

Se ve bueno, pero sería mejor este top o el de mysql/sqlite?


RE: [TUT] Crear rank/top15 con Adv-Vault - Destro - 03/07/2014

En rendimiento creo que esta peleado con sqlite en algunas cosas, pero en usabilidad es el mejor de todos.


RE: [TUT] Crear rank/top15 con Adv-Vault - Evil Spiret - 06/07/2014

(03/07/2014, 02:56 AM)Destro escribió: En rendimiento creo que esta peleado con sqlite en algunas cosas, pero en usabilidad es el mejor de todos.

Posta?..., no pense que fuera tan buena esta forma. Sos muy ingenioso, me puse a leer el tuto de cargar datos y le vi algo de similitud con mysql
Esta Muy Nice Esto.
saludos


RE: [TUT] Crear rank/top15 con Adv-Vault - Frosst - 12/07/2014

Destro, una pregunta me darias un ejemplo de como cambiar esto:

console_print(id, "#%d pj:[%s] - rr:[%d] - lvl:[%d] - ap:[%d]", pj, position, rr, lvl, ap)

Por un menu o motd ?


RE: [TUT] Crear rank/top15 con Adv-Vault - LuKks - 12/07/2014

Supongo.
Código PHP:
public plugin_init()
    
g_sort adv_vault_sort_create(g_vaultORDER_DESC6016pg[FRAGS], pg[DEATHS])

public 
funcion_top15(id)
{
    new 
killsdeathskeyindexpj[32], opc[200], posicion[6]
    new 
menu menu_create("\dTOP15""menu_lukas")
    
    new 
toploop min(adv_vault_sort_numresult(g_vaultg_sort), 16)
    
    for(new 
position=1position <= toploopposition++)
    {
        
keyindex adv_vault_sort_position(g_vaultg_sortposition)
        
        if(!
adv_vault_get_prepare(g_vaultkeyindex)) continue
        
        
kills adv_vault_get_field(g_vaultpg[FRAGS])
        
deaths adv_vault_get_field(g_vaultpg[DEATHS])
        
        
adv_vault_get_keyname(g_vaultkeyindexpj31// debes hacer el guardado por nombre.
        
        
formatex(opccharsmax(opc), "\y%d\d. \w%s \yKills \r%d \yDeaths \r%d"positionpjkillsdeaths)
        
num_to_str(positionposicioncharsmax(posicion))
        
menu_additem(menuopcposicion
    }
    
    
menu_setprop(menuMPROP_NEXTNAME"Siguiente")
    
menu_setprop(menuMPROP_BACKNAME"Atras")
    
menu_setprop(menuMPROP_EXITNAME"Salir")
    
menu_display(idmenu0)  
}

public 
menu_lukas(idmenuitem

    if (
item == MENU_EXIT) return PLUGIN_HANDLED 
     
    funcion_top15
(id)
    return 
PLUGIN_HANDLED


Edit:
Código PHP:
console_print(id"#%d pj:[%s] - rr:[%d] - lvl:[%d] - ap:[%d]"pjpositionrrlvlap
---->
Código PHP:
console_print(id"#%d pj:[%s] - rr:[%d] - lvl:[%d] - ap:[%d]"positionpjrrlvlap



RE: [TUT] Crear rank/top15 con Adv-Vault - intoxicadooo - 12/02/2017

Buenas segui el tuto del rank, pero se ve que en algo me estoy equivocando porque me tira 2 warning(Warning: Symbol is never used: "rank" on line 8835; Warning: Symbol is never used: "top15" on line),..
este es mi code, lo intente llamar en el client_cmd con say,
Código PHP:
top15(id)
{
    new 
lvlapkeyindexpj[32]
    
    new 
toploop min(adv_vault_sort_numresult(g_vaultg_sort), 15)
    
    for(new 
position=1position <= toploopposition++)
    {
        
keyindex adv_vault_sort_position(g_vaultg_sortposition)
        
        if(!
adv_vault_get_prepare(g_vaultkeyindex)) continue
        
        
lvl adv_vault_get_field(g_vaultg_campo[LEVEL])
        
ap adv_vault_get_field(g_vaultg_campo[AMMOPACKS])
        
        
adv_vault_get_keyname(g_vaultkeyindexpj31)
        
        
console_print(id"#%d pj: [%s] -  lvl: [%d] - ap: [%d]"positionlvlap)
    }
}
rank(id)
{
    new 
rank_position adv_vault_sort_key(g_vaultg_sort0g_pj[id])
    
    if(!
rank_positionclient_print(idprint_chat"NO ESTAS RANKEADO")
    else 
client_print(idprint_chat"Tu rank es %d de %d"rank_positionadv_vault_sort_numresult(g_vaultg_sort))


PD: las variables g_campo[LEVEL]; g_campo[AMMOPACKS], las use del tutorial de guardado de "https://amxmodx-es.com/Thread-GUIA-Adaptar-Niveles-a-Sis-de-Cuentas-y-Sis-de-Cuentas-a-ZP", esta bien o hise algo mal?

Desde ya muchas gracias (;


RE: [TUT] Crear rank/top15 con Adv-Vault - Chamo. - 12/02/2017

Me equivoque, lo que pasa, es que esas funciones son internas, y al hookearlas como un comando, no son reconocidas y por ende usadas, solo agrégale antes de los nombres el prefijo public, ejemplo:

Código PHP:
public rank(id)
{
//code.....




RE: [TUT] Crear rank/top15 con Adv-Vault - intoxicadooo - 12/02/2017

(12/02/2017, 10:45 PM)Chamo. escribió: Me equivoque, lo que pasa, es que esas funciones son internas, y al hookearlas como un comando, no son reconocidas y por ende usadas, solo agrégale antes de los nombres el prefijo public, ejemplo:

Código PHP:
public rank(id)
{
//code.....


Chamo me compilo perfecto, el problema adentro del CS, es que cuando pongo top15, no aparece nada, cuando pongo rank, me tira el client_print, es coomo que nunca me registra en el rank, ni en el top 15..si lo soluciono edito, gracias nuevamente chamo


RE: [TUT] Crear rank/top15 con Adv-Vault - Chamo. - 12/02/2017

Si, eso ya seria el code, ya eso podrías resolverlo tú, y si no, pues aquí mismo pones el code y tal ves alguien te ayude.


RE: [TUT] Crear rank/top15 con Adv-Vault - snezzsp - 21/08/2017

Me tira estos errores cuando añado la parte del top15 y el rank, pero los datos me los guarda y carga sin problemas. Estoy usando los archivos de este post a dia 22/08/2017
Código:
L 08/22/2017 - 00:21:06: ERROR Invalid VaultIndex: 2
L 08/22/2017 - 00:21:06: [AMXX] Displaying debug trace (plugin "test.amxx")
L 08/22/2017 - 00:21:06: [AMXX] Run time error 10: native error (native "adv_vault_sort_create")
L 08/22/2017 - 00:21:06: [AMXX]    [0] test.sma::plugin_init (line 24)
L 08/22/2017 - 00:21:06: ERROR Invalid VaultIndex: 2
L 08/22/2017 - 00:21:06: [AMXX] Displaying debug trace (plugin "test.amxx")
L 08/22/2017 - 00:21:06: [AMXX] Run time error 10: native error (native "adv_vault_get_prepare")
L 08/22/2017 - 00:21:06: [AMXX]    [0] test.sma::funcion_cargar (line 68)
L 08/22/2017 - 00:21:06: [AMXX]    [1] test.sma::client_authorized (line 50)

Código PHP:
#include <amxmodx>
#include <adv_vault>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

new g_pj[33][32], g_frags[33]

new 
g_vault;

new 
g_sort;

enum {
    
CAMPO_FRAGS,
    
MAX_FIELDS
}

new 
g_campos[MAX_FIELDS]

public 
plugin_init() {
    
g_vault adv_vault_open("datos_test"false)
    
    
g_sort adv_vault_sort_create(g_vaultORDER_DESC602000g_campos[CAMPO_FRAGS])    // linea 24
    
    
g_campos[CAMPO_FRAGS] = adv_vault_register_field(g_vault"frags")
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_clcmd("say /add""cmdAdd");
    
register_clcmd("say /puntos""cmdPuntos");
    
register_clcmd("say /top15""funcion_top15");
    
    
adv_vault_init(g_vault)
    
    
}

public 
cmdAdd(id)
{
    
g_frags[id]++
}

public 
cmdPuntos(id)
{
    
client_print(idprint_chat"Tienes %d puntos"g_frags[id]);
}

public 
client_authorized(id){
    
get_user_name(idg_pj[id], charsmax(g_pj));
    
funcion_cargar(id);    // linea 50
}

public 
client_disconnect(id)
    
funcion_guardar(id)

funcion_guardar(id)
{

    
adv_vault_set_start(g_vault)
    
    
adv_vault_set_field(g_vaultg_campos[CAMPO_FRAGS], g_frags[id])

    
adv_vault_set_end(g_vault0g_pj[id])
}

funcion_cargar(id)
{
    if(!
adv_vault_get_prepare(g_vault_g_pj[id]))    // linea 68
        
return
    
    
g_frags[id]    = adv_vault_get_field(g_vaultg_campos[CAMPO_FRAGS])
    
    
adv_vault_set_end(g_vault0g_pj[id])
}

public 
funcion_top15(id)
{
    new 
fragskeyindexpj[32]
    
    new 
toploop min(adv_vault_sort_numresult(g_vaultg_sort), 15)
    
    for(new 
position=1position <= toploopposition++)
    {
        
keyindex adv_vault_sort_position(g_vaultg_sortposition)
        
        if(!
adv_vault_get_prepare(g_vaultkeyindex)) continue
        
        
frags adv_vault_get_field(g_vaultg_campos[CAMPO_FRAGS])
        
        
adv_vault_get_keyname(g_vaultkeyindexpj31)

        
client_print(idprint_console"#%d pj:[%s] - frags:[%d]"positionfrags)
    }