loganhackerdff
Известный
- 866
- 521
SetWriteOffset() и записьможно ли каким-нибудь образом в битстриме перезаписать лишь определенные данные, не создавая новый? Допустим, я хукаю ShowTextDraw и мне нужно перезаписать в нем лишь modelId.
SetWriteOffset() и записьможно ли каким-нибудь образом в битстриме перезаписать лишь определенные данные, не создавая новый? Допустим, я хукаю ShowTextDraw и мне нужно перезаписать в нем лишь modelId.
В собейте... https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.cpp#L941Какой адрес у античита samp.dll 0.3.7?
можешьмогу ли я в visual studio code как и в Visual Studio писать .SF ?
а собирать проект мне прийдётся через visual studio?можешь
нет. Если для VSCode нет тулзы дергающей msbuild, то сам пропишешь msbuild в PATH и будешь через встроенные кастомные сборки VSCode его дергать, или через встроенную консоль. Кстати кейс с VSCode будет даже лучше чем со студией, потому что студия хоть и поддерживает системы сборки помимо msbuild, но ходить по ссылкам ошибок и фильтровать ошибки она не умеета собирать проект мне прийдётся через visual studio?
Наверное, там надо писать 0/1 (off/on). А насчет стилей, скорее всего это как в одиночке, ты приходишь в одну качалку там тебе показывают один стиль, приходишь в другую, там уже кунг фу.Как узнать какой стиль борьбы скольки байтам равен?
И чем отличается #1 от #2?
- CPed +0x72D = [byte] Стиль борьбы #1
- CPed +0x72E = [byte] Стиль борьбы #2
void StartRadio(unsigned int station)
{
DWORD dwFunc = 0x4DBEC3;
DWORD dwFunc2 = 0x4EB3C3;
_asm
{
// We can't do this anymore as we've returned out StartRadio
/*
push 0
push station
mov ecx, CLASS_CAudioEngine
call dwFunc
*/
// Push our arguments onto the stack
push 0
push station
// Call something, skip 3 bytes that we have our return instruction on (no arguments)
mov ecx, 0x8AE554
mov eax, dword ptr[ecx + 8]
call dwFunc
// Check the return value, eventually skip
test al, al
jne skip
mov eax, dword ptr[esp + 4]
mov ecx, dword ptr[esp]
// Push arguments to some other function
push 0
push 0
push eax
push ecx
// Call it (emulate call instruction)
mov ecx, 8CB6F8h
push done
push ebx
mov bl, byte ptr[esp + 8]
jmp dwFunc2
// Pop our arguments back
done :
pop eax
pop eax
skip :
}
}
void ResetRadio()
{
DWORD dwFunc = 0x4E7F80;
_asm
{
mov ecx, 0x8CB6F8
call dwFunc
}
}
if (g_CMenu.bNoRadio && *(byte*)0x8CB7A5 != 13)
{
*(byte*)0xBA679A = 13;
*(byte*)0x8CB7A5 = 13;
ResetRadio();
StartRadio(13);
}
всё равно шипит, но теперь не показывает название радио (на милисекунды*(BYTE*)0x8CB7A5 = (BYTE)0;
попробуй это пихнуть в мейнлуп
ResetRadio();
StartRadio(13);
*(byte*)0xBA679A = (BYTE)0;
*(byte*)0x8CB7A5 = (BYTE)0;
Ну это же не чит из одиночки. Наверно, если бы это было так, там бы было написано, а там не написано.Наверное, там надо писать 0/1 (off/on)
всё равно шипит, но теперь не показывает название радио (на милисекунды
C++:ResetRadio(); StartRadio(13); *(byte*)0xBA679A = (BYTE)0; *(byte*)0x8CB7A5 = (BYTE)0;
*(BYTE*)0x8CB7A5 = BYTE(0);
*(BYTE*)0xBA679A = BYTE(0);
*(BYTE*)0xBA6798 = BYTE(0);
*(BYTE*)0xBA6799 = BYTE(0);
*(BYTE*)0xBA6795 = BYTE(0);
*(BYTE*)0xBA6798 = thisVol;
static BYTE thisVol = *(BYTE*)0xBA6798;