Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Solution/source/Menu/Menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
5 changes: 3 additions & 2 deletions Solution/source/Menu/Routine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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: <!--<Item>dlcpacks:/mpg9ec/</Item>-->" << std::endl << std::endl
Expand All @@ -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: <!--<Item>dlcpacks:/mp2024_02/</Item>-->" << std::endl << std::endl
Expand Down
132 changes: 42 additions & 90 deletions Solution/source/Submenus/PedModelChanger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -339,6 +340,8 @@ namespace sub
}
}

std::pair<std::string, std::string> rngped;

void ModelChanger_()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger", __FILENAME__);
Expand All @@ -347,6 +350,7 @@ namespace sub
// ModelChangerVariationWarning_ = 0,
// ModelChangerSlendy_ = 0,
// ModelChanger_Animal = 0;
rngped = { "", "" };

Static_241 = PLAYER_PED_ID();
AddTitle("Model Changer");
Expand Down Expand Up @@ -404,204 +408,152 @@ namespace sub


}


GTAmodel::Model ModelChanger_Random(std::vector<std::pair<std::string, std::string>> 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<std::string, std::string> 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));
}
}
void ModelChanger_Animal()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Animal", __FILENAME__);
AddTitle("Animals");
std::pair<std::string, std::string> 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));
}
}
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<std::string, std::string> 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));
}
}
void ModelChanger_AmbientMale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_AmbientMale", __FILENAME__);
AddTitle("Ambient Males");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Cutscene()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Cutscene", __FILENAME__);
AddTitle("Cutscene Models");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_GangFemale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_GangFemale", __FILENAME__);
AddTitle("Gang Females");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_GangMale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_GangMale", __FILENAME__);
AddTitle("Gang Males");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Story()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story", __FILENAME__);
AddTitle("Story Models");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Multiplayer()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Multiplayer", __FILENAME__);
AddTitle("Multiplayer Models");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_ScenarioFemale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_ScenarioFemale", __FILENAME__);
AddTitle("Scenario Females");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_ScenarioMale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_ScenarioMale", __FILENAME__);
AddTitle("Scenario Males");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Story_ScenarioFemale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story_ScenarioFemale", __FILENAME__);
AddTitle("Story Scenario Females");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Story_ScenarioMale()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Story_ScenarioMale", __FILENAME__);
AddTitle("Story Scenario Males");
std::pair<std::string, std::string> 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));
}
}
void ModelChanger_Others()
{
addlog(ige::LogType::LOG_TRACE, "Entering ModelChanger_Others", __FILENAME__);
AddTitle("Others");
std::pair<std::string, std::string> 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));
Expand Down
16 changes: 8 additions & 8 deletions Solution/source/Submenus/VehicleModShop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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; }
Expand Down
2 changes: 1 addition & 1 deletion Solution/source/Submenus/VehicleSpawner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2330,7 +2330,7 @@ namespace sub
{"2019367074", {"pink", 352}},
};

float minDiff = INFINITY;
float minDiff = static_cast<float>(INT_MAX);
std::string nearestColour;
std::string nearestAudio;
for (const auto& colour : ColourNames)
Expand Down
3 changes: 2 additions & 1 deletion Solution/source/macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down