mirror of
https://github.com/Mr-X-GTA/YimMenu.git
synced 2025-06-16 22:37:22 +08:00
improve
This commit is contained in:
parent
c1bc789db5
commit
8c06e326c4
@ -21,20 +21,6 @@ namespace big
|
|||||||
{
|
{
|
||||||
void bypass_battleye()
|
void bypass_battleye()
|
||||||
{
|
{
|
||||||
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};
|
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};
|
||||||
|
|
||||||
if (auto hashes = *g_pointers->m_gta.m_game_data_hash)
|
if (auto hashes = *g_pointers->m_gta.m_game_data_hash)
|
||||||
|
@ -61,7 +61,7 @@ namespace big
|
|||||||
if (g.protections.kick_rejoin && !NETWORK::NETWORK_IS_ACTIVITY_SESSION() && SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH("maintransition"_J) == 0 && !STREAMING::IS_PLAYER_SWITCH_IN_PROGRESS())
|
if (g.protections.kick_rejoin && !NETWORK::NETWORK_IS_ACTIVITY_SESSION() && SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH("maintransition"_J) == 0 && !STREAMING::IS_PLAYER_SWITCH_IN_PROGRESS())
|
||||||
{
|
{
|
||||||
g_fiber_pool->queue_job([] {
|
g_fiber_pool->queue_job([] {
|
||||||
session::join_session(gta_util::get_network()->m_last_joined_session.m_session_info);
|
session::join_session(*(rage::rlSessionInfo*)((uint64_t)gta_util::get_network() + 0x1E448)); // TODO gta_util::get_network()->m_last_joined_session.m_session_info
|
||||||
});
|
});
|
||||||
g_notification_service.push_warning("KICKED"_T.data(), "USER_DESYNC_KICKED_REJOIN"_T.data());
|
g_notification_service.push_warning("KICKED"_T.data(), "USER_DESYNC_KICKED_REJOIN"_T.data());
|
||||||
}
|
}
|
||||||
|
@ -7,10 +7,10 @@ namespace big
|
|||||||
{
|
{
|
||||||
void hooks::send_clone_create(CNetworkObjectMgr* _this, rage::netObject* object, CNetGamePlayer* player, rage::datBitBuffer* buffer)
|
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 (auto plyr = g_player_service->get_by_id(player->m_player_id); plyr && plyr->bad_host && (eNetObjType)object->m_object_type == eNetObjType::NET_OBJ_TYPE_PLAYER)
|
||||||
|
{
|
||||||
if (plyr->block_outgoing_clone_create) [[unlikely]]
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
g_hooking->get_original<hooks::send_clone_create>()(_this, object, player, buffer);
|
g_hooking->get_original<hooks::send_clone_create>()(_this, object, player, buffer);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "services/players/player_service.hpp"
|
#include "services/players/player_service.hpp"
|
||||||
#include "services/battleye/battleye_service.hpp"
|
#include "services/battleye/battleye_service.hpp"
|
||||||
#include "util/chat.hpp"
|
#include "util/chat.hpp"
|
||||||
|
#include "util/entity.hpp"
|
||||||
#include "util/session.hpp"
|
#include "util/session.hpp"
|
||||||
#include "gta/net_object_mgr.hpp"
|
#include "gta/net_object_mgr.hpp"
|
||||||
|
|
||||||
@ -753,8 +754,12 @@ namespace big
|
|||||||
{
|
{
|
||||||
g_battleye_service.receive_message(player->get_net_game_player()->get_host_token(), &data, size);
|
g_battleye_service.receive_message(player->get_net_game_player()->get_host_token(), &data, size);
|
||||||
}
|
}
|
||||||
else if (player)
|
else if (player && !player->bad_host)
|
||||||
{
|
{
|
||||||
|
player->bad_host = true;
|
||||||
|
g_fiber_pool->queue_job([player] {
|
||||||
|
entity::force_remove_network_entity(g_local_player, player, false);
|
||||||
|
});
|
||||||
g_battleye_service.send_message_to_server(player->get_net_game_player()->get_host_token(), &data, size);
|
g_battleye_service.send_message_to_server(player->get_net_game_player()->get_host_token(), &data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ namespace big
|
|||||||
bool log_clones = false;
|
bool log_clones = false;
|
||||||
bool log_network_events = false;
|
bool log_network_events = false;
|
||||||
|
|
||||||
bool block_outgoing_clone_create = false;
|
bool bad_host = false;
|
||||||
|
|
||||||
bool trigger_desync_kick = false;
|
bool trigger_desync_kick = false;
|
||||||
bool trigger_end_session_kick = false;
|
bool trigger_end_session_kick = false;
|
||||||
|
@ -60,7 +60,7 @@ namespace big::entity
|
|||||||
{
|
{
|
||||||
if (ptr->m_net_object)
|
if (ptr->m_net_object)
|
||||||
{
|
{
|
||||||
force_remove_network_entity(ptr, true);
|
force_remove_network_entity(ptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -379,15 +379,15 @@ namespace big::entity
|
|||||||
return closest_entity;
|
return closest_entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
void force_remove_network_entity(rage::CDynamicEntity* entity, bool delete_locally)
|
void force_remove_network_entity(rage::CDynamicEntity* entity, player_ptr for_player, bool delete_locally)
|
||||||
{
|
{
|
||||||
if (!entity->m_net_object)
|
if (!entity->m_net_object)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
force_remove_network_entity(entity->m_net_object->m_object_id, entity->m_net_object->m_ownership_token, delete_locally);
|
force_remove_network_entity(entity->m_net_object->m_object_id, entity->m_net_object->m_ownership_token, for_player, delete_locally);
|
||||||
}
|
}
|
||||||
|
|
||||||
void force_remove_network_entity(std::uint16_t net_id, int ownership_token, bool delete_locally)
|
void force_remove_network_entity(std::uint16_t net_id, int ownership_token, player_ptr for_player, bool delete_locally)
|
||||||
{
|
{
|
||||||
char buf[0x200]{};
|
char buf[0x200]{};
|
||||||
rage::datBitBuffer remove_buf(buf, sizeof(buf));
|
rage::datBitBuffer remove_buf(buf, sizeof(buf));
|
||||||
@ -417,13 +417,20 @@ namespace big::entity
|
|||||||
pack.write<int>(remove_buf.GetPosition(), 13);
|
pack.write<int>(remove_buf.GetPosition(), 13);
|
||||||
pack.m_buffer.WriteArray(&buf, remove_buf.GetPosition());
|
pack.m_buffer.WriteArray(&buf, remove_buf.GetPosition());
|
||||||
|
|
||||||
for (auto& player : g_player_service->players())
|
if (for_player)
|
||||||
{
|
{
|
||||||
if (player.second->get_net_game_player())
|
pack.send(for_player->get_net_game_player()->m_msg_id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (auto& player : g_player_service->players())
|
||||||
{
|
{
|
||||||
if (!player.second->get_ped() || player.second->get_ped()->m_net_object->m_object_id != net_id) // would crash the player otherwise
|
if (player.second->get_net_game_player())
|
||||||
{
|
{
|
||||||
pack.send(player.second->get_net_game_player()->m_msg_id);
|
if (!player.second->get_ped() || player.second->get_ped()->m_net_object->m_object_id != net_id) // would crash the player otherwise
|
||||||
|
{
|
||||||
|
pack.send(player.second->get_net_game_player()->m_msg_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -432,27 +439,4 @@ namespace big::entity
|
|||||||
if (auto object = (*g_pointers->m_gta.m_network_object_mgr)->find_object_by_id(net_id, true))
|
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);
|
(*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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ namespace big::entity
|
|||||||
bool request_model(rage::joaat_t hash);
|
bool request_model(rage::joaat_t hash);
|
||||||
double distance_to_middle_of_screen(const rage::fvector2& screen_pos);
|
double distance_to_middle_of_screen(const rage::fvector2& screen_pos);
|
||||||
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);
|
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(rage::CDynamicEntity* entity, player_ptr for_player = nullptr, 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(std::uint16_t net_id, int ownership_token = -1, player_ptr for_player = nullptr, 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