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

Musaigen

abobusnik
Проверенный
1,585
1,310
Также видел такую функцию в полезных сниппетах для C++
C++:
template<typename T>
void WriteMemory(void* address, T value)
{
    DWORD protect;
    
    VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &protect);
    *reinterpret_cast<T*>(address) = value;
    VirtualProtect(address, sizeof(T), protect, &protect); // вместо &protect можно и nullptr
}
mem.fill(sampGetChatInfoPtr() + 306, 0x0, 25200)
C++:
void MemoryFill(void* address, int value, unsigned int size)
{
    DWORD protect;
    
    VirtualProtect(address, size, PAGE_EXECUTE_READWRITE, &protect);
    memset(address, value, size);
    VirtualProtect(address, size, protect, &protect);
}

SF. Как правильно работать с памятью игры (видел гайды, но видимо что-то не то было либо я не понял), вот к примеру как это перевести в C++ из Lua
Lua:
local mem = require 'memory'
--
mem.fill(sampGetChatInfoPtr() + 306, 0x0, 25200)
mem.write(sampGetChatInfoPtr() + 306, 25562, 4, 0x0)
mem.write(sampGetChatInfoPtr() + 0x63DA, 1, 1)
C++:
void ClearChat()
{
    stChatInfo* chat = SF->getSAMP()->getChat();
    
    MemoryFill(&chat->chatEntry, 0, sizeof(stChatEntry) * 100);
    
    chat->m_iRedraw = 1;
}
Вроде бы этого достаточно.
 
  • Влюблен
Реакции: PanSeek

frosjkee

Активный
122
25
sampapi покежьте как правильно использовать
Lua:
[/B]
#include "main.h"


void __cdecl DLLProject(void* pArg)
{
    while (true)
    {
        Sleep(1);
        if (GetAsyncKeyState(VK_END))
        {
            while (GetAsyncKeyState(VK_END))
            {
                Sleep(1);
            }
            sampapi::v037r3::RefNetGame()->m_pSettings->m_bNoNametagsBehindWalls = false;
        }
    }
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) _beginthread(DLLProject, NULL, nullptr);
    return TRUE;
}
 

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,747
sampapi покежьте как правильно использовать
Lua:
[/B]
#include "main.h"


void __cdecl DLLProject(void* pArg)
{
    while (true)
    {
        Sleep(1);
        if (GetAsyncKeyState(VK_END))
        {
            while (GetAsyncKeyState(VK_END))
            {
                Sleep(1);
            }
            sampapi::v037r3::RefNetGame()->m_pSettings->m_bNoNametagsBehindWalls = false;
        }
    }
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) _beginthread(DLLProject, NULL, nullptr);
    return TRUE;
}
В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.
C++:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_END:
                {
                    sampapi::v037r3::RefNetGame()->m_pSettings->m_bNoNametagsBehindWalls = false;
                    break;
                }
            }
        }
    }
    return CallWindowProcA(WNDPROC(DLLProject.PrevWndFunc), hwnd, uMsg, wParam, lParam);
}
//WinAPI. Перерегистрировать WindowProc нужно
 
  • Нравится
Реакции: James Saula

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,734
4,737
В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.
из DllMain WNDPROC хук не поставишь, если аси лоадером подргужать, к тому моменту окно игры еще не создано
 

frosjkee

Активный
122
25
В C++ я конечно не силен, но что-то мне подсказывает, что тут можно не использовать поток.
C++:
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_END:
                {
                    sampapi::v037r3::RefNetGame()->m_pSettings->m_bNoNametagsBehindWalls = false;
                    break;
                }
            }
        }
    }
    return CallWindowProcA(WNDPROC(DLLProject.PrevWndFunc), hwnd, uMsg, wParam, lParam);
}
//WinAPI. Перерегистрировать WindowProc нужно
Спасибо за помощь друголек, однако я неправильно вызываю функцию в этом коде и я не знаю как.
 

Krisp

Новичок
23
1
Ребят, может кто помочь фиксануть аимбот к ближайшей кости? У меня некоторые проблемки, черканите в лс, тк код не маленький
 

bottom_text

Известный
675
318
Как включить и выключить нормально такой курсор для ImGui окна без plugin sdk? Код kin4stat'a отсюда не выключает его
1619465098536.png
 
Последнее редактирование:

Адский Дрочила)

Адский дрочер
Проверенный
288
479
Как включить и выключить нормально такой курсор для ImGui окна без plugin sdk? Код kin4stat'a отсюда не выключает его
Посмотреть вложение 94823
C++:
//enable
pSAMP->toggleSAMPCursor(1);
ImGui::GetIO().MouseDrawCursor = 1;
ImGui::GetIO().ConfigFlags &= ~ImGuiConfigFlags_NoMouseCursorChange;
//disable
pSAMP->toggleSAMPCursor(0);
ImGui::GetIO().MouseDrawCursor = 0;
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange;

toggleSAMPCursor
 
Последнее редактирование:
  • Нравится
Реакции: bottom_text

PanSeek

