FlamethrowerReconnectFix
Corrige el bug de BetterArmory donde el lanzallamas deja de disparar fuego / gastar munición tras morir y reconectar al servidor.FlamethrowerReconnectFix
Parche no oficial para BetterArmory (com.y4ngz.betterarmory) que corrige
dos bugs relacionados con reconectarte a un servidor (con o sin morir antes,
seas host o cliente):
- El lanzallamas deja de disparar fuego y de gastar munición (la animación sigue funcionando, pero no pasa nada más).
- Un spam continuo de
NullReferenceExceptionque rompe la animación de armas en primera persona por el resto de la sesión.
Causa del bug 1 (lanzallamas)
FlamethrowerStreamDriver.RegisterNetworkHandlers() registra sus 5 handlers
de red una sola vez, comparando NetworkManager.Singleton contra un campo
estático cacheado. Ese NetworkManager sobrevive a la reconexión (mismo
objeto), pero Unity Netcode sí crea un CustomMessagingManager nuevo en cada
StartClient(). Como la comparación no detecta ese cambio, los handlers
quedan "colgados" del CustomMessagingManager viejo y el lanzallamas deja de
funcionar en red.
Fix: detectamos cuándo aparece un CustomMessagingManager nuevo y
forzamos el re-registro limpiando el campo estático cacheado de BetterArmory.
Causa del bug 2 (animación de armas rota)
Y4NGZWeaponItem.get_Shotgun() hace GetComponent<ShotgunItem>() sobre un
arma cuyo objeto de red ya fue destruido tras la desconexión. En vez de
fallar con gracia, esto lanza una NullReferenceException real. Como
IsAlive() (que debía detectar "esta arma ya no es válida") depende de este
getter, nunca llega a devolver false: el juego queda crasheando ese chequeo
cada frame para siempre.
Este crash empieza apenas te desconectás, antes de que exista una sesión nueva a la que "engancharse" — por eso detectar la reconexión (como en el bug
- llega tarde acá.
Fix: en vez de adivinar el momento de la reconexión, blindamos
directamente el punto exacto del crash con un Harmony Finalizer: si
get_Shotgun() explota, atrapamos la excepción y devolvemos null de forma
segura. Con eso IsAlive() vuelve a funcionar como BetterArmory ya esperaba
(arma vieja → "no está viva" → se limpia sola), sin importar cuándo pasó la
desconexión ni si sos host o cliente.
Ninguno de los dos fixes modifica el DLL original de BetterArmory — todo pasa en tiempo de ejecución vía Harmony.
Cómo compilarlo
Necesitas Visual Studio, VS Code + C# Dev Kit, o Rider, con el SDK de .NET instalado.
-
Abre
FlamethrowerReconnectFix.csprojy edita la línea:<LethalCompanyDir>C:\Program Files (x86)\Steam\steamapps\common\Lethal Company</LethalCompanyDir>poniendo la ruta real donde tienes instalado el juego (clic derecho en Lethal Company en Steam → Administrar → Explorar archivos locales).
-
Compila en modo Release:
dotnet build -c Release(o simplemente "Build" desde tu IDE).
-
Esto genera
bin\Release\net472\FlamethrowerReconnectFix.dll.
Cómo instalarlo
Copia FlamethrowerReconnectFix.dll a:
<Lethal Company>\BepInEx\plugins\FlamethrowerReconnectFix\FlamethrowerReconnectFix.dll
Si usas r2modman/Thunderstore Mod Manager, puedes en vez de eso empaquetar
esta carpeta como mod local (con el manifest.json incluido) e importarla ahí,
para que se instale junto a tu perfil de 67 mods sin tocar nada a mano.
Debe cargar después de BetterArmory (el BepInDependency ya se encarga
de eso automáticamente).
Cómo confirmar que funciona
En el log de BepInEx (BepInEx/LogOutput.log), después de una reconexión
deberías ver estas líneas nuevas (la del bug 2 solo aparece una vez por
sesión, aunque el problema se repita muchas veces, para no llenar el log de
spam):
[Info :FlamethrowerReconnectFix] Nuevo CustomMessagingManager detectado (reconexión). Forzando re-registro de los handlers del lanzallamas.
[Info :FlamethrowerReconnectFix] Contuve un crash en Y4NGZWeaponItem.get_Shotgun() (arma con referencia obsoleta tras una reconexión). Devolviendo null de forma segura en vez de dejar que se propague. (Este aviso solo se muestra una vez por sesión.)
Después de eso, el lanzallamas debería volver a disparar fuego y gastar
munición con normalidad, y la animación de armas no debería quedar rota ni
llenar el log de NullReferenceException en cadena.
Nota
Este es un parche "puente" hecho para tu instalación. Lo ideal a mediano plazo es reportarle este bug al autor de BetterArmory (Y4NGZ313) con este mismo diagnóstico, para que lo arregle en el mod original y no necesites este parche extra.
