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

whyega52

52NGG
Модератор
2,702
2,465
как заморозить чела, что бы когда был включен аирбрейк перс не падал
C++:
auto ped = reinterpret_cast<std::uintptr_t*>(0xB6F5F0);
reinterpret_cast<std::uint8_t*>(*ped + 0x46C) = 3;
1721663218789.png
 
  • Влюблен
Реакции: ernestik

daun.daunovich.01

Новичок
7
0
Вопрос касающийся C++.
Разработал клиентский плагин, который отрисовывает неон для определённого автомобиля. (По её идентификатору)
Моя задача синхронизировать это дело с сервером, т.е. я вызываю свою нативную функцию и отправляется пакет, далее я на клиенте принимаю входящий пакет.

Вопрос следующий: Есть какая-то нормальная, в моём понимании "адекватная" библиотека для работы с сетевым движком (RakNet), чтобы я мог отслеживать входящие пакеты. (что-то типа UpdateNetwork)
Прошерстил интернет - такого не нашёл, везде какие-то недописанные ракнеты...
 

0xFF

Известный
72
19
Вопрос касающийся C++.
Разработал клиентский плагин, который отрисовывает неон для определённого автомобиля. (По её идентификатору)
Моя задача синхронизировать это дело с сервером, т.е. я вызываю свою нативную функцию и отправляется пакет, далее я на клиенте принимаю входящий пакет.

Вопрос следующий: Есть какая-то нормальная, в моём понимании "адекватная" библиотека для работы с сетевым движком (RakNet), чтобы я мог отслеживать входящие пакеты. (что-то типа UpdateNetwork)
Прошерстил интернет - такого не нашёл, везде какие-то недописанные ракнеты...
 
  • Нравится
Реакции: whyega52

daun.daunovich.01

Новичок
7
0
Недавно это использовал, он реально работает?

Кстати, я просто все эти файлы гит клоннул (git clone) к себе в проект, так правильно вообще делать?

И к слову добавить хочу, там есть некоторые ошибки в классе main.cpp

UPD: либа не собирается (всё гуд, собрал)

Я щас в ахуе.. Собрал либу, вст
Screenshot_2.png
Screenshot_2.pngроил в проект, ну как следует.
И мой проект компилируется, но я не вижу в компиляции, что подгружается rakhook
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    1.1 KB · Просмотры: 25
Последнее редактирование:

daun.daunovich.01

Новичок
7
0
Помогите пожалуйста.
Отправляю пакет с сервера, но на клиенте не могу принять..

PACKET_CUSTOM = 251
RPC_HELLOWORLD = 20 (на клиенте тоже самое)

server, send:
new BitStream: bitstream = BS_New();

BS_WriteValue(
    bitstream,
    PR_UINT8,   PACKET_CUSTOM,
    PR_UINT32,  RPC_HELLOWORLD
);

PR_SendPacket(bitstream, playerid, PR_MEDIUM_PRIORITY, PR_RELIABLE);
BS_Delete(bitstream);

client-side:
rakhook::on_receive_packet += [](Packet* p) -> bool
{
    RakNet::BitStream bs(p->data, p->length, false);

    uint8_t packetID;
    uint32_t rpcID;

    bs.ResetReadPointer();
    bs.Read(packetID);
    bs.Read(rpcID);

    if (packetID == 251)
    {
        if (rpcID == 20)
        {
            CVehicle* veh = CPools::ms_pVehiclePool->GetAt(1);

            Neon.Install(veh, 134, 16, 194);

            CMessages::AddMessageJumpQ((char*)"Ccc", 5000, 0, false);
        }
    }
    return true;
};
 

whyega52

52NGG
Модератор
2,702
2,465
Мне нужны адреса памяти, может они у кого-то есть, если поделитесь, было бы здорово:
C++:
SAMP_F1_KEYHANDLER - Нужный 0.3.7-R2 | 0.3.7-R4 | 0.3.7-R5 | SAMP 0.3DL
SAMP_ANTI_CRASHER  - Нужный 0.3.7-R5
SAMP_FPS_UNLOCK    - Нужный 0.3.7-R4 | 0.3.7-R5
sampPatch[] = "No connecting delay" - Нужный 0.3.7-R2 | 0.3.7-R3 | 0.3.7-R4
я так понимаю эти адреса уже есть под R1 или какую-то еще версию, скинь их, не понятно, что именно нужно
 
  • Нравится
Реакции: 0x73616D

0x73616D

Активный
140
42
Почему крючок не работает?
C++:
#include <Windows.h>
#include <iostream>
#include <memory>
#include <kthook/kthook.hpp>

using CTimer__UpdateSignature = void(__cdecl*)();
using WndProcSignature = HRESULT(__stdcall*)(HWND, UINT, WPARAM, LPARAM);
using InitGameInstance = HWND(__cdecl*)(HINSTANCE);

kthook::kthook_simple<CTimer__UpdateSignature> CTimerHook{};
kthook::kthook_signal<InitGameInstance> hookGameInstanceInit{ 0x745560 };
kthook::kthook_simple<WndProcSignature> WndProcHook{};

HWND gameHwnd = []() {
    HWND* pHwnd = *reinterpret_cast<HWND**>(0xC17054);
    if (pHwnd != nullptr) {
        return *pHwnd;
    }
    else {
        hookGameInstanceInit.after += [](const auto& hook, HWND& returnValue, HINSTANCE inst) {
            gameHwnd = returnValue;
            };
        return HWND(0);
    }
}();

HRESULT hWndProc(const decltype(WndProcHook)& hook, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    std::cout << "WndProcHook hooked." << std::endl;
    if (uMsg == WM_KEYUP) {
        if (wParam == VK_F9) {
            MessageBoxA(NULL, "¡Test!", "¡Test!", MB_OK);
        }
    }
    return hook.get_trampoline()(hwnd, uMsg, wParam, lParam);
}

void setUpHooks() {
    auto pLatestWndproc = GetWindowLongPtrA(gameHwnd, GWLP_WNDPROC);
    WndProcHook.set_dest(pLatestWndproc);
    WndProcHook.set_cb(&hWndProc);
    WndProcHook.install();
}

void CTimer__Update(const decltype(CTimerHook)& hook) {
    static bool init{};
    if (!init) {
        setUpHooks();
        init = { true };
    }
    hook.get_trampoline()();
}
 

ARMOR

kjor32 is legend
Друг
4,891
6,516
Почему крючок не работает?
C++:
#include <Windows.h>
#include <iostream>
#include <memory>
#include <kthook/kthook.hpp>

using CTimer__UpdateSignature = void(__cdecl*)();
using WndProcSignature = HRESULT(__stdcall*)(HWND, UINT, WPARAM, LPARAM);
using InitGameInstance = HWND(__cdecl*)(HINSTANCE);

kthook::kthook_simple<CTimer__UpdateSignature> CTimerHook{};
kthook::kthook_signal<InitGameInstance> hookGameInstanceInit{ 0x745560 };
kthook::kthook_simple<WndProcSignature> WndProcHook{};

HWND gameHwnd = []() {
    HWND* pHwnd = *reinterpret_cast<HWND**>(0xC17054);
    if (pHwnd != nullptr) {
        return *pHwnd;
    }
    else {
        hookGameInstanceInit.after += [](const auto& hook, HWND& returnValue, HINSTANCE inst) {
            gameHwnd = returnValue;
            };
        return HWND(0);
    }
}();

HRESULT hWndProc(const decltype(WndProcHook)& hook, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    std::cout << "WndProcHook hooked." << std::endl;
    if (uMsg == WM_KEYUP) {
        if (wParam == VK_F9) {
            MessageBoxA(NULL, "¡Test!", "¡Test!", MB_OK);
        }
    }
    return hook.get_trampoline()(hwnd, uMsg, wParam, lParam);
}

void setUpHooks() {
    auto pLatestWndproc = GetWindowLongPtrA(gameHwnd, GWLP_WNDPROC);
    WndProcHook.set_dest(pLatestWndproc);
    WndProcHook.set_cb(&hWndProc);
    WndProcHook.install();
}

void CTimer__Update(const decltype(CTimerHook)& hook) {
    static bool init{};
    if (!init) {
        setUpHooks();
        init = { true };
    }
    hook.get_trampoline()();
}
Где установка хука CTimer::Update?
 

walkerdev

Новичок
7
0
Как установить усталость игроку?
Т.е., установить stamina (выносливость) для игрока, у которого запущен данных SF скрипт.
И вопрос, при установке его скорость бега будет видна только ему, или всем игрокам? (быстро бежит/уставший)

Пробовал и через SF->getCleo->opcode, и через reinterpret_cast<float*>(0xB7CD84) = 0, и никак =(
если можно реализовать как то без участия SampFuncs, то, подтолкните в нужную сторону, пожалуйста
однако, установка усталости должна идти через мод (т.е. я передаю через ракнет пакет с пользовательской переменной Pawn, а на ее основе устанавливается стамина)
 

0x73616D

Активный
140
42
Is there a way to get the string from a textdraw in a loop using RakHook?
Есть ли способ получить строку из зацикленного текстового рисунка с помощью RakHook?

This only works the first time the textdraw is displayed, using while will cause the game to freeze.
Это работает только при первом отображении textdraw, использование while приведет к зависанию игры.
C++:
bool PluginRPC::onShowTextDraw(unsigned char& id, RakNet::BitStream* bs) {
    if (id != 134) {
        return true;
    }

    uint16_t wTextDrawID;
    uint8_t Flags;
    float fLetterWidth;
    float fLetterHeight;
    uint32_t dLetterColor;
    float fLineWidth;
    float fLineHeight;
    uint32_t dBoxColor;
    uint8_t Shadow;
    uint8_t Outline;
    uint32_t dBackgroundColor;
    uint8_t Style;
    uint8_t Selectable;
    float fX;
    float fY;
    uint16_t wModelID;
    float fRotX;
    float fRotY;
    float fRotZ;
    float fZoom;
    int16_t wColor1;
    int16_t wColor2;
    uint16_t szTextLen;
    std::string szText;

    bs->Read(wTextDrawID);
    bs->Read(Flags);
    bs->Read(fLetterWidth);
    bs->Read(fLetterHeight);
    bs->Read(dLetterColor);
    bs->Read(fLineWidth);
    bs->Read(fLineHeight);
    bs->Read(dBoxColor);
    bs->Read(Shadow);
    bs->Read(Outline);
    bs->Read(dBackgroundColor);
    bs->Read(Style);
    bs->Read(Selectable);
    bs->Read(fX);
    bs->Read(fY);
    bs->Read(wModelID);
    bs->Read(fRotX);
    bs->Read(fRotY);
    bs->Read(fRotZ);
    bs->Read(fZoom);
    bs->Read(wColor1);
    bs->Read(wColor2);
    bs->Read(szTextLen);
    szText.resize(szTextLen);
    bs->Read(szText.data(), szTextLen);

    if (wTextDrawID == 2053) {
        std::string gasolina = szText;
        std::string gasolinaValue = gasolina;
        size_t startPos = gasolina.find("{");
        size_t endPos = gasolina.find("}");
        if (startPos != std::string::npos && endPos != std::string::npos) {
            gasolinaValue = gasolina.substr(startPos + 1, endPos - startPos - 1);
        }
        std::cout << "Gasolina value: " << gasolinaValue << std::endl;
    }   
    return true;
}
 

klyuchik

Участник
28
2
1.Ваш вопрос: С чего лучше начать изучения языка , желательно видеоролики.
И да я мал по этому и спрашиваю за это так как имею интерес к этому но незнаю с чего начать . Благодарочка всем
 

whyega52

52NGG
Модератор
2,702
2,465
С чего лучше начать изучения языка , желательно видеоролики.
Для начала тебе стоит выучить базовый синтаксис языка, поэтому вписываешь в ютубе что-то вроде "курс C++ для новичка" и смотришь пару видео. Далее можешь начать читать книжку, лично я читал (но так и не дочитал) Лоспинозо - C++ для профи. Молниеносный старт (2021). Потом смотришь чужой код, на том же бластхаке и постепенно пишешь свои проекты
 
  • Нравится
Реакции: 0x73616D и .drakonez

AdCKuY_DpO4uLa

Адский дрочер
Проверенный
302
521
Is there a way to get the string from a textdraw in a loop using RakHook?
Есть ли способ получить строку из зацикленного текстового рисунка с помощью RakHook?

This only works the first time the textdraw is displayed, using while will cause the game to freeze.
Это работает только при первом отображении textdraw, использование while приведет к зависанию игры.
C++:
bool PluginRPC::onShowTextDraw(unsigned char& id, RakNet::BitStream* bs) {
    if (id != 134) {
        return true;
    }

    uint16_t wTextDrawID;
    uint8_t Flags;
    float fLetterWidth;
    float fLetterHeight;
    uint32_t dLetterColor;
    float fLineWidth;
    float fLineHeight;
    uint32_t dBoxColor;
    uint8_t Shadow;
    uint8_t Outline;
    uint32_t dBackgroundColor;
    uint8_t Style;
    uint8_t Selectable;
    float fX;
    float fY;
    uint16_t wModelID;
    float fRotX;
    float fRotY;
    float fRotZ;
    float fZoom;
    int16_t wColor1;
    int16_t wColor2;
    uint16_t szTextLen;
    std::string szText;

    bs->Read(wTextDrawID);
    bs->Read(Flags);
    bs->Read(fLetterWidth);
    bs->Read(fLetterHeight);
    bs->Read(dLetterColor);
    bs->Read(fLineWidth);
    bs->Read(fLineHeight);
    bs->Read(dBoxColor);
    bs->Read(Shadow);
    bs->Read(Outline);
    bs->Read(dBackgroundColor);
    bs->Read(Style);
    bs->Read(Selectable);
    bs->Read(fX);
    bs->Read(fY);
    bs->Read(wModelID);
    bs->Read(fRotX);
    bs->Read(fRotY);
    bs->Read(fRotZ);
    bs->Read(fZoom);
    bs->Read(wColor1);
    bs->Read(wColor2);
    bs->Read(szTextLen);
    szText.resize(szTextLen);
    bs->Read(szText.data(), szTextLen);

    if (wTextDrawID == 2053) {
        std::string gasolina = szText;
        std::string gasolinaValue = gasolina;
        size_t startPos = gasolina.find("{");
        size_t endPos = gasolina.find("}");
        if (startPos != std::string::npos && endPos != std::string::npos) {
            gasolinaValue = gasolina.substr(startPos + 1, endPos - startPos - 1);
        }
        std::cout << "Gasolina value: " << gasolinaValue << std::endl;
    }  
    return true;
}
RPC TextDrawSetString? id 105
 
  • Влюблен
Реакции: 0x73616D