This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
Files
YimMenu/src/hooks/protections/received_clone_remove.cpp
maybegreat48 4589b87553 Menu revamp (#3274)
* Complete player and network UI redesign, meant to show all features instead of stuffing them into tiny boxes
* Added option to delete player vehicles
* Better clone player (now clones head blend too)
* Better host token spoofing, with an option to enter your own
* Better host token spoofing detection
* Better desync kick prot detections
* A script blocker for the entire session (per-player options will be added later)
* Added option to spoof data/DLC hashes
* Logging framework that allows developers to easily debug false positives
* Major protection improvements
2024-06-27 10:32:17 +02:00

41 lines
1.4 KiB
C++

#include "hooking/hooking.hpp"
#include "util/notify.hpp"
namespace big
{
void hooks::received_clone_remove(CNetworkObjectMgr* mgr, CNetGamePlayer* src, CNetGamePlayer* dst, int16_t object_id, uint32_t ownership_token)
{
if (!dst || !dst->m_player_info || !dst->m_player_info->m_ped || !dst->m_player_info->m_ped->m_net_object
|| dst->m_player_info->m_ped->m_net_object->m_object_id == object_id) [[unlikely]]
{
notify::crash_blocked(src, "player ped removal");
return;
}
if (g_local_player && g_local_player->m_vehicle && g_local_player->m_vehicle->m_net_object
&& object_id == g_local_player->m_vehicle->m_net_object->m_object_id) [[unlikely]]
{
if (auto plyr = g_player_service->get_by_id(src->m_player_id))
{
g.reactions.delete_vehicle.process(plyr);
}
return;
}
if (auto object = g_pointers->m_gta.m_get_net_object(*g_pointers->m_gta.m_network_object_mgr, object_id, true)) [[likely]]
{
if (object->m_object_type == (int)eNetObjType::NET_OBJ_TYPE_PLAYER && object->m_owner_id != src->m_player_id) [[unlikely]]
{
std::string target = "<UNKNOWN>";
if (auto tgt = g_player_service->get_by_id(object->m_owner_id))
target = tgt->get_name();
LOGF(stream::net_sync, WARNING, "Rejecting clone remove from {}, who is trying to delete {}'s player ped", src->get_name(), target);
return;
}
}
g_hooking->get_original<hooks::received_clone_remove>()(mgr, src, dst, object_id, ownership_token);
}
}