R.E.P.O.
Install with App

Details

Latest version
1.2.9
Last Updated
First Uploaded
Downloads
1.4K
Likes
0
Size
83KB
Dependants

LateJoinFixed (v1.2.7) — Fix by Scorpio

A fully overhauled, polished, and bug-free edition of LateJoinNow for R.E.P.O.
Allows friends to join your active session anytime mid-game (during levels, truck phase, or shop) without the game-breaking bugs from the original release!

[!NOTE] Автоматический префикс открытых комнат: [Late Join (fix by Scorpio)]
Scroll down for full English description ↓


🇷🇺 Русская версия

🛠️ Что исправлено в версии 1.2.4 (Fix by Scorpio)

  1. 🚪 Исправление пропавших комнат и замурованных проходов (Стен):

    • Причина бага в оригинале: Сетевые вызовы соединений комнат (ModuleConnectionSetRPC) отсылались хостом без буферизации до того, как клиент успевал прогрузить префабы комнат. В результате клиент их отбрасывал, все дверные проемы комнат блокировались глухими стенами (ModulePropSwitch.NotConnectedParent), а цикл генерации уровня LevelGenerator.Generate зависал навсегда!
    • Решение: Реализован надёжный сетевой слепок Photon Event 173 + клиентский алгоритм авто-диагностики и восстановления комнат (SweepAndRepairModulesClient). Если данные сети задержались, клиент автоматически определяет соседей по 15-метровой сетке карты, моментально убирает глухие стены, открывает проходы в комнаты и корректно запускает освещение и туман.
  2. 🛡️ Устранён вечный чёрный экран (Infinite Black / Loading Screen):

    • Причина бага в оригинале: Родная система игры LoadingUI.LateUpdate каждый кадр проверяет всех игроков в PlayerList и ждёт, пока у каждого игрока levelAnimationCompleted == true. При подключении посреди игры аватары других игроков на клиенте создаются с дефолтным false. В оригинале флаг выставлялся только на хосте, из-за чего экран у вошедшего игрока оставался чёрным навсегда!
    • Решение: Клиент теперь автоматически помечает levelAnimationCompleted = true для всех существующих игроков при спавне.
    • Сторожевой таймер (Watchdog): Если экран загрузки висит дольше 3.5 сек при готовом игроке, он принудительно и безопасно скрывается (StopLoading()).
    • Стабильность корутины: Убран преждевременный сброс (yield break) при задержках сетевого рукопожатия.
  3. 📍 Безопасный спавн на пол (Никаких спавнов в пустоту, стены и воздух):

    • Причина бага в оригинале: В оригинале при телепорте брался вектор host.position + forward * 3f вслепую без рейкастов. Если хост стоял лицом к стене или у обрыва — новичок спавнился внутри стены или летел в бездну. А если точек спавна не было (array.Length == 0), мод просто прерывал спавн с return false, оставляя игрока висеть в небытии на координатах (0, 0, 0).
    • Решение: Написан алгоритм GetSafeSpawnTransform с поиском безопасных точек вокруг тиммейта, рейкастом прямой видимости от стен и рейкастом вниз в твердую геометрию пола (Physics.Raycast).
    • Гарантированный спавн: При отсутствии стандартных точек спавна гарантированно спавнит на пол рядом с живым тиммейтом или навигационной точкой комнаты (LevelPoint).
  4. 🖐️ Полный фикс сломанных рук, PhysGrabber и анимаций:

    • Причина бага в оригинале: В оригинальном моде в префиксах PhysGrabber.Update, PlayerAvatarVisuals.Update и PlayerAvatarLeftArm.Update стояла проверка: if (playerAvatar.localCamera == null) return false;. В сетевой игре localCamera есть только у локального игрока, а у тиммейтов она всегда null! Из-за этого хук намертво блокировал руки, лазер, перетаскивание предметов и анимации для всех сетевых тиммейтов!
    • Решение: Проверка localCamera ограничена строго локальным игроком (isLocal). Руки, физика предметов и анимации тиммейтов теперь синхронизируются безупречно.
  5. 🌐 Полная совместимость (Coop Interoperability):

    • Поддерживает совместную игру как с игроками на оригинальном LateJoinNow 1.1.0, так и на новой версии 1.2.0+.
    • Автоматическая синхронизация кастомизации персонажей и голосового чата в режиме Coop.

