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

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
1689250767290.png

Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
1689250796965.png

Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
 

why ega

РП игрок
Модератор
2,539
2,231
можно получить его с, например, RakPeer::HandleRPCPacket (https://github.com/imring/RakHook/blob/master/src/RakHook/rakhook.cpp#L30)
или с RakClientInterface, поскольку он является родительским для RakClient (https://github.com/dashr9230/SA-MP/blob/master/raknet/RakClient.h#L31)
RakClientInterface - sizeof(RakPeer)
Посмотреть вложение 206717
сейчас проверил, не работает, как я понимаю, в хэндлрпц кидается не интерфейс ракпира, а он сам из-за чего вмп не хочет работать (тестил на 14 методе)
C++:
virtual bool Send( RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast )=0;
 

reussssya

Новичок
27
8
Посмотреть вложение 207793
Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
Посмотреть вложение 207794
Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
Ой , что-то я оглянулся и в статье мне показалось, что автор использовал С99, а сам код пока глянуть не удосужился
 

korsarsan

Участник
79
27
Имеются проблемы с выводом hp другого персонажа
Вот этот код постоянно выводит значение 1000
C++:
CPed* aPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
        float fbarr = aPed->m_fHealth;
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float fHealth = pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->fActorHealth;
Может кто знает как нормально вывести hp другого перса
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
Вот этот код постоянно выводит значение 1000
C++:
CPed* aPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
float fbarr = aPed->m_fHealth;
так устроен самп. он хранит значения здоровьев в своих пулах
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float fHealth = pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->fActorHealth;
всё дело в том, как калкор хранит значения хп и брони в синхронизации. не исправить
 
  • Клоун
  • Грустно
Реакции: Fott и korsarsan
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
#include <Windows.h>
#include <detours/detours.h>
#include <iostream>

static HMODULE(WINAPI* TrueLoadLibrary)(LPCWSTR lpLibFileName) = LoadLibraryW;

HMODULE WINAPI DetouredLoadLibrary(LPCWSTR lpLibFileName)
{
    HMODULE res = TrueLoadLibrary(lpLibFileName);
    MessageBoxW(NULL, lpLibFileName, L"Detoured!", MB_OK | MB_ICONEXCLAMATION);
    return res;
}

void SetGlobalHook()
{
    // Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
    TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));

    // Установка хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

// Функция для удаления глобального хука
void RemoveGlobalHook()
{
    // Удаление хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

int main()
{
    // Установка глобального хука
    SetGlobalHook();

    // Ждем нажатия клавиши перед удалением хука
    std::cout << "Press any key to remove the hook..." << std::endl;
    std::cin.get();

    // Удаление глобального хука
    RemoveGlobalHook();

    return 0;
}
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));
и все работает
 

F0RQU1N and

Известный
1,310
494
C++:
#include <Windows.h>
#include <detours/detours.h>
#include <iostream>

static HMODULE(WINAPI* TrueLoadLibrary)(LPCWSTR lpLibFileName) = LoadLibraryW;

HMODULE WINAPI DetouredLoadLibrary(LPCWSTR lpLibFileName)
{
    HMODULE res = TrueLoadLibrary(lpLibFileName);
    MessageBoxW(NULL, lpLibFileName, L"Detoured!", MB_OK | MB_ICONEXCLAMATION);
    return res;
}

void SetGlobalHook()
{
    // Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
    TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));

    // Установка хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

// Функция для удаления глобального хука
void RemoveGlobalHook()
{
    // Удаление хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

int main()
{
    // Установка глобального хука
    SetGlobalHook();

    // Ждем нажатия клавиши перед удалением хука
    std::cout << "Press any key to remove the hook..." << std::endl;
    std::cin.get();

    // Удаление глобального хука
    RemoveGlobalHook();

    return 0;
}
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));
и все работает
а в чем смысл? ты же в своем приложении хукаешь
 
  • Нравится
Реакции: colby57