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

undefine

Участник
37
15
какая функция в гта отвечает за рендер build-object? типо пробывал CEntity::Render оно онли игроков с машинами, или же при
C++:
for (int i = 0; i < objectsPool->m_nSize; i++) {
                CBuilding* obj = objectsPool->GetAt(i);
}
static RpAtomic* atomic_callback(RpAtomic* atomic, void* obj) {
    if (atomic->geometry) {
        atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
        RpGeometryForAllMaterials(atomic->geometry, material_callback, obj);
    }
    return atomic;
}

static RpMaterial* material_callback(RpMaterial* material, void* obj)
{
    if (!material || !material->texture)
        return material;

    material->color.blue = 255;
    material->color.red = 0;
    material->color.green = 0;

    return material;
}

и при попытке передать в atomic_callback крашит
 
Последнее редактирование:

вайега52

Налуашил состояние
Модератор
2,985
3,105
какая функция в гта отвечает за рендер build-object? типо пробывал CEntity::Render оно онли игроков с машинами, или же при
C++:
for (int i = 0; i < objectsPool->m_nSize; i++) {
                CBuilding* obj = objectsPool->GetAt(i);
}
static RpAtomic* atomic_callback(RpAtomic* atomic, void* obj) {
    if (atomic->geometry) {
        atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
        RpGeometryForAllMaterials(atomic->geometry, material_callback, obj);
    }
    return atomic;
}

static RpMaterial* material_callback(RpMaterial* material, void* obj)
{
    if (!material || !material->texture)
        return material;

    material->color.blue = 255;
    material->color.red = 0;
    material->color.green = 0;

    return material;
}

и при попытке передать в atomic_callback крашит
CCustomBuildingPipeline::CustomPipeAtomicSetup
Возможно оно
 
  • Нравится
Реакции: undefine

undefine

Участник
37
15
как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

C++:
typedef void(__thiscall* CEntity_Render_t)(CEntity* entity);
CEntity_Render_t fpOriginalRender;


void* Create_Hook(
    BYTE* src,
    const BYTE* dst,
    const int len)
{
    BYTE* jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    if (src[0] == 0xE9)
    {
        jmp = (BYTE*)malloc(10);
        jumpto = (*(DWORD*)(src + 1)) + ((DWORD)src) + 5;
        newjump = (jumpto - (DWORD)(jmp + 5));
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = newjump;
        jmp += 5;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src - jmp);
    }
    else
    {
        jmp = (BYTE*)malloc(5 + len);
        memcpy(jmp, src, len);
        jmp += len;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    for (int i = 5; i < len; i++)
        src[i] = 0x90;
    VirtualProtect(src, len, dwback, &dwback);
    return (jmp - len);
}

    fpOriginalRender = (CEntity_Render_t)Create_Hook(
        (BYTE*)0x534310,
        (BYTE*)hkEntityRender,
        0x2F);

но игра просто вылетала
 
  • Bug
Реакции: 0x9

AdCKuY_DpO4uLa

Адский дрочер
Друг
369
811
как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

C++:
typedef void(__thiscall* CEntity_Render_t)(CEntity* entity);
CEntity_Render_t fpOriginalRender;


void* Create_Hook(
    BYTE* src,
    const BYTE* dst,
    const int len)
{
    BYTE* jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    if (src[0] == 0xE9)
    {
        jmp = (BYTE*)malloc(10);
        jumpto = (*(DWORD*)(src + 1)) + ((DWORD)src) + 5;
        newjump = (jumpto - (DWORD)(jmp + 5));
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = newjump;
        jmp += 5;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src - jmp);
    }
    else
    {
        jmp = (BYTE*)malloc(5 + len);
        memcpy(jmp, src, len);
        jmp += len;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    for (int i = 5; i < len; i++)
        src[i] = 0x90;
    VirtualProtect(src, len, dwback, &dwback);
    return (jmp - len);
}

    fpOriginalRender = (CEntity_Render_t)Create_Hook(
        (BYTE*)0x534310,
        (BYTE*)hkEntityRender,
        0x2F);

но игра просто вылетала
Дрянь какая-то. Используй нормальные хукеры. Ты должен сохранять пролог ф-ии, на которую ставишь хук, вместо пролога ставить jmp на свой кусок памяти, который заранее выделяется, в котором будет восстановлен оригинальный код пролога, после чего уже прыжок на свою ф-ию, которая должна быть вызвана вместо оригинала
 
  • Нравится
Реакции: moreveal

tylerwiller

Новичок
1
0
Всем привет, я пытаюсь сделать Silent Aim с эффектом крови, как в этом видео. У меня уже есть рабочий код Silent Aim, мне нужен только код эффекта крови. Может ли кто-нибудь помочь?
 

Wowisky

Новичок
3
1
It's probably not really related to CPP but still, do you think there's a way to watch damage in the stream zone (like this https://www.blast.hk/threads/165373/) but in a lagcomp 0 server? It does rely in OnPlayerWeaponShot and it does only work in lagcomp 1 servers, maybe do you know any other trick or something? Or any idea? Client Side of course. Thanks!