Fixed mission cars not being properly cleaned up. (#3434)
Some checks failed
Nightly Build / Check Recent Commit (push) Failing after 0s
Nightly Build / Build Nightly (push) Has been skipped
Nightly Build / Recreate Release (push) Has been skipped

This commit is contained in:
gir489 2024-07-26 17:29:49 -04:00 committed by GitHub
parent 995b381053
commit 43afdae9e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

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