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

yorenov

Участник
57
42
забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули
В тему с заказами зайди, там много весело "неактуально", а потом - я сменил ТГ юз, ушел в работу в реальной жизни. ТГ юз занял идиот который заскамил типов, попросив обратно ТГ юз - он отказал. В итоге скамит и по сей день, к этому я не имею никакого отношения

Альт как прожать? Так не воркает:

С++:
RakNet::BitStream bs;
    bs.ResetWritePointer();
    Synchronization::OnfootData onfootData{};
    std::memcpy(&onfootData,
                &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData,
                sizeof(Synchronization::OnfootData));
    onfootData.m_controllerState.m_bPedWalk = 1;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
  
    onfootData.m_controllerState.m_bPedWalk = 0;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(0);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
А так прожимает только 1 раз + ко всему - костыль
C++:
input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = 0;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
    input[0].ki.wScan = 0x38;

    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = 0;
    input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
    input[1].ki.wScan = 0x38;

    SendInput(2, input, sizeof(INPUT));
Актуально, парни, помогите кликнуть злой альт на Радмире. 215 пакет не отправляется от клиента (при нажатии альта его просто нет - вход в квартиру)
 
Последнее редактирование:
  • Ха-ха
Реакции: XRLM

yorenov

Участник
57
42
Альт как прожать? Так не воркает:

С++:
RakNet::BitStream bs;
    bs.ResetWritePointer();
    Synchronization::OnfootData onfootData{};
    std::memcpy(&onfootData,
                &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData,
                sizeof(Synchronization::OnfootData));
    onfootData.m_controllerState.m_bPedWalk = 1;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
   
    onfootData.m_controllerState.m_bPedWalk = 0;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(0);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
А так прожимает только 1 раз + ко всему - костыль
C++:
input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = 0;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
    input[0].ki.wScan = 0x38;

    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = 0;
    input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
    input[1].ki.wScan = 0x38;

    SendInput(2, input, sizeof(INPUT));
Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?

Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?
m_value - short (16 бит), а я кастил к uint8_t, т.е.
1024 (0x0400) превращался в 0 у меня (низкий байт), и в итоге бит вообще не ставится))) + Я перезатирал все остальные клавиши, вместо того, чтобы просто добавить бит walk)
 
Последнее редактирование:

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,982
3,097
какая функция в гта отвечает за рендер 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
810
как поставить хук на функцию? не вызов функции, а на саму функцию
пытался так

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!