Raised This Month: $51 Target: $400
 12% 

[AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu


  
 
 
Thread Tools Display Modes
Author Message
el999gonzalo
BANNED
Join Date: Aug 2012
Old 09-09-2012 , 14:22   [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#1

Quise ingresar el sistema de cuentas de Manu a mi zp , el cual es este

PHP Code:
/* Voy a decir que:

- Hice esto porque vi, que hay personas que usan mi sistema de cuentas y que no saben sql, entonces prefiero hacerlo bien.

- No lo hice pensando mucho, optimizaciones hay... las voy a ir encontrando o me las van a ir diciendo...

- Sobre las optimizaciones, ami no me gusto mucho como hice los handlers de los menues ni el cambiar de nick, tirenle una mirada...

- MEJORAS CONSTRUCTIVAS, NO ACEPTO BARDOS EN ESTE THREAD

- Por ultimo, si le cambian el autor... son la verga :D

Changelog:

Version 2.0

- Todo el code optimizado y mas legible :|

- No mas FAKEMETA :)

Version 2.0.1

- Pequenio error en el info changed, arreglado

- String en el menu arreglado (Registado -> Registrado) :P

Version 2.0.2

- Nueva manera de hookeo para cambiar de equipo

- Pequenios fixeos u_u

To-do List:

- Encontrar bugs y optimizaciones (8) */
#include <amxmodx>
#include <fvault>

#define Hook_Chooseteam

/*==================================================================================================
  * GLOBAL VARS & ENUMS *
==================================================================================================*/
enum
{
    
PASSWORD 0,
    
NAME,
    
    
MAX_CHANGE
}

enum
{
    
UNREGISTERED 0,
    
REGISTERED,
    
LOGGED,
    
    
MAX_STATUS
}

new 
g_TempPassword[33][32],g_Password[33][32],g_Date[33][32],g_Status[33],gMsg,g_AlredyChanged[33][MAX_CHANGE],g_CanChange

new const g_MsgArgs[][] = { "#Team_Select","#Team_Select_Spect","#IG_Team_Select","#IG_Team_Select_Spect" }

new const 
g_Vault[] = "_cuentas_"

new const g_szStatus[MAX_STATUS][] = { "No registrado","Registrado","Logueado" }

/*==================================================================================================
  * BEGINNING OF PLUGIN *
==================================================================================================*/
public plugin_init()
{
    
register_plugin("Sistema de Cuentas","2.0.1","Manu")
    
    
register_message(get_user_msgid("ShowMenu"),"message_showmenu")
    
register_message(get_user_msgid("VGUIMenu"),"message_vguimenu")
    
    
register_clcmd("INGRESAR_PASSWORD","cmd_password")
    
register_clcmd("INGRESAR_NICK","cmd_nick")
    
    
#if defined Hook_Chooseteam
    
register_clcmd("chooseteam","cmd_block")
    
register_clcmd("jointeam","cmd_block")
    
#endif
    
    
gMsg CreateHudSyncObj()
}

/*==================================================================================================
  * CLIENT_ FUNCS *
==================================================================================================*/

public client_putinserver(id)
{
    
g_Password[id][0] = '^0';g_Status[id] = UNREGISTERED
    
    g_AlredyChanged
[id][NAME] = 0;g_AlredyChanged[id][PASSWORD] = 0
    
    fvault_load
(id)
}

public 
client_infochanged(id)
{
    static 
szName[32],szOldName[32]
    
    
get_user_name(id,szOldName,31);get_user_info(id,"name",szName,31)
    
    if(
equal(szOldName,szName) || g_CanChange)
        return 
PLUGIN_CONTINUE
        
    client_cmd
(id,"name %s",szName);set_user_info(id,"name",szName)
    
    return 
PLUGIN_HANDLED
}

/*==================================================================================================
  * CMDs *
==================================================================================================*/

public cmd_password(id)
{
    static 
szName[32],szArgs[64];read_args(szArgs,63)
    
remove_quotes(szArgs);trim(szArgs)
    
    
get_user_name(id,szName,31)
    
    if(
containi(szArgs," ") != -|| equal(szArgs,"")) {
        
show_msg(id,"Tu password contiene errores...")
        return 
PLUGIN_HANDLED
    
}
    switch(
g_Status[id])
    {
        case 
UNREGISTERED: {
            
show_msg(id,"Confirma tu password para proseguir...");copy(g_TempPassword[id],31,szArgs)
            
show_menu_confirm(id)
        }
        case 
REGISTERED: {
            if(!
equal(g_Password[id],szArgs)) {
                
show_msg(id,"La password ingresada no coincide con la de la cuenta...")
                return 
PLUGIN_HANDLED
            
}
            
            
g_Status[id] = LOGGED;fvault_save(id)// To save the date
            
show_msg(id,"Te logueaste satisfactoriamente en tu cuenta...");change_team(id)
        }
        case 
LOGGED: {
            if(
g_AlredyChanged[id][PASSWORD]) {
                
show_msg(id,"Ya cambiaste tu password en este mapa...")
                return 
PLUGIN_HANDLED
            
}
            
            
show_msg(id,"Confirma tu password para cambiarla...");copy(g_TempPassword[id],31,szArgs)
            
show_menu_confirm(id)
        }
    }
    
    return 
PLUGIN_HANDLED
}

public 
cmd_nick(id)
{
    if(
g_Status[id] != LOGGED || g_AlredyChanged[id][NAME])
        return 
PLUGIN_HANDLED
        
    
static args[32];read_args(args,31)
    
remove_quotes(args);trim(args)
    
    if(
containi(args," ") != -|| !args[1])
        return 
PLUGIN_HANDLED
    
    
if(change_name(id,args))
        
show_msg(id,"Tu nombre se ha cambiado con exito!")
    
    return 
PLUGIN_HANDLED
}

/*==================================================================================================
  * BLOCK CHANGE TEAM *
==================================================================================================*/

public message_showmenu(msgid,dest,id)
{
    static 
szMsg[16];get_msg_arg_string(4,szMsg,15)
    
    for(new 
i;sizeof g_MsgArgs;i++)
    {
        if(
equal(szMsg,g_MsgArgs[i]))
        {
            
show_menu_block(id)
            return 
PLUGIN_HANDLED
        
}
    }
    return 
PLUGIN_CONTINUE
}

public 
message_vguimenu(msgid,dest,id)
{
    if(
get_msg_arg_int(1) != 2)
        return 
PLUGIN_CONTINUE
        
    show_menu_block
(id)
    
    return 
PLUGIN_HANDLED
}

#if defined Hook_Chooseteam
public cmd_block(id) {
    
show_menu_block(id)
    return 
PLUGIN_HANDLED
}
#endif

/*==================================================================================================
  * MENUs *
==================================================================================================*/

public show_menu_block(id)
{
    static 
szMenu[128],szName[32]
    
get_user_name(id,szName,31);formatex(szMenu,127,"\ySistema de CUENTAS por \rMANU^n\wESTADO ACTUAL: \y[ \r%s \y]\w^n^n%s%s",g_szStatus[g_Status[id]],g_Status[id] == LOGGED "Ultima vez que entraste \r":(g_Status[id] == REGISTERED "\yEstas registrado como \r":""),g_Status[id] == LOGGED g_Date[id]:(g_Status[id] == REGISTERED szName:""))
    
    new 
Menu menu_create(szMenu,"handler_menu_block")
    
    
formatex(szMenu,63,"%sLoguear cuenta",g_Status[id] != REGISTERED "\d":"\w")
    
menu_additem(Menu,szMenu,"1",0)
    
    
formatex(szMenu,63,"%sRegistrar cuenta^n",g_Status[id] != UNREGISTERED "\d":"\w")
    
menu_additem(Menu,szMenu,"2",0)
    
    
formatex(szMenu,63,"%s%sCambiar PASSWORD",g_Status[id] != LOGGED "\d":"\w",g_AlredyChanged[id][PASSWORD] ? "\d":"")
    
menu_additem(Menu,szMenu,"3",0)
    
    
formatex(szMenu,63,"%s%sCambiar NICK^n",g_Status[id] != LOGGED "\d":"\w",g_AlredyChanged[id][NAME] ? "\d":"")
    
menu_additem(Menu,szMenu,"4",0)
    
    
menu_additem(Menu,"Informacion","5",0)
    
    
menu_setprop(Menu,MPROP_EXITNAME,"Salir")
    
    
menu_display(id,Menu,0)
}

public 
handler_menu_block(id,menu,item)
{
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    switch(
item)
    {
        case 
0: {
            if(
g_Status[id] != REGISTERED)
            {
                
show_msg(id,"No puedes elegir esta opcion...")
                return 
PLUGIN_HANDLED
            
}
            
            
show_msg(id,"Ingresa tu PASSWORD para entrar a tu cuenta...");client_cmd(id,"messagemode INGRESAR_PASSWORD")
        }
        case 
1: {
            if(
g_Status[id] != UNREGISTERED)
            {
                
show_msg(id,"No puedes elegir esta opcion...")
                return 
PLUGIN_HANDLED
            
}
            
            
show_msg(id,"Ingresa una PASSWORD para crear una cuenta...");client_cmd(id,"messagemode INGRESAR_PASSWORD")
        }
        case 
2: {
            if(
g_Status[id] != LOGGED || g_AlredyChanged[id][PASSWORD])
            {
                
show_msg(id,"No estas logueado o ya cambiaste tu password durante el mapa...")
                return 
PLUGIN_HANDLED
            
}
            
            
show_msg(id,"Ingresa tu nueva PASSWORD...");client_cmd(id,"messagemode INGRESAR_PASSWORD")
        }
        case 
3: {
            if(
g_Status[id] != LOGGED || g_AlredyChanged[id][NAME])
            {
                
show_msg(id,"No estas logueado o ya cambiaste tu nick durante el mapa...")
                return 
PLUGIN_HANDLED
            
}
            
            
show_msg(id,"Ingresa tu nuevo NICK...");client_cmd(id,"messagemode INGRESAR_NICK")
        }
        case 
4: {
            
set_hudmessage(02550, -1.0, -1.024.07.0)
            
ShowSyncHudMsg(id,gMsg,"Este sistema de cuentas fue creado por^nManu para los usuarios de AlliedModders^nConsiste en poder registrar un nick para evitar^nel robo del mismo, protegiendolo asi con password")
        }
    }
    
    return 
PLUGIN_HANDLED
}

public 
show_menu_confirm(id)
{
    static 
szTitle[128];formatex(szTitle,127,"\w%sLa password sera \r%s^n^n\yConfirmar?",g_Status[id] == LOGGED "Estas cambiando tu password^n":"Estas seteando tu password^n",g_TempPassword[id])
    
    new 
Menu menu_create(szTitle,"handler_menu_confirm")
    
    
menu_additem(Menu,"\rSi\w, confirmar","1",0)
    
menu_additem(Menu,"\rNo\w, deseo reescribirla","2",0)
    
    
menu_setprop(Menu,MPROP_EXIT,MEXIT_NEVER)
    
    
menu_display(id,Menu,0)
}

public 
handler_menu_confirm(id,menu,item)
{
    switch(
item)
    {
        case 
0: {
            switch(
g_Status[id])
            {
                case 
LOGGED: {
                    
show_msg(id,"Tu password ha sido cambiada satisfactoiramente")
                    
                    
copy(g_Password[id],31,g_TempPassword[id]);fvault_save(id)
                    
                    
g_AlredyChanged[id][PASSWORD] = 1
                
}
                case 
UNREGISTERED: {    
                    
show_msg(id,"Tu cuenta ha sido creada satisfactoriamente")
                    
                    
copy(g_Password[id],31,g_TempPassword[id]);fvault_save(id)
                    
                    
g_Status[id] = LOGGED;change_team(id)
                }
            }
        }
        case 
1: {
            
menu_destroy(menu)
            
            
client_cmd(id,"messagemode INGRESAR_PASSWORD")
            
            
g_Status[id] == LOGGED show_msg(id,"Ingresa tu nueva PASSWORD..."):show_msg(id,"Ingresa la PASSWORD para tu nueva cuenta...")
        }
    }
    
    return 
PLUGIN_HANDLED
}

/*==================================================================================================
  * LOAD | SAVE *
==================================================================================================*/

public fvault_load(id)
{
    static 
szName[32],szData[64];get_user_name(id,szName,31)
    
    if(!
fvault_get_data(g_Vault,szName,szData,63))
        
g_Status[id] = UNREGISTERED
    
else {
        
strbreak(szData,g_Password[id],31,g_Date[id],31)
        
        
g_Status[id] = REGISTERED
    
}
}

public 
fvault_save(id)
{
    static 
szName[32],szData[64];get_user_name(id,szName,31)
    
    
get_time("%c",g_Date[id],31);formatex(szData,63,"%s %s",g_Password[id],g_Date[id])
    
    
fvault_set_data(g_Vault,szName,szData)
}

/*==================================================================================================
  * STOCKS *
==================================================================================================*/
stock change_name(const id, const string[])
{
    static 
szName[32],szData[64];get_user_name(id,szName,31)
    
    if(
equal(szName,string))
        return 
0
        
    
if(fvault_get_data(g_Vault,string,szData,63))
        return 
0
    
    g_CanChange 
1;set_user_info(id,"name",string)
    
g_CanChange 0
    
    fvault_remove_key
(g_Vault,szName)
    
    
set_task(1.0,"fvault_save",id)
    
    
g_AlredyChanged[id][NAME] = 1
    
    
return 1
}

stock change_team(const id)
{
    
engclient_cmd(id,"jointeam","5")
    
    
engclient_cmd(id,"joinclass","5")
}

stock show_msg(const id, const string[])
{
    
set_hudmessage(025500.150.1012.010.0)
    
ShowSyncHudMsg(id,gMsg,"%s",string)

Pero el problema es que al logear , me entra a un team , todo perfecto , pero cuando preciono la M para poder abrir el menu del zp , me abre el menu de logueo , alguna manera de arreglarlo ?
el999gonzalo is offline
GalaxyA
BANNED
Join Date: Sep 2012
Location: Noob Member
Old 09-09-2012 , 14:40   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#2

register_clcmd("chooseteam","cmd_block")
register_clcmd("jointeam","cmd_block")
cambialos a tu gusto
GalaxyA is offline
Send a message via MSN to GalaxyA
el999gonzalo
BANNED
Join Date: Aug 2012
Old 09-09-2012 , 14:41   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#3

de hacer eso , podran entrar sin necesidad de logearse
el999gonzalo is offline
Manu127
Veteran Member
Join Date: Jul 2010
Location: Argentina
Old 09-09-2012 , 14:47   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#4

El creador contestando, que cosa mas groxa (?

No necesariamente entran sin necesidad de loguearse, ya que estan hookeado los message de ingresos por menues de team.

El hook es mas para cuando vos entres, e intentes cambiar tu name o tu password. Tendrias que mantener bloqueado el jointeam igual... para que no entren poniendo jointeam en consola.

De todas maneras, mi sistema tiene un pequeñito "bug" por decirlo asi, que no checkea los que tienen el oldstyle menu. Igual, lo voy a arreglar a la brevedad... no se si hago otro, pasa que como ya esta el de nel en SQL es medio al pedo
__________________
Manu127 is offline
Send a message via MSN to Manu127 Send a message via Skype™ to Manu127
el999gonzalo
BANNED
Join Date: Aug 2012
Old 09-09-2012 , 14:58   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#5

Quote:
Originally Posted by Manu127 View Post
El creador contestando, que cosa mas groxa (?

No necesariamente entran sin necesidad de loguearse, ya que estan hookeado los message de ingresos por menues de team.

El hook es mas para cuando vos entres, e intentes cambiar tu name o tu password. Tendrias que mantener bloqueado el jointeam igual... para que no entren poniendo jointeam en consola.

De todas maneras, mi sistema tiene un pequeñito "bug" por decirlo asi, que no checkea los que tienen el oldstyle menu. Igual, lo voy a arreglar a la brevedad... no se si hago otro, pasa que como ya esta el de nel en SQL es medio al pedo
OFF : Si , Jodidamente grosa .-.

Entonces borrare el define hook_team

Last edited by el999gonzalo; 09-09-2012 at 15:03. Reason: di una respuesta jodidamente estupida hace un rato
el999gonzalo is offline
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 09-09-2012 , 15:04   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#6

oye eso del old stile le puse un task y me funciona, en cuanto a lo que pide checkea si es spectador.
suponiendo que en tu zp no se puedan pasar a spect
BlackFur is offline
Manu127
Veteran Member
Join Date: Jul 2010
Location: Argentina
Old 09-09-2012 , 15:44   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#7

Quote:
Originally Posted by BlackFur View Post
oye eso del old stile le puse un task y me funciona, en cuanto a lo que pide checkea si es spectador.
suponiendo que en tu zp no se puedan pasar a spect
Si lo del oldstyle me habia hecho la vida imposible y por eso nunca lo arregle

Ahora tngo varios metodos para hookear los 2 (?
__________________
Manu127 is offline
Send a message via MSN to Manu127 Send a message via Skype™ to Manu127
el999gonzalo
BANNED
Join Date: Aug 2012
Old 09-09-2012 , 16:11   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#8

Me ha funcionado perfecto gracias

OFF:

Quote:
Originally Posted by Manu127 View Post
Si lo del oldstyle me habia hecho la vida imposible y por eso nunca lo arregle

Ahora tngo varios metodos para hookear los 2 (?
Entonces ya sabes que en tu nuevo sistema de cuentas deveras poner credits

BlackFur el999gonzalo GalaxyA

xDDDD
el999gonzalo is offline
her0p
Senior Member
Join Date: Nov 2011
Old 09-09-2012 , 19:04   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#9

Quote:
Originally Posted by BlackFur View Post
oye eso del old stile le puse un task y me funciona, en cuanto a lo que pide checkea si es spectador.
suponiendo que en tu zp no se puedan pasar a spect
Me podías decir como has echo lo del task a ver so lo puedo implementar yo
her0p is offline
BlackFur
BANNED
Join Date: Apr 2012
Location: RCL
Old 09-09-2012 , 19:14   Re: [AYUDA] Sistema De Cuentas De Manu , Bloquea El ZpMenu
#10

set_task( 0.1 , "show_menu_block" , id ) en client_putinserver
BlackFur is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:27.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode