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

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,191
искал искал и не нашел, вообщем. Нужны две функции, это фриз камеры и фриз педа.(sf)
 

Констанций

Потрачен
2
2
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
искал искал и не нашел, вообщем. Нужны две функции, это фриз камеры и фриз педа.(sf)
C++:
// bControllable: 0 - заморозить, 1 - разморозить
// Действия можно выполнять и до инициализации сампа, главное чтоб сам модуль был загружен в игру
void sampTogglePlayerControllable(class CPed *targetPed, ::BOOL bControllable)
{
    static auto sampLibrary{std::uintptr_t(::GetModuleHandle("samp.dll"))};
    reinterpret_cast<void(__thiscall *)(class CPed *, ::BOOL)>
        (sampLibrary + 0xA7050)(targetPed, bControllable);
}

// false - заморозить, true - разморозить
void setCameraControllable(bool status) {
    *reinterpret_cast<std::uint8_t *>(0x52B730) = status ? 0x81 : 0xC3;
}

всем ку я не научился пользоваться гидрой, скажите пж адрес функции скриншота для samp 0.3.7 R3
для 0.3.7 R1 я знаю - samp.dll + 0x70FC0
(и если не сложно напишите как блять в этой гидре прыгнуть на функцию)
Мне, конечно, не тяжело загрузить библиотеку, но для приличия мог бы и скинуть.
C++:
// R3
void takeScreenshot()
{
    static auto sampLibrary{std::uintptr_t(::GetModuleHandle("samp.dll"))};
    reinterpret_cast<void(__cdecl *)()>(sampLibrary + 0x74EB0)();
}
 
Последнее редактирование:
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
520
всем ку, я хочу емулировать нажатие клавиши alt, для этого юзаю https://www.blast.hk/threads/52553/ но ничего не работает,
(значение там меняется от нажатия alt)
походу это надо использовать не в хуке 0x748DA3
 

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
520
hi, мне нужна помощь с rakhook, хукаю onFootSync:

C++:
    bool onPacketOutcoming(RakNet::BitStream*& bs) override
    {
        stOnFootData* data;

        if (*bs->GetData() == 207)
        {
            data = (stOnFootData*)bs->GetData();
            vars::pChat->AddMessage(-1, std::to_string(data->byteHealth).c_str());
         
        }

        return true;
    }
Структуры:
C++:
struct stSAMPKeys
{
    uint8_t                                    keys_primaryFire : 1;
    uint8_t                                    keys_horn__crouch : 1;
    uint8_t                                    keys_secondaryFire__shoot : 1;
    uint8_t                                    keys_accel__zoomOut : 1;
    uint8_t                                    keys_enterExitCar : 1;
    uint8_t                                    keys_decel__jump : 1;            // on foot: jump or zoom in
    uint8_t                                    keys_circleRight : 1;
    uint8_t                                    keys_aim : 1;                    // hydra auto aim or on foot aim
    uint8_t                                    keys_circleLeft : 1;
    uint8_t                                    keys_landingGear__lookback : 1;
    uint8_t                                    keys_unknown__walkSlow : 1;
    uint8_t                                    keys_specialCtrlUp : 1;
    uint8_t                                    keys_specialCtrlDown : 1;
    uint8_t                                    keys_specialCtrlLeft : 1;
    uint8_t                                    keys_specialCtrlRight : 1;
    uint8_t                                    keys__unused : 1;
};

struct stOnFootData
{
    uint8_t packet;
    uint16_t                                sLeftRightKeys;
    uint16_t                                sUpDownKeys;
    union
    {
        uint16_t                            sKeys;
        struct stSAMPKeys                    stSampKeys;
    };
    float                                    fPosition[3];
    float                                    fQuaternion[4];
    uint8_t                                    byteHealth;
    uint8_t                                    byteArmor;
    uint8_t                                    byteCurrentWeapon;
    uint8_t                                    byteSpecialAction;
    float                                    fMoveSpeed[3];
    float                                    fSurfingOffsets[3];
    uint16_t                                sSurfingVehicleID;
    short                                    sCurrentAnimationID;
    short                                    sAnimFlags;
};
Но всегда в чат выводится 0
 

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
hi, мне нужна помощь с rakhook, хукаю onFootSync:

C++:
    bool onPacketOutcoming(RakNet::BitStream*& bs) override
    {
        stOnFootData* data;

        if (*bs->GetData() == 207)
        {
            data = (stOnFootData*)bs->GetData();
            vars::pChat->AddMessage(-1, std::to_string(data->byteHealth).c_str());
        
        }

        return true;
    }
Структуры:
C++:
struct stSAMPKeys
{
    uint8_t                                    keys_primaryFire : 1;
    uint8_t                                    keys_horn__crouch : 1;
    uint8_t                                    keys_secondaryFire__shoot : 1;
    uint8_t                                    keys_accel__zoomOut : 1;
    uint8_t                                    keys_enterExitCar : 1;
    uint8_t                                    keys_decel__jump : 1;            // on foot: jump or zoom in
    uint8_t                                    keys_circleRight : 1;
    uint8_t                                    keys_aim : 1;                    // hydra auto aim or on foot aim
    uint8_t                                    keys_circleLeft : 1;
    uint8_t                                    keys_landingGear__lookback : 1;
    uint8_t                                    keys_unknown__walkSlow : 1;
    uint8_t                                    keys_specialCtrlUp : 1;
    uint8_t                                    keys_specialCtrlDown : 1;
    uint8_t                                    keys_specialCtrlLeft : 1;
    uint8_t                                    keys_specialCtrlRight : 1;
    uint8_t                                    keys__unused : 1;
};

struct stOnFootData
{
    uint8_t packet;
    uint16_t                                sLeftRightKeys;
    uint16_t                                sUpDownKeys;
    union
    {
        uint16_t                            sKeys;
        struct stSAMPKeys                    stSampKeys;
    };
    float                                    fPosition[3];
    float                                    fQuaternion[4];
    uint8_t                                    byteHealth;
    uint8_t                                    byteArmor;
    uint8_t                                    byteCurrentWeapon;
    uint8_t                                    byteSpecialAction;
    float                                    fMoveSpeed[3];
    float                                    fSurfingOffsets[3];
    uint16_t                                sSurfingVehicleID;
    short                                    sCurrentAnimationID;
    short                                    sAnimFlags;
};
Но всегда в чат выводится 0
#pragma pack(push, 1)
 
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
520
похоже что это раздел только для меня, чувствую себя тупым, ну да ладно,

кароче я юзаю sampapi и рисую чамсы вот так:
C++:
if (m_bChams && g::pDXDevice)
                    {
                            DWORD dwCONSTANT{ 0 }, dwARG2{ 0 }, dwCULL{ 0 };

                            g::pDXDevice->GetRenderState(D3DRS_CULLMODE, &dwCULL);
                            g::pDXDevice->GetTextureStageState(0, D3DTSS_CONSTANT, &dwCONSTANT);
                            g::pDXDevice->GetTextureStageState(0, D3DTSS_COLORARG2, &dwARG2);

                            g::pDXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_CONSTANT, 0xFFFFFFFF);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CONSTANT);

                            ((void(__thiscall*)(void*))(*(void***)pPlayer->m_pPed->m_pGameEntity)[18])(player.pPlayer->m_pPed->m_pGameEntity);

                             g::pDXDevice->SetRenderState(D3DRS_CULLMODE, dwCULL);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_CONSTANT, dwCONSTANT);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_COLORARG2, dwARG2);
                        }
                    }
Перед этим проверка всего что можно для педа
C++:
(player && player->m_pPed && player->DoesExist() && player->m_pPed->DoesExist() && player->m_pPed->m_pGamePed && player->m_pPed->m_pGameEntity)
выглядит как будто наговнокожено но всё равно вылетают exceptions на строке после
C++:
((void(__thiscall*)(void*))(*(void***)pPlayer->m_pPed->m_pGameEntity)[18])(player.pPlayer->m_pPed->m_pGameEntity);
пример кода взят отсюда: https://github.com/Stickey21/Stealt.../Stealth Remastered/Features/Visuals.cpp#L269
 

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
похоже что это раздел только для меня, чувствую себя тупым, ну да ладно,