🎮 Возможности мода

  • HUD в левом нижнем углу: Отображает тип комнаты, статус входа («открыто/заблокировано»), название лобби и количество игроков в реальном времени.
  • Статус подключения игроков: Отображает прогресс входящих тиммейтов (Ожидание / В очереди / Загрузка / В игре).
  • Авто-префикс открытых комнат: Автоматически добавляет [Late Join (fix by Scorpio)] к названию лобби.
  • Безопасный переход между уровнями: Автоматически временно блокирует вход во время смены сцены, чтобы предотвратить сбои при загрузке карты.
  • Режим двойной оптимизации (Coop Mode): Если мод установлен у обоих игроков, время загрузки сокращается до 3–5 секунд, автоматически обновляются голоса и модели персонажей.

⚙️ Таблица настроек (Config)

Группа Настройка По умолчанию Описание
A. Global Mod Enabled Включено Главный переключатель мода.
A. Global Public Room Name Prefix Включено Добавляет префикс [Late Join (fix by Scorpio)] к названию открытой комнаты.
A. Global Teleport To Host On Join Выключено Спавнит игрока рядом с хостом (с проверкой пола рейкастом). Если выключено — на точке спавна.
A. Global Coop Mode Включено Двусторонняя оптимизация при наличии мода у обоих игроков.
B. Scene Whitelist Allow Join in Truck Включено Разрешить вход в фазе грузовика.
B. Scene Whitelist Allow Join in Shop Включено Разрешить вход в магазине.
B. Scene Whitelist Allow Join in Level Включено Разрешить вход прямо во время прохождения уровня.
C. Room Info HUD Enabled Включено Отображение инфо-блока в левом нижнем углу экрана.
C. Room Info HUD Show Join Status Включено Отображение статуса подключающихся игроков.
C. Room Info HUD Show Room Type Включено Отображение типа комнаты (публичная, приватная и т.д.).
C. Room Info HUD Show Room Name Включено Отображение названия лобби.
C. Room Info HUD Show Player Count Включено Отображение текущего и макс. числа игроков (напр. 3/6).
C. Room Info HUD Font Size 16 Размер шрифта HUD (10–28).
C. Room Info HUD Text Opacity / % 80 Прозрачность текста HUD (20–100%).
D. Debug Verbose Log Выключено Подробный вывод диагностических логов в консоль.
D. Debug Conflict Warning Включено Предупреждение при обнаружении других конфликтных модов на вход.

🇬🇧 English Version

