03/06/2020, 01:16 AM
Buenas gente, les dejo el fix del Mix Maker v10.0 del "Keys and value can't be null"(creo que es).
Bueno, esto es información totalmente educativa y sin fines malignos
Explicación
Bueno, ahora que sabemos como funciona, vamos a la solución.
En nuestro Mix Maker v10.0 buscaremos la siguiente función
Mix maker default
Bueno, como ven en el for que manda todos a spec, chequea is_user_connected pero jamás chequea si esta vivo el player.
Ahora el exploit como explique antes jamás elige el model por lo tanto jamás esta vivo!!.
Entonces, vuelve a mandarlo spec porque no chequea si esta vivo o no. Ahí esta la falla de programación. Si chequea que esta vivo, lo manda a spec, si no, va a seguir en el mismo menú de clases y cuando quiera conectarse, se conectara normal..
Mix maker fix
Bueno, esto fue lo que estuvimos probando, así que espero que lo metan en su mix maker e intenten hacer de esta información algo bueno para que dejen de matar el cs. Ahora sí, los amooo <3.
Bueno, esto es información totalmente educativa y sin fines malignos
Explicación
1- El jugador juan entra al servidor y selecciona el "Team Join Class Menú"(selección de models)
2- El jugador juan se queda en ese menú, por ende, jamás elige la clase de model que usará.
3- El administrador mengano esta listo para mandar el mix, por ende manda todos a spec
4- El jugador juan elige el model que antes jamás eligió, entonces el model queda en "" y hace crashear el servidor.
2- El jugador juan se queda en ese menú, por ende, jamás elige la clase de model que usará.
3- El administrador mengano esta listo para mandar el mix, por ende manda todos a spec
4- El jugador juan elige el model que antes jamás eligió, entonces el model queda en "" y hace crashear el servidor.
Bueno, ahora que sabemos como funciona, vamos a la solución.
En nuestro Mix Maker v10.0 buscaremos la siguiente función
Mix maker default
Código PHP:
public ExtraStuff_Handler(id, Menu, item) {
if (item == MENU_EXIT) {
if (is_user_connected(id))
OpenMixMenu(id)
return PLUGIN_HANDLED
}
new iData[6]
new iName[64]
new Access
new Callback
menu_item_getinfo(Menu, item, Access, iData, 5, iName, 63, Callback)
new Key = str_to_num(iData)
switch (Key) {
case 1:
{
set_hudmessage(64, 64, 64, -1.0, 0.21, 1, 0.2, 5.0, 0.01, 0.1)
show_hudmessage(0, "Todos para Spec")
for (new i = 1; i <= MaxPlayers; i++) {
if (is_user_connected(i)) //Bien acá esta el error. Explicare cual es.
{
set_pev(i, pev_deadflag, DEAD_DEAD)
cs_set_user_team(i, CS_TEAM_SPECTATOR)
BlockClCorpse[i] = true
}
}
if (is_user_connected(id))
Extras(id)
}
case 2:
{
if (is_user_connected(id))
KickMenu(id)
}
case 3:
{
if (is_user_connected(id))
BanMenu(id)
}
}
menu_destroy(Menu)
return PLUGIN_HANDLED
}
Bueno, como ven en el for que manda todos a spec, chequea is_user_connected pero jamás chequea si esta vivo el player.
Ahora el exploit como explique antes jamás elige el model por lo tanto jamás esta vivo!!.
Entonces, vuelve a mandarlo spec porque no chequea si esta vivo o no. Ahí esta la falla de programación. Si chequea que esta vivo, lo manda a spec, si no, va a seguir en el mismo menú de clases y cuando quiera conectarse, se conectara normal..
Mix maker fix
Código PHP:
public ExtraStuff_Handler(id,Menu,item)
{
if(item == MENU_EXIT)
{
if(is_user_connected(id))
OpenMixMenu(id)
return PLUGIN_HANDLED
}
new iData[6]
new iName[64]
new Access
new Callback
menu_item_getinfo(Menu,item,Access,iData,5,iName,63,Callback)
new Key = str_to_num(iData)
switch(Key)
{
case 1 :
{
set_hudmessage(64,64,64,-1.0,0.21,1,0.2,5.0,0.01,0.1)
show_hudmessage(0,"Todos para Spec")
for(new i = 1;i <= MaxPlayers;i++)
{
if(is_user_alive(i)) //si esta conectado y vivo!!! lo manda a spec.
{
set_pev(i,pev_deadflag,DEAD_DEAD)
cs_set_user_team(i,CS_TEAM_SPECTATOR)
BlockClCorpse[i] = true
}
}
if(is_user_connected(id))
Extras(id)
}
case 2 :
{
if(is_user_connected(id))
KickMenu(id)
}
case 3 :
{
if(is_user_connected(id))
BanMenu(id)
}
}
menu_destroy(Menu)
return PLUGIN_HANDLED
}