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

writeline

Новичок
28
9
Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐



с++:
const float RadarWidth = 1.8f;   // NewWidth
const float RadarHeight = 1.8f;  // NewHeight

template<typename T>
bool SafeWrite(void* address, T value)
{
    DWORD oldProtect;
    if (VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect))
    {
        *reinterpret_cast<T*>(address) = value;
        VirtualProtect(address, sizeof(T), oldProtect, &oldProtect);
        return true;
    }
    return false;
}

void SetRadarSize()
{
    //height
    uintptr_t widthAddresses[] = { 0x5834C2, 0x58A449, 0x58A7E9, 0x58A840, 0x58A943, 0x58A99D };
    for (auto addr : widthAddresses)
        SafeWrite<float>(reinterpret_cast<void*>(addr), RadarWidth);

    //width
    uintptr_t heightAddresses[] = { 0x58A47D, 0x58A632, 0x58A6AB, 0x58A70E, 0x58A801, 0x58A8AB, 0x58A921, 0x58A9D5, 0x5834F6 };
    for (auto addr : heightAddresses)
        SafeWrite<float>(reinterpret_cast<void*>(addr), RadarHeight);
}

Крашит как только должен появится радар
 
Последнее редактирование:

Winstаl

Известный
1,002
414
Пробую изменить размеры радара, при открытии сцены игры крашит, в чём может быть проблема? 🧐



с++:
const float RadarWidth = 1.8f;   // NewWidth
const float RadarHeight = 1.8f;  // NewHeight

template<typename T>
bool SafeWrite(void* address, T value)
{
    DWORD oldProtect;
    if (VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect))
    {
        *reinterpret_cast<T*>(address) = value;
        VirtualProtect(address, sizeof(T), oldProtect, &oldProtect);
        return true;
    }
    return false;
}

void SetRadarSize()
{
    //height
    uintptr_t widthAddresses[] = { 0x5834C2, 0x58A449, 0x58A7E9, 0x58A840, 0x58A943, 0x58A99D };
    for (auto addr : widthAddresses)
        SafeWrite<float>(reinterpret_cast<void*>(addr), RadarWidth);

    //width
    uintptr_t heightAddresses[] = { 0x58A47D, 0x58A632, 0x58A6AB, 0x58A70E, 0x58A801, 0x58A8AB, 0x58A921, 0x58A9D5, 0x5834F6 };
    for (auto addr : heightAddresses)
        SafeWrite<float>(reinterpret_cast<void*>(addr), RadarHeight);
}

Крашит как только должен появится радар
Ты указатель на переменные должен передавать, а не их значение, вроде как.
 
  • Нравится
Реакции: writeline

zytrix

Потрачен
3
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как именно в сампе работает сериализация пакетов?(acks если быть точным)
 
  • Ха-ха
Реакции: Sargon

0xff65

Участник
31
2
Приветствую, каким образом можно реализовать что бы цикл повторялся не бесконечно, а не более 2 раз? - при нажатии на кнопку 50

C++:
#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"

using namespace plugin;

class Project5 {
public:
    std::unordered_map<std::uint8_t, std::vector<std::uint8_t>> vKeys = {
        {49, {31, 30}},
        {50, {22, 23, 24}},
        {51, {25, 27, 26}},
        {52, {29}},
        {53, {34, 33}}
    };

    Project5() {
        Events::drawingEvent += [this] {
            if (!isPlayerPlaying() || isInputActive())
                return;

            for (const auto& [key, weapons] : vKeys) {
                if (KeyPressed(key)) {
                    printf("Key: %d\n", key);
                    CPed* pPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed;
                    std::uint32_t nHandle = CPools::GetPedRef(pPed);
                    for (std::uint8_t nWeapon : weapons) {
                        printf("Weapon: %d\n", nWeapon);
                        if (Command<Commands::HAS_CHAR_GOT_WEAPON>(nHandle, nWeapon)) {
                            Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, 0);
                            Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, nWeapon);
                            break;
                        }
                    }
                }
            }
            };
    }

    bool isPlayerPlaying() {
        return CWorld::Players[CWorld::PlayerInFocus].m_pPed != nullptr;
    }

    bool isInputActive() {
        CPed* pPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed;
        return (pPed && pPed->m_pVehicle);
    }
} Project5Plugin;
 

0x9

Участник
31
7
появилась необходимось хука объектов но стандартный хук плагин сдк не работает

