Object Chams Directx

ChаtGPT

Активный
Автор темы
366
89
Версия MoonLoader
.026-beta
Как сделать чамс для объекта? Видел такое реализовали для заливки скинов, а для объектов можно?
Где-то видел скрипт, там и машины и объекты заливались, но потерял его :/

Такое видел, но не работает
Lua:
unction onD3DPresent()
    if not sampIsScoreboardOpen() and not isPauseMenuActive() then
        for key, color in pairs(ChamsQuery) do
            local object = getCarPointer(key)
            if object ~= 0 then
                --ColorFill(objectX, objectY, objectZ, objectWidth, objectHeight, fillColor)
                GetTextureStageState(pDevice, 0, 32, dwConstant)
                GetTextureStageState(pDevice, 0, 26, dwARG0)
                GetTextureStageState(pDevice, 0, 2,  dwARG1)
                GetTextureStageState(pDevice, 0, 3,  dwARG2)

                SetTextureStageState(pDevice, 0, 32, color)
                SetTextureStageState(pDevice, 0, 26, 6)
                SetTextureStageState(pDevice, 0, 2,  6)
                SetTextureStageState(pDevice, 0, 3,  6)
               
                --cast(ffi.cast("void*", object))
             
                SetTextureStageState(pDevice, 0, 32, dwConstant[0])
                SetTextureStageState(pDevice, 0, 26, dwARG0[0])
                SetTextureStageState(pDevice, 0, 2,  dwARG1[0])
                SetTextureStageState(pDevice, 0, 3,  dwARG2[0])
               
            end
        end

        -- Здесь определите координаты и размеры объекта с ID 50
        --local objectID = 355
        --local objectX, objectY, objectZ = getObjectCoordinates(objectID)
        --local objectWidth = 2.0 -- Ширина объекта
        --local objectHeight = 2.0 -- Высота объекта

        -- Установите цвет заливки и нарисуйте объект
       -- local fillColor = 0xFFFF0000 -- Красный цвет (ARGB)
        --device:ColorFill(objectX, objectY, objectZ, objectWidth, objectHeight, fillColor)
    end
end

up
 
Последнее редактирование:
  • Bug
Реакции: Gorskin

ChаtGPT

Активный
Автор темы
366
89
up
Проблема ещё не решена, просьба у тех кто за это шарит написать хоть какие-то подсказки. Я в поиске искал различную информацию связанную с рендером directx, по ключевым словам DirectX, onD3DPresent(), pDevice, getObjectPointer, GetTextureStageState, SetTextureStageState но информации вообще практически нету. Пытался я переделать чамсы педов под чамсы объектов, но не понимаю как же нужно рендерить объект.
PLAYER CHAMS:
local lffi, ffi = pcall(require, 'ffi') assert(lffi, 'not found lib ffi')

