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

CleanLegend

Известный
Всефорумный модератор
476
929
Актуально, нужна помощь :(
Хукаешь present, reset,wnd_proc.
Если ты это хочешь сделать с помощью SF, то регаешь callback на present,reset.
Проводишь инициализацию в present с помощь imgui_init,в ресет добавляешь перезагрузку, в wndproc ImGui_ImplDX9_WndProcHandler.
В проекте достаточно, что бы все это сделать.
 

Шурик

Активный
216
42
В чём проблема? Не грузит весь список (1-2 элемента только)
C++:
static int fraction_current = fraction;
        const char* fractionList[] = {
            to_utf8("Не выбрано").c_str(),
            to_utf8("Полиция г.Los-Santos").c_str(),
            to_utf8("Полиция г.San-Fierro").c_str(),
            to_utf8("Полиция г.Las-Venturas").c_str(),
            to_utf8("Федеральное Бюро Расследований").c_str()
        };
        if (ImGui::Combo("fraction", &fraction_current, fractionList, IM_ARRAYSIZE(fractionList)))
            fraction = fraction_current;
 

_Vine_

Активный
154
57
В чём проблема? Не грузит весь список (1-2 элемента только)
C++:
static int fraction_current = fraction;
        const char* fractionList[] = {
            to_utf8("Не выбрано").c_str(),
            to_utf8("Полиция г.Los-Santos").c_str(),
            to_utf8("Полиция г.San-Fierro").c_str(),
            to_utf8("Полиция г.Las-Venturas").c_str(),
            to_utf8("Федеральное Бюро Расследований").c_str()
        };
        if (ImGui::Combo("fraction", &fraction_current, fractionList, IM_ARRAYSIZE(fractionList)))
            fraction = fraction_current;
ocornut/imgui(https://github.com/ocornut/imgui/blob/master/imgui_demo.cpp)
В imgui_demo.cpp с помощью поиска ищещь Imgui::Combo и смотришь как правильно его юзать.

Хукаешь present, reset,wnd_proc.
Если ты это хочешь сделать с помощью SF, то регаешь callback на present,reset.
Проводишь инициализацию в present с помощь imgui_init,в ресет добавляешь перезагрузку, в wndproc ImGui_ImplDX9_WndProcHandler.
В проекте достаточно, что бы все это сделать.
Делал такую штуку без СФ апи, проблема в том, что если в игру будет загружено два плагина с подрбным хуком пресент и ресет - краш.
Хук через виртуальную таблицу методов. С чем может быть связан краш, как исправить?
И еще, можно ли искать d3dDevice гташки с помощью сигнатуры?(не надо писать, что есть статик. Указатель)
Сигратура будет работаь в разных версиях гта, отличается ли сигнатура в одиночной игре и в сампе?
 

_Vine_

Активный
154
57
Изначально делал строго по примеру и не получалось, вот и обратился сюда.
C++:
        static int fraction_current = 0;
        const char *list = {
            u8"Не выбрано\0"
            u8"Полиция г.Los-Santos\0"
            u8"Полиция г.San-Fierro\0"
            u8"Полиция г.Las-Venturas\0"
            u8"Федеральное Бюро Расследований\0"
        };
        ImGui::Combo(u8"Фракция", &fraction_current, list, sizeof(list));
 
Последнее редактирование:

CleanLegend

Известный
Всефорумный модератор
476
929
Делал такую штуку без СФ апи, проблема в том, что если в игру будет загружено два плагина с подрбным хуком пресент и ресет - краш.
Хук через виртуальную таблицу методов. С чем может быть связан краш, как исправить?
И еще, можно ли искать d3dDevice гташки с помощью сигнатуры?(не надо писать, что есть статик. Указатель)
Сигратура будет работаь в разных версиях гта, отличается ли сигнатура в одиночной игре и в сампе?
Попробуй другой метод хука. Насчет поиска device, можешь посмотреть как в собейте это реализуется или через findpattern
 

SAMP.ASI

Известный
223
53
Решил перевести из lua в с++

C:
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
DWORD pid;
DWORD ped = 0xb6f5f0;
DWORD p_target;
DWORD p_player;
DWORD test;
DWORD intS;
int main() {
   HWND hWnd = FindWindowA(0, "GTA:SA:MP");
   GetWindowThreadProcessId(hWnd, &pid);
   HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid);
    HANDLE pwHandle = OpenProcess(PROCESS_VM_WRITE, FALSE, pid);
   //ReadProcessMemory(pHandle, (LPVOID)0xb6f5f0, &p_player, 4, 0);
   while (true) {
      Sleep(500);

        ReadProcessMemory(pHandle, (LPVOID)(0xB6F3B8), &p_player, 4, 0);
        p_player = p_player + 0x79C;
        ReadProcessMemory(pHandle, (LPVOID)p_player, &intS, 4, 0);

        if(intS>0){
            DWORD lol = 0xB73458;
            lol=lol + 34;
            int temp = 255;
            WriteProcessMemory(pwHandle, (LPVOID)lol, &temp, 4, 0);

            Sleep(100);

            DWORD inet;
            ReadProcessMemory(pHandle, (LPVOID)0xB6F3B8, &inet, 4, 0);
            inet = inet + 0x79C;
            DWORD temp2 = 0;
            WriteProcessMemory(pwHandle, (LPVOID)inet, &temp2, 4, 0);
        }
   }
   return 0;
}
Из этого
Lua:
script_name("Trigger Bot")
script_author("iTz_WEEZY")
script_dependencies("SAMP")
require "lib.moonloader"

local trigger = false

function main()
if not isSampLoaded() and isSampAvailable() then return end
sampRegisterChatCommand("trigger", activ)
while true do
    wait(0)
        if trigger and not isCharOnAnyBike(playerPed) and not isCharDead(playerPed) then
            local int = readMemory(0xB6F3B8, 4, 0)
            int=int + 0x79C
            local intS = readMemory(int, 4, 0)
                if intS > 0
                then
                local lol = 0xB73458
                lol=lol + 34
                writeMemory(lol, 4, 255, 0)
                wait(100)
                local int = readMemory(0xB6F3B8, 4, 0)
                int=int + 0x79C
                writeMemory(int, 4, 0, 0)
            end
        end
    end
end

function activ()
if trigger then
    trigger = false
    else
    trigger = true
    end
end

Что я делаю не так?
 

iAmerican

Известный
Друг
614
257
Есть ли в SAMPFUNCS, что-то по типу такого
C++:
void GameText(const char* szText, int iTime, signed int iStyle)
    {
        typedef void(__stdcall* GameText_t)(const char*, int, signed int);
        GameText_t pGameText = (GameText_t)(g_dwSAMP + 0x9C2C0);
        return pGameText(szText, iTime, iStyle);
    }
using :
GameText("~r~my text!", 1000, 5);

Решил перевести из lua в с++

C:
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
DWORD pid;
DWORD ped = 0xb6f5f0;
DWORD p_target;
DWORD p_player;
DWORD test;
DWORD intS;
int main() {
   HWND hWnd = FindWindowA(0, "GTA:SA:MP");
   GetWindowThreadProcessId(hWnd, &pid);
   HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid);
    HANDLE pwHandle = OpenProcess(PROCESS_VM_WRITE, FALSE, pid);
   //ReadProcessMemory(pHandle, (LPVOID)0xb6f5f0, &p_player, 4, 0);
   while (true) {
      Sleep(500);

        ReadProcessMemory(pHandle, (LPVOID)(0xB6F3B8), &p_player, 4, 0);
        p_player = p_player + 0x79C;
        ReadProcessMemory(pHandle, (LPVOID)p_player, &intS, 4, 0);

        if(intS>0){
            DWORD lol = 0xB73458;
            lol=lol + 34;
            int temp = 255;
            WriteProcessMemory(pwHandle, (LPVOID)lol, &temp, 4, 0);

            Sleep(100);

            DWORD inet;
            ReadProcessMemory(pHandle, (LPVOID)0xB6F3B8, &inet, 4, 0);
            inet = inet + 0x79C;
            DWORD temp2 = 0;
            WriteProcessMemory(pwHandle, (LPVOID)inet, &temp2, 4, 0);
        }
   }
   return 0;
}
Из этого
Lua:
script_name("Trigger Bot")
script_author("iTz_WEEZY")
script_dependencies("SAMP")
require "lib.moonloader"