🛠️ What's Fixed in Version 1.2.4 (Fix by Scorpio)

  1. 🚪 Missing Rooms & Blocked Doorways (Solid Walls) Fixed:

    • Root Cause in Original Mod: Unbuffered room connection RPCs (ModuleConnectionSetRPC) were sent by the host before the late joiner had instantiated the room prefabs. Photon automatically dropped them, leaving all doorways blocked by solid walls (ModulePropSwitch.NotConnectedParent) and hanging the client's LevelGenerator.Generate loop permanently.
    • The Solution: Implemented reliable Photon Event 173 room connection snapshots along with a client-side self-healing scanner (SweepAndRepairModulesClient). If network data is delayed, the client automatically infers room connections based on the rigid 15m dungeon grid, removes blocking walls, opens doorways, and unhangs the level generator to initialize lighting and fog.
  2. 🛡️ Fixed Infinite Black Loading Screen:

    • Root Cause in Original Mod: The game's native LoadingUI.LateUpdate checks all players in PlayerList and waits for every player to have levelAnimationCompleted == true. When joining mid-run, remote player avatars are instantiated on the client with a default false. The original mod only set this flag on the host! Consequently, the joining client remained stuck on a permanent black loading screen.
    • The Solution: The client now automatically sets levelAnimationCompleted = true for all existing players as soon as they spawn.
    • Anti-Hang Watchdog: If the loading screen stays visible for longer than 3.5 seconds after the player avatar is initialized, it is safely and forcefully closed (StopLoading()).
    • Coroutine Reliability: Removed premature aborts (yield break) caused by network latency during the handshake.
  3. 📍 Safe Ground Raycast Spawning (No More Void / Wall Spawning):

    • Root Cause in Original Mod: When teleporting to host, the original mod blindly calculated host.position + forward * 3f. If the host was looking at a wall or near a ledge, the joiner spawned inside solid geometry or fell into the bottomless abyss. Furthermore, if SpawnPoint[] was empty, the mod returned false without spawning the avatar, leaving players stranded in limbo at (0, 0, 0).
    • The Solution: Developed GetSafeSpawnTransform with multi-candidate testing around teammates, direct line-of-sight obstruction checks against walls, and downward raycasting into solid floor geometry (Physics.Raycast).
    • Guaranteed Spawn Fallback: If standard spawn points are missing or inactive, players safely spawn near a living teammate or the nearest valid room navigation node (LevelPoint).
  4. 🖐️ Fixed Broken Hands, PhysGrabber & Character Visuals:

    • Root Cause in Original Mod: In PhysGrabber.Update, PlayerAvatarVisuals.Update, and PlayerAvatarLeftArm.Update, the original author added: if (playerAvatar.localCamera == null) return false;. In multiplayer, only the local player possesses a localCamera — remote teammates always have localCamera == null! This caused the mod to permanently freeze hands, beam visualizers, item physics, and body/head animations for all remote teammates!
    • The Solution: Strictly scoped localCamera checks to local player avatars (isLocal). Remote player arms, hands, head turns, grabbers, and item interactions now synchronize smoothly.
  5. 🌐 Full Backward & Forward Interoperability:

    • Fully compatible with players running either the original LateJoinNow 1.1.0 or this updated 1.2.0+ version.
    • Dual-end coop mode automatically syncs cosmetics, player colors, and proximity voice chat.

🎮 Features

  • Bottom-left HUD: Displays real-time room type (with open/locked status), lobby name, and player count without background clutter.
  • Late Joiner Progress: Real-time tracker for connecting friends (Connecting / Queued / Loading / Joined).
  • Automatic Room Name Prefix: Automatically adds [Late Join (fix by Scorpio)] to custom public lobbies.
  • Transition Lock Protection: Temporarily locks the room during scene transitions to prevent joining into half-loaded maps.
  • Dual-end Coop Optimization: When both host and client have the mod, loading times are cut down to 3–5 seconds with automatic model and voice chat syncing.

⚙️ Configuration Settings

Group Setting Default Description
A. Global Mod Enabled On Master toggle — turning off completely disables the mod.
A. Global Public Room Name Prefix On Adds [Late Join (fix by Scorpio)] prefix to public lobbies.
A. Global Teleport To Host On Join Off Spawns late joiners next to the host (with raycast ground checks). If disabled, spawns at spawn points.
A. Global Coop Mode On Auto-engages dual-end optimization when both host and client have the mod.
B. Scene Whitelist Allow Join in Truck On Allow joining while players are in the truck.
B. Scene Whitelist Allow Join in Shop On Allow joining during the shop phase.
B. Scene Whitelist Allow Join in Level On Allow joining while exploring and looting regular levels.
C. Room Info HUD Enabled On Shows the info box in the bottom-left corner.
C. Room Info HUD Show Join Status On Displays the connection and loading progress of late joiners.
C. Room Info HUD Show Room Type On Displays lobby type (Public, Friends Only, etc.).
C. Room Info HUD Show Room Name On Displays the room name.
C. Room Info HUD Show Player Count On Displays current and max player count (e.g. 3/6).
C. Room Info HUD Font Size 16 Font size for the HUD (10–28).
C. Room Info HUD Text Opacity / % 80 Text opacity percentage for the HUD (20–100%).
D. Debug Verbose Log Off Prints verbose diagnostic logs to console.
D. Debug Conflict Warning On Shows an alert if conflicting late-join mods are detected.

📜 Credits

  • Based on original concepts by Zichen.
  • Overhauled, debugged, and fixed by Scorpio.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.