кароче я юзаю sampapi и рисую чамсы вот так:
C++:
if (m_bChams && g::pDXDevice)
                    {
                            DWORD dwCONSTANT{ 0 }, dwARG2{ 0 }, dwCULL{ 0 };

                            g::pDXDevice->GetRenderState(D3DRS_CULLMODE, &dwCULL);
                            g::pDXDevice->GetTextureStageState(0, D3DTSS_CONSTANT, &dwCONSTANT);
                            g::pDXDevice->GetTextureStageState(0, D3DTSS_COLORARG2, &dwARG2);

                            g::pDXDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_CONSTANT, 0xFFFFFFFF);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CONSTANT);

                            ((void(__thiscall*)(void*))(*(void***)pPlayer->m_pPed->m_pGameEntity)[18])(player.pPlayer->m_pPed->m_pGameEntity);

                             g::pDXDevice->SetRenderState(D3DRS_CULLMODE, dwCULL);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_CONSTANT, dwCONSTANT);
                            g::pDXDevice->SetTextureStageState(0, D3DTSS_COLORARG2, dwARG2);
                        }
                    }
Перед этим проверка всего что можно для педа
C++:
(player && player->m_pPed && player->DoesExist() && player->m_pPed->DoesExist() && player->m_pPed->m_pGamePed && player->m_pPed->m_pGameEntity)
выглядит как будто наговнокожено но всё равно вылетают exceptions на строке после
C++:
((void(__thiscall*)(void*))(*(void***)pPlayer->m_pPed->m_pGameEntity)[18])(player.pPlayer->m_pPed->m_pGameEntity);
пример кода взят отсюда: https://github.com/Stickey21/Stealth-Remastered/blob/origin/Stealth Remastered/Features/Visuals.cpp#L269
CEntityRender:
using CEntity__Render = void(__thiscall*)(::CEntity*);
reinterpret_cast<CEntity__Render>(0x59F180)(player.pPlayer->m_pPed->m_pGameEntity);
chams:
DWORD dwCONSTANT, dwARG0, dwARG1, dwARG2;
struct CPed* pPed = pSAMP->g_Players->m_pObject[i]->m_pPlayer->m_pPed->m_pGamePed;
m_pDev->GetTextureStageState(0, D3DTSS_CONSTANT, &dwCONSTANT);
m_pDev->GetTextureStageState(0, D3DTSS_COLORARG0, &dwARG0);
m_pDev->GetTextureStageState(0, D3DTSS_COLORARG1, &dwARG1);
m_pDev->GetTextureStageState(0, D3DTSS_COLORARG2, &dwARG2);

m_pDev->SetTextureStageState(0, D3DTSS_CONSTANT, floatToHex(colors->PlayerChamsColor));
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG0, D3DTA_CONSTANT);
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CONSTANT);

pPed->Render();

m_pDev->SetTextureStageState(0, D3DTSS_CONSTANT, dwCONSTANT);
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG0, dwARG0);
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG1, dwARG1);
m_pDev->SetTextureStageState(0, D3DTSS_COLORARG2, dwARG2);
 
  • Нравится
Реакции: loganhackerdff

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
Кстати выше - не самое лучшее решение. Лучше хукать DrawIndexedPrimitive в пайплайне рендера педов(0x761142) и выставлять цвет пикселей через константы или пиксельный шейдер. Пример:
C:
sampler2D tex0 : register(s0);
extern float3 dy: register(c0);

float4 main(float2 tc : TEXCOORD0) : COLOR
{
    return tex2D(tex0, tc) * float4(dy[0], dy[1], dy[2], 1.0);
}
C++:
{
    HRSRC hsrc = FindResourceW(reinterpret_cast<HMODULE>(hmdl), MAKEINTRESOURCEW(IDR_HLSL2), L"HLSL");
    PVOID shader = LockResource(LoadResource(reinterpret_cast<HMODULE>(hmdl), hsrc));
    pDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &pPixelShader);
}
C++:
pDevice->SetPixelShader(pPixelShader);
// Rainbow lol
if (bTact) {
    HSVtoRGB(RGB[0], RGB[1], RGB[2], color[0], color[1], color[2]);
    color[0] += 2.0f;
    if (color[0] >= 360.0f) color[0] -= 360.0f;
    bTact = false;
}
pDevice->SetPixelShaderConstantF(0, RGB, 1);
fpHkDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDevice->SetPixelShader(nullptr);
return D3D_OK;
 
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
520
Кстати выше - не самое лучшее решение. Лучше хукать DrawIndexedPrimitive в пайплайне рендера педов(0x761142) и выставлять цвет пикселей через константы или пиксельный шейдер. Пример:
C:
sampler2D tex0 : register(s0);
extern float3 dy: register(c0);

