Делаешь в хуке проверку то что функция вызвана для нужного т/с.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
есть тольконо как тогда красить луч только для нужного CVehicleida pro:.text:006E12F6 0A0 B9 FF FF FF 00 mov ecx, 0FFFFFFh
цвет ты тоже верно нашел, 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); // восстанавливаем оригинальный цвет
}