ffi.cdef([[
    typedef unsigned long DWORD;

    struct d3ddeviceVTBL {
        void *QueryInterface;
        void *AddRef;
        void *Release;
        void *TestCooperativeLevel;
        void *GetAvailableTextureMem;
        void *EvictManagedResources;
        void *GetDirect3D;
        void *GetDeviceCaps;
        void *GetDisplayMode;
        void *GetCreationParameters;
        void *SetCursorProperties;
        void *SetCursorPosition;
        void *ShowCursor;
        void *CreateAdditionalSwapChain;
        void *GetSwapChain;
        void *GetNumberOfSwapChains;
        void *Reset;
        void *Present;
        void *GetBackBuffer;
        void *GetRasterStatus;
        void *SetDialogBoxMode;
        void *SetGammaRamp;
        void *GetGammaRamp;
        void *CreateTexture;
        void *CreateVolumeTexture;
        void *CreateCubeTexture;
        void *CreateVertexBuffer;
        void *CreateIndexBuffer;
        void *CreateRenderTarget;
        void *CreateDepthStencilSurface;
        void *UpdateSurface;
        void *UpdateTexture;
        void *GetRenderTargetData;
        void *GetFrontBufferData;
        void *StretchRect;
        void *ColorFill;
        void *CreateOffscreenPlainSurface;
        void *SetRenderTarget;
        void *GetRenderTarget;
        void *SetDepthStencilSurface;
        void *GetDepthStencilSurface;
        void *BeginScene;
        void *EndScene;
        void *Clear;
        void *SetTransform;
        void *GetTransform;
        void *MultiplyTransform;
        void *SetViewport;
        void *GetViewport;
        void *SetMaterial;
        void *GetMaterial;
        void *SetLight;
        void *GetLight;
        void *LightEnable;
        void *GetLightEnable;
        void *SetClipPlane;
        void *GetClipPlane;
        void *SetRenderState;
        void *GetRenderState;
        void *CreateStateBlock;
        void *BeginStateBlock;
        void *EndStateBlock;
        void *SetClipStatus;
        void *GetClipStatus;
        void *GetTexture;
        void *SetTexture;
        void *GetTextureStageState;
        void *SetTextureStageState;
        void *GetSamplerState;
        void *SetSamplerState;
        void *ValidateDevice;
        void *SetPaletteEntries;
        void *GetPaletteEntries;
        void *SetCurrentTexturePalette;
        void *GetCurrentTexturePalette;
        void *SetScissorRect;
        void *GetScissorRect;
        void *SetSoftwareVertexProcessing;
        void *GetSoftwareVertexProcessing;
        void *SetNPatchMode;
        void *GetNPatchMode;
        void *DrawPrimitive;
        void* DrawIndexedPrimitive;
        void *DrawPrimitiveUP;
        void *DrawIndexedPrimitiveUP;
        void *ProcessVertices;
        void *CreateVertexDeclaration;
        void *SetVertexDeclaration;
        void *GetVertexDeclaration;
        void *SetFVF;
        void *GetFVF;
        void *CreateVertexShader;
        void *SetVertexShader;
        void *GetVertexShader;
        void *SetVertexShaderConstantF;
        void *GetVertexShaderConstantF;
        void *SetVertexShaderConstantI;
        void *GetVertexShaderConstantI;
        void *SetVertexShaderConstantB;
        void *GetVertexShaderConstantB;
        void *SetStreamSource;
        void *GetStreamSource;
        void *SetStreamSourceFreq;
        void *GetStreamSourceFreq;
        void *SetIndices;
        void *GetIndices;
        void *CreatePixelShader;
        void *SetPixelShader;
        void *GetPixelShader;
        void *SetPixelShaderConstantF;
        void *GetPixelShaderConstantF;
        void *SetPixelShaderConstantI;
        void *GetPixelShaderConstantI;
        void *SetPixelShaderConstantB;
        void *GetPixelShaderConstantB;
        void *DrawRectPatch;
        void *DrawTriPatch;
        void *DeletePatch;
    };

    struct d3ddevice {
        struct d3ddeviceVTBL** vtbl;
    };
]])


function main()
    AddPlayerToChamsQuery(PLAYER_PED, 0xFFAABB00)
    wait(-1)
end

local ChamsQuery = {}

function AddPlayerToChamsQuery(handle, color)
    ChamsQuery[handle] = color
end

function RemoveFromChamsQuery(handle)
    ChamsQuery.remove(handle)
end

