Refactor hotkey class
This commit is contained in:
parent
219738d556
commit
7b0fa7c7f6
10
src/game.cpp
10
src/game.cpp
@ -290,7 +290,7 @@ void Game::FreeCam()
|
||||
m_Freecam::m_fTotalMouse.y = -150;
|
||||
}
|
||||
|
||||
if (freeCamTeleportPlayer.Pressed())
|
||||
if (KeyPressed(VK_RETURN))
|
||||
{
|
||||
CPlayerPed* player = FindPlayerPed();
|
||||
CVector pos = m_Freecam::m_pPed->GetPosition();
|
||||
@ -321,9 +321,9 @@ void Game::FreeCam()
|
||||
speed *= 2;
|
||||
}
|
||||
|
||||
if (freeCamForward.Pressed() || freeCamBackward.Pressed())
|
||||
if (freeCamForward.PressedBasic() || freeCamBackward.PressedBasic())
|
||||
{
|
||||
if (freeCamForward.Pressed())
|
||||
if (freeCamBackward.PressedBasic())
|
||||
{
|
||||
speed *= -1;
|
||||
}
|
||||
@ -335,9 +335,9 @@ void Game::FreeCam()
|
||||
pos.z += speed * 2 * sin(m_Freecam::m_fTotalMouse.y / 3 * 3.14159f / 180.0f);
|
||||
}
|
||||
|
||||
if (freeCamLeft.Pressed() || freeCamRight.Pressed())
|
||||
if (freeCamLeft.PressedBasic() || freeCamRight.PressedBasic())
|
||||
{
|
||||
if (freeCamLeft.Pressed())
|
||||
if (freeCamLeft.PressedBasic())
|
||||
{
|
||||
speed *= -1;
|
||||
}
|
||||
|
@ -1,17 +1,31 @@
|
||||
#include "pch.h"
|
||||
#include "hotkeys.h"
|
||||
|
||||
const size_t HOTKEY_START = 3;
|
||||
const size_t HOTKEY_END = 135;
|
||||
|
||||
Hotkey::Hotkey(int key1, int key2, const std::string& configPath)
|
||||
: m_key1(key1), m_key2(key2), m_ConfigPath("Hotkeys." + configPath)
|
||||
{
|
||||
if (m_ConfigPath != "")
|
||||
{
|
||||
m_key1 = gConfig.GetValue(m_ConfigPath + ".1", m_key1);
|
||||
m_key2 = gConfig.GetValue(m_ConfigPath + ".2", m_key2);
|
||||
}
|
||||
}
|
||||
|
||||
bool Hotkey::DrawUI(const char* label)
|
||||
{
|
||||
bool active = (m_CurrentHotkey == label);
|
||||
bool state = false;
|
||||
|
||||
// Check for pressed keys
|
||||
if (active)
|
||||
{
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]);
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]);
|
||||
|
||||
for (int key = 3; key != 135; ++key)
|
||||
for (size_t key = HOTKEY_START; key != HOTKEY_END; ++key)
|
||||
{
|
||||
if (KeyPressed(key))
|
||||
{
|
||||
@ -20,7 +34,7 @@ bool Hotkey::DrawUI(const char* label)
|
||||
}
|
||||
}
|
||||
|
||||
for (int key = 135; key != 3; --key)
|
||||
for (size_t key = HOTKEY_END; key != HOTKEY_START; --key)
|
||||
{
|
||||
if (KeyPressed(key))
|
||||
{
|
||||
@ -30,24 +44,9 @@ bool Hotkey::DrawUI(const char* label)
|
||||
}
|
||||
}
|
||||
|
||||
std::string text;
|
||||
|
||||
if (m_key1 != VK_NONE)
|
||||
{
|
||||
text = key_names[m_key1 - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
text = "None";
|
||||
}
|
||||
|
||||
if (m_key1 != m_key2)
|
||||
{
|
||||
text += (" + " + key_names[m_key2 - 1]);
|
||||
}
|
||||
|
||||
if (ImGui::Button((text + std::string("##") + std::string(label)).c_str(),
|
||||
ImVec2(ImGui::GetWindowContentRegionWidth() / 3.5, ImGui::GetFrameHeight()*1.35f)))
|
||||
std::string btnText = GetNameString();
|
||||
ImVec2 size {ImGui::GetWindowContentRegionWidth() / 3.5f, ImGui::GetFrameHeight()*1.35f};
|
||||
if (ImGui::Button(std::format("{}##{}", btnText, label).c_str(), size))
|
||||
{
|
||||
if (!active)
|
||||
{
|
||||
@ -59,8 +58,17 @@ bool Hotkey::DrawUI(const char* label)
|
||||
{
|
||||
m_CurrentHotkey = "";
|
||||
state = true;
|
||||
|
||||
// Save the hotkeys in config file
|
||||
if (m_ConfigPath != "")
|
||||
{
|
||||
gConfig.SetValue(m_ConfigPath + "1", m_key1);
|
||||
gConfig.SetValue(m_ConfigPath + "2", m_key2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Reset hotkeys to NONE on right click
|
||||
if (ImGui::IsMouseClicked(ImGuiMouseButton_Right))
|
||||
{
|
||||
if (ImGui::IsItemHovered())
|
||||
@ -104,23 +112,17 @@ bool Hotkey::Pressed()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Hotkey::PressedBasic()
|
||||
{
|
||||
return (m_CurrentHotkey == "") ? KeyPressed(m_key1) && KeyPressed(m_key2) : false;
|
||||
}
|
||||
|
||||
std::string Hotkey::GetNameString()
|
||||
{
|
||||
std::string text;
|
||||
|
||||
if (m_key1 != VK_NONE)
|
||||
{
|
||||
text = key_names[m_key1 - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
text = "None";
|
||||
}
|
||||
|
||||
std::string text = (m_key1 == VK_NONE) ? "None" : key_names[m_key1 - 1];
|
||||
if (m_key1 != m_key2)
|
||||
{
|
||||
text += (" + " + key_names[m_key2 - 1]);
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
@ -2,24 +2,29 @@
|
||||
#include <string>
|
||||
|
||||
/*
|
||||
ImGui HotKey Implementation class
|
||||
Handles hotkeys and hotkey-related functions
|
||||
HotKey Implementation Class
|
||||
Handles events, save-load, name-fetch, ui etc.
|
||||
*/
|
||||
class Hotkey
|
||||
{
|
||||
private:
|
||||
static inline std::string m_CurrentHotkey;
|
||||
bool m_bPressed;
|
||||
int m_key1, m_key2;
|
||||
std::string m_ConfigPath; // config save path
|
||||
|
||||
public:
|
||||
int m_key1, m_key2;
|
||||
|
||||
Hotkey(int key1 = -1, int key2 = -1)
|
||||
: m_key1(key1), m_key2(key2)
|
||||
{}
|
||||
Hotkey(int key1 = -1, int key2 = -1, const std::string& configPath = "");
|
||||
|
||||
// Draws ui to change the hotkeys from frontend
|
||||
bool DrawUI(const char* label);
|
||||
bool Pressed();
|
||||
|
||||
// Returns formatted name of the hotkeys
|
||||
std::string GetNameString();
|
||||
|
||||
// Returns true if the hotkeys are pressed
|
||||
bool Pressed();
|
||||
|
||||
// Returns true if the hotkeys are pressed, with no checks
|
||||
bool PressedBasic();
|
||||
};
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
// specialize since typeid(std::string) doesn't work
|
||||
|
||||
template <typename T>
|
||||
T inline GetValue(std::string&& key, T&& defaultVal)
|
||||
T inline GetValue(std::string&& key, const T& defaultVal)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
150
src/menu.cpp
150
src/menu.cpp
@ -34,55 +34,6 @@ void Menu::Init()
|
||||
m_Overlay::textColor[3] = gConfig.GetValue("overlay.text_color.a", 1.0f);
|
||||
m_bDiscordRPC = gConfig.GetValue("menu.discord_rpc", false);
|
||||
|
||||
// Hotkeys
|
||||
aimSkinChanger.m_key1 = gConfig.GetValue("hotkey.aim_skin_changer.key1", VK_RETURN);
|
||||
aimSkinChanger.m_key2 = gConfig.GetValue("hotkey.aim_skin_changer.key2", VK_RETURN);
|
||||
|
||||
freeCam.m_key1 = gConfig.GetValue("hotkey.freecam.key1", VK_F6);
|
||||
freeCam.m_key2 = gConfig.GetValue("hotkey.freecam.key2", VK_F6);
|
||||
|
||||
freeCamForward.m_key1 = gConfig.GetValue("hotkey.freeCamForward.key1", VK_KEY_I);
|
||||
freeCamForward.m_key2 = gConfig.GetValue("hotkey.freeCamForward.key2", VK_KEY_I);
|
||||
|
||||
freeCamBackward.m_key1 = gConfig.GetValue("hotkey.freeCamBackward.key1", VK_KEY_K);
|
||||
freeCamBackward.m_key2 = gConfig.GetValue("hotkey.freeCamBackward.key2", VK_KEY_K);
|
||||
|
||||
freeCamLeft.m_key1 = gConfig.GetValue("hotkey.freeCamLeft.key1", VK_KEY_J);
|
||||
freeCamLeft.m_key2 = gConfig.GetValue("hotkey.freeCamLeft.key2", VK_KEY_J);
|
||||
|
||||
freeCamRight.m_key1 = gConfig.GetValue("hotkey.freeCamRight.key1", VK_KEY_L);
|
||||
freeCamRight.m_key2 = gConfig.GetValue("hotkey.freeCamRight.key2", VK_KEY_L);
|
||||
|
||||
quickSceenShot.m_key1 = gConfig.GetValue("hotkey.quick_screenshot.key1", VK_F5);
|
||||
quickSceenShot.m_key2 = gConfig.GetValue("hotkey.quick_screenshot.key2", VK_F5);
|
||||
|
||||
quickTeleport.m_key1 = gConfig.GetValue("hotkey.quick_tp.key1", VK_KEY_X);
|
||||
quickTeleport.m_key2 = gConfig.GetValue("hotkey.quick_tp.key2", VK_KEY_Y);
|
||||
|
||||
menuOpen.m_key1 = gConfig.GetValue("hotkey.menu_open.key1", VK_LCONTROL);
|
||||
menuOpen.m_key2 = gConfig.GetValue("hotkey.menu_open.key2", VK_KEY_M);
|
||||
|
||||
commandWindow.m_key1 = gConfig.GetValue("hotkey.command_window.key1", VK_LMENU);
|
||||
commandWindow.m_key2 = gConfig.GetValue("hotkey.command_window.key2", VK_KEY_C);
|
||||
|
||||
flipVeh.m_key1 = gConfig.GetValue("hotkey.flip_veh.key1", VK_NONE);
|
||||
flipVeh.m_key2 = gConfig.GetValue("hotkey.flip_veh.key2", VK_NONE);
|
||||
|
||||
fixVeh.m_key1 = gConfig.GetValue("hotkey.fix_veh.key1", VK_NONE);
|
||||
fixVeh.m_key2 = gConfig.GetValue("hotkey.fix_veh.key2", VK_NONE);
|
||||
|
||||
godMode.m_key1 = gConfig.GetValue("hotkey.god_mode.key1", VK_NONE);
|
||||
godMode.m_key2 = gConfig.GetValue("hotkey.god_mode.key2", VK_NONE);
|
||||
|
||||
vehEngine.m_key1 = gConfig.GetValue("hotkey.veh_engine.key1", VK_NONE);
|
||||
vehEngine.m_key2 = gConfig.GetValue("hotkey.veh_engine.key2", VK_NONE);
|
||||
|
||||
vehInstantStart.m_key1 = gConfig.GetValue("hotkey.veh_instant_start.key1", VK_NONE);
|
||||
vehInstantStart.m_key2 = gConfig.GetValue("hotkey.veh_instant_start.key2", VK_NONE);
|
||||
|
||||
vehInstantStop.m_key1 = gConfig.GetValue("hotkey.veh_instant_stop.key1", VK_NONE);
|
||||
vehInstantStop.m_key2 = gConfig.GetValue("hotkey.veh_instant_stop.key2", VK_NONE);
|
||||
|
||||
Util::GetCPUUsageInit();
|
||||
MEMORYSTATUSEX memInfo;
|
||||
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
|
||||
@ -499,97 +450,28 @@ void Menu::ShowPage()
|
||||
Ui::ShowTooltip(TEXT("Menu.UsageText"));
|
||||
ImGui::Spacing();
|
||||
ImGui::BeginChild("Hotkeys");
|
||||
if (menuOpen.DrawUI(TEXT("Menu.OpenMenuKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.menu_open.key1", menuOpen.m_key1);
|
||||
gConfig.SetValue("hotkey.menu_open.key2", menuOpen.m_key2);
|
||||
}
|
||||
if (commandWindow.DrawUI(TEXT("Menu.OpenCMDKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.command_window.key1", commandWindow.m_key1);
|
||||
gConfig.SetValue("hotkey.command_window.key2", commandWindow.m_key2);
|
||||
}
|
||||
menuOpen.DrawUI(TEXT("Menu.OpenMenuKey"));
|
||||
commandWindow.DrawUI(TEXT("Menu.OpenCMDKey"));
|
||||
|
||||
ImGui::Dummy(ImVec2(0, 10));
|
||||
|
||||
if (aimSkinChanger.DrawUI(TEXT("Menu.SkinChangerKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.aim_skin_changer.key1", aimSkinChanger.m_key1);
|
||||
gConfig.SetValue("hotkey.aim_skin_changer.key2", aimSkinChanger.m_key2);
|
||||
}
|
||||
if (quickSceenShot.DrawUI(TEXT("Menu.QuickSSKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.quick_screenshot.key1", quickSceenShot.m_key1);
|
||||
gConfig.SetValue("hotkey.quick_screenshot.key2", quickSceenShot.m_key2);
|
||||
}
|
||||
if (freeCam.DrawUI(TEXT("Menu.FreecamKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.freecam.key1", freeCam.m_key1);
|
||||
gConfig.SetValue("hotkey.freecam.key2", freeCam.m_key2);
|
||||
}
|
||||
if (freeCamForward.DrawUI(TEXT("Menu.FreecamForwardKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.freeCamForward.key1", freeCamForward.m_key1);
|
||||
gConfig.SetValue("hotkey.freeCamForward.key2", freeCamForward.m_key2);
|
||||
}
|
||||
if (freeCamBackward.DrawUI(TEXT("Menu.FreecamBackwardKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.freeCamBackward.key1", freeCamBackward.m_key1);
|
||||
gConfig.SetValue("hotkey.freeCamBackward.key2", freeCamBackward.m_key2);
|
||||
}
|
||||
if (freeCamLeft.DrawUI(TEXT("Menu.FreecamLeftKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.freeCamLeft.key1", freeCamLeft.m_key1);
|
||||
gConfig.SetValue("hotkey.freeCamLeft.key2", freeCamLeft.m_key2);
|
||||
}
|
||||
if (freeCamRight.DrawUI(TEXT("Menu.FreecamRightKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.freeCamRight.key1", freeCamRight.m_key1);
|
||||
gConfig.SetValue("hotkey.freeCamRight.key2", freeCamRight.m_key2);
|
||||
}
|
||||
if (quickTeleport.DrawUI(TEXT("Menu.QuickTPKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.quick_tp.key1", quickTeleport.m_key1);
|
||||
gConfig.SetValue("hotkey.quick_tp.key2", quickTeleport.m_key2);
|
||||
}
|
||||
aimSkinChanger.DrawUI(TEXT("Menu.SkinChangerKey"));
|
||||
quickSceenShot.DrawUI(TEXT("Menu.QuickSSKey"));
|
||||
freeCam.DrawUI(TEXT("Menu.FreecamKey"));
|
||||
freeCamForward.DrawUI(TEXT("Menu.FreecamForwardKey"));
|
||||
freeCamBackward.DrawUI(TEXT("Menu.FreecamBackwardKey"));
|
||||
freeCamLeft.DrawUI(TEXT("Menu.FreecamLeftKey"));
|
||||
freeCamRight.DrawUI(TEXT("Menu.FreecamRightKey"));
|
||||
quickTeleport.DrawUI(TEXT("Menu.QuickTPKey"));
|
||||
|
||||
ImGui::Dummy(ImVec2(0, 10));
|
||||
|
||||
if (fixVeh.DrawUI(TEXT("Menu.FixVehKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.fix_veh.key1", fixVeh.m_key1);
|
||||
gConfig.SetValue("hotkey.fix_veh.key2", fixVeh.m_key2);
|
||||
}
|
||||
|
||||
if (flipVeh.DrawUI(TEXT("Menu.FlipVehKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.flip_veh.key1", flipVeh.m_key1);
|
||||
gConfig.SetValue("hotkey.flip_veh.key2", flipVeh.m_key2);
|
||||
}
|
||||
|
||||
if (godMode.DrawUI(TEXT("Menu.GodModeKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.god_mode.key1", godMode.m_key1);
|
||||
gConfig.SetValue("hotkey.god_mode.key2", godMode.m_key2);
|
||||
}
|
||||
|
||||
if (vehEngine.DrawUI(TEXT("Menu.VehEngineKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.veh_engine.key1", vehEngine.m_key1);
|
||||
gConfig.SetValue("hotkey.veh_engine.key2", vehEngine.m_key2);
|
||||
}
|
||||
|
||||
if (vehInstantStart.DrawUI(TEXT("Menu.VehStartKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.veh_instant_start.key1", vehInstantStart.m_key1);
|
||||
gConfig.SetValue("hotkey.veh_instant_start.key2", vehInstantStart.m_key2);
|
||||
}
|
||||
|
||||
if (vehInstantStop.DrawUI(TEXT("Menu.VehStopKey")))
|
||||
{
|
||||
gConfig.SetValue("hotkey.veh_instant_stop.key1", vehInstantStop.m_key1);
|
||||
gConfig.SetValue("hotkey.veh_instant_stop.key2", vehInstantStop.m_key2);
|
||||
}
|
||||
fixVeh.DrawUI(TEXT("Menu.FixVehKey"));
|
||||
flipVeh.DrawUI(TEXT("Menu.FlipVehKey"));
|
||||
godMode.DrawUI(TEXT("Menu.GodModeKey"));
|
||||
vehEngine.DrawUI(TEXT("Menu.VehEngineKey"));
|
||||
vehInstantStart.DrawUI(TEXT("Menu.VehStartKey"));
|
||||
vehInstantStop.DrawUI(TEXT("Menu.VehStopKey"));
|
||||
|
||||
ImGui::Dummy(ImVec2(0, 10));
|
||||
|
||||
|
33
src/pch.cpp
33
src/pch.cpp
@ -3,20 +3,19 @@ eRenderer gRenderer = Render_Unknown;
|
||||
std::ofstream gLog = std::ofstream("CheatMenu.log");
|
||||
CJson gConfig = CJson("config");
|
||||
|
||||
Hotkey aimSkinChanger;
|
||||
Hotkey freeCam;
|
||||
Hotkey freeCamForward;
|
||||
Hotkey freeCamBackward;
|
||||
Hotkey freeCamLeft;
|
||||
Hotkey freeCamRight;
|
||||
Hotkey commandWindow;
|
||||
Hotkey fixVeh;
|
||||
Hotkey flipVeh;
|
||||
Hotkey freeCamTeleportPlayer;
|
||||
Hotkey godMode;
|
||||
Hotkey menuOpen;
|
||||
Hotkey quickSceenShot;
|
||||
Hotkey quickTeleport;
|
||||
Hotkey vehEngine;
|
||||
Hotkey vehInstantStart;
|
||||
Hotkey vehInstantStop;
|
||||
Hotkey aimSkinChanger {VK_RETURN, VK_RETURN, "AimSkinChanger"};
|
||||
Hotkey freeCam {VK_F6, VK_F6, "Freecam.Toggle"};
|
||||
Hotkey freeCamForward {VK_KEY_I, VK_KEY_I, "Freecam.Forward"};;
|
||||
Hotkey freeCamBackward {VK_KEY_K, VK_KEY_K, "Freecam.Backward"};;
|
||||
Hotkey freeCamLeft {VK_KEY_J, VK_KEY_J, "Freecam.Left"};;
|
||||
Hotkey freeCamRight {VK_KEY_L, VK_KEY_L, "Freecam.Right"};;
|
||||
Hotkey commandWindow {VK_LCONTROL, VK_KEY_C, "CommandWindowToggle"};;
|
||||
Hotkey fixVeh {VK_NONE, VK_NONE, "Vehicle.Fix"};
|
||||
Hotkey flipVeh {VK_NONE, VK_NONE, "Vehicle.Flip"};
|
||||
Hotkey godMode {VK_NONE, VK_NONE, "GodMode"};
|
||||
Hotkey menuOpen {VK_LCONTROL, VK_KEY_M, "MenuToggle"};
|
||||
Hotkey quickSceenShot {VK_F5, VK_F5, "QuickScreenshot"};
|
||||
Hotkey quickTeleport {VK_KEY_X, VK_KEY_Y, "QuickTeleport"};
|
||||
Hotkey vehEngine {VK_NONE, VK_NONE, "Vehicle.EngineToggle"};
|
||||
Hotkey vehInstantStart {VK_NONE, VK_NONE, "Vehicle.InstantStart"};
|
||||
Hotkey vehInstantStop {VK_NONE, VK_NONE, "Vehicle.InstantStop"};
|
@ -117,7 +117,6 @@ extern Hotkey freeCamRight;
|
||||
extern Hotkey commandWindow;
|
||||
extern Hotkey fixVeh;
|
||||
extern Hotkey flipVeh;
|
||||
extern Hotkey freeCamTeleportPlayer;
|
||||
extern Hotkey godMode;
|
||||
extern Hotkey menuOpen;
|
||||
extern Hotkey quickSceenShot;
|
||||
|
@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
|
||||
class RPC
|
||||
{
|
||||
@ -8,8 +7,8 @@ private:
|
||||
{
|
||||
const char* state;
|
||||
const char* details;
|
||||
int64_t startTimestamp;
|
||||
int64_t endTimestamp;
|
||||
long long startTimestamp;
|
||||
long long endTimestamp;
|
||||
const char* largeImageKey;
|
||||
const char* largeImageText;
|
||||
const char* smallImageKey;
|
||||
@ -20,7 +19,7 @@ private:
|
||||
const char* matchSecret;
|
||||
const char* joinSecret;
|
||||
const char* spectateSecret;
|
||||
int8_t instance;
|
||||
char instance;
|
||||
} DiscordRichPresence;
|
||||
|
||||
static inline FARPROC f_Init, f_ShutDown, f_Update;
|
||||
|
@ -2,5 +2,5 @@
|
||||
#define MENU_NAME "Cheat Menu"
|
||||
#define MENU_VERSION_NUMBER "3.3"
|
||||
#define MENU_VERSION MENU_VERSION_NUMBER"-beta"
|
||||
#define BUILD_NUMBER "20220606"
|
||||
#define BUILD_NUMBER "20220523"
|
||||
#define MENU_TITLE MENU_NAME " v" MENU_VERSION
|
||||
|
Loading…
Reference in New Issue
Block a user