diff --git a/Solution/source/Menu/Menu.cpp b/Solution/source/Menu/Menu.cpp index ce5c128e..96b6d34c 100644 --- a/Solution/source/Menu/Menu.cpp +++ b/Solution/source/Menu/Menu.cpp @@ -532,13 +532,17 @@ void Menu::while_closed() justopened(); GTAmemory::InitEnhancedPools(); } + else + addlog(ige::LogType::LOG_TRACE, "Menu has been opened before, skipping initialization", __FILENAME__); Game::Sound::PlayFrontend("FocusIn", "HintCamSounds"); currentsub = LOOCsub; + addlog(ige::LogType::LOG_TRACE, "Setting current submenu to LOOCsub: " + std::to_string(LOOCsub), __FILENAME__); if (currentsub == SUB::MAINMENU) { + addlog(ige::LogType::LOG_TRACE, "Current is MainMenu", __FILENAME__); currentop = 1; *currentopATM = 1; } @@ -615,6 +619,7 @@ void Menu::Up(bool playSound) { currentop--; currentop_w_breaks--; + addlog(ige::LogType::LOG_TRACE, "Moved to option " + std::to_string(currentop), __FILENAME__); if (playSound) Game::Sound::PlayFrontend_default("NAV_UP_DOWN"); breakscroll = 1; @@ -623,6 +628,7 @@ void Menu::Down(bool playSound) { currentop++; currentop_w_breaks++; + addlog(ige::LogType::LOG_TRACE, "Moved to option " + std::to_string(currentop), __FILENAME__); if (playSound) Game::Sound::PlayFrontend_default("NAV_UP_DOWN"); breakscroll = 2; @@ -631,6 +637,7 @@ void Menu::Bottom(bool playSound) { currentop = totalop; currentop_w_breaks = totalop; + addlog(ige::LogType::LOG_TRACE, "Moved to option " + std::to_string(currentop), __FILENAME__); if (playSound) Game::Sound::PlayFrontend_default("NAV_UP_DOWN"); breakscroll = 1; @@ -639,6 +646,7 @@ void Menu::Top(bool playSound) { currentop = 1; currentop_w_breaks = 1; + addlog(ige::LogType::LOG_TRACE, "Moved to option " + std::to_string(currentop), __FILENAME__); if (playSound) Game::Sound::PlayFrontend_default("NAV_UP_DOWN"); breakscroll = 2; diff --git a/Solution/source/Menu/Routine.cpp b/Solution/source/Menu/Routine.cpp index 20aaf50f..1bcb5fd3 100644 --- a/Solution/source/Menu/Routine.cpp +++ b/Solution/source/Menu/Routine.cpp @@ -115,7 +115,8 @@ void Menu::justopened() IS_DLC_PRESENT(GET_HASH_KEY("mp2024_02_g9ec")) //this hardcoding needs to get in the bin. ) { - Game::Print::PrintBottomCentre("~r~Warning~s~: 9th Gen content detected, Game may crash. Read Menyoolog for fix instructions."); + //Game::Print::PrintBottomCentre("~r~Warning~s~: 9th Gen content detected, Game may crash. Read Menyoolog for fix instructions."); + //Rockstar seems to have fixed the invalid content crash in legacy, removing the on-screen warning, but will keep the log warning. ige::myLog << ige::LogType::LOG_WARNING << "Gen9 Content found in dlcpacks, this can cause instability when attempted to be loaded by Menyoo." << std::endl << " You can find these in your dlclist.xml by searching for \"g9\" and removing these lines or using a comment." << std::endl << " For example: " << std::endl << std::endl @@ -136,7 +137,7 @@ void Menu::justopened() IS_DLC_PRESENT(GET_HASH_KEY("mp2024_02")) //f*cking rockstar cocked up some clothes, this warning is the only protection. ) { - Game::Print::PrintBottomCentre("~r~Warning~s~: DLCPack mp2024_02 present, Game may crash. Read Menyoolog for fix instructions."); + //Game::Print::PrintBottomCentre("~r~Warning~s~: DLCPack mp2024_02 present, Game may crash. Read Menyoolog for fix instructions."); ige::myLog << ige::LogType::LOG_WARNING << "mp2024_02 found in dlcpacks, certain bugged clothing can cause instability when attempted to be loaded by Menyoo." << std::endl << " You can find this in your dlclist.xml by searching for \"mp2024_02\" and removing these lines or using a comment." << std::endl << " For example: " << std::endl << std::endl diff --git a/Solution/source/Submenus/PedModelChanger.cpp b/Solution/source/Submenus/PedModelChanger.cpp index 13993e0a..2f7a426f 100644 --- a/Solution/source/Submenus/PedModelChanger.cpp +++ b/Solution/source/Submenus/PedModelChanger.cpp @@ -315,6 +315,7 @@ namespace sub { PTFX::trigger_ptfx_1("scr_solomon3", "scr_trev4_747_blood_impact", 0, ped.GetOffsetInWorldCoords(0.37, -0.32f, -1.32f), Vector3(90.0f, 0, 0), 0.7f); ChangeModel_(model); + addlog(ige::LogType::LOG_TRACE, "Changed model to: " + text, __FILENAME__); } } void AddmodelOption_(const std::string& text, const GTAmodel::Model& model, bool* extra_option_code, int tickTrue) @@ -339,6 +340,8 @@ namespace sub } } + std::pair rngped; + void ModelChanger_() { addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger", __FILENAME__); @@ -347,6 +350,7 @@ namespace sub // ModelChangerVariationWarning_ = 0, // ModelChangerSlendy_ = 0, // ModelChanger_Animal = 0; + rngped = { "", "" }; Static_241 = PLAYER_PED_ID(); AddTitle("Model Changer"); @@ -404,16 +408,22 @@ namespace sub } + + + GTAmodel::Model ModelChanger_Random(std::vector> pedModels) + { + addlog(ige::LogType::LOG_TRACE, "Getting Random Ped Model", __FILENAME__); + rngped = pedModels[std::rand() % pedModels.size()]; + addlog(ige::LogType::LOG_TRACE, "Got Random Ped Model: " + rngped.first + ", " + rngped.second, __FILENAME__); + return rngped.first; + } + // I would really like this whole section to be refactored into one function - IJC void ModelChanger_Player() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Player", __FILENAME__); AddTitle("Player"); - std::pair rngped; - do { - rngped = g_pedModels_Player[std::rand() % g_pedModels_Player.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Player); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Player) { AddmodelOption_(pmn.second, (pmn.first)); @@ -421,13 +431,9 @@ namespace sub } void ModelChanger_Animal() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Animal", __FILENAME__); AddTitle("Animals"); - std::pair rngped; - do { - rngped = g_pedModels_Animal[std::rand() % g_pedModels_Animal.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Animal); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Animal) { AddmodelOption_(pmn.second, (pmn.first)); @@ -435,19 +441,9 @@ namespace sub } void ModelChanger_AmbientFemale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_AmbientFemale", __FILENAME__); AddTitle("Ambient Females"); - addlog(ige::LogType::LOG_TRACE, "Creating rngped variable", __FILENAME__); - std::pair rngped; - addlog(ige::LogType::LOG_TRACE, "Getting Ped Model options", __FILENAME__); - do { - addlog(ige::LogType::LOG_TRACE, "Starting Loop", __FILENAME__); - rngped = g_pedModels_AmbientFemale[std::rand() % g_pedModels_AmbientFemale.size()]; - addlog(ige::LogType::LOG_TRACE, "Got rngped: " + rngped.first + ", " + rngped.second, __FILENAME__); - } while (rngped.first == Game::PlayerPed().Model()); - addlog(ige::LogType::LOG_TRACE, "Creating Random Option", __FILENAME__); - AddmodelOption_("Random", (rngped.first), nullptr, 0); - addlog(ige::LogType::LOG_TRACE, "Creating Ped Model options", __FILENAME__); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_AmbientFemale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_AmbientFemale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -455,13 +451,9 @@ namespace sub } void ModelChanger_AmbientMale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_AmbientMale", __FILENAME__); AddTitle("Ambient Males"); - std::pair rngped; - do { - rngped = g_pedModels_AmbientMale[std::rand() % g_pedModels_AmbientMale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_AmbientMale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_AmbientMale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -469,13 +461,9 @@ namespace sub } void ModelChanger_Cutscene() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Cutscene", __FILENAME__); AddTitle("Cutscene Models"); - std::pair rngped; - do { - rngped = g_pedModels_Cutscene[std::rand() % g_pedModels_Cutscene.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Cutscene); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Cutscene) { AddmodelOption_(pmn.second, (pmn.first)); @@ -483,13 +471,9 @@ namespace sub } void ModelChanger_GangFemale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_GangFemale", __FILENAME__); AddTitle("Gang Females"); - std::pair rngped; - do { - rngped = g_pedModels_GangFemale[std::rand() % g_pedModels_GangFemale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_GangFemale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_GangFemale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -497,13 +481,9 @@ namespace sub } void ModelChanger_GangMale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_GangMale", __FILENAME__); AddTitle("Gang Males"); - std::pair rngped; - do { - rngped = g_pedModels_GangMale[std::rand() % g_pedModels_GangMale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_GangMale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_GangMale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -511,13 +491,9 @@ namespace sub } void ModelChanger_Story() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story", __FILENAME__); AddTitle("Story Models"); - std::pair rngped; - do { - rngped = g_pedModels_Story[std::rand() % g_pedModels_Story.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Story); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Story) { AddmodelOption_(pmn.second, (pmn.first)); @@ -525,13 +501,9 @@ namespace sub } void ModelChanger_Multiplayer() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Multiplayer", __FILENAME__); AddTitle("Multiplayer Models"); - std::pair rngped; - do { - rngped = g_pedModels_Multiplayer[std::rand() % g_pedModels_Multiplayer.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Multiplayer); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Multiplayer) { AddmodelOption_(pmn.second, (pmn.first)); @@ -539,13 +511,9 @@ namespace sub } void ModelChanger_ScenarioFemale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_ScenarioFemale", __FILENAME__); AddTitle("Scenario Females"); - std::pair rngped; - do { - rngped = g_pedModels_ScenarioFemale[std::rand() % g_pedModels_ScenarioFemale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_ScenarioFemale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_ScenarioFemale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -553,13 +521,9 @@ namespace sub } void ModelChanger_ScenarioMale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_ScenarioMale", __FILENAME__); AddTitle("Scenario Males"); - std::pair rngped; - do { - rngped = g_pedModels_ScenarioMale[std::rand() % g_pedModels_ScenarioMale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_ScenarioMale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_ScenarioMale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -567,13 +531,9 @@ namespace sub } void ModelChanger_Story_ScenarioFemale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story_ScenarioFemale", __FILENAME__); AddTitle("Story Scenario Females"); - std::pair rngped; - do { - rngped = g_pedModels_StoryScenarioFemale[std::rand() % g_pedModels_StoryScenarioFemale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_StoryScenarioFemale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_StoryScenarioFemale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -581,13 +541,9 @@ namespace sub } void ModelChanger_Story_ScenarioMale() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story_ScenarioMale", __FILENAME__); AddTitle("Story Scenario Males"); - std::pair rngped; - do { - rngped = g_pedModels_StoryScenarioMale[std::rand() % g_pedModels_StoryScenarioMale.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_StoryScenarioMale); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_StoryScenarioMale) { AddmodelOption_(pmn.second, (pmn.first)); @@ -595,13 +551,9 @@ namespace sub } void ModelChanger_Others() { - addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Others", __FILENAME__); AddTitle("Others"); - std::pair rngped; - do { - rngped = g_pedModels_Others[std::rand() % g_pedModels_Others.size()]; - } while (rngped.first == Game::PlayerPed().Model()); - AddmodelOption_("Random", (rngped.first), nullptr, 0); + if (rngped.first == Game::PlayerPed().Model() || rngped.first == "") ModelChanger_Random(g_pedModels_Others); + AddmodelOption_("Random", rngped.first, nullptr, 0); for (auto& pmn : g_pedModels_Others) { AddmodelOption_(pmn.second, (pmn.first)); diff --git a/Solution/source/Submenus/VehicleModShop.cpp b/Solution/source/Submenus/VehicleModShop.cpp index f66eccd3..78cb4bd6 100644 --- a/Solution/source/Submenus/VehicleModShop.cpp +++ b/Solution/source/Submenus/VehicleModShop.cpp @@ -1874,14 +1874,7 @@ namespace sub AddNumber(Game::GetGXTEntry("Roof Livery", "Roof Livery"), ms_livery2, 0, null, ms_livery2_plus, ms_livery2_minus); AddLocal(Game::GetGXTEntry("CMOD_MOD_TUR", "Turbo"), IS_TOGGLE_MOD_ON(Static_12, VehicleMod::Turbo), ms_turbo_toggle, ms_turbo_toggle); // Turbo AddLocal(Game::GetGXTEntry("CMOD_LGT_1", "Xenon Lights"), IS_TOGGLE_MOD_ON(Static_12, VehicleMod::XenonHeadlights), ms_lights_toggle, ms_lights_toggle); // Xenon lights - AddLocal("Lower Suspension", lowersuspension, MSLowerSuspension_, MSLowerSuspension_, true); // Tuners Lower Suspension - - if (MSLowerSuspension_) { - vehicle.RequestControlOnce(); - lowersuspension = !lowersuspension; - SET_REDUCED_SUSPENSION_FORCE(Static_12, lowersuspension); - return; - } + AddLocal("Lower Suspension", lowersuspension, MSLowerSuspension_, MSLowerSuspension_); // Tuners Lower Suspension if (GTAmemory::GetGameVersion() >= eGameVersion::VER_1_0_1604_0_STEAM && vehicle.IsToggleModOn(VehicleMod::XenonHeadlights)) { // Xenon Headlight Colours @@ -2158,6 +2151,13 @@ namespace sub return; } + if (MSLowerSuspension_) { + vehicle.RequestControlOnce(); + lowersuspension = !lowersuspension; + SET_REDUCED_SUSPENSION_FORCE(Static_12, lowersuspension); + return; + } + if (SubMS_Extra) { for (i = 0; i <= 12; i++) if (DOES_EXTRA_EXIST(Static_12, i)) { Menu::SetSub_new(SUB::MSEXTRA); break; } diff --git a/Solution/source/Submenus/VehicleSpawner.cpp b/Solution/source/Submenus/VehicleSpawner.cpp index 0da05266..90cc29a8 100644 --- a/Solution/source/Submenus/VehicleSpawner.cpp +++ b/Solution/source/Submenus/VehicleSpawner.cpp @@ -2330,7 +2330,7 @@ namespace sub {"2019367074", {"pink", 352}}, }; - float minDiff = INFINITY; + float minDiff = static_cast(INT_MAX); std::string nearestColour; std::string nearestAudio; for (const auto& colour : ColourNames) diff --git a/Solution/source/macros.h b/Solution/source/macros.h index 7244e120..c3e9ed9c 100644 --- a/Solution/source/macros.h +++ b/Solution/source/macros.h @@ -16,7 +16,8 @@ #define _CRT_SECURE_NO_WARNINGS -#define MENYOO_CURRENT_VER_ "2.2.0b7" +#define MENYOO_CURRENT_VER_ "2.2.0rc" + #define GAME_PLAYERCOUNT 30