float4 main(float2 tc : TEXCOORD0) : COLOR
{
    return tex2D(tex0, tc) * float4(dy[0], dy[1], dy[2], 1.0);
}
C++:
{
    HRSRC hsrc = FindResourceW(reinterpret_cast<HMODULE>(hmdl), MAKEINTRESOURCEW(IDR_HLSL2), L"HLSL");
    PVOID shader = LockResource(LoadResource(reinterpret_cast<HMODULE>(hmdl), hsrc));
    pDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &pPixelShader);
}
C++:
pDevice->SetPixelShader(pPixelShader);
// Rainbow lol
if (bTact) {
    HSVtoRGB(RGB[0], RGB[1], RGB[2], color[0], color[1], color[2]);
    color[0] += 2.0f;
    if (color[0] >= 360.0f) color[0] -= 360.0f;
    bTact = false;
}
pDevice->SetPixelShaderConstantF(0, RGB, 1);
fpHkDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDevice->SetPixelShader(nullptr);
return D3D_OK;
а как понять что рисуется полигон из модели педа
 

loganhackerdff

Известный
868
520
Кстати выше - не самое лучшее решение. Лучше хукать DrawIndexedPrimitive в пайплайне рендера педов(0x761142) и выставлять цвет пикселей через константы или пиксельный шейдер. Пример:
C:
sampler2D tex0 : register(s0);
extern float3 dy: register(c0);

float4 main(float2 tc : TEXCOORD0) : COLOR
{
    return tex2D(tex0, tc) * float4(dy[0], dy[1], dy[2], 1.0);
}
C++:
{
    HRSRC hsrc = FindResourceW(reinterpret_cast<HMODULE>(hmdl), MAKEINTRESOURCEW(IDR_HLSL2), L"HLSL");
    PVOID shader = LockResource(LoadResource(reinterpret_cast<HMODULE>(hmdl), hsrc));
    pDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &pPixelShader);
}
C++:
pDevice->SetPixelShader(pPixelShader);
// Rainbow lol
if (bTact) {
    HSVtoRGB(RGB[0], RGB[1], RGB[2], color[0], color[1], color[2]);
    color[0] += 2.0f;
    if (color[0] >= 360.0f) color[0] -= 360.0f;
    bTact = false;
}
pDevice->SetPixelShaderConstantF(0, RGB, 1);
fpHkDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDevice->SetPixelShader(nullptr);
return D3D_OK;
я сделал шейдер с расширение .hlsl как ресурс его вроде добавил
но код крашит
C++:
        HRSRC hsrc = FindResourceW(g::instance, MAKEINTRESOURCEW(101), L"HLSL");
        PVOID shader = LockResource(LoadResource(g::instance, hsrc));
        g::pDXDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &m_d3d9Shader);

В дебугере hsrc = NULL shader тоже
ошибки ещё сыпит если шейдер в проекте в сборке
 

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
я сделал шейдер с расширение .hlsl как ресурс его вроде добавил
но код крашит
C++:
        HRSRC hsrc = FindResourceW(g::instance, MAKEINTRESOURCEW(101), L"HLSL");
        PVOID shader = LockResource(LoadResource(g::instance, hsrc));
        g::pDXDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &m_d3d9Shader);

В дебугере hsrc = NULL shader тоже
ошибки ещё сыпит если шейдер в проекте в сборке
PixelShader 2.0 ставь в настройках компилятора
 
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
520
я сделал шейдер с расширение .hlsl как ресурс его вроде добавил
но код крашит
C++:
        HRSRC hsrc = FindResourceW(g::instance, MAKEINTRESOURCEW(101), L"HLSL");
        PVOID shader = LockResource(LoadResource(g::instance, hsrc));
        g::pDXDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &m_d3d9Shader);

В дебугере hsrc = NULL shader тоже
ошибки ещё сыпит если шейдер в проекте в сборке
шейдер не компилиться, онлайн компилятором тоже