mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-06-17 06:47:22 +08:00
feat: bypass BE kicks from legit hosts
This commit is contained in:
parent
a217c31b8f
commit
fd9524a684
@ -21,12 +21,19 @@ namespace big
|
||||
{
|
||||
void bypass_battleye()
|
||||
{
|
||||
auto old = g.session.spoof_host_token_type;
|
||||
g.session.spoof_host_token_type = std::max(old, 1);
|
||||
if (old != g.session.spoof_host_token_type)
|
||||
g.session.spoof_host_token_dirty = true;
|
||||
g.session.kick_host_when_forcing_host = true;
|
||||
g.session.exclude_modders_from_kick_host = true; // useful
|
||||
for (const auto& plyr : g_player_service->players() | std::ranges::views::values)
|
||||
{
|
||||
if (!plyr->is_host() || plyr->block_outgoing_clone_create)
|
||||
continue;
|
||||
|
||||
if (auto ped = g_player_service->get_self()->get_ped())
|
||||
{
|
||||
entity::force_remove_network_entity(ped, plyr);
|
||||
}
|
||||
|
||||
plyr->block_outgoing_clone_create = true;
|
||||
break;
|
||||
}
|
||||
|
||||
constexpr std::array<std::uint32_t, 16> valid_hashes = {1410389794, 967, 1523678325, 472, 0, 0, 1323039495, 0, 0, 1731098795, 2256610353, 17956, 414639110, 307143837, 3443181821, 0};
|
||||
|
||||
|
@ -26,6 +26,7 @@ namespace big
|
||||
static bool bLastKickHost = false;
|
||||
void looped::session_auto_kick_host()
|
||||
{
|
||||
#if 0
|
||||
bool kick_host = *g_pointers->m_gta.m_is_session_started && g.session.spoof_host_token_type != 0 && g.session.kick_host_when_forcing_host;
|
||||
if (kick_host && !bLastKickHost && is_next_in_queue()) [[unlikely]]
|
||||
{
|
||||
@ -42,5 +43,6 @@ namespace big
|
||||
});
|
||||
}
|
||||
bLastKickHost = kick_host;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -419,6 +419,8 @@ namespace big
|
||||
functions::get_last_keyboard_state m_get_last_keyboard_state;
|
||||
|
||||
PVOID m_network_can_access_multiplayer;
|
||||
|
||||
PVOID m_send_clone_create;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
static_assert(sizeof(gta_pointers) % 8 == 0, "Pointers are not properly aligned");
|
||||
|
@ -158,6 +158,8 @@ namespace big
|
||||
|
||||
detour_hook_helper::add<hooks::network_can_access_multiplayer>("NCAM", g_pointers->m_gta.m_network_can_access_multiplayer);
|
||||
|
||||
detour_hook_helper::add<hooks::send_clone_create>("SCC", g_pointers->m_gta.m_send_clone_create);
|
||||
|
||||
g_hooking = this;
|
||||
}
|
||||
|
||||
|
@ -215,6 +215,8 @@ namespace big
|
||||
static void* create_pool_item(GenericPool* pool);
|
||||
|
||||
static bool network_can_access_multiplayer(void* a1, int* error);
|
||||
|
||||
static void send_clone_create(CNetworkObjectMgr* _this, rage::netObject* object, CNetGamePlayer* player, rage::datBitBuffer* buffer);
|
||||
};
|
||||
|
||||
class minhook_keepalive
|
||||
|
17
src/hooks/misc/send_clone_create.cpp
Normal file
17
src/hooks/misc/send_clone_create.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
#include "hooking/hooking.hpp"
|
||||
#include "services/players/player_service.hpp"
|
||||
|
||||
#include <network/CNetGamePlayer.hpp>
|
||||
|
||||
namespace big
|
||||
{
|
||||
void hooks::send_clone_create(CNetworkObjectMgr* _this, rage::netObject* object, CNetGamePlayer* player, rage::datBitBuffer* buffer)
|
||||
{
|
||||
auto plyr = g_player_service->get_by_id(player->m_player_id);
|
||||
|
||||
if (plyr->block_outgoing_clone_create) [[unlikely]]
|
||||
return;
|
||||
|
||||
g_hooking->get_original<hooks::send_clone_create>()(_this, object, player, buffer);
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
#include "gta_pointers_layout_info.hpp"
|
||||
#include "sc_pointers_layout_info.hpp"
|
||||
|
||||
#define GTA_VERSION_TARGET "1.69-3323"
|
||||
#define GTA_VERSION_TARGET "1.69-3337"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -1986,6 +1986,15 @@ namespace big
|
||||
{
|
||||
g_pointers->m_gta.m_network_can_access_multiplayer = ptr.add(1).rip().as<PVOID>();
|
||||
}
|
||||
},
|
||||
// Send Clone Create
|
||||
{
|
||||
"SCC",
|
||||
"48 8B 02 4D 8B F8",
|
||||
[](memory::handle ptr)
|
||||
{
|
||||
g_pointers->m_gta.m_send_clone_create = ptr.sub(0x1C).as<PVOID>();
|
||||
}
|
||||
}
|
||||
>(); // don't leave a trailing comma at the end
|
||||
|
||||
|
@ -96,6 +96,8 @@ namespace big
|
||||
bool log_clones = false;
|
||||
bool log_network_events = false;
|
||||
|
||||
bool block_outgoing_clone_create = false;
|
||||
|
||||
bool trigger_desync_kick = false;
|
||||
bool trigger_end_session_kick = false;
|
||||
|
||||
|
@ -432,4 +432,27 @@ namespace big::entity
|
||||
if (auto object = (*g_pointers->m_gta.m_network_object_mgr)->find_object_by_id(net_id, true))
|
||||
(*g_pointers->m_gta.m_network_object_mgr)->UnregisterNetworkObject(object, 8, true, true);
|
||||
}
|
||||
|
||||
void force_remove_network_entity(rage::CDynamicEntity* entity, player_ptr for_player)
|
||||
{
|
||||
auto net_obj = entity->m_net_object;
|
||||
|
||||
if (!net_obj)
|
||||
return;
|
||||
|
||||
char buf[0x200]{};
|
||||
rage::datBitBuffer remove_buf(buf, sizeof(buf));
|
||||
|
||||
remove_buf.Write<std::uint16_t>(net_obj->m_object_id, 13);
|
||||
remove_buf.Write<uint32_t>(get_next_token_value(net_obj->m_ownership_token), 5);
|
||||
|
||||
packet pack;
|
||||
pack.write_message(rage::eNetMessage::MsgPackedReliables);
|
||||
pack.write<int>(4, 4); // remove
|
||||
pack.write<int>(1, 5); // msgs_written
|
||||
pack.write<int>(remove_buf.GetPosition(), 13);
|
||||
pack.m_buffer.WriteArray(&buf, remove_buf.GetPosition());
|
||||
|
||||
pack.send(for_player->get_net_game_player()->m_msg_id);
|
||||
}
|
||||
}
|
||||
|
@ -24,4 +24,5 @@ namespace big::entity
|
||||
Entity get_entity_closest_to_middle_of_screen(rage::fwEntity** pointer = nullptr, std::vector<Entity> ignore_entities = {}, bool include_veh = true, bool include_ped = true, bool include_prop = true, bool include_players = true);
|
||||
void force_remove_network_entity(rage::CDynamicEntity* entity, bool delete_locally = true);
|
||||
void force_remove_network_entity(std::uint16_t net_id, int ownership_token = -1, bool delete_locally = true);
|
||||
void force_remove_network_entity(rage::CDynamicEntity* entity, player_ptr for_player);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user