function onD3DPresent()
    local pDevice = ffi.cast("struct d3ddevice*", 0xC97C28)
    local SetTextureStageState =  ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned long)", pDevice.vtbl[0].SetTextureStageState)
    local GetTextureStageState =  ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned int*)", pDevice.vtbl[0].GetTextureStageState)

    local dwConstant = ffi.new("unsigned int[1]")
    local dwARG0 = ffi.new("unsigned int[1]")
    local dwARG1 = ffi.new("unsigned int[1]")
    local dwARG2 = ffi.new("unsigned int[1]")
    for key, color in pairs(ChamsQuery) do
        local pPed = getCharPointer(key)
        if pPed ~= 0 then
            GetTextureStageState(pDevice, 0, 32, dwConstant)
            GetTextureStageState(pDevice, 0, 26, dwARG0)
            GetTextureStageState(pDevice, 0, 2,  dwARG1)
            GetTextureStageState(pDevice, 0, 3,  dwARG2)
            SetTextureStageState(pDevice, 0, 32, color)
            SetTextureStageState(pDevice, 0, 26, 6)
            SetTextureStageState(pDevice, 0, 2,  6)
            SetTextureStageState(pDevice, 0, 3,  6)
        
            ffi.cast("void(__thiscall*)(void*)", 0x59F180)(ffi.cast("void*", pPed))
        
            SetTextureStageState(pDevice, 0, 32, dwConstant[0])
            SetTextureStageState(pDevice, 0, 26, dwARG0[0])
            SetTextureStageState(pDevice, 0, 2,  dwARG1[0])
            SetTextureStageState(pDevice, 0, 3,  dwARG2[0])
        end
    end
end

Данный код не работает, или крашит при появлении объекта, это из-за строки ffi.cast("void(__thiscall*)(void*)", 0x59F180)(ffi.cast("void*", pObj)), если её убрать, крашить не будет, но и работать ничего не будет))(ошибки не вылазят), я так понял это из-за адреса 0x59F180 и он только для педов, а для объектов как :/


Lua:
local lffi, ffi = pcall(require, 'ffi') assert(lffi, 'not found lib ffi')

ffi.cdef([[
    typedef unsigned long DWORD;

    struct d3ddeviceVTBL {
        void *QueryInterface;
        void *AddRef;
        void *Release;
        void *TestCooperativeLevel;
        void *GetAvailableTextureMem;
        void *EvictManagedResources;
        void *GetDirect3D;
        void *GetDeviceCaps;
        void *GetDisplayMode;
        void *GetCreationParameters;
        void *SetCursorProperties;
        void *SetCursorPosition;
        void *ShowCursor;
        void *CreateAdditionalSwapChain;
        void *GetSwapChain;
        void *GetNumberOfSwapChains;
        void *Reset;
        void *Present;
        void *GetBackBuffer;
        void *GetRasterStatus;
        void *SetDialogBoxMode;
        void *SetGammaRamp;
        void *GetGammaRamp;
        void *CreateTexture;
        void *CreateVolumeTexture;
        void *CreateCubeTexture;
        void *CreateVertexBuffer;
        void *CreateIndexBuffer;
        void *CreateRenderTarget;
        void *CreateDepthStencilSurface;
        void *UpdateSurface;
        void *UpdateTexture;
        void *GetRenderTargetData;
        void *GetFrontBufferData;
        void *StretchRect;
        void *ColorFill;
        void *CreateOffscreenPlainSurface;
        void *SetRenderTarget;
        void *GetRenderTarget;
        void *SetDepthStencilSurface;
        void *GetDepthStencilSurface;
        void *BeginScene;
        void *EndScene;
        void *Clear;
        void *SetTransform;
        void *GetTransform;
        void *MultiplyTransform;
        void *SetViewport;
        void *GetViewport;
        void *SetMaterial;
        void *GetMaterial;
        void *SetLight;
        void *GetLight;
        void *LightEnable;
        void *GetLightEnable;
        void *SetClipPlane;
        void *GetClipPlane;
        void *SetRenderState;
        void *GetRenderState;
        void *CreateStateBlock;
        void *BeginStateBlock;
        void *EndStateBlock;
        void *SetClipStatus;
        void *GetClipStatus;
        void *GetTexture;
        void *SetTexture;
        void *GetTextureStageState;
        void *SetTextureStageState;
        void *GetSamplerState;
        void *SetSamplerState;
        void *ValidateDevice;
        void *SetPaletteEntries;
        void *GetPaletteEntries;
        void *SetCurrentTexturePalette;
        void *GetCurrentTexturePalette;
        void *SetScissorRect;
        void *GetScissorRect;
        void *SetSoftwareVertexProcessing;
        void *GetSoftwareVertexProcessing;
        void *SetNPatchMode;
        void *GetNPatchMode;
        void *DrawPrimitive;
        void* DrawIndexedPrimitive;
        void *DrawPrimitiveUP;
        void *DrawIndexedPrimitiveUP;
        void *ProcessVertices;
        void *CreateVertexDeclaration;
        void *SetVertexDeclaration;
        void *GetVertexDeclaration;
        void *SetFVF;
        void *GetFVF;
        void *CreateVertexShader;
        void *SetVertexShader;
        void *GetVertexShader;
        void *SetVertexShaderConstantF;
        void *GetVertexShaderConstantF;
        void *SetVertexShaderConstantI;
        void *GetVertexShaderConstantI;
        void *SetVertexShaderConstantB;
        void *GetVertexShaderConstantB;
        void *SetStreamSource;
        void *GetStreamSource;
        void *SetStreamSourceFreq;
        void *GetStreamSourceFreq;
        void *SetIndices;
        void *GetIndices;
        void *CreatePixelShader;
        void *SetPixelShader;
        void *GetPixelShader;
        void *SetPixelShaderConstantF;
        void *GetPixelShaderConstantF;
        void *SetPixelShaderConstantI;
        void *GetPixelShaderConstantI;
        void *SetPixelShaderConstantB;
        void *GetPixelShaderConstantB;
        void *DrawRectPatch;
        void *DrawTriPatch;
        void *DeletePatch;
    };

    struct d3ddevice {
        struct d3ddeviceVTBL** vtbl;
    };
]])


function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        for k, v in pairs(getAllObjects()) do
            if isObjectOnScreen(v) then
                AddObjectToChams(v, 0xFFAABB00)
            end
        end
        
    end
end

local ObjectChams = {}

function AddObjectToChams(objHandle, color)
    if ObjectChams[objHandle] == nil then
        ObjectChams[objHandle] = color
    end
end

function RemoveObjectFromChams(objHandle)
    ObjectChams[objHandle] = nil
end

function onD3DPresent()
    local pDevice = ffi.cast("struct d3ddevice*", 0xC97C28)
    local SetTextureStageState = ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned long)", pDevice.vtbl[0].SetTextureStageState)
    local GetTextureStageState = ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned int*)", pDevice.vtbl[0].GetTextureStageState)

    local dwConstant = ffi.new("unsigned int[1]")
    local dwARG0 = ffi.new("unsigned int[1]")
    local dwARG1 = ffi.new("unsigned int[1]")
    local dwARG2 = ffi.new("unsigned int[1]")

    for objHandle, color in pairs(ObjectChams) do
        local pObj = getObjectPointer(objHandle)--указатель на объект
        --print('Object handle:', objHandle, 'Pointer:', pObj)
        if pObj ~= 0 then
            GetTextureStageState(pDevice, 0, 32, dwConstant)
            GetTextureStageState(pDevice, 0, 26, dwARG0)
            GetTextureStageState(pDevice, 0, 2, dwARG1)
            GetTextureStageState(pDevice, 0, 3, dwARG2)
            SetTextureStageState(pDevice, 0, 32, color)
            SetTextureStageState(pDevice, 0, 26, 6)
            SetTextureStageState(pDevice, 0, 2, 6)
            SetTextureStageState(pDevice, 0, 3, 6)

            ffi.cast("void(__thiscall*)(void*)", 0x59F180)(ffi.cast("void*", pObj))

            SetTextureStageState(pDevice, 0, 32, dwConstant[0])
            SetTextureStageState(pDevice, 0, 26, dwARG0[0])
            SetTextureStageState(pDevice, 0, 2, dwARG1[0])
            SetTextureStageState(pDevice, 0, 3, dwARG2[0])
        end
    end
end

Или эту хрень только на плюсах сделать можно?
Но если на луа на педах реализовали, то и на объектах получится

up
 
Последнее редактирование:

ChаtGPT

Активный
Автор темы
366
89
Может ты этого хотел?
Не-а, это чамсы педов, рендер шейдерной оболочки directx на текстуры игроков. Я пытаюсь переделать это дело для объектов, но на форуме не нашёл полезной информации, искал по различным тегам. Вместо указателя на педа, я поставил указатель на объект (getObjectPointer), но проблема в этой структуре ffi.cast("void(__thiscall*)(void*)", 0x59F180)(ffi.cast("void*", pObj)), как я понял, адрес 0x59F180 нужен другой, для объектов, или кастить нужно правильно, но как я написал, информацию я чет не нашёл, а какие-то горскины ставят жуки...

up
 
Последнее редактирование:
  • Bug
Реакции: Gorskin

Gorskin

♥ Love Lua ♥
Проверенный
1,332
1,160
Возможно, что на данный вопрос знает ответ пользователь @Gorskin
Я знаю, ему нужен адрес на указатель object, и правильный прототип для него

Уже бы сам нашел в ida и не апал бы тему каждый день, пусть ждёт когда на выходных дома буду, поищу мб.
 
  • Грустно
  • Нравится
Реакции: sizeoftrickster и ChаtGPT

ChаtGPT

Активный
Автор темы
366
89
up

Ещё раз здравствуйте, ещё раз поднимаю тему, т.к моя проблема ещё не была решена, как её решить - я не знаю, где искать информацию соответственно тоже, потому что форум уже по разным тегам перерыл.

Мне помогал один хороший человек разобраться с этим, он вроде как понимает что-то в этом. Получилось у нас сделать чамс объекта хуком Jmp hook, в пресенте не получилось, собственно чамс через хук не отображается поверх всего, как это делается в onD3DPresent(). Думали, что проблема в адресе 0x59F180, но в хуке он работает, значит не в нём проблема, кастим не правильно, или указатель не тот? Но вот делали в пресенте так же как и в хуке, не работало, или крашило. Ну и идеи закончились, не знаю что делать дальше, тему апаю уже пол месяца, никто не отвечает.

чамс jmp хуком:
-- использование
--objectsCham[8038] = 0xFFFFFFFF
local objectsCham = (function()
  local this = {}

  local pDevice = ffi.cast("struct d3ddevice*", 0xC97C28)
  local SetTextureStageState =  ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned long)", pDevice.vtbl[0].SetTextureStageState)
  local GetTextureStageState =  ffi.cast("long(__stdcall*)(void*, unsigned long, unsigned long, unsigned int*)", pDevice.vtbl[0].GetTextureStageState)

  local dwConstant = ffi.new("unsigned int[1]")
  local dwARG0 = ffi.new("unsigned int[1]")
  local dwARG1 = ffi.new("unsigned int[1]")
  local dwARG2 = ffi.new("unsigned int[1]")

  local function renderHook(void)
    local p_object = tonumber(ffi.cast("uintptr_t", void))
    local handle = getObjectPointerHandle(p_object)

    if handle ~= -1 then
      local color = this[getObjectModel(handle)]
      if color then
        GetTextureStageState(pDevice, 0, 32, dwConstant)
        GetTextureStageState(pDevice, 0, 26, dwARG0)
        GetTextureStageState(pDevice, 0, 2,  dwARG1)
        GetTextureStageState(pDevice, 0, 3,  dwARG2)

        SetTextureStageState(pDevice, 0, 32, color)
        SetTextureStageState(pDevice, 0, 26, 6)
        SetTextureStageState(pDevice, 0, 2,  6)
        SetTextureStageState(pDevice, 0, 3,  6)

        renderHook(void) -- оригинальный рендер
        
        SetTextureStageState(pDevice, 0, 32, dwConstant[0])
        SetTextureStageState(pDevice, 0, 26, dwARG0[0])
        SetTextureStageState(pDevice, 0, 2,  dwARG1[0])
        SetTextureStageState(pDevice, 0, 3,  dwARG2[0])
        return
      end
    end

    renderHook(void)
  end

  renderHook = hook.new("void(__thiscall*)(void*)", renderHook, 0x59F180)

  return this
end)()

1713098734602.png


Может быть, ты знаешь? 😟 @ARMOR

up

А может быть ВЫ знаете? @why ega
 
Последнее редактирование:
  • Вау
Реакции: whyega52