Optimize and Improve the Code.
Aid is saving accounts ammo packs, and I need to stay put rather well to the server.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fvault>
#include <nvault>
#include <zombieplague>
#include <regex>
#define PLUGIN "[ZP] GUARDADO DE CUENTAS"
#define VERSION "1.0"
#define AUTHOR "..."
#define is_valid_player(%1) (1 <= %1 <= 32)
#define VAULTNAME "zp_ammopacks"
new const g_guardar[] = "[REGISTRO]"
new Text, cvar_password_prefijo, bool: g_registrado[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /registrarse", "menu")
register_clcmd("say registrarse", "menu")
register_clcmd("say_team /registrarse", "menu")
register_clcmd("say_team registrarse", "menu")
register_clcmd("ingresar_password", "filtro_cuenta")
cvar_password_prefijo = register_cvar("zp_password_prefijo", "_pass")
Text = get_user_msgid("SayText")
}
public menu(id)
{
if (!g_registrado[id])
{
new reg = menu_create("\yMenu de Registro^n^n- Guardado de Cuantas [ZP]^n^n", "abrir_menu")
menu_additem(reg, "\wRegistrar Cuenta", "1", 0)
menu_additem(reg, "\wNo Registrar Cuenta", "2", 0)
menu_setprop(reg, MPROP_EXITNAME, "\wSalir.")
menu_display(id, reg, 0)
return PLUGIN_HANDLED
}
else
{
client_print(id, print_center, "[ZP] Ya estas registrado")
}
return PLUGIN_HANDLED
}
public abrir_menu(id, reg, item)
{
if (item == MENU_EXIT)
{
menu_destroy(reg)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(reg, item, access, data,5, iName, 63, callback)
switch (str_to_num(data))
{
case 1:
{
registrar(id)
g_registrado[id] = true
}
case 2:
{
menu_destroy(reg)
}
}
menu_destroy(reg)
return PLUGIN_HANDLED
}
public filtro_cuenta(id)
{
new say[300]
read_args(say, charsmax(say))
remove_quotes(say), trim(say)
if(equal(say, ""))
return PLUGIN_HANDLED
if(contain(say, " ") != -1)
{
client_print(id, print_chat, "[ZP] Password con ESPACIOS, pueden llegar a perder datos")
return PLUGIN_HANDLED
}
crear_cuenta(id, say)
return PLUGIN_CONTINUE
}
crear_cuenta(id, say[])
{
new password[32]
copy(password, charsmax(password), say)
new data[64], name[32], prefijo[8]
get_user_name(id, name, charsmax(name))
get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
client_cmd(id, "setinfo %s %s", prefijo, password)
formatex(data, charsmax(data), "%s", password)
fvault_set_data(g_guardar, name, data)
ColorPrint(id, "/v[ZP] /nHas sido registrado!. Nick: /t%s - setinfo _pass: /t%s", name, password)
g_registrado[id] = true
}
public registrar(id)
{
switch(load_ammopacks(id))
{
case 1:
{
g_registrado[id] = true
ColorPrint(id, "[ZP] Este nick ya posee una cuenta")
return PLUGIN_HANDLED
}
case 2:
{
g_registrado[id] = true
ColorPrint(id, "[ZP] Ya estas logueado")
return PLUGIN_HANDLED
}
}
client_cmd(id, "messagemode Ingresar_Password")
return PLUGIN_HANDLED
}
public client_connect(id)
{
g_registrado[id] = false
load_ammopacks(id)
}
public client_infochanged(id)
{
new oldname[32], newname[32]
get_user_name(id, oldname, 31)
get_user_info(id, "name", newname, 31)
if( !equal(oldname, newname) )
check_user_name(id, newname)
}
stock check_user_name(id, const name[32] = "")
{
new plrname[32]
if(equal(name, ""))
{
get_user_name(id, plrname, 31)
}
else
{
plrname = name
}
load_ammopacks(id)
}
public task_ammopacks(taskid)
{
load_ammopacks(taskid)
}
load_ammopacks(id)
{
new data[64], name[32], password[32], password_en_archivo[32], ap[8]
get_datos(id, name, password)
if(!fvault_get_data(g_guardar, name, data, charsmax(data)))
{
return 0
}
parse(data, password_en_archivo, charsmax(password_en_archivo), ap, charsmax(ap))
if(equali(password_en_archivo, password))
{
g_registrado[id] = true
client_print(id, print_console, "* [ZP] Contrasenia Aceptada")
return 2
}
else
{
g_registrado[id] = false
new lReason[64]
server_cmd("kick #%d ^"Contrasenia Incorrecta.^"", get_user_userid(id), lReason)
client_print(id, print_console, "* [ZP] Contrasenia Incorrecta")
}
return 1
}
get_datos(id, name[32], password[32])
{
new prefijo[8]
get_user_name(id, name, charsmax(name))
get_pcvar_string(cvar_password_prefijo, prefijo, charsmax(prefijo))
get_user_info(id, prefijo, password, charsmax(password))
}
stock ColorPrint(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, charsmax(msg), input, 3)
replace_all(msg, 190, "/v", "^4") // texto verde
replace_all(msg, 190, "/n", "^1") // texto naranja
replace_all(msg, 190, "/t", "^3") // texto team
replace_all(msg, 190, "/c", "^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, Text, _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
public client_disconnect(id)
{
new g_vault = nvault_open(VAULTNAME)
if(g_vault == INVALID_HANDLE)
set_fail_state("Vault returned Invalid Handle")
new szKey[62], szValue[10], szName[32]
get_user_name(id, szName, 31)
format(szKey, 61,"%sAP", szName)
format(szValue, 9,"%i",zp_get_user_ammo_packs(id))
nvault_set(g_vault, szKey, szValue)
nvault_close(g_vault)
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
set_task(5.0,"cmdLoad",id)
}
public cmdLoad(id)
{
new g_vault = nvault_open(VAULTNAME)
if(g_vault == INVALID_HANDLE)
set_fail_state("Vault returned Invalid Handle")
new szKey[100], szName[32]
get_user_name(id, szName, 31)
format(szKey, 99,"%sAP", szName)
new iAp = nvault_get(g_vault, szKey)
if(iAp)
{
zp_set_user_ammo_packs(id , iAp)
client_print(id,print_chat,"[ZP] Login Exitoso.")
client_print(id,print_chat,"[ZP] Recuerda antes de entrar al server poner en consola: [ setinfo _pass password ].")
client_print(id,print_chat,"[ZP] Recuerda que tu nick no deve tener espacios para que se guarden tus datos.")
nvault_remove(g_vault , szKey)
}
nvault_close(g_vault)
return PLUGIN_CONTINUE;
}