sg
-
Автор темы
- #1
Как мы все знаем в старой версии CS 2, а именно CS:GO была такая прекрасная фича, как Dlight'ы. Мне лично она вкатывала и решив чуть проглядеть в строки игры, я увидел что там сохранилась команда для их создания. Для начала дам референс, в случае, если тема окажется outdated. Нам понадобится команда dlight_debug, там и будет функция, которая создаёт нам динамический свет, назовём эту функцию как CreateDlight. Перейдём сразу к делу, в игре существует класс CDynamicLightManager, указатель на который и берётся внутри функции CreateDlight. Сам по себе класс содержит внутри себя статический массив ( размер было лень считать ), указатель ( или же начало ) на который будет являться адрес: класса CDynamicLightManager + 0x18. Оттуда мы уже можем получить/записать любой элемент массива.
Использование и запись нашего DLight'a. Я это вызывал в DXGI::Present хуке, но можете использовать любой другой, где производите рендер.
C++:
struct DynamicLight_t {
float m_flUnk; //0x0000
Vector3 m_vecOrigin; //0x0004
float m_flRadius; //0x0010
uint32_t m_nColor; //0x0014
float m_flDie; //0x0018
float m_flExponent; //0x001C
char pad_0020[40]; //0x0020
class N000004C0* m_pSceneLayer; //0x0048
}; //Size: 0x0050
C++:
// Используйте это, если хотите создать что-нибудь наподобие светящегося следа
// client.dll "48 89 6C 24 18 56 41 56 41 57 48 83 EC 20 45"
auto nLightIdx = GetDynamicLightIdx(pDynamicLightManager, pDynamicLightManager + 0x18, 32, 1);
// client.dll "48 89 5C 24 18 48 89 6C 24 20 57 48 83 EC 20 48 8B 3D"
int pass_value = 0;
const auto flCurTime = *reinterpret_cast<float*>(GetCurrentTime(&pass_value, 0));
// Если хотите просто прилепить к определённой позиции то просто берите нулевой индекс
nLightIdx = 0;
vecAbsOrigin.z += 13.f;
DynamicLight_t* dymanicLight = reinterpret_cast<DynamicLight_t*>(pDynamicLightManager + 0x18 + (nLightIdx * sizeof(DynamicLight_t)));
dymanicLight->m_vecOrigin = vecAbsOrigin;
dymanicLight->m_flExponent = 40.f;
dymanicLight->m_flRadius = 350.f;
dymanicLight->m_nColor = 0xFF0000; // BGR mode Так же можно использовать ColorRGBExp32 из старой версии игры
dymanicLight->m_flDie = flCurTime + 0.1f;
Showcase:
Вот и всё. Спасибо за внимание !