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.
YimMenu/src/native_hooks/freemode.hpp

96 lines
3.1 KiB
C++
Raw Normal View History

#pragma once
#include "script_function.hpp"
2023-04-05 19:54:29 +02:00
#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<rage::joaat_t>(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));
}
2023-04-05 19:54:29 +02:00
void STAT_GET_INT(rage::scrNativeCallContext* src)
{
if (g_vehicle_control_service.m_driver_performing_task && (src->get_arg<Hash>(0) == RAGE_JOAAT("MP0_PERSONAL_VEHICLE_ACCESS") || src->get_arg<Hash>(0) == RAGE_JOAAT("MP1_PERSONAL_VEHICLE_ACCESS")))
2023-04-05 19:54:29 +02:00
{
src->set_return_value<int>(0);
return;
}
src->set_return_value(STATS::STAT_GET_INT(src->get_arg<Hash>(0), src->get_arg<int*>(1), src->get_arg<int>(2)));
}
inline void IS_PLAYER_PLAYING(rage::scrNativeCallContext* src)
{
// block undead OTR
if (g.session.decloak_players && src->get_arg<Player>(0) != self::id && !NETWORK::NETWORK_IS_ACTIVITY_SESSION())
src->set_return_value<BOOL>(TRUE);
else
src->set_return_value<BOOL>(PLAYER::IS_PLAYER_PLAYING(src->get_arg<Player>(0)));
};
2022-11-21 15:42:12 +00:00
inline void SET_ENTITY_VISIBLE(rage::scrNativeCallContext* src)
{
auto entity = src->get_arg<Entity>(0);
auto toggle = src->get_arg<bool>(1);
auto outfit = src->get_arg<bool>(2);
if (g.self.invisibility && entity == self::ped && toggle)
2022-11-21 15:42:12 +00:00
return;
else
ENTITY::SET_ENTITY_VISIBLE(entity, toggle, outfit);
}
2022-12-06 16:12:02 +00:00
void SET_BIGMAP_ACTIVE(rage::scrNativeCallContext* src)
{
if (!g.m_mission_creator_thread)
HUD::SET_BIGMAP_ACTIVE(src->get_arg<bool>(0), src->get_arg<bool>(1));
2022-12-06 16:12:02 +00:00
};
void SET_BLIP_DISPLAY(rage::scrNativeCallContext* src)
{
if ((!g.m_mission_creator_thread) || src->get_arg<Blip>(0) != HUD::GET_MAIN_PLAYER_BLIP_ID())
HUD::SET_BLIP_DISPLAY(src->get_arg<Blip>(0), src->get_arg<bool>(1));
2022-12-06 16:12:02 +00:00
};
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<BOOL>(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<BOOL>(TRUE);
}
else
{
src->set_return_value<BOOL>(NETWORK::NETWORK_HAS_RECEIVED_HOST_BROADCAST_DATA());
}
}
}
}
}