Код:
plugin::Events::objectRenderEvent.before += [](CEntity* o) {
        cout << "o " << o << endl;
    };
в консоль попросту не выводятся объекты
 

MSIshka

Участник
67
4
Почему не срабатывает хук чата?

C++:
using ChatFunc_t = void(__thiscall*)(void* thisptr, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor);
ChatFunc_t g_origChatFunc = nullptr;

void __fastcall ChatDetour(void* thisptr, void* edx, uint32_t type, const char* text, const char* prefix, uint32_t color, uint32_t pcolor) {
    std::string texta = text ? text : "";
    std::string prefixa = prefix ? prefix : "";

    bool shouldHide = ProcessSpecialMessage(texta);

    if (!shouldHide) {
        std::string colorHex = ARGBtoRGB(color);
        if (type == 2) {
            std::string prefixColorHex = ARGBtoRGB(pcolor);
            texta = "{" + prefixColorHex + "}" + prefixa + " {" + colorHex + "}" + texta;
        }
        std::string finalMessage = "{" + colorHex + "}" + GetCurrentTimeString() + " " + texta;
        ExecuteJSOnCEF(finalMessage);
    }

    if (g_origChatFunc) g_origChatFunc(thisptr, type, text, prefix, color, pcolor);
}

bool InstallChatHook() {
    HMODULE samp = GetModuleHandleA("samp.dll");

    uintptr_t addr = reinterpret_cast<uintptr_t>(samp) + 0x64010;
    if (MH_CreateHook(reinterpret_cast<LPVOID>(addr), &ChatDetour, reinterpret_cast<LPVOID*>(&g_origChatFunc)) != MH_OK) return false;
    if (MH_EnableHook(reinterpret_cast<LPVOID>(addr)) != MH_OK) return false;
    return true;
}

void __fastcall ActivateChatBlocker(void* thisptr) {
    return;
}


bool InstallActivateChatHook() {
    HMODULE samp = GetModuleHandleA("samp.dll");
    if (!samp) return false;

    uintptr_t addr = reinterpret_cast<uintptr_t>(samp) + 0x657E0;

    if (MH_CreateHook(reinterpret_cast<LPVOID>(addr),
        reinterpret_cast<LPVOID>(&ActivateChatBlocker),
        nullptr) != MH_OK) return false;

    return MH_EnableHook(reinterpret_cast<LPVOID>(addr)) == MH_OK;
}

DWORD WINAPI PluginThread(LPVOID) {
    while (!GetModuleHandleA("samp.dll")) {
        Sleep(100);
    }
    LoadSettings();

    if (MH_Initialize() != MH_OK) {
        OutputDebugStringA("MinHook init failed\n");
        return 1;
    }

    if (!InstallChatHook()) {
        OutputDebugStringA("Chat hook failed\n");
    }

    if (!InstallActivateChatHook()) {
        OutputDebugStringA("Activate chat hook failed\n");
    }
    MH_Uninitialize();
    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hModule);
        CreateThread(nullptr, 0, PluginThread, nullptr, 0, nullptr);
        break;
    case DLL_PROCESS_DETACH:
        g_running = false;
        break;
    }
    return TRUE;
}
 

0xff65

Участник
31
2
int count = 0;

if (count > 2) return;
if(key == 50)
count++;
Не работает совсем

C++:
#include "plugin.h"
#include "CWorld.h"
#include "CCamera.h"
#include "extensions/ScriptCommands.h"

using namespace plugin;

class Project5 {
public:
    std::unordered_map<std::uint8_t, std::vector<std::uint8_t>> vKeys = {
        {49, {31, 30}},
        {50, {22, 23, 24}},
        {51, {25, 27, 26}},
        {52, {29}},
        {53, {34, 33}}
    };
    int count = 0;

