diff --git a/cmake/async-logger.cmake b/cmake/async-logger.cmake index 3a6662a8..490ce8a7 100644 --- a/cmake/async-logger.cmake +++ b/cmake/async-logger.cmake @@ -6,7 +6,7 @@ message("AsyncLogger") FetchContent_Declare( AsyncLogger GIT_REPOSITORY https://github.com/Yimura/AsyncLogger.git - GIT_TAG 80ce938277acd44767f858099920ae20f1df42ca + GIT_TAG 6fcfd90b3f4ca4dae09c4a96e9a506e6aea06472 GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(AsyncLogger) diff --git a/cmake/gtav-classes.cmake b/cmake/gtav-classes.cmake index fc73953e..2845ec30 100644 --- a/cmake/gtav-classes.cmake +++ b/cmake/gtav-classes.cmake @@ -3,7 +3,7 @@ include(FetchContent) FetchContent_Declare( gtav_classes GIT_REPOSITORY https://github.com/Yimura/GTAV-Classes.git - GIT_TAG c741a3031de7981d12c97f55569f930a82556d63 + GIT_TAG 68551ec2e5b09d6fe629abb7726148127d9f9e6f GIT_PROGRESS TRUE CONFIGURE_COMMAND "" BUILD_COMMAND "" diff --git a/src/backend/backend.cpp b/src/backend/backend.cpp index e173fa13..99da2c7f 100644 --- a/src/backend/backend.cpp +++ b/src/backend/backend.cpp @@ -124,6 +124,7 @@ namespace big looped::session_force_thunder(); looped::session_randomize_ceo_colors(); looped::session_auto_kick_host(); + looped::session_force_script_host(); looped::session_block_jobs(); looped::session_chat_translator(); looped::session_modder_detection(); diff --git a/src/backend/bool_command.cpp b/src/backend/bool_command.cpp index e364f28e..da8180f8 100644 --- a/src/backend/bool_command.cpp +++ b/src/backend/bool_command.cpp @@ -74,7 +74,7 @@ namespace big { m_toggle = true; m_last_enabled = true; - g_fiber_pool->queue_job([this] { + g_fiber_pool->execute_on_game_thread([this] { on_enable(); }); } @@ -86,7 +86,7 @@ namespace big { m_toggle = false; m_last_enabled = false; - g_fiber_pool->queue_job([this] { + g_fiber_pool->execute_on_game_thread([this] { on_disable(); }); } @@ -97,14 +97,14 @@ namespace big if (m_toggle && !m_last_enabled) { m_last_enabled = true; - g_fiber_pool->queue_job([this] { + g_fiber_pool->execute_on_game_thread([this] { on_enable(); }); } else if (!m_toggle && m_last_enabled) { m_last_enabled = false; - g_fiber_pool->queue_job([this] { + g_fiber_pool->execute_on_game_thread([this] { on_disable(); }); } diff --git a/src/backend/commands/player/toxic/kill_player.cpp b/src/backend/commands/player/toxic/kill_player.cpp index 1606ca8d..d1240d16 100644 --- a/src/backend/commands/player/toxic/kill_player.cpp +++ b/src/backend/commands/player/toxic/kill_player.cpp @@ -18,7 +18,8 @@ namespace big if (!player->get_ped()) return; - g_pointers->m_gta.m_send_network_damage(g_player_service->get_self()->get_ped(), + g_pointers->m_gta.m_send_network_damage( + g_player_service->get_self()->get_ped(), player->get_ped(), player->get_ped()->m_navigation->get_position(), 0, @@ -27,7 +28,7 @@ namespace big 10000.0f, 2, 0, - (1 << 4), + (1 << 4) | 0x80000, 0, 0, 0, diff --git a/src/backend/commands/player/toxic/start_script.cpp b/src/backend/commands/player/toxic/start_script.cpp index e8466e37..eb57a8d6 100644 --- a/src/backend/commands/player/toxic/start_script.cpp +++ b/src/backend/commands/player/toxic/start_script.cpp @@ -24,7 +24,7 @@ namespace big int64_t args[arg_count] = {(int64_t)eRemoteEvent::StartScriptBegin, (int64_t)self::id, 1 << player->id()}; args[3] = scriptId; - strcpy((char*)&args[2 + 3], "0"); + strcpy((char*)&args[3 + 3], "0"); args[3 + 16] = -1; args[3 + 17] = 1337; args[3 + 19] = arg19; diff --git a/src/backend/commands/player/toxic/turn_into_beast.cpp b/src/backend/commands/player/toxic/turn_into_beast.cpp index 31bfcb7d..ec1d761a 100644 --- a/src/backend/commands/player/toxic/turn_into_beast.cpp +++ b/src/backend/commands/player/toxic/turn_into_beast.cpp @@ -118,7 +118,6 @@ namespace big if (!stack || !net_component) return; - ((CGameScriptHandlerNetComponent*)thread->m_net_component)->block_host_migration(true); thread->m_context.m_state = rage::eThreadState::unk_3; g.m_hunt_the_beast_thread = thread; diff --git a/src/backend/commands/player/vehicle/delete_vehicle.cpp b/src/backend/commands/player/vehicle/delete_vehicle.cpp new file mode 100644 index 00000000..bb2ede32 --- /dev/null +++ b/src/backend/commands/player/vehicle/delete_vehicle.cpp @@ -0,0 +1,27 @@ +#include "backend/player_command.hpp" +#include "natives.hpp" +#include "pointers.hpp" +#include "util/entity.hpp" + +namespace big +{ + class delete_vehicle : player_command + { + using player_command::player_command; + + virtual void execute(player_ptr player, const command_arguments& _args, const std::shared_ptr ctx) override + { + auto object = player->get_current_vehicle(); + if (object) + entity::force_remove_network_entity(object); + else if (player->get_ped()) + { + auto net_id = *(int16_t*)(((__int64)player->get_ped()->m_net_object) + 0x3D8); // TODO: extract offset + if (net_id) + entity::force_remove_network_entity(net_id); + } + } + }; + + delete_vehicle g_delete_vehicle("deleteveh", "BACKEND_DELETE_VEHICLE", "BACKEND_DELETE_VEHICLE_DESC", 0); +} diff --git a/src/backend/looped/looped.hpp b/src/backend/looped/looped.hpp index 4c188402..4a626a4c 100644 --- a/src/backend/looped/looped.hpp +++ b/src/backend/looped/looped.hpp @@ -35,6 +35,7 @@ namespace big static void session_block_jobs(); static void session_randomize_ceo_colors(); static void session_auto_kick_host(); + static void session_force_script_host(); static void session_chat_translator(); static void session_modder_detection(); diff --git a/src/backend/looped/self/dance_mode.cpp b/src/backend/looped/self/dance_mode.cpp index 38fb38ba..20e6e9e4 100644 --- a/src/backend/looped/self/dance_mode.cpp +++ b/src/backend/looped/self/dance_mode.cpp @@ -29,8 +29,6 @@ namespace big g.m_dance_thread = gta_util::find_script_thread_by_id(thread); g.m_dance_program = gta_util::find_script_program("am_mp_nightclub"_J); - (*g_pointers->m_gta.m_script_handler_mgr)->attach_thread(g.m_dance_thread); - g.m_dance_thread->m_context.m_state = rage::eThreadState::unk_3; // perform initial setup diff --git a/src/backend/looped/session/auto_kick_host.cpp b/src/backend/looped/session/auto_kick_host.cpp index 9721ee7a..2101970d 100644 --- a/src/backend/looped/session/auto_kick_host.cpp +++ b/src/backend/looped/session/auto_kick_host.cpp @@ -8,8 +8,8 @@ namespace big static bool bLastKickHost = false; void looped::session_auto_kick_host() { - bool kick_host = *g_pointers->m_gta.m_is_session_started && g.session.force_session_host && g.session.kick_host_when_forcing_host; - if (kick_host && !bLastKickHost) + bool kick_host = false; // *g_pointers->m_gta.m_is_session_started && g.session.force_session_host && g.session.kick_host_when_forcing_host; + if (kick_host && !bLastKickHost) [[unlikely]] { g_player_service->iterate([](auto& plyr) { // Don't kick trusted players diff --git a/src/backend/looped/session/force_script_host.cpp b/src/backend/looped/session/force_script_host.cpp new file mode 100644 index 00000000..9468e6c4 --- /dev/null +++ b/src/backend/looped/session/force_script_host.cpp @@ -0,0 +1,63 @@ +#include "backend/looped/looped.hpp" +#include "backend/player_command.hpp" +#include "natives.hpp" +#include "pointers.hpp" +#include "gta_util.hpp" +#include "gta/script_handler.hpp" +#include "gta/net_array.hpp" +#include "packet.hpp" + +namespace big +{ + void looped::session_force_script_host() + { + if (!g.session.force_script_host) + return; + + static bool loaded_into_session = false; + + if (!*g_pointers->m_gta.m_is_session_started) + { + loaded_into_session = false; + return; + } + + if (!loaded_into_session) + { + if (SCRIPT::GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH("maintransition"_J) == 0) [[unlikely]] + { + if (auto freemode = gta_util::find_script_thread("freemode"_J); freemode && freemode->m_net_component) + { + auto net_component = reinterpret_cast(freemode->m_net_component); + int num_synced_arrays = 0; + + for (int i = 0; i < net_component->m_host_array_count; i++) + { + if ((g_pointers->m_gta.m_get_host_array_handler_by_index(net_component, i)->m_flags & 1) != 0) + num_synced_arrays++; + } + + if (num_synced_arrays == net_component->m_host_array_count) + { + net_component->do_host_migration(g_player_service->get_self()->get_net_game_player(), 0xFFFF, true); + + packet pack; + pack.write_message(rage::eNetMessage::MsgScriptVerifyHostAck); + net_component->m_script_handler->get_id()->serialize(&pack.m_buffer); + pack.write(true, 1); + pack.write(true, 1); + pack.write(0xFFFF, 16); + + for (auto& player : g_player_service->players()) + { + if (player.second->get_net_game_player()) + pack.send(player.second->get_net_game_player()->m_msg_id); + } + + loaded_into_session = true; + } + } + } + } + } +} diff --git a/src/backend/looped/session/spoof_host_token.cpp b/src/backend/looped/session/spoof_host_token.cpp new file mode 100644 index 00000000..66e25019 --- /dev/null +++ b/src/backend/looped/session/spoof_host_token.cpp @@ -0,0 +1,104 @@ +#include "backend/looped/looped.hpp" +#include "backend/looped_command.hpp" +#include "pointers.hpp" +#include "gta_util.hpp" +#include "util/math.hpp" +#include +#include + +namespace big +{ + void set_peer_id_upper(std::uint64_t upper) + { + *g_pointers->m_gta.m_peer_id &= 0xFFFFFFFF; + *g_pointers->m_gta.m_peer_id |= (upper << 32); + + if (gta_util::get_network()->m_game_session_ptr) + gta_util::get_network()->m_game_session_ptr->m_local_player.m_player_data.m_peer_id = *g_pointers->m_gta.m_peer_id; + if (gta_util::get_network()->m_transition_session_ptr) + gta_util::get_network()->m_transition_session_ptr->m_local_player.m_player_data.m_peer_id = *g_pointers->m_gta.m_peer_id; + + g_pointers->m_gta.m_profile_gamer_info->m_peer_id = *g_pointers->m_gta.m_peer_id; + g_pointers->m_gta.m_player_info_gamer_info->m_peer_id = *g_pointers->m_gta.m_peer_id; + (*g_pointers->m_gta.m_communications)->m_voice.m_connections[0]->m_gamer_info.m_peer_id = *g_pointers->m_gta.m_peer_id; + + if (g_local_player && g_local_player->m_player_info) + g_local_player->m_player_info->m_net_player_data.m_peer_id = *g_pointers->m_gta.m_peer_id; + } + + void set_host_token(std::uint64_t token) + { + *g_pointers->m_gta.m_host_token = token; + + if (gta_util::get_network()->m_game_session_ptr) + gta_util::get_network()->m_game_session_ptr->m_local_player.m_player_data.m_host_token = token; + if (gta_util::get_network()->m_transition_session_ptr) + gta_util::get_network()->m_transition_session_ptr->m_local_player.m_player_data.m_host_token = token; + + g_pointers->m_gta.m_profile_gamer_info->m_host_token = token; + g_pointers->m_gta.m_player_info_gamer_info->m_host_token = token; + (*g_pointers->m_gta.m_communications)->m_voice.m_connections[0]->m_gamer_info.m_host_token = token; + + if (g_local_player && g_local_player->m_player_info) + g_local_player->m_player_info->m_net_player_data.m_host_token = token; + + + set_peer_id_upper(token >> 32); + } + + class spoof_host_token_internal : looped_command + { + using looped_command::looped_command; + + virtual void on_enable() override + { + g.session.original_host_token = *g_pointers->m_gta.m_host_token; + } + + virtual void on_tick() override + { + if (g.session.spoof_host_token_dirty && gta_util::get_network()->m_game_session_state == 0) + { + switch (g.session.spoof_host_token_type) + { + case 0: // Disabled + { + set_host_token(g.session.original_host_token); + break; + } + case 1: // Legit + { + std::uint64_t rand_upper = math::rand(20, 230); + set_host_token(((g.session.original_host_token) & 0xFFFFFFFF) | (rand_upper << 32)); + break; + } + case 2: // Aggressive + { + set_host_token(math::rand(10, 1000)); + break; + } + case 3: // Very aggressive + { + set_host_token(0); + break; + } + case 4: // Custom + { + set_host_token(g.session.custom_host_token); + break; + } + } + g.session.spoof_host_token_dirty = false; + } + } + + virtual void on_disable() override + { + if (g.session.original_host_token) + set_host_token(g.session.original_host_token); + } + }; + + static bool true_ref = true; + spoof_host_token_internal g_spoof_host_token_internal("$$spoofhosttoken", "", "", true_ref); +} \ No newline at end of file diff --git a/src/backend/looped/spoofing/spoof_dlc_hash.cpp b/src/backend/looped/spoofing/spoof_dlc_hash.cpp new file mode 100644 index 00000000..bc4a586f --- /dev/null +++ b/src/backend/looped/spoofing/spoof_dlc_hash.cpp @@ -0,0 +1,20 @@ +#include "backend/looped_command.hpp" +#include "pointers.hpp" +#include "hooking/hooking.hpp" + +namespace big +{ + class copy_current_dlc_hash : command + { + using command::command; + + virtual void execute(const command_arguments&, const std::shared_ptr ctx) override + { + g.spoofing.dlc_hash = g_hooking->get_original()(*g_pointers->m_gta.m_dlc_manager, 0); + } + }; + + bool_command + g_spoof_dlc_hash("spoofdlchash", "SPOOF_DLC_HASH", "SPOOF_DLC_HASH_DESC", g.spoofing.spoof_dlc_hash); + copy_current_dlc_hash g_copy_current_dlc_hash("storedlchash", "COPY_CURRENT_DLC_HASH", "COPY_CURRENT_DLC_HASH_DESC", 0); +} diff --git a/src/backend/looped/spoofing/spoof_game_data_hash.cpp b/src/backend/looped/spoofing/spoof_game_data_hash.cpp new file mode 100644 index 00000000..54e3aac6 --- /dev/null +++ b/src/backend/looped/spoofing/spoof_game_data_hash.cpp @@ -0,0 +1,69 @@ +#include "backend/looped_command.hpp" +#include "pointers.hpp" +#include + +namespace +{ + static std::array orig_hash; + + void store_data(std::array& data) + { + for (int i = 0; i < 15; i++) + { + data[i] = (*big::g_pointers->m_gta.m_game_data_hash)->m_data[i]; + } + } + + void load_data(const std::array& data) + { + for (int i = 0; i < 15; i++) + { + (*big::g_pointers->m_gta.m_game_data_hash)->m_data[i] = data[i]; + } + } +} + +namespace big +{ + class spoof_game_data_hash : looped_command + { + using looped_command::looped_command; + + virtual void on_enable() override + { + store_data(orig_hash); + } + + virtual void on_tick() override + { + if (g.spoofing.game_data_hash_dirty) + { + load_data(g.spoofing.game_data_hash); + g.spoofing.game_data_hash_dirty = false; + } + } + + virtual void on_disable() override + { + load_data(orig_hash); + } + }; + + class copy_current_game_data_hash : command + { + using command::command; + + virtual void execute(const command_arguments&, const std::shared_ptr ctx) override + { + if (g.spoofing.spoof_game_data_hash) + g.spoofing.game_data_hash = orig_hash; + else + store_data(g.spoofing.game_data_hash); + + g.spoofing.game_data_hash_dirty = true; + } + }; + + spoof_game_data_hash g_spoof_game_data_hash("spoofdatahash", "SPOOF_GAME_DATA_HASH", "SPOOF_GAME_DATA_HASH_DESC", g.spoofing.spoof_game_data_hash); + copy_current_game_data_hash g_copy_current_game_data_hash("storecurrenthash", "COPY_CURRENT_GAME_DATA_HASH", "COPY_CURRENT_GAME_DATA_HASH_DESC", 0); +} diff --git a/src/backend/looped/system/spoofing.cpp b/src/backend/looped/system/spoofing.cpp index 8a3a95d0..9a203b29 100644 --- a/src/backend/looped/system/spoofing.cpp +++ b/src/backend/looped/system/spoofing.cpp @@ -14,28 +14,6 @@ namespace big static bool bLastForceHost = false; void looped::system_spoofing() { - if (bLastForceHost != g.session.force_session_host && gta_util::get_network()->m_game_session_state == 0) - { - uint64_t host_token; - g_pointers->m_gta.m_generate_uuid(&host_token); - - host_token = g.session.force_session_host ? math::rand(10000) : host_token; - - *g_pointers->m_gta.m_host_token = host_token; - - if (gta_util::get_network()->m_game_session_ptr) - gta_util::get_network()->m_game_session_ptr->m_local_player.m_player_data.m_host_token = host_token; - - g_pointers->m_gta.m_profile_gamer_info->m_host_token = host_token; - g_pointers->m_gta.m_player_info_gamer_info->m_host_token = host_token; - (*g_pointers->m_gta.m_communications)->m_voice.m_connections[0]->m_gamer_info.m_host_token = host_token; - - if (g_local_player && g_local_player->m_player_info) - g_local_player->m_player_info->m_net_player_data.m_host_token = host_token; - - bLastForceHost = g.session.force_session_host; - } - if (*g_pointers->m_gta.m_is_session_started) { gta_util::execute_as_script("freemode"_J, [] { diff --git a/src/backend/looped/vehicle/drive_on_water.cpp b/src/backend/looped/vehicle/drive_on_water.cpp index 31751146..92b7950e 100644 --- a/src/backend/looped/vehicle/drive_on_water.cpp +++ b/src/backend/looped/vehicle/drive_on_water.cpp @@ -3,6 +3,7 @@ #include "fiber_pool.hpp" #include "natives.hpp" #include "util/entity.hpp" +#include "script.hpp" namespace big { diff --git a/src/backend/looped/weapons/aimbot.cpp b/src/backend/looped/weapons/aimbot.cpp index d035ab8d..10dd4e98 100644 --- a/src/backend/looped/weapons/aimbot.cpp +++ b/src/backend/looped/weapons/aimbot.cpp @@ -2,7 +2,9 @@ #include "gta/enums.hpp" #include "natives.hpp" #include "util/entity.hpp" +#include "util/math.hpp" #include + namespace big { class aimbot : looped_command diff --git a/src/backend/looped/weapons/cage_gun.cpp b/src/backend/looped/weapons/cage_gun.cpp index 111d4efa..74b861dd 100644 --- a/src/backend/looped/weapons/cage_gun.cpp +++ b/src/backend/looped/weapons/cage_gun.cpp @@ -2,6 +2,7 @@ #include "core/enums.hpp" #include "gta/enums.hpp" #include "util/entity.hpp" +#include "natives.hpp" namespace big { diff --git a/src/backend/looped/weapons/flying_axe.cpp b/src/backend/looped/weapons/flying_axe.cpp index 2d49d26b..2a6d7f5b 100644 --- a/src/backend/looped/weapons/flying_axe.cpp +++ b/src/backend/looped/weapons/flying_axe.cpp @@ -4,7 +4,9 @@ #include "script.hpp" #include "util/entity.hpp" #include "gta/enums.hpp" +#include "util/math.hpp" #include + namespace big { static timer spawning_axe_delay(200ms); diff --git a/src/backend/looped/weapons/paintgun.cpp b/src/backend/looped/weapons/paintgun.cpp index 918b7fc0..893dbfc7 100644 --- a/src/backend/looped/weapons/paintgun.cpp +++ b/src/backend/looped/weapons/paintgun.cpp @@ -2,6 +2,8 @@ #include "core/enums.hpp" #include "gta/enums.hpp" #include "util/entity.hpp" +#include "util/math.hpp" +#include "natives.hpp" namespace big { diff --git a/src/backend/looped/weapons/steal_vehicle_gun.cpp b/src/backend/looped/weapons/steal_vehicle_gun.cpp index 6ba79c36..a2da0749 100644 --- a/src/backend/looped/weapons/steal_vehicle_gun.cpp +++ b/src/backend/looped/weapons/steal_vehicle_gun.cpp @@ -2,6 +2,8 @@ #include "core/enums.hpp" #include "gta/enums.hpp" #include "util/entity.hpp" +#include "natives.hpp" +#include "script.hpp" namespace big { diff --git a/src/byte_patch_manager.cpp b/src/byte_patch_manager.cpp index 691a2ec4..3edb2bf0 100644 --- a/src/byte_patch_manager.cpp +++ b/src/byte_patch_manager.cpp @@ -24,6 +24,8 @@ namespace big // Patch blocked explosions explosion_anti_cheat_bypass::m_can_blame_others = memory::byte_patch::make(g_pointers->m_gta.m_blame_explode.as(), 0xE990).get(); + explosion_anti_cheat_bypass::m_set_script_flag = + memory::byte_patch::make(g_pointers->m_gta.m_blame_explode.sub(0x12).as(), 0x90909090).get(); explosion_anti_cheat_bypass::m_can_use_blocked_explosions = memory::byte_patch::make(g_pointers->m_gta.m_explosion_patch.sub(12).as(), 0x9090).get(); diff --git a/src/core/data/all_script_names.hpp b/src/core/data/all_script_names.hpp index ff51edc9..a8295d2d 100644 --- a/src/core/data/all_script_names.hpp +++ b/src/core/data/all_script_names.hpp @@ -3,9 +3,9 @@ namespace big { constexpr const static inline auto launcher_scripts = std::to_array({ - 0u, + ""_J, "AM_HOLD_UP"_J, - 0u, + ""_J, "AM_CR_SELL_DRUGS"_J, "AM_STRIPPER"_J, "stripclub_mp"_J, @@ -17,7 +17,7 @@ namespace big "AM_DropOffHooker"_J, "AM_Safehouse"_J, "AM_Hitchhiker"_J, - 0u, + ""_J, "AM_DOORS"_J, "MG_RACE_TO_POINT"_J, "AM_PI_MENU"_J, @@ -89,7 +89,7 @@ namespace big "GB_BIKER_RACE_P2P"_J, "GB_BIKER_JOUST"_J, "GB_BIKER_UNLOAD_WEAPONS"_J, - 0u, + ""_J, "GB_BIKER_BAD_DEAL"_J, "GB_BIKER_RESCUE_CONTACT"_J, "GB_BIKER_LAST_RESPECTS"_J, @@ -183,6 +183,18 @@ namespace big "fm_content_smuggler_ops"_J, "fm_content_bicycle_time_trial"_J, "fm_content_possessed_animals"_J, + "fm_content_chop_shop_delivery"_J, + "fm_content_xmas_truck"_J, + "fm_content_tow_truck_work"_J, + "fm_content_vehrob_scoping"_J, + "fm_content_vehrob_task"_J, + "fm_content_vehrob_prep"_J, + "fm_content_vehrob_disrupt"_J, + "fm_content_vehrob_cargo_ship"_J, + "fm_content_vehrob_police"_J, + "fm_content_vehrob_arena"_J, + "fm_content_vehrob_casino_prize"_J, + "fm_content_vehrob_submarine"_J, "AM_BOAT_TAXI"_J, "AM_HELI_TAXI"_J, "fm_hold_up_tut"_J, @@ -211,7 +223,7 @@ namespace big "fm_Bj_race_controler"_J, "fm_deathmatch_controler"_J, "fm_hideout_controler"_J, - "fm_mission_controller"_J, + "fm_mission_controller_2020"_J, "FM_Race_Controler"_J, "FM_Horde_Controler"_J, "dont_cross_the_line"_J, @@ -236,8 +248,8 @@ namespace big "abigail1", "abigail2", "achievement_controller", + "activity_creator_prototype_launcher", "act_cinema", - //"activity_creator_prototype_launcher", "af_intro_t_sandy", "agency_heist1", "agency_heist2", @@ -245,14 +257,25 @@ namespace big "agency_heist3b", "agency_prep1", "agency_prep2amb", - //"aicover_test", - //"ainewengland_test", + "aicover_test", + "ainewengland_test", "altruist_cult", + "ambientblimp", + "ambient_diving", + "ambient_mrsphilips", + "ambient_solomon", + "ambient_sonar", + "ambient_tonya", + "ambient_tonyacall", + "ambient_tonyacall2", + "ambient_tonyacall5", + "ambient_ufos", + "am_agency_suv", "am_airstrike", "am_ammo_drop", "am_arena_shp", - "am_armwrestling_apartment", "am_armwrestling", + "am_armwrestling_apartment", "am_armybase", "am_backup_heli", "am_beach_washup_cinematic", @@ -267,15 +290,15 @@ namespace big "am_cp_collection", "am_crate_drop", "am_criminal_damage", - "am_darts_apartment", "am_darts", + "am_darts_apartment", "am_dead_drop", "am_destroy_veh", "am_distract_cops", "am_doors", "am_ferriswheel", - "am_ga_pickups", "am_gang_call", + "am_ga_pickups", "am_heist_int", "am_heli_taxi", "am_hi_plane_land_cinematic", @@ -301,14 +324,16 @@ namespace big "am_lester_cut", "am_lowrider_int", "am_lsia_take_off_cinematic", + "am_luxury_showroom", "am_mission_launch", - "am_mp_arc_cab_manager", + "am_mp_acid_lab", + "am_mp_arcade", "am_mp_arcade_claw_crane", "am_mp_arcade_fortune_teller", "am_mp_arcade_love_meter", "am_mp_arcade_peds", "am_mp_arcade_strength_test", - "am_mp_arcade", + "am_mp_arc_cab_manager", "am_mp_arena_box", "am_mp_arena_garage", "am_mp_armory_aircraft", @@ -318,36 +343,45 @@ namespace big "am_mp_boardroom_seating", "am_mp_bunker", "am_mp_business_hub", + "am_mp_carwash_launch", "am_mp_car_meet_property", "am_mp_car_meet_sandbox", - "am_mp_carwash_launch", + "am_mp_casino", "am_mp_casino_apartment", "am_mp_casino_nightclub", "am_mp_casino_valet_garage", - "am_mp_casino", "am_mp_creator_aircraft", "am_mp_creator_trailer", "am_mp_defunct_base", "am_mp_drone", + "am_mp_fixer_hq", "am_mp_garage_control", "am_mp_hacker_truck", "am_mp_hangar", "am_mp_ie_warehouse", "am_mp_island", + "am_mp_juggalo_hideout", + "am_mp_multistorey_garage", + "am_mp_music_studio", "am_mp_nightclub", "am_mp_orbital_cannon", "am_mp_peds", "am_mp_property_ext", "am_mp_property_int", "am_mp_rc_vehicle", + "am_mp_salvage_yard", "am_mp_shooting_range", + "am_mp_simeon_showroom", "am_mp_smoking_activity", "am_mp_smpl_interior_ext", "am_mp_smpl_interior_int", + "am_mp_social_club_garage", "am_mp_solomon_office", "am_mp_submarine", + "am_mp_vehicle_organization_menu", "am_mp_vehicle_reward", "am_mp_vehicle_weapon", + "am_mp_vinewood_premium_garage", "am_mp_warehouse", "am_mp_yacht", "am_npc_invites", @@ -362,20 +396,11 @@ namespace big "am_rontrevor_cut", "am_taxi", "am_vehicle_spawn", - "ambient_diving", - "ambient_mrsphilips", - "ambient_solomon", - "ambient_sonar", - "ambient_tonya", - "ambient_tonyacall2", - "ambient_tonyacall5", - "ambient_tonyacall", - "ambient_ufos", - "ambientblimp", "animal_controller", "apartment_minigame_launcher", "apparcadebusiness", "apparcadebusinesshub", + "appavengeroperations", "appbikerbusiness", "appbroadcast", "appbunkerbusiness", @@ -386,6 +411,7 @@ namespace big "appcovertops", "appemail", "appextraction", + "appfixersecurity", "apphackertruck", "apphs_sleep", "appimportexport", @@ -396,6 +422,7 @@ namespace big "appmpemail", "appmpjoblistnew", "apporganiser", + "appprogresshub", "apprepeatplay", "appsecurohack", "appsecuroserv", @@ -421,9 +448,9 @@ namespace big "assassin_rankup", "assassin_valet", "atm_trigger", - //"audiotest", - "auto_shop_seating", + "audiotest", "autosave_controller", + "auto_shop_seating", "bailbond1", "bailbond2", "bailbond3", @@ -442,7 +469,7 @@ namespace big "base_lounge_seats", "base_quaters_seats", "base_reception_seats", - //"basic_creator", + "basic_creator", "beach_exterior_seating", "benchmark", "bigwheel", @@ -450,25 +477,22 @@ namespace big "blackjack", "blimptest", "blip_controller", - "bootycall_debug_controller", "bootycallhandler", + "bootycall_debug_controller", "buddydeathresponse", - //"bugstar_mission_export", - "building_controller", + "bugstar_mission_export", "buildingsiteambience", + "building_controller", + "business_battles", "business_battles_defend", "business_battles_sell", - "business_battles", "business_hub_carmod", "business_hub_garage_seats", "cablecar", - //"cam_coord_sender", - //"camera_test", + "camera_test", "camhedz_arcade", + "cam_coord_sender", "candidate_controller", - "car_meet_carmod", - "car_meet_exterior_seating", - "car_roof_test", "carmod_shop", "carsteal1", "carsteal2", @@ -476,6 +500,11 @@ namespace big "carsteal4", "carwash1", "carwash2", + "car_meet_carmod", + "car_meet_exterior_seating", + "car_meet_interior_seating", + "car_roof_test", + "casinoroulette", "casino_bar_seating", "casino_exterior_seating", "casino_interior_seating", @@ -484,13 +513,12 @@ namespace big "casino_nightclub_seating", "casino_penthouse_seating", "casino_slots", - "casinoroulette", - //"celebration_editor", "celebrations", + "celebration_editor", "cellphone_controller", "cellphone_flashhand", "charactergoals", - //"charanimtest", + "charanimtest", "cheat_controller", "chinese1", "chinese2", @@ -498,7 +526,7 @@ namespace big "clothes_shop_mp", "clothes_shop_sp", "code_controller", - //"combat_test", + "combat_test", "comms_controller", "completionpercentage_controller", "component_checker", @@ -509,22 +537,22 @@ namespace big "controller_towing", "controller_trafficking", "coordinate_recorder", - "country_race_controller", "country_race", + "country_race_controller", "creation_startup", "creator", - //"custom_config", - //"cutscene_test", - //"cutscenemetrics", - //"cutscenesamples", + "custom_config", + "cutscenemetrics", + "cutscenesamples", + "cutscene_test", "darts", - //"debug_app_select_screen", - //"debug_clone_outfit_testing", - //"debug_launcher", - //"debug_ped_data", - //"debug", + "debug", + "debug_app_select_screen", + "debug_clone_outfit_testing", + "debug_launcher", + "debug_ped_data", "degenatron_games", - //"density_test", + "density_test", "dialogue_handler", "director_mode", "docks2asubhandler", @@ -540,9 +568,9 @@ namespace big "drf3", "drf4", "drf5", - "drunk_controller", "drunk", - //"dynamixtest", + "drunk_controller", + "dynamixtest", "email_controller", "emergencycall", "emergencycalllauncher", @@ -559,7 +587,7 @@ namespace big "epsilontract", "epsrobes", "error_listener", - //"error_thrower", + "error_thrower", "event_controller", "exile1", "exile2", @@ -571,9 +599,9 @@ namespace big "extreme4", "fairgroundhub", "fake_interiors", - "fame_or_shame_set", - "fameorshame_eps_1", "fameorshame_eps", + "fameorshame_eps_1", + "fame_or_shame_set", "family1", "family1taxi", "family2", @@ -592,6 +620,7 @@ namespace big "fbi1", "fbi2", "fbi3", + "fbi4", "fbi4_intro", "fbi4_prep1", "fbi4_prep2", @@ -599,83 +628,142 @@ namespace big "fbi4_prep3amb", "fbi4_prep4", "fbi4_prep5", - "fbi4", "fbi5a", + "finalea", + "finaleb", + "finalec1", + "finalec2", "finale_choice", "finale_credits", "finale_endgame", "finale_heist1", - "finale_heist2_intro", "finale_heist2a", "finale_heist2b", + "finale_heist2_intro", "finale_heist_prepa", "finale_heist_prepb", "finale_heist_prepc", "finale_heist_prepd", "finale_heist_prepeamb", "finale_intro", - "finalea", - "finaleb", - "finalec1", - "finalec2", + "fixer_hq_carmod", + "fixer_hq_seating", + "fixer_hq_seating_op_floor", + "fixer_hq_seating_pq", "floating_help_controller", + "flowintrotitle", + "flowstartaccept", "flow_autoplay", "flow_controller", "flow_help", - "flowintrotitle", - "flowstartaccept", "flyunderbridges", + "fmmc_contentquicklauncher", + "fmmc_launcher", + "fmmc_playlist_controller", "fm_bj_race_controler", "fm_capture_creator", + "fm_content_acid_lab_sell", + "fm_content_acid_lab_setup", + "fm_content_acid_lab_source", + "fm_content_ammunation", + "fm_content_armoured_truck", "fm_content_auto_shop_delivery", + "fm_content_bank_shootout", + "fm_content_bar_resupply", + "fm_content_bicycle_time_trial", + "fm_content_bike_shop_delivery", "fm_content_business_battles", + "fm_content_cargo", + "fm_content_cerberus", + "fm_content_chop_shop_delivery", + "fm_content_clubhouse_contracts", + "fm_content_club_management", + "fm_content_club_odd_jobs", + "fm_content_club_source", + "fm_content_convoy", + "fm_content_crime_scene", + "fm_content_drug_lab_work", "fm_content_drug_vehicle", + "fm_content_export_cargo", + "fm_content_ghosthunt", "fm_content_golden_gun", + "fm_content_gunrunning", + "fm_content_hsw_setup", + "fm_content_hsw_time_trial", "fm_content_island_dj", "fm_content_island_heist", + "fm_content_metal_detector", "fm_content_movie_props", + "fm_content_mp_intro", + "fm_content_parachuter", + "fm_content_payphone_hit", "fm_content_phantom_car", + "fm_content_possessed_animals", + "fm_content_robbery", + "fm_content_security_contract", "fm_content_sightseeing", + "fm_content_skydive", "fm_content_slasher", + "fm_content_smuggler_ops", + "fm_content_smuggler_plane", + "fm_content_smuggler_resupply", + "fm_content_smuggler_sell", + "fm_content_smuggler_trail", + "fm_content_source_research", + "fm_content_stash_house", + "fm_content_taxi_driver", + "fm_content_test", + "fm_content_tow_truck_work", "fm_content_tuner_robbery", "fm_content_vehicle_list", + "fm_content_vehrob_arena", + "fm_content_vehrob_cargo_ship", + "fm_content_vehrob_casino_prize", + "fm_content_vehrob_disrupt", + "fm_content_vehrob_police", + "fm_content_vehrob_prep", + "fm_content_vehrob_scoping", + "fm_content_vehrob_submarine", + "fm_content_vehrob_task", + "fm_content_vip_contract_1", + "fm_content_xmas_mugger", + "fm_content_xmas_truck", "fm_deathmatch_controler", "fm_deathmatch_creator", "fm_hideout_controler", "fm_hold_up_tut", "fm_horde_controler", "fm_impromptu_dm_controler", - "fm_intro_cut_dev", "fm_intro", + "fm_intro_cut_dev", "fm_lts_creator", - "fm_main_menu", "fm_maintain_cloud_header_data", "fm_maintain_transition_players", - "fm_mission_controller_2020", + "fm_main_menu", "fm_mission_controller", - //"fm_mission_creator", + "fm_mission_controller_2020", + "fm_mission_creator", "fm_race_controler", "fm_race_creator", + "fm_street_dealer", "fm_survival_controller", "fm_survival_creator", - "fmmc_launcher", - "fmmc_playlist_controller", "forsalesigns", - //"fps_test_mag", - //"fps_test", + "fps_test", + "fps_test_mag", "franklin0", "franklin1", "franklin2", + "freemode", "freemode_clearglobals", "freemode_creator", "freemode_init", - "freemode", "friendactivity", "friends_controller", "friends_debug_controller", - //"fullmap_test_flow", - //"fullmap_test", - //"game_server_test", + "fullmap_test", + "fullmap_test_flow", + "game_server_test", "gb_airfreight", "gb_amphibious_assault", "gb_assault", @@ -705,9 +793,9 @@ namespace big "gb_biker_wheelie_rider", "gb_carjacking", "gb_cashing_out", - "gb_casino_heist_planning", - "gb_casino_heist", "gb_casino", + "gb_casino_heist", + "gb_casino_heist_planning", "gb_collect_money", "gb_contraband_buy", "gb_contraband_defend", @@ -720,11 +808,11 @@ namespace big "gb_fortified", "gb_fragile_goods", "gb_fully_loaded", - "gb_gang_ops_planning", "gb_gangops", + "gb_gang_ops_planning", + "gb_gunrunning", "gb_gunrunning_defend", "gb_gunrunning_delivery", - "gb_gunrunning", "gb_headhunter", "gb_hunt_the_boss", "gb_ie_delivery_cutscene", @@ -748,12 +836,12 @@ namespace big "gb_yacht_rob", "general_test", "ggsm_arcade", - "globals_fmmc_struct_registration", "globals_fmmcstruct2_registration", - "golf_ai_foursome_putting", - "golf_ai_foursome", - "golf_mp", + "globals_fmmc_struct_registration", "golf", + "golf_ai_foursome", + "golf_ai_foursome_putting", + "golf_mp", "gpb_andymoon", "gpb_baygor", "gpb_billbinder", @@ -769,13 +857,13 @@ namespace big "gpb_tonya", "gpb_zombie", "grid_arcade_cabinet", - //"gtest_airplane", - //"gtest_avoidance", - //"gtest_boat", - //"gtest_divingfromcar", - //"gtest_divingfromcarwhilefleeing", - //"gtest_helicopter", - //"gtest_nearlymissedbycar", + "gtest_airplane", + "gtest_avoidance", + "gtest_boat", + "gtest_divingfromcar", + "gtest_divingfromcarwhilefleeing", + "gtest_helicopter", + "gtest_nearlymissedbycar", "gunclub_shop", "gunfighttest", "gunslinger_arcade", @@ -784,9 +872,9 @@ namespace big "hairdo_shop_sp", "hangar_carmod", "hao1", - //"headertest", - //"heatmap_test_flow", - //"heatmap_test", + "headertest", + "heatmap_test", + "heatmap_test_flow", "heist_ctrl_agency", "heist_ctrl_docks", "heist_ctrl_finale", @@ -795,13 +883,14 @@ namespace big "heist_island_planning", "heli_gun", "heli_streaming", - //"hud_creator", + "hud_creator", "hunting1", "hunting2", "hunting_ambient", "idlewarper", "ingamehud", "initial", + "item_ownership_output", "jewelry_heist", "jewelry_prep1a", "jewelry_prep1b", @@ -811,7 +900,10 @@ namespace big "josh2", "josh3", "josh4", + "juggalo_hideout_carmod", + "juggalo_hideout_seating", "lamar1", + "landing_pre_startup", "laptop_trigger", "launcher_abigail", "launcher_barry", @@ -825,8 +917,8 @@ namespace big "launcher_fanatic", "launcher_golf", "launcher_hao", - "launcher_hunting_ambient", "launcher_hunting", + "launcher_hunting_ambient", "launcher_josh", "launcher_maude", "launcher_minute", @@ -848,16 +940,16 @@ namespace big "lester1", "lesterhandler", "letterscraps", - //"line_activation_test", + "line_activation_test", "liverecorder", - //"locates_tester", + "locates_tester", "luxe_veh_activity", - //"magdemo2", - //"magdemo", - "main_install", - "main_persistent", + "magdemo", + "magdemo2", "main", "maintransition", + "main_install", + "main_persistent", "martin1", "maude1", "maude_postbailbond", @@ -875,6 +967,7 @@ namespace big "minute1", "minute2", "minute3", + "missioniaaturret", "mission_race", "mission_repeat_controller", "mission_stat_alerter", @@ -883,34 +976,44 @@ namespace big "mission_triggerer_b", "mission_triggerer_c", "mission_triggerer_d", - "missioniaaturret", + "mpstatsinit", + "mptestbed", "mp_awards", "mp_bed_high", "mp_fm_registration", + "mp_gameplay_menu", "mp_menuped", + "mp_player_damage_numbers", "mp_prop_global_block", "mp_prop_special_global_block", "mp_registration", "mp_save_game_global_block", + "mp_skycam_stuck_wiggler", "mp_unlocks", "mp_weapons", - "mpstatsinit", - //"mptestbed", "mrsphilips1", "mrsphilips2", + "multistorey_garage_ext_seating", + "multistorey_garage_seating", "murdermystery", + "music_studio_seating", + "music_studio_seating_external", + "music_studio_smoking", "navmeshtest", - //"net_activity_creator_ui", - //"net_apartment_activity_light", - //"net_apartment_activity", - //"net_bot_brain", - //"net_bot_simplebrain", - //"net_cloud_mission_loader", - //"net_combat_soaktest", - //"net_jacking_soaktest", - //"net_rank_tunable_loader", - //"net_session_soaktest", - //"net_tunable_check", + "net_activity_creator_ui", + "net_apartment_activity", + "net_apartment_activity_light", + "net_bot_brain", + "net_bot_simplebrain", + "net_cloud_mission_loader", + "net_combat_soaktest", + "net_freemode_debug_2023", + "net_freemode_debug_stat_2023", + "net_jacking_soaktest", + "net_rank_tunable_loader", + "net_session_soaktest", + "net_test_drive", + "net_tunable_check", "nigel1", "nigel1a", "nigel1b", @@ -918,12 +1021,12 @@ namespace big "nigel1d", "nigel2", "nigel3", + "nightclubpeds", "nightclub_ground_floor_seats", "nightclub_office_seats", "nightclub_vip_seats", - "nightclubpeds", - //"nodemenututorial", - //"nodeviewer", + "nodemenututorial", + "nodeviewer", "ob_abatdoor", "ob_abattoircut", "ob_airdancer", @@ -959,13 +1062,14 @@ namespace big "paparazzo3a", "paparazzo3b", "paparazzo4", - "paradise2", "paradise", - //"pausemenu_example", + "paradise2", + "pausemenu", + "pausemenucareerhublaunch", + "pausemenu_example", "pausemenu_map", "pausemenu_multiplayer", "pausemenu_sp_repeat", - "pausemenu", "pb_busker", "pb_homeless", "pb_preacher", @@ -973,35 +1077,35 @@ namespace big "personal_carmod_shop", "photographymonkey", "photographywildlife", - //"physics_perf_test_launcher", - //"physics_perf_test", - "pi_menu", - "pickup_controller", - //"pickuptest", + "physics_perf_test", + "physics_perf_test_launcher", + "pickuptest", "pickupvehicles", - "pilot_school_mp", + "pickup_controller", "pilot_school", + "pilot_school_mp", + "pi_menu", "placeholdermission", - //"placementtest", - //"planewarptest", - "player_controller_b", + "placementtest", + "planewarptest", "player_controller", + "player_controller_b", + "player_scene_ft_franklin1", "player_scene_f_lamgraff", "player_scene_f_lamtaunt", "player_scene_f_taxi", - "player_scene_ft_franklin1", + "player_scene_mf_traffic", "player_scene_m_cinema", "player_scene_m_fbi2", "player_scene_m_kids", "player_scene_m_shopping", - "player_scene_mf_traffic", "player_scene_t_bbfight", "player_scene_t_chasecar", "player_scene_t_insult", "player_scene_t_park", "player_scene_t_tie", "player_timetable_scene", - //"playthrough_builder", + "playthrough_builder", "pm_defend", "pm_delivery", "pm_gang_attack", @@ -1014,9 +1118,9 @@ namespace big "postrc_nigel3", "profiler_registration", "prologue1", - //"prop_drop", + "prop_drop", "puzzle", - //"racetest", + "racetest", "rampage1", "rampage2", "rampage3", @@ -1024,8 +1128,12 @@ namespace big "rampage5", "rampage_controller", "randomchar_controller", - "range_modern_mp", "range_modern", + "range_modern_mp", + "replay_controller", + "rerecord_recording", + "respawn_controller", + "restrictedareas", "re_abandonedcar", "re_accident", "re_armybase", @@ -1043,8 +1151,8 @@ namespace big "re_domestic", "re_drunkdriver", "re_duel", - "re_gang_intimidation", "re_gangfight", + "re_gang_intimidation", "re_getaway_driver", "re_hitch_lift", "re_homeland_security", @@ -1064,76 +1172,77 @@ namespace big "re_snatched", "re_stag_do", "re_yetarian", - "replay_controller", - "rerecord_recording", - "respawn_controller", - "restrictedareas", - //"rng_output", + "rng_output", "road_arcade", "rollercoaster", "rural_bank_heist", "rural_bank_prep1", "rural_bank_setup", - "save_anywhere", + "salvage_yard_seating", "savegame_bed", - "sc_lb_global_block", - //"scaleformgraphictest", - //"scaleformminigametest", - //"scaleformprofiling", - //"scaleformtest", - //"scene_builder", + "save_anywhere", + "scaleformgraphictest", + "scaleformminigametest", + "scaleformprofiling", + "scaleformtest", + "scene_builder", "sclub_front_bouncer", - //"script_metrics", - //"scripted_cam_editor", - //"scriptplayground", - //"scripttest1", - //"scripttest2", - //"scripttest3", - //"scripttest4", + "scripted_cam_editor", + "scriptplayground", + "scripttest1", + "scripttest2", + "scripttest3", + "scripttest4", + "script_metrics", "scroll_arcade_cabinet", "sctv", - //"selector_example", + "sc_lb_global_block", "selector", + "selector_example", "selling_short_1", "selling_short_2", - "sh_intro_f_hills", - "sh_intro_m_home", - //"shooting_camera", - "shop_controller", + "shooting_camera", "shoprobberies", + "shop_controller", "shot_bikejump", "shrinkletter", - //"smoketest", + "sh_intro_f_hills", + "sh_intro_m_home", + "simeon_showroom_seating", + "smoketest", "social_controller", "solomon1", "solomon2", "solomon3", - "sp_dlc_registration", - //"sp_editor_mission_instance", - "sp_menuped", - "sp_pilotschool_reg", "spaceshipparts", "spawn_activities", "speech_reverb_tracker", "spmc_instancer", "spmc_preloader", + "sp_dlc_registration", + "sp_editor_mission_instance", + "sp_menuped", + "sp_pilotschool_reg", "standard_global_init", "standard_global_reg", + "startup", "startup_install", "startup_locationtest", "startup_positioning", "startup_smoketest", - "startup", "stats_controller", "stock_controller", "streaming", + "stripclub", "stripclub_drinking", "stripclub_mp", - "stripclub", "stripperhome", "stunt_plane_races", "tasklist_1", "tattoo_shop", + "taxilauncher", + "taxiservice", + "taxitutorial", "taxi_clowncar", "taxi_cutyouin", "taxi_deadline", @@ -1144,33 +1253,30 @@ namespace big "taxi_procedural", "taxi_takeiteasy", "taxi_taketobest", - "taxilauncher", - "taxiservice", - "taxitutorial", - //"tempalpha", - //"temptest", + "tempalpha", + "temptest", + "tennis", "tennis_ambient", "tennis_family", "tennis_network_mp", - "tennis", "test_startup", "thelastone", "three_card_poker", "timershud", - "title_update_registration_2", "title_update_registration", + "title_update_registration_2", "tonya1", "tonya2", "tonya3", "tonya4", "tonya5", "towing", - "traffick_air", - "traffick_ground", "traffickingsettings", "traffickingteleport", - //"train_create_widget", - //"train_tester", + "traffick_air", + "traffick_ground", + "train_create_widget", + "train_tester", "trevor1", "trevor2", "trevor3", @@ -1184,75 +1290,24 @@ namespace big "turret_cam_script", "ufo", "ugc_global_registration", + "ugc_global_registration_2", "underwaterpickups", - //"utvc", - "valentinerpreward2", - "veh_play_widget", - //"vehicle_ai_test", - //"vehicle_force_widget", - "vehicle_gen_controller", - //"vehicle_plate", - "vehicle_stealth_mode", + "utvc", "vehiclespawning", - //"walking_ped", + "vehicle_ai_test", + "vehicle_force_widget", + "vehicle_gen_controller", + "vehicle_plate", + "vehicle_stealth_mode", + "vehrob_planning", + "veh_play_widget", + "walking_ped", "wardrobe_mp", "wardrobe_sp", - //"weapon_audio_widget", + "weapon_audio_widget", "wizard_arcade", "wp_partyboombox", - //"xml_menus", + "xml_menus", "yoga", - - // 1.58 Contract DLC - - "am_agency_suv", - "am_mp_fixer_hq", - "am_mp_music_studio", - "appfixersecurity", - "fixer_hq_carmod", - "fixer_hq_seating_op_floor", - "fixer_hq_seating_pq", - "fixer_hq_seating", - "fm_content_payphone_hit", - "fm_content_payphone_intro", - "fm_content_security_contract", - "fm_content_vip_contract_1", - "music_studio_seating_external", - "music_studio_seating", - "music_studio_smoking", - "ugc_global_registration_2", - - // 1.59 Next Gen Patch - - "car_meet_interior_seating", - "fm_content_hsw_setup", - "fm_content_hsw_time_trial", - "fm_content_mp_intro", - "landing_pre_startup", - - // 1.61 - - "am_luxury_showroom", - "am_mp_simeon_showroom", - "fm_content_ammunation", - "fm_content_bar_resupply", - "fm_content_bike_shop_delivery", - "fm_content_cargo", - "fm_content_cerberus", - "fm_content_club_management", - "fm_content_club_odd_jobs", - "fm_content_club_source", - "fm_content_clubhouse_contracts", - "fm_content_crime_scene", - "fm_content_export_cargo", - "fm_content_gunrunning", - "fm_content_metal_detector", - "fm_content_parachuter", - "fm_content_skydive", - "fm_content_smuggler_plane", - "fm_content_smuggler_trail", - "fm_content_source_research", - "net_test_drive", - "simeon_showroom_seating", }); } diff --git a/src/core/data/infractions.hpp b/src/core/data/infractions.hpp index e465fdd5..06d1301f 100644 --- a/src/core/data/infractions.hpp +++ b/src/core/data/infractions.hpp @@ -26,5 +26,6 @@ namespace big // So that lua scripts can add a custom runtime reason. CUSTOM_REASON, CHAT_SPAM, + SENT_MODDER_BEACONS }; } \ No newline at end of file diff --git a/src/core/data/packet_types.hpp b/src/core/data/packet_types.hpp index 453bc28d..c7dad731 100644 --- a/src/core/data/packet_types.hpp +++ b/src/core/data/packet_types.hpp @@ -17,7 +17,7 @@ inline const static constexpr std::pair packet_types[] = {"MsgConfigResponse", 0x5F}, {"MsgConfigRequest", 0x48}, {"MsgChangeSessionAttributesCmd", 0x5A}, - {"MsgAddGamerToSessionCmd", 0x6}, + {"MsgAddGamerToSessionCmd", 0x64}, {"MsgReassignResponse", 0x10}, {"MsgReassignNegotiate", 0x01}, {"MsgReassignConfirm", 0x26}, @@ -88,8 +88,8 @@ inline const static constexpr std::pair packet_types[] = {"MsgRoamingInitialBubble", 0x32}, {"MsgVoiceStatus", 0x03}, {"MsgTextChatStatus", 0x00}, - {"MsgJoinResponse2", 0x08}, - {"MsgJoinRequest2", 0x68}, + {"MsgSnJoinResponse", 0x08}, + {"MsgSnJoinRequest", 0x68}, {"MsgNetTimeSync", 0x38}, {"MsgNetComplaint", 0x55}, {"MsgNetLagPing", 0x27}, @@ -107,8 +107,15 @@ inline const static constexpr std::pair packet_types[] = {"Msg_0x88", 0x88}, {"Msg_0x80", 0x80}, {"Msg_0x28", 0x28}, - {"Msg_0x11", 0x11}, + {"MsgNatTunnelerResponse", 0x11}, + {"MsgNatTunnelerRequest", 0x15}, + {"MsgNatTunnelerUnk", 0x7F}, {"Msg_0x45", 0x45}, {"Msg_0x89", 0x89}, {"Msg_0x86", 0x86}, + {"MsgDtlsCxnCommand", 0x8A}, + {"MsgSetKickVote", 0x8E}, + {"MsgTransitionHandshake", 0x8D}, + {"MsgDidInvitePlayerRequest", 0x8B}, + {"MsgDidInvitePlayerResponse", 0x8C}, }; \ No newline at end of file diff --git a/src/core/data/region_codes.hpp b/src/core/data/region_codes.hpp index 29cbe2fc..ee123417 100644 --- a/src/core/data/region_codes.hpp +++ b/src/core/data/region_codes.hpp @@ -10,12 +10,12 @@ namespace big const RegionType regions[] = { {0, "CIS"}, - {1, "Africa"}, - {2, "East"}, + {1, "South America"}, + {2, "US East"}, {3, "Europe"}, {4, "China"}, {5, "Australia"}, - {6, "West"}, + {6, "US West"}, {7, "Japan"}, {8, "Unknown"}, }; diff --git a/src/core/settings.hpp b/src/core/settings.hpp index 1dbfb138..2e2ba912 100644 --- a/src/core/settings.hpp +++ b/src/core/settings.hpp @@ -83,6 +83,30 @@ namespace big rage::scrThread* m_mission_creator_thread = nullptr; + struct script_block_opts + { + bool lsc = false; + bool atms = false; + bool interiors = false; + bool drones = false; + bool strip_club = false; + bool ammunation = false; + bool stores = false; + bool sitting = false; + bool sleeping = false; + bool casino_games = false; + bool arcade_games = false; + bool prostitutes = false; + bool movies = false; + bool street_dealer = false; + bool impromptu_dm = false; + bool impromptu_race = false; + bool gang_attacks = false; + bool vending_machines = false; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(script_block_opts, lsc, atms, interiors, drones, strip_club, ammunation, stores, sitting, sleeping, casino_games, arcade_games, prostitutes, movies, street_dealer, impromptu_dm, impromptu_race, gang_attacks, vending_machines); + }; + struct cmd_executor { bool enabled = false; @@ -126,8 +150,9 @@ namespace big bool external_console = true; bool window_hook = false; + bool block_all_metrics = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(debug, logs, external_console, window_hook) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(debug, logs, external_console, window_hook, block_all_metrics) } debug{}; struct tunables @@ -179,12 +204,13 @@ namespace big struct reactions { // first constructor param is an internal identifier for the event - // it's never shown in the UI reaction bounty{"Bounty", "REACTION_BOUNTY_NOTIFY", "REACTION_BOUNTY_ANNOUNCE"}; + reaction break_game{"Break Game", "REACTION_BREAK_GAME_NOTIFY", "REACTION_BREAK_GAME_ANNOUNCE"}; reaction ceo_kick{"CEO Kick", "REACTION_CEO_KICK_NOTIFY", "REACTION_CEO_KICK_ANNOUNCE"}; reaction ceo_money{"CEO Money", "REACTION_CEO_MONEY_NOTIFY", "REACTION_CEO_MONEY_ANNOUNCE"}; reaction clear_wanted_level{"Clear Wanted Level", "REACTION_CLEAR_WANTED_LEVEL_NOTIFY", "REACTION_CLEAR_WANTED_LEVEL_ANNOUNCE"}; reaction crash{"Crash", "REACTION_CRASH_NOTIFY", "REACTION_CRASH_ANNOUNCE"}; + reaction delete_vehicle{"Delete Vehicle", "REACTION_DELETE_VEHICLE_NOTIFY", "REACTION_DELETE_VEHICLE_ANNOUNCE"}; reaction end_session_kick{"End Session Kick", "REACTION_END_SESSION_KICK_NOTIFY", "REACTION_GENERIC_KICK_ANNOUNCE"}; reaction fake_deposit{"Fake Deposit", "REACTION_FAKE_DEPOSIT_NOTIFY", "REACTION_FAKE_DEPOSIT_ANNOUNCE"}; reaction force_mission{"Force Mission", "REACTION_FORCE_MISSION_NOTIFY", "REACTION_FORCE_MISSION_ANNOUNCE"}; @@ -224,11 +250,11 @@ namespace big reaction game_anti_cheat_modder_detection{"Game Anti-Cheat Modder Detection", "REACTION_MODDER_DETECTED_BY_ANTICHEAT_GENERIC", "REACTION_MODDER_DETECTED_BY_ANTICHEAT_GENERIC"}; reaction request_control_event{"Request Control Event", "REACTION_REQUEST_CONTROL_NOTIFY", "REACTION_REQUEST_CONTROL_ANNOUNCE"}; reaction report{"Report", "REACTION_REPORT_NOTIFY", "REACTION_REPORT_ANNOUNCE"}; - reaction spectate{"Spectate", "REACTION_SPECTATING_NOTIFY", "REACTION_SPECTATING_ANNOUNCE"}; reaction chat_spam{"Chat Spam", "REACTION_CHAT_SPAM_NOTIFY", "REACTION_CHAT_SPAM_ANNOUNCE"}; + reaction spectate{"Spectate", "REACTION_SPECTATING_NOTIFY", "REACTION_SPECTATING_ANNOUNCE"}; interloper_reaction spectate_others{"Spectate Others", "REACTION_SPECTATING_OTHERS_NOTIFY", "REACTION_SPECTATING_OTHERS_ANNOUNCE", false, false}; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(reactions, bounty, ceo_money, ceo_kick, clear_wanted_level, crash, end_session_kick, fake_deposit, force_mission, force_teleport, gta_banner, kick_from_interior, mc_teleport, network_bail, personal_vehicle_destroyed, remote_off_radar, rotate_cam, send_to_cutscene, send_to_location, sound_spam, spectate_notification, give_collectible, transaction_error, tse_freeze, tse_sender_mismatch, vehicle_kick, teleport_to_warehouse, trigger_business_raid, start_activity, start_script, null_function_kick, destroy_personal_vehicle, clear_ped_tasks, turn_into_beast, remote_wanted_level, remote_wanted_level_others, remote_ragdoll, kick_vote, report_cash_spawn, modder_detection, game_anti_cheat_modder_detection, request_control_event, report, send_to_interior, spectate, chat_spam, spectate_others) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(reactions, bounty, ceo_money, ceo_kick, clear_wanted_level, crash, delete_vehicle, end_session_kick, fake_deposit, force_mission, force_teleport, gta_banner, kick_from_interior, mc_teleport, network_bail, personal_vehicle_destroyed, remote_off_radar, rotate_cam, send_to_cutscene, send_to_location, sound_spam, spectate_notification, give_collectible, transaction_error, tse_freeze, tse_sender_mismatch, vehicle_kick, teleport_to_warehouse, trigger_business_raid, start_activity, start_script, null_function_kick, destroy_personal_vehicle, clear_ped_tasks, turn_into_beast, remote_wanted_level, remote_wanted_level_others, remote_ragdoll, kick_vote, report_cash_spawn, modder_detection, game_anti_cheat_modder_detection, request_control_event, report, send_to_interior, chat_spam, spectate, spectate_others) } reactions{}; struct player @@ -402,7 +428,9 @@ namespace big bool log_text_messages = false; bool decloak_players = false; bool unhide_players_from_player_list = true; - bool force_session_host = false; + int spoof_host_token_type = 0; + std::uint64_t custom_host_token = 0x000000200235F2EA; + bool hide_token_spoofing_when_host = true; bool force_script_host = false; bool player_magnet_enabled = false; int player_magnet_count = 32; @@ -441,7 +469,11 @@ namespace big int send_to_apartment_idx = 1; int send_to_warehouse_idx = 1; + script_block_opts script_block_opts; + // not to be saved + std::atomic_bool spoof_host_token_dirty = true; + std::uint64_t original_host_token = 0; bool join_queued = false; rage::rlSessionInfo info; bool never_wanted_all = false; @@ -469,7 +501,7 @@ namespace big NLOHMANN_DEFINE_TYPE_INTRUSIVE(chat_translator, enabled, print_result, draw_result, bypass_same_language, target_language, endpoint); } chat_translator{}; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(session, log_chat_messages, log_text_messages, decloak_players, force_session_host, force_script_host, player_magnet_enabled, player_magnet_count, is_team, join_in_sctv_slots, kick_host_when_forcing_host, explosion_karma, damage_karma, disable_traffic, disable_peds, force_thunder, block_ceo_money, randomize_ceo_colors, block_jobs, block_muggers, block_ceo_raids, block_ceo_creation, send_to_apartment_idx, send_to_warehouse_idx, chat_commands, chat_command_default_access_level, show_cheating_message, anonymous_bounty, lock_session, fast_join, unhide_players_from_player_list, allow_friends_into_locked_session, trust_friends, use_spam_timer, spam_timer, spam_length, chat_translator) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(session, log_chat_messages, log_text_messages, decloak_players, spoof_host_token_type, custom_host_token, hide_token_spoofing_when_host, force_script_host, player_magnet_enabled, player_magnet_count, is_team, join_in_sctv_slots, kick_host_when_forcing_host, explosion_karma, damage_karma, disable_traffic, disable_peds, force_thunder, block_ceo_money, randomize_ceo_colors, block_jobs, block_muggers, block_ceo_raids, block_ceo_creation, send_to_apartment_idx, send_to_warehouse_idx, chat_commands, chat_command_default_access_level, show_cheating_message, anonymous_bounty, lock_session, fast_join, unhide_players_from_player_list, allow_friends_into_locked_session, trust_friends, use_spam_timer, spam_timer, spam_length, chat_translator, script_block_opts) } session{}; struct settings @@ -605,8 +637,9 @@ namespace big bool spawn_invincible = false; bool spawn_invisible = false; bool spawn_as_attacker = false; + bool randomize_outfit = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(spawn_ped, preview_ped, spawn_invincible, spawn_invisible, spawn_as_attacker) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(spawn_ped, preview_ped, spawn_invincible, spawn_invisible, spawn_as_attacker, randomize_outfit) } spawn_ped{}; struct custom_time @@ -716,7 +749,16 @@ namespace big bool voice_chat_audio = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(spoofing, hide_from_player_list, spoof_blip, blip_type, spoof_rank, rank, spoof_job_points, job_points, spoof_kd_ratio, kd_ratio, spoof_bad_sport, badsport_type, spoof_player_model, player_model, spoof_cheater, spoof_hide_god, spoof_hide_veh_god, spoof_hide_spectate, spoof_crew_data, crew_tag, rockstar_crew, square_crew_tag, spoof_session_region_type, session_region_type, spoof_session_language, session_language, spoof_session_player_count, session_player_count, spoof_session_bad_sport_status, multiplex_session, multiplex_count, increase_player_limit, voice_chat_audio) + bool spoof_game_data_hash = false; + std::array game_data_hash{}; + bool spoof_dlc_hash = false; + std::uint32_t dlc_hash; + + // do not save + + bool game_data_hash_dirty = true; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(spoofing, hide_from_player_list, spoof_blip, blip_type, spoof_rank, rank, spoof_job_points, job_points, spoof_kd_ratio, kd_ratio, spoof_bad_sport, badsport_type, spoof_player_model, player_model, spoof_cheater, spoof_hide_god, spoof_hide_veh_god, spoof_hide_spectate, spoof_crew_data, crew_tag, rockstar_crew, square_crew_tag, spoof_session_region_type, session_region_type, spoof_session_language, session_language, spoof_session_player_count, session_player_count, spoof_session_bad_sport_status, multiplex_session, multiplex_count, increase_player_limit, voice_chat_audio, spoof_game_data_hash, game_data_hash, spoof_dlc_hash, dlc_hash) } spoofing{}; struct vehicle @@ -1037,13 +1079,15 @@ namespace big int player_count_filter_minimum = 0; int player_count_filter_maximum = 32; + bool filter_multiplexed_sessions = false; + int sort_method = 0; int sort_direction = 0; bool replace_game_matchmaking = false; bool exclude_modder_sessions = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(session_browser, region_filter_enabled, region_filter, language_filter_enabled, language_filter, player_count_filter_enabled, player_count_filter_minimum, player_count_filter_maximum, sort_method, sort_direction, replace_game_matchmaking, pool_filter_enabled, pool_filter, exclude_modder_sessions) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(session_browser, region_filter_enabled, region_filter, language_filter_enabled, language_filter, player_count_filter_enabled, player_count_filter_minimum, player_count_filter_maximum, filter_multiplexed_sessions, sort_method, sort_direction, replace_game_matchmaking, pool_filter_enabled, pool_filter, exclude_modder_sessions) } session_browser{}; struct session_protection diff --git a/src/fiber_pool.cpp b/src/fiber_pool.cpp index 5fdc6d6d..bcf2ccb4 100644 --- a/src/fiber_pool.cpp +++ b/src/fiber_pool.cpp @@ -3,6 +3,7 @@ #include "common.hpp" #include "script.hpp" #include "script_mgr.hpp" +#include