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

skrrt

Активный
244
87
в sampapi возможно создавать свой кастомный диалог? если да каким образом это реализуется ?
 

forgit

Новичок
2
0
как вызывать такое окно для перезапуска программы с правами администратора
startadmin.jpg
 

writeline

Новичок
15
8
как можно реализовать привязку сервера, например если подключаешься на IP 127.0.0.1:7777, то будет выводиться определенная функция, а если на другой IP то ничего не будет
При загрузке плагина добавь проверку наличия "ключа" в строке запуска сампа, при наличии твоего IP будет выполнятся функция, если же его не будет то самп запустится как обычно.
с++:
BOOL APIENTRY DllEntryPoint(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(hModule);
        TCHAR* cmdline = GetCommandLine();
        if (StrStr(cmdline, "127.0.0.1:7777")) {
        // ТУТ ТВОЙ КОД
        }
    }
    return TRUE;
    LoadLibrary("samp.dll");
}
 

why ega

РП игрок
Модератор
2,539
2,231
как можно реализовать привязку сервера, например если подключаешься на IP 127.0.0.1:7777, то будет выводиться определенная функция, а если на другой IP то ничего не будет
При загрузке плагина добавь проверку наличия "ключа" в строке запуска сампа, при наличии твоего IP будет выполнятся функция, если же его не будет то самп запустится как обычно.
с++:
BOOL APIENTRY DllEntryPoint(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(hModule);
        TCHAR* cmdline = GetCommandLine();
        if (StrStr(cmdline, "127.0.0.1:7777")) {
        // ТУТ ТВОЙ КОД
        }
    }
    return TRUE;
    LoadLibrary("samp.dll");
}
Можно хукнуть метод RakClient, отвечающий за подключение к серверу
C++:
#include "kthook/kthook.hpp"



using RakClientConnect_t = bool(__thiscall*)(void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer);
kthook::kthook_simple<RakClientConnect_t>(RakClientConnectHook);



bool RakClientConnectHooked(const decltype(RakClientConnectHook)& hook, void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer)
{
    if (strcmp(host, "127.0.0.1") == 0))
        std::cout << "Ochko anus rvat ebat" << std::endl;
    else
        std::cout << "Ne chunazes" << std::endl;


    return hook.get_trampoline()(pRakClient, host, serverPort, clientPort, depreciated, threadSleepTimer);
}



auto SAMPHandle = reinterpret_cast<std::uintptr_t>(GetModuleHandle("samp.dll"));
RakClientConnectHook.set_cb(&RakClientHooked);
RakClientConnectHook.set_dest(SAMPHandle + 0x339F0); // R3
RakClientConnectHook.install();

Еще к примеру можно хукать какую-нибудь функцию из winsock (получать адрес экпортируемой функции из Ws2_32.dll), но тогда есть вероятность. то функция вызвана не из samp.dll, а например из какого-то плагина
 
Последнее редактирование:

skrrt

Активный
244
87
Можно хукнуть метод RakClient, отвечающий за подключение к серверу
C++:
#include "kthook/kthook.hpp"



using RakClientConnect_t = bool(__thiscall*)(void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer);
kthook::kthook_simple<RakClientConnect_t>(RakClientConnectHook);



bool RakClientConnectHooked(const decltype(RakClientConnectHook)& hook, void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer)
{
    if (strcmp(host, "127.0.0.1") == 0))
        std::cout << "Ochko anus rvat ebat" << std::endl;
    else
        std::cout << "Ne chunazes" << std::endl;


    return hook.get_trampoline()(pRakClient, host, serverPort, clientPort, depreciated, threadSleepTimer);
}



auto SAMPHandle = reinterpret_cast<std::uintptr_t>(GetModuleHandle("samp.dll"));
RakClientConnectHook.set_cb(&RakClientHooked);
RakClientConnectHook.set_dest(SAMPHandle + 0x339F0); // R3
RakClientConnectHook.install();

Еще к примеру можно хукать какую-нибудь функцию из winsock (получать адрес экпортируемой функции из Ws2_32.dll), но тогда есть вероятность. то функция вызвана не из samp.dll, а например из какого-то плагина
а через rakclient можно создать коннект на другой айпи ?