    Project5() {
        Events::drawingEvent += [this] {
            if (!isPlayerPlaying() || isInputActive())
                return;

            for (const auto& [key, weapons] : vKeys) {
                if (key == 50) {
                    if (count > 2)
                        continue;
                    if (KeyPressed(key)) {
                        count++;
                        printf("Key: %d\n", key);
                        CPed* pPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed;
                        std::uint32_t nHandle = CPools::GetPedRef(pPed);
                        for (std::uint8_t nWeapon : weapons) {
                            printf("Weapon: %d\n", nWeapon);
                            if (Command<Commands::HAS_CHAR_GOT_WEAPON>(nHandle, nWeapon)) {
                                Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, 0);
                                Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, nWeapon);
                                break;
                            }
                        }
                    }
                } else {
                    if (KeyPressed(key)) {
                        printf("Key: %d\n", key);
                        CPed* pPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed;
                        std::uint32_t nHandle = CPools::GetPedRef(pPed);
                        for (std::uint8_t nWeapon : weapons) {
                            printf("Weapon: %d\n", nWeapon);
                            if (Command<Commands::HAS_CHAR_GOT_WEAPON>(nHandle, nWeapon)) {
                                Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, 0);
                                Command<Commands::SET_CURRENT_CHAR_WEAPON>(nHandle, nWeapon);
                                break;
                            }
                        }
                    }
                }
            }
        };
    }

    bool isPlayerPlaying() {
        return CWorld::Players[CWorld::PlayerInFocus].m_pPed != nullptr;
    }

    bool isInputActive() {
        CPed* pPed = CWorld::Players[CWorld::PlayerInFocus].m_pPed;
        return (pPed && pPed->m_pVehicle);
    }
} Project5Plugin;
 
Последнее редактирование:

MSIshka

Участник
67
4
Почему вместо text отправляется @text" ? Хотя через samp::RefChat()->AddMessage(0xFFFFFFFF, text.data()); отправляется всё нормально.

C++:
void __stdcall js_sendMessage(WebFrame frame, const char* name, const char** argv, int argc) {
    if (!argv || argc < 1 || !argv[0]) return;
    //namespace samp = sampapi::v037r1;
    std::string text = argv[0];
    typedef int(__stdcall * SendCommand)(const char*);
    typedef int(__stdcall * SendText)(const char*);
    static SendCommand sendCommand = (SendCommand)((DWORD)GetModuleHandleA("samp.dll") + 0x65C60);
    static SendText    sendText = (SendText)((DWORD)GetModuleHandleA("samp.dll") + 0x57F0);

    if (text[0] == '/')
        sendCommand(text.data());
    else
        sendText(text.data());
}

Как с помощью samp api использовать sampProcessChatInput?
 
Последнее редактирование:

kishemishe

Новичок
1
0
Как сделать табы (вкладки) в ImGui? Я делаю свой чит на кс2 на c++, считай только учусь, пока что делаю гуи и остановился на том когда нужно было сделать табы, мне нужно чтобы можно было менять и их размер, и их расположение, и шрифт текста в нем
 

tanksoftik

Участник
35
7
Как сделать табы (вкладки) в ImGui? Я делаю свой чит на кс2 на c++, считай только учусь, пока что делаю гуи и остановился на том когда нужно было сделать табы, мне нужно чтобы можно было менять и их размер, и их расположение, и шрифт текста в нем

C++:
int tabb = 0;

ImGui::Begin("##1", 0)
    
if(ImGui::Button(u8"player", ImVec2(SizeX, SizeY)))
{
    tabb = 0;
}

ImGui::PushFont(fontname);
if(ImGui::Button(u8"veh", ImVec2(SizeX, SizeY)))
{
    tabb = 1;
}
ImGui::PopFont();

if(tabb == 0) { ImGui::Text("open tab: player"); }
else if(tabb == 1) { ImGui::Text("open tab: veh); }
    
ImGui::End();
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
368
806
че делать, я юзаю https://github.com/DpO4uLa/SAMP_API если на р1 то все заебись, а если переключу на р3 то крашит при

SAMP::CallBacks::pCallBackRegister->RegisterRakClientCallback(RakClientRecvHook);//registed RakClient Recv Hook
SAMP::CallBacks::pCallBackRegister->RegisterRakClientCallback(RakClientRPCHook);//registed RakClient RPC Hook

и при SAMP::pSAMP->getRakNet()->EmulPacket

хотя остальное работает нормально
Это очень старая поеботина, тогда уже лучше https://github.com/DpO4uLa/samp_sdk
 

s.fridom

Новичок
9
10
как можно анимировать текстуры? например смена цвет градиентом
 

вайега52

Налуашил состояние
Модератор
2,976
3,092
как можно анимировать текстуры? например смена цвет градиентом
Это если речь идет про анимацию на уровне картинок (GIF довольно таки тяжелый, кстати, но для того, чтобры разобраться. пойдет). В других же случаях либо на CPU генерируешь пиксели для RwTexture->raster, либо пытаешься прикрутить шейдеры и вычислять тот же градиент на GPU
 
  • Влюблен
Реакции: s.fridom