Bueno hago este aporte ya que cerre un server surf que tenia y tenia implementado este plugin que arme con mis pocos conocimientos.
Descripcion:
Simple sistema de frags que al matar sumas frags para usar en una tienda, y para participar en un top15
Contiene tambien un menu principal que se habre con la "m" que contiene las estadisticas / top15 / tienda / Reglas
Tambien contiene un guardado de adv_vault donde se guarda los tiempos jugados, los frags, y los frags gastados
Yo a las reglas las saque asique donde dice REGLA1, REGLA2, etc ponen las reglas que ustedes quieran
Lo pueden usar para cualquier mod, yo lo usaba para un surf y un server fruta.
Code:
Creditos:
Actualizaciones:
Descripcion:
Simple sistema de frags que al matar sumas frags para usar en una tienda, y para participar en un top15
Contiene tambien un menu principal que se habre con la "m" que contiene las estadisticas / top15 / tienda / Reglas
Tambien contiene un guardado de adv_vault donde se guarda los tiempos jugados, los frags, y los frags gastados
Yo a las reglas las saque asique donde dice REGLA1, REGLA2, etc ponen las reglas que ustedes quieran
Lo pueden usar para cualquier mod, yo lo usaba para un surf y un server fruta.
Code:
Código PHP:
/* Sistema de frags / tienda / top15 / Informacion by Soy nuevo
Creditos:
Destro [adv_vault / top15]
*/
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <adv_vault>
#include <cstrike>
#define PLUGIN "Surf menu"
#define VERSION "1.0"
#define AUTHOR "Soy nuevo."
#define TASK_SUMAR 12234
#define SUMAR_ID (taskid - TASK_SUMAR)
new g_frags[ 33]
new g_fragsgastados[ 33 ]
new g_muertes[ 33 ]
new Dias[ 33 ]
new Horas[ 33 ]
new Minutos[ 33 ]
new Segundos[ 33 ]
new g_conectado[ 33 ]
new g_motd[ 8000 ]
new g_maxplayers
new g_sort
new g_sort1
new frags_kill
enum _: DatosShop
{
NAME[40],
COSTO
}
new const ListaShop[][DatosShop] =
{
//Nombre //Costo
{ "Vida +50", 15 },
{ "Chaleco +100", 5 },
{ "Inmunidad(15 seg)", 50 },
{ "Velocidad (20 seg)", 65 },
{ "Pasos Silenciosos( 1 min.)", 20 },
{ "Camuflaje(30 seg)", 35 }
}
enum {
FRAGS,
FRAGSGASTADOS,
MUERTES,
DIAS,
HORAS,
MINUTOS,
SEGUNDOS,
MAX_FIELDS
}
new g_campos[MAX_FIELDS], g_vault, g_playername[33][32];
public plugin_init()
{
g_vault = adv_vault_open( "Datos", false )
g_campos[ FRAGS ] = adv_vault_register_field( g_vault, "Frags" )
g_campos[ FRAGSGASTADOS ] = adv_vault_register_field( g_vault, "Frags_Gastados" )
g_campos[ MUERTES ] = adv_vault_register_field( g_vault, "Muertes" )
g_campos[ DIAS ] = adv_vault_register_field( g_vault, "Dias" )
g_campos[ HORAS ] = adv_vault_register_field( g_vault, "Horas" )
g_campos[ MINUTOS ] = adv_vault_register_field( g_vault, "Minutos" )
g_campos[ SEGUNDOS ] = adv_vault_register_field( g_vault, "Segundos" )
adv_vault_init(g_vault)
g_sort = adv_vault_sort_create(g_vault, ORDER_DESC, 60, 2000, g_campos[ FRAGS ] )
g_sort1 = adv_vault_sort_create(g_vault, ORDER_DESC, 60, 2000, g_campos[ DIAS ], g_campos[ HORAS ], g_campos[ MINUTOS ] )
register_clcmd("chooseteam", "clcmd_changeteam")
register_clcmd("jointeam", "clcmd_changeteam")
register_clcmd("say", "HookSay")
frags_kill = register_cvar("cvar_frags_kill", "1") // cvar para modificar la cantidad de frags al matar
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
new ent = create_entity("info_target")
entity_set_string(ent, EV_SZ_classname, "entity_task")
entity_set_float(ent, EV_FL_nextthink, 1.0)
register_think("entity_task", "fw_ShowHUD")
g_maxplayers = get_maxplayers()
}
// Cuando ingresa
public client_putinserver( id )
{
get_user_name(id, g_playername[id], charsmax(g_playername[]));
set_task( 1.0,"SumarSegundos",id + TASK_SUMAR, _ , _ ,"b" )
set_task( 15.0, "MasFraguero", id)
set_task( 30.0, "MasVicio", id)
g_frags[ id ] = 0
g_fragsgastados[ id ] = 0
g_muertes[ id ] = 0
Dias[ id ] = 0
Horas[ id ] = 0
Minutos[ id ] = 0
Segundos[ id ] = 0
g_conectado[id] = 1
LoadData( id )
return PLUGIN_CONTINUE;
}
//Cuando se desconecta
public client_disconnect( id )
{
remove_task( id + TASK_SUMAR )
g_conectado[id] = 0
SaveData(id)
}
public fw_PlayerKilled(victim, attacker)
{
if(!g_conectado[ victim ] || !g_conectado[ attacker ] || victim == attacker || get_user_team( victim ) == get_user_team( attacker ) )
return
g_frags[ attacker ] += get_pcvar_num(frags_kill)
g_muertes[ victim ]++
}
public fw_ShowHUD( ent )
{
static id
set_hudmessage(255, 0, 0, 0.0, 0.2, 0, 6.0, 12.0)
for( id = 1; id <= g_maxplayers; id++)
{
if( !g_conectado[ id ] )
continue
show_hudmessage(id, "Frags: [ %d ]^nMuertes: [ %d ]", g_frags[ id ], g_muertes[ id ])
}
entity_set_float(ent, EV_FL_nextthink, 1.0)
}
public menu_principal( id )
{
new gMenu = menu_create("\y[\r Menu Principal\y ]\w By Soy Nuevo", "menu_principal1")
menu_additem(gMenu, "\wTienda", "1")
menu_additem(gMenu, "\wEstadisticas", "2")
menu_additem(gMenu, "\wReglas", "3")
menu_additem(gMenu, "\wTop15\y [\r Frags\y ]", "4")
menu_additem(gMenu, "\wMenu de Administracion", "5")
menu_display(id, gMenu, 0)
}
public menu_principal1(id, menu, item)
{
if ( item == MENU_EXIT )
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
switch(item)
{
case 0: menu_tienda( id )
case 1: estadisticas( id )
case 2: menu_reglas( id )
case 3: top15( id )
case 4:
{
if (get_user_flags( id ) & ADMIN_BAN)
{
client_cmd(id, "amxmodmenu")
}
else
{
menu_principal( id )
chat_color(id, "!t[ !gamxmodx-es.com !t] !nNo tienes acceso!")
}
}
}
return PLUGIN_HANDLED;
}
// Tienda
public menu_tienda( id )
{
new len[250], menu
formatex( len, charsmax( len ), "\r[ \yTienda\r ]^n\r[ Frags: \y%d\r ]", g_frags[ id ])
menu = menu_create(len, "menu_tienda1")
for(new i = 0; i < sizeof ListaShop; i++)
{
if(g_frags[ id ] < ListaShop[i][COSTO])
{
formatex(len, charsmax( len ), "\d%s | \r[Frags:\r%d]", ListaShop[ i ][ NAME ], ListaShop[ i ][ COSTO ])
menu_additem(menu, len)
}
else
{
formatex(len, charsmax(len), "\w%s", ListaShop[ i ][ NAME ], ListaShop[ i ][ COSTO ])
menu_additem( menu, len )
}
}
menu_display(id, menu, 0)
return PLUGIN_HANDLED;
}
public menu_tienda1( id, menu, item )
{
if(item == MENU_EXIT)
{
menu_principal( id )
return PLUGIN_HANDLED;
}
if(!is_user_alive( id ))
{
chat_color(id, "!t[ !gamxmodx-es.com !t] !ntienes que estar vivo para abrir la tienda")
return PLUGIN_HANDLED;
}
if(g_frags[ id ] < ListaShop[ item ][ COSTO ])
{
chat_color(id, "!t[ !gamxmodx-es.com !t] !nNo tienes frags suficiente para comprar !g%s",ListaShop[ item ][ NAME ])
return PLUGIN_HANDLED;
}
switch(item)
{
case 0: set_user_health(id, get_user_health(id) + 50 )
case 1: set_user_armor(id, get_user_armor(id) + 100 )
case 2: set_user_godmode( id, 1 ), set_task( 15.0, "remove_godmode", id )
case 3: set_user_maxspeed(id, Float: 320.0 ), set_task( 20.0, "remove_speed", id )
case 4: set_user_footsteps( id, 1 ), set_task( 60.0, "remove_footsteps", id )
case 5:
{
if( get_user_team( id ) == 1 )
{
cs_set_user_model(id, "urban")
}
else if( get_user_team( id ) == 2)
{
cs_set_user_model(id, "leet")
}
set_task( 30.0, "remove_camuflaje", id )
}
}
g_frags[ id ] -= ListaShop[ item ][ COSTO ]
g_fragsgastados[ id ] += ListaShop[ item ][ COSTO ]
chat_color(id, "!t[ !gamxmodx-es.com !t] !nHas Comprado: !g%s",ListaShop[ item ][ NAME ])
return PLUGIN_HANDLED;
}
public remove_godmode( id )
{
set_user_godmode( id, 0 )
chat_color(id, "!t[ !gamxmodx-es.com !t] !nLa Inmunidad a terminado")
}
public remove_speed( id )
{
set_user_maxspeed( id, Float: 250.0 )
chat_color( id, "!t[ !gamxmodx-es.com !t] !nLa Velocidad a terminado" )
}
public remove_camuflaje( id )
{
cs_reset_user_model( id )
chat_color( id, "!t[ !gamxmodx-es.com !t] !nSe te removio el camuflaje" )
}
public remove_footsteps( id )
{
set_user_footsteps( id, 0 )
chat_color( id, "!t[ !gamxmodx-es.com !t] !nSe te removieron los pasos silenciosos" )
}
// Estadisticas
public estadisticas( id )
{
new texto[ 150 ]
formatex(texto, charsmax(texto), "\r[ \yEstadisticas\r ]")
new menu = menu_create(texto, "estadisticas1")
formatex(texto, charsmax(texto), "\w Frags: \y[ \r%d\y ]\w Frags Gastados: \y[ \r%d\y ] ", g_frags[ id ], g_fragsgastados[ id ] )
menu_additem(menu, texto)
formatex(texto, charsmax(texto), "\w Muertes: \y[ \r%d\y ] ", g_muertes[id] )
menu_additem(menu, texto)
formatex(texto, charsmax(texto), "\w Has viciado: Dias \y[ \r%d\y ]\w Horas \y[ \r%d\y ]\w Minutos \y[ \r%d\y ]", Dias[ id ],Horas[ id ],Minutos[ id ] )
menu_additem(menu, texto)
menu_display( id, menu, 0 )
}
public estadisticas1( id, menu, item )
{
if( item == MENU_EXIT )
{
menu_principal( id )
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public menu_reglas( id )
{
new gMenu = menu_create("\y[\r Menu de Reglas\y ]", "menu_reglas1")
menu_additem(gMenu, "\r[\y USUARIOS\r ]", "1")
menu_additem(gMenu, "\r[\y ADMIN\r ]", "2")
menu_display(id, gMenu, 0)
}
public menu_reglas1(id, menu, item)
{
if ( item == MENU_EXIT )
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
switch(item)
{
case 0: reglas_usuarios( id )
case 1: reglas_admin( id )
}
return PLUGIN_HANDLED;
}
reglas_usuarios( id )
{
static len; len = 0
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">1.<font color=^"black^">REGLA 1<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">2.<font color=^"black^">REGLA 2<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">3.<font color=^"black^">REGLA 3<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">4.<font color=^"black^">REGLA 4<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">5.<font color=^"black^">REGLA 5<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">6.<font color=^"black^">REGLA 6<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">7.<font color=^"black^">REGLA 7<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">8.<font color=^"black^">REGLA 8<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">9.<font color=^"black^">REGLA 9<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">10.<font color=^"black^">REGLA 10<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">11.<font color=^"black^">REGLA 11<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">12.<font color=^"black^">REGLA 12<br>")
show_motd( id, g_motd, "Reglas del Servidor" )
}
reglas_admin( id )
{
static len; len = 0
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">1.<font color=^"black^">REGLA 1<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">2.<font color=^"black^">REGLA 2<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">3.<font color=^"black^">REGLA 3<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">4.<font color=^"black^">REGLA 4<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">5.<font color=^"black^">REGLA 5<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">6.<font color=^"black^">REGLA 6<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">7.<font color=^"black^">REGLA 7<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">8.<font color=^"black^">REGLA 8<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">9.<font color=^"black^">REGLA 9<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">10.<font color=^"black^">REGLA 10<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">11.<font color=^"black^">REGLA 11<br>")
len += formatex(g_motd[len], charsmax(g_motd) - len, "<font color=^"red^">12.<font color=^"black^">REGLA 12<br>")
show_motd( id, g_motd, "Reglas del Servidor" )
}
public SumarSegundos ( taskid )
{
static id;id = SUMAR_ID
if( Segundos[ id ] >= 60)
{
Segundos[ id ] = 0
Minutos[ id ]++
}
else Segundos[ id ]++
if( Minutos[ id ] >= 60)
{
Horas[ id ]++
Minutos[ id ] = 0
}
if( Horas[ id ] >= 24)
{
Horas[ id ] = 0
Dias[ id ]++
}
}
public top15( id )
{
new frags, keyindex, pj[32]
// Chequeamos que el loop no sea mayor a los resultados obtenidos
new toploop = min(adv_vault_sort_numresult(g_vault, g_sort), 15)
for(new position=1; position <= toploop; position++)
{
// Obtenemos el keyindex que este en la posición deseada
keyindex = adv_vault_sort_position(g_vault, g_sort, position)
// Preparamos para obtener los datos
if(!adv_vault_get_prepare(g_vault, keyindex)) continue
// Obtenemos los datos
frags = adv_vault_get_field(g_vault, g_campos[FRAGS])
adv_vault_get_keyname(g_vault, keyindex, pj, 31)
client_print(id, print_center, "El Top15 ha sido pegado en la consola!")
console_print(id, "#%d Nombre: [ %s ] - Frags: [ %d ]", position, pj, frags)
}
}
public clcmd_changeteam( id )
{
static CsTeams:team
team = cs_get_user_team(id)
if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED)
return PLUGIN_CONTINUE;
menu_principal(id)
return PLUGIN_HANDLED;
}
public client_infochanged( id )
{
if( !is_user_connected( id ) ) return
static newname[ 32 ]
get_user_info(id, "name", newname, charsmax( newname ) )
if( !equal( newname, g_playername[ id ] ) )
{
set_task( 0.1, "LoadData", id )
}
}
public SaveData( id )
{
if( !is_user_connected( id ) ) return;
adv_vault_set_start( g_vault )
adv_vault_set_field( g_vault, g_campos[ FRAGS ], g_frags[ id ] )
adv_vault_set_field( g_vault, g_campos[ FRAGSGASTADOS ], g_fragsgastados[ id ] )
adv_vault_set_field( g_vault, g_campos[ MUERTES ], g_muertes[ id ] )
adv_vault_set_field( g_vault, g_campos[ DIAS ], Dias[ id ] )
adv_vault_set_field( g_vault, g_campos[ HORAS ], Horas[ id ] )
adv_vault_set_field( g_vault, g_campos[ MINUTOS ], Minutos[ id ] )
adv_vault_set_field( g_vault, g_campos[ SEGUNDOS ], Segundos[ id ] )
adv_vault_set_end(g_vault, 0, g_playername[ id ] )
}
public LoadData( id )
{
if( !adv_vault_get_prepare( g_vault, _, g_playername[ id ] ) )
return;
g_frags[ id ] = adv_vault_get_field( g_vault, g_campos[ FRAGS ] )
g_fragsgastados[ id ] = adv_vault_get_field( g_vault, g_campos[ FRAGSGASTADOS ] )
g_muertes[ id ] = adv_vault_get_field( g_vault, g_campos[ MUERTES ] )
Dias[ id ] = adv_vault_get_field( g_vault, g_campos[ DIAS ] )
Horas[ id ] = adv_vault_get_field( g_vault, g_campos[ HORAS ] )
Minutos[ id ] = adv_vault_get_field( g_vault, g_campos[ MINUTOS ] )
Segundos[ id ] = adv_vault_get_field( g_vault, g_campos[ SEGUNDOS ] )
}
public MasFraguero(id)
{
new frags, keyindex, pj[32]
// Chequeamos que el loop no sea mayor a los resultados obtenidos
new toploop = min(adv_vault_sort_numresult(g_vault, g_sort), 1)
for(new position=1; position <= toploop; position++)
{
// Obtenemos el keyindex que este en la posición deseada
keyindex = adv_vault_sort_position(g_vault, g_sort, position)
// Preparamos para obtener los datos
if(!adv_vault_get_prepare(g_vault, keyindex)) continue
// Obtenemos los datos
frags = adv_vault_get_field(g_vault, g_campos[FRAGS])
adv_vault_get_keyname(g_vault, keyindex, pj, 31)
chat_color(id, "!t[ !gamxmodx-es.com !t ] !nEl !g#%d !nmas fraguero del server es !g%s !ncon un total de !g%d !nfrags", position, pj, frags)
}
}
public MasVicio(id)
{
new dias, horas, minutos, keyindex, pj[ 32 ]
// Chequeamos que el loop no sea mayor a los resultados obtenidos
new toploop = min( adv_vault_sort_numresult( g_vault, g_sort1 ), 1 )
for(new position=1; position <= toploop; position++)
{
// Obtenemos el keyindex que este en la posición deseada
keyindex = adv_vault_sort_position(g_vault, g_sort1, position)
// Preparamos para obtener los datos
if(!adv_vault_get_prepare(g_vault, keyindex)) continue
// Obtenemos los datos
dias = adv_vault_get_field(g_vault, g_campos[ DIAS] )
horas = adv_vault_get_field(g_vault, g_campos[ HORAS ] )
minutos = adv_vault_get_field(g_vault, g_campos[ MINUTOS ] )
adv_vault_get_keyname(g_vault, keyindex, pj, 31)
chat_color(id, "!t[ !gamxmodx-es.com !t ] !nEl !g#%d !nmas vicio del server es !g%s !ncon un tiempo jugado de: !g%d !tDias !n - !g%d !tHoras !n- !g%d !tMinutos", position, pj, dias, horas, minutos)
}
}
public HookSay( id )
{
static chat[ 191 ]
read_args(chat, charsmax( chat ) )
remove_quotes(chat)
replace_all( chat, charsmax( chat ), "%", " ")
if ( !ValidMessage( chat, 1 ) ) return PLUGIN_CONTINUE;
new name[ 32 ], message[ 256 ]
get_user_name( id, name, 31 )
if ( !is_user_alive( id ) )
{
format(message, 255, "^x03[MUERTO]^x01[^x03Frags:^x04 %d^x01]^x03 %s:^x01 %s", g_frags[ id ], name, chat )
color_chat( 0, id, message )
console_print( 0, message )
}
else if ( is_user_alive( id ) )
{
if ( get_user_flags( id ) & ADMIN_RCON )
{
format( message, 255, "^x03[ DUEÑO ]^x04[^x01Frags:^x03 %d^x04]^x03 %s:^x01 %s", g_frags[ id ], name, chat)
color_chat( 0, id, message )
console_print( 0, message )
}
else if ( get_user_flags( id ) & ADMIN_LEVEL_B )
{
format(message, 255, "^x03[ STAFF ]^x01[^x03Frags:^x04 %d^x01]^x03 %s:^x01 %s", g_frags[ id ], name, chat)
color_chat( 0, id, message )
console_print( 0, message )
}
else if ( get_user_flags( id ) & ADMIN_LEVEL_F )
{
format(message, 255, "^x03[ ADMIN ]^x01[^x03Frags:^x04 %d^x01]^x03 %s:^x01 %s", g_frags[ id ], name, chat)
color_chat( 0, id, message )
console_print( 0, message )
}
else
{
format(message, 255, "^x03[USUARIO]^x01[^x03Frags:^x04 %d^x01]^x03 %s:^x01 %s", g_frags[ id ], name, chat)
color_chat( 0, id, message )
console_print( 0, message )
}
}
return PLUGIN_HANDLED_MAIN;
}
stock ValidMessage( text[], maxcount )
{
static len, i, count
len = strlen( text )
count = 0
if (!len)
return false;
for ( i = 0; i < len; i++)
{
if (text[ i ] != ' ')
{
count++
if ( count >= maxcount )
return true;
}
}
return false;
}
public color_chat( playerid, colorid, message[] )
{
message_begin( playerid?MSG_ONE:MSG_ALL, get_user_msgid( "SayText" ), { 0, 0, 0 }, playerid )
write_byte( colorid )
write_string( message )
message_end()
}
stock chat_color(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!n", "^1")
replace_all(msg, 190, "!t", "^3")
replace_all(msg, 190, "!t2", "^0")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}
Creditos:
Cita:Destro: [ adv_vault / top15 ]
Actualizaciones:
Cita:Sistema Frags v1.0:
- Lo publique
Sistema Frags v1.1:
- Hook say
- Items a la tienda
- Menu de administracion
[GUIA] [ZP] Logros por frags
[APORTE] Sistema de Frags + Shop + Top15 + Menu + Guardado (adv_vault)
[APORTE] Base Builder + Niveles v1.0
[APORTE] Top10 Knife
[APORTE] Top10 por Banderas ( ctf )
APRENDIENDO...
[APORTE] Sistema de Frags + Shop + Top15 + Menu + Guardado (adv_vault)
[APORTE] Base Builder + Niveles v1.0
[APORTE] Top10 Knife
[APORTE] Top10 por Banderas ( ctf )
APRENDIENDO...