|
Member
Join Date: Apr 2012
Location: Argentina
|

07-09-2012
, 16:00
[Problema] Cuentas
|
#1
|
Bueno, quiero probar este plugin de protección de names de Kiske, pero me tira error al compilar.
¿Que esta mal?
PHP Code:
#include < amxmodx >
#include < fakemeta >
#include < fvault >
#include < cstrike >
// Creamos variables globales
new SZ_Password[ 192 ]
new SZ_Password_T[ 33 ][ 192 ]
new Registrado[ 33 ]
new BadPassword[ 33 ]
new const Vault[] = "_Datos" // Nombre del Archivo donde se guardaran los Datos.
public plugin_init( )
{
register_plugin( "Tutorial", "1.0", "Kiske" )
register_forward( FM_ClientUserInfoChanged, "FWClientUserInfoChanged" ) // Si no me equivoco esta forward se llama cuando el usuario cambia algo de su setinfo.
register_clcmd( "say /registrarse", "CMDRegistrarse" )
register_clcmd( "IntroducirContrasenia", "CMDIntroducirContrasenia" )
}
public client_disconnect( Index )
Save( Index ) // Esta función ponganla en todos los lugares donde quieren que se guarden sus cosas.
public client_putinserver( Index )
{
Registrado[ Index ] = 0
BadPassword[ Index ] = 0
Load( Index )
}
public CMDRegistrarse( Index )
{
if( Registrado[ Index ] || BadPassword[ Index ] )
return PLUGIN_HANDLED;
client_cmd( Index, "messagemode IntroducirContrasenia" )
return PLUGIN_CONTINUE;
}
public CMDIntroducirContrasenia( Index )
{
read_args( SZ_Password, 191 ) // Ponemos en la Variable SZ_Password lo que escribió como Contraseña
remove_quotes( SZ_Password ) // Analiza lo que escribimos
trim( SZ_Password ) // Esta opción es para remover los ESPACIOS ( si es que puso ) al principio y al final de lo que escribió
if( equal( SZ_Password, "" ) || contain( SZ_Password, " ") != -1) // En la primer parte, verificamos si lo que ingresó contiene algo......y en la segunda parte verificamos si lo que ingresó tiene espacios, si coincide alguna de las dos cosas, no se lo aceptamos.
return PLUGIN_HANDLED;
else // Si se llama esta parte, quiere decir que lo que ingresó contiene algo y no tiene espacios.
{
client_cmd( Index, "setinfo _pass ^"%s^"", SZ_Password ) // Creamos una Setinfo al jugador con el prefijo _pass y la contraseña que ingresó. Ustedes si quieren cambienle el prefijo.
Registrado[ Index ] = 1
// Guardamos el Nombre, ls Password y el Dinero actual
static SZ_Name[ 32 ], SZ_Data[ 512 ]
get_user_name( Index, SZ_Name, 31 )
// Si quieren agregar mas Datos solo vayan aumentando el Parametro y las Variables.
formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password, cs_get_user_money( Index ) )
// Esta función del FVault sirve para setear datos ( Recomiendo: Que lean el Include del FVault que está posteado al final de este Post )
fvault_set_data( Vault, SZ_Name, SZ_Data )
// Fixeamos un Error ya que si es la Primera vez que se registra, cuando llame al Save no aparecerá ninguna Password, esto lo Fixea.
SZ_Password_T[ Index ] = SZ_Password
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public Save( Index )
{
if( !Registrado[ Index ] || BadPassword[ Index ] ) // Si NO esta registrado, o si tiene la Contraseña Incorrecta, no le guardamos nada.
return PLUGIN_HANDLED;
// Voy a dar un Ejemplo en el caso de que quieran guardar Dinero o lo que sea.
static SZ_Data[ 512 ], SZ_Name[ 32 ]
formatex( SZ_Data, charsmax( SZ_Data ), "%s %d", SZ_Password_T[ Index ], cs_get_user_money( Index ) )
get_user_name( Index, SZ_Name, 31 )
fvault_set_data( Vault, SZ_Name, SZ_Data )
return PLUGIN_CONTINUE;
}
public Load( Index )
{
static SZ_Data[ 512 ], SZ_Name[ 32 ], SETINFO_Password[ 191 ], VAULT_Password[ 191 ], Dinero[ 11 ]
get_user_name( Index, SZ_Name, 31 )
get_user_info( Index, "_pass", SETINFO_Password, 190 ) // Seteamos en SETINFO_Password lo que tiene como Setinfo con el prefijo _pass
if( !fvault_get_data( Vault, SZ_Name, SZ_Data, charsmax( SZ_Data ) ) ) // Detectamos si NO existe su Nombre y Data en el Vault. En ese caso, les dejo a su Creatividad para que piensen.
return 0;
Registrado[ Index ] = 1
// El Nombre y la Password JAMÁS la cargen.
// Voy a dar un Ejemplo en el caso de que quieran cargar Dinero o lo que sea.
parse( SZ_Data, VAULT_Password, 190, Dinero, 10 ) // La función PARSE, separa los Datos 1 por 1. Si guardamos la Password primero, y el Dinero despues, entonces este Parse está bien, obviamente tiene que seguir el Orden en el que se guardó.
if( equal( SETINFO_Password, VAULT_Password ) ) // Si la Contraseña del Jugador coincide con la Registrada de su Nick, cargamos sus Datos.
{
// Fixeamos un Error para que no reemplaze la Password Registrada por alguna que puede llegar a cambiar el adentro del Server.
SZ_Password_T[ Index ] = SETINFO_Password
// Cargamos el Dinero. ( Numero )
cs_set_user_money( Index, str_to_num( Dinero ) )
// Si cargan una Variable es así:
// Money = str_to_num( Dinero )
// Y si cargan una Native como en el caso de cs_set_user_money, bueno ya esta puesto arriba.
// Ejemplo de: Cargar un Float
// Variable_De_Float[ Index ] = str_to_float( Float )
return 2;
}
else // Si la Contraseña del Jugador NO coincide con la Registrada de su Nick, podemos Kickearlo, mandarlo a Spect, un menú, les dejo su creatividad...
{
BadPassword[ Index ] = 1
//....
}
return 1;
}
public FWClientUserInfoChanged( Index, Buffer )
{
if( !is_user_connected( Index ) )
return FMRES_IGNORED;
static NickName[32], NickOld[32]; get_user_name( Index, NickOld, 31 )
engfunc( EngFunc_InfoKeyValue, Buffer, "name", NickName, 31 ) // Si tampoco me confundo, esto obtiene el valor "name" de su setinfo.
if( equal( NickName, NickOld ) )
return FMRES_IGNORED;
engfunc( EngFunc_SetClientKeyValue, Index, Buffer, "name", NickOld ) // Le volvemos a poner el nick viejo para que no se lo pueda cambiar.
client_cmd( Index, "name ^"%s^"; setinfo name ^"%s^"", NickOld, NickOld )
return FMRES_SUPERCEDE;
}
|
|