Bueno me pidieron lo siguiente:
"Adaptar Este Sistema de Niveles a Este Sistema de Cuentas, y al mismo tiempo que quede todo dentro del ZP"
Yo usare el zp 4.3 + human classes que hay en este foro...
Ya teniendo adaptado el sistema de niveles a nuestro zp siguiendo el respectivo tutorial procederemos a adaptar el sistema de cuentas y a guardar nuestros datos...
Paso 1:
Agregamos la libreria (*.inc) Adv_vault debajo de las demas...
-->
Paso 2:
Creamos Variables y Constantes...
-->
Paso 3:
Nos vamos al init...
PD: Al final de la funcion antes de "}"
-->
Paso 4:
Nos vamos al final del plugin y agregamos los nuevos menús y funciones...
-->
Paso 5:
Editamos algunas funciones que ya existen en el zp...
-->
1.- client_putinserver()
PD: al final de la función antes de "}"
2.- Creamos esta funcion:
3.- Editamos esto: fw_ClientUserInfoChanged(id) por fw_ClientUserInfoChanged(id, buffer)
Ahora dentro de la función agregamos:
PD: Al final de la función antes de "}"
4.- clcmd_changeteam(id)
Reemplazamos el contenido de la funcion por esto:
y por si no pueden (casi imposible solo es C&P)
Les dejo el sma...
Descargar AMXX / zombie_plague40.sma (Tamaño: 353.39 KB / Descargas: 431)
"Adaptar Este Sistema de Niveles a Este Sistema de Cuentas, y al mismo tiempo que quede todo dentro del ZP"
Yo usare el zp 4.3 + human classes que hay en este foro...
Ya teniendo adaptado el sistema de niveles a nuestro zp siguiendo el respectivo tutorial procederemos a adaptar el sistema de cuentas y a guardar nuestros datos...
Paso 1:
Agregamos la libreria (*.inc) Adv_vault debajo de las demas...
-->
Código PHP:
#include <adv_vault>
Paso 2:
Creamos Variables y Constantes...
-->
Código PHP:
new g_contra[33][20], g_contra2[33][20], g_cuenta[33][32];
new g_vault,g_MsgVgui, g_MsgShowMenu;
new g_Estado[33], g_Can[33], g_Fecha[33][32];
enum {
EXP,
NIVEL,
FECHA,
PASSWORD,
DATA_M
};
enum {
NOREGISTRADO = 0,
REGISTRADO,
LOGUEADO,
ESTADOS
};
new const Estado[ESTADOS][] = { "Sin Registrar", "Registrado", "Logueado" };
new g_campo[DATA_M];
Paso 3:
Nos vamos al init...
PD: Al final de la funcion antes de "}"
-->
Código PHP:
register_clcmd("INGRESAR_PASSWORD", "Contra");
register_clcmd("say /cuenta", "ShowLogMenu");
g_MsgVgui = get_user_msgid("VGUIMenu");
g_MsgShowMenu = get_user_msgid("ShowMenu");
register_message(g_MsgVgui, "message_VGUImenu");
register_message(g_MsgShowMenu, "message_VGUImenu");
g_vault = adv_vault_open("CuentasZP", false);
g_campo[EXP] = adv_vault_register_field(g_vault, "EXP")
g_campo[NIVEL] = adv_vault_register_field(g_vault, "NIVEL")
g_campo[FECHA] = adv_vault_register_field(g_vault, "FECHA", DATATYPE_STRING, 32);
g_campo[PASSWORD] = adv_vault_register_field(g_vault, "PW", DATATYPE_STRING, 20);
adv_vault_init(g_vault);
Paso 4:
Nos vamos al final del plugin y agregamos los nuevos menús y funciones...
-->
Código PHP:
/* MENUS */
public ShowLogMenu(id) {
new Tit[128];
formatex(Tit, charsmax(Tit), "Sistema de cuentas by \dkikizon^n\wBienvenido \r%s^n\wESTADO: \r%s^n\wTu ultima visita fue: \r%s", g_cuenta[id], Estado[g_Estado[id]], g_Fecha[id]);
new menu = menu_create(Tit,"menu_log");
menu_additem(menu, (g_Estado[id] == REGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id]))?"Loguearse":"\dLoguearse", "1");
menu_additem(menu, (g_Estado[id] == NOREGISTRADO && !adv_vault_get_prepare(g_vault, _, g_cuenta[id]))?"Registrarse^n":"\dRegistrarse^n", "2");
menu_additem(menu, (g_Estado[id] == LOGUEADO && !g_Can[id])?"Cambiar Contra":"\dCambiar Contra", "3");
menu_display(id, menu, 0);
}
public menu_log(id, menu, item) {
if(item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch(item) {
case 0: {
if(g_Estado[id] == REGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id])) {
client_print(id, print_center, "Ingresa tu PASSWORD para entrar a tu cuenta");
client_cmd(id,"messagemode INGRESAR_PASSWORD");
} else {
client_print(id, print_center, "No puedes elegir esta opcion");
return PLUGIN_HANDLED;
}
}
case 1: {
if(g_Estado[id] == NOREGISTRADO && !adv_vault_get_prepare(g_vault, _, g_cuenta[id])) {
client_print(id, print_center, "Ingresa una PASSWORD para crear una cuenta");
client_cmd(id,"messagemode INGRESAR_PASSWORD");
} else {
client_print(id, print_center, "No puedes elegir esta opcion");
return PLUGIN_HANDLED;
}
}
case 2: {
if(g_Estado[id] == LOGUEADO && !g_Can[id]) {
client_print(id, print_center, "Ingresa tu nueva PASSWORD");
client_cmd(id,"messagemode INGRESAR_PASSWORD");
} else {
client_print(id, print_center, "No estas logueado o ya cambiaste tu password durante el mapa");
return PLUGIN_HANDLED;
}
}
}
return PLUGIN_HANDLED;
}
public Confirmar(id) {
new Tit[128];
formatex(Tit, charsmax(Tit),"La password sera \r%s^n^n\yConfirmar?", g_contra2[id]);
new menu = menu_create(Tit,"menu_confirmar");
menu_additem(menu,"\rSi\w, confirmar","1");
menu_additem(menu,"\rNo\w, deseo reescribirla","2");
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);
menu_display(id, menu, 0);
}
public menu_confirmar(id, menu, item) {
switch(item) {
case 0: {
switch(g_Estado[id]) {
case LOGUEADO: {
copy(g_contra[id], 19 ,g_contra2[id]);
Guardar(id);
client_print(id, print_center, "Tu password ha sido cambiada satisfactoriamente");
g_Can[id] = 1;
}
case NOREGISTRADO: {
client_print(id, print_center, "Tu cuenta ha sido creada satisfactoriamente");
copy(g_contra[id], 31, g_contra2[id]);
Guardar(id);
jTeam(id);
}
}
}
case 1: {
menu_destroy(menu);
client_cmd(id,"messagemode INGRESAR_PASSWORD");
if(g_Estado[id] == LOGUEADO)
client_print(id, print_center, "Ingresa tu nueva PASSWORD");
else
client_print(id, print_center, "Ingresa la PASSWORD para tu nueva cuenta");
}
}
return PLUGIN_HANDLED;
}
public Guardar(id) {
if(!is_user_connected(id)) return;
adv_vault_set_start(g_vault);
adv_vault_set_field(g_vault, g_campo[EXP], kExp[id])
adv_vault_set_field(g_vault, g_campo[NIVEL], kNivel[id])
adv_vault_set_field(g_vault, g_campo[FECHA], g_Fecha[id]);
adv_vault_set_field(g_vault, g_campo[PASSWORD], g_contra[id]);
adv_vault_set_end(g_vault, 0, g_cuenta[id]);
}
public Cargar(id) {
if(!adv_vault_get_prepare(g_vault, _, g_cuenta[id])) {
g_Estado[id] = NOREGISTRADO;
return;
} else {
g_Estado[id] = REGISTRADO;
kExp[id] = adv_vault_get_field(g_vault, g_campo[EXP]);
kNivel[id] = adv_vault_get_field(g_vault, g_campo[NIVEL]);
adv_vault_get_field(g_vault, g_campo[FECHA], g_Fecha[id], charsmax(g_Fecha[]));
adv_vault_get_field(g_vault, g_campo[PASSWORD], g_contra[id], charsmax(g_contra[]));
}
}
public Contra(id) {
read_args(g_contra[id], charsmax(g_contra));
remove_quotes(g_contra[id]);trim(g_contra[id]);
if(equal(g_contra[id],"") || containi(g_contra[id]," ") != -1 ) {
client_print(id, print_center, "Tu password contiene errores");
return 1;
}
switch(g_Estado[id]) {
case NOREGISTRADO: {
client_print(id, print_center, "Confirma tu password para proseguir");
copy(g_contra2[id], 19, g_contra[id]);
Confirmar(id);
}
case REGISTRADO: {
new buffer[40];
adv_vault_get_prepare(g_vault, _, g_cuenta[id]);
adv_vault_get_field(g_vault, g_campo[PASSWORD], buffer, charsmax(buffer));
if(equal(buffer, g_contra[id])) {
Guardar(id);
client_print(id, print_center, "Te logueaste satisfactoriamente en tu cuenta");
jTeam(id);
} else {
ShowLogMenu(id);
client_print(id, print_center, "Password Incorrecta.");
}
}
case LOGUEADO: {
if(g_Can[id]) {
client_print(id, print_center, "Ya cambiaste tu contra en este mapa");
return PLUGIN_HANDLED;
}
client_print(id, print_center, "Confirma tu password para cambiarla...");
copy(g_contra2[id], 19, g_contra[id]);
Confirmar(id);
}
}
return PLUGIN_HANDLED;
}
public message_VGUImenu(msgid, dest, id) {
if(g_Estado[id] != LOGUEADO)
ShowLogMenu(id);
return 1;
}
public jTeam(id){
static teammsg_block, teammsg_block_vgui, restore, vgui;
restore = get_pdata_int(id, 510);
vgui = restore & (1<<0);
if (vgui)
set_pdata_int(id, 510, restore & ~(1<<0));
teammsg_block = get_msg_block(g_MsgShowMenu);
teammsg_block_vgui = get_msg_block(g_MsgVgui);
set_msg_block(g_MsgShowMenu, BLOCK_ONCE);
set_msg_block(g_MsgVgui, BLOCK_ONCE);
engclient_cmd(id, "jointeam", "5");
engclient_cmd(id, "joinclass", "5");
set_msg_block(g_MsgShowMenu, teammsg_block);
set_msg_block(g_MsgVgui, teammsg_block_vgui);
if (vgui)
set_pdata_int(id, 510, restore);
g_Estado[id] = LOGUEADO;
}
Paso 5:
Editamos algunas funciones que ya existen en el zp...
-->
1.- client_putinserver()
PD: al final de la función antes de "}"
Código PHP:
get_user_name(id, g_cuenta[id], 31);
get_time("%c", g_Fecha[id], 31);
g_contra[id][0] = '^0';
g_Estado[id] = NOREGISTRADO;
g_Can[id] = 0;
Cargar(id);
2.- Creamos esta funcion:
Código PHP:
public client_disconnect(id)
Guardar(id);
3.- Editamos esto: fw_ClientUserInfoChanged(id) por fw_ClientUserInfoChanged(id, buffer)
Ahora dentro de la función agregamos:
PD: Al final de la función antes de "}"
Código PHP:
if(is_user_connected(id)) {
if(g_Estado[id] == LOGUEADO) {
static OldName[33];
engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
if(equal(OldName, g_cuenta[id]))
return FMRES_IGNORED;
set_user_info(id, "name", g_cuenta[id]);
client_cmd(id, "setinfo ^"name^" ^"%s^"", g_cuenta[id]);
}
}
return FMRES_IGNORED;
4.- clcmd_changeteam(id)
Reemplazamos el contenido de la funcion por esto:
Código PHP:
static team
team = fm_cs_get_user_team(id)
if(g_Estado[id] != LOGUEADO && team == FM_CS_TEAM_SPECTATOR || g_Estado[id] != LOGUEADO && team == FM_CS_TEAM_UNASSIGNED) {
ShowLogMenu(id)
return PLUGIN_HANDLED;
} else if(g_Estado[id] == LOGUEADO && team == FM_CS_TEAM_SPECTATOR || g_Estado[id] == LOGUEADO && team == FM_CS_TEAM_UNASSIGNED)
return PLUGIN_CONTINUE;
show_menu_game(id)
return PLUGIN_HANDLED;
y por si no pueden (casi imposible solo es C&P)
Les dejo el sma...
Descargar AMXX / zombie_plague40.sma (Tamaño: 353.39 KB / Descargas: 431)