(Improvement/Feat) UI Improvements, Casino Bypass Cooldown, Icon Support, Remove Cyrillic, Etc. (#418)

* (feat) Bypass Casino Bans for all Tables/Slots

* (feat) Bypass Casino Bans for all Tables/Slots (Fix)

* (feat) Bypass Casino Bans (Refactor) added to a Tools section for global use instead of being directly in the slots section.

* (feat) Casino Lucky Wheel

* (feat) Casino Lucky Wheel Prizes

* Refactor Casino Lucky Wheel

* (feat) Refactor - Added Lucky Wheel Bypass

* (feat) Removed Lucky Wheel Prize/Autospin for now.

* (feat) Casino Rig Options - Removed Lucky Wheel and Slots Autospin (temporarily)
Added notice on risk to bypassing the bans/cooldowns.

* Removed Cyrillic due to crashing/bug issues
Restyled UI to use FontAwesome

* UI Updates

* fix

* UI alterations

* Removed Cyrillic due to Crashing/Bugs
Added FULL FontAwesome Icon support
Altered UI with floating navigation.

* Fix

* (Improvement) UI Restyling with floating Navigation, Menu resizing/moving and full FontAwesome icon support.

* (Fix) Explosive Ammo not working in SP + more

* (Fix) Explosive Ammo
- Added combo box for selecting different ammo types
- Added magic_enum for dynamic Explosion type listings using ExplosionType.hpp

* (Improved) Explosive Ammo with damage scale modifier and camera shake modifier
In Progress - Weapon Damage modifier

* (feat) Added Weapon Damage Modifier

* Fixes:
Moved Melee damage modifier from WeaponDamage to its own option
Fixes reporting PAD natives in UIManager and restored them in GUI with proper impl
Removed OnEnable from ExplosiveAmmo

* Casino script work

* Alterations:

Removed casino bypass cooldown (per request)
Removed magic_enum
Added array of explosion types as an alternative

* moved m_ShowContentWindow from public to private

* Fixed Weapon Damage description
Passed ExplosionTypeArray directly
This commit is contained in:
DeadlineEm
2025-06-17 03:51:07 -04:00
committed by GitHub
parent 4a9ef4bd66
commit d84c78cb7a
21 changed files with 87868 additions and 106 deletions
+104 -29
View File
@@ -1,4 +1,6 @@
#include "UIManager.hpp"
#include "game/pointers/Pointers.hpp"
#include "game/frontend/Menu.hpp"
namespace YimMenu
{
@@ -17,47 +19,120 @@ namespace YimMenu
void UIManager::DrawImpl()
{
auto pos = ImGui::GetCursorPos();
ImGuiIO& io = ImGui::GetIO();
ImDrawList* drawList = ImGui::GetBackgroundDrawList();
if (ImGui::BeginChild("##submenus", ImVec2(120, ImGui::GetContentRegionAvail().y - 20), true))
float bubbleSpacing = 75.0f;
float bubbleSize = 55.0f;
float bgSize = 70.0f;
float rounding = 8.0f;
ImVec2 basePos((*Pointers.ScreenResX / 2.0f) - (bubbleSpacing * m_Submenus.size() / 2.0f), 80.0f);
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(io.DisplaySize);
ImGui::Begin("##BubbleInputWindow", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoBringToFrontOnFocus);
for (size_t i = 0; i < m_Submenus.size(); ++i)
{
for (auto& submenu : m_Submenus)
auto& submenu = m_Submenus[i];
ImVec2 bubblePos(basePos.x + i * bubbleSpacing, basePos.y + 2);
ImVec2 center(bubblePos.x + bubbleSize / 2.0f, bubblePos.y + bubbleSize / 2.0f);
ImGui::SetCursorScreenPos(bubblePos);
ImGui::PushID(static_cast<int>(i));
ImVec2 bgPos = ImVec2(center.x - bgSize / 2.0f, center.y - bgSize / 2.0f);
drawList->AddRectFilled(bgPos, ImVec2(bgPos.x + bgSize, bgPos.y + bgSize), IM_COL32(10, 10, 10, 255), rounding);
drawList->AddRect(bgPos, ImVec2(bgPos.x + bgSize, bgPos.y + bgSize), IM_COL32(192, 192, 192, 32), rounding, ImDrawFlags_None, 1.0f);
ImU32 bubbleColor = IM_COL32(25, 25, 31, 255);
ImU32 hoverColor = IM_COL32(46, 46, 51, 255);
ImGui::InvisibleButton("##Bubble", ImVec2(bubbleSize, bubbleSize));
bool hovered = ImGui::IsItemHovered();
bool clicked = ImGui::IsItemClicked();
drawList->AddRectFilled(bubblePos, ImVec2(bubblePos.x + bubbleSize, bubblePos.y + bubbleSize), hovered ? hoverColor : bubbleColor, rounding);
drawList->AddRect(bubblePos, ImVec2(bubblePos.x + bubbleSize, bubblePos.y + bubbleSize), IM_COL32(192, 192, 192, 16), rounding, ImDrawFlags_None, 1.0f);
if (clicked)
{
if (ImGui::Selectable(submenu->m_Name.data(), (submenu == m_ActiveSubmenu)))
if (submenu == m_ActiveSubmenu)
{
m_ShowContentWindow = !m_ShowContentWindow;
}
else
{
SetActiveSubmenu(submenu);
m_ShowContentWindow = true;
}
}
ImU32 defaultIconColor = IM_COL32(255, 255, 255, 255);
ImU32 activeIconColor = IM_COL32(120, 90, 160, 255);
ImU32 hoveredIconColor = IM_COL32(90, 70, 120, 255);
ImU32 iconColor = submenu == m_ActiveSubmenu ? activeIconColor : (ImGui::IsItemHovered() ? hoveredIconColor : defaultIconColor);
ImGui::PushFont(Menu::Font::g_AwesomeFont);
ImVec2 iconSize = ImGui::CalcTextSize(submenu->m_Icon.c_str());
ImVec2 iconPos(center.x - iconSize.x / 2, center.y - iconSize.y / 2);
drawList->AddText(Menu::Font::g_AwesomeFont, 0.0f, iconPos, iconColor, submenu->m_Icon.c_str());
ImGui::PopFont();
ImU32 defaultTextColor = IM_COL32(255, 255, 255, 255);
ImU32 activeTextColor = IM_COL32(120, 90, 160, 255);
ImU32 hoveredTextColor = IM_COL32(90, 70, 120, 255);
ImU32 textColor = submenu == m_ActiveSubmenu ? activeTextColor : (ImGui::IsItemHovered() ? hoveredTextColor : defaultTextColor);
ImVec2 labelSize = ImGui::CalcTextSize(submenu->m_Name.c_str());
ImVec2 labelPos(center.x - labelSize.x / 2, bubblePos.y + bubbleSize + 15.0f);
ImVec2 bgMin = labelPos - ImVec2(6, 2);
ImVec2 bgMax = labelPos + labelSize + ImVec2(6, 2);
drawList->AddRectFilled(bgMin, bgMax, IM_COL32(26, 26, 31, 120));
drawList->AddRect(bgMin, bgMax, IM_COL32(192, 192, 192, 16), 4.0f);
drawList->AddText(labelPos, textColor, submenu->m_Name.c_str());
ImGui::PopID();
}
ImGui::EndChild();
ImGui::Text("YimMenuV2");
ImGui::End();
pos.y -= 28;
ImGui::SetCursorPos(ImVec2(pos.x + 130, pos.y));
if (ImGui::BeginChild("##minisubmenus", ImVec2(0, 50), true, ImGuiWindowFlags_NoScrollbar))
if (m_ShowContentWindow && m_ActiveSubmenu)
{
if (m_ActiveSubmenu)
m_ActiveSubmenu->DrawCategorySelectors();
float windowWidth = *Pointers.ScreenResX / 2.5f;
float centerX = (*Pointers.ScreenResX - windowWidth) / 2.0f;
float centerY = *Pointers.ScreenResY / 5.0f;
ImVec2 windowSize(windowWidth, *Pointers.ScreenResY / 2.5f);
ImGui::SetNextWindowSize(windowSize, ImGuiCond_Once);
ImGui::SetNextWindowPos(ImVec2(centerX, centerY), ImGuiCond_Once);
ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse;
if (ImGui::Begin("##Categories&Content", nullptr, flags))
{
if (ImGui::BeginChild("##categorySelectors", ImVec2(0, 60), true))
{
m_ActiveSubmenu->DrawCategorySelectors();
}
ImGui::EndChild();
if (ImGui::BeginChild("##options", ImVec2(0, 0), true))
{
if (m_OptionsFont)
ImGui::PushFont(m_OptionsFont);
m_ActiveSubmenu->Draw();
if (m_OptionsFont)
ImGui::PopFont();
}
ImGui::EndChild();
}
ImGui::End();
}
ImGui::EndChild();
ImGui::SetCursorPos(ImVec2(pos.x + 130, pos.y + 60));
if (ImGui::BeginChild("##options", ImVec2(0, 0), true))
{
if (m_OptionsFont)
ImGui::PushFont(m_OptionsFont);
if (m_ActiveSubmenu)
m_ActiveSubmenu->Draw();
if (m_OptionsFont)
ImGui::PopFont();
}
ImGui::EndChild();
}
std::shared_ptr<Submenu> UIManager::GetActiveSubmenuImpl()
+6
View File
@@ -37,6 +37,11 @@ namespace YimMenu
GetInstance().m_OptionsFont = font;
}
static bool ShowingContentWindow()
{
return GetInstance().m_ShowContentWindow;
}
private:
static inline UIManager& GetInstance()
{
@@ -53,5 +58,6 @@ namespace YimMenu
std::shared_ptr<Submenu> m_ActiveSubmenu;
std::vector<std::shared_ptr<Submenu>> m_Submenus;
ImFont* m_OptionsFont = nullptr;
bool m_ShowContentWindow = false;
};
}
+3 -1
View File
@@ -2,6 +2,9 @@
#include "game/backend/Self.hpp"
#include "game/gta/Natives.hpp"
#include "game/gta/ScriptLocal.hpp"
#include "game/gta/Stats.hpp"
#include "core/commands/ListCommand.hpp"
#include "game/backend/Tunables.hpp"
#include <set>
@@ -79,5 +82,4 @@ namespace YimMenu::Features
};
static CasinoManipulateRigSlotMachines _CasinoManipulateRigSlotMachines{"casinomanipulaterigslotmachines", "Manipulate Rig Slot Machines", "Lets you win the Rig Slot Machines every time"};
}
+141 -5
View File
@@ -1,20 +1,156 @@
#include "core/commands/LoopedCommand.hpp"
#include "game/backend/Self.hpp"
#include "game/gta/Pools.hpp"
#include "types/fx/ExplosionType.hpp"
#include <game/gta/Natives.hpp>
#include "core/commands/ListCommand.hpp"
#include "core/commands/FloatCommand.hpp"
namespace YimMenu::Features
{
static constexpr std::pair<int, const char*> ExplosionTypeArray[] = {
{static_cast<int>(ExplosionType::DONTCARE), "Don't Care"},
{static_cast<int>(ExplosionType::GRENADE), "Grenade"},
{static_cast<int>(ExplosionType::GRENADELAUNCHER), "Grenade Launcher"},
{static_cast<int>(ExplosionType::STICKYBOMB), "Sticky Bomb"},
{static_cast<int>(ExplosionType::MOLOTOV), "Molotov"},
{static_cast<int>(ExplosionType::ROCKET), "Rocket"},
{static_cast<int>(ExplosionType::TANKSHELL), "Tank Shell"},
{static_cast<int>(ExplosionType::HI_OCTANE), "Hi Octane"},
{static_cast<int>(ExplosionType::CAR), "Car"},
{static_cast<int>(ExplosionType::PLANE), "Plane"},
{static_cast<int>(ExplosionType::PETROL_PUMP), "Petrol Pump"},
{static_cast<int>(ExplosionType::BIKE), "Bike"},
{static_cast<int>(ExplosionType::DIR_STEAM), "Directional Steam"},
{static_cast<int>(ExplosionType::DIR_FLAME), "Directional Flame"},
{static_cast<int>(ExplosionType::DIR_WATER_HYDRANT), "Directional Water Hydrant"},
{static_cast<int>(ExplosionType::DIR_GAS_CANISTER), "Directional Gas Canister"},
{static_cast<int>(ExplosionType::BOAT), "Boat"},
{static_cast<int>(ExplosionType::SHIP_DESTROY), "Ship Destroy"},
{static_cast<int>(ExplosionType::TRUCK), "Truck"},
{static_cast<int>(ExplosionType::BULLET), "Bullet"},
{static_cast<int>(ExplosionType::SMOKEGRENADELAUNCHER), "Smoke Grenade Launcher"},
{static_cast<int>(ExplosionType::SMOKEGRENADE), "Smoke Grenade"},
{static_cast<int>(ExplosionType::BZGAS), "BZ Gas"},
{static_cast<int>(ExplosionType::FLARE), "Flare"},
{static_cast<int>(ExplosionType::GAS_CANISTER), "Gas Canister"},
{static_cast<int>(ExplosionType::EXTINGUISHER), "Extinguisher"},
{static_cast<int>(ExplosionType::PROGRAMMABLEAR), "Programmable AR"},
{static_cast<int>(ExplosionType::TRAIN), "Train"},
{static_cast<int>(ExplosionType::BARREL), "Barrel"},
{static_cast<int>(ExplosionType::PROPANE), "Propane"},
{static_cast<int>(ExplosionType::BLIMP), "Blimp"},
{static_cast<int>(ExplosionType::DIR_FLAME_EXPLODE), "Directional Flame Explode"},
{static_cast<int>(ExplosionType::TANKER), "Tanker"},
{static_cast<int>(ExplosionType::PLANE_ROCKET), "Plane Rocket"},
{static_cast<int>(ExplosionType::VEHICLE_BULLET), "Vehicle Bullet"},
{static_cast<int>(ExplosionType::GAS_TANK), "Gas Tank"},
{static_cast<int>(ExplosionType::BIRD_CRAP), "Bird Crap"},
{static_cast<int>(ExplosionType::RAILGUN), "Railgun"},
{static_cast<int>(ExplosionType::BLIMP2), "Blimp 2"},
{static_cast<int>(ExplosionType::FIREWORK), "Firework"},
{static_cast<int>(ExplosionType::SNOWBALL), "Snowball"},
{static_cast<int>(ExplosionType::PROXMINE), "Proximity Mine"},
{static_cast<int>(ExplosionType::VALKYRIE_CANNON), "Valkyrie Cannon"},
{static_cast<int>(ExplosionType::AIR_DEFENCE), "Air Defence"},
{static_cast<int>(ExplosionType::PIPEBOMB), "Pipe Bomb"},
{static_cast<int>(ExplosionType::VEHICLEMINE), "Vehicle Mine"},
{static_cast<int>(ExplosionType::EXPLOSIVEAMMO), "Explosive Ammo"},
{static_cast<int>(ExplosionType::APCSHELL), "APC Shell"},
{static_cast<int>(ExplosionType::BOMB_CLUSTER), "Cluster Bomb"},
{static_cast<int>(ExplosionType::BOMB_GAS), "Gas Bomb"},
{static_cast<int>(ExplosionType::BOMB_INCENDIARY), "Incendiary Bomb"},
{static_cast<int>(ExplosionType::BOMB_STANDARD), "Standard Bomb"},
{static_cast<int>(ExplosionType::TORPEDO), "Torpedo"},
{static_cast<int>(ExplosionType::TORPEDO_UNDERWATER), "Underwater Torpedo"},
{static_cast<int>(ExplosionType::BOMBUSHKA_CANNON), "Bombushka Cannon"},
{static_cast<int>(ExplosionType::BOMB_CLUSTER_SECONDARY), "Cluster Bomb (Secondary)"},
{static_cast<int>(ExplosionType::HUNTER_BARRAGE), "Hunter Barrage"},
{static_cast<int>(ExplosionType::HUNTER_CANNON), "Hunter Cannon"},
{static_cast<int>(ExplosionType::ROGUE_CANNON), "Rogue Cannon"},
{static_cast<int>(ExplosionType::MINE_UNDERWATER), "Underwater Mine"},
{static_cast<int>(ExplosionType::ORBITAL_CANNON), "Orbital Cannon"},
{static_cast<int>(ExplosionType::BOMB_STANDARD_WIDE), "Standard Bomb (Wide)"},
{static_cast<int>(ExplosionType::EXPLOSIVEAMMO_SHOTGUN), "Explosive Ammo (Shotgun)"},
{static_cast<int>(ExplosionType::OPPRESSOR2_CANNON), "Oppressor Mk II Cannon"},
{static_cast<int>(ExplosionType::MORTAR_KINETIC), "Kinetic Mortar"},
{static_cast<int>(ExplosionType::VEHICLEMINE_KINETIC), "Vehicle Mine (Kinetic)"},
{static_cast<int>(ExplosionType::VEHICLEMINE_EMP), "Vehicle Mine (EMP)"},
{static_cast<int>(ExplosionType::VEHICLEMINE_SPIKE), "Vehicle Mine (Spike)"},
{static_cast<int>(ExplosionType::VEHICLEMINE_SLICK), "Vehicle Mine (Slick)"},
{static_cast<int>(ExplosionType::VEHICLEMINE_TAR), "Vehicle Mine (Tar)"},
{static_cast<int>(ExplosionType::SCRIPT_DRONE), "Script Drone"},
{static_cast<int>(ExplosionType::RAYGUN), "Ray Gun"},
{static_cast<int>(ExplosionType::BURIEDMINE), "Buried Mine"},
{static_cast<int>(ExplosionType::SCRIPT_MISSILE), "Script Missile"},
{static_cast<int>(ExplosionType::RCTANK_ROCKET), "RC Tank Rocket"},
{static_cast<int>(ExplosionType::BOMB_WATER), "Water Bomb"},
{static_cast<int>(ExplosionType::BOMB_WATER_SECONDARY), "Water Bomb (Secondary)"},
{static_cast<int>(ExplosionType::_0xF728C4A9), "Unknown Explosion F728C4A9"},
{static_cast<int>(ExplosionType::_0xBAEC056F), "Unknown Explosion BAEC056F"},
{static_cast<int>(ExplosionType::FLASHGRENADE), "Flash Grenade"},
{static_cast<int>(ExplosionType::STUNGRENADE), "Stun Grenade"},
{static_cast<int>(ExplosionType::_0x763D3B3B), "Unknown Explosion 763D3B3B"},
{static_cast<int>(ExplosionType::SCRIPT_MISSILE_LARGE), "Script Missile (Large)"},
{static_cast<int>(ExplosionType::SUBMARINE_BIG), "Submarine (Big)"},
{static_cast<int>(ExplosionType::EMPLAUNCHER_EMP), "EMP Launcher"},
};
static ListCommand _SelectedExplosion{
"selectedexplosion",
"Explosion Type",
"Select an explosion type",
std::begin(ExplosionTypeArray),
std::end(ExplosionTypeArray),
static_cast<int>(ExplosionType::BULLET)};
static FloatCommand _ExplosionDamageScale{
"explosiondamage",
"Explosion Damage Scale",
"Sets the damage scale for explosions",
0.0f,
1000.0f,
1.0f};
static FloatCommand _CameraShake{
"explosioncamerashake",
"Explosion Camera Shake",
"Controls how much the camera shakes during explosions",
0.0f,
10.0f,
0.1f};
class ExplosiveAmmo : public LoopedCommand
{
using LoopedCommand::LoopedCommand;
virtual void OnTick() override
void OnTick() override
{
MISC::SET_EXPLOSIVE_AMMO_THIS_FRAME(Self::GetPlayer().GetId());
TriggerExplosion();
}
void TriggerExplosion()
{
Vector3 impactCoords;
if (WEAPON::GET_PED_LAST_WEAPON_IMPACT_COORD(Self::GetPed().GetHandle(), &impactCoords))
{
auto explosionType = static_cast<ExplosionType>(_SelectedExplosion.GetState());
float damageScale = _ExplosionDamageScale.GetState();
float shake = _CameraShake.GetState();
FIRE::ADD_OWNED_EXPLOSION(
Self::GetPed().GetHandle(),
impactCoords.x,
impactCoords.y,
impactCoords.z,
static_cast<int>(explosionType),
damageScale,
true, // isAudible
false, // isInvisible
shake);
}
}
};
static ExplosiveAmmo _ExplosiveAmmo{"ExplosiveAmmo", "Explosive Ammo", "Every bullet you shoot explodes."};
}
}
+63
View File
@@ -0,0 +1,63 @@
#include "core/commands/LoopedCommand.hpp"
#include "game/backend/Self.hpp"
#include "game/gta/Pools.hpp"
#include <game/gta/Natives.hpp>
#include "core/commands/FloatCommand.hpp"
namespace YimMenu::Features
{
static FloatCommand _MeleeDamageScale{"meleedamagescale", "Melee Damage Scale", "Sets the damage scale for melee", 0.0f, 10.0f, 1.0f};
class MeleeDamage : public LoopedCommand
{
using LoopedCommand::LoopedCommand;
void OnTick() override
{
float scale = _MeleeDamageScale.GetState();
if (scale > 0.0f)
{
Hash weapon;
if (WEAPON::GET_CURRENT_PED_WEAPON(Self::GetPed().GetHandle(), &weapon, 0))
{
PLAYER::SET_PLAYER_MELEE_WEAPON_DAMAGE_MODIFIER(Self::GetPlayer().GetId(), scale, 0);
Hash target = PED::GET_MELEE_TARGET_FOR_PED(Self::GetPed().GetHandle());
if (target != 0)
{
Vector3 forward = ENTITY::GET_ENTITY_FORWARD_VECTOR(Self::GetPed().GetHandle());
if (ENTITY::IS_ENTITY_A_PED(target))
{
float forceScale = scale * 1.0f; // Set ped force lower since they weigh less
}
float forceScale = scale * 5.0f;
Vector3 force{
forward.x * forceScale,
forward.y * forceScale,
0.1f // Small vertical lift
};
ENTITY::APPLY_FORCE_TO_ENTITY(
target,
0,
force.x,
force.y,
force.z,
0.0f,
0.0f,
0.0f,
true,
true,
true,
true,
false,
true);
}
}
}
}
};
static MeleeDamage _MeleeDamage{"meleedamage", "Melee Damage", "Allows altering your melee damage output"};
}
+31
View File
@@ -0,0 +1,31 @@
#include "core/commands/LoopedCommand.hpp"
#include "game/backend/Self.hpp"
#include "game/gta/Pools.hpp"
#include <game/gta/Natives.hpp>
#include "core/commands/FloatCommand.hpp"
namespace YimMenu::Features
{
static FloatCommand _WeaponDamageScale{"weapondamagescale", "Weapon Damage Scale", "Sets the damage scale for weapons (including melee)", 0.0f, 10.0f, 1.0f};
class WeaponDamage : public LoopedCommand
{
using LoopedCommand::LoopedCommand;
void OnTick() override
{
float scale = _WeaponDamageScale.GetState();
if (scale > 0.0f)
{
Hash weapon;
if (WEAPON::GET_CURRENT_PED_WEAPON(Self::GetPed().GetHandle(), &weapon, 0))
{
WEAPON::SET_WEAPON_DAMAGE_MODIFIER(weapon, scale);
WEAPON::_SET_WEAPON_PED_DAMAGE_MODIFIER(Self::GetPed().GetHandle(), scale);
}
}
}
};
static WeaponDamage _WeaponDamage{"weapondamage", "Weapon Damage", "Allows altering your weapons damage output"};
}
+19 -14
View File
@@ -1,3 +1,4 @@
#include "core/frontend/manager/UIManager.hpp"
#include "GUI.hpp"
#include "Menu.hpp"
#include "ESP.hpp"
@@ -52,14 +53,15 @@ namespace YimMenu
{
auto& io = ImGui::GetIO();
io.MouseDrawCursor = GUI::IsOpen() || GUI::IsOnboarding();
GUI::IsOpen() || GUI::IsOnboarding() ? io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse :
io.ConfigFlags |= ImGuiConfigFlags_NoMouse;
GUI::IsOpen() || GUI::IsOnboarding()
? io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse :
io.ConfigFlags |= ImGuiConfigFlags_NoMouse;
}
void GUI::WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
if (msg == WM_KEYUP
&& (wparam == VK_INSERT || (wparam == VK_OEM_5 && (GetKeyState(VK_CONTROL) & 0x8000) != 0)))
if (msg == WM_KEYUP
&& (wparam == VK_INSERT || (wparam == VK_OEM_5 && (GetKeyState(VK_CONTROL) & 0x8000) != 0)))
{
// Persist and restore the cursor position between menu instances
static POINT CursorCoords{};
@@ -73,10 +75,10 @@ namespace YimMenu
}
if (!GUI::IsOnboarding())
Toggle();
ToggleMouse();
ToggleMouse();
}
}
void GUI::SetOnboardingImpl(bool state)
{
m_Onboarding = state;
@@ -89,16 +91,19 @@ namespace YimMenu
{
if (GUI::IsOpen())
{
if (GUI::IsUsingKeyboard())
if (UIManager::ShowingContentWindow())
{
PAD::DISABLE_ALL_CONTROL_ACTIONS(0);
}
else
{
static constexpr ControllerInputs controls[] = {ControllerInputs::INPUT_LOOK_LR, ControllerInputs::INPUT_LOOK_UD, ControllerInputs::INPUT_ATTACK, ControllerInputs::INPUT_AIM, ControllerInputs::INPUT_DUCK, ControllerInputs::INPUT_SELECT_WEAPON, ControllerInputs::INPUT_VEH_AIM, ControllerInputs::INPUT_VEH_ATTACK, ControllerInputs::INPUT_VEH_ATTACK2, ControllerInputs::INPUT_VEH_NEXT_RADIO, ControllerInputs::INPUT_VEH_PASSENGER_AIM, ControllerInputs::INPUT_VEH_PASSENGER_ATTACK, ControllerInputs::INPUT_VEH_SELECT_NEXT_WEAPON, ControllerInputs::INPUT_VEH_SELECT_PREV_WEAPON, ControllerInputs::INPUT_VEH_MOUSE_CONTROL_OVERRIDE, ControllerInputs::INPUT_MELEE_ATTACK_ALTERNATE, ControllerInputs::INPUT_FRONTEND_Y, ControllerInputs::INPUT_ATTACK2, ControllerInputs::INPUT_PREV_WEAPON, ControllerInputs::INPUT_NEXT_WEAPON, ControllerInputs::INPUT_VEH_DRIVE_LOOK, ControllerInputs::INPUT_VEH_DRIVE_LOOK2};
if (GUI::IsUsingKeyboard())
{
PAD::DISABLE_ALL_CONTROL_ACTIONS(0);
}
else
{
static constexpr ControllerInputs controls[] = {ControllerInputs::INPUT_LOOK_LR, ControllerInputs::INPUT_LOOK_UD, ControllerInputs::INPUT_ATTACK, ControllerInputs::INPUT_AIM, ControllerInputs::INPUT_DUCK, ControllerInputs::INPUT_SELECT_WEAPON, ControllerInputs::INPUT_VEH_AIM, ControllerInputs::INPUT_VEH_ATTACK, ControllerInputs::INPUT_VEH_ATTACK2, ControllerInputs::INPUT_VEH_NEXT_RADIO, ControllerInputs::INPUT_VEH_PASSENGER_AIM, ControllerInputs::INPUT_VEH_PASSENGER_ATTACK, ControllerInputs::INPUT_VEH_SELECT_NEXT_WEAPON, ControllerInputs::INPUT_VEH_SELECT_PREV_WEAPON, ControllerInputs::INPUT_VEH_MOUSE_CONTROL_OVERRIDE, ControllerInputs::INPUT_MELEE_ATTACK_ALTERNATE, ControllerInputs::INPUT_FRONTEND_Y, ControllerInputs::INPUT_ATTACK2, ControllerInputs::INPUT_PREV_WEAPON, ControllerInputs::INPUT_NEXT_WEAPON, ControllerInputs::INPUT_VEH_DRIVE_LOOK, ControllerInputs::INPUT_VEH_DRIVE_LOOK2};
for (const auto& control : controls)
PAD::DISABLE_CONTROL_ACTION(0, static_cast<int>(control), true);
for (const auto& control : controls)
PAD::DISABLE_CONTROL_ACTION(0, static_cast<int>(control), true);
}
}
}
+24 -45
View File
@@ -39,37 +39,13 @@ namespace YimMenu
Renderer::AddRendererCallBack(
[&] {
ProcessOnboarding();
if (!GUI::IsOpen())
return;
ImGui::PushFont(Menu::Font::g_DefaultFont);
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImU32(ImColor(15, 15, 15)));
ImGui::SetNextWindowSize(ImVec2((*Pointers.ScreenResX / 2.5), (*Pointers.ScreenResY / 2.5)), ImGuiCond_Once);
if (ImGui::Begin("YimMenuV2", nullptr, ImGuiWindowFlags_NoDecoration & ~(ImGuiWindowFlags_NoResize)))
{
// TODO: should we just remove unload?
ImGui::BeginDisabled(*Pointers.IsSessionStarted || ModuleMgr.IsManualMapped());
if (ImGui::Button("Unload", ImVec2(120, 0)))
{
if (true)
{
FiberPool::Push([] {
Commands::Shutdown();
g_Running = false;
});
}
else
{
g_Running = false;
}
}
ImGui::EndDisabled();
UIManager::Draw();
}
ImGui::End();
UIManager::Draw();
ImGui::PopStyleColor();
ImGui::PopFont();
@@ -84,35 +60,35 @@ namespace YimMenu
style.Colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.10f, 0.10f, 0.12f, 1.00f);
style.Colors[ImGuiCol_ChildBg] = ImVec4(0.12f, 0.12f, 0.14f, 1.00f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.10f, 0.95f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.08f, 0.08f, 0.09f, 1.00f);
style.Colors[ImGuiCol_ChildBg] = ImVec4(0.10f, 0.10f, 0.12f, 1.00f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.07f, 0.07f, 0.09f, 0.95f);
style.Colors[ImGuiCol_Border] = ImVec4(0.28f, 0.28f, 0.28f, 0.25f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.18f, 0.18f, 0.20f, 1.00f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.35f, 0.40f, 0.50f, 0.75f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.45f, 0.50f, 0.60f, 0.85f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.15f, 0.15f, 0.17f, 1.00f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.40f, 0.30f, 0.50f, 0.75f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.45f, 0.35f, 0.60f, 0.85f);
style.Colors[ImGuiCol_Button] = ImVec4(0.40f, 0.25f, 0.50f, 1.00f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.50f, 0.35f, 0.60f, 1.00f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.60f, 0.45f, 0.75f, 1.00f);
style.Colors[ImGuiCol_Button] = ImVec4(0.40f, 0.30f, 0.50f, 1.00f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.50f, 0.40f, 0.60f, 1.00f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.60f, 0.45f, 0.70f, 1.00f);
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.08f, 0.08f, 0.10f, 1.00f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.10f, 0.12f, 0.14f, 1.00f);
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.05f, 0.05f, 0.06f, 1.00f);
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.06f, 0.06f, 0.07f, 1.00f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.09f, 0.09f, 0.11f, 1.00f);
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.04f, 0.04f, 0.05f, 1.00f);
style.Colors[ImGuiCol_Tab] = ImVec4(0.25f, 0.20f, 0.45f, 0.85f);
style.Colors[ImGuiCol_TabHovered] = ImVec4(0.35f, 0.30f, 0.65f, 0.85f);
style.Colors[ImGuiCol_TabActive] = ImVec4(0.40f, 0.35f, 0.75f, 1.00f);
style.Colors[ImGuiCol_Tab] = ImVec4(0.35f, 0.30f, 0.45f, 0.85f);
style.Colors[ImGuiCol_TabHovered] = ImVec4(0.50f, 0.40f, 0.60f, 0.85f);
style.Colors[ImGuiCol_TabActive] = ImVec4(0.60f, 0.45f, 0.70f, 1.00f);
style.Colors[ImGuiCol_Header] = ImVec4(0.20f, 0.25f, 0.35f, 1.00f);
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.35f, 0.40f, 0.50f, 1.00f);
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.45f, 0.50f, 0.60f, 1.00f);
style.Colors[ImGuiCol_Header] = ImVec4(0.30f, 0.25f, 0.40f, 1.00f);
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.35f, 0.60f, 1.00f);
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.55f, 0.40f, 0.65f, 1.00f);
style.Colors[ImGuiCol_PlotLines] = ImVec4(0.80f, 0.80f, 0.00f, 0.00f);
style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.85f, 0.00f, 1.00f);
style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.20f, 1.00f);
style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.80f, 0.40f, 1.00f);
style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.40f, 0.30f, 0.50f, 1.00f);
style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.60f, 0.45f, 0.70f, 1.00f);
style.GrabRounding = style.FrameRounding = style.ChildRounding = style.WindowRounding = 8.0f;
}
@@ -132,6 +108,9 @@ namespace YimMenu
Menu::Font::g_ChildTitleFont = IO.Fonts->AddFontFromMemoryTTF(const_cast<std::uint8_t*>(Fonts::MainFont), sizeof(Fonts::MainFont), Menu::Font::g_ChildTitleFontSize, &FontCfg);
Menu::Font::g_ChatFont = IO.Fonts->AddFontFromMemoryTTF(const_cast<std::uint8_t*>(Fonts::MainFont), sizeof(Fonts::MainFont), Menu::Font::g_ChatFontSize, &FontCfg);
Menu::Font::g_OverlayFont = IO.Fonts->AddFontFromMemoryTTF(const_cast<std::uint8_t*>(Fonts::MainFont), sizeof(Fonts::MainFont), Menu::Font::g_OverlayFontSize, &FontCfg);
static const ImWchar full_range[] = {0x0020, 0xFFFF, 0};
Menu::Font::g_AwesomeFont = IO.Fonts->AddFontFromMemoryTTF(const_cast<std::uint8_t*>(Fonts::IconFont), sizeof(Fonts::IconFont), Menu::Font::g_AwesomeFontSize, &FontCfg, full_range);
UIManager::SetOptionsFont(Menu::Font::g_OptionsFont);
}
}
+3
View File
@@ -23,5 +23,8 @@ namespace YimMenu::Menu
inline ImFont* g_OverlayFont = nullptr;
inline float g_OverlayFontSize = 30.0f;
inline ImFont* g_AwesomeFont = nullptr;
inline float g_AwesomeFontSize = 30.0f;
}
}
+1
View File
@@ -3,4 +3,5 @@
namespace YimMenu::Fonts
{
extern const uint8_t MainFont[78948];
extern const uint8_t IconFont[1049188];
}
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -9,7 +9,8 @@
namespace YimMenu::Submenus
{
Debug::Debug() :
Submenu::Submenu("Debug")
#define ICON_FA_ARROW_RIGHT "\xef\x84\xa0"
Submenu::Submenu("Debug", ICON_FA_ARROW_RIGHT)
{
AddCategory(BuildMiscMenu());
AddCategory(BuildGlobalsMenu());
+2 -1
View File
@@ -9,7 +9,8 @@
namespace YimMenu::Submenus
{
Network::Network() :
Submenu::Submenu("Network")
#define ICON_FA_ROUTE "\xef\x9b\xbf"
Submenu::Submenu("Network", ICON_FA_ROUTE)
{
// TODO: this needs a rework
auto session = std::make_shared<Category>("Session");
+2 -1
View File
@@ -114,7 +114,8 @@ namespace YimMenu::Submenus
}
Players::Players() :
Submenu::Submenu("Players")
#define ICON_FA_USERS "\xef\x83\x80"
Submenu::Submenu("Players", ICON_FA_USERS)
{
AddCategory(std::move(BuildInfoMenu()));
AddCategory(std::move(BuildTrollMenu()));
+9 -4
View File
@@ -8,7 +8,8 @@
namespace YimMenu::Submenus
{
Recovery::Recovery() :
Submenu::Submenu("Recovery")
#define ICON_FA_SACK_DOLLAR "\xef\x93\x80"
Submenu::Submenu("Recovery", ICON_FA_SACK_DOLLAR)
{
auto missions = std::make_shared<Category>("Missions");
auto businesses = std::make_shared<Category>("Businesses");
@@ -16,7 +17,10 @@ namespace YimMenu::Submenus
auto generalGroup = std::make_shared<Group>("General");
auto businessGroup = std::make_shared<Group>("General");
auto casinoGroup = std::make_shared<Group>("Slot Machines");
auto casinoSlots = std::make_shared<Group>("Slot Machines");
//auto casinoWheel = std::make_shared<Group>("Lucky Wheel");
//auto casinoBlackJack = std::make_shared<Group>("Blackjack");
//auto casinoRoulette = std::make_shared<Group>("Roulette");
generalGroup->AddItem(std::make_shared<BoolCommandItem>("playallmissionssolo"_J));
generalGroup->AddItem(std::make_shared<CommandItem>("forcelaunchheist"_J));
@@ -32,11 +36,12 @@ namespace YimMenu::Submenus
businessGroup->AddItem(std::make_shared<ListCommandItem>("businesssafe"_J));
businessGroup->AddItem(std::make_shared<CommandItem>("claimsafeearnings"_J));
casinoGroup->AddItem(std::make_shared<BoolCommandItem>("casinomanipulaterigslotmachines"_J));
casinoSlots->AddItem(std::make_shared<BoolCommandItem>("casinomanipulaterigslotmachines"_J));
missions->AddItem(generalGroup);
businesses->AddItem(businessGroup);
casino->AddItem(casinoGroup);
casino->AddItem(casinoSlots);
AddCategory(std::move(missions));
AddCategory(std::move(businesses));
+2 -1
View File
@@ -8,7 +8,8 @@
namespace YimMenu::Submenus
{
Self::Self() :
Submenu::Submenu("Self")
#define ICON_FA_USER "\xef\x80\x87"
Submenu::Submenu("Self", ICON_FA_USER)
{
auto main = std::make_shared<Category>("Main");
auto globalsGroup = std::make_shared<Group>("Globals");
@@ -177,6 +177,13 @@ namespace YimMenu::Submenus
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("rapidfire"_J));
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteparachutes"_J));
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("ExplosiveAmmo"_J));
weaponsGlobalsGroup->AddItem(std::make_shared<ConditionalItem>("ExplosiveAmmo"_J, std::make_shared<ListCommandItem>("selectedexplosion"_J)));
weaponsGlobalsGroup->AddItem(std::make_shared<ConditionalItem>("ExplosiveAmmo"_J, std::make_shared<FloatCommandItem>("explosiondamage"_J, std::nullopt, false)));
weaponsGlobalsGroup->AddItem(std::make_shared<ConditionalItem>("ExplosiveAmmo"_J, std::make_shared<FloatCommandItem>("explosioncamerashake"_J, std::nullopt, false)));
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("weapondamage"_J));
weaponsGlobalsGroup->AddItem(std::make_shared<ConditionalItem>("weapondamage"_J, std::make_shared<FloatCommandItem>("weapondamagescale"_J, std::nullopt, false)));
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("meleedamage"_J));
weaponsGlobalsGroup->AddItem(std::make_shared<ConditionalItem>("meleedamage"_J, std::make_shared<FloatCommandItem>("meleedamagescale"_J, std::nullopt, false)));
weaponsToolsGroup->AddItem(std::make_shared<CommandItem>("giveallweapons"_J));
weaponsToolsGroup->AddItem(std::make_shared<CommandItem>("givemaxammo"_J));
+2 -1
View File
@@ -32,7 +32,8 @@ namespace YimMenu::Submenus
};
Settings::Settings() :
Submenu::Submenu("Settings")
#define ICON_FA_GEARS "\xef\x80\x93"
Submenu::Submenu("Settings", ICON_FA_GEARS)
{
auto hotkeys = std::make_shared<Category>("Hotkeys");
auto gui = std::make_shared<Category>("GUI");
+2 -1
View File
@@ -166,7 +166,8 @@ namespace YimMenu::Submenus
}
Teleport::Teleport() :
Submenu::Submenu("Teleport")
#define ICON_FA_TELEPORT "\xef\x8f\x85"
Submenu::Submenu("Teleport", ICON_FA_TELEPORT)
{
auto main = std::make_shared<Category>("Main");
auto miscGroup = std::make_shared<Group>("Misc");
+2 -1
View File
@@ -7,7 +7,8 @@
namespace YimMenu::Submenus
{
Vehicle::Vehicle() :
Submenu::Submenu("Vehicle")
#define ICON_FA_CAR "\xef\x86\xb9"
Submenu::Submenu("Vehicle", ICON_FA_CAR)
{
auto main = std::make_shared<Category>("Main");
+2 -1
View File
@@ -4,7 +4,8 @@
namespace YimMenu::Submenus
{
World::World() :
Submenu::Submenu("World")
#define ICON_FA_GLOBE "\xef\x82\xac"
Submenu::Submenu("World", ICON_FA_GLOBE)
{
auto main = std::make_shared<Category>("Main");
auto spawnersGroup = std::make_shared<Category>("Spawners");