Files
YimMenuV2/src/game/hooks/Network/HandleNetGameEvent.cpp
T
2025-03-25 00:38:26 +00:00

64 lines
2.0 KiB
C++

#include "core/util/Joaat.hpp"
#include "game/backend/Self.hpp"
#include "game/hooks/Hooks.hpp"
#include "game/pointers/Pointers.hpp"
#include "types/network/CNetGamePlayer.hpp"
#include "types/network/NetEventType.hpp"
#include "types/rage/datBitBuffer.hpp"
namespace YimMenu::Hooks
{
static void SendEventAck(rage::netEventMgr* event_mgr, CNetGamePlayer* source_player, CNetGamePlayer* target_player, uint32_t event_index, uint32_t event_handled_bits)
{
if (source_player->m_PlayerIndex != 255 && !Pointers.EventAck(0x778LL * source_player->m_PlayerIndex + (intptr_t)event_mgr + 0x2C408, target_player, event_index, event_handled_bits))
{
Pointers.SendEventAck(event_mgr, source_player);
Pointers.EventAck((intptr_t)event_mgr + 0x2C408 + 0x778LL * source_player->m_PlayerIndex, target_player, event_index, event_handled_bits);
}
*reinterpret_cast<std::uint32_t*>(0x118LL * event_index + (uint64_t)event_mgr + 4 * source_player->m_PlayerIndex + 0x458) = event_handled_bits;
}
static bool HandleNetGameEvent(Player& player, uint16_t event_id, rage::datBitBuffer& buffer)
{
switch (static_cast<NetEventType>(event_id))
{
case NetEventType::WEAPON_DAMAGE_EVENT:
{
uint8_t damage_type = buffer.Read<uint8_t>(2);
uint32_t weapon_type = buffer.Read<uint32_t>(32);
if (weapon_type == "WEAPON_TRANQUILIZER"_J)
{
//player.AddDetection();
return false;
}
break;
}
case NetEventType::SCRIPTED_GAME_EVENT:
{
int64_t args[54]{};
uint32_t args_size = buffer.Read<uint32_t>(32);
if (args_size > sizeof(args))
return false;
buffer.ReadArray(args, 8 * args_size);
if (!Network::HandleScriptedGameEvent(player, args, args_size))
return false;
break;
}
}
return true;
}
void Network::ReceiveEvent(Player& player, uint16_t event_id, uint32_t event_index, uint32_t event_handled_bits, rage::datBitBuffer& buffer)
{
if (!HandleNetGameEvent(player, event_id, buffer))
SendEventAck(*Pointers.NetEventMgr, player.GetHandle(), Self::GetPlayer().GetHandle(), event_index, event_handled_bits);
}
}