2021-05-25 12:58:33 +02:00
|
|
|
#include "gta/enums.hpp"
|
|
|
|
#include "gta/net_game_event.hpp"
|
|
|
|
#include "hooking.hpp"
|
|
|
|
#include "natives.hpp"
|
|
|
|
#include "util/notify.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
bool hooks::received_event(
|
|
|
|
rage::netEventMgr* event_manager,
|
|
|
|
CNetGamePlayer* source_player,
|
|
|
|
CNetGamePlayer* target_player,
|
|
|
|
uint16_t event_id,
|
|
|
|
int event_index,
|
|
|
|
int event_handled_bitset,
|
|
|
|
int64_t bit_buffer_size,
|
|
|
|
int64_t bit_buffer
|
|
|
|
)
|
|
|
|
{
|
2021-12-08 19:45:24 +01:00
|
|
|
auto buffer = std::make_unique<rage::datBitBuffer>((void*)bit_buffer, (uint32_t)bit_buffer_size);
|
2021-05-25 12:58:33 +02:00
|
|
|
|
2021-07-23 21:16:58 +02:00
|
|
|
if (event_id > 90u) return false;
|
2021-05-25 12:58:33 +02:00
|
|
|
|
2021-07-23 21:16:58 +02:00
|
|
|
const char* event_name = *(char**)((DWORD64)event_manager + 8i64 * event_id + 243376);
|
2022-01-30 00:23:26 +01:00
|
|
|
if (event_name == nullptr || source_player == nullptr || source_player->m_player_id < 0 || source_player->m_player_id >= 32)
|
2021-05-25 12:58:33 +02:00
|
|
|
{
|
|
|
|
g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch ((RockstarEvent)event_id)
|
|
|
|
{
|
|
|
|
case RockstarEvent::NETWORK_CLEAR_PED_TASKS_EVENT:
|
|
|
|
{
|
2022-01-30 00:23:26 +01:00
|
|
|
if (source_player->m_player_id < 32)
|
2021-05-25 12:58:33 +02:00
|
|
|
{
|
|
|
|
g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset);
|
2022-02-21 01:24:27 +01:00
|
|
|
|
|
|
|
notify::above_map(
|
|
|
|
fmt::format("<C>{}</C> possible attempt at freezing entity.", source_player->get_name())
|
|
|
|
);
|
2021-05-25 12:58:33 +02:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
// Don't block this event, we still want to report this player
|
|
|
|
// because if we still report others, our account seems less fishy
|
|
|
|
case RockstarEvent::REPORT_CASH_SPAWN_EVENT:
|
|
|
|
{
|
|
|
|
uint32_t money;
|
|
|
|
|
|
|
|
buffer->Seek(64);
|
|
|
|
buffer->ReadDword(&money, 32);
|
|
|
|
buffer->Seek(0);
|
|
|
|
|
|
|
|
if (money >= 2000)
|
|
|
|
{
|
2022-02-21 01:24:27 +01:00
|
|
|
notify::above_map(
|
|
|
|
fmt::format("<C>{}</C> is spawning cash.", source_player->get_name())
|
|
|
|
);
|
2021-05-25 12:58:33 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
2021-07-23 12:27:07 +02:00
|
|
|
// player sending this event is a modder
|
2021-05-25 12:58:33 +02:00
|
|
|
case RockstarEvent::NETWORK_CHECK_CODE_CRCS_EVENT:
|
|
|
|
case RockstarEvent::REPORT_MYSELF_EVENT:
|
|
|
|
{
|
2022-02-21 01:24:27 +01:00
|
|
|
notify::above_map(
|
|
|
|
fmt::format("Detected <C>{}</C> as cheating.", source_player->get_name())
|
|
|
|
);
|
2021-05-25 12:58:33 +02:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
2021-08-03 20:30:16 +02:00
|
|
|
case RockstarEvent::REQUEST_CONTROL_EVENT:
|
|
|
|
{
|
|
|
|
g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset);
|
2022-02-21 01:24:27 +01:00
|
|
|
|
|
|
|
notify::above_map(
|
|
|
|
fmt::format("Denied player control request from <C>{}</C>", source_player->get_name())
|
|
|
|
);
|
2021-08-03 20:30:16 +02:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2021-05-25 12:58:33 +02:00
|
|
|
//case RockstarEvent::GIVE_PICKUP_REWARDS_EVENT:
|
|
|
|
//{
|
|
|
|
// uint32_t amount, hash;
|
|
|
|
// buffer->ReadDword(&amount, 3);
|
|
|
|
// buffer->ReadDword(&hash, 32);
|
|
|
|
|
|
|
|
// if (func::is_crash_reward(hash) && func::is_crash_pickup(hash))
|
|
|
|
// {
|
|
|
|
// g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset);
|
|
|
|
|
|
|
|
// notify::blocked_event(event_name, source_player->player_id);
|
|
|
|
|
|
|
|
// return false;
|
|
|
|
// }
|
|
|
|
// buffer->Seek(0);
|
|
|
|
|
|
|
|
// return true;
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
|
|
|
|
return g_hooking->m_received_event_hook.get_original<decltype(&received_event)>()(event_manager, source_player, target_player, event_id, event_index, event_handled_bitset, bit_buffer_size, bit_buffer);
|
|
|
|
}
|
|
|
|
}
|