Senior Member
|
09-09-2013
, 10:29
[Pregunta] Habilidades
|
#1
|
Tengo una duda de como guardar estas habilidades:
PHP Code:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < hamsandwich >
#define PLUGIN "Habilidades por puntos"
#define AUTHOR "cLAANS"
#define VERSION "1.2"
#define MaxSlotServidor 33
#define MarkBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) )
#define ClearBit(%1,%2) ( %1 &= ~ ( 1 << ( %2 & 31 ) ) )
#define IsBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) )
new const TAG [ ] = "[HABILIDADES]"
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
enum _:DATA_MEJORA
{
MEJORA_NAME[ 10 ],
MEJORA_COSTO,
MEJORA_MAX
};
new g_mejora_data[ ][ DATA_MEJORA ] =
{
{ "Vida", 10, 20 },
{ "Chaleco", 13, 10 },
{ "Velocidad", 11, 5 },
{ "Gravedad", 16, 4}
};
new g_habilidad[ MaxSlotServidor ][ 4 ];
new g_puntos[ MaxSlotServidor ];
new g_conectado;
new g_msgSayText;
#define vida(%1) (%1 * 15)
#define chaleco(%1) (%1 * 10)
#define velocidad(%1) (%1 * 0.1)
#define gravedad(%1) (%1 * 0.1)
public plugin_init( )
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_clcmd( "say /puntos" , "show_menu_puntos" );
g_msgSayText = get_user_msgid( "SayText" );
RegisterHam( Ham_Player_ResetMaxSpeed, "player", "fw_Player_ResetMaxSpeed", 1 );
RegisterHam( Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1 );
}
public client_putinserver( id ) MarkBit( g_conectado, id );
public client_disconnect( id ) ClearBit( g_conectado, id );
public fw_PlayerSpawn_Post( id )
{
if( !IsBit( g_conectado, id ) )
return HAM_IGNORED;
set_user_health( id, get_user_health( id ) + vida( g_habilidad[ id ][ 0 ] ) );
set_user_armor( id, get_user_armor(id ) + chaleco( g_habilidad[ id ][ 1 ] ) );
set_user_gravity( id, get_user_gravity( id ) - gravedad( g_habilidad[ id ][ 3 ] ) );
/*
En vez de utilizar get_user_health( id ) se podria usar el numero 100 si es que no tienen otro plugin que
Interfiera en la vida, lo mismo en la gravedad utilizando 1.0 en vez de get_user_gravity( id )
En el chaleco no ya que queda de la ronda anterior
*/
return HAM_IGNORED;
}
public fw_Player_ResetMaxSpeed( id )
set_user_maxspeed(id, get_user_maxspeed( id ) + velocidad( g_habilidad[ id ][ 2 ] ) );
public show_menu_puntos( id )
{
new iLen[ 250 ];
new hadle_puntos = menu_create("\y=============================^n\w Sistema de habilidades \d|| \wBy cLAANS ^n\y=============================^n", "hadle_puntos")
for( new i = 0; i < sizeof g_mejora_data; i++ )
{
if( g_habilidad[ id ][ i ] <= g_mejora_data[ i ][ MEJORA_MAX ] )
{
if( g_puntos[ id ] >= g_mejora_data[ i ][ MEJORA_COSTO ] )
formatex( iLen , charsmax( iLen ) , "\wAumentar : %s [%d / %d] \y[ Costo : %d P]", g_mejora_data[i][MEJORA_NAME],g_habilidad[ id ][ i ], g_mejora_data[ i ][ MEJORA_MAX ], g_mejora_data[ i ][ MEJORA_COSTO ] );
else
formatex( iLen , charsmax( iLen ) , "\dAumentar : %s [%d / %d] \r[P.Necesarios : %d]", g_mejora_data[ i ][ MEJORA_NAME ], g_habilidad[ id ][ i ], g_mejora_data[ i ][ MEJORA_MAX ], g_mejora_data[ i ][ MEJORA_COSTO ] );
if(g_habilidad[ id ][ i ] >= g_mejora_data[ i ][ MEJORA_MAX ] )
formatex( iLen , charsmax( iLen ) , "\d[%d] %s [%d / %d] \r[COMPLETADO]", i+1, g_mejora_data[ i ][ MEJORA_NAME ], g_habilidad[ id ][ i ], g_mejora_data[ i ][ MEJORA_MAX ] );
}
menu_additem( hadle_puntos , iLen );
}
menu_setprop( hadle_puntos , MPROP_EXITNAME,"\ySalir" );
menu_display( id, hadle_puntos , 0 );
return PLUGIN_HANDLED;
}
public hadle_puntos(id , menu, item)
{
menu_destroy(menu);
if (item == MENU_EXIT)
return
if(g_puntos[ id ] < g_mejora_data[ item ][ MEJORA_COSTO ] )
{
hns_print_color(id, "^x04%s^x01 Nesecitas^x03 %d^x01 puntos para mejorar^x03 %s^x01.", TAG, g_mejora_data[ item ][ MEJORA_COSTO ], g_mejora_data[ item ][ MEJORA_NAME ] );
client_cmd( id, "spk buttons/button10.wav" );
return;
}
if(g_habilidad[ id ][ item ] >= g_mejora_data[ item ][ MEJORA_MAX ] )
{
hns_print_color(id, "^x04%s^x01 Subistes el maximo de puntos para la mejora:^x03 %s^x01.", TAG, g_mejora_data[ item ][ MEJORA_NAME ] );
client_cmd( id, "spk buttons/button10.wav" );
return;
}
g_puntos[ id ] -= g_mejora_data[ item ][ MEJORA_COSTO ];
g_habilidad[ id ][ item ]++;
hns_print_color( id, "^x04%s^x01 Subistes la mejora:^x03 %s^x01 ahora tenes^x03 %d^x01 /^x03 %d^x01 completada de ella. ", TAG, g_mejora_data[ item ][ MEJORA_NAME ], g_habilidad[ id ][ item ], g_mejora_data[ item ][ MEJORA_MAX ] );
show_menu_puntos( id );
}
stock hns_print_color( id, const mensaje[ ], any:...)
{
if( !IsBit( g_conectado, id ) )
return;
static buffer[ 192 ];
vformat(buffer, charsmax(buffer), mensaje, 3);
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, id );
write_byte( id );
write_string(buffer );
message_end( );
}
No se si se guarda asi:
g_habilidad[ id ][ vida ]
g_habilidad[ id ][ chaleco ]
etc..
Se guarda asi? o de otra forma?
PHP Code:
GuardarDatos(id)
{
// Esto lo Hice para demostrar solamente obviamente dentro del ZP tiene una Variable para obtener el Nombre si es que usan zp.
new gName[32]
get_user_name(id, gName, charsmax(gName))
// Le damos Formato a szKey con el Nombre "db_datos" para luego usarlo
formatex(szKey, charsmax(szKey), "db_datos")
// Lo mismo aquí pero con szData pero con la diferencia que aquí le seteamos el valor actual de cada variable.
formatex(szData, charsmax(szData), "%d %d %d %d", g_habilidad[id][vida], g_habilidad[id][chaleco], g_habilidad[id][velocidad], g_habilidad[id][gravedad])
// Seteamos la key, nombre del usuario y la data
nfv_set_data(VaultFile, szKey, gName, szData)
}
// Función privada para Cargar los Datos de los Usuarios
CargarDatos(id)
{
new gName[32], g_Load_vida[25], g_Load_chaleco[25], g_Load_velocidad[25], g_Load_gravedad[25]
get_user_name(id, gName, charsmax(gName))
formatex(szKey, charsmax(szKey), "db_datos")
// Creo que si no existe el key y la data con ese nombre se returnea
if(!nfv_get_data(VaultFile, szKey, gName, szData, sizeof(szData) - 1))
return;
// Separamos los Datos y los guardamos en una variable
parse(szData, g_Load_vida, charsmax(g_Load_vida), g_Load_chaleco, charsmax(g_Load_chaleco), g_Load_velocidad, charsmax(g_Load_velocidad), g_Load_gravedad, charsmax(g_Load_gravedad))
// Le damos los datos Parseados de la data convertidos en numeros
g_habilidad[id][vida] = str_to_num(g_Load_vida)
g_habilidad[id][chaleco] = str_to_num(g_Load_chaleco)
g_habilidad[id][velocidad] = str_to_num(g_Load_velocidad)
g_habilidad[id][gravedad] = str_to_num(g_Load_gravedad)
}
__________________
Aprendiendo de nadie
|
|