Другое SAMPFUNCS | API C++

profgold

Известный
30
1
Что не так?(7 строка)

raksamp:
    DWORD some_val_27;
    DWORD eventLen;
    const char* evenst[4096];
    RakNet::BitStream bs;
    bs.Read((DWORD)some_val_27);
    bs.Read(eventLen);
    bs.Read(evenst, eventLen);
 

Izvinisb

Известный
Проверенный
964
597
Что не так?(7 строка)

raksamp:
    DWORD some_val_27;
    DWORD eventLen;
    const char* evenst[4096];
    RakNet::BitStream bs;
    bs.Read((DWORD)some_val_27);
    bs.Read(eventLen);
    bs.Read(evenst, eventLen);
const char* evenst[4096]; - массив строковых констант. Скорее всего, там нужен просто массив символов - char evenst[4096] = { 0 };
 
  • Нравится
Реакции: profgold

profgold

Известный
30
1
Как можно эмулировать "это"?(раксамп)
Пытался отсылать нажатие клавиши, не работает
photo_2021-11-17_14-35-50.jpg
 

F0RQU1N and

Известный
1,309
495
нужно получить содержимое рпц, осталось понять как вывести его дату, пробовал писать read, readbit но все тщетно, буду благодарен кто сможет помочь в выводе
C++:
for (int i = 0; i < params->bitStream->GetNumberOfUnreadBits()/8; i++)
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "%d", params->bitStream->????);
            }
какой рпц хоть?
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
это отдельный сервер, я хочу побайтово узнать содержимое. (и рпц кастомный)
C++:
auto bs = params->bitStream;
std::size_t byte_count = bs->GetNumberOfUnreadBits() / 8;
auto data = bs->GetData();
std::string result; result.reserve(byte_count * 3);
//or
std::stringstream ss{};
for (int i = 0; i < byte_count; i++) {
    result += std::format("{:02X}", int(data[i]));
    //or
    ss << std::hex << std::setfill('0') << std::setw(2) << int(data[i]);
}
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
C++:
auto bs = params->bitStream;
std::size_t byte_count = bs->GetNumberOfUnreadBits() / 8;
auto data = bs->GetData();
std::string result; result.reserve(byte_count * 3);
//or
std::stringstream ss{};
for (int i = 0; i < byte_count; i++) {
    result += std::format("{:02X}", int(data[i]));
    //or
    ss << std::hex << std::setfill('0') << std::setw(2) << int(data[i]);
}
ну или C++20 way для ♂ real boys ♂ :

C++:
// first
auto sp = std::span(bs->GetData(), bs->GetNumberOfUnreadBits() / 8);
std::string result{};
result.reserve(sp.size() * 2 + 1);
std::transform( sp.begin(), sp.end(),
                std::back_inserter(result),
                [](unsigned char c) -> std::string {
                    return std::format("{:02X}", int(c));
                });

// second
auto sp = std::span(bs->GetData(), bs->GetNumberOfUnreadBits() / 8);
std::transform( sp.begin(), sp.end(),
                std::ostream_iterator<std::string>(std::cout),
                [](unsigned char c) -> std::string {
                    return std::format("{:02X}", int(c));
                });
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,763
11,196
в чем проблема?
1639135073637.png

DirectX SDK установил
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,763
11,196
Как это пофиксить?
1639156140070.png
1639156161865.png

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>

#include "ImGUI\imgui.h"
#include "ImGUI\imgui_impl_dx9.h"
#include "ImGUI\imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS* SF = new SAMPFUNCS();

bool activew = false;

int sizeX, sizeY = 500;

bool CALLBACK Present(CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender()))
    {

        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();
        if (activew)
        {
            ImGui::SetNextWindowSize(ImVec2(sizeX, sizeY), 0);
            ImGui::Begin("ImGui меню", &activew);
            {
                ImGui::Text("BE");
            }
            ImGui::End();
        }
        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
    }
    return true;
}

HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    ImGui_ImplDX9_InvalidateDeviceObjects();
    return true;
}

bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
    return true;
}

void CALLBACK PluginFree()
{

    ImGui_ImplDX9_Shutdown();
    ImGui_ImplWin32_Shutdown();
    ImGui::DestroyContext();
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
        SF->getGame()->registerGameDestructorCallback(PluginFree);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
        SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);

        ImGui::CreateContext();
        ImGuiIO& io = ImGui::GetIO(); (void)io;
        ImGui_ImplWin32_Init(GetActiveWindow());
        ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());

        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        SF->initPlugin(mainloop, hModule);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Как это пофиксить?
Посмотреть вложение 125959Посмотреть вложение 125960
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>

#include "ImGUI\imgui.h"
#include "ImGUI\imgui_impl_dx9.h"
#include "ImGUI\imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS* SF = new SAMPFUNCS();

bool activew = false;

int sizeX, sizeY = 500;

bool CALLBACK Present(CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender()))
    {

        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();
        if (activew)
        {
            ImGui::SetNextWindowSize(ImVec2(sizeX, sizeY), 0);
            ImGui::Begin("ImGui меню", &activew);
            {
                ImGui::Text("BE");
            }
            ImGui::End();
        }
        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
    }
    return true;
}

HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    ImGui_ImplDX9_InvalidateDeviceObjects();
    return true;
}

bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
    return true;
}

void CALLBACK PluginFree()
{

    ImGui_ImplDX9_Shutdown();
    ImGui_ImplWin32_Shutdown();
    ImGui::DestroyContext();
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
        SF->getGame()->registerGameDestructorCallback(PluginFree);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
        SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);

        ImGui::CreateContext();
        ImGuiIO& io = ImGui::GetIO(); (void)io;
        ImGui_ImplWin32_Init(GetActiveWindow());
        ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());

        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        SF->initPlugin(mainloop, hModule);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
В панели обозревателя решений(там где файлы всякие), тебе нужно все h и cpp файлы, прожать пкм и выбрать «включить в проект»
Если быть конкретным - все файлы из корневой папки репозитория imgui, а также imgui_impl_dx9 и imgui_impl_win32

P.S. Ошибка означает, что линкер(тот который скомпилированные cpp файлы в одно целое собирает) нашел объявление функции(грубо говоря их имена), но не нашел их определение(код), и не смог подставить ссылки на конкретный код вместо объявлений функции

Мне лайкнули мое старое сообщение, которое как раз в тему ответа, так что держи:
https://www.blast.hk/threads/81716/post-691351

UPD: проще всего это сделать через vcpkg. Ставится он сам в 2 клика, библиотеки с его помощью собираются в два клика, и все делается автоматически, так что используй: vcpkg install imgui
 
  • Нравится
Реакции: moreveal, chapo и sc6ut

dry0x

Новичок
3
0
как указать 2 параметра в команде, понятно как сделать 1 параметр через std::string params, а как указать 2