t.me/dailypanseek
Всефорумный модератор
899
1,747
SF. Как получить с радара определенную иконку? ID иконок - https://www.mta-resource.ru/wiki/article/id/13
Пробовал вот так: GAME->GetRadar()->GetMarker(RADAR_SPRITE_MAP_HERE); и вот так GAME->GetRadar()->GetMarker(2);
При взаимодействии иконки, он работал с иконками других игроков/транспорта которые возле меня.
Если я правильно понял, то я получаю не иконки, а маркеры (я думал что одно и тоже). Как я понял мне нужны спрайты, а их получить не могу, только SetSprite есть.
 
  • Нравится
Реакции: James Saula

Krisp

Новичок
23
1
У меня есть функция:
GetAimingPlayer:
void CAimbot::GetAimingPlayer()
{
    iTargetPlayer = -1;
    float fNearestDistance = 9999.0f;
// тут шлак бесполезный, смотри с нижнего комментария
    if (g_Config.g_Aimbot.bAimbot || g_Config.g_Aimbot.bSmooth || g_Config.g_Aimbot.bSilent || g_Config.g_Aimbot.bProAim)
    {
        CVector vecCamera, vecOrigin, vecTarget;
        Utils::getBonePosition(FindPlayerPed(), BONE_RIGHTWRIST, &vecOrigin);
        TheCamera.Find3rdPersonCamTargetVector(100.f, vecOrigin, &vecCamera, &vecTarget);

        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            if (!pSAMP->isPlayerStreamed(i))
                continue;

            CPed* pPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
            if (!pPed || !pPed->IsAlive())
                continue;

            if (g_Config.g_Aimbot.bTeamProtect && pSAMP->getPlayerColor(i) == pSAMP->getPlayerColor(pSAMP->getPlayers()->sLocalPlayerID))
                continue;

            if (!g_Config.g_Aimbot.bIgnoreEverything)
            {
                if (g_Config.g_Aimbot.bIgnoreAFK && pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->iAFKState == 2)
                    continue;

                float fTargetDistance = Math::vect3_dist(&pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.matrix[12], &pSAMP->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->base.matrix[12]);
                if (!g_Config.g_Aimbot.bIgnoreMaxDistance && fTargetDistance > fWeaponRange[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon])
                    continue;
            }
// Сам захват кости начинается отсюда
            for (auto iBone : iBoneList)
            {
                CVector vecBone, vecBoneScreen;
                Utils::getBonePosition(pPed, (ePedBones)iBone, &vecBone);
                Utils::CalcScreenCoors(&vecBone, &vecBoneScreen);
                if (vecBoneScreen.z < 1.0f)
                    continue;

                float fCentreDistance = Math::vect2_dist(&vecCrosshair, &vecBoneScreen);
                if (g_Config.g_Aimbot.bAimbot && fCentreDistance >= (float)g_Config.g_Aimbot.iAimbotConfig[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon][CRANGE] * 1.5f)
                    continue;

                if (!g_Config.g_Aimbot.bIgnoreEverything && !g_Config.g_Aimbot.bLockThroughObjects && !CWorld::GetIsLineOfSightClear(vecCamera, vecBone, true, true, false, true, true, true, false))
                    continue;

                if (fCentreDistance <= fNearestDistance)
                {
                    fNearestDistance = fCentreDistance;
                    iTargetPlayer = i; iTargetBone = iBone;
                    vecTargetBone = vecBoneScreen;
                    break;
                }
            }
        }
    }
}

Вот содержимое iBoneList[]:
C++:
static int iBoneList[]
{
    BONE_PELVIS1, BONE_PELVIS, BONE_SPINE1, BONE_UPPERTORSO, BONE_NECK,
    BONE_HEAD2, BONE_HEAD1, BONE_HEAD, BONE_RIGHTUPPERTORSO, BONE_RIGHTSHOULDER,
    BONE_RIGHTELBOW, BONE_LEFTUPPERTORSO, BONE_LEFTSHOULDER, BONE_LEFTELBOW,
    BONE_LEFTHIP, BONE_LEFTKNEE, BONE_RIGHTHIP, BONE_RIGHTKNEE,
};

И сама проблема в том, что при большом CRANGE - рендже аимбота, если первые 2-3 кости iBoneList[] в радиусе, то аим будет захватывать их, хотя по логике должен захватить ближайшую, подскажите пожалуйста, как это исправить :З
При маленьком все нормально захватывает.

Если нужно, то вот код Math::vect2_dist:

C++:
static float vect2_dist(CVector* point1, CVector* point2)
    {
        return sqrt(pow(point1->x - point2->x, 2) + pow(point1->y - point2->y, 2));
    }
Код взят отсюда -> https://www.blast.hk/threads/63079/
 
Последнее редактирование:

K_E_N_T

Новичок
9
0
Чем открывать код .sf .
И если можно гайды/тему на БХ по написанию sf плагинов в самп.
 
  • Злость
Реакции: GradoFomin

vbg

Известный
41
17
Чем открывать код .sf .
И если можно гайды/тему на БХ по написанию sf плагинов в самп.