local trigger = false

function main()
if not isSampLoaded() and isSampAvailable() then return end
sampRegisterChatCommand("trigger", activ)
while true do
    wait(0)
        if trigger and not isCharOnAnyBike(playerPed) and not isCharDead(playerPed) then
            local int = readMemory(0xB6F3B8, 4, 0)
            int=int + 0x79C
            local intS = readMemory(int, 4, 0)
                if intS > 0
                then
                local lol = 0xB73458
                lol=lol + 34
                writeMemory(lol, 4, 255, 0)
                wait(100)
                local int = readMemory(0xB6F3B8, 4, 0)
                int=int + 0x79C
                writeMemory(int, 4, 0, 0)
            end
        end
    end
end

function activ()
if trigger then
    trigger = false
    else
    trigger = true
    end
end

Что я делаю не так?
А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
 
Последнее редактирование модератором:

Ed1k

Новичок
7
0
C++:
void GameText(const char* szText, int iTime, signed int iStyle)
    {
        typedef void(__stdcall* GameText_t)(const char*, int, signed int);
        GameText_t pGameText = (GameText_t)(g_dwSAMP + 0x9C2C0);
        return pGameText(szText, iTime, iStyle);
    }
using :
GameText("~r~my text!", 1000, 5);


А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
g_dwSAMP?
 

SAMP.ASI

Известный
223
53
C++:
void GameText(const char* szText, int iTime, signed int iStyle)
    {
        typedef void(__stdcall* GameText_t)(const char*, int, signed int);
        GameText_t pGameText = (GameText_t)(g_dwSAMP + 0x9C2C0);
        return pGameText(szText, iTime, iStyle);
    }
using :
GameText("~r~my text!", 1000, 5);


А что происходит , можно подробнее? у тебя цикл раз в пол секунды идет. Может из за этого и не видишь результата.
Ничего не происходит, по идее он должен стрелять если наведен на игрока
 

iAmerican

Известный
Друг
614
257
Замени g_dwSAMP на SF->getSAMP()->dwSAMPaddr.
Как то так, я уже точно не помню , порыскай.

Ничего не происходит, по идее он должен стрелять если наведен на игрока
Проверяй всё ли правильно получает , если все там нормально. Проблема в нажатии клавиши.
 
Последнее редактирование модератором: