Enviar respuesta 
Forma correcta de forzar jointeam + Galileo Fix
Autor Mensaje
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,961
Registro en: Oct 2013
Reputación: 36
Mensaje: #1
Forma correcta de forzar jointeam + Galileo Fix
Bueno, hace ya tiempo me pasó que utilizaba el plugin galileo (https://forums.alliedmods.net/showthread.php?t=77391) en un servidor y cuando llegaba la hora del vote, solo le salía el menú a algunos pocos.

Así que decidí investigarlo y me dí cuenta de que solo salía el menú a aquellos que antes del vote habían abierto algún menú cualquiera.

Lo primero fue ver en el plugin galileo porque pasaba esto y vi estas líneas:
Código PHP:
get_user_menu(idmenuidmenukeys);
if (
menuid == || menuid == g_menuChooseMap)
{
    
show_menu(idallKeysmenuDirtymax(1g_voteDuration), MENU_CHOOSEMAP);


que hace esto? simplemente get_user_menu devuelve el valor del menú que estás viendo, si no estás viendo ninguno es 0.
vale, como vemos en el chequeo, si te devuelve 0 o te devuelve el mismo menú del vote, se vuelve a mostrar.

entonces, lo que hice fue un simple plugin en el cual me decía si tenía un menú abierto o no utilizando get_user_menu. para mi sorpresa me encontré con que me decía que si, a pesar de que no tuviera ninguno abierto claro, y esto SOLO me pasaba después de ingresar al juego a través de un sistema de cuentas.
y también me di cuenta de que si yo abría un menu cualquiera, como el de admin, al cerrarlo me decía que no tenía ningún menú abierto.

viendo esto: http://www.amxmodx.org/funcwiki.php?go=func&id=1389
dije, mm.. asi que un VGUI menu tambien lo detecta get_user_menu, y efectivamente chequeando que el resultado de get_user_menu fuera negativo con el plugin que hice, me di cuenta que la culpa era de un VGUI menu que se me quedaba abierto después de "loguearme" en el servidor.

Pues vale, ya está, esto es culpa de forzar el jointeam de esta forma:
Código PHP:
static teammsg_blockteammsg_block_vgui
teammsg_block 
get_msg_block(g_msgShowMenu)
teammsg_block_vgui get_msg_block(g_msgVGUIMenu)
set_msg_block(g_msgShowMenuBLOCK_ONCE)
set_msg_block(g_msgVGUIMenuBLOCK_ONCE)
engclient_cmd(id"jointeam""5")
engclient_cmd(id"joinclass""5")
set_msg_block(g_msgShowMenuteammsg_block)
set_msg_block(g_msgVGUIMenuteammsg_block_vgui

esa es la forma correcta de forzar jointeam sin que te aparezca ningún menú de elegir apariencia ni nada del cs default.

vale, pues el problema era ahí, utilizando esa forma, se quedaba el offset m_iVGUI activo, así que:

Código PHP:
static teammsg_blockteammsg_block_vguirestorevgui
restore 
get_pdata_int(id510// m_iVGUI = 510
vgui restore & (1<<0)
if (
vguiset_pdata_int(id510restore & ~(1<<0))
teammsg_block get_msg_block(g_msgShowMenu)
teammsg_block_vgui get_msg_block(g_msgVGUIMenu)
set_msg_block(g_msgShowMenuBLOCK_ONCE)
set_msg_block(g_msgVGUIMenuBLOCK_ONCE)
engclient_cmd(id"jointeam""5")
engclient_cmd(id"joinclass""5")
set_msg_block(g_msgShowMenuteammsg_block)
set_msg_block(g_msgVGUIMenuteammsg_block_vgui)
if (
vguiset_pdata_int(id510restore

de esta forma, evitamos que el offset se quede activo y get_user_menu nos devuelva true cuando no estamos con ningún menú.

aclaro que las variables globales creadas son en plugin_init:
Código PHP:
g_msgShowMenu get_user_msgid("ShowMenu")
g_msgVGUIMenu get_user_msgid("VGUIMenu"

Esto fue todo, gracias Whatever

pd: la forma de "desactivar" ese offset la saqué del jailbreak de joropito
pd2: este error, obviamente, también se puede comprobar en otros plugins que utilicen get_user_menu

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
(Este mensaje fue modificado por última vez en: 16/03/2015 08:07 PM por RauliTop.)
28/03/2014 11:36 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


Plugin developer Trebol purpura 1k
Mensajes: 1,159
Registro en: Oct 2013
Reputación: 18
Mensaje: #2
RE: ¿Galileo no muestra menu? Solucion!
o.O interesante

futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
28/03/2014 02:26 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
3mcy daimon't Sin conexión
Miembro


Mensajes: 219
Registro en: Nov 2013
Reputación: 1
Mensaje: #3
RE: ¿Galileo no muestra menu? (Forma correcta de forzar jointeam)
Es algo parecido a cuando abres un menu que no se puede cerrar con MEXIT_NEVER y escribes algun comando en say para abrir otro menu este no se abre...


PD: Buen aporte

Sistema de Logros v2.0 + Guardado

He vuelto... esta vez con mas ganas de ayudar que nunca!
28/03/2014 07:22 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
xPecie Sin conexión
Miembro Destacado


1k
Mensajes: 1,048
Registro en: Oct 2013
Reputación: 4
Mensaje: #4
RE: ¿Galileo no muestra menu? (Forma correcta de forzar jointeam)
Gracias por tu tutorial!
(Este mensaje fue modificado por última vez en: 05/04/2014 03:01 PM por xPecie.)
05/04/2014 02:59 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
NikKOo31 Sin conexión
Miembro


Plugin developer
Mensajes: 188
Registro en: Jan 2014
Reputación: 6
Mensaje: #5
RE: Forma correcta de forzar jointeam + Galileo Fix
Tal vez parezca una pregunta tonta pero, porqe usas 4 var estáticas? Whatever

Whatdone
30/09/2014 07:59 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,961
Registro en: Oct 2013
Reputación: 36
Mensaje: #6
RE: Forma correcta de forzar jointeam + Galileo Fix
(30/09/2014 07:59 PM)NikKOo31 escribió:  Tal vez parezca una pregunta tonta pero, porqe usas 4 var estáticas? Whatever

te refieres a por qué hay 4 o a por qué son estáticas?

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
01/10/2014 03:24 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
NikKOo31 Sin conexión
Miembro


Plugin developer
Mensajes: 188
Registro en: Jan 2014
Reputación: 6
Mensaje: #7
RE: Forma correcta de forzar jointeam + Galileo Fix
(01/10/2014 03:24 AM)RauliTop escribió:  te refieres a por qué hay 4 o a por qué son estáticas?

Lo segundo ._.
Es necesario qe sean estáticas? ^^

Whatdone
01/10/2014 12:13 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
ivan Sin conexión
Miembro Sr.


Mensajes: 628
Registro en: Oct 2013
Reputación: 7
Mensaje: #8
RE: Forma correcta de forzar jointeam + Galileo Fix
GRABO RAULITOP TE VOTO GRACIAS RAUL ._.
01/10/2014 12:26 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,961
Registro en: Oct 2013
Reputación: 36
Mensaje: #9
RE: Forma correcta de forzar jointeam + Galileo Fix
(01/10/2014 12:13 PM)NikKOo31 escribió:  
(01/10/2014 03:24 AM)RauliTop escribió:  te refieres a por qué hay 4 o a por qué son estáticas?

Lo segundo ._.
Es necesario qe sean estáticas? ^^

no, pero al ser una función que se va a llamar cuando alguien se loguea (es decir, bastantes veces), pues es conveniente que sean estáticas ya que son más rápidas

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
01/10/2014 01:36 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
NikKOo31 Sin conexión
Miembro


Plugin developer
Mensajes: 188
Registro en: Jan 2014
Reputación: 6
Mensaje: #10
RE: Forma correcta de forzar jointeam + Galileo Fix
Ya que estamos otra pregunta Whatever

Que estoy haciendo mal aqui?
Código PHP:
public ForzarJointeam(params[], id)
{
    
server_print("forzarjointeam t:%d"params[0])
    static 
teammsg_blockteammsg_block_vguirestorevguiszteam[3], szclass[3], team
    team 
params[0]
    
restore get_pdata_int(id510// m_iVGUI = 510
    
vgui restore & (1<<0)
    if(
vgui)
    {
        
set_pdata_int(id510restore & ~(1<<0))
    }

    
teammsg_block get_msg_block(g_msgShowMenu)
    
teammsg_block_vgui get_msg_block(g_msgVGUIMenu)
    
set_msg_block(g_msgShowMenuBLOCK_ONCE)
    
set_msg_block(g_msgVGUIMenuBLOCK_ONCE)
    
szteam[0] = team '0'
    
szteam[1] = 0
    szclass
[0] = '5'
    
szclass[1] = 0
    engclient_cmd
(id"jointeam"szteam)
    if(
team != 6)
    {
        
engclient_cmd(id"joinclass"szclass)
    }
    
set_msg_block(g_msgShowMenuteammsg_block)
    
set_msg_block(g_msgVGUIMenuteammsg_block_vgui)
    if(
vgui)
    {
        
set_pdata_int(id510restore
    }


La idea principal es enviar a spec si la ronda ya esta empezada. Me bloquea el menu y en la consola sale:
Cita:forzarjointeam t:6

Pero me quedo en unassigned. Ya probe con y sin task y nada Poker face

Whatdone
01/10/2014 05:47 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS