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

Grisha2307

Новичок
18
4
Помогите пожалуйста, при получении любого пакета игра закрывается.
код:
#include <Windows.h>
#include "main.h"
#include <string>
#include <thread>
#include <chrono>
#include "fstream"

using namespace std;

SAMPFUNCS* SF = new SAMPFUNCS();
void __stdcall initScript(string);
void logSF(char);

static bool isActive = false;

static bool CALLBACK incomingPacket(stRakNetHookParams *params) {

    return true;
}

static void __stdcall mainloop() {
    static bool initialized = false;
    if (!initialized) {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized()) {
            initialized = true;
            SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_PACKET, incomingPacket);
            SF->getSAMP()->registerChatCommand("stallSkip", initScript);
        }
    }
}

void __stdcall initScript(string) {
    string text;
    int color;
    if (!isActive) {
        color = D3DCOLOR_ARGB(255, 0, 255, 0);
        text = "[******] Активирован";
    } else {
        color = D3DCOLOR_ARGB(255, 255, 0, 0);
        text = "[******] Деактивирован";
    }
    isActive ^= true;
    SF->getSAMP()->getChat()->AddChatMessage(color, "%s", text);
}

void logSF(char text) {
    ofstream outputFile("SAMPFUNCS/logs.txt");
    if (outputFile.is_open()) {
        outputFile << text;
        outputFile.close();
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) {
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    return TRUE;
}
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
AddChatMessage не поддерживает форматирование со стрингами. юзай std::tring::data() или std::string::c_str();
 
  • Нравится
Реакции: Z3roKwq

!Sam#0235

Активный
122
40
Can someone provide a clear, direct and concise example code of an OnCloseDialog hook? (.ASI)

Может ли кто-нибудь предоставить ясный, прямой и краткий пример кода перехватчика OnCloseDialog? (.ASI)
 
  • Нравится
Реакции: Vintik

Rvmsitow

Новичок
11
1
Патч samp.dll | CreateVehicle

Здравствуйте, я хотел бы обойти ограничение на модели транспортных средств между 400 и 611 в SA:MP 0.3DL, есть идеи?

СПАСИБО !
 

why ega

РП игрок
Модератор
2,541
2,233
Can someone provide a clear, direct and concise example code of an OnCloseDialog hook? (.ASI)

Может ли кто-нибудь предоставить ясный, прямой и краткий пример кода перехватчика OnCloseDialog? (.ASI)
Попробуй что-то подобное (показал на примере kthook)
C++:
#include <Windows.h>

#include "kthook/kthook.hpp"



// edx - bypass MSVC
kthook::kthook_simple<void(__fastcall*)(void* pDialog, void* edx, char button);>(CDialogCloseHook);



void __fastcall CDialogCloseHooked(const decltype(CDialogCloseHook)& hook, void* pDialog, void* edx, char button)
{
    // code
    return hook.get_trampoline()(pDialog, edx, button);
}


// install hoook (after initialization of SAMP)
CDialogCloseHook.set_cb(&CDialogCloseHooked);
auto sampHandle = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
// 0x6C040 - R1
CDialogCloseHook.set_dest(sampHandle + 0x6C040);
CDialogCloseHook.install();
 
  • Нравится
Реакции: !Sam#0235

why ega

РП игрок
Модератор
2,541
2,233
можно ли как-то проверить иниацилизацию сампа без хуков/потоков?
не совсем понимаю как это должно выглядеть. ты либо проверяешь (скорее всего в потоке), что значение инициализировалось (например CNetGame), либо хукаешь функцию, которая вызывается после/во время инициализации
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Попробуй что-то подобное (показал на примере kthook)
C++:
#include <Windows.h>

#include "kthook/kthook.hpp"



// edx - bypass MSVC
kthook::kthook_simple<void(__fastcall*)(void* pDialog, void* edx, char button);>(CDialogCloseHook);



void __fastcall CDialogCloseHooked(const decltype(CDialogCloseHook)& hook, void* pDialog, void* edx, char button)
{
    // code
    return hook.get_trampoline()(pDialog, edx, button);
}


// install hoook (after initialization of SAMP)
CDialogCloseHook.set_cb(&CDialogCloseHooked);
auto sampHandle = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
// 0x6C040 - R1
CDialogCloseHook.set_dest(sampHandle + 0x6C040);
CDialogCloseHook.install();
edx bypass в ктхуке не нужен, хотя и с ним работать будет
 
  • Нравится
  • Вау
Реакции: etereon и why ega

!Sam#0235

Активный
122
40
Попробуй что-то подобное (показал на примере kthook)
C++:
#include <Windows.h>

#include "kthook/kthook.hpp"



// edx - bypass MSVC
kthook::kthook_simple<void(__fastcall*)(void* pDialog, void* edx, char button);>(CDialogCloseHook);



void __fastcall CDialogCloseHooked(const decltype(CDialogCloseHook)& hook, void* pDialog, void* edx, char button)
{
    // code
    return hook.get_trampoline()(pDialog, edx, button);
}


// install hoook (after initialization of SAMP)
CDialogCloseHook.set_cb(&CDialogCloseHooked);
auto sampHandle = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));
// 0x6C040 - R1
CDialogCloseHook.set_dest(sampHandle + 0x6C040);
CDialogCloseHook.install();
great! would it be possible to get an example without KtHook?
 

Rvmsitow

Новичок
11
1
Можешь почитать данную статью: link
can u help me please with my question ?

thanks you ! :)
 

why ega

РП игрок
Модератор
2,541
2,233
can u help me please with my question ?

thanks you ! :)
возможно это оно: https://www.blast.hk/threads/90249/