const char* evenst[4096]; - массив строковых констант. Скорее всего, там нужен просто массив символов - char evenst[4096] = { 0 };Что не так?(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);
Там ниче хукать не надо, а так там есть обработчики уже, файл netrpc.cppКак хукать rpc в раксампе?
записать значение 1024 в skeys и никак иначеКак можно эмулировать "это"?(раксамп)
Пытался отсылать нажатие клавиши, не работаетПосмотреть вложение 122697
какой рпц хоть?нужно получить содержимое рпц, осталось понять как вывести его дату, пробовал писать read, readbit но все тщетно, буду благодарен кто сможет помочь в выводе
C++:for (int i = 0; i < params->bitStream->GetNumberOfUnreadBits()/8; i++) { SF->getSAMP()->getChat()->AddChatMessage(-1, "%d", params->bitStream->????); }
это отдельный сервер, я хочу побайтово узнать содержимое. (и рпц кастомный)
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++: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]); }
// 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));
});
ты шаблон 5.3.3 скачал. Тебе нужен 5.4.1
подключи в настройках проект его и отключи варнинги
#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 файлы, прожать пкм и выбрать «включить в проект»Как это пофиксить?
Посмотреть вложение 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; }
vcpkg install imgui