fix: Instant Respawn Crash (#867)

Fixes #861
This commit is contained in:
Aure7138 2023-01-16 06:14:41 +08:00 committed by GitHub
parent f6a6682c86
commit 7433b0a69f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 4 deletions

View File

@ -1,18 +1,30 @@
#include "hooking.hpp"
#include <datanodes/player/CPlayerGameStateDataNode.hpp>
#include "natives.hpp"
#include "services/players/player_service.hpp"
#include "util/globals.hpp"
namespace big
{
bool is_player_in_cutscene(Player player) { return NETWORK::NETWORK_IS_PLAYER_IN_MP_CUTSCENE(player); }
static bool is_in_cutscene()
{
if (g_local_player && g_local_player->m_player_info)
return g_local_player->m_player_info->m_game_state == eGameState::InMPCutscene;
return false;
}
bool is_player_in_interior(Ped player) { return (INTERIOR::GET_INTERIOR_FROM_ENTITY(player) != 0); }
static bool is_in_interior()
{
int id = 0;
if (auto self_ptr = g_player_service->get_self(); self_ptr->is_valid())
id = self_ptr->id();
return globals::get_interior_from_player(id) != 0;
}
bool hooks::write_player_game_state_data_node(rage::netObject* player, CPlayerGameStateDataNode* node)
{
auto ret = g_hooking->get_original<write_player_game_state_data_node>()(player, node);
if (g.spoofing.spoof_hide_god && !is_player_in_cutscene(self::id) && !is_player_in_interior(self::ped))
if (g.spoofing.spoof_hide_god && !is_in_cutscene() && !is_in_interior())
{
node->m_is_invincible = false;
node->m_bullet_proof = false;

View File

@ -33,4 +33,9 @@ namespace big::globals
g_pointers->m_trigger_script_event(1, args, arg_count, 1 << target);
}
inline Interior get_interior_from_player(Player player)
{
return *scr_globals::globalplayer_bd.at(player, scr_globals::size::globalplayer_bd).at(245).as<Interior*>();
}
}