[bug] Время реплея попадает в игровую sky_darken и меняет дневные правила живого мира #70

Closed
opened 2026-10-29 21:12:30 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Ревью 6f3fc644bc5194311a86baba722bc340215306b7. Регрессия render-only override из #57. Патч 25 ввёл shown_day_time, но применил его внутри общей Game::sky_darken, которую вызывает не только рендер.

Подтверждено путями вызова engine

  • game.rs::shown_day_time возвращает mods.time_override() вместо настоящего world.day_time.
  • game.rs::sky_darken сэмплирует environment по этому shown time и кэширует результат.
  • game/creatures.rs передаёт daylight: dim!=Nether && self.sky_darken()<4 в AI.
  • game.rs::with_level передаёт тот же darken в GameLevel для block behaviour.
  • game/raids.rs, natural_spawning.rs, stats.rs также используют sky_darken в игровых условиях.

Следовательно в режиме --in-frame / HORIZON_SERVER_THREAD=0, где этот Game и симулирует мир, просмотр ночного реплея днём меняет значение дневного условия в живой симуляции. World.day_time не переписывается, но поведение уже зависит от исторического времени. В стандартном server-thread режиме серверный Game отделён: нельзя без отдельной проверки утверждать, что его authoritative AI тоже меняется; этот issue не делает такого утверждения.

Нужно

Разделить настоящий gameplay sky brightness и render/replay sky brightness. Все игровые правила, snapshot clock, spawn/AI/block behaviour используют реальное окружение; только параметры отрисовки соответствующей replay view — override. Проверить и другие потребители shown_day_time, а также одновременные камеры/монитор и сброс при stop/world change.

Приёмка

День в живом мире + ночной replay и обратный случай; in-frame и server thread. Одинаковые игровые daylight/spawn/block predicates до/во время/после повтора. Историческое небо и освещение повтора сохраняются. Это статически установленная утечка общего helper, полноценный игровой AI-тест в этой среде не запускался.

🤖 Filed by Codex, AI-агент Владимира (chexit). Ревью `6f3fc644bc5194311a86baba722bc340215306b7`. Регрессия render-only override из #57. Патч 25 ввёл `shown_day_time`, но применил его внутри общей `Game::sky_darken`, которую вызывает не только рендер. ### Подтверждено путями вызова engine - `game.rs::shown_day_time` возвращает `mods.time_override()` вместо настоящего `world.day_time`. - `game.rs::sky_darken` сэмплирует environment по этому shown time и кэширует результат. - `game/creatures.rs` передаёт `daylight: dim!=Nether && self.sky_darken()<4` в AI. - `game.rs::with_level` передаёт тот же darken в `GameLevel` для block behaviour. - `game/raids.rs`, `natural_spawning.rs`, `stats.rs` также используют sky_darken в игровых условиях. Следовательно в режиме **--in-frame / HORIZON_SERVER_THREAD=0**, где этот Game и симулирует мир, просмотр ночного реплея днём меняет значение дневного условия в живой симуляции. World.day_time не переписывается, но поведение уже зависит от исторического времени. В стандартном server-thread режиме серверный Game отделён: нельзя без отдельной проверки утверждать, что его authoritative AI тоже меняется; этот issue не делает такого утверждения. ### Нужно Разделить настоящий gameplay sky brightness и render/replay sky brightness. Все игровые правила, snapshot clock, spawn/AI/block behaviour используют реальное окружение; только параметры отрисовки соответствующей replay view — override. Проверить и другие потребители shown_day_time, а также одновременные камеры/монитор и сброс при stop/world change. ### Приёмка День в живом мире + ночной replay и обратный случай; in-frame и server thread. Одинаковые игровые daylight/spawn/block predicates до/во время/после повтора. Историческое небо и освещение повтора сохраняются. Это статически установленная утечка общего helper, полноценный игровой AI-тест в этой среде не запускался.
chexit added the type:bugarea:simulationpriority:P2area:rendering labels 2026-10-29 21:12:30 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/f43fa5e (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/f43fa5e (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#70