Skip to content

VXCore v0.10.25

Choose a tag to compare

@Reysel1 Reysel1 released this 12 Sep 14:20
· 4 commits to main since this release

VXCore v0.10.25

Los jugadores no podían entrar al servidor

Síntoma: el servidor arranca perfecto, se ve en la lista, responde — y al
conectar el cliente muere con

[json.exception.type_error.305] cannot use operator[] with a string argument with number

justo en Handshaking with server.... Un error que no menciona ni el binario ni
el build, a kilómetros de su causa.

La causa era nuestra. VXCore decidía qué ejecutable lanzar mirando el
sv_enforceGameBuild del server.cfg, y la comprobación era esta:

/sv_enforceGameBuild\s+(372|\d{4})/

O sea: el build 372 o cualquier número de cuatro cifras se tomaban por GTA V
Enhanced. El razonamiento escrito al lado era «que un Legacy pida 3788 no tiene
sentido, ese build no existe para Legacy». Sí existe: 3788 es un build de
Legacy, como 1604, 2372, 2802, 3095, 3258, 3407 o 3570. Las dos numeraciones
no se solapan — Legacy lleva años en cuatro cifras y Enhanced empezó de cero y
va por tres.

Resultado: a cualquier servidor Legacy moderno que fijara su build se le
arrancaba el binario de Enhanced. El servidor levantaba sin quejarse y eran
los jugadores los que no entraban.

Lo que cambia

  • La comprobación acepta ahora sólo builds de tres cifras o menos como
    Enhanced. Con un test de regresión que recorre 1604, 2372, 2802, 3095, 3258,
    3407, 3570 y 3788 y exige que todos elijan FXServer.exe.
  • El cfg manda sobre el marcador. Si el server.cfg fija un build de cuatro
    cifras, el servidor es Legacy aunque el marcador .vxcore-game diga Enhanced:
    el marcador dice con qué se creó, el cfg dice con qué puede arrancar hoy. Quien
    pasó su servidor a Legacy y se dejó el marcador viejo ya no acaba con el
    binario equivocado.

Además: dos fallos en la conexión de jugadores

En sv_agent.lua, el recurso in-game:

  • Fantasmas en «conectándose». Los dos atajos del playerConnecting —el de
    la caché de whitelist y el del agente caído— dejaban entrar al jugador pero
    nunca mandaban el aviso de fin, así que en el panel seguía apareciendo como que
    estaba cargando hasta que la limpieza automática lo tiraba minuto y medio
    después. El staff veía gente conectándose que ya estaba dentro.
  • deferrals.done(nil) no es deferrals.done(). Quien cuenta los argumentos
    al otro lado los distingue, y de ahí salen los rechazos con motivo vacío. Ahora
    todas las salidas pasan por el mismo sitio, con su rama explícita.

Instalación: la app se auto-actualiza en el próximo chequeo. Tras actualizar,
comprueba en la consola del agente que la línea de arranque dice
FXServer.exe y no cfx-server.exe.