Другое С/С++ Вопрос - Ответ

4el0ve4ik

Известный
Всефорумный модератор
1,553
1,352
C++:
void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
    vehicle->DoHeadLightBeam(arg0, matrix, arg2);
}
C++:
        patch::RedirectCall(0x6A2EDA, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6A2EF2, Hook_DoHeadLightBeam);
        patch::RedirectCall(0x6BDE80, Hook_DoHeadLightBeam);

как можно покрасить луч если в void __thiscall CVehicle::DoHeadLightBeam(CVehicle *this, int a2, CMatrix *m, char a4) нету по типу r,g,b как в StoreCarLightShadow
есть только
ida pro:
.text:006E12F6 0A0 B9 FF FF FF 00                          mov     ecx, 0FFFFFFh
но как тогда красить луч только для нужного CVehicle
Делаешь в хуке проверку то что функция вызвана для нужного т/с.
цвет ты тоже верно нашел, B9 трогать не нужно, все что идёт дальше - цвет, в формате BGR, т.е. 6E12F7 -blue, 6E12F8 -green, 6E12F9 -red.
дальше просто берешь в хуке и
C++:
void setColor(unsigned char r, unsigned char g, unsigned char b){ //функция написана условна, не забываем про снятия протекта памяти.
    *reinterpret_cast<unsigned char*>(0x6E12F9) = r;
    *reinterpret_cast<unsigned char*>(0x6E12F8) = g;
    *reinterpret_cast<unsigned char*>(0x6E12F9) = b;
}

void __fastcall Hook_DoHeadLightBeam(CVehicle* vehicle, void* edx, int arg0, CMatrix& matrix, unsigned char arg2)
{
    setColor(0x00, 0x00, 0xff); //требуемый цвет
    vehicle->DoHeadLightBeam(arg0, matrix, arg2);
    setColor(0xff, 0xff, 0xff); // восстанавливаем оригинальный цвет
}

1743357090599.png
 
  • Нравится
Реакции: whyega52