Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Исходник Rust Bright-Night - метод для светлой ночи

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Окт 2025
Сообщения
106
Реакции
4
Народ, раз уж тема ночной слепоты в расте всплывает регулярно, решил поделиться небольшим методом для светлой ночи. Ничего революционного, но в адекватном виде в паблике попадалось нечасто, поэтому оформляю как основу под ваш external.

Идея простая: работаем с клиентскими параметрами времени/освещения, чтобы убрать именно «чёрную яму» ночью и сделать её ближе к раннему утру. Это не вечный день, а именно более комфортная ночная картинка, когда всё ещё понятно, что ночь, но бегать и стрелять уже не мучение.

Подход:

- получаем доступ к объекту, который отвечает за класс 'TOD_SKY';
- отслеживаем текущий `night_params` и 'ambient_params', после сдвигаем их в более светлый диапазон;
- при необходимости слегка поднимаем яркость окружения, чтобы не проваливались тёмные участки.

Реализацию метода и структуру можете встроить в свой цикл обновления или рендер‑луп, в зависимости от архитектуры проекта. Оффсеты под конкретную версию игры придётся подобрать самостоятельно — после каждого крупного обновления они обычно меняются, так что без актуального дампа обойтись не получится.

Исходник с примером работы и набором оффсетов прикреплю ниже. Дальше — дело за вами: кто хочет максимально легит, может делать плавный переход и минимальные правки параметров, кто делает purely rage — можете крутить значения более агрессивно.

Код:
Expand Collapse Copy
uintptr_t night_params =read<uintptr_t>(tod_sky_chain + O::Sky::NightParameters);
uintptr_t ambient_params = read<uintptr_t>(tod_sky_chain + O::Sky::AmbientParameters);
if (night_params != 0) {
write<float>( night_params + O::Sky::TOD_NightParameters::runtimeAmbientMultiplier,13.0f);
}
if (ambient_params != 0) {
write<float>(ambient_params + O::Sky::TOD_AmbientParameters::Saturation, 0.0f);
}

Если кто уже использует похожий подход или делает светлую ночь через другие параметры (постобработку, цветокор, шейдеры), будет интересно посмотреть альтернативы — пишите, чем обошлись и как это ведёт себя на свежих билдах.
 
Народ, раз уж тема ночной слепоты в расте всплывает регулярно, решил поделиться небольшим методом для светлой ночи. Ничего революционного, но в адекватном виде в паблике попадалось нечасто, поэтому оформляю как основу под ваш external.

Идея простая: работаем с клиентскими параметрами времени/освещения, чтобы убрать именно «чёрную яму» ночью и сделать её ближе к раннему утру. Это не вечный день, а именно более комфортная ночная картинка, когда всё ещё понятно, что ночь, но бегать и стрелять уже не мучение.

Подход:

- получаем доступ к объекту, который отвечает за класс 'TOD_SKY';
- отслеживаем текущий `night_params` и 'ambient_params', после сдвигаем их в более светлый диапазон;
- при необходимости слегка поднимаем яркость окружения, чтобы не проваливались тёмные участки.

Реализацию метода и структуру можете встроить в свой цикл обновления или рендер‑луп, в зависимости от архитектуры проекта. Оффсеты под конкретную версию игры придётся подобрать самостоятельно — после каждого крупного обновления они обычно меняются, так что без актуального дампа обойтись не получится.

Исходник с примером работы и набором оффсетов прикреплю ниже. Дальше — дело за вами: кто хочет максимально легит, может делать плавный переход и минимальные правки параметров, кто делает purely rage — можете крутить значения более агрессивно.

Код:
Expand Collapse Copy
uintptr_t night_params =read<uintptr_t>(tod_sky_chain + O::Sky::NightParameters);
uintptr_t ambient_params = read<uintptr_t>(tod_sky_chain + O::Sky::AmbientParameters);
if (night_params != 0) {
write<float>( night_params + O::Sky::TOD_NightParameters::runtimeAmbientMultiplier,13.0f);
}
if (ambient_params != 0) {
write<float>(ambient_params + O::Sky::TOD_AmbientParameters::Saturation, 0.0f);
}

Если кто уже использует похожий подход или делает светлую ночь через другие параметры (постобработку, цветокор, шейдеры), будет интересно посмотреть альтернативы — пишите, чем обошлись и как это ведёт себя на свежих билдах.
вопрос нахуя это если каждый знает как это сделать
 
я чамсы не могу сделать на external вот это уже попа на девблог, все есть уже материал айди и оффсеты но они тупо неработают
 
я чамсы не могу сделать на external вот это уже попа на девблог, все есть уже материал айди и оффсеты но они тупо неработают
если тупо не работают по умному найди нормальные оффсеты
 
Народ, раз уж тема ночной слепоты в расте всплывает регулярно, решил поделиться небольшим методом для светлой ночи. Ничего революционного, но в адекватном виде в паблике попадалось нечасто, поэтому оформляю как основу под ваш external.

Идея простая: работаем с клиентскими параметрами времени/освещения, чтобы убрать именно «чёрную яму» ночью и сделать её ближе к раннему утру. Это не вечный день, а именно более комфортная ночная картинка, когда всё ещё понятно, что ночь, но бегать и стрелять уже не мучение.

Подход:

- получаем доступ к объекту, который отвечает за класс 'TOD_SKY';
- отслеживаем текущий `night_params` и 'ambient_params', после сдвигаем их в более светлый диапазон;
- при необходимости слегка поднимаем яркость окружения, чтобы не проваливались тёмные участки.

Реализацию метода и структуру можете встроить в свой цикл обновления или рендер‑луп, в зависимости от архитектуры проекта. Оффсеты под конкретную версию игры придётся подобрать самостоятельно — после каждого крупного обновления они обычно меняются, так что без актуального дампа обойтись не получится.

Исходник с примером работы и набором оффсетов прикреплю ниже. Дальше — дело за вами: кто хочет максимально легит, может делать плавный переход и минимальные правки параметров, кто делает purely rage — можете крутить значения более агрессивно.

Код:
Expand Collapse Copy
uintptr_t night_params =read<uintptr_t>(tod_sky_chain + O::Sky::NightParameters);
uintptr_t ambient_params = read<uintptr_t>(tod_sky_chain + O::Sky::AmbientParameters);
if (night_params != 0) {
write<float>( night_params + O::Sky::TOD_NightParameters::runtimeAmbientMultiplier,13.0f);
}
if (ambient_params != 0) {
write<float>(ambient_params + O::Sky::TOD_AmbientParameters::Saturation, 0.0f);
}

Если кто уже использует похожий подход или делает светлую ночь через другие параметры (постобработку, цветокор, шейдеры), будет интересно посмотреть альтернативы — пишите, чем обошлись и как это ведёт себя на свежих билдах.
бро у тебя квантовый компьютер еще работает?
 
Народ, раз уж тема ночной слепоты в расте всплывает регулярно, решил поделиться небольшим методом для светлой ночи. Ничего революционного, но в адекватном виде в паблике попадалось нечасто, поэтому оформляю как основу под ваш external.

Идея простая: работаем с клиентскими параметрами времени/освещения, чтобы убрать именно «чёрную яму» ночью и сделать её ближе к раннему утру. Это не вечный день, а именно более комфортная ночная картинка, когда всё ещё понятно, что ночь, но бегать и стрелять уже не мучение.

Подход:

- получаем доступ к объекту, который отвечает за класс 'TOD_SKY';
- отслеживаем текущий `night_params` и 'ambient_params', после сдвигаем их в более светлый диапазон;
- при необходимости слегка поднимаем яркость окружения, чтобы не проваливались тёмные участки.

Реализацию метода и структуру можете встроить в свой цикл обновления или рендер‑луп, в зависимости от архитектуры проекта. Оффсеты под конкретную версию игры придётся подобрать самостоятельно — после каждого крупного обновления они обычно меняются, так что без актуального дампа обойтись не получится.

Исходник с примером работы и набором оффсетов прикреплю ниже. Дальше — дело за вами: кто хочет максимально легит, может делать плавный переход и минимальные правки параметров, кто делает purely rage — можете крутить значения более агрессивно.

Код:
Expand Collapse Copy
uintptr_t night_params =read<uintptr_t>(tod_sky_chain + O::Sky::NightParameters);
uintptr_t ambient_params = read<uintptr_t>(tod_sky_chain + O::Sky::AmbientParameters);
if (night_params != 0) {
write<float>( night_params + O::Sky::TOD_NightParameters::runtimeAmbientMultiplier,13.0f);
}
if (ambient_params != 0) {
write<float>(ambient_params + O::Sky::TOD_AmbientParameters::Saturation, 0.0f);
}

Если кто уже использует похожий подход или делает светлую ночь через другие параметры (постобработку, цветокор, шейдеры), будет интересно посмотреть альтернативы — пишите, чем обошлись и как это ведёт себя на свежих билдах.
Годный и проверенный метод. Использование TOD_Sky — это классика для Rust-экстерналов, так как это работает на уровне игрового движка (Unity Sky System) и дает гораздо более чистую картинку, чем банальный «гамма-хак» через монитор или драйверы.
Твой подход с runtimeAmbientMultiplier хорош тем, что он не просто «выбеливает» экран, а заставляет движок отрисовывать объекты при более высоком уровне освещенности.
Несколько мыслей по доработке для тех, кто будет это внедрять:
  1. По поводу легитности: Значение 13.0f — это довольно ярко. Если хочется сделать «мягкую» ночь, обычно хватает диапазона 4.0f – 8.0f.
  2. Проблема «белого неба»: При выкручивании этих параметров небо может стать неестественно светлым или зернистым. Опытные реверсеры часто дополнительно трогают TOD_CloudParameters, чтобы облака не превращались в кашу.
  3. Альтернатива через Shaders: Некоторые идут дальше и патчат шейдеры ландшафта, чтобы убрать тени (No Shadows). В сочетании с твоим методом это дает эффект «ясновидящего» — видно игроков даже в самых глубоких низинах.
  4. Свежие билды: Сейчас Facepunch активно борется с визуальными абузами, и хотя прямые оффсеты в TOD_Sky всё еще работают, стоит следить за тем, не прилетит ли проверка целостности на критические параметры освещения в будущем (хотя для External это менее актуально).
Вопрос к тебе: не пробовал ли ты в этом же чейне крутить LightParameters? Иногда это помогает избавиться от слишком резких бликов, которые появляются при высоком AmbientMultiplier.
Как планируешь автоматизировать поиск оффсетов после некст патча — используешь самописный сканнер сигнатур или ждешь дампов?
 
Назад
Сверху Снизу