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

CleanLegend

Известный
Всефорумный модератор
480
936

jglock

Новичок
1
0
Как правильно записать содержимое входящего пакета в структуру?

Код:
if (params->packetId == PacketEnumeration::ID_PLAYER_SYNC)
    {
        stOnFootData data;
        ZeroMemory(&data, sizeof(data));
        byte packetId;
        uint16 senderId;

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(packetId);
        params->bitStream->Read(senderId);
        params->bitStream->Read((PCHAR)&data, sizeof(data));

       
        SF->getSAMP()->getChat()->AddChatMessage(-1, (std::to_string(senderId) + "  ||   " + std::to_string(data.byteHealth)).c_str());
       

    };

Ид я нормаьно получаю, а вот хп из структуры не могу получить, все время 0. Подскажите, пожалуйста.
Меня интересует конкретно такой способ. Я понимаю, что могу сделать SF->getSAMP()->getPlayers()->pRemotePlayer[senderId]->pPlayerData->onFootData.byteHealth
 

ALF

Известный
Проверенный
320
539
Как правильно записать содержимое входящего пакета в структуру?

Код:
if (params->packetId == PacketEnumeration::ID_PLAYER_SYNC)
    {
        stOnFootData data;
        ZeroMemory(&data, sizeof(data));
        byte packetId;
        uint16 senderId;

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(packetId);
        params->bitStream->Read(senderId);
        params->bitStream->Read((PCHAR)&data, sizeof(data));

      
        SF->getSAMP()->getChat()->AddChatMessage(-1, (std::to_string(senderId) + "  ||   " + std::to_string(data.byteHealth)).c_str());
      

    };

Ид я нормаьно получаю, а вот хп из структуры не могу получить, все время 0. Подскажите, пожалуйста.
Меня интересует конкретно такой способ. Я понимаю, что могу сделать SF->getSAMP()->getPlayers()->pRemotePlayer[senderId]->pPlayerData->onFootData.byteHealth
P3ti/RakSAMP(https://github.com/P3ti/RakSAMP/blob/master/client/src/netgame.cpp#L127)
 

ALF

Известный
Проверенный
320
539
  • Нравится
Реакции: _=Gigant=_

-raymond-

Известный
110
9
чем отловить инфу о том что игрок произвел выстрел?
и что здесь
r2UZYMJ.png

отвечает за хп машины?
 

Musaigen

shitposter
Проверенный
1,654
1,471
WriteProcessMemory если в другой процесс.
А если в свой, то:
C++:
*(int*)0xB7CE50 = 1;
Данная фича не реагирует на тип bool, даже пробывал reinterpet_cast, хз как там. Вот как я делал.
C++:
*(bool*)0xB7CEE4 = true; // типо должен выдавать мне беск. бег, но нихуя.
 

_Vine_

Активный
154
57
Здравствуйте.
Заметил, что из за перехвата оконной процедуры(wndproc) через SetWindowLongPtr, при выгрузке плагина через консоль сф командой "pfree SFPlugin" происходит краш. В коллбэке деструктора игры и DLL PROCESS DETACH'e пытался восстанавливать оригинальный WndProc, но краш все равно был.
Может быть, кто нибудь знает, из за чего такое происходит?
C++:
#define  _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "user32.lib")
SAMPFUNCS *SF = new SAMPFUNCS();

WNDPROC oWndProc = 0;

LRESULT    __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    SF->getSAMP()->getChat()->AddChatMessage(-1, "WNDPROC CALLED");
    return CallWindowProcA(oWndProc, hWnd, uMsg, wParam, lParam);
}
void __stdcall Destructor() {
    static bool once = false;
    if (!once) {
        SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)oWndProc);
        once = true;
    }
}
void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized())
            return;
        oWndProc = (WNDPROC)SetWindowLongPtr(GetForegroundWindow(), GWLP_WNDPROC, (long)WndProc);
        SF->getGame()->registerGameDestructorCallback(Destructor);
        init = true;
    }
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    else if (dwReasonForCall == DLL_PROCESS_DETACH)
        Destructor();
    return TRUE;
}