mirror of
https://github.com/YimMenu/YimMenuV2.git
synced 2026-10-10 11:53:14 +08:00
Merge branch 'enhanced' of https://github.com/YimMenu/YimMenuV2 into enhanced
This commit is contained in:
@@ -3,9 +3,9 @@ name: CI
|
||||
on: [ push, pull_request ]
|
||||
|
||||
jobs:
|
||||
msvc-ci:
|
||||
ci:
|
||||
runs-on: [ self-hosted, Windows ]
|
||||
name: CI (MSVC)
|
||||
name: CI
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
arch: amd64
|
||||
|
||||
- name: Generate CMake project
|
||||
run: cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build -G Ninja
|
||||
run: cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build -G Ninja
|
||||
|
||||
- name: Build 64bit RelWithDebInfo DLL
|
||||
run: cmake --build ./build --config RelWithDebInfo --target YimMenuV2 --
|
||||
@@ -32,41 +32,6 @@ jobs:
|
||||
ren YimMenuV2.dll YimMenuV2-dev-${{github.sha}}.dll
|
||||
working-directory: build/
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: RelWithDebInfo-MSVC
|
||||
path: build/YimMenuV2-dev-*.dll
|
||||
|
||||
msvc-clang:
|
||||
runs-on: [ self-hosted, Windows ]
|
||||
name: CI (Clang)
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Check CMake version
|
||||
run: cmake --version
|
||||
|
||||
- name: Setup MSVC environment
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
with:
|
||||
arch: amd64
|
||||
|
||||
- name: Generate CMake project
|
||||
run: cmake -DCMAKE_C_COMPILER=clang.exe -DCMAKE_CXX_COMPILER=clang++.exe -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build -G Ninja
|
||||
|
||||
- name: Build 64bit RelWithDebInfo DLL
|
||||
run: cmake --build ./build --config RelWithDebInfo --target YimMenuV2 --
|
||||
|
||||
- name: Rename DLL to YimMenuV2-dev-{GITHUB_SHA}.dll
|
||||
run: |
|
||||
del YimMenuV2-dev-*.dll
|
||||
ren YimMenuV2.dll YimMenuV2-dev-${{github.sha}}.dll
|
||||
working-directory: build/
|
||||
|
||||
- name: Check if DLL got built
|
||||
run: if (-Not (Test-Path -path "build/YimMenuV2.dll")) {throw 1}
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -50,9 +50,9 @@ jobs:
|
||||
arch: amd64
|
||||
|
||||
- name: Generate CMake project
|
||||
run: cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo -S. -Bbuild -G Ninja
|
||||
run: cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build -G Ninja
|
||||
|
||||
- name: Build 64bit release DLL
|
||||
- name: Build 64bit RelWithDebInfo DLL
|
||||
run: cmake --build ./build --config RelWithDebInfo --target YimMenuV2 --
|
||||
|
||||
- name: Upload Artifact
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
for (auto weapon : Data::Weapons)
|
||||
for (auto weapon : g_WeaponHashes)
|
||||
Self::GetPed().GiveWeapon(weapon);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
for (auto weapon : Data::Weapons)
|
||||
for (auto weapon : g_WeaponHashes)
|
||||
{
|
||||
Self::GetPed().SetMaxAmmoForWeapon(weapon);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
#include "OpenGunLocker.hpp"
|
||||
#include "core/commands/Command.hpp"
|
||||
#include "core/backend/ScriptMgr.hpp"
|
||||
#include "core/frontend/Notifications.hpp"
|
||||
#include "game/backend/Self.hpp"
|
||||
#include "game/backend/ScriptPatches.hpp"
|
||||
#include "game/gta/Scripts.hpp"
|
||||
#include "game/gta/ScriptFunction.hpp"
|
||||
#include "game/gta/ScriptLocal.hpp"
|
||||
#include "game/pointers/Pointers.hpp"
|
||||
#include "types/script/scrThread.hpp"
|
||||
#include "types/script/globals/GlobalPlayerBD.hpp"
|
||||
|
||||
namespace YimMenu::Features
|
||||
{
|
||||
static ScriptPatch skipGunLockerMenuChecksPatch{};
|
||||
|
||||
void OpenGunLocker::RunScriptImpl()
|
||||
{
|
||||
while (g_Running)
|
||||
{
|
||||
ScriptMgr::Yield();
|
||||
|
||||
if (!m_ShouldRunScript)
|
||||
continue;
|
||||
|
||||
if (!m_Thread)
|
||||
{
|
||||
int id = Scripts::StartScript("AM_MP_AUTO_SHOP"_J, eStackSizes::WAREHOUSE);
|
||||
m_Thread = Scripts::FindScriptThreadByID(id);
|
||||
if (m_Thread)
|
||||
{
|
||||
m_Thread->m_Context.m_State = rage::scrThread::State::PAUSED;
|
||||
if (!skipGunLockerMenuChecksPatch)
|
||||
{
|
||||
skipGunLockerMenuChecksPatch = ScriptPatches::AddPatch("AM_MP_AUTO_SHOP"_J, ScriptPointer("SkipGunLockerMenuChecksPatch", "56 08 01 2C 01 03 A5"), {0x55, 0xB1, 0x00});
|
||||
}
|
||||
skipGunLockerMenuChecksPatch->Enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ShouldRunScript = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
static ScriptFunction runGunLockerMenu("AM_MP_AUTO_SHOP"_J, ScriptPointer("RunGunLockerMenu", "2D 06 08 00 00 38 03 5D ? ? ? 57 03 00"));
|
||||
auto gunLockerData = ScriptLocal(m_Thread, 290).At(569);
|
||||
|
||||
int unused;
|
||||
runGunLockerMenu.Call<void>(gunLockerData.As<void*>(), &unused, eSimpleInteriorIndex::SIMPLE_INTERIOR_AUTO_SHOP_MISSION_ROW, Self::GetPlayer().GetId(), false, true);
|
||||
if (*gunLockerData.At(20).As<int*>() == 0)
|
||||
{
|
||||
skipGunLockerMenuChecksPatch->Disable();
|
||||
m_Thread->Kill();
|
||||
m_Thread->m_Context.m_State = rage::scrThread::State::KILLED;
|
||||
m_Thread = nullptr;
|
||||
m_ShouldRunScript = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class _OpenGunLocker : public Command
|
||||
{
|
||||
using Command::Command;
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
if (!*Pointers.IsSessionStarted)
|
||||
{
|
||||
Notifications::Show("Open Gun Locker", "Please join GTA Online.", NotificationType::Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (GlobalPlayerBD::Get()->Entries[Self::GetPlayer().GetId()].SimpleInteriorData.Index != eSimpleInteriorIndex::SIMPLE_INTERIOR_INVALID)
|
||||
{
|
||||
Notifications::Show("Open Gun Locker", "Cannot open gun locker while in an interior.", NotificationType::Error);
|
||||
return;
|
||||
}
|
||||
|
||||
OpenGunLocker::SetShouldRunScript(true);
|
||||
}
|
||||
};
|
||||
|
||||
static _OpenGunLocker __OpenGunLocker{"opengunlocker", "Open Gun Locker", "Allows you to access gun locker remotely."};
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
namespace rage
|
||||
{
|
||||
class scrThread;
|
||||
}
|
||||
|
||||
namespace YimMenu::Features
|
||||
{
|
||||
class OpenGunLocker
|
||||
{
|
||||
static OpenGunLocker& GetInstance()
|
||||
{
|
||||
static OpenGunLocker instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
rage::scrThread* m_Thread = nullptr;
|
||||
bool m_ShouldRunScript = false;
|
||||
|
||||
void RunScriptImpl();
|
||||
|
||||
public:
|
||||
|
||||
static void RunScript()
|
||||
{
|
||||
GetInstance().RunScriptImpl();
|
||||
}
|
||||
|
||||
static void SetShouldRunScript(bool run)
|
||||
{
|
||||
GetInstance().m_ShouldRunScript = run;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "core/util/Joaat.hpp"
|
||||
#include "game/frontend/items/Items.hpp"
|
||||
#include "OutfitEditor.hpp"
|
||||
#include "game/frontend/submenus/Self/Weapons.hpp"
|
||||
|
||||
namespace YimMenu::Submenus
|
||||
{
|
||||
@@ -61,25 +62,7 @@ namespace YimMenu::Submenus
|
||||
main->AddItem(movementGroup);
|
||||
AddCategory(std::move(main));
|
||||
|
||||
auto weapons = std::make_shared<Category>("Weapons");
|
||||
auto weaponsGlobalsGroup = std::make_shared<Group>("Globals");
|
||||
auto weaponsAimbotGroup = std::make_shared<Group>("Aimbot", 1);
|
||||
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteammo"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteclip"_J));
|
||||
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<CommandItem>("giveallweapons"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<CommandItem>("givemaxammo"_J));
|
||||
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<BoolCommandItem>("aimbot"_J));
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<ConditionalItem>("aimbot"_J, std::make_shared<BoolCommandItem>("aimbotaimforhead"_J)));
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<ConditionalItem>("aimbot"_J, std::make_shared<BoolCommandItem>("aimbottargetdrivers"_J)));
|
||||
|
||||
weapons->AddItem(weaponsGlobalsGroup);
|
||||
weapons->AddItem(weaponsAimbotGroup);
|
||||
AddCategory(std::move(weapons));
|
||||
AddCategory(BuildWeaponsMenu());
|
||||
|
||||
auto outfitEditorCategory = YimMenu::CreateOutfitsMenu();
|
||||
AddCategory(std::move(outfitEditorCategory));
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
#include "Weapons.hpp"
|
||||
#include "core/backend/FiberPool.hpp"
|
||||
#include "game/backend/Self.hpp"
|
||||
#include "game/gta/data/Weapons.hpp"
|
||||
#include "game/gta/Natives.hpp"
|
||||
#include "game/gta/Scripts.hpp"
|
||||
#include "game/gta/ScriptFunction.hpp"
|
||||
#include "types/script/scrThread.hpp"
|
||||
|
||||
namespace YimMenu::Submenus
|
||||
{
|
||||
struct WeaponDisplay
|
||||
{
|
||||
std::string name;
|
||||
std::string desc;
|
||||
joaat_t hash;
|
||||
};
|
||||
|
||||
static void RenderAmmuNationMenu()
|
||||
{
|
||||
static std::vector<WeaponDisplay> weaponDisplays;
|
||||
static std::string selectedWeapon{"Select"};
|
||||
static joaat_t selectedWeaponHash{};
|
||||
static char searchWeapon[64];
|
||||
|
||||
static bool init = [] {
|
||||
FiberPool::Push([] {
|
||||
if (auto id = Scripts::StartScript("mp_weapons"_J))
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThreadByID(id))
|
||||
{
|
||||
thread->m_Context.m_State = rage::scrThread::State::PAUSED;
|
||||
|
||||
for (const auto& weap : g_WeaponHashes)
|
||||
{
|
||||
static ScriptFunction getWeaponNameLabel("mp_weapons"_J, ScriptPointer("GetWeaponNameLabel", "2D 02 2B 00 00"));
|
||||
static ScriptFunction getWeaponDescLabel("mp_weapons"_J, ScriptPointer("GetWeaponDescLabel", "2D 02 A0 00 00"));
|
||||
|
||||
std::string nameGxt = getWeaponNameLabel.Call<const char*>(weap, false); // second arg is for uppercase
|
||||
std::string descGxt = getWeaponDescLabel.Call<const char*>(weap, false);
|
||||
|
||||
std::string nameDisplay = HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION(nameGxt.c_str());
|
||||
std::string descDisplay = HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION(descGxt.c_str());
|
||||
|
||||
weaponDisplays.push_back({((nameDisplay.empty() || nameDisplay == "NULL" || nameDisplay == "Invalid") ? "" : nameDisplay), ((descDisplay.empty() || descDisplay == "NULL" || descDisplay == "Invalid") ? "" : descDisplay), weap});
|
||||
}
|
||||
|
||||
thread->Kill();
|
||||
thread->m_Context.m_State = rage::scrThread::State::KILLED;
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}();
|
||||
|
||||
if (weaponDisplays.empty())
|
||||
return ImGui::TextDisabled("Loading...");
|
||||
|
||||
ImGui::BeginCombo("Weapons", selectedWeapon.c_str());
|
||||
if (ImGui::IsItemActive() && !ImGui::IsPopupOpen("##weaponspopup"))
|
||||
{
|
||||
ImGui::OpenPopup("##weaponspopup");
|
||||
memset(searchWeapon, 0, sizeof(searchWeapon));
|
||||
}
|
||||
if (ImGui::BeginPopup("##weaponspopup", ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove))
|
||||
{
|
||||
ImGui::Text("Search:");
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(250.f);
|
||||
ImGui::InputText("##searchweapon", searchWeapon, sizeof(searchWeapon));
|
||||
|
||||
std::string searchLower = searchWeapon;
|
||||
std::transform(searchLower.begin(), searchLower.end(), searchLower.begin(), ::tolower);
|
||||
for (const auto& weap : weaponDisplays)
|
||||
{
|
||||
if (weap.name.empty())
|
||||
continue;
|
||||
|
||||
std::string weaponLower = weap.name;
|
||||
std::transform(weaponLower.begin(), weaponLower.end(), weaponLower.begin(), ::tolower);
|
||||
|
||||
if (weaponLower.find(searchLower) != std::string::npos)
|
||||
{
|
||||
ImGui::PushID(weap.hash);
|
||||
if (ImGui::Selectable(weap.name.c_str()))
|
||||
{
|
||||
selectedWeapon = weap.name;
|
||||
selectedWeaponHash = weap.hash;
|
||||
}
|
||||
ImGui::PopID();
|
||||
if (ImGui::IsItemHovered() && !weap.desc.empty())
|
||||
{
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35);
|
||||
ImGui::TextUnformatted(weap.desc.c_str());
|
||||
ImGui::PopTextWrapPos();
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Give Weapon"))
|
||||
{
|
||||
FiberPool::Push([] {
|
||||
Self::GetPed().GiveWeapon(selectedWeaponHash, true);
|
||||
});
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Remove Weapon"))
|
||||
{
|
||||
FiberPool::Push([] {
|
||||
Self::GetPed().RemoveWeapon(selectedWeaponHash);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<Category> BuildWeaponsMenu()
|
||||
{
|
||||
auto weapons = std::make_shared<Category>("Weapons");
|
||||
|
||||
auto weaponsGlobalsGroup = std::make_shared<Group>("Globals");
|
||||
auto weaponsToolsGroup = std::make_shared<Group>("Tools", 1);
|
||||
auto weaponsAmmuNationGroup = std::make_shared<Group>("Ammu-Nation");
|
||||
auto weaponsAimbotGroup = std::make_shared<Group>("Aimbot", 1);
|
||||
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteammo"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteclip"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("rapidfire"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("infiniteparachutes"_J));
|
||||
weaponsGlobalsGroup->AddItem(std::make_shared<BoolCommandItem>("ExplosiveAmmo"_J));
|
||||
|
||||
weaponsToolsGroup->AddItem(std::make_shared<CommandItem>("giveallweapons"_J));
|
||||
weaponsToolsGroup->AddItem(std::make_shared<CommandItem>("givemaxammo"_J));
|
||||
weaponsToolsGroup->AddItem(std::make_shared<CommandItem>("opengunlocker"_J));
|
||||
|
||||
weaponsAmmuNationGroup->AddItem(std::make_shared<ImGuiItem>([] {
|
||||
RenderAmmuNationMenu();
|
||||
}));
|
||||
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<BoolCommandItem>("aimbot"_J));
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<ConditionalItem>("aimbot"_J, std::make_shared<BoolCommandItem>("aimbotaimforhead"_J)));
|
||||
weaponsAimbotGroup->AddItem(std::make_shared<ConditionalItem>("aimbot"_J, std::make_shared<BoolCommandItem>("aimbottargetdrivers"_J)));
|
||||
|
||||
weapons->AddItem(weaponsGlobalsGroup);
|
||||
weapons->AddItem(weaponsToolsGroup);
|
||||
weapons->AddItem(weaponsAmmuNationGroup);
|
||||
weapons->AddItem(weaponsAimbotGroup);
|
||||
return weapons;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include "core/frontend/manager/Category.hpp"
|
||||
#include "game/frontend/items/Items.hpp"
|
||||
|
||||
namespace YimMenu::Submenus
|
||||
{
|
||||
std::shared_ptr<Category> BuildWeaponsMenu();
|
||||
}
|
||||
+117
-115
@@ -1,119 +1,121 @@
|
||||
#pragma once
|
||||
#include "core/util/Joaat.hpp"
|
||||
|
||||
namespace Data
|
||||
namespace YimMenu
|
||||
{
|
||||
static inline constexpr auto Weapons = std::to_array({
|
||||
"weapon_dagger"_J,
|
||||
"weapon_bat"_J,
|
||||
"weapon_bottle"_J,
|
||||
"weapon_crowbar"_J,
|
||||
"weapon_unarmed"_J,
|
||||
"weapon_flashlight"_J,
|
||||
"weapon_golfclub"_J,
|
||||
"weapon_hammer"_J,
|
||||
"weapon_hatchet"_J,
|
||||
"weapon_knuckle"_J,
|
||||
"weapon_knife"_J,
|
||||
"weapon_machete"_J,
|
||||
"weapon_switchblade"_J,
|
||||
"weapon_nightstick"_J,
|
||||
"weapon_wrench"_J,
|
||||
"weapon_battleaxe"_J,
|
||||
"weapon_poolcue"_J,
|
||||
"weapon_stone_hatchet"_J,
|
||||
"weapon_pistol"_J,
|
||||
"weapon_pistol_mk2"_J,
|
||||
"weapon_combatpistol"_J,
|
||||
"weapon_appistol"_J,
|
||||
"weapon_stungun"_J,
|
||||
"weapon_pistol50"_J,
|
||||
"weapon_snspistol"_J,
|
||||
"weapon_snspistol_mk2"_J,
|
||||
"weapon_heavypistol"_J,
|
||||
"weapon_vintagepistol"_J,
|
||||
"weapon_flaregun"_J,
|
||||
"weapon_marksmanpistol"_J,
|
||||
"weapon_revolver"_J,
|
||||
"weapon_revolver_mk2"_J,
|
||||
"weapon_doubleaction"_J,
|
||||
"weapon_raypistol"_J,
|
||||
"weapon_ceramicpistol"_J,
|
||||
"weapon_navyrevolver"_J,
|
||||
"weapon_microsmg"_J,
|
||||
"weapon_smg"_J,
|
||||
"weapon_smg_mk2"_J,
|
||||
"weapon_assaultsmg"_J,
|
||||
"weapon_combatpdw"_J,
|
||||
"weapon_machinepistol"_J,
|
||||
"weapon_minismg"_J,
|
||||
"weapon_raycarbine"_J,
|
||||
"weapon_pumpshotgun"_J,
|
||||
"weapon_pumpshotgun_mk2"_J,
|
||||
"weapon_sawnoffshotgun"_J,
|
||||
"weapon_assaultshotgun"_J,
|
||||
"weapon_bullpupshotgun"_J,
|
||||
"weapon_musket"_J,
|
||||
"weapon_heavyshotgun"_J,
|
||||
"weapon_dbshotgun"_J,
|
||||
"weapon_autoshotgun"_J,
|
||||
"weapon_assaultrifle"_J,
|
||||
"weapon_assaultrifle_mk2"_J,
|
||||
"weapon_carbinerifle"_J,
|
||||
"weapon_carbinerifle_mk2"_J,
|
||||
"weapon_advancedrifle"_J,
|
||||
"weapon_specialcarbine"_J,
|
||||
"weapon_specialcarbine_mk2"_J,
|
||||
"weapon_bullpuprifle"_J,
|
||||
"weapon_bullpuprifle_mk2"_J,
|
||||
"weapon_compactrifle"_J,
|
||||
"weapon_mg"_J,
|
||||
"weapon_combatmg"_J,
|
||||
"weapon_combatmg_mk2"_J,
|
||||
"weapon_gusenberg"_J,
|
||||
"weapon_sniperrifle"_J,
|
||||
"weapon_heavysniper"_J,
|
||||
"weapon_heavysniper_mk2"_J,
|
||||
"weapon_marksmanrifle"_J,
|
||||
"weapon_marksmanrifle_mk2"_J,
|
||||
"weapon_rpg"_J,
|
||||
"weapon_grenadelauncher"_J,
|
||||
"weapon_grenadelauncher_smoke"_J,
|
||||
"weapon_minigun"_J,
|
||||
"weapon_firework"_J,
|
||||
"weapon_railgun"_J,
|
||||
"weapon_hominglauncher"_J,
|
||||
"weapon_compactlauncher"_J,
|
||||
"weapon_rayminigun"_J,
|
||||
"weapon_grenade"_J,
|
||||
"weapon_bzgas"_J,
|
||||
"weapon_smokegrenade"_J,
|
||||
"weapon_flare"_J,
|
||||
"weapon_molotov"_J,
|
||||
"weapon_stickybomb"_J,
|
||||
"weapon_proxmine"_J,
|
||||
"weapon_snowball"_J,
|
||||
"weapon_pipebomb"_J,
|
||||
"weapon_ball"_J,
|
||||
"weapon_petrolcan"_J,
|
||||
"weapon_fireextinguisher"_J,
|
||||
"weapon_hazardcan"_J,
|
||||
"weapon_militaryrifle"_J,
|
||||
"weapon_combatshotgun"_J,
|
||||
"weapon_gadgetpistol"_J,
|
||||
"WEAPON_SNOWLAUNCHER"_J,
|
||||
"WEAPON_BATTLERIFLE"_J,
|
||||
"WEAPON_TECPISTOL"_J,
|
||||
"WEAPON_CANDYCANE"_J,
|
||||
"WEAPON_PISTOLXM3"_J,
|
||||
"WEAPON_RAILGUNXM3"_J,
|
||||
"WEAPON_PRECISIONRIFLE"_J,
|
||||
"WEAPON_TACTICALRIFLE"_J,
|
||||
"WEAPON_EMPLAUNCHER"_J,
|
||||
"WEAPON_HEAVYRIFLE"_J,
|
||||
"WEAPON_STUNROD"_J,
|
||||
"weapon_acidpackage"_J,
|
||||
"weapon_fertilizercan"_J,
|
||||
"WEAPON_STRICKLER"_J,
|
||||
});
|
||||
}
|
||||
static inline constexpr auto g_WeaponHashes = std::to_array({
|
||||
"WEAPON_KNIFE"_J,
|
||||
"WEAPON_NIGHTSTICK"_J,
|
||||
"WEAPON_HAMMER"_J,
|
||||
"WEAPON_BAT"_J,
|
||||
"WEAPON_GOLFCLUB"_J,
|
||||
"WEAPON_CROWBAR"_J,
|
||||
"WEAPON_PISTOL"_J,
|
||||
"WEAPON_COMBATPISTOL"_J,
|
||||
"WEAPON_APPISTOL"_J,
|
||||
"WEAPON_PISTOL50"_J,
|
||||
"WEAPON_MICROSMG"_J,
|
||||
"WEAPON_SMG"_J,
|
||||
"WEAPON_ASSAULTSMG"_J,
|
||||
"WEAPON_ASSAULTRIFLE"_J,
|
||||
"WEAPON_CARBINERIFLE"_J,
|
||||
"WEAPON_ADVANCEDRIFLE"_J,
|
||||
"WEAPON_MG"_J,
|
||||
"WEAPON_COMBATMG"_J,
|
||||
"WEAPON_PUMPSHOTGUN"_J,
|
||||
"WEAPON_SAWNOFFSHOTGUN"_J,
|
||||
"WEAPON_ASSAULTSHOTGUN"_J,
|
||||
"WEAPON_BULLPUPSHOTGUN"_J,
|
||||
"WEAPON_STUNGUN"_J,
|
||||
"WEAPON_SNIPERRIFLE"_J,
|
||||
"WEAPON_HEAVYSNIPER"_J,
|
||||
"WEAPON_REMOTESNIPER"_J,
|
||||
"WEAPON_GRENADELAUNCHER"_J,
|
||||
"WEAPON_GRENADELAUNCHER_SMOKE"_J,
|
||||
"WEAPON_RPG"_J,
|
||||
"WEAPON_MINIGUN"_J,
|
||||
"WEAPON_GRENADE"_J,
|
||||
"WEAPON_STICKYBOMB"_J,
|
||||
"WEAPON_SMOKEGRENADE"_J,
|
||||
"WEAPON_BZGAS"_J,
|
||||
"WEAPON_MOLOTOV"_J,
|
||||
"WEAPON_FIREEXTINGUISHER"_J,
|
||||
"WEAPON_PETROLCAN"_J,
|
||||
"WEAPON_BALL"_J,
|
||||
"WEAPON_FLARE"_J,
|
||||
"WEAPON_BOTTLE"_J,
|
||||
"WEAPON_SNSPISTOL"_J,
|
||||
"WEAPON_HEAVYPISTOL"_J,
|
||||
"WEAPON_BULLPUPRIFLE"_J,
|
||||
"WEAPON_SPECIALCARBINE"_J,
|
||||
"WEAPON_SNSPISTOL_MK2"_J,
|
||||
"WEAPON_SPECIALCARBINE_MK2"_J,
|
||||
"WEAPON_PUMPSHOTGUN_MK2"_J,
|
||||
"WEAPON_BULLPUPRIFLE_MK2"_J,
|
||||
"WEAPON_MARKSMANRIFLE_MK2"_J,
|
||||
"WEAPON_CANDYCANE"_J,
|
||||
"WEAPON_PISTOLXM3"_J,
|
||||
"WEAPON_RAILGUNXM3"_J,
|
||||
"WEAPON_ACIDPACKAGE"_J,
|
||||
"WEAPON_HOMINGLAUNCHER"_J,
|
||||
"WEAPON_PROXMINE"_J,
|
||||
"WEAPON_SNOWBALL"_J,
|
||||
"WEAPON_DOUBLEACTION"_J,
|
||||
"WEAPON_REVOLVER_MK2"_J,
|
||||
"WEAPON_RAYPISTOL"_J,
|
||||
"WEAPON_RAYCARBINE"_J,
|
||||
"WEAPON_RAYMINIGUN"_J,
|
||||
"WEAPON_GUSENBERG"_J,
|
||||
"WEAPON_DAGGER"_J,
|
||||
"WEAPON_VINTAGEPISTOL"_J,
|
||||
"WEAPON_FIREWORK"_J,
|
||||
"WEAPON_MUSKET"_J,
|
||||
"WEAPON_HATCHET"_J,
|
||||
"WEAPON_RAILGUN"_J,
|
||||
"WEAPON_MARKSMANRIFLE"_J,
|
||||
"WEAPON_HEAVYSHOTGUN"_J,
|
||||
"WEAPON_CERAMICPISTOL"_J,
|
||||
"WEAPON_MILITARYRIFLE"_J,
|
||||
"WEAPON_GADGETPISTOL"_J,
|
||||
"WEAPON_HAZARDCAN"_J,
|
||||
"WEAPON_COMBATSHOTGUN"_J,
|
||||
"WEAPON_NAVYREVOLVER"_J,
|
||||
"WEAPON_FLAREGUN"_J,
|
||||
"WEAPON_KNUCKLE"_J,
|
||||
"WEAPON_COMBATPDW"_J,
|
||||
"WEAPON_MARKSMANPISTOL"_J,
|
||||
"WEAPON_DBSHOTGUN"_J,
|
||||
"WEAPON_COMPACTRIFLE"_J,
|
||||
"WEAPON_MACHINEPISTOL"_J,
|
||||
"WEAPON_MACHETE"_J,
|
||||
"WEAPON_FLASHLIGHT"_J,
|
||||
"WEAPON_SWITCHBLADE"_J,
|
||||
"WEAPON_REVOLVER"_J,
|
||||
"WEAPON_WRENCH"_J,
|
||||
"WEAPON_POOLCUE"_J,
|
||||
"WEAPON_MINISMG"_J,
|
||||
"WEAPON_BATTLEAXE"_J,
|
||||
"WEAPON_AUTOSHOTGUN"_J,
|
||||
"WEAPON_COMPACTLAUNCHER"_J,
|
||||
"WEAPON_PIPEBOMB"_J,
|
||||
"WEAPON_SMG_MK2"_J,
|
||||
"WEAPON_COMBATMG_MK2"_J,
|
||||
"WEAPON_CARBINERIFLE_MK2"_J,
|
||||
"WEAPON_ASSAULTRIFLE_MK2"_J,
|
||||
"WEAPON_HEAVYSNIPER_MK2"_J,
|
||||
"WEAPON_PISTOL_MK2"_J,
|
||||
"WEAPON_STONE_HATCHET"_J,
|
||||
"WEAPON_TACTICALRIFLE"_J,
|
||||
"WEAPON_PRECISIONRIFLE"_J,
|
||||
"WEAPON_HEAVYRIFLE"_J,
|
||||
"WEAPON_FERTILIZERCAN"_J,
|
||||
"WEAPON_EMPLAUNCHER"_J,
|
||||
"WEAPON_STUNGUN_MP"_J,
|
||||
"WEAPON_TECPISTOL"_J,
|
||||
"WEAPON_SNOWLAUNCHER"_J,
|
||||
"WEAPON_HACKINGDEVICE"_J,
|
||||
"WEAPON_BATTLERIFLE"_J,
|
||||
"WEAPON_STUNROD"_J,
|
||||
"WEAPON_STRICKLER"_J
|
||||
});
|
||||
}
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "game/frontend/GUI.hpp"
|
||||
#include "game/pointers/Pointers.hpp"
|
||||
#include "game/features/vehicle/SavePersonalVehicle.hpp"
|
||||
#include "game/features/self/OpenGunLocker.hpp"
|
||||
|
||||
namespace YimMenu
|
||||
{
|
||||
@@ -67,6 +68,7 @@ namespace YimMenu
|
||||
ScriptMgr::AddScript(std::make_unique<Script>(&HotkeySystem::RunScript));
|
||||
ScriptMgr::AddScript(std::make_unique<Script>(&Commands::RunScript));
|
||||
ScriptMgr::AddScript(std::make_unique<Script>(&Features::SavePersonalVehicle::RunScript));
|
||||
ScriptMgr::AddScript(std::make_unique<Script>(&Features::OpenGunLocker::RunScript));
|
||||
ScriptMgr::AddScript(std::make_unique<Script>(&SavedPlayers::RunScript));
|
||||
|
||||
if (!Pointers.LateInit())
|
||||
|
||||
Reference in New Issue
Block a user