#pragma once #include "script_function.hpp" #include "services/vehicle/vehicle_control_service.hpp" namespace big { namespace freemode { void GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(rage::scrNativeCallContext* src) { const auto hash = src->get_arg(0); if (hash == RAGE_JOAAT("director_mode") || hash == RAGE_JOAAT("main")) { src->set_return_value(0); return; } src->set_return_value(SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(hash)); } void STAT_GET_INT(rage::scrNativeCallContext* src) { if (g_vehicle_control_service.m_driver_performing_task && (src->get_arg(0) == RAGE_JOAAT("MP0_PERSONAL_VEHICLE_ACCESS") || src->get_arg(0) == RAGE_JOAAT("MP1_PERSONAL_VEHICLE_ACCESS"))) { src->set_return_value(0); return; } src->set_return_value(STATS::STAT_GET_INT(src->get_arg(0), src->get_arg(1), src->get_arg(2))); } inline void IS_PLAYER_PLAYING(rage::scrNativeCallContext* src) { // block undead OTR if (g.session.decloak_players && src->get_arg(0) != self::id && !NETWORK::NETWORK_IS_ACTIVITY_SESSION()) src->set_return_value(TRUE); else src->set_return_value(PLAYER::IS_PLAYER_PLAYING(src->get_arg(0))); }; inline void SET_ENTITY_VISIBLE(rage::scrNativeCallContext* src) { auto entity = src->get_arg(0); auto toggle = src->get_arg(1); auto outfit = src->get_arg(2); if (g.self.invisibility && entity == self::ped && toggle) return; else ENTITY::SET_ENTITY_VISIBLE(entity, toggle, outfit); } void SET_BIGMAP_ACTIVE(rage::scrNativeCallContext* src) { if (!g.m_mission_creator_thread) HUD::SET_BIGMAP_ACTIVE(src->get_arg(0), src->get_arg(1)); }; void SET_BLIP_DISPLAY(rage::scrNativeCallContext* src) { if ((!g.m_mission_creator_thread) || src->get_arg(0) != HUD::GET_MAIN_PLAYER_BLIP_ID()) HUD::SET_BLIP_DISPLAY(src->get_arg(0), src->get_arg(1)); }; void NETWORK_HAS_RECEIVED_HOST_BROADCAST_DATA(rage::scrNativeCallContext* src) { if (NETWORK::NETWORK_IS_ACTIVITY_SESSION() || NETWORK::NETWORK_IS_IN_TRANSITION() || NETWORK::NETWORK_IS_TRANSITION_TO_GAME() || NETWORK::NETWORK_IS_HOST_OF_THIS_SCRIPT()) { src->set_return_value(NETWORK::NETWORK_HAS_RECEIVED_HOST_BROADCAST_DATA()); } else { if (g.session.force_script_host && (g.session.fast_join || NETWORK::NETWORK_HAS_RECEIVED_HOST_BROADCAST_DATA())) { auto hash = SCRIPT::GET_HASH_OF_THIS_SCRIPT_NAME(); g_fiber_pool->queue_job([hash] { scripts::force_host(hash); if (auto script = gta_util::find_script_thread(hash); script && script->m_net_component) ((CGameScriptHandlerNetComponent*)script->m_net_component)->block_host_migration(true); }); } if (SCRIPT::GET_HASH_OF_THIS_SCRIPT_NAME() == RAGE_JOAAT("freemode") && g.session.fast_join) { scr_functions::set_freemode_session_active({}); src->set_return_value(TRUE); } else { src->set_return_value(NETWORK::NETWORK_HAS_RECEIVED_HOST_BROADCAST_DATA()); } } } } }