Там карта же своя. Или этот метод все равно будет работать?Почему? CRMP тоже самое, что и SA:MP.
Там карта же своя. Или этот метод все равно будет работать?Почему? CRMP тоже самое, что и SA:MP.
Кек. Карта то своя, но exe-шник и адреса одни и те же.Там карта же своя. Или этот метод все равно будет работать?
Адреса то черт с ним. Оно же может быть там по херовому сделано, я это имел ввиду.Кек. Карта то своя, но exe-шник и адреса одни и те же.
bool CAutomobileSA::IsInAir ( void )
{
DEBUG_TRACE("bool CAutomobileSA::IsInAir ( void )");
DWORD dwThis = (DWORD) GetInterface();
DWORD dwFunc =0x6A6140;
bool bReturn;
_asm
{
mov ecx, dwThis
call dwFunc
mov bReturn, al
}
return bReturn;
}
Указатель на интерфейс CAutomobile.нашёл функцию из sobeit, но что ей запихнуть в dwThis я не знаю(
@SR_team , ты же мастер по sobeit, подскажи пж что ей скормитьC++:bool CAutomobileSA::IsInAir ( void ) { DEBUG_TRACE("bool CAutomobileSA::IsInAir ( void )"); DWORD dwThis = (DWORD) GetInterface(); DWORD dwFunc =0x6A6140; bool bReturn; _asm { mov ecx, dwThis call dwFunc mov bReturn, al } return bReturn; }
ну я это понимаю, но я не шарю где его взятьУказатель на интерфейс CAutomobile.
ну я это понимаю, но я не шарю где его взять
Посмотреть вложение 63834
CCallHook
*pProcessControlHook; // https://gitlab.com/prime-hack/samp/plugins/templates/AsiBase/-/blob/master/llmo/ccallhook.h
void *pAutomobileInterface;
inline bool CAutomobile__IsInAir(void *pThis) {
return reinterpret_cast<bool(__thiscall *)(void *)>(0x6A6140)(pThis);
}
void CAutomobile__ProcessControl()
{
pAutomobileInterface = reinterpret_cast<void *>(pProcessControlHook->reg86(r86::ECX));
bool fResult = CAutomobile__IsInAir(pAutomobileInterface);
}
// SF: mainloop->!initialized
pProcessControlHook = new CCallHook(reinterpret_cast<void *>(0x006B196D));
pProcessControlHook->enable(CAutomobile__ProcessControl);
// DLL_PROCESS_DETACH / ~YourClass()
delete pProcessControlHook;
CVehicle если знаешь как получить, то можешь просто его скастить до CAutomobile.ну я это понимаю, но я не шарю где его взять
reinterept_cast`ом его прочитать как CAutomobile? .... в sfapi половины классов не определено, приходится самому их искать в других апи и вписывать, особенно это заметно в когда ты глубоко руки вCVehicle если знаешь как получить, то можешь просто его скастить до CAutomobile.
Тебе вместо this нужно передать указатель на CAutomobile, но так как он наследуется от других классов, ты можешь туда передать указатель на CVehicle, CEntity, CPhysical, CPlaceable.reinterept_cast`ом его прочитать как CAutomobile? .... в sfapi половины классов не определено, приходится самому их искать в других апи и вписывать, особенно это заметно в когда ты глубоко руки вговнозасунул
Конкретно в эту функцию нужно отправлять только указатель на CAutomobile.Тебе вместо this нужно передать указатель на CAutomobile, но так как он наследуется от других классов, ты можешь туда передать указатель на CVehicle, CEntity, CPhysical, CPlaceable.
а вообще, чисто теоретически,можно даже void туда передать
Чем отличается CVehicle от CAutomobile? Не интересовался данной темой. Наверное CAutomobile это основной класс, а CVehicle и прочие - наследники.Конкретно в эту функцию нужно отправлять только указатель на CAutomobile.
В CAutomobile на нулевом оффсете идет CVehicle. Заметь, что CBike, CHeli и т.д. это разные классы и находясь в разном транспорте надо вызывать правильные функции для каждого типа транспорта.Наверное CAutomobile это основной класс, а CVehicle и прочие - наследники.
Если CBike будет наследовать CAutomobile, 0x0-0xN (произвольно), будет схож с CAutomobile. А вот то, что выходит за 0xN, будет совместимо конкретно с CBike, а не с CAutomobile.В CAutomobile на нулевом оффсете идет CVehicle. Заметь, что CBike, CHeli и т.д. это разные классы и находясь в разном транспорте надо вызывать правильные функции для каждого типа транспорта.