mirror of
https://github.com/UltimateMenu/UltimateMenu.git
synced 2026-10-10 11:53:08 +08:00
c06a2ff411
Use the native io.exists helper and return nil when config reads fail instead of raising fatal errors, allowing callers to handle missing or unreadable configuration files gracefully.
8713 lines
333 KiB
Lua
8713 lines
333 KiB
Lua
--Required Stats----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--Globals & Locals & Variables--
|
|
|
|
FMg = 262145 -- free mode global ("CASH_MULTIPLIER") //correct
|
|
CSg1 = 1575046 -- change session (type) 1 // Guide: NETWORK::UGC_SET_USING_OFFLINE_CONTENT(false); in freemode.c
|
|
CSg2 = 1574589 -- change session (switch) 2 // Guide: MP_POST_MATCH_TRANSITION_SCENE in freemode.c
|
|
CSg3 = 1574589 + 2 -- change session (quit) 3 // Guide: MP_POST_MATCH_TRANSITION_SCENE in freemode.c
|
|
|
|
-- Apartment Heist
|
|
ACg1 = 1935929 + 1 + 1 -- global apartment player 1 cut global ("fmmc_launcher")
|
|
ACg2 = 1935929 + 1 + 2 -- global apartment player 2 cut global ("fmmc_launcher")
|
|
ACg3 = 1935929 + 1 + 3 -- global apartment player 3 cut global ("fmmc_launcher")
|
|
ACg4 = 1935929 + 1 + 4 -- global apartment player 4 cut global ("fmmc_launcher")
|
|
ACg5 = 1937897 + 3008 + 1 -- local apartment player 1 cut global ("fmmc_launcher")
|
|
AUAJg1 = FMg + 9184 -- apartment unlock all jobs global 1 ("ROOT_ID_HASH_THE_FLECCA_JOB")
|
|
AUAJg2 = FMg + 9189 -- apartment unlock all jobs global 2 ("ROOT_ID_HASH_THE_PRISON_BREAK")
|
|
AUAJg3 = FMg + 9196 -- apartment unlock all jobs global 3 ("ROOT_ID_HASH_THE_HUMANE_LABS_RAID")
|
|
AUAJg4 = FMg + 9202 -- apartment unlock all jobs global 4 ("ROOT_ID_HASH_SERIES_A_FUNDING")
|
|
AUAJg5 = FMg + 9208 -- apartment unlock all jobs global 5 ("ROOT_ID_HASH_THE_PACIFIC_STANDARD_JOB")
|
|
AIFl1 = 19808 -- apartment instant finish local 1
|
|
AIFl2 = 19808 + 1062 -- apartment instant finish local 2
|
|
AIFl3 = 19808 + 1740 + 1 -- apartment instant finish local 3
|
|
AIFl4 = 19808 + 2686 -- apartment instant finish local 4
|
|
AIFl5 = 28722 + 1 -- apartment instant finish local 5
|
|
AIFl6 = 31981 + 1 + 68 -- apartment instant finish local 6
|
|
AFHl = 11837 + 24 -- apartment fleeca hack local
|
|
AFDl = 10125 + 11 -- apartment fleeca drill local
|
|
AFPl = 9831 -- apartment pacific hack local
|
|
AHSo = 19808 + 2 -- Apartment heist skip checkpoint
|
|
ACDg = 2686119 -- apartment cooldown global
|
|
AHDg = 4718592 + 3771 -- search in tuneables_processing.c for joaat("HEIST_DIFFICULTY_EASY") then search the global you find in fmmc_launcher.c then take the global in switch state above it done
|
|
AHLIVES = 26234 + 1325 + 1 -- Apartment Heist team lives local found below if (eventData == -1248635465) in ("fm_mission_controller")
|
|
|
|
-- Diamond Casino Heist
|
|
DCRBl = 217 -- diamond casino reload board local
|
|
DCCg1 = 1972483 + 1497 + 736 + 92 + 1 -- diamond casino player 1 cut global ("gb_casino_heist_planning")
|
|
DCCg2 = 1972483 + 1497 + 736 + 92 + 2 -- diamond casino player 2 cut global ("gb_casino_heist_planning")
|
|
DCCg3 = 1972483 + 1497 + 736 + 92 + 3 -- diamond casino player 3 cut global ("gb_casino_heist_planning")
|
|
DCCg4 = 1972483 + 1497 + 736 + 92 + 4 -- diamond casino player 4 cut global ("gb_casino_heist_planning")
|
|
DCAg = 10311 -- casino autograbber local 1
|
|
DCAs = 10311 + 14 -- casino autograbber local 2
|
|
DCFHl = 54118 -- diamond casino fingerprint hack local
|
|
DCKHl = 55188 -- diamond casino keypad hack local
|
|
DCDVDl1 = 10125 + 7 -- diamond casino drill vault door local 1 --("DLC_HEIST_MINIGAME_FLEECA_DRILLING_SCENE") in ("fm_mission_controller")
|
|
DCDVDl2 = 10125 + 37 -- diamond casino drill vault door local 2 --("fm_mission_controller")
|
|
DCLIVESL = 26234 + 1325 + 1 -- diamond casino team lives local found below if (eventData == -1248635465) in ("fm_mission_controller")
|
|
DCXf1 = 19808
|
|
DCXf2 = 19808 + 1062
|
|
DCXf3 = 19808 + 1740 + 1
|
|
DCXf4 = 19808 + 2686
|
|
DCXf5 = 28722 + 1
|
|
DCXf6 = 31981 + 1 + 68
|
|
|
|
-- Cayo Perico Heist
|
|
CPRSl = 1578 -- cayo perico reload screen local
|
|
CPCg1 = 1979291 + 831 + 56 + 1 -- cayo perico player 1 cut global --("heist_island_planning")
|
|
CPCg2 = 1979291 + 831 + 56 + 2 -- cayo perico player 2 cut global --("heist_island_planning")
|
|
CPCg3 = 1979291 + 831 + 56 + 3 -- cayo perico player 3 cut global --("heist_island_planning")
|
|
CPCg4 = 1979291 + 831 + 56 + 4 -- cayo perico player 4 cut global --("heist_island_planning")
|
|
CPFHl = 26217 -- cayo perico fingerprint hack local ("heist") in ("fm_mission_controller_2020")
|
|
CPPCCl = 32349 + 3 -- cayo perico plasma cutter cut local ("DLC_H4_anims_glass_cutter_Sounds") in ("fm_mission_controller_2020")
|
|
CPSTCl = 31109 -- cayo perico drainage pipe cut local ("IntroFinished") in ("fm_mission_controller_2020")
|
|
CPXf1 = 56070 -- cayo perico instant finish local 1
|
|
CPXf2 = 56070 + 1776 + 1 -- cayo perico instant finish local 2
|
|
CPLIVESL = 62851 + 1109 + 1 -- Cayo Perico team lives local found below if (eventData == -1248635465) in ("fm_mission_controller_2020")
|
|
|
|
-- Doomsday Heist
|
|
DDSHl = 1312 + 135 -- doomsday doomsday scenario hack local
|
|
DCg1 = 1968511 + 812 + 50 + 1 -- doomsday player 1 cut global --("gb_gang_ops_planning")
|
|
DCg2 = 1968511 + 812 + 50 + 2 -- doomsday player 2 cut global --("gb_gang_ops_planning")
|
|
DCg3 = 1968511 + 812 + 50 + 3 -- doomsday player 3 cut global --("gb_gang_ops_planning")
|
|
DCg4 = 1968511 + 812 + 50 + 4 -- doomsday player 4 cut global --("gb_gang_ops_planning")
|
|
GCg = 2686119 + 6791 -- global cut global (value2 = value2 * (num / 100f);)
|
|
DDIF1 = 19808 -- doomsday instant finish local 1
|
|
DDIF2 = 19808 + 1740 + 1 -- doomsday instant finish local 2
|
|
DDIF3 = 28722 + 1 -- doomsday instant finish local 3
|
|
DDIF4 = 31981 + 1 + 68 -- doomsday instant finish local 4
|
|
DDIF5 = 31981 + 97 -- doomsday instant finish local 5
|
|
DDLIVESL = 26234 + 1325 + 1 -- Doomsday team lives local found below if (eventData == -1248635465) in ("fm_mission_controller")
|
|
|
|
-- Kortz Center Heist
|
|
KCBRL = 597 -- kortz center reload board local -- ("kortz_planning") -- above 2nd ("(NETWORK::NETWORK_IS_ACTIVITY_SESSION()")
|
|
KCDCL = 1386 -- Data crack local (1386 + 1 + (i * 4) for i = 0-7) [+1 skips array size]
|
|
KCFHL = 26464 -- Fingerprint hack local
|
|
KCAC_BASE = 32416 + 1 -- Access code base (32416 + 1 + (i * 2) for i = 0-2)
|
|
KCLGL = 70472 -- Lasers local
|
|
KCVLL = 27512 -- Vault door local
|
|
KCCGL_BASE = 32453 + 1 -- Cut glass base (32453 + 1 + (i * 13) + 3 for i = 0-4) [+1 skips array size]
|
|
KCCGL_OFFSET = 3 -- Cut glass offset
|
|
|
|
-- Target State Locals
|
|
KCPT_STATE = 28953 + 11 -- Primary target state (10/15/17 = available, 3 = taken)
|
|
KCST_STATE = 28953 + 11 -- Secondary target state (3 = available)
|
|
|
|
-- Global Variables
|
|
KCBGL = FMg + 37438 -- Bag size global
|
|
KCWMG = FMg + 38199 -- Weekly multiplier global
|
|
KCCDG = FMg + 38102 -- Cooldown normal global
|
|
KCCD2G = FMg + 38103 -- Cooldown hard mode global
|
|
KCLDG = 1935234 -- Lasers disable global
|
|
KCSECONDARY_BASE = 4980736 + 1 + 29174 -- Secondary targets base (4980736 + 1 + 29174 + (i * 333) + 68/143) [+1 skips array size]
|
|
KCPAYOUT_BASE = FMg + 37405 -- Primary target payout base
|
|
|
|
-- Lives
|
|
KCLIVESL = 63515 + 1109 + 1 -- Team lives local
|
|
|
|
KCIf1 = 56716 + 1 -- kortz center instant finish local 1
|
|
KCIf2 = 56716 + 1776 + 1 -- kortz center instant finish local 2
|
|
|
|
-- Agency Variables
|
|
AGFl1 = 56070 + 1
|
|
AGFl2 = 56070 + 1776 + 1
|
|
|
|
-- Auto Shop variables
|
|
ASIFl1 = 56070 + 1 -- auto shop instant finish local 1
|
|
ASIFl2 = 56070 + 1776 + 1 -- auto shop finish local 2
|
|
ASRBl = 416 -- auto shop reload board local
|
|
|
|
-- Salvage Yard
|
|
SYRl1 = 545 -- salvage yard reload board local
|
|
|
|
-- Heists Meta
|
|
HGLs1 = 4718592 + 3769
|
|
HGLs2 = 4718592 + 3772
|
|
HGLs3 = 4718592 + 3773
|
|
HGLs4 = 4718592 + 190163 + 1
|
|
HGGs1 = 20194 + 34
|
|
HGGs2 = 20194 + 15
|
|
|
|
IHPB = 56070 --Instant Heist Passed Local Base (Casino And CayoPerico)
|
|
IHPL = 56070 + 1776 + 1 --Instant Heist Passed Locals (Casino And CayoPerico)
|
|
|
|
NLCl = 213 + 32 + 19 + 1 --("nightclub_office_cutscene") in ("am_mp_nightclub")
|
|
|
|
SNOW = FMg + 4413
|
|
|
|
halloweatherAddress = FMg + 32247
|
|
|
|
yetihuntAddress = FMg + 35041
|
|
|
|
TRICK_OR_TREAT = FMg + 32173 --("COLLECTABLES_TRICK_OR_TREAT") in ("tuneables_processing")
|
|
|
|
SNOWMEN_COLLECTIBLES = FMg + 33317 --("COLLECTABLES_SNOWMEN") in ("tuneables_processing")
|
|
|
|
--GUN VAN VARIABLES-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
GVADg = FMg + 33392
|
|
GVWDg = FMg + 33373
|
|
GVTDg = FMg + 33384
|
|
|
|
--CCBL = Casino Chips Buy Limit-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CCBL0 = FMg + 26623
|
|
CCBL1 = FMg + 26624
|
|
|
|
--BAS=Bag Size------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CPBg = FMg + 29300
|
|
|
|
--PSV=Panther Statue-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
PSV = FMg + 29552
|
|
|
|
--PDIAMOND=Pink Diamond---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
PDIAMOND = FMg + 29550
|
|
|
|
--BB=Bearer Bonds---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
BB = FMg + 29549
|
|
|
|
--RN=Ruby Necklace--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
RN = FMg + 29548
|
|
|
|
--TEQUILA=Tequila---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
TEQUILA = FMg + 29547
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--Required Stats----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function MPX()
|
|
local PI = stats.get_int("MPPLY_LAST_MP_CHAR")
|
|
if PI == 1 then
|
|
return "MP1_"
|
|
end
|
|
return "MP0_"
|
|
end
|
|
|
|
function SkipCutscene()
|
|
script.run_in_fiber(function(script)
|
|
if CUTSCENE.IS_CUTSCENE_PLAYING() then
|
|
CUTSCENE.STOP_CUTSCENE_IMMEDIATELY()
|
|
script:sleep(100)
|
|
CUTSCENE.REMOVE_CUTSCENE()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function SPX()
|
|
local player_ped = PLAYER.PLAYER_PED_ID()
|
|
if player_ped == 0 then
|
|
return "SP0_"
|
|
end
|
|
local PI = ENTITY.GET_ENTITY_MODEL(player_ped)
|
|
if PI == joaat("Player_One") then
|
|
return "SP1_"
|
|
elseif PI == joaat("Player_Two") then
|
|
return "SP2_"
|
|
end
|
|
return "SP0_"
|
|
end
|
|
|
|
local bypassOnlineCheckbox = nil
|
|
|
|
function checkOnline()
|
|
if bypassOnlineCheckbox and bypassOnlineCheckbox:is_enabled() then
|
|
return false
|
|
end
|
|
if
|
|
SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
or not ENTITY.DOES_ENTITY_EXIST(PLAYER.PLAYER_PED_ID())
|
|
then
|
|
ImGui.Text("Waiting for game...")
|
|
return true
|
|
end
|
|
if not network.is_session_started() then
|
|
ImGui.Text("\nUnavailable in Single Player.\n\n")
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function checkStoryMode()
|
|
if
|
|
SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
or not ENTITY.DOES_ENTITY_EXIST(PLAYER.PLAYER_PED_ID())
|
|
then
|
|
ImGui.Text("Waiting for game...")
|
|
return true
|
|
end
|
|
if network.is_session_started() then
|
|
ImGui.Text("\nUnavailable in MultiPlayer.\n\n")
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Silent offline check: returns true if offline, but shows NO text
|
|
function isOffline()
|
|
if bypassOnlineCheckbox and bypassOnlineCheckbox:is_enabled() then
|
|
return false
|
|
end
|
|
if
|
|
SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
or not ENTITY.DOES_ENTITY_EXIST(PLAYER.PLAYER_PED_ID())
|
|
then
|
|
return true
|
|
end
|
|
if not network.is_session_started() then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Shared guard: ensures exactly ONE warning callback per tab
|
|
local online_guards = {}
|
|
function ensureOnlineGuard(tab)
|
|
if not online_guards[tab] then
|
|
online_guards[tab] = true
|
|
tab:add_imgui(function()
|
|
checkOnline() -- only this one shows the warning text
|
|
end)
|
|
end
|
|
end
|
|
|
|
-- Story Mode widget system
|
|
local story_widgets = {}
|
|
local story_initialized = {}
|
|
|
|
function initStoryTab(tab)
|
|
if not story_initialized[tab] then
|
|
story_initialized[tab] = true
|
|
story_widgets[tab] = {}
|
|
tab:add_imgui(function()
|
|
-- Only call checkStoryMode() once here
|
|
if checkStoryMode() then
|
|
return
|
|
end
|
|
for _, widget in ipairs(story_widgets[tab]) do
|
|
if widget.type == "button" then
|
|
if ImGui.Button(widget.label) then
|
|
widget.callback()
|
|
end
|
|
elseif widget.type == "sameline" then
|
|
ImGui.SameLine()
|
|
elseif widget.type == "separator" then
|
|
ImGui.Separator()
|
|
elseif widget.type == "text" then
|
|
ImGui.Text(widget.label)
|
|
elseif widget.type == "checkbox" then
|
|
local changed
|
|
widget.state, changed = ImGui.Checkbox(widget.label, widget.state)
|
|
elseif widget.type == "input_int" then
|
|
widget.value, _ = ImGui.InputInt(widget.label, widget.value)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function addStoryButton(tab, label, callback)
|
|
initStoryTab(tab)
|
|
table.insert(story_widgets[tab], { type = "button", label = label, callback = callback })
|
|
end
|
|
|
|
function addStorySameline(tab)
|
|
initStoryTab(tab)
|
|
table.insert(story_widgets[tab], { type = "sameline" })
|
|
end
|
|
|
|
function addStorySeparator(tab)
|
|
initStoryTab(tab)
|
|
table.insert(story_widgets[tab], { type = "separator" })
|
|
end
|
|
|
|
function addStoryText(tab, label)
|
|
initStoryTab(tab)
|
|
table.insert(story_widgets[tab], { type = "text", label = label })
|
|
end
|
|
|
|
function addStoryCheckbox(tab, label, default_value)
|
|
initStoryTab(tab)
|
|
local checkbox_obj = {
|
|
type = "checkbox",
|
|
label = label,
|
|
state = default_value or false,
|
|
is_enabled = function(self)
|
|
return self.state
|
|
end,
|
|
set_enabled = function(self, val)
|
|
self.state = val
|
|
end,
|
|
}
|
|
table.insert(story_widgets[tab], checkbox_obj)
|
|
return checkbox_obj
|
|
end
|
|
|
|
function addStoryInputInt(tab, label, default_value)
|
|
initStoryTab(tab)
|
|
local input_obj = {
|
|
type = "input_int",
|
|
label = label,
|
|
value = default_value or 0,
|
|
get_value = function(self)
|
|
return self.value
|
|
end,
|
|
set_value = function(self, val)
|
|
self.value = val
|
|
end,
|
|
}
|
|
table.insert(story_widgets[tab], input_obj)
|
|
return input_obj
|
|
end
|
|
|
|
function makeStoryTab(tab)
|
|
local wrapped = {}
|
|
|
|
function wrapped:add_tab(name)
|
|
return makeStoryTab(tab:add_tab(name))
|
|
end
|
|
|
|
function wrapped:add_button(label, callback)
|
|
addStoryButton(tab, label, callback)
|
|
end
|
|
|
|
function wrapped:add_checkbox(label, default_value)
|
|
return addStoryCheckbox(tab, label, default_value)
|
|
end
|
|
|
|
function wrapped:add_input_int(label, default_value)
|
|
return addStoryInputInt(tab, label, default_value)
|
|
end
|
|
|
|
function wrapped:add_text(label)
|
|
addStoryText(tab, label)
|
|
end
|
|
|
|
function wrapped:add_separator()
|
|
addStorySeparator(tab)
|
|
end
|
|
|
|
function wrapped:add_sameline()
|
|
addStorySameline(tab)
|
|
end
|
|
|
|
function wrapped:add_imgui(callback)
|
|
tab:add_imgui(function()
|
|
if checkStoryMode() then
|
|
return
|
|
end
|
|
callback()
|
|
end)
|
|
end
|
|
|
|
return wrapped
|
|
end
|
|
|
|
local online_widgets = {}
|
|
|
|
function initOnlineTab(tab)
|
|
if not online_widgets[tab] then
|
|
online_widgets[tab] = {}
|
|
ensureOnlineGuard(tab) -- shared guard shows the warning
|
|
tab:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end -- silent check, no duplicate text
|
|
for _, widget in ipairs(online_widgets[tab]) do
|
|
if widget.type == "button" then
|
|
if ImGui.Button(widget.label) then
|
|
widget.callback()
|
|
end
|
|
elseif widget.type == "sameline" then
|
|
ImGui.SameLine()
|
|
elseif widget.type == "separator" then
|
|
ImGui.Separator()
|
|
elseif widget.type == "text" then
|
|
ImGui.Text(widget.label)
|
|
elseif widget.type == "checkbox" then
|
|
local changed
|
|
widget.state, changed = ImGui.Checkbox(widget.label, widget.state)
|
|
elseif widget.type == "input_int" then
|
|
widget.value, _ = ImGui.InputInt(widget.label, widget.value)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function addOnlineButton(tab, label, callback)
|
|
initOnlineTab(tab)
|
|
table.insert(online_widgets[tab], { type = "button", label = label, callback = callback })
|
|
end
|
|
|
|
function addOnlineSameline(tab)
|
|
initOnlineTab(tab)
|
|
table.insert(online_widgets[tab], { type = "sameline" })
|
|
end
|
|
|
|
function addOnlineSeparator(tab)
|
|
initOnlineTab(tab)
|
|
table.insert(online_widgets[tab], { type = "separator" })
|
|
end
|
|
|
|
function addOnlineText(tab, label)
|
|
initOnlineTab(tab)
|
|
table.insert(online_widgets[tab], { type = "text", label = label })
|
|
end
|
|
|
|
function addOnlineCheckbox(tab, label, default_value)
|
|
initOnlineTab(tab)
|
|
local checkbox_obj = {
|
|
type = "checkbox",
|
|
label = label,
|
|
state = default_value or false,
|
|
is_enabled = function(self)
|
|
return self.state
|
|
end,
|
|
set_enabled = function(self, val)
|
|
self.state = val
|
|
end,
|
|
}
|
|
table.insert(online_widgets[tab], checkbox_obj)
|
|
return checkbox_obj
|
|
end
|
|
|
|
function addOnlineInputInt(tab, label, default_value)
|
|
initOnlineTab(tab)
|
|
local input_obj = {
|
|
type = "input_int",
|
|
label = label,
|
|
value = default_value or 0,
|
|
get_value = function(self)
|
|
return self.value
|
|
end,
|
|
set_value = function(self, val)
|
|
self.value = val
|
|
end,
|
|
}
|
|
table.insert(online_widgets[tab], input_obj)
|
|
return input_obj
|
|
end
|
|
|
|
function makeOnlineTab(tab)
|
|
local wrapped = {}
|
|
|
|
function wrapped:add_tab(name)
|
|
return makeOnlineTab(tab:add_tab(name))
|
|
end
|
|
|
|
function wrapped:add_button(label, callback)
|
|
addOnlineButton(tab, label, callback)
|
|
end
|
|
|
|
function wrapped:add_checkbox(label, default_value)
|
|
return addOnlineCheckbox(tab, label, default_value)
|
|
end
|
|
|
|
function wrapped:add_input_int(label, default_value)
|
|
return addOnlineInputInt(tab, label, default_value)
|
|
end
|
|
|
|
function wrapped:add_text(label)
|
|
addOnlineText(tab, label)
|
|
end
|
|
|
|
function wrapped:add_separator()
|
|
addOnlineSeparator(tab)
|
|
end
|
|
|
|
function wrapped:add_sameline()
|
|
addOnlineSameline(tab)
|
|
end
|
|
|
|
function wrapped:add_imgui(callback)
|
|
ensureOnlineGuard(tab) -- shared guard shows the warning
|
|
tab:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end -- silent check, no duplicate text
|
|
callback()
|
|
end)
|
|
end
|
|
|
|
return wrapped
|
|
end
|
|
|
|
function CutsPresetter(global_start, global_finish, cut)
|
|
globals.set_int(GCg, cut)
|
|
for i = global_start, global_finish do
|
|
globals.set_int(i, cut)
|
|
end
|
|
end
|
|
|
|
function changeSession(session)
|
|
script.run_in_fiber(function(script)
|
|
globals.set_int(CSg1, session)
|
|
if session == -1 then
|
|
globals.set_int(CSg3, -1)
|
|
end
|
|
script:sleep(1000)
|
|
globals.set_int(CSg2, 1)
|
|
script:sleep(1000)
|
|
globals.set_int(CSg2, 0)
|
|
end)
|
|
end
|
|
|
|
local currentlevel = 0
|
|
local currentcrewlevel = 0
|
|
|
|
function stats_set_packed_bools(packed_bool_start, packed_bool_finish, bool)
|
|
for i = packed_bool_start, packed_bool_finish do
|
|
stats.set_packed_stat_bool(i, bool)
|
|
end
|
|
end
|
|
|
|
function globals_set_ints(global_start, global_finish, step, value)
|
|
for i = global_start, global_finish, step do
|
|
globals.set_int(i, value)
|
|
end
|
|
end
|
|
|
|
function null() end
|
|
|
|
--Required Scripts--
|
|
|
|
FMC = "fm_mission_controller"
|
|
FMMCL = "fmmc_launcher"
|
|
FMC2020 = "fm_mission_controller_2020"
|
|
HIP = "heist_island_planning"
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
L7NEG = gui.get_tab("Ultimate Menu 1.73 By L7NEG")
|
|
|
|
L7NEG:add_text(" Ultimate Menu 1.73 Legacy ")
|
|
L7NEG:add_text(" v3")
|
|
bypassOnlineCheckbox = L7NEG:add_checkbox("Bypass Online Check")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Self = makeOnlineTab(L7NEG:add_tab("Self Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
AGCT = Self:add_checkbox("Unlock Gender Change")
|
|
script.register_looped("UnlockGenderChange", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if AGCT:is_enabled() then
|
|
stats.set_int(MPX() .. "ALLOW_GENDER_CHANGE", 52)
|
|
else
|
|
stats.set_int(MPX() .. "ALLOW_GENDER_CHANGE", 0)
|
|
end
|
|
end)
|
|
|
|
RTPT = Self:add_checkbox("Remove Transaction Error")
|
|
script.register_looped("RemoveTransactionError", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if RTPT:is_enabled() then
|
|
globals.set_int(4516981, 0)
|
|
globals.set_int(4516982, 0)
|
|
globals.set_int(4516983, 0)
|
|
end
|
|
end)
|
|
|
|
Self:add_button("Remove Published And Players Job Liked To You", function()
|
|
stats.set_int("MPPLY_AWD_FM_CR_DM_MADE", 0)
|
|
stats.set_int("MPPLY_AWD_FM_CR_RACES_MADE", 0)
|
|
stats.set_int("MPPLY_NUM_CAPTURES_CREATED", 0)
|
|
stats.set_int("MPPLY_LTS_CREATED", 0)
|
|
stats.set_int("MPPLY_AWD_FM_CR_PLAYED_BY_PEEP", 0)
|
|
stats.set_int("MPPLY_AWD_FM_CR_MISSION_SCORE", 0)
|
|
stats.set_int("MPPLY_FM_MISSION_LIKES", 0)
|
|
end)
|
|
|
|
Self:add_button("Remove Orbital Cannon Cooldown", function()
|
|
stats.set_int(MPX() .. "ORBITAL_CANNON_COOLDOWN", 0)
|
|
end)
|
|
|
|
Self:add_button("Refill Nightclub Popularity", function()
|
|
stats.set_int(MPX() .. "CLUB_POPULARITY", 1000)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Self:add_button("Refill Inventory/Armour", function()
|
|
stats.set_int(MPX() .. "NO_BOUGHT_YUM_SNACKS", 30)
|
|
stats.set_int(MPX() .. "NO_BOUGHT_HEALTH_SNACKS", 15)
|
|
stats.set_int(MPX() .. "NO_BOUGHT_EPIC_SNACKS", 5)
|
|
stats.set_int(MPX() .. "NUMBER_OF_CHAMP_BOUGHT", 5)
|
|
stats.set_int(MPX() .. "NUMBER_OF_ORANGE_BOUGHT", 11)
|
|
stats.set_int(MPX() .. "NUMBER_OF_BOURGE_BOUGHT", 10)
|
|
stats.set_int(MPX() .. "NUMBER_OF_SPRUNK_BOUGHT", 10)
|
|
stats.set_int(MPX() .. "CIGARETTES_BOUGHT", 20)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_1_COUNT", 10)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_2_COUNT", 10)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_3_COUNT", 10)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_4_COUNT", 10)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_5_COUNT", 10)
|
|
stats.set_int(MPX() .. "BREATHING_APPAR_BOUGHT", 20)
|
|
end)
|
|
|
|
Self:add_button("Refill Inv/Armour x1000", function()
|
|
stats.set_int(MPX() .. "NO_BOUGHT_YUM_SNACKS", 1000)
|
|
stats.set_int(MPX() .. "NO_BOUGHT_HEALTH_SNACKS", 1000)
|
|
stats.set_int(MPX() .. "NO_BOUGHT_EPIC_SNACKS", 1000)
|
|
stats.set_int(MPX() .. "NUMBER_OF_CHAMP_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "NUMBER_OF_ORANGE_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "NUMBER_OF_BOURGE_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "NUMBER_OF_SPRUNK_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "CIGARETTES_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_1_COUNT", 1000)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_2_COUNT", 1000)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_3_COUNT", 1000)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_4_COUNT", 1000)
|
|
stats.set_int(MPX() .. "MP_CHAR_ARMOUR_5_COUNT", 1000)
|
|
stats.set_int(MPX() .. "BREATHING_APPAR_BOUGHT", 1000)
|
|
end)
|
|
|
|
Self:add_separator()
|
|
|
|
Self:add_text("Bad Sport!")
|
|
|
|
BadSportCombo = 0
|
|
Self:add_imgui(function()
|
|
ImGui.PushItemWidth(140)
|
|
BadSportCombo = ImGui.Combo("##BadSport", BadSportCombo, { "Remove", "Add" }, 2)
|
|
end)
|
|
|
|
function BadSport(State, Overall, Bool)
|
|
script.run_in_fiber(function(script)
|
|
gui.show_message("Bad Sport!", "Awaiting Session Change")
|
|
script:sleep(1000)
|
|
stats.set_int("MPPLY_BADSPORT_MESSAGE", State)
|
|
stats.set_int("MPPLY_BADSPORT_MESSAGE", State)
|
|
stats.set_float("MPPLY_OVERALL_BADSPORT", Overall)
|
|
stats.set_bool("MPPLY_CHAR_IS_BADSPORT", Bool)
|
|
globals.set_int(CSg1, 11)
|
|
globals.set_int(CSg2, 1)
|
|
script:sleep(300)
|
|
globals.set_int(CSg2, 0)
|
|
end)
|
|
end
|
|
|
|
Self:add_sameline()
|
|
|
|
Self:add_button("Execute", function()
|
|
if BadSportCombo == 0 then
|
|
BadSport(0, 0, false)
|
|
else
|
|
BadSport(1, 3000, true)
|
|
end
|
|
end)
|
|
|
|
StoryCharacters = makeStoryTab(L7NEG:add_tab("Story Mode"))
|
|
|
|
StoryCharacters:add_imgui(function()
|
|
local CurrentSPMoneyValue = stats.get_int(SPX() .. "TOTAL_CASH")
|
|
local used
|
|
CurrentSPMoneyValue, used = ImGui.SliderInt("Current Character Cash", CurrentSPMoneyValue, 1, 2147483646)
|
|
if used then
|
|
stats.set_int(SPX() .. "TOTAL_CASH", CurrentSPMoneyValue)
|
|
end
|
|
end)
|
|
|
|
StoryCharacters:add_separator()
|
|
|
|
StoryCharacters:add_button("Add 1 Mil Cash $", function()
|
|
stats.set_int(SPX() .. "TOTAL_CASH", stats.get_int(SPX() .. "TOTAL_CASH") + 1000000)
|
|
end)
|
|
|
|
StoryCharacters:add_button("Add 10 Mil Cash $", function()
|
|
stats.set_int(SPX() .. "TOTAL_CASH", stats.get_int(SPX() .. "TOTAL_CASH") + 10000000)
|
|
end)
|
|
|
|
StoryCharacters:add_button("Add 100 Mil Cash $", function()
|
|
stats.set_int(SPX() .. "TOTAL_CASH", stats.get_int(SPX() .. "TOTAL_CASH") + 100000000)
|
|
end)
|
|
|
|
StoryCharacters:add_button("Add 1 Bil Cash $", function()
|
|
stats.set_int(SPX() .. "TOTAL_CASH", stats.get_int(SPX() .. "TOTAL_CASH") + 1000000000)
|
|
end)
|
|
|
|
StoryCharacters:add_separator()
|
|
|
|
StoryCharacters:add_button("Max Current Character Skills", function()
|
|
stats.set_int(SPX() .. "SPECIAL_ABILITY_UNLOCKED", 100)
|
|
stats.set_float(SPX() .. "DIST_RUNNING", 175 * 100)
|
|
stats.set_int(SPX() .. "TIME_UNDERWATER", 30 * 60 * 1000 * 100)
|
|
stats.set_int(SPX() .. "UNARMED_HITS", 20 * 100)
|
|
stats.set_int(SPX() .. "NUMBER_NEAR_MISS", 50 * 100)
|
|
stats.set_int(SPX() .. "PLANE_LANDINGS", 10 * 100)
|
|
stats.set_int(SPX() .. "KILLS_STEALTH", 2 * 100)
|
|
stats.set_int(SPX() .. "HITS_MISSION", 40 * 100)
|
|
stats.set_int(SPX() .. "HITS_PEDS_VEHICLES", 80 * 100)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
RecoveryMenu = makeOnlineTab(L7NEG:add_tab("Recovery Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local rp = {
|
|
0,
|
|
800,
|
|
2100,
|
|
3800,
|
|
6100,
|
|
9500,
|
|
12500,
|
|
16000,
|
|
19800,
|
|
24000,
|
|
28500,
|
|
33400,
|
|
38700,
|
|
44200,
|
|
50200,
|
|
56400,
|
|
63000,
|
|
69900,
|
|
77100,
|
|
84700,
|
|
92500,
|
|
100700,
|
|
109200,
|
|
118000,
|
|
127100,
|
|
136500,
|
|
146200,
|
|
156200,
|
|
166500,
|
|
177100,
|
|
188000,
|
|
199200,
|
|
210700,
|
|
222400,
|
|
234500,
|
|
246800,
|
|
259400,
|
|
272300,
|
|
285500,
|
|
299000,
|
|
312700,
|
|
326800,
|
|
341000,
|
|
355600,
|
|
370500,
|
|
385600,
|
|
401000,
|
|
416600,
|
|
432600,
|
|
448800,
|
|
465200,
|
|
482000,
|
|
499000,
|
|
516300,
|
|
533800,
|
|
551600,
|
|
569600,
|
|
588000,
|
|
606500,
|
|
625400,
|
|
644500,
|
|
663800,
|
|
683400,
|
|
703300,
|
|
723400,
|
|
743800,
|
|
764500,
|
|
785400,
|
|
806500,
|
|
827900,
|
|
849600,
|
|
871500,
|
|
893600,
|
|
916000,
|
|
938700,
|
|
961600,
|
|
984700,
|
|
1008100,
|
|
1031800,
|
|
1055700,
|
|
1079800,
|
|
1104200,
|
|
1128800,
|
|
1153700,
|
|
1178800,
|
|
1204200,
|
|
1229800,
|
|
1255600,
|
|
1281700,
|
|
1308100,
|
|
1334600,
|
|
1361400,
|
|
1388500,
|
|
1415800,
|
|
1443300,
|
|
1471100,
|
|
1499100,
|
|
1527300,
|
|
}
|
|
|
|
function getRP(level)
|
|
if level < #rp then
|
|
return rp[level]
|
|
else
|
|
return math.floor(25 * (level ^ 2) + 23575 * level - 1023150)
|
|
end
|
|
end
|
|
|
|
RankSetter = RecoveryMenu:add_tab("Set Rank menu")
|
|
|
|
local rpLevelValue = 1
|
|
RankSetter:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Your current Rank is " .. stats.get_int(MPX() .. "CHAR_RANK_FM"))
|
|
ImGui.Separator()
|
|
|
|
rpLevelValue, _ = ImGui.InputInt("Rank", rpLevelValue)
|
|
|
|
if ImGui.Button("Set Rank") then
|
|
local rankValue = rpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your RP level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int(MPX() .. "CHAR_SET_RP_GIFT_ADMIN", getRP(rankValue))
|
|
stats.set_int("MPPLY_GLOBALXP", getRP(rankValue))
|
|
globals.set_int(CSg1, 11)
|
|
globals.set_int(CSg2, 1)
|
|
globals.set_int(CSg2, 0)
|
|
gui.show_message(
|
|
"Rank Correction",
|
|
"Your Rank was set to " .. rankValue .. ", Click change session For Your New Rank."
|
|
)
|
|
end
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CrewRankSetter = RecoveryMenu:add_tab("Set Crew Rank menu")
|
|
|
|
local crewRpLevelValue = 1
|
|
CrewRankSetter:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Your Current Crew Rank is " .. stats.get_int("MPPLY_CURRENT_CREW_RANK"))
|
|
ImGui.Separator()
|
|
|
|
crewRpLevelValue, _ = ImGui.InputInt("Rank##Crew", crewRpLevelValue)
|
|
|
|
if ImGui.Button("Set Slot 1 Crew Rank") then
|
|
local rankValue = crewRpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your Crew level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int("MPPLY_CREW_LOCAL_XP_0", getRP(rankValue))
|
|
gui.show_message("Crew Rank Setter", "Your Crew Slot 1 Rank was set to " .. rankValue .. ", .")
|
|
end
|
|
end
|
|
|
|
if ImGui.Button("Set Slot 2 Crew Rank") then
|
|
local rankValue = crewRpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your Crew level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int("MPPLY_CREW_LOCAL_XP_1", getRP(rankValue))
|
|
gui.show_message("Crew Rank Setter", "Your Crew Slot 2 Rank was set to " .. rankValue .. ", .")
|
|
end
|
|
end
|
|
|
|
if ImGui.Button("Set Slot 3 Crew Rank") then
|
|
local rankValue = crewRpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your Crew level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int("MPPLY_CREW_LOCAL_XP_2", getRP(rankValue))
|
|
gui.show_message("Crew Rank Setter", "Your Crew Slot 3 Rank was set to " .. rankValue .. ", .")
|
|
end
|
|
end
|
|
|
|
if ImGui.Button("Set Slot 4 Crew Rank") then
|
|
local rankValue = crewRpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your Crew level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int("MPPLY_CREW_LOCAL_XP_3", getRP(rankValue))
|
|
gui.show_message("Crew Rank Setter", "Your Crew Slot 4 Rank was set to " .. rankValue .. ", .")
|
|
end
|
|
end
|
|
|
|
if ImGui.Button("Set Slot 5 Crew Rank") then
|
|
local rankValue = crewRpLevelValue
|
|
if rankValue <= 0 or rankValue > 8000 then
|
|
gui.show_message(
|
|
"ERROR",
|
|
"Your Crew level " .. rankValue .. " cannot be set because it is outside the valid range (1-8000)."
|
|
)
|
|
else
|
|
stats.set_int("MPPLY_CREW_LOCAL_XP_4", getRP(rankValue))
|
|
gui.show_message("Crew Rank Setter", "Your Crew Slot 5 Rank was set to " .. rankValue .. ", .")
|
|
end
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
SkillsMenu = RecoveryMenu:add_tab("Skills Menu")
|
|
|
|
SkillsMenu:add_button("Max Current Skills", function()
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STAM", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STRN", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_LUNG", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_DRIV", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_FLY", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_SHO", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STL", 100)
|
|
gui.show_message("Skills", "Skills should've been maximized")
|
|
end)
|
|
|
|
SkillsMenu:add_button("Reset Skills", function()
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STAM", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STRN", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_LUNG", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_DRIV", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_FLY", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_SHO", 0)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STL", 0)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
OnlineServicesMenu = L7NEG:add_tab("Online Services Menu")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CasinoServicesMenu = makeOnlineTab(OnlineServicesMenu:add_tab("Casino Services Menu"))
|
|
|
|
ensureOnlineGuard(CasinoServicesMenu)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local cslots = "casino_slots"
|
|
slots_random_results_table = 1379
|
|
prize_wheel_win_state = 309
|
|
prize_wheel_prize = 14
|
|
prize_wheel_prize_state = 45
|
|
|
|
CasinoServicesMenu:add_text("Casino Chips")
|
|
chipsVal = 1800
|
|
CasinoServicesMenu:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
chipsVal, used = ImGui.SliderInt("Casino Chips Buy Limit", chipsVal, 1800, 2147483647)
|
|
if used then
|
|
globals.set_int(CCBL0, chipsVal)
|
|
globals.set_int(CCBL1, chipsVal)
|
|
end
|
|
end)
|
|
|
|
CasinoServicesMenu:add_button("Bypass Casino Cooldown", function()
|
|
stats.set_int("MPPLY_CASINO_CHIPS_WON_GD", 0)
|
|
stats.set_int("MPPLY_CASINO_CHIPS_WONTIM", 0)
|
|
stats.set_int("MPPLY_CASINO_GMBLNG_GD", 0)
|
|
stats.set_int("MPPLY_CASINO_BAN_TIME", 0)
|
|
stats.set_int("MPPLY_CASINO_CHIPS_PURTIM", 0)
|
|
stats.set_int("MPPLY_CASINO_CHIPS_PUR_GD", 0)
|
|
stats.set_int("MPPLY_CASINO_CHIPS_SOLD", 0)
|
|
stats.set_int("MPPLY_CASINO_CHIPS_SELTIM", 0)
|
|
end)
|
|
CasinoServicesMenu:add_text("Winning too much too quickly might get you banned, enable this at your own risk.")
|
|
|
|
CasinoServicesMenu:add_separator()
|
|
|
|
CasinoServicesMenu:add_text("Slots")
|
|
|
|
CasinoServicesMenu:add_button("Rig Slot Machines", function()
|
|
for i = 3, 196 do
|
|
if i ~= 67 and i ~= 132 then
|
|
locals.set_int(cslots, slots_random_results_table + i, 6)
|
|
end
|
|
end
|
|
end)
|
|
|
|
CasinoServicesMenu:add_button("Lose Slot Machines", function()
|
|
for i = 3, 196 do
|
|
if i ~= 67 and i ~= 132 then
|
|
locals.set_int(cslots, slots_random_results_table + i, 0)
|
|
end
|
|
end
|
|
end)
|
|
|
|
CasinoServicesMenu:add_separator()
|
|
CasinoServicesMenu:add_text("Lucky Wheel")
|
|
|
|
CasinoServicesMenu:add_button("Give Podium Vehicle", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 18)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_sameline()
|
|
CasinoServicesMenu:add_button("Give Mystery Prize", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 11)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_sameline()
|
|
CasinoServicesMenu:add_button("Give $50,000", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 19)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_sameline()
|
|
CasinoServicesMenu:add_button("Give 25,000 Chips", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 15)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_button("Give 15,000RP", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 17)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_sameline()
|
|
CasinoServicesMenu:add_button("Give Discount", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 4)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoServicesMenu:add_sameline()
|
|
CasinoServicesMenu:add_button("Give Clothing", function()
|
|
script.run_in_fiber(function(script)
|
|
if SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("casino_lucky_wheel")) ~= 0 then
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize, 8)
|
|
locals.set_int("casino_lucky_wheel", prize_wheel_win_state + prize_wheel_prize_state, 11)
|
|
end
|
|
end)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CollectiblesMenu = makeOnlineTab(L7NEG:add_tab("Collectibles"))
|
|
CollectiblesMenu:add_button("Collect All Action Figures", function()
|
|
for i = 0, 99 do
|
|
stats.set_bool(MPX() .. "PROP_FIGURE_" .. i, true)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect All Signal Jammers", function()
|
|
for i = 0, 49 do
|
|
stats.set_bool(MPX() .. "JAMMER_IDENTIFIED_" .. i, true)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect All Playing Cards", function()
|
|
for i = 0, 53 do
|
|
stats.set_bool(MPX() .. "CH_CARD_ID_" .. i, true)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect All Props", function()
|
|
for i = 0, 9 do
|
|
stats.set_bool(MPX() .. "PROP_HIDDEN_SOL_ID_" .. i, true)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect All Movie Props", function()
|
|
for i = 1, 10 do
|
|
stats.set_int(MPX() .. "MOVIE_PROP_COLLECTED_" .. i, -1)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect All LD Organics", function()
|
|
for i = 0, 99 do
|
|
stats.set_bool(MPX() .. "LD_ORGANIC_COLLECTED_" .. i, true)
|
|
end
|
|
end)
|
|
CollectiblesMenu:add_button("Collect Ghost Exposed", function()
|
|
for i = 0, 9 do
|
|
stats.set_bool(MPX() .. "GHOST_EXPOSED_" .. i, true)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
EventsMenu = makeOnlineTab(L7NEG:add_tab("Events Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
SnowToggleMenu = EventsMenu:add_tab("Snow Toggle Menu")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
SNOWCB = SnowToggleMenu:add_checkbox("Snow")
|
|
script.register_looped("snow", function(script)
|
|
script:yield()
|
|
if SNOWCB:is_enabled() then
|
|
globals.set_int(SNOW, 1)
|
|
else
|
|
globals.set_int(SNOW, 0)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
halloweatherMenu = EventsMenu:add_tab("Halloween Weather Toggle Menu")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
halloweenWeatherMenu = EventsMenu:add_tab("Halloween Weather Toggle Menu")
|
|
|
|
-- Animated rainbow
|
|
local rainbowOffset = 0
|
|
|
|
function rainbow_color(offset)
|
|
local time = os.clock() * 2
|
|
local r = math.sin(time + offset) * 0.5 + 0.5
|
|
local g = math.sin(time + offset + 2.094) * 0.5 + 0.5
|
|
local b = math.sin(time + offset + 4.188) * 0.5 + 0.5
|
|
return r, g, b, 1.0
|
|
end
|
|
|
|
script.register_looped("rainbow_anim", function(script)
|
|
rainbowOffset = rainbowOffset + 0.02
|
|
if rainbowOffset > 100 then
|
|
rainbowOffset = 0
|
|
end
|
|
script:yield(50)
|
|
end)
|
|
|
|
-- Info text
|
|
halloweenWeatherMenu:add_text("")
|
|
halloweenWeatherMenu:add_text("Halloween Weather Information")
|
|
halloweenWeatherMenu:add_text("")
|
|
halloweenWeatherMenu:add_text("In GTA Online, Halloween weather only works")
|
|
halloweenWeatherMenu:add_text("between 7:00 PM and 7:30 AM in-game time.")
|
|
halloweenWeatherMenu:add_text("")
|
|
halloweenWeatherMenu:add_text("Toggle below to force it on during that window.")
|
|
halloweenWeatherMenu:add_text("It will stay active as long as the toggle is ON.")
|
|
halloweenWeatherMenu:add_text("")
|
|
|
|
-- Current time display
|
|
halloweenWeatherMenu:add_imgui(function()
|
|
local hour = CLOCK.GET_CLOCK_HOURS()
|
|
local minute = CLOCK.GET_CLOCK_MINUTES()
|
|
local ampm = "AM"
|
|
local hour12 = hour
|
|
if hour >= 12 then
|
|
ampm = "PM"
|
|
if hour > 12 then
|
|
hour12 = hour - 12
|
|
end
|
|
end
|
|
if hour12 == 0 then
|
|
hour12 = 12
|
|
end
|
|
ImGui.TextColored(
|
|
1.0,
|
|
0.8,
|
|
0.0,
|
|
1.0,
|
|
"Current In-Game Time: " .. string.format("%02d:%02d %s", hour12, minute, ampm)
|
|
)
|
|
if hour >= 19 or hour < 7 then
|
|
ImGui.TextColored(0.0, 1.0, 0.0, 1.0, "Status: Halloween weather is available NOW")
|
|
else
|
|
ImGui.TextColored(1.0, 0.5, 0.0, 1.0, "Status: Halloween weather is NOT available")
|
|
ImGui.TextColored(1.0, 1.0, 1.0, 1.0, "Wait until 7:00 PM in-game time")
|
|
end
|
|
ImGui.Separator()
|
|
end)
|
|
|
|
HALLOWEATHERC = halloweenWeatherMenu:add_checkbox("Enable")
|
|
|
|
function show_notification(title, message)
|
|
if gui and gui.show_message then
|
|
gui.show_message(title, message)
|
|
elseif gui and gui.add_notification then
|
|
gui.add_notification(title .. ": " .. message)
|
|
else
|
|
print(title .. ": " .. message)
|
|
end
|
|
end
|
|
|
|
script.register_looped("halloweather_force", function(script)
|
|
script:yield()
|
|
if HALLOWEATHERC:is_enabled() then
|
|
globals.set_int(halloweatherAddress, 1)
|
|
else
|
|
globals.set_int(halloweatherAddress, 0)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
-- Create the Trick or Treat Menu tab
|
|
trickOrTreatMenu = EventsMenu:add_tab("Trick or Treat Menu")
|
|
|
|
-- Rainbow color function
|
|
function rainbow_color(offset)
|
|
local time = os.clock() * 2
|
|
local r = math.sin(time + offset) * 0.5 + 0.5
|
|
local g = math.sin(time + offset + 2.094) * 0.5 + 0.5
|
|
local b = math.sin(time + offset + 4.188) * 0.5 + 0.5
|
|
return r, g, b, 1.0
|
|
end
|
|
|
|
-- Help marker function with rainbow colored icon
|
|
function trick_help_marker(text)
|
|
ImGui.SameLine()
|
|
local r, g, b, a = rainbow_color(0)
|
|
ImGui.PushStyleColor(ImGuiCol.Text, r, g, b, a)
|
|
ImGui.Text("[?]")
|
|
ImGui.PopStyleColor()
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.BeginTooltip()
|
|
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 35)
|
|
ImGui.TextUnformatted(text)
|
|
ImGui.PopTextWrapPos()
|
|
ImGui.EndTooltip()
|
|
end
|
|
end
|
|
|
|
-- Add Trick or Treat checkbox with help marker
|
|
TRICKORTREATCB = trickOrTreatMenu:add_checkbox("Trick or Treat")
|
|
|
|
-- Add help marker for the checkbox
|
|
trickOrTreatMenu:add_imgui(function()
|
|
trick_help_marker(
|
|
"Enables the Trick or Treat event. This allows you to collect Halloween pumpkins from the Halloween event."
|
|
)
|
|
end)
|
|
|
|
script.register_looped("trick_or_treat", function(script)
|
|
script:yield()
|
|
if TRICKORTREATCB:is_enabled() then
|
|
globals.set_int(TRICK_OR_TREAT, 1)
|
|
else
|
|
globals.set_int(TRICK_OR_TREAT, 0)
|
|
end
|
|
end)
|
|
|
|
-- Jack o'Lantern locations array (200 locations)
|
|
jackolantern_locations = {
|
|
vec3:new(1434.581177, -1494.808960, 61.924484),
|
|
vec3:new(1318.091797, -1557.906860, 49.406536),
|
|
vec3:new(1297.748535, -1621.982666, 52.924953),
|
|
vec3:new(1312.340576, -1701.004272, 56.537983),
|
|
vec3:new(1256.791260, -1760.271851, 47.959789),
|
|
vec3:new(1204.294312, -1672.812622, 41.058277),
|
|
vec3:new(1232.604492, -1593.003418, 52.067909),
|
|
vec3:new(1152.968140, -1529.164673, 33.691978),
|
|
vec3:new(1183.517090, -1461.732788, 33.594597),
|
|
vec3:new(1210.140625, -1390.762085, 34.076641),
|
|
vec3:new(411.362427, -1485.312622, 28.570503),
|
|
vec3:new(323.141052, -1759.944092, 28.016262),
|
|
vec3:new(428.983459, -1723.205811, 27.929178),
|
|
vec3:new(495.846832, -1817.259521, 27.187927),
|
|
vec3:new(387.837158, -1883.815430, 24.304468),
|
|
vec3:new(326.185211, -1947.658691, 23.467230),
|
|
vec3:new(379.337311, -2069.736328, 19.941431),
|
|
vec3:new(294.090973, -2098.108154, 15.802926),
|
|
vec3:new(221.574402, -2036.115112, 16.712660),
|
|
vec3:new(180.028915, -1930.020508, 19.712641),
|
|
vec3:new(150.242844, -1868.382568, 22.930975),
|
|
vec3:new(25.318865, -1894.664185, 21.286211),
|
|
vec3:new(-18.668180, -1855.332764, 23.662672),
|
|
vec3:new(-79.454300, -1641.520874, 28.009012),
|
|
vec3:new(-158.293228, -1680.115479, 35.666103),
|
|
vec3:new(-193.209412, -1609.052246, 32.701607),
|
|
vec3:new(-63.751331, -1452.771973, 30.823833),
|
|
vec3:new(-123.541191, -1490.525513, 32.473259),
|
|
vec3:new(-223.600693, -1500.161133, 30.692902),
|
|
vec3:new(-294.518921, -1332.482910, 29.970270),
|
|
vec3:new(1014.117920, -423.848389, 63.675259),
|
|
vec3:new(1266.007446, -428.332397, 68.079376),
|
|
vec3:new(1370.628906, -558.052185, 73.039597),
|
|
vec3:new(1324.806519, -580.172913, 71.912575),
|
|
vec3:new(1204.557251, -620.731323, 64.821854),
|
|
vec3:new(967.759155, -547.430298, 58.004089),
|
|
vec3:new(961.077148, -594.268860, 58.192711),
|
|
vec3:new(999.061157, -727.578979, 56.227200),
|
|
vec3:new(1143.774292, -981.787659, 44.845215),
|
|
vec3:new(845.798950, -1019.603210, 26.234652),
|
|
vec3:new(805.100342, -1075.361694, 27.369886),
|
|
vec3:new(480.726227, -975.737000, 26.683889),
|
|
vec3:new(389.172333, -972.175659, 28.140848),
|
|
vec3:new(360.894836, -1070.573853, 28.238062),
|
|
vec3:new(244.050507, -1071.695679, 27.986931),
|
|
vec3:new(264.044403, -1028.192871, 27.911451),
|
|
vec3:new(75.252281, -1026.460449, 28.174519),
|
|
vec3:new(-16.975662, -977.996521, 28.062405),
|
|
vec3:new(66.998047, -961.704041, 28.057564),
|
|
vec3:new(130.983887, -567.115417, 42.440754),
|
|
vec3:new(-191.763809, -764.868286, 29.154016),
|
|
vec3:new(-232.445236, -911.110535, 31.010803),
|
|
vec3:new(-552.145813, -815.285950, 29.390755),
|
|
vec3:new(-731.544312, -676.678467, 28.973450),
|
|
vec3:new(-1025.704224, -921.141296, 3.741233),
|
|
vec3:new(-962.515381, -942.297180, 0.845313),
|
|
vec3:new(-841.248718, -1206.873657, 5.163064),
|
|
vec3:new(-969.639954, -1094.212158, 0.8505334),
|
|
vec3:new(-1075.960327, -1026.114990, 3.245211),
|
|
vec3:new(-1150.731567, -992.529785, 0.850194),
|
|
vec3:new(-1125.693848, -1090.169067, 0.850338),
|
|
vec3:new(-1207.256836, -1136.133057, 6.418141),
|
|
vec3:new(-1185.031738, -1560.465698, 3.061427),
|
|
vec3:new(-1337.111938, -1282.580566, 3.536002),
|
|
vec3:new(-1291.436401, -1115.384399, 5.380210),
|
|
vec3:new(-1505.406006, -938.584167, 8.059047),
|
|
vec3:new(-1581.442627, -951.199219, 11.717396),
|
|
vec3:new(-1187.069458, -564.099121, 26.317165),
|
|
vec3:new(-1340.669434, -408.527100, 35.059433),
|
|
vec3:new(-1534.179565, -425.168396, 34.291149),
|
|
vec3:new(-1977.575928, -534.048889, 10.412008),
|
|
vec3:new(-1886.251953, -367.071625, 47.764736),
|
|
vec3:new(-1686.079102, -292.055634, 50.593338),
|
|
vec3:new(-1729.297974, -191.002090, 57.047939),
|
|
vec3:new(-1549.251831, -89.285751, 53.629169),
|
|
vec3:new(-1465.009766, -30.447273, 53.408463),
|
|
vec3:new(-1473.790649, 62.652233, 51.955498),
|
|
vec3:new(-1565.397949, 41.662537, 57.540710),
|
|
vec3:new(-1539.457520, 128.534393, 55.480267),
|
|
vec3:new(-1649.843994, 148.785080, 60.872307),
|
|
vec3:new(749.970276, 220.890854, 85.730003),
|
|
vec3:new(348.487152, 442.021454, 146.400879),
|
|
vec3:new(327.944977, 536.017639, 152.462311),
|
|
vec3:new(215.329636, 621.132812, 186.248245),
|
|
vec3:new(7.990458, 544.689697, 174.240616),
|
|
vec3:new(56.627422, 454.376404, 145.430801),
|
|
vec3:new(169.621765, 488.189667, 141.616394),
|
|
vec3:new(125.038742, 64.603813, 78.442604),
|
|
vec3:new(85.067253, -93.484367, 59.143009),
|
|
vec3:new(14.717505, -5.760206, 68.813988),
|
|
vec3:new(-436.087738, -67.952057, 41.706535),
|
|
vec3:new(-373.813538, 44.969456, 53.129925),
|
|
vec3:new(-175.594559, 89.340088, 68.998276),
|
|
vec3:new(-565.616150, 168.983398, 65.538330),
|
|
vec3:new(-598.232544, 275.290619, 80.810440),
|
|
vec3:new(-146.931183, 288.287903, 95.503975),
|
|
vec3:new(-87.271278, 425.587616, 111.912392),
|
|
vec3:new(-252.625534, 397.004730, 109.946564),
|
|
vec3:new(-369.354126, 347.407196, 108.114899),
|
|
vec3:new(-573.230042, 402.716095, 99.368492),
|
|
vec3:new(-584.765686, 496.261749, 105.802574),
|
|
vec3:new(-352.459045, 469.861053, 111.272270),
|
|
vec3:new(-178.125549, 503.593872, 135.551987),
|
|
vec3:new(-136.874252, 595.974915, 203.303223),
|
|
vec3:new(-247.243790, 619.652405, 186.510178),
|
|
vec3:new(-346.281616, 625.225159, 170.056915),
|
|
vec3:new(-445.562164, 684.065796, 151.650650),
|
|
vec3:new(-491.010986, 740.993591, 161.535828),
|
|
vec3:new(-579.493774, 736.161072, 182.526932),
|
|
vec3:new(-549.261047, 827.965210, 196.220291),
|
|
vec3:new(-149.519211, 995.026306, 235.537567),
|
|
vec3:new(-821.168213, 814.200195, 199.545700),
|
|
vec3:new(-703.407898, 591.646423, 140.869995),
|
|
vec3:new(-716.630310, 490.652618, 107.965691),
|
|
vec3:new(-821.048706, 268.837524, 84.892586),
|
|
vec3:new(-863.629517, 387.783356, 86.129707),
|
|
vec3:new(-882.328552, 518.721924, 91.141586),
|
|
vec3:new(-937.415100, 589.408447, 100.195312),
|
|
vec3:new(-887.551086, 701.678711, 149.417191),
|
|
vec3:new(-1020.178894, 716.203674, 162.686401),
|
|
vec3:new(-1166.027588, 729.194946, 154.211594),
|
|
vec3:new(-1291.383911, 648.885010, 140.199905),
|
|
vec3:new(-1124.626709, 575.734802, 103.055000),
|
|
vec3:new(-1024.506104, 502.218384, 79.255287),
|
|
vec3:new(-966.512451, 434.859009, 78.671555),
|
|
vec3:new(-1023.245361, 359.682251, 70.056602),
|
|
vec3:new(-1130.484985, 391.969757, 69.441147),
|
|
vec3:new(-1178.350708, 290.212646, 68.198738),
|
|
vec3:new(-1215.850708, 460.558350, 90.553658),
|
|
vec3:new(-1312.920288, 452.977936, 97.879066),
|
|
vec3:new(-1499.075195, 520.862732, 116.972198),
|
|
vec3:new(-1813.917847, 344.151672, 87.253471),
|
|
vec3:new(-1961.207275, 249.182205, 83.922012),
|
|
vec3:new(-2005.261841, 447.706787, 100.982285),
|
|
vec3:new(-1974.006348, 627.074402, 121.236298),
|
|
vec3:new(-1523.962524, 854.170227, 180.294525),
|
|
vec3:new(-3084.227539, 222.587875, 12.690159),
|
|
vec3:new(-3034.164795, 492.005524, 5.467818),
|
|
vec3:new(-2999.262695, 694.002991, 24.150764),
|
|
vec3:new(-3234.858887, 934.295593, 15.850909),
|
|
vec3:new(-3202.787109, 1151.574829, 8.355104),
|
|
vec3:new(-3180.688232, 1291.906372, 13.120326),
|
|
vec3:new(-2551.712402, 1912.145386, 167.768417),
|
|
vec3:new(-1872.429932, 2029.911011, 138.037140),
|
|
vec3:new(-1112.209106, 2686.990479, 17.318859),
|
|
vec3:new(-262.114075, 2194.963135, 129.098648),
|
|
vec3:new(-267.503265, 2626.278564, 60.810768),
|
|
vec3:new(-462.839874, 2856.521973, 33.321205),
|
|
vec3:new(-327.331085, 2820.612305, 57.069534),
|
|
vec3:new(-289.165649, 2837.083496, 54.012520),
|
|
vec3:new(-38.089405, 2866.223145, 57.879650),
|
|
vec3:new(200.134537, 3031.658691, 42.007084),
|
|
vec3:new(245.562866, 3167.225342, 41.543571),
|
|
vec3:new(36.286015, 3668.123779, 38.331520),
|
|
vec3:new(92.681717, 3741.556885, 38.248653),
|
|
vec3:new(439.687134, 3574.860352, 31.938606),
|
|
vec3:new(470.906616, 2611.910889, 41.949657),
|
|
vec3:new(561.570679, 2599.967529, 41.738277),
|
|
vec3:new(734.955811, 2523.633057, 71.924843),
|
|
vec3:new(721.653381, 2332.206543, 50.450310),
|
|
vec3:new(790.147888, 2182.331055, 50.818352),
|
|
vec3:new(841.859131, 2114.335449, 51.001461),
|
|
vec3:new(1352.933716, 1147.012451, 112.459045),
|
|
vec3:new(1529.204956, 1728.803955, 108.681503),
|
|
vec3:new(1531.197266, 2219.515381, 75.833237),
|
|
vec3:new(1421.380981, 3666.921387, 38.428417),
|
|
vec3:new(1664.273926, 3824.378662, 33.593254),
|
|
vec3:new(1762.277954, 3872.228516, 33.132488),
|
|
vec3:new(1925.091553, 3917.555664, 31.198433),
|
|
vec3:new(1914.172241, 3825.941162, 31.136677),
|
|
vec3:new(1773.624268, 3740.501953, 33.356308),
|
|
vec3:new(1856.470215, 3681.635254, 32.958481),
|
|
vec3:new(1999.776611, 3776.771484, 30.880787),
|
|
vec3:new(1991.811035, 3057.610840, 45.760735),
|
|
vec3:new(2168.261475, 3380.211670, 45.134487),
|
|
vec3:new(2178.444824, 3499.422119, 44.197418),
|
|
vec3:new(2590.153320, 3169.243896, 49.646759),
|
|
vec3:new(2620.696533, 3282.523926, 53.951210),
|
|
vec3:new(2985.502930, 3484.042236, 70.081779),
|
|
vec3:new(2420.516602, 4020.245605, 35.535358),
|
|
vec3:new(2638.094482, 4247.965332, 43.502384),
|
|
vec3:new(3689.367188, 4563.361328, 23.881674),
|
|
vec3:new(3315.741455, 5172.885254, 17.129362),
|
|
vec3:new(2234.621094, 5609.286133, 53.348442),
|
|
vec3:new(2451.511963, 4961.811035, 44.201416),
|
|
vec3:new(1967.214966, 4621.931641, 39.482288),
|
|
vec3:new(1664.723511, 4773.646973, 40.687389),
|
|
vec3:new(1723.661011, 4642.196777, 42.564026),
|
|
vec3:new(1311.947632, 4361.838867, 39.552631),
|
|
vec3:new(724.281311, 4185.006348, 39.409229),
|
|
vec3:new(-771.858582, 5511.423340, 33.605061),
|
|
vec3:new(-342.642487, 6163.851074, 30.190174),
|
|
vec3:new(-402.742828, 6314.299805, 27.649906),
|
|
vec3:new(-306.322205, 6331.539551, 31.189320),
|
|
vec3:new(-245.945114, 6410.604492, 29.897928),
|
|
vec3:new(-105.598267, 6313.783691, 30.190372),
|
|
vec3:new(-112.187599, 6460.697266, 30.168459),
|
|
vec3:new(-50.652882, 6582.884766, 29.876881),
|
|
vec3:new(54.402122, 6642.595215, 30.223076),
|
|
vec3:new(1706.896240, 6422.760254, 31.335125),
|
|
}
|
|
|
|
-- Jack o'Lantern location names (200 locations)
|
|
jackolantern_names = {}
|
|
for i = 1, 200 do
|
|
jackolantern_names[i] = "Location " .. string.format("%03d", i)
|
|
end
|
|
|
|
-- Variables
|
|
jackolantern_selected_loc = 0
|
|
|
|
-- Add ImGui for Jack o'Lantern teleports
|
|
trickOrTreatMenu:add_imgui(function()
|
|
ImGui.Separator()
|
|
ImGui.Text("Jack o'Lantern Teleports")
|
|
trick_help_marker(
|
|
"Teleport to any of the 200 Jack o'Lantern collectible locations. These are Halloween pumpkins that spawn during the event."
|
|
)
|
|
ImGui.Separator()
|
|
|
|
ImGui.Text("Select Jack o'Lantern Location:")
|
|
trick_help_marker("Choose a location from the dropdown list to teleport to.")
|
|
|
|
ImGui.SetNextItemWidth(265)
|
|
jackolantern_selected_loc =
|
|
ImGui.Combo("##jackolantern_selected_loc", jackolantern_selected_loc, jackolantern_names, 200)
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Teleport to Location") then
|
|
script.run_in_fiber(function()
|
|
local coords = jackolantern_locations[jackolantern_selected_loc + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
trick_help_marker("Teleports you to the selected Jack o'Lantern location.")
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Quick Teleport Buttons (1-20):")
|
|
trick_help_marker("Quickly teleport to any of the first 20 Jack o'Lantern locations.")
|
|
|
|
-- Quick teleport buttons in rows of 5 (first 20 locations)
|
|
for i = 0, 19 do
|
|
if i % 5 == 0 then
|
|
ImGui.Text(" ")
|
|
end
|
|
|
|
if ImGui.Button(jackolantern_names[i + 1]) then
|
|
script.run_in_fiber(function()
|
|
local coords = jackolantern_locations[i + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
|
|
if i % 5 ~= 4 and i < 19 then
|
|
ImGui.SameLine()
|
|
end
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Quick Teleport Buttons (21-40):")
|
|
trick_help_marker("Quickly teleport to any of the next 20 Jack o'Lantern locations.")
|
|
|
|
-- Quick teleport buttons in rows of 5 (next 20 locations)
|
|
for i = 20, 39 do
|
|
if i % 5 == 0 then
|
|
ImGui.Text(" ")
|
|
end
|
|
|
|
if ImGui.Button(jackolantern_names[i + 1]) then
|
|
script.run_in_fiber(function()
|
|
local coords = jackolantern_locations[i + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
|
|
if i % 5 ~= 4 and i < 39 then
|
|
ImGui.SameLine()
|
|
end
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Total Jack o'Lantern Locations: 200")
|
|
|
|
if ImGui.Button("Teleport to Random Jack o'Lantern") then
|
|
script.run_in_fiber(function()
|
|
local random_index = math.random(1, 200)
|
|
local coords = jackolantern_locations[random_index]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
gui.show_message("Jack o'Lantern", "Teleported to " .. jackolantern_names[random_index])
|
|
end)
|
|
end
|
|
trick_help_marker("Teleports you to a random Jack o'Lantern location. Great for collecting them all!")
|
|
end)
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
snowmenMenu = EventsMenu:add_tab("Snowmen Collectibles")
|
|
|
|
-- Snowman locations array
|
|
snowmen_locations = {
|
|
vec3:new(-955.5352, -782.4186, 15.925326),
|
|
vec3:new(-819.9067, 165.35524, 71.26295),
|
|
vec3:new(-247.92003, -1561.2175, 32.22973),
|
|
vec3:new(901.3996, -288.05026, 65.643715),
|
|
vec3:new(1275.6772, -642.3789, 68.208786),
|
|
vec3:new(1993.1008, 3829.6396, 32.167336),
|
|
vec3:new(-375.47916, 6230.158, 31.490055),
|
|
vec3:new(-1414.4647, 5094.9272, 60.674263),
|
|
vec3:new(-1946.0231, 594.93756, 119.79223),
|
|
vec3:new(-1100.889, -1401.0138, 5.215467),
|
|
vec3:new(-780.418, 877.2859, 203.18001),
|
|
vec3:new(-455.12027, 1130.5625, 325.89175),
|
|
vec3:new(221.46722, -107.01075, 69.763985),
|
|
vec3:new(1560.3787, 6447.053, 23.9866),
|
|
vec3:new(3301.7886, 5149.8853, 18.34274),
|
|
vec3:new(1703.0568, 4671.928, 43.15301),
|
|
vec3:new(224.9161, 3107.3345, 42.18394),
|
|
vec3:new(2360.0037, 2522.7166, 46.66731),
|
|
vec3:new(1510.8555, 1725.0353, 109.89355),
|
|
vec3:new(-48.96374, 1964.4028, 189.87181),
|
|
vec3:new(-1516.2083, 2140.2168, 56.11924),
|
|
vec3:new(-2826.2356, 1424.6211, 100.706116),
|
|
vec3:new(-2957.531, 723.6389, 28.792404),
|
|
vec3:new(1341.4302, -1583.5093, 54.135414),
|
|
vec3:new(178.00232, -895.9712, 30.69326),
|
|
}
|
|
|
|
-- Snowman location names (numbered 01-25)
|
|
snowmen_names = {}
|
|
for i = 1, 25 do
|
|
snowmen_names[i] = "Location " .. string.format("%02d", i)
|
|
end
|
|
|
|
-- Variables
|
|
snowmen_selected_loc = 0
|
|
|
|
-- Rainbow color function
|
|
function rainbow_color(offset)
|
|
local time = os.clock() * 2
|
|
local r = math.sin(time + offset) * 0.5 + 0.5
|
|
local g = math.sin(time + offset + 2.094) * 0.5 + 0.5
|
|
local b = math.sin(time + offset + 4.188) * 0.5 + 0.5
|
|
return r, g, b, 1.0
|
|
end
|
|
|
|
-- Help marker function with rainbow colored icon
|
|
function snowmen_help_marker(text)
|
|
ImGui.SameLine()
|
|
local r, g, b, a = rainbow_color(0)
|
|
ImGui.PushStyleColor(ImGuiCol.Text, r, g, b, a)
|
|
ImGui.Text("[?]")
|
|
ImGui.PopStyleColor()
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.BeginTooltip()
|
|
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 35)
|
|
ImGui.TextUnformatted(text)
|
|
ImGui.PopTextWrapPos()
|
|
ImGui.EndTooltip()
|
|
end
|
|
end
|
|
|
|
-- Add the checkbox for enabling snowmen collectibles
|
|
SNOWMENCB = snowmenMenu:add_checkbox("Enable Snowmen Collectibles")
|
|
|
|
-- Add help marker for the checkbox
|
|
snowmenMenu:add_imgui(function()
|
|
snowmen_help_marker(
|
|
"Enables the Snowmen Collectibles event. This allows you to collect snowmen by blowing them up or driving your car through them during the winter event."
|
|
)
|
|
end)
|
|
|
|
script.register_looped("snowmen_collectibles", function(script)
|
|
script:yield()
|
|
|
|
if SNOWMENCB:is_enabled() then
|
|
globals.set_int(SNOWMEN_COLLECTIBLES, 1)
|
|
else
|
|
globals.set_int(SNOWMEN_COLLECTIBLES, 0)
|
|
end
|
|
end)
|
|
|
|
-- Add ImGui for the snowman teleports
|
|
snowmenMenu:add_imgui(function()
|
|
ImGui.Separator()
|
|
ImGui.Text("Snowman Teleports")
|
|
snowmen_help_marker(
|
|
"Teleport to any of the 25 Snowman collectible locations. These are snowmen that spawn during the winter event. You can destroy them by blowing them up or driving through them with your vehicle."
|
|
)
|
|
ImGui.Separator()
|
|
|
|
ImGui.Text("Select Snowman Location:")
|
|
snowmen_help_marker("Choose a location from the dropdown list to teleport to.")
|
|
|
|
ImGui.SetNextItemWidth(265)
|
|
snowmen_selected_loc = ImGui.Combo("##snowmen_selected_loc", snowmen_selected_loc, snowmen_names, 25)
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Teleport to Location") then
|
|
script.run_in_fiber(function()
|
|
local coords = snowmen_locations[snowmen_selected_loc + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
snowmen_help_marker("Teleports you to the selected Snowman location.")
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Quick Teleport Buttons:")
|
|
snowmen_help_marker(
|
|
"Quickly teleport to any Snowman location to destroy them by blowing them up or driving through them."
|
|
)
|
|
|
|
-- Add quick teleport buttons in rows of 5
|
|
for i = 0, 24 do
|
|
if i % 5 == 0 then
|
|
ImGui.Text(" ")
|
|
end
|
|
|
|
if ImGui.Button(snowmen_names[i + 1]) then
|
|
script.run_in_fiber(function()
|
|
local coords = snowmen_locations[i + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
|
|
if i % 5 ~= 4 and i < 24 then
|
|
ImGui.SameLine()
|
|
end
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Total Snowman Locations: 25")
|
|
|
|
if ImGui.Button("Teleport to Random Snowman") then
|
|
script.run_in_fiber(function()
|
|
local random_index = math.random(1, 25)
|
|
local coords = snowmen_locations[random_index]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
gui.show_message("Snowman", "Teleported to " .. snowmen_names[random_index])
|
|
end)
|
|
end
|
|
snowmen_help_marker(
|
|
"Teleports you to a random Snowman location. Blow them up or drive through them to collect them all!"
|
|
)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
YetiHuntMenu = EventsMenu:add_tab("Yeti Hunt Menu")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
-- Rainbow color function
|
|
function yeti_rainbow_color(offset)
|
|
local time = os.clock() * 2
|
|
local r = math.sin(time + offset) * 0.5 + 0.5
|
|
local g = math.sin(time + offset + 2.094) * 0.5 + 0.5
|
|
local b = math.sin(time + offset + 4.188) * 0.5 + 0.5
|
|
return r, g, b, 1.0
|
|
end
|
|
|
|
-- Help marker function with rainbow colored icon
|
|
function yeti_help_marker(text)
|
|
ImGui.SameLine()
|
|
local r, g, b, a = yeti_rainbow_color(0)
|
|
ImGui.PushStyleColor(ImGuiCol.Text, r, g, b, a)
|
|
ImGui.Text("[?]")
|
|
ImGui.PopStyleColor()
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.BeginTooltip()
|
|
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 35)
|
|
ImGui.TextUnformatted(text)
|
|
ImGui.PopTextWrapPos()
|
|
ImGui.EndTooltip()
|
|
end
|
|
end
|
|
|
|
-- Yeti Hunt locations array
|
|
yeti_locations = {
|
|
vec3:new(-1562.69, 4699.04, 50.426),
|
|
vec3:new(-1359.869, 4733.429, 46.919),
|
|
vec3:new(-1715.398, 4501.203, 0.096),
|
|
vec3:new(-1282.18, 4487.826, 12.643),
|
|
vec3:new(-1569.665, 4478.485, 20.215),
|
|
vec3:new(-1345.828, 4838.062, 137.522),
|
|
vec3:new(-1507.88, 4730.23, 45.54),
|
|
}
|
|
|
|
-- Yeti location names
|
|
yeti_names = {
|
|
"Clue Location 1",
|
|
"Clue Location 2",
|
|
"Clue Location 3",
|
|
"Clue Location 4",
|
|
"Clue Location 5",
|
|
"Yeti Fight Location (1)",
|
|
"Yeti Fight Location (2)",
|
|
}
|
|
|
|
-- Variables
|
|
yeti_selected_loc = 0
|
|
|
|
-- Add Yeti Hunt checkbox with help marker
|
|
YETIHUNTCB = YetiHuntMenu:add_checkbox("Enable Yeti Hunt Event")
|
|
|
|
-- Add help marker for the checkbox
|
|
YetiHuntMenu:add_imgui(function()
|
|
yeti_help_marker(
|
|
"Enables the Yeti Hunt event. This allows you to hunt the Yeti and collect clues during the event."
|
|
)
|
|
end)
|
|
|
|
script.register_looped("yeti_hunt", function(script)
|
|
script:yield()
|
|
if YETIHUNTCB:is_enabled() then
|
|
globals.set_int(yetihuntAddress, 1) -- enable the event
|
|
else
|
|
globals.set_int(yetihuntAddress, 0)
|
|
end
|
|
end)
|
|
|
|
-- Add ImGui for Yeti Hunt teleports
|
|
YetiHuntMenu:add_imgui(function()
|
|
ImGui.Separator()
|
|
ImGui.Text("Yeti Hunt Teleports")
|
|
yeti_help_marker("Teleport to any of the Yeti Hunt clue locations or the final Yeti fight locations.")
|
|
ImGui.Separator()
|
|
|
|
ImGui.Text("Select Yeti Location:")
|
|
yeti_help_marker("Choose a location from the dropdown list to teleport to.")
|
|
|
|
ImGui.SetNextItemWidth(265)
|
|
yeti_selected_loc = ImGui.Combo("##yeti_selected_loc", yeti_selected_loc, yeti_names, 7)
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Teleport to Location") then
|
|
script.run_in_fiber(function()
|
|
local coords = yeti_locations[yeti_selected_loc + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
yeti_help_marker("Teleports you to the selected Yeti location.")
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Quick Teleport Buttons:")
|
|
yeti_help_marker("Quickly teleport to any Yeti clue location or the fight locations.")
|
|
|
|
-- Add quick teleport buttons in rows of 3 (all 7 locations)
|
|
for i = 0, 6 do
|
|
if i % 3 == 0 then
|
|
ImGui.Text(" ")
|
|
end
|
|
|
|
if ImGui.Button(yeti_names[i + 1]) then
|
|
script.run_in_fiber(function()
|
|
local coords = yeti_locations[i + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
|
|
if i % 3 ~= 2 and i < 6 then
|
|
ImGui.SameLine()
|
|
end
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Total Yeti Locations: 7 (5 Clues + 2 Fight)")
|
|
|
|
if ImGui.Button("Teleport to Random Yeti Location") then
|
|
script.run_in_fiber(function()
|
|
local random_index = math.random(1, 7)
|
|
local coords = yeti_locations[random_index]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
gui.show_message("Yeti Hunt", "Teleported to " .. yeti_names[random_index])
|
|
end)
|
|
end
|
|
yeti_help_marker("Teleports you to a random Yeti location. Find all the clues to hunt the Yeti!")
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
AUM = RecoveryMenu:add_tab("Awards Unlocker Menu")
|
|
|
|
AUM:add_button("Victory", function()
|
|
stats.set_int(MPX() .. "AWD_FM_DM_WINS", 50)
|
|
stats.set_int(MPX() .. "AWD_FM_TDM_WINS", 50)
|
|
stats.set_int(MPX() .. "AWD_FM_TDM_MVP", 50)
|
|
stats.set_int(MPX() .. "AWD_RACES_WON", 50)
|
|
stats.set_int(MPX() .. "AWD_FMWINAIRRACE", 25)
|
|
stats.set_int(MPX() .. "AWD_FMWINSEARACE", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_GTA_RACES_WON", 50)
|
|
stats.set_bool(MPX() .. "AWD_FMKILL3ANDWINGTARACE", true)
|
|
stats.set_int(MPX() .. "AWD_FMRALLYWONDRIVE", 25)
|
|
stats.set_int(MPX() .. "AWD_FMRALLYWONNAV", 25)
|
|
stats.set_bool(MPX() .. "AWD_FMWINCUSTOMRACE", true)
|
|
stats.set_int(MPX() .. "AWD_FMWINRACETOPOINTS", 25)
|
|
stats.set_bool(MPX() .. "CL_RACE_MODDED_CAR", true)
|
|
stats.set_int(MPX() .. "AWD_FM_RACE_LAST_FIRST", 25)
|
|
stats.set_bool(MPX() .. "AWD_FMRACEWORLDRECHOLDER", true)
|
|
stats.set_int(MPX() .. "AWD_FM_RACES_FASTEST_LAP", 50)
|
|
stats.set_bool(MPX() .. "AWD_FMWINALLRACEMODES", true)
|
|
stats.set_int(MPX() .. "AWD_FMHORDWAVESSURVIVE", 10)
|
|
stats.set_int(MPX() .. "NUMBER_SLIPSTREAMS_IN_RACE", 100)
|
|
stats.set_int(MPX() .. "NUMBER_TURBO_STARTS_IN_RACE", 50)
|
|
stats.set_int(MPX() .. "AWD_NO_ARMWRESTLING_WINS", 25)
|
|
stats.set_int(MPX() .. "MOST_ARM_WRESTLING_WINS", 25)
|
|
stats.set_int(MPX() .. "AWD_WIN_AT_DARTS", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_GOLF_WON", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_TENNIS_WON", 25)
|
|
stats.set_bool(MPX() .. "AWD_FM_TENNIS_5_SET_WINS", true)
|
|
stats.set_bool(MPX() .. "AWD_FM_TENNIS_STASETWIN", true)
|
|
stats.set_int(MPX() .. "AWD_FM_SHOOTRANG_CT_WON", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_SHOOTRANG_RT_WON", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_SHOOTRANG_TG_WON", 25)
|
|
stats.set_bool(MPX() .. "AWD_FM_SHOOTRANG_GRAN_WON", true)
|
|
stats.set_bool(MPX() .. "AWD_FMWINEVERYGAMEMODE", true)
|
|
stats.set_int(MPX() .. "AWD_WIN_CAPTURES", 50)
|
|
stats.set_int(MPX() .. "AWD_WIN_CAPTURE_DONT_DYING", 25)
|
|
stats.set_int(MPX() .. "AWD_WIN_LAST_TEAM_STANDINGS", 50)
|
|
stats.set_int(MPX() .. "AWD_ONLY_PLAYER_ALIVE_LTS", 50)
|
|
stats.set_int(MPX() .. "AWD_KILL_TEAM_YOURSELF_LTS", 25)
|
|
stats.set_int(MPX() .. "AIR_LAUNCHES_OVER_40M", 25)
|
|
stats.set_int(MPX() .. "AWD_CARS_EXPORTED", 50)
|
|
stats.set_int(MPX() .. "AWD_LESTERDELIVERVEHICLES", 25)
|
|
stats.set_int(MPX() .. "TOTAL_RACES_WON", 500)
|
|
stats.set_int(MPX() .. "TOTAL_RACES_LOST", 250)
|
|
stats.set_int(MPX() .. "TOTAL_CUSTOM_RACES_WON", 500)
|
|
stats.set_int(MPX() .. "TOTAL_DEATHMATCH_LOST", 250)
|
|
stats.set_int(MPX() .. "TOTAL_DEATHMATCH_WON", 500)
|
|
stats.set_int(MPX() .. "TOTAL_TDEATHMATCH_LOST", 250)
|
|
stats.set_int(MPX() .. "TOTAL_TDEATHMATCH_WON", 500)
|
|
stats.set_int(MPX() .. "SHOOTINGRANGE_WINS", 500)
|
|
stats.set_int(MPX() .. "SHOOTINGRANGE_LOSSES", 250)
|
|
stats.set_int(MPX() .. "TENNIS_MATCHES_WON", 500)
|
|
stats.set_int(MPX() .. "TENNIS_MATCHES_LOST", 250)
|
|
stats.set_int(MPX() .. "GOLF_WINS", 500)
|
|
stats.set_int(MPX() .. "GOLF_LOSSES", 250)
|
|
stats.set_int(MPX() .. "DARTS_TOTAL_WINS", 500)
|
|
stats.set_int(MPX() .. "DARTS_TOTAL_MATCHES", 750)
|
|
stats.set_int(MPX() .. "SHOOTINGRANGE_TOTAL_MATCH", 800)
|
|
stats.set_int(MPX() .. "BJ_WINS", 500)
|
|
stats.set_int(MPX() .. "BJ_LOST", 250)
|
|
stats.set_int(MPX() .. "RACE_2_POINT_WINS", 500)
|
|
stats.set_int(MPX() .. "RACE_2_POINT_LOST", 250)
|
|
stats.set_int(MPX() .. "KILLS_PLAYERS", 3593)
|
|
stats.set_int(MPX() .. "DEATHS_PLAYER", 1002)
|
|
stats.set_int(MPX() .. "MISSIONS_CREATED", 500)
|
|
stats.set_int(MPX() .. "LTS_CREATED", 500)
|
|
stats.set_int(MPX() .. "FM_MISSION_LIKES", 1500)
|
|
end)
|
|
|
|
AUM:add_button("General", function()
|
|
stats.set_bool(MPX() .. "AWD_FM25DIFFERENTDM", true)
|
|
stats.set_int(MPX() .. "CR_DIFFERENT_DM", 25)
|
|
stats.set_bool(MPX() .. "AWD_FM25DIFFERENTRACES", true)
|
|
stats.set_int(MPX() .. "CR_DIFFERENT_RACES", 25)
|
|
stats.set_int(MPX() .. "AWD_PARACHUTE_JUMPS_20M", 25)
|
|
stats.set_int(MPX() .. "AWD_PARACHUTE_JUMPS_50M", 25)
|
|
stats.set_int(MPX() .. "AWD_FMBASEJMP", 25)
|
|
stats.set_bool(MPX() .. "AWD_FMATTGANGHQ", true)
|
|
stats.set_bool(MPX() .. "AWD_FM6DARTCHKOUT", true)
|
|
stats.set_int(MPX() .. "AWD_FM_GOLF_BIRDIES", 25)
|
|
stats.set_bool(MPX() .. "AWD_FM_GOLF_HOLE_IN_1", true)
|
|
stats.set_int(MPX() .. "AWD_FM_TENNIS_ACE", 25)
|
|
stats.set_int(MPX() .. "AWD_FMBBETWIN", 50000)
|
|
stats.set_int(MPX() .. "AWD_LAPDANCES", 25)
|
|
stats.set_int(MPX() .. "AWD_FMCRATEDROPS", 25)
|
|
stats.set_bool(MPX() .. "AWD_FMPICKUPDLCCRATE1ST", true)
|
|
stats.set_bool(MPX() .. "AWD_FM25DIFITEMSCLOTHES", true)
|
|
stats.set_int(MPX() .. "AWD_NO_HAIRCUTS", 25)
|
|
stats.set_bool(MPX() .. "AWD_BUY_EVERY_GUN", true)
|
|
stats.set_bool(MPX() .. "AWD_DRIVELESTERCAR5MINS", true)
|
|
stats.set_bool(MPX() .. "AWD_FMTATTOOALLBODYPARTS", true)
|
|
stats.set_int(MPX() .. "AWD_DROPOFF_CAP_PACKAGES", 100)
|
|
stats.set_int(MPX() .. "AWD_PICKUP_CAP_PACKAGES", 100)
|
|
stats.set_int(MPX() .. "AWD_MENTALSTATE_TO_NORMAL", 50)
|
|
stats.set_bool(MPX() .. "AWD_STORE_20_CAR_IN_GARAGES", true)
|
|
stats.set_int(MPX() .. "AWD_TRADE_IN_YOUR_PROPERTY", 25)
|
|
stats.set_bool(MPX() .. "AWD_DAILYOBJWEEKBONUS", true)
|
|
stats.set_bool(MPX() .. "AWD_DAILYOBJMONTHBONUS", true)
|
|
stats.set_int(MPX() .. "AWD_FM_CR_DM_MADE", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_CR_RACES_MADE", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_CR_PLAYED_BY_PEEP", 1598)
|
|
stats.set_int(MPX() .. "AWD_FM_CR_MISSION_SCORE", 100)
|
|
stats.set_bool(MPX() .. "CL_DRIVE_RALLY", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_GTA_RACE", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_BOAT_RACE", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_FOOT_RACE", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_TEAM_DM", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_VEHICLE_DM", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_MISSION_CONTACT", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_A_PLAYLIST", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_POINT_TO_POINT", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_ONE_ON_ONE_DM", true)
|
|
stats.set_bool(MPX() .. "CL_PLAY_ONE_ON_ONE_RACE", true)
|
|
stats.set_bool(MPX() .. "CL_SURV_A_BOUNTY", true)
|
|
stats.set_bool(MPX() .. "CL_SET_WANTED_LVL_ON_PLAY", true)
|
|
stats.set_bool(MPX() .. "CL_GANG_BACKUP_GANGS", true)
|
|
stats.set_bool(MPX() .. "CL_GANG_BACKUP_LOST", true)
|
|
stats.set_bool(MPX() .. "CL_GANG_BACKUP_VAGOS", true)
|
|
stats.set_bool(MPX() .. "CL_CALL_MERCENARIES", true)
|
|
stats.set_bool(MPX() .. "CL_PHONE_MECH_DROP_CAR", true)
|
|
stats.set_bool(MPX() .. "CL_GONE_OFF_RADAR", true)
|
|
stats.set_bool(MPX() .. "CL_FILL_TITAN", true)
|
|
stats.set_bool(MPX() .. "CL_MOD_CAR_USING_APP", true)
|
|
stats.set_bool(MPX() .. "CL_MOD_CAR_USING_APP", true)
|
|
stats.set_bool(MPX() .. "CL_BUY_INSURANCE", true)
|
|
stats.set_bool(MPX() .. "CL_BUY_GARAGE", true)
|
|
stats.set_bool(MPX() .. "CL_ENTER_FRIENDS_HOUSE", true)
|
|
stats.set_bool(MPX() .. "CL_CALL_STRIPPER_HOUSE", true)
|
|
stats.set_bool(MPX() .. "CL_CALL_FRIEND", true)
|
|
stats.set_bool(MPX() .. "CL_SEND_FRIEND_REQUEST", true)
|
|
stats.set_bool(MPX() .. "CL_W_WANTED_PLAYER_TV", true)
|
|
stats.set_bool(MPX() .. "FM_INTRO_CUT_DONE", true)
|
|
stats.set_bool(MPX() .. "FM_INTRO_MISS_DONE", true)
|
|
stats.set_bool(MPX() .. "SHOOTINGRANGE_SEEN_TUT", true)
|
|
stats.set_bool(MPX() .. "TENNIS_SEEN_TUTORIAL", true)
|
|
stats.set_bool(MPX() .. "DARTS_SEEN_TUTORIAL", true)
|
|
stats.set_bool(MPX() .. "ARMWRESTLING_SEEN_TUTORIAL", true)
|
|
stats.set_bool(MPX() .. "HAS_WATCHED_BENNY_CUTSCE", true)
|
|
stats.set_int(MPX() .. "NO_PHOTOS_TAKEN", 100)
|
|
stats.set_int(MPX() .. "BOUNTSONU", 200)
|
|
stats.set_int(MPX() .. "BOUNTPLACED", 500)
|
|
stats.set_int(MPX() .. "BETAMOUNT", 500)
|
|
stats.set_int(MPX() .. "CRARMWREST", 500)
|
|
stats.set_int(MPX() .. "CRBASEJUMP", 500)
|
|
stats.set_int(MPX() .. "CRDARTS", 500)
|
|
stats.set_int(MPX() .. "CRDM", 500)
|
|
stats.set_int(MPX() .. "CRGANGHIDE", 500)
|
|
stats.set_int(MPX() .. "CRGOLF", 500)
|
|
stats.set_int(MPX() .. "CRHORDE", 500)
|
|
stats.set_int(MPX() .. "CRMISSION", 500)
|
|
stats.set_int(MPX() .. "CRSHOOTRNG", 500)
|
|
stats.set_int(MPX() .. "CRTENNIS", 500)
|
|
stats.set_int(MPX() .. "NO_TIMES_CINEMA", 500)
|
|
end)
|
|
|
|
AUM:add_button("Weapons", function()
|
|
stats.set_int(MPX() .. "CHAR_WEAP_UNLOCKED", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_UNLOCKED2", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_UNLOCKED3", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_UNLOCKED4", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_ADDON_1_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_ADDON_2_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_ADDON_3_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_ADDON_4_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FREE", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FREE2", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_FREE", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_FREE2", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_FREE3", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_FREE4", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_PURCHASED", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_PURCHASED2", -1)
|
|
stats.set_int(MPX() .. "WEAPON_PICKUP_BITSET", -1)
|
|
stats.set_int(MPX() .. "WEAPON_PICKUP_BITSET2", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_UNLOCKED", -1)
|
|
stats.set_int(MPX() .. "NO_WEAPONS_UNLOCK", -1)
|
|
stats.set_int(MPX() .. "NO_WEAPON_MODS_UNLOCK", -1)
|
|
stats.set_int(MPX() .. "NO_WEAPON_CLR_MOD_UNLOCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_UNLOCKED2", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_UNLOCKED3", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_UNLOCKED4", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_1_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_2_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_3_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_4_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_5_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_6_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_7_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_8_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_9_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_10_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_11_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_12_FM_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_KIT_FM_PURCHASE", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FM_PURCHASE", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FM_PURCHASE2", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FM_PURCHASE3", -1)
|
|
stats.set_int(MPX() .. "CHAR_WEAP_FM_PURCHASE4", -1)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_1_WHITE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_1_RED", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_1_BLUE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_2_WHITE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_2_RED", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_2_BLUE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_3_WHITE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_3_RED", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_3_BLUE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_4_WHITE", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_4_RED", 1000)
|
|
stats.set_int(MPX() .. "FIREWORK_TYPE_4_BLUE", 1000)
|
|
stats.set_int(MPX() .. "WEAP_FM_ADDON_PURCH", -1)
|
|
for i = 2, 19 do
|
|
stats.set_int(MPX() .. "WEAP_FM_ADDON_PURCH" .. i, -1)
|
|
end
|
|
for j = 1, 19 do
|
|
stats.set_int(MPX() .. "CHAR_FM_WEAP_ADDON_" .. j .. "_UNLCK", -1)
|
|
end
|
|
for m = 1, 41 do
|
|
stats.set_int(MPX() .. "CHAR_KIT_" .. m .. "_FM_UNLCK", -1)
|
|
end
|
|
for l = 2, 41 do
|
|
stats.set_int(MPX() .. "CHAR_KIT_FM_PURCHASE" .. l, -1)
|
|
end
|
|
end)
|
|
|
|
AUM:add_button("Crimes", function()
|
|
stats.set_int(MPX() .. "AWD_FMTIME5STARWANTED", 120)
|
|
stats.set_int(MPX() .. "AWD_5STAR_WANTED_AVOIDANCE", 50)
|
|
stats.set_int(MPX() .. "AWD_FMSHOOTDOWNCOPHELI", 25)
|
|
stats.set_int(MPX() .. "AWD_VEHICLES_JACKEDR", 500)
|
|
stats.set_int(MPX() .. "AWD_SECURITY_CARS_ROBBED", 25)
|
|
stats.set_int(MPX() .. "AWD_HOLD_UP_SHOPS", 20)
|
|
stats.set_int(MPX() .. "AWD_ODISTRACTCOPSNOEATH", 25)
|
|
stats.set_int(MPX() .. "AWD_ENEMYDRIVEBYKILLS", 100)
|
|
stats.set_int(MPX() .. "CHAR_WANTED_LEVEL_TIME5STAR", 18000000)
|
|
stats.set_int(MPX() .. "CARS_COPS_EXPLODED", 300)
|
|
stats.set_int(MPX() .. "BIKES_EXPLODED", 100)
|
|
stats.set_int(MPX() .. "BOATS_EXPLODED", 168)
|
|
stats.set_int(MPX() .. "HELIS_EXPLODED", 98)
|
|
stats.set_int(MPX() .. "PLANES_EXPLODED", 138)
|
|
stats.set_int(MPX() .. "QUADBIKE_EXPLODED", 50)
|
|
stats.set_int(MPX() .. "BICYCLE_EXPLODED", 48)
|
|
stats.set_int(MPX() .. "SUBMARINE_EXPLODED", 28)
|
|
stats.set_int(MPX() .. "TIRES_POPPED_BY_GUNSHOT", 500)
|
|
stats.set_int(MPX() .. "NUMBER_CRASHES_CARS", 300)
|
|
stats.set_int(MPX() .. "NUMBER_CRASHES_BIKES", 300)
|
|
stats.set_int(MPX() .. "BAILED_FROM_VEHICLE", 300)
|
|
stats.set_int(MPX() .. "NUMBER_CRASHES_QUADBIKES", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_COP_VEHICLE", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_CARS", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_BIKES", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_BOATS", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_HELIS", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_PLANES", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_QUADBIKES", 300)
|
|
stats.set_int(MPX() .. "NUMBER_STOLEN_BICYCLES", 300)
|
|
stats.set_int(MPX() .. "MC_CONTRIBUTION_POINTS", 1000)
|
|
stats.set_int(MPX() .. "MEMBERSMARKEDFORDEATH", 700)
|
|
stats.set_int(MPX() .. "MCKILLS", 500)
|
|
stats.set_int(MPX() .. "MCDEATHS", 700)
|
|
stats.set_int(MPX() .. "RIVALPRESIDENTKILLS", 700)
|
|
stats.set_int(MPX() .. "RIVALCEOANDVIPKILLS", 700)
|
|
stats.set_int(MPX() .. "CLUBHOUSECONTRACTSCOMPLETE", 700)
|
|
stats.set_int(MPX() .. "CLUBHOUSECONTRACTEARNINGS", 32698547)
|
|
stats.set_int(MPX() .. "CLUBCHALLENGESCOMPLETED", 700)
|
|
stats.set_int(MPX() .. "MEMBERCHALLENGESCOMPLETED", 700)
|
|
stats.set_int(MPX() .. "GHKILLS", 500)
|
|
stats.set_int(MPX() .. "HORDELVL", 10)
|
|
stats.set_int(MPX() .. "HORDKILLS", 500)
|
|
stats.set_int(MPX() .. "UNIQUECRATES", 500)
|
|
stats.set_int(MPX() .. "BJWINS", 500)
|
|
stats.set_int(MPX() .. "HORDEWINS", 500)
|
|
stats.set_int(MPX() .. "MCMWINS", 500)
|
|
stats.set_int(MPX() .. "GANGHIDWINS", 500)
|
|
stats.set_int(MPX() .. "KILLS", 800)
|
|
stats.set_int(MPX() .. "HITS_PEDS_VEHICLES", 100)
|
|
stats.set_int(MPX() .. "SHOTS", 1000)
|
|
stats.set_int(MPX() .. "HEADSHOTS", 100)
|
|
stats.set_int(MPX() .. "KILLS_ARMED", 650)
|
|
stats.set_int(MPX() .. "SUCCESSFUL_COUNTERS", 100)
|
|
stats.set_int(MPX() .. "KILLS_PLAYERS", 3593)
|
|
stats.set_int(MPX() .. "DEATHS_PLAYER", 1002)
|
|
stats.set_int(MPX() .. "KILLS_STEALTH", 100)
|
|
stats.set_int(MPX() .. "KILLS_INNOCENTS", 500)
|
|
stats.set_int(MPX() .. "KILLS_ENEMY_GANG_MEMBERS", 500)
|
|
stats.set_int(MPX() .. "KILLS_FRIENDLY_GANG_MEMBERS", 500)
|
|
stats.set_int(MPX() .. "KILLS_BY_OTHERS", 100)
|
|
stats.set_int(MPX() .. "BIGGEST_VICTIM_KILLS", 500)
|
|
stats.set_int(MPX() .. "ARCHENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "KILLS_COP", 4500)
|
|
stats.set_int(MPX() .. "KILLS_SWAT", 500)
|
|
stats.set_int(MPX() .. "STARS_ATTAINED", 5000)
|
|
stats.set_int(MPX() .. "STARS_EVADED", 4000)
|
|
stats.set_int(MPX() .. "VEHEXPORTED", 500)
|
|
stats.set_int(MPX() .. "TOTAL_NO_SHOPS_HELD_UP", 100)
|
|
stats.set_int(MPX() .. "CR_GANGATTACK_CITY", 1000)
|
|
stats.set_int(MPX() .. "CR_GANGATTACK_COUNTRY", 1000)
|
|
stats.set_int(MPX() .. "CR_GANGATTACK_LOST", 1000)
|
|
stats.set_int(MPX() .. "CR_GANGATTACK_VAGOS", 1000)
|
|
stats.set_int(MPX() .. "NO_NON_CONTRACT_RACE_WIN", 500)
|
|
stats.set_int(MPX() .. "DIED_IN_DROWNING", 833)
|
|
stats.set_int(MPX() .. "DIED_IN_DROWNINGINVEHICLE", 833)
|
|
stats.set_int(MPX() .. "DIED_IN_EXPLOSION", 833)
|
|
stats.set_int(MPX() .. "DIED_IN_FALL", 833)
|
|
stats.set_int(MPX() .. "DIED_IN_FIRE", 833)
|
|
stats.set_int(MPX() .. "DIED_IN_ROAD", 833)
|
|
stats.set_int(MPX() .. "GRENADE_ENEMY_KILLS", 50)
|
|
stats.set_int(MPX() .. "MICROSMG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "SMG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "ASLTSMG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "CRBNRIFLE_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "ADVRIFLE_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "MG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "CMBTMG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "ASLTMG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "RPG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "PISTOL_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "PLAYER_HEADSHOTS", 500)
|
|
stats.set_int(MPX() .. "SAWNOFF_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "STKYBMB_ENEMY_KILLS", 50)
|
|
stats.set_int(MPX() .. "UNARMED_ENEMY_KILLS", 50)
|
|
stats.set_int(MPX() .. "SNIPERRFL_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "HVYSNIPER_ENEMY_KILLS", 500)
|
|
end)
|
|
|
|
AUM:add_button("Vehicles", function()
|
|
stats.set_int(MPX() .. "AWD_50_VEHICLES_BLOWNUP", 500)
|
|
stats.set_int(MPX() .. "CARS_EXPLODED", 500)
|
|
stats.set_int(MPX() .. "AWD_CAR_EXPORT", 100)
|
|
stats.set_int(MPX() .. "AWD_FMDRIVEWITHOUTCRASH", 30)
|
|
stats.set_int(MPX() .. "AWD_PASSENGERTIME", 4)
|
|
stats.set_int(MPX() .. "AWD_TIME_IN_HELICOPTER", 4)
|
|
stats.set_int(MPX() .. "AWD_VEHICLE_JUMP_OVER_40M", 25)
|
|
stats.set_int(MPX() .. "MOST_FLIPS_IN_ONE_JUMP", 5)
|
|
stats.set_int(MPX() .. "MOST_SPINS_IN_ONE_JUMP", 5)
|
|
stats.set_int(MPX() .. "CHAR_FM_VEHICLE_1_UNLCK", -1)
|
|
stats.set_int(MPX() .. "CHAR_FM_VEHICLE_2_UNLCK", -1)
|
|
stats.set_int(MPX() .. "NO_CARS_REPAIR", 1000)
|
|
stats.set_int(MPX() .. "VEHICLES_SPRAYED", 500)
|
|
stats.set_int(MPX() .. "NUMBER_NEAR_MISS_NOCRASH", 500)
|
|
stats.set_int(MPX() .. "USJS_FOUND", 50)
|
|
stats.set_int(MPX() .. "USJS_COMPLETED", 50)
|
|
stats.set_int(MPX() .. "USJS_TOTAL_COMPLETED", 50)
|
|
stats.set_int(MPX() .. "CRDEADLINE", 5)
|
|
stats.set_int(MPX() .. "FAVOUTFITBIKETIMECURRENT", 2069146067)
|
|
stats.set_int(MPX() .. "FAVOUTFITBIKETIME1ALLTIME", 2069146067)
|
|
stats.set_int(MPX() .. "FAVOUTFITBIKETYPECURRENT", 2069146067)
|
|
stats.set_int(MPX() .. "FAVOUTFITBIKETYPEALLTIME", 2069146067)
|
|
stats.set_int(MPX() .. "LONGEST_WHEELIE_DIST", 1000)
|
|
stats.set_int(MPX() .. "RACES_WON", 50)
|
|
stats.set_int(MPX() .. "COUNT_HOTRING_RACE", 20)
|
|
stats.set_bool(MPX() .. "AWD_FMFURTHESTWHEELIE", true)
|
|
stats.set_bool(MPX() .. "AWD_FMFULLYMODDEDCAR", true)
|
|
end)
|
|
|
|
AUM:add_button("Combat", function()
|
|
stats.set_int(MPX() .. "AWD_100_HEADSHOTS", 500)
|
|
stats.set_int(MPX() .. "AWD_FMOVERALLKILLS", 1000)
|
|
stats.set_int(MPX() .. "AWD_FMKILLBOUNTY", 25)
|
|
stats.set_int(MPX() .. "AWD_FM_DM_3KILLSAMEGUY", 50)
|
|
stats.set_int(MPX() .. "AWD_FM_DM_KILLSTREAK", 100)
|
|
stats.set_int(MPX() .. "AWD_FM_DM_STOLENKILL", 50)
|
|
stats.set_int(MPX() .. "AWD_FM_DM_TOTALKILLS", 500)
|
|
stats.set_bool(MPX() .. "AWD_FMKILLSTREAKSDM", true)
|
|
stats.set_bool(MPX() .. "AWD_FMMOSTKILLSGANGHIDE", true)
|
|
stats.set_bool(MPX() .. "AWD_FMMOSTKILLSSURVIVE", true)
|
|
stats.set_int(MPX() .. "AWD_FMREVENGEKILLSDM", 50)
|
|
stats.set_int(MPX() .. "AWD_KILL_CARRIER_CAPTURE", 100)
|
|
stats.set_int(MPX() .. "AWD_NIGHTVISION_KILLS", 100)
|
|
stats.set_int(MPX() .. "AWD_KILL_PSYCHOPATHS", 100)
|
|
stats.set_int(MPX() .. "AWD_TAKEDOWNSMUGPLANE", 50)
|
|
stats.set_int(MPX() .. "AWD_100_KILLS_PISTOL", 500)
|
|
stats.set_int(MPX() .. "AWD_100_KILLS_SMG", 500)
|
|
stats.set_int(MPX() .. "AWD_100_KILLS_SHOTGUN", 500)
|
|
stats.set_int(MPX() .. "ASLTRIFLE_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "AWD_100_KILLS_SNIPER", 500)
|
|
stats.set_int(MPX() .. "MG_ENEMY_KILLS", 500)
|
|
stats.set_int(MPX() .. "AWD_25_KILLS_STICKYBOMBS", 50)
|
|
stats.set_int(MPX() .. "AWD_50_KILLS_GRENADES", 50)
|
|
stats.set_int(MPX() .. "AWD_50_KILLS_ROCKETLAUNCH", 50)
|
|
stats.set_int(MPX() .. "AWD_20_KILLS_MELEE", 50)
|
|
stats.set_int(MPX() .. "AWD_CAR_BOMBS_ENEMY_KILLS", 25)
|
|
stats.set_int(MPX() .. "MELEEKILLS", 700)
|
|
stats.set_int(MPX() .. "HITS", 10000)
|
|
stats.set_int(MPX() .. "DEATHS", 499)
|
|
stats.set_int(MPX() .. "HIGHEST_SKITTLES", 900)
|
|
stats.set_int(MPX() .. "NUMBER_NEAR_MISS", 1000)
|
|
end)
|
|
|
|
HAUM = AUM:add_tab("Heists Awards Unlocker Menu")
|
|
|
|
APARTMENTAUM = HAUM:add_tab("Apartment Heist Menu")
|
|
|
|
APARTMENTAUM:add_button("Unlock All Apartment Heists Awards", function()
|
|
stats.set_int(MPX() .. "AWD_FINISH_HEISTS", 50)
|
|
stats.set_int(MPX() .. "AWD_FINISH_HEIST_SETUP_JOB", 50)
|
|
stats.set_int(MPX() .. "AWD_COMPLETE_HEIST_NOT_DIE", -1)
|
|
stats.set_bool(MPX() .. "AWD_FINISH_HEIST_NO_DAMAGE", true)
|
|
stats.set_int(MPX() .. "AWD_WIN_GOLD_MEDAL_HEISTS", 25)
|
|
stats.set_int(MPX() .. "AWD_DO_HEIST_AS_MEMBER", 25)
|
|
stats.set_int(MPX() .. "AWD_DO_HEIST_AS_THE_LEADER", 25)
|
|
stats.set_bool(MPX() .. "AWD_SPLIT_HEIST_TAKE_EVENLY", true)
|
|
stats.set_bool(MPX() .. "AWD_ACTIVATE_2_PERSON_KEY", true)
|
|
stats.set_int(MPX() .. "AWD_CONTROL_CROWDS", 25)
|
|
stats.set_bool(MPX() .. "AWD_ALL_ROLES_HEIST", true)
|
|
stats.set_int(MPX() .. "HEIST_COMPLETION", 25)
|
|
stats.set_int(MPX() .. "HEISTS_ORGANISED", -1)
|
|
stats.set_int(MPX() .. "HEIST_START", -1)
|
|
stats.set_int(MPX() .. "HEIST_END", -1)
|
|
stats.set_int(MPX() .. "CUTSCENE_MID_PRISON", -1)
|
|
stats.set_int(MPX() .. "CUTSCENE_MID_HUMANE", -1)
|
|
stats.set_int(MPX() .. "CUTSCENE_MID_NARC", -1)
|
|
stats.set_int(MPX() .. "CUTSCENE_MID_ORNATE", -1)
|
|
stats.set_int(MPX() .. "CR_FLEECA_PREP_1", -1)
|
|
stats.set_int(MPX() .. "CR_FLEECA_PREP_2", -1)
|
|
stats.set_int(MPX() .. "CR_FLEECA_FINALE", -1)
|
|
stats.set_int(MPX() .. "CR_PRISON_PLANE", -1)
|
|
stats.set_int(MPX() .. "CR_PRISON_BUS", -1)
|
|
stats.set_int(MPX() .. "CR_PRISON_STATION", -1)
|
|
stats.set_int(MPX() .. "CR_PRISON_UNFINISHED_BIZ", -1)
|
|
stats.set_int(MPX() .. "CR_PRISON_FINALE", -1)
|
|
stats.set_int(MPX() .. "CR_HUMANE_KEY_CODES", -1)
|
|
stats.set_int(MPX() .. "CR_HUMANE_ARMORDILLOS", -1)
|
|
stats.set_int(MPX() .. "CR_HUMANE_EMP", -1)
|
|
stats.set_int(MPX() .. "CR_HUMANE_VALKYRIE", -1)
|
|
stats.set_int(MPX() .. "CR_HUMANE_FINALE", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_COKE", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_TRASH_TRUCK", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_BIKERS", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_WEED", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_STEAL_METH", -1)
|
|
stats.set_int(MPX() .. "CR_NARC_FINALE", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_TRUCKS", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_WITSEC", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_HACK", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_BIKES", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_CONVOY", -1)
|
|
stats.set_int(MPX() .. "CR_PACIFIC_FINALE", -1)
|
|
stats.set_int("MPPLY_HEIST_ACH_TRACKER", -1)
|
|
stats.set_int("MPPLY_WIN_GOLD_MEDAL_HEISTS", 25)
|
|
stats.set_bool("MPPLY_AWD_FLEECA_FIN", true)
|
|
stats.set_bool("MPPLY_AWD_PRISON_FIN", true)
|
|
stats.set_bool("MPPLY_AWD_HUMANE_FIN", true)
|
|
stats.set_bool("MPPLY_AWD_SERIESA_FIN", true)
|
|
stats.set_bool("MPPLY_AWD_PACIFIC_FIN", true)
|
|
stats.set_bool("MPPLY_AWD_HST_ORDER", true)
|
|
stats.set_bool("MPPLY_AWD_COMPLET_HEIST_MEM", true)
|
|
stats.set_bool("MPPLY_AWD_COMPLET_HEIST_1STPER", true)
|
|
stats.set_bool("MPPLY_AWD_HST_SAME_TEAM", true)
|
|
stats.set_bool("MPPLY_AWD_HST_ULT_CHAL", true)
|
|
stats.set_bool(MPX() .. "AWD_MATCHING_OUTFIT_HEIST", true)
|
|
stats.set_bool(MPX() .. "HEIST_PLANNING_DONE_PRINT", true)
|
|
stats.set_bool(MPX() .. "HEIST_PLANNING_DONE_HELP_0", true)
|
|
stats.set_bool(MPX() .. "HEIST_PLANNING_DONE_HELP_1", true)
|
|
stats.set_bool(MPX() .. "HEIST_PRE_PLAN_DONE_HELP_0", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_FINALE", true)
|
|
stats.set_bool(MPX() .. "HEIST_IS_TUTORIAL", true)
|
|
stats.set_bool(MPX() .. "HEIST_STRAND_INTRO_DONE", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_ORNATE", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_PRISON", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_BIOLAB", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_NARCOTIC", true)
|
|
stats.set_bool(MPX() .. "HEIST_CUTS_DONE_TUTORIAL", true)
|
|
stats.set_bool(MPX() .. "HEIST_AWARD_DONE_PREP", true)
|
|
stats.set_bool(MPX() .. "HEIST_AWARD_BOUGHT_IN", true)
|
|
stats.set_int(MPX() .. "HEIST_PLANNING_STAGE", -1)
|
|
end)
|
|
|
|
DIAMONHDAUM = HAUM:add_tab("Diamond Casino Heist")
|
|
|
|
DIAMONHDAUM:add_button("Unlock All Diamond Casino Heist Awards", function()
|
|
stats.set_int(MPX() .. "CAS_HEIST_NOTS", -1)
|
|
stats.set_int(MPX() .. "CAS_HEIST_FLOW", -1)
|
|
stats.set_int(MPX() .. "SIGNAL_JAMMERS_COLLECTED", 50)
|
|
stats.set_int(MPX() .. "AWD_PREPARATION", 40)
|
|
stats.set_int(MPX() .. "AWD_ASLEEPONJOB", 20)
|
|
stats.set_int(MPX() .. "AWD_DAICASHCRAB", 100000)
|
|
stats.set_int(MPX() .. "AWD_BIGBRO", 40)
|
|
stats.set_int(MPX() .. "AWD_SHARPSHOOTER", 40)
|
|
stats.set_int(MPX() .. "AWD_RACECHAMP", 40)
|
|
stats.set_int(MPX() .. "AWD_BATSWORD", 1000000)
|
|
stats.set_int(MPX() .. "AWD_COINPURSE", 950000)
|
|
stats.set_int(MPX() .. "AWD_ASTROCHIMP", 3000000)
|
|
stats.set_int(MPX() .. "AWD_MASTERFUL", 40000)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE0", -1)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE1", -1)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE2", -1)
|
|
stats.set_int(MPX() .. "H3_VEHICLESUSED", -1)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_1A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_2B_RAPP", 100)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_2C_SIDE", 100)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_3A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_4A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_STEALTH_5A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_1A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_2A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_2B", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_3A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_3B", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_4A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_SUBTERFUGE_5A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_1A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_2A1", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_2A2", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_2BP", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_2C", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_3A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_4A", 100)
|
|
stats.set_int(MPX() .. "H3_CR_DIRECT_5A", 100)
|
|
stats.set_int(MPX() .. "CR_ORDER", 100)
|
|
stats.set_bool(MPX() .. "AWD_SCOPEOUT", true)
|
|
stats.set_bool(MPX() .. "AWD_CREWEDUP", true)
|
|
stats.set_bool(MPX() .. "AWD_MOVINGON", true)
|
|
stats.set_bool(MPX() .. "AWD_PROMOCAMP", true)
|
|
stats.set_bool(MPX() .. "AWD_GUNMAN", true)
|
|
stats.set_bool(MPX() .. "AWD_SMASHNGRAB", true)
|
|
stats.set_bool(MPX() .. "AWD_INPLAINSI", true)
|
|
stats.set_bool(MPX() .. "AWD_UNDETECTED", true)
|
|
stats.set_bool(MPX() .. "AWD_ALLROUND", true)
|
|
stats.set_bool(MPX() .. "AWD_ELITETHEIF", true)
|
|
stats.set_bool(MPX() .. "AWD_PRO", true)
|
|
stats.set_bool(MPX() .. "AWD_SUPPORTACT", true)
|
|
stats.set_bool(MPX() .. "AWD_SHAFTED", true)
|
|
stats.set_bool(MPX() .. "AWD_COLLECTOR", true)
|
|
stats.set_bool(MPX() .. "AWD_DEADEYE", true)
|
|
stats.set_bool(MPX() .. "AWD_PISTOLSATDAWN", true)
|
|
stats.set_bool(MPX() .. "AWD_TRAFFICAVOI", true)
|
|
stats.set_bool(MPX() .. "AWD_CANTCATCHBRA", true)
|
|
stats.set_bool(MPX() .. "AWD_WIZHARD", true)
|
|
stats.set_bool(MPX() .. "AWD_APEESCAPE", true)
|
|
stats.set_bool(MPX() .. "AWD_MONKEYKIND", true)
|
|
stats.set_bool(MPX() .. "AWD_AQUAAPE", true)
|
|
stats.set_bool(MPX() .. "AWD_KEEPFAITH", true)
|
|
stats.set_bool(MPX() .. "AWD_TRUELOVE", true)
|
|
stats.set_bool(MPX() .. "AWD_NEMESIS", true)
|
|
stats.set_bool(MPX() .. "AWD_FRIENDZONED", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_RSC_SEEN", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_BWL_SEEN", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_MTG_SEEN", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_OIL_SEEN", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_DEF_SEEN", true)
|
|
stats.set_bool(MPX() .. "VCM_FLOW_CS_FIN_SEEN", true)
|
|
stats.set_bool(MPX() .. "HELP_FURIA", true)
|
|
stats.set_bool(MPX() .. "HELP_MINITAN", true)
|
|
stats.set_bool(MPX() .. "HELP_YOSEMITE2", true)
|
|
stats.set_bool(MPX() .. "HELP_ZHABA", true)
|
|
stats.set_bool(MPX() .. "HELP_IMORGEN", true)
|
|
stats.set_bool(MPX() .. "HELP_SULTAN2", true)
|
|
stats.set_bool(MPX() .. "HELP_VAGRANT", true)
|
|
stats.set_bool(MPX() .. "HELP_VSTR", true)
|
|
stats.set_bool(MPX() .. "HELP_STRYDER", true)
|
|
stats.set_bool(MPX() .. "HELP_SUGOI", true)
|
|
stats.set_bool(MPX() .. "HELP_KANJO", true)
|
|
stats.set_bool(MPX() .. "HELP_FORMULA", true)
|
|
stats.set_bool(MPX() .. "HELP_FORMULA2", true)
|
|
stats.set_bool(MPX() .. "HELP_JB7002", true)
|
|
for i = 0, 4 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "CASINOHSTPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
CAYOAUM = HAUM:add_tab("Cayo Heist Menu")
|
|
|
|
CAYOAUM:add_button("Unlock All Cayo Heist Awards", function()
|
|
stats.set_bool(MPX() .. "AWD_INTELGATHER", true)
|
|
stats.set_bool(MPX() .. "AWD_COMPOUNDINFILT", true)
|
|
stats.set_bool(MPX() .. "AWD_LOOT_FINDER", true)
|
|
stats.set_bool(MPX() .. "AWD_MAX_DISRUPT", true)
|
|
stats.set_bool(MPX() .. "AWD_THE_ISLAND_HEIST", true)
|
|
stats.set_bool(MPX() .. "AWD_GOING_ALONE", true)
|
|
stats.set_bool(MPX() .. "AWD_TEAM_WORK", true)
|
|
stats.set_bool(MPX() .. "AWD_MIXING_UP", true)
|
|
stats.set_bool(MPX() .. "AWD_TEAM_WORK", true)
|
|
stats.set_bool(MPX() .. "AWD_MIXING_UP", true)
|
|
stats.set_bool(MPX() .. "AWD_PRO_THIEF", true)
|
|
stats.set_bool(MPX() .. "AWD_CAT_BURGLAR", true)
|
|
stats.set_bool(MPX() .. "AWD_ONE_OF_THEM", true)
|
|
stats.set_bool(MPX() .. "AWD_GOLDEN_GUN", true)
|
|
stats.set_bool(MPX() .. "AWD_ELITE_THIEF", true)
|
|
stats.set_bool(MPX() .. "AWD_PROFESSIONAL", true)
|
|
stats.set_bool(MPX() .. "AWD_HELPING_OUT", true)
|
|
stats.set_bool(MPX() .. "AWD_COURIER", true)
|
|
stats.set_bool(MPX() .. "AWD_PARTY_VIBES", true)
|
|
stats.set_bool(MPX() .. "AWD_HELPING_HAND", true)
|
|
stats.set_bool(MPX() .. "AWD_ELEVENELEVEN", true)
|
|
stats.set_bool(MPX() .. "COMPLETE_H4_F_USING_VETIR", true)
|
|
stats.set_bool(MPX() .. "COMPLETE_H4_F_USING_LONGFIN", true)
|
|
stats.set_bool(MPX() .. "COMPLETE_H4_F_USING_ANNIH", true)
|
|
stats.set_bool(MPX() .. "COMPLETE_H4_F_USING_ALKONOS", true)
|
|
stats.set_bool(MPX() .. "COMPLETE_H4_F_USING_PATROLB", true)
|
|
stats.set_int(MPX() .. "AWD_LOSTANDFOUND", 500000)
|
|
stats.set_int(MPX() .. "AWD_SUNSET", 1800000)
|
|
stats.set_int(MPX() .. "AWD_TREASURE_HUNTER", 1000000)
|
|
stats.set_int(MPX() .. "AWD_WRECK_DIVING", 1000000)
|
|
stats.set_int(MPX() .. "AWD_KEINEMUSIK", 1800000)
|
|
stats.set_int(MPX() .. "AWD_PALMS_TRAX", 1800000)
|
|
stats.set_int(MPX() .. "AWD_MOODYMANN", 1800000)
|
|
stats.set_int(MPX() .. "AWD_FILL_YOUR_BAGS", 1000000000)
|
|
stats.set_int(MPX() .. "AWD_WELL_PREPARED", 80)
|
|
stats.set_int(MPX() .. "H4_H4_DJ_MISSIONS", -1)
|
|
stats.set_int(MPX() .. "H4CNF_APPROACH", -1)
|
|
stats.set_int(MPX() .. "H4_MISSIONS", -1)
|
|
stats.set_int(MPX() .. "H4_PLAYTHROUGH_STATUS", 100)
|
|
for i = 0, 2 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "HISLANDPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DOOMSDAYAUM = HAUM:add_tab("Doomsday Heist Awards Menu")
|
|
|
|
DOOMSDAYAUM:add_button("Unlock All Doomsday Heist Awards", function()
|
|
stats.set_int(MPX() .. "GANGOPS_HEIST_STATUS", -1)
|
|
stats.set_int(MPX() .. "GANGOPS_HEIST_STATUS", -229384)
|
|
stats.set_int(MPX() .. "GANGOPS_FM_MISSION_PROG", -1)
|
|
stats.set_int(MPX() .. "GANGOPS_FLOW_MISSION_PROG", -1)
|
|
stats.set_int("MPPLY_GANGOPS_ALLINORDER", 100)
|
|
stats.set_int("MPPLY_GANGOPS_LOYALTY", 100)
|
|
stats.set_int("MPPLY_GANGOPS_CRIMMASMD", 100)
|
|
stats.set_int("MPPLY_GANGOPS_LOYALTY2", 100)
|
|
stats.set_int("MPPLY_GANGOPS_LOYALTY3", 100)
|
|
stats.set_int("MPPLY_GANGOPS_CRIMMASMD2", 100)
|
|
stats.set_int("MPPLY_GANGOPS_CRIMMASMD3", 100)
|
|
stats.set_int("MPPLY_GANGOPS_SUPPORT", 100)
|
|
stats.set_int(MPX() .. "CR_GANGOP_MORGUE", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_DELUXO", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_SERVERFARM", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_IAABASE_FIN", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_STEALOSPREY", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_FOUNDRY", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_RIOTVAN", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_SUBMARINECAR", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_SUBMARINE_FIN", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_PREDATOR", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_BMLAUNCHER", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_BCCUSTOM", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_STEALTHTANKS", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_SPYPLANE", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_FINALE", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_FINALE_P2", 10)
|
|
stats.set_int(MPX() .. "CR_GANGOP_FINALE_P3", 10)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_IAA", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_SUBMARINE", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_MISSILE", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_ALLINORDER", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_LOYALTY", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_LOYALTY2", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_LOYALTY3", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_CRIMMASMD", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_CRIMMASMD2", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_CRIMMASMD3", true)
|
|
stats.set_bool("MPPLY_AWD_GANGOPS_SUPPORT", true)
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "GANGOPSPSTAT_BOOL0", true, j)
|
|
end
|
|
stats.set_masked_int(MPX() .. "DLCSMUGCHARPSTAT_INT260", 3, 16, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT260", 3, 24, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT260", 3, 32, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT260", 3, 40, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT260", 3, 48, 8)
|
|
end)
|
|
|
|
DLCAUM = AUM:add_tab("DLC Awards Menu")
|
|
|
|
DLCAUM:add_button("The Kortz Center Heist", function()
|
|
stats.set_bool(MPX() .. "AWD_SCOPING", true)
|
|
stats.set_int(MPX() .. "AWD_PREPPER", 20)
|
|
stats.set_bool(MPX() .. "AWD_ADAPTABLE", true)
|
|
stats.set_bool(MPX() .. "AWD_KORTZCENTERHEIST", true)
|
|
stats.set_bool(MPX() .. "AWD_FINDSAWAY", true)
|
|
stats.set_bool(MPX() .. "AWD_WHOSTHERE", true)
|
|
stats.set_bool(MPX() .. "AWD_ELITETHIEF", true)
|
|
stats.set_bool(MPX() .. "AWD_NOLIFER", true)
|
|
stats.set_bool(MPX() .. "AWD_SOLITUDE", true)
|
|
stats.set_bool(MPX() .. "AWD_COORDINATION", true)
|
|
stats.set_bool(MPX() .. "AWD_FLEXIBLETHIEF", true)
|
|
stats.set_int(MPX() .. "AWD_REPEATOFFENDER", 20)
|
|
stats.set_int(MPX() .. "AWD_FULLBAGS", 5000000)
|
|
stats.set_bool(MPX() .. "AWD_HIDDENINPLAINSIGHT", true)
|
|
stats.set_int(MPX() .. "AWD_CURATOR", 5)
|
|
stats.set_int(MPX() .. "AWD_LAPIDARY", 5)
|
|
stats.set_bool(MPX() .. "AWD_PACIFIST", true)
|
|
stats.set_bool(MPX() .. "AWD_PUTRIDPILFERING", true)
|
|
stats.set_bool(MPX() .. "AWD_METEORITICS", true)
|
|
end)
|
|
|
|
DLCAUM:add_button("A Safehouse In The Hills", function()
|
|
stats.set_bool(MPX() .. "AWD_NEGATIVEPRESS", true)
|
|
stats.set_bool(MPX() .. "AWD_USESELFDRIVINGVEH", true)
|
|
stats.set_bool(MPX() .. "AWD_LIONSDEN", true)
|
|
stats.set_bool(MPX() .. "AWD_TAKEOUTLEADEXPLO", true)
|
|
stats.set_bool(MPX() .. "AWD_SUBWAYTRAIN", true)
|
|
stats.set_bool(MPX() .. "AWD_SUBWAYSTUNTJUMP", true)
|
|
stats.set_bool(MPX() .. "AWD_TRASHCOLLECTORS", true)
|
|
stats.set_bool(MPX() .. "AWD_ALLTRASHCOLLECTED", true)
|
|
stats.set_bool(MPX() .. "AWD_FIBFINALE", true)
|
|
stats.set_bool(MPX() .. "AWD_HELPER", true)
|
|
stats.set_bool(MPX() .. "AWD_FIBFINALECHALLENGE", true)
|
|
stats.set_bool(MPX() .. "AWD_MANSIONDEFEND", true)
|
|
stats.set_bool(MPX() .. "AWD_DEFLOWMOTIONKILLS", true)
|
|
stats.set_bool(MPX() .. "AWD_YOUVEMADEIT", true)
|
|
stats.set_bool(MPX() .. "AWD_ANIMALLOVER", true)
|
|
stats.set_bool(MPX() .. "AWD_MANSADVERSARYWIN", true)
|
|
stats.set_bool(MPX() .. "AWD_ONTHECLOCK", true)
|
|
stats.set_int(MPX() .. "AWD_TAXIDESTRUCTION", 20)
|
|
stats.set_int(MPX() .. "AWD_YOGA", 50)
|
|
stats.set_int(MPX() .. "AWD_JUICEDUP", 100)
|
|
stats.set_int(MPX() .. "AWD_MANADVERSARYDEFUSE", 10)
|
|
stats.set_int(MPX() .. "AWD_FIREFIGHTER", 20)
|
|
stats.set_int(MPX() .. "AWD_ALPHAMAIL", 20)
|
|
stats.set_int(MPX() .. "AWD_LOSSANTOSMETEOR", 20)
|
|
end)
|
|
|
|
DLCAUM:add_button("Agents of Sabotage", function()
|
|
for i = 9542, 9546 do
|
|
stats.set_packed_stat_bool(i, true)
|
|
end
|
|
stats.set_packed_stat_bool(9549, true)
|
|
stats.set_packed_stat_int(24903, 25)
|
|
stats.set_packed_stat_int(24904, 2)
|
|
stats.set_int(MPX() .. "HACKER24_GEN_BS", 8160)
|
|
stats.set_bool(MPX() .. "AWD_FINEART", true)
|
|
stats.set_bool(MPX() .. "AWD_BRUTEFORCE", true)
|
|
stats.set_bool(MPX() .. "AWD_PROJECTBREAK", true)
|
|
stats.set_bool(MPX() .. "AWD_BLACKBOXFILE", true)
|
|
stats.set_bool(MPX() .. "AWD_BONUSPOINTS", true)
|
|
stats.set_int(MPX() .. "AWD_DARNELLBROSINC", 50)
|
|
stats.set_int(MPX() .. "AWD_GET_READY", 50)
|
|
end)
|
|
|
|
DLCAUM:add_button("After Hours", function()
|
|
stats.set_int(MPX() .. "AWD_DANCE_TO_SOLOMUN", 120)
|
|
stats.set_int(MPX() .. "AWD_DANCE_TO_TALEOFUS", 120)
|
|
stats.set_int(MPX() .. "AWD_DANCE_TO_DIXON", 120)
|
|
stats.set_int(MPX() .. "AWD_DANCE_TO_BLKMAD", 120)
|
|
stats.set_int(MPX() .. "AWD_CLUB_DRUNK", 200)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_VIP_APPEAR", 700)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_JOBS_DONE", 700)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_EARNINGS", 5721002)
|
|
stats.set_int(MPX() .. "HUB_SALES_COMPLETED", 1001)
|
|
stats.set_int(MPX() .. "HUB_EARNINGS", 20721002)
|
|
stats.set_int(MPX() .. "DANCE_COMBO_DURATION_MINS", 3600000)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_PLAYER_APPEAR", 100)
|
|
stats.set_int(MPX() .. "LIFETIME_HUB_GOODS_SOLD", 784672)
|
|
stats.set_int(MPX() .. "LIFETIME_HUB_GOODS_MADE", 507822)
|
|
stats.set_int(MPX() .. "DANCEPERFECTOWNCLUB", 120)
|
|
stats.set_int(MPX() .. "NUMUNIQUEPLYSINCLUB", 120)
|
|
stats.set_int(MPX() .. "DANCETODIFFDJS", 4)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_HOTSPOT_TIME_MS", 3600000)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_CONT_TOTAL", 20)
|
|
stats.set_int(MPX() .. "NIGHTCLUB_CONT_MISSION", -1)
|
|
stats.set_int(MPX() .. "CLUB_CONTRABAND_MISSION", 1000)
|
|
stats.set_int(MPX() .. "HUB_CONTRABAND_MISSION", 1000)
|
|
stats.set_bool(MPX() .. "AWD_CLUB_HOTSPOT", true)
|
|
stats.set_bool(MPX() .. "AWD_CLUB_CLUBBER", true)
|
|
stats.set_bool(MPX() .. "AWD_CLUB_COORD", true)
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "BUSINESSBATPSTAT_BOOL0", true, j)
|
|
stats.set_bool_masked(MPX() .. "BUSINESSBATPSTAT_BOOL1", true, j)
|
|
end
|
|
if stats.get_masked_int(MPX() .. "BUSINESSBATPSTAT_INT380", 0, 8) < 20 then
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT380", 20, 0, 8)
|
|
end
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 50, 8, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 100, 16, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 20, 24, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 80, 32, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 60, 40, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 40, 48, 8)
|
|
stats.set_masked_int(MPX() .. "BUSINESSBATPSTAT_INT379", 10, 56, 8)
|
|
end)
|
|
|
|
DLCAUM:add_button("Arena War", function()
|
|
stats.set_int(MPX() .. "ARN_BS_TRINKET_TICKERS", -1)
|
|
stats.set_int(MPX() .. "ARN_BS_TRINKET_SAVED", -1)
|
|
stats.set_int(MPX() .. "AWD_WATCH_YOUR_STEP", 50)
|
|
stats.set_int(MPX() .. "AWD_TOWER_OFFENSE", 50)
|
|
stats.set_int(MPX() .. "AWD_READY_FOR_WAR", 50)
|
|
stats.set_int(MPX() .. "AWD_THROUGH_A_LENS", 50)
|
|
stats.set_int(MPX() .. "AWD_SPINNER", 50)
|
|
stats.set_int(MPX() .. "AWD_YOUMEANBOOBYTRAPS", 50)
|
|
stats.set_int(MPX() .. "AWD_MASTER_BANDITO", 50)
|
|
stats.set_int(MPX() .. "AWD_SITTING_DUCK", 50)
|
|
stats.set_int(MPX() .. "AWD_CROWDPARTICIPATION", 50)
|
|
stats.set_int(MPX() .. "AWD_KILL_OR_BE_KILLED", 50)
|
|
stats.set_int(MPX() .. "AWD_MASSIVE_SHUNT", 50)
|
|
stats.set_int(MPX() .. "AWD_YOURE_OUTTA_HERE", 200)
|
|
stats.set_int(MPX() .. "AWD_WEVE_GOT_ONE", 50)
|
|
stats.set_int(MPX() .. "AWD_ARENA_WAGEWORKER", 1000000)
|
|
stats.set_int(MPX() .. "AWD_TIME_SERVED", 1000)
|
|
stats.set_int(MPX() .. "AWD_TOP_SCORE", 55000)
|
|
stats.set_int(MPX() .. "AWD_CAREER_WINNER", 1000)
|
|
stats.set_int(MPX() .. "ARENAWARS_SP", 0)
|
|
stats.set_int(MPX() .. "ARENAWARS_SKILL_LEVEL", 20)
|
|
stats.set_int(MPX() .. "ARENAWARS_SP_LIFETIME", 100)
|
|
stats.set_int(MPX() .. "ARENAWARS_AP", 0)
|
|
stats.set_int(MPX() .. "ARENAWARS_AP_TIER", 1000)
|
|
stats.set_int(MPX() .. "ARENAWARS_AP_LIFETIME", 5055000)
|
|
stats.set_int(MPX() .. "ARENAWARS_CARRER_UNLK", -1)
|
|
stats.set_int(MPX() .. "ARN_W_THEME_SCIFI", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_THEME_APOC", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_THEME_CONS", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_PASS_THE_BOMB", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_DETONATION", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_ARCADE_RACE", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_CTF", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_TAG_TEAM", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_DESTR_DERBY", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_CARNAGE", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_MONSTER_JAM", 1000)
|
|
stats.set_int(MPX() .. "ARN_W_GAMES_MASTERS", 1000)
|
|
stats.set_int(MPX() .. "ARN_L_PASS_THE_BOMB", 500)
|
|
stats.set_int(MPX() .. "ARN_L_DETONATION", 500)
|
|
stats.set_int(MPX() .. "ARN_L_ARCADE_RACE", 500)
|
|
stats.set_int(MPX() .. "ARN_L_CTF", 500)
|
|
stats.set_int(MPX() .. "ARN_L_TAG_TEAM", 500)
|
|
stats.set_int(MPX() .. "ARN_L_DESTR_DERBY", 500)
|
|
stats.set_int(MPX() .. "ARN_L_CARNAGE", 500)
|
|
stats.set_int(MPX() .. "ARN_L_MONSTER_JAM", 500)
|
|
stats.set_int(MPX() .. "ARN_L_GAMES_MASTERS", 500)
|
|
stats.set_int(MPX() .. "NUMBER_OF_CHAMP_BOUGHT", 1000)
|
|
stats.set_int(MPX() .. "ARN_SPECTATOR_KILLS", 1000)
|
|
stats.set_int(MPX() .. "ARN_LIFETIME_KILLS", 1000)
|
|
stats.set_int(MPX() .. "ARN_LIFETIME_DEATHS", 500)
|
|
stats.set_int(MPX() .. "ARENAWARS_CARRER_WINS", 1000)
|
|
stats.set_int(MPX() .. "ARENAWARS_CARRER_WINT", 1000)
|
|
stats.set_int(MPX() .. "ARENAWARS_MATCHES_PLYD", 1000)
|
|
stats.set_int(MPX() .. "ARENAWARS_MATCHES_PLYDT", 1000)
|
|
stats.set_int(MPX() .. "ARN_SPEC_BOX_TIME_MS", 86400000)
|
|
stats.set_int(MPX() .. "ARN_SPECTATOR_DRONE", 1000)
|
|
stats.set_int(MPX() .. "ARN_SPECTATOR_CAMS", 1000)
|
|
stats.set_int(MPX() .. "ARN_SMOKE", 1000)
|
|
stats.set_int(MPX() .. "ARN_DRINK", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_MONSTER", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_MONSTER", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_MONSTER", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_CERBERUS", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_CERBERUS2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_CERBERUS3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUISER", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUISER2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUISER3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SLAMVAN4", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SLAMVAN5", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SLAMVAN6", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUTUS", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUTUS2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_BRUTUS3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SCARAB", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SCARAB2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_SCARAB3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DOMINATOR4", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DOMINATOR5", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DOMINATOR6", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPALER2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPALER3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPALER4", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ISSI4", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ISSI5", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ISSI", 61000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPERATOR", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPERATOR2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_IMPERATOR3", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ZR380", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ZR3802", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_ZR3803", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DEATHBIKE", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DEATHBIKE2", 1000)
|
|
stats.set_int(MPX() .. "ARN_VEH_DEATHBIKE3", 1000)
|
|
stats.set_bool(MPX() .. "AWD_BEGINNER", true)
|
|
stats.set_bool(MPX() .. "AWD_FIELD_FILLER", true)
|
|
stats.set_bool(MPX() .. "AWD_ARMCHAIR_RACER", true)
|
|
stats.set_bool(MPX() .. "AWD_LEARNER", true)
|
|
stats.set_bool(MPX() .. "AWD_SUNDAY_DRIVER", true)
|
|
stats.set_bool(MPX() .. "AWD_THE_ROOKIE", true)
|
|
stats.set_bool(MPX() .. "AWD_BUMP_AND_RUN", true)
|
|
stats.set_bool(MPX() .. "AWD_GEAR_HEAD", true)
|
|
stats.set_bool(MPX() .. "AWD_DOOR_SLAMMER", true)
|
|
stats.set_bool(MPX() .. "AWD_HOT_LAP", true)
|
|
stats.set_bool(MPX() .. "AWD_ARENA_AMATEUR", true)
|
|
stats.set_bool(MPX() .. "AWD_PAINT_TRADER", true)
|
|
stats.set_bool(MPX() .. "AWD_SHUNTER", true)
|
|
stats.set_bool(MPX() .. "AWD_JOCK", true)
|
|
stats.set_bool(MPX() .. "AWD_WARRIOR", true)
|
|
stats.set_bool(MPX() .. "AWD_T_BONE", true)
|
|
stats.set_bool(MPX() .. "AWD_MAYHEM", true)
|
|
stats.set_bool(MPX() .. "AWD_WRECKER", true)
|
|
stats.set_bool(MPX() .. "AWD_CRASH_COURSE", true)
|
|
stats.set_bool(MPX() .. "AWD_ARENA_LEGEND", true)
|
|
stats.set_bool(MPX() .. "AWD_PEGASUS", true)
|
|
stats.set_bool(MPX() .. "AWD_UNSTOPPABLE", true)
|
|
stats.set_bool(MPX() .. "AWD_CONTACT_SPORT", true)
|
|
stats.set_masked_int(MPX() .. "ARENAWARSPSTAT_INT", 1, 35, 8)
|
|
for i = 0, 8 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "ARENAWARSPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DLCAUM:add_button("Diamond Casino n Resort", function()
|
|
stats.set_int(MPX() .. "AWD_ODD_JOBS", 50)
|
|
stats.set_int(MPX() .. "VCM_FLOW_PROGRESS", -1)
|
|
stats.set_int(MPX() .. "VCM_STORY_PROGRESS", 5)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME1", true)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME2", true)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME3", true)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME4", true)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME5", true)
|
|
stats.set_bool(MPX() .. "AWD_FIRST_TIME6", true)
|
|
stats.set_bool(MPX() .. "AWD_ALL_IN_ORDER", true)
|
|
stats.set_bool(MPX() .. "AWD_SUPPORTING_ROLE", true)
|
|
stats.set_bool(MPX() .. "AWD_LEADER", true)
|
|
stats.set_bool(MPX() .. "AWD_SURVIVALIST", true)
|
|
Paragon = stats.get_bool(MPX() .. "CAS_VEHICLE_REWARD")
|
|
if Paragon == true then
|
|
stats.set_bool(MPX() .. "CAS_VEHICLE_REWARD", true)
|
|
else
|
|
stats.set_bool(MPX() .. "CAS_VEHICLE_REWARD", false)
|
|
end
|
|
for i = 0, 6 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "CASINOPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DLCAUM:add_button("Arcade", function()
|
|
stats.set_int(MPX() .. "AWD_PREPARATION", 50)
|
|
stats.set_int(MPX() .. "AWD_ASLEEPONJOB", 20)
|
|
stats.set_int(MPX() .. "AWD_DAICASHCRAB", 100000)
|
|
stats.set_int(MPX() .. "AWD_BIGBRO", 40)
|
|
stats.set_int(MPX() .. "AWD_SHARPSHOOTER", 40)
|
|
stats.set_int(MPX() .. "AWD_RACECHAMP", 40)
|
|
stats.set_int(MPX() .. "AWD_BATSWORD", 1000000)
|
|
stats.set_int(MPX() .. "AWD_COINPURSE", 950000)
|
|
stats.set_int(MPX() .. "AWD_ASTROCHIMP", 3000000)
|
|
stats.set_int(MPX() .. "AWD_MASTERFUL", 40000)
|
|
stats.set_int(MPX() .. "SCGW_NUM_WINS_GANG_0", 50)
|
|
stats.set_int(MPX() .. "SCGW_NUM_WINS_GANG_1", 50)
|
|
stats.set_int(MPX() .. "SCGW_NUM_WINS_GANG_2", 50)
|
|
stats.set_int(MPX() .. "SCGW_NUM_WINS_GANG_3", 50)
|
|
stats.set_int(MPX() .. "CH_ARC_CAB_CLAW_TROPHY", -1)
|
|
stats.set_int(MPX() .. "CH_ARC_CAB_LOVE_TROPHY", -1)
|
|
stats.set_int(MPX() .. "IAP_MAX_MOON_DIST", 2147483647)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_0", 69644)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_1", 50333)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_2", 63512)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_3", 46136)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_4", 21638)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_5", 2133)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_6", 1215)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_7", 2444)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_8", 38023)
|
|
stats.set_int(MPX() .. "SCGW_INITIALS_9", 2233)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_0", 0)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_1", 64)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_2", 8457)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_3", 91275)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_4", 53260)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_5", 78663)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_6", 25103)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_7", 102401)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_8", 12672)
|
|
stats.set_int(MPX() .. "FOOTAGE_INITIALS_9", 74380)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_0", 284544)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_1", 275758)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_2", 100000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_3", 90000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_4", 80000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_5", 70000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_6", 60000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_7", 50000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_8", 40000)
|
|
stats.set_int(MPX() .. "FOOTAGE_SCORE_9", 30000)
|
|
for i = 0, 9 do
|
|
stats.set_int(MPX() .. "IAP_INITIALS_" .. i, 50)
|
|
stats.set_int(MPX() .. "IAP_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "IAP_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "SCGW_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "DG_DEFENDER_INITIALS_" .. i, 69644)
|
|
stats.set_int(MPX() .. "DG_DEFENDER_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "DG_MONKEY_INITIALS_" .. i, 69644)
|
|
stats.set_int(MPX() .. "DG_MONKEY_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "DG_PENETRATOR_INITIALS_" .. i, 69644)
|
|
stats.set_int(MPX() .. "DG_PENETRATOR_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "GGSM_INITIALS_" .. i, 69644)
|
|
stats.set_int(MPX() .. "GGSM_SCORE_" .. i, 50)
|
|
stats.set_int(MPX() .. "TWR_INITIALS_" .. i, 69644)
|
|
stats.set_int(MPX() .. "TWR_SCORE_" .. i, 50)
|
|
end
|
|
stats.set_bool(MPX() .. "AWD_SCOPEOUT", true)
|
|
stats.set_bool(MPX() .. "AWD_CREWEDUP", true)
|
|
stats.set_bool(MPX() .. "AWD_MOVINGON", true)
|
|
stats.set_bool(MPX() .. "AWD_PROMOCAMP", true)
|
|
stats.set_bool(MPX() .. "AWD_GUNMAN", true)
|
|
stats.set_bool(MPX() .. "AWD_SMASHNGRAB", true)
|
|
stats.set_bool(MPX() .. "AWD_INPLAINSI", true)
|
|
stats.set_bool(MPX() .. "AWD_UNDETECTED", true)
|
|
stats.set_bool(MPX() .. "AWD_ALLROUND", true)
|
|
stats.set_bool(MPX() .. "AWD_ELITETHEIF", true)
|
|
stats.set_bool(MPX() .. "AWD_PRO", true)
|
|
stats.set_bool(MPX() .. "AWD_SUPPORTACT", true)
|
|
stats.set_bool(MPX() .. "AWD_SHAFTED", true)
|
|
stats.set_bool(MPX() .. "AWD_COLLECTOR", true)
|
|
stats.set_bool(MPX() .. "AWD_DEADEYE", true)
|
|
stats.set_bool(MPX() .. "AWD_PISTOLSATDAWN", true)
|
|
stats.set_bool(MPX() .. "AWD_TRAFFICAVOI", true)
|
|
stats.set_bool(MPX() .. "AWD_CANTCATCHBRA", true)
|
|
stats.set_bool(MPX() .. "AWD_WIZHARD", true)
|
|
stats.set_bool(MPX() .. "AWD_APEESCAP", true)
|
|
stats.set_bool(MPX() .. "AWD_MONKEYKIND", true)
|
|
stats.set_bool(MPX() .. "AWD_AQUAAPE", true)
|
|
stats.set_bool(MPX() .. "AWD_KEEPFAITH", true)
|
|
stats.set_bool(MPX() .. "AWD_TRUELOVE", true)
|
|
stats.set_bool(MPX() .. "AWD_NEMESIS", true)
|
|
stats.set_bool(MPX() .. "AWD_FRIENDZONED", true)
|
|
stats.set_bool(MPX() .. "IAP_CHALLENGE_0", true)
|
|
stats.set_bool(MPX() .. "IAP_CHALLENGE_1", true)
|
|
stats.set_bool(MPX() .. "IAP_CHALLENGE_2", true)
|
|
stats.set_bool(MPX() .. "IAP_CHALLENGE_3", true)
|
|
stats.set_bool(MPX() .. "IAP_CHALLENGE_4", true)
|
|
stats.set_bool(MPX() .. "IAP_GOLD_TANK", true)
|
|
stats.set_bool(MPX() .. "SCGW_WON_NO_DEATHS", true)
|
|
for i = 0, 4 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "CASINOHSTPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
for i = 0, 6 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "CASINOPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DLCAUM:add_button("LS Summer Special", function()
|
|
stats.set_bool(MPX() .. "AWD_KINGOFQUB3D", true)
|
|
stats.set_bool(MPX() .. "AWD_QUBISM", true)
|
|
stats.set_bool(MPX() .. "AWD_QUIBITS", true)
|
|
stats.set_bool(MPX() .. "AWD_GODOFQUB3D", true)
|
|
stats.set_bool(MPX() .. "AWD_ELEVENELEVEN", true)
|
|
stats.set_bool(MPX() .. "AWD_GOFOR11TH", true)
|
|
stats.set_masked_int(MPX() .. "SU20PSTAT_INT", 1, 35, 8)
|
|
for i = 0, 1 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "SU20PSTAT_BOOL" .. i, true, j)
|
|
stats.set_bool_masked(MPX() .. "SU20TATTOOSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DLCAUM:add_button("LS Tuners", function()
|
|
stats.set_int(MPX() .. "AWD_CAR_CLUB_MEM", 100)
|
|
stats.set_int(MPX() .. "AWD_SPRINTRACER", 50)
|
|
stats.set_int(MPX() .. "AWD_STREETRACER", 50)
|
|
stats.set_int(MPX() .. "AWD_PURSUITRACER", 50)
|
|
stats.set_int(MPX() .. "AWD_TEST_CAR", 240)
|
|
stats.set_int(MPX() .. "AWD_AUTO_SHOP", 50)
|
|
stats.set_int(MPX() .. "AWD_GROUNDWORK", 40)
|
|
stats.set_int(MPX() .. "AWD_CAR_EXPORT", 100)
|
|
stats.set_int(MPX() .. "AWD_ROBBERY_CONTRACT", 100)
|
|
stats.set_int(MPX() .. "AWD_FACES_OF_DEATH", 100)
|
|
stats.set_bool(MPX() .. "AWD_CAR_CLUB", true)
|
|
stats.set_bool(MPX() .. "AWD_PRO_CAR_EXPORT", true)
|
|
stats.set_bool(MPX() .. "AWD_UNION_DEPOSITORY", true)
|
|
stats.set_bool(MPX() .. "AWD_MILITARY_CONVOY", true)
|
|
stats.set_bool(MPX() .. "AWD_FLEECA_BANK", true)
|
|
stats.set_bool(MPX() .. "AWD_FREIGHT_TRAIN", true)
|
|
stats.set_bool(MPX() .. "AWD_BOLINGBROKE_ASS", true)
|
|
stats.set_bool(MPX() .. "AWD_IAA_RAID", true)
|
|
stats.set_bool(MPX() .. "AWD_METH_JOB", true)
|
|
stats.set_bool(MPX() .. "AWD_BUNKER_RAID", true)
|
|
stats.set_bool(MPX() .. "AWD_STRAIGHT_TO_VIDEO", true)
|
|
stats.set_bool(MPX() .. "AWD_MONKEY_C_MONKEY_DO", true)
|
|
stats.set_bool(MPX() .. "AWD_TRAINED_TO_KILL", true)
|
|
stats.set_bool(MPX() .. "AWD_DIRECTOR", true)
|
|
for i = 0, 8 do
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "TUNERPSTAT_BOOL" .. i, true, j)
|
|
end
|
|
end
|
|
end)
|
|
|
|
DLCAUM:add_button("Contract", function()
|
|
stats.set_int(MPX() .. "AWD_CONTRACTOR", 50)
|
|
stats.set_int(MPX() .. "AWD_COLD_CALLER", 50)
|
|
stats.set_int(MPX() .. "AWD_PRODUCER", 60)
|
|
stats.set_int(MPX() .. "FIXERTELEPHONEHITSCOMPL", 10)
|
|
stats.set_int(MPX() .. "PAYPHONE_BONUS_KILL_METHOD", 10)
|
|
stats.set_int(MPX() .. "PAYPHONE_BONUS_KILL_METHOD", -1)
|
|
stats.set_int(MPX() .. "FIXER_GENERAL_BS", -1)
|
|
stats.set_int(MPX() .. "FIXER_COMPLETED_BS", -1)
|
|
stats.set_int(MPX() .. "FIXER_STORY_BS", -1)
|
|
stats.set_int(MPX() .. "FIXER_STORY_STRAND", -1)
|
|
stats.set_int(MPX() .. "FIXER_STORY_COOLDOWN", -1)
|
|
stats.set_int(MPX() .. "FIXER_COUNT", 510)
|
|
stats.set_int(MPX() .. "FIXER_SC_VEH_RECOVERED", 85)
|
|
stats.set_int(MPX() .. "FIXER_SC_VAL_RECOVERED", 85)
|
|
stats.set_int(MPX() .. "FIXER_SC_GANG_TERMINATED", 85)
|
|
stats.set_int(MPX() .. "FIXER_SC_VIP_RESCUED", 85)
|
|
stats.set_int(MPX() .. "FIXER_SC_ASSETS_PROTECTED", 85)
|
|
stats.set_int(MPX() .. "FIXER_SC_EQ_DESTROYED", 85)
|
|
stats.set_int(MPX() .. "FIXER_EARNINGS", 19734860)
|
|
stats.set_bool(MPX() .. "AWD_TEEING_OFF", true)
|
|
stats.set_bool(MPX() .. "AWD_PARTY_NIGHT", true)
|
|
stats.set_bool(MPX() .. "AWD_BILLIONAIRE_GAMES", true)
|
|
stats.set_bool(MPX() .. "AWD_HOOD_PASS", true)
|
|
stats.set_bool(MPX() .. "AWD_STUDIO_TOUR", true)
|
|
stats.set_bool(MPX() .. "AWD_DONT_MESS_DRE", true)
|
|
stats.set_bool(MPX() .. "AWD_BACKUP", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTFRANK_1", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTFRANK_2", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTFRANK_3", true)
|
|
stats.set_bool(MPX() .. "AWD_CONTR_KILLER", true)
|
|
stats.set_bool(MPX() .. "AWD_DOGS_BEST_FRIEND", true)
|
|
stats.set_bool(MPX() .. "AWD_MUSIC_STUDIO", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTLAMAR_1", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTLAMAR_2", true)
|
|
stats.set_bool(MPX() .. "AWD_SHORTLAMAR_3", true)
|
|
stats.set_bool(MPX() .. "BS_FRANKLIN_DIALOGUE_0", true)
|
|
stats.set_bool(MPX() .. "BS_FRANKLIN_DIALOGUE_1", true)
|
|
stats.set_bool(MPX() .. "BS_FRANKLIN_DIALOGUE_2", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_SETUP", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_STRAND", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_PARTY", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_PARTY_2", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_PARTY_F", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_BILL", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_BILL_2", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_BILL_F", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_HOOD", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_HOOD_2", true)
|
|
stats.set_bool(MPX() .. "BS_IMANI_D_APP_HOOD_F", true)
|
|
for j = 0, 63 do
|
|
stats.set_bool_masked(MPX() .. "FIXERPSTAT_BOOL0", true, j)
|
|
stats.set_bool_masked(MPX() .. "FIXERPSTAT_BOOL1", true, j)
|
|
stats.set_bool_masked(MPX() .. "FIXERTATTOOSTAT_BOOL0", true, j)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
FAUT = RecoveryMenu:add_tab("Full Account Unlock Menu")
|
|
|
|
ensureOnlineGuard(FAUT)
|
|
|
|
FAUT:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
|
|
if ImGui.Button("Unlock WM 29 Pistol") then
|
|
script.run_in_fiber(function(WM29)
|
|
script.execute_as_script("shop_controller", function()
|
|
if NETSHOPPING.NET_GAMESERVER_BASKET_IS_ACTIVE() then
|
|
NETSHOPPING.NET_GAMESERVER_BASKET_END()
|
|
end
|
|
local state, id = NETSHOPPING.NET_GAMESERVER_BEGIN_SERVICE(
|
|
-1,
|
|
joaat("CATEGORY_WEAPON"),
|
|
joaat("WP_WT_PISTOLXM3_t0_v0"),
|
|
joaat("NET_SHOP_ACTION_SPEND"),
|
|
0,
|
|
4
|
|
)
|
|
if state then
|
|
NETSHOPPING.NET_GAMESERVER_CHECKOUT_START(id)
|
|
gui.show_message("WM29", "WM29 is now Unlocked Change Session To Apply Changes.")
|
|
end
|
|
end)
|
|
end)
|
|
end
|
|
|
|
if ImGui.Button("Unlock The Shocker") then
|
|
script.run_in_fiber(function(THESHOCKER)
|
|
script.execute_as_script("shop_controller", function()
|
|
if NETSHOPPING.NET_GAMESERVER_BASKET_IS_ACTIVE() then
|
|
NETSHOPPING.NET_GAMESERVER_BASKET_END()
|
|
end
|
|
local state, id = NETSHOPPING.NET_GAMESERVER_BEGIN_SERVICE(
|
|
-1,
|
|
joaat("CATEGORY_WEAPON"),
|
|
joaat("WP_WT_STUNROD_t1_v1"),
|
|
joaat("NET_SHOP_ACTION_SPEND"),
|
|
0,
|
|
4
|
|
)
|
|
if state then
|
|
NETSHOPPING.NET_GAMESERVER_CHECKOUT_START(id)
|
|
gui.show_message("The Shocker", "The Shocker is now Unlocked Change Session To Apply Changes.")
|
|
end
|
|
end)
|
|
end)
|
|
end
|
|
|
|
if ImGui.Button("Unlock The Snowball Launcher") then
|
|
script.run_in_fiber(function(SNOWBALLLAUNCHER)
|
|
script.execute_as_script("shop_controller", function()
|
|
if NETSHOPPING.NET_GAMESERVER_BASKET_IS_ACTIVE() then
|
|
NETSHOPPING.NET_GAMESERVER_BASKET_END()
|
|
end
|
|
local state, id = NETSHOPPING.NET_GAMESERVER_BEGIN_SERVICE(
|
|
-1,
|
|
joaat("CATEGORY_WEAPON"),
|
|
joaat("WP_WT_SNOWLAUNCHER_t0_v0"),
|
|
joaat("NET_SHOP_ACTION_SPEND"),
|
|
0,
|
|
4
|
|
)
|
|
if state then
|
|
NETSHOPPING.NET_GAMESERVER_CHECKOUT_START(id)
|
|
gui.show_message(
|
|
"Snowball Launcher",
|
|
"Snowball Launcher is now Unlocked Change Session To Apply Changes."
|
|
)
|
|
end
|
|
end)
|
|
end)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CSU = FAUT:add_tab("Character's Stats")
|
|
|
|
CSU:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
if ImGui.Button("Max Character Skills") then
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_DRIV", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_FLY", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_LUNG", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_SHO", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STAM", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STL", 100)
|
|
stats.set_int(MPX() .. "SCRIPT_INCREASE_STRN", 100)
|
|
gui.show_message("Character Skills", "Your Character Skills Is Maxxed Out.")
|
|
end
|
|
end)
|
|
|
|
AcMenu = CSU:add_tab("Achievements")
|
|
|
|
Acv0 = false
|
|
AG = 4525223 + 1 --("CHEAT_ACHIEVE")
|
|
|
|
AcMenu:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
if ImGui.Button("Unlock All Achievements") then
|
|
script.run_in_fiber(function(script)
|
|
for i = 0, 77 do
|
|
script:sleep(200)
|
|
globals.set_int(AG, i)
|
|
if i == 77 then
|
|
gui.show_message("Achievements", "Unlocked 77 Achievements")
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
AcMMenu = AcMenu:add_tab("One By One Menu")
|
|
|
|
AcMMenu:add_button("Welcome to Los Santos", function()
|
|
globals.set_int(AG, 1)
|
|
end)
|
|
AcMMenu:add_button("A Friendship Resurrected", function()
|
|
globals.set_int(AG, 2)
|
|
end)
|
|
AcMMenu:add_button("A Fair Day's Pay", function()
|
|
globals.set_int(AG, 3)
|
|
end)
|
|
AcMMenu:add_button("The Moment of Truth", function()
|
|
globals.set_int(AG, 4)
|
|
end)
|
|
AcMMenu:add_button("To Live or Die in Los Santos", function()
|
|
globals.set_int(AG, 5)
|
|
end)
|
|
AcMMenu:add_button("Diamond Hard", function()
|
|
globals.set_int(AG, 6)
|
|
end)
|
|
AcMMenu:add_button("Subversive", function()
|
|
globals.set_int(AG, 7)
|
|
end)
|
|
AcMMenu:add_button("Blitzed", function()
|
|
globals.set_int(AG, 8)
|
|
end)
|
|
AcMMenu:add_button("Small Town, Big Job", function()
|
|
globals.set_int(AG, 9)
|
|
end)
|
|
AcMMenu:add_button("The Government Gimps", function()
|
|
globals.set_int(AG, 10)
|
|
end)
|
|
AcMMenu:add_button("The Big One!", function()
|
|
globals.set_int(AG, 11)
|
|
end)
|
|
AcMMenu:add_button("Solid Gold, Baby!", function()
|
|
globals.set_int(AG, 12)
|
|
end)
|
|
AcMMenu:add_button("Career Criminal", function()
|
|
globals.set_int(AG, 13)
|
|
end)
|
|
AcMMenu:add_button("San Andreas Sightseer", function()
|
|
globals.set_int(AG, 14)
|
|
end)
|
|
AcMMenu:add_button("All's Fare in Love and War", function()
|
|
globals.set_int(AG, 15)
|
|
end)
|
|
AcMMenu:add_button("TP Industries Arms Race", function()
|
|
globals.set_int(AG, 16)
|
|
end)
|
|
AcMMenu:add_button("Multi-Disciplined", function()
|
|
globals.set_int(AG, 17)
|
|
end)
|
|
AcMMenu:add_button("From Beyond the Stars", function()
|
|
globals.set_int(AG, 18)
|
|
end)
|
|
AcMMenu:add_button("A Mystery, Solved", function()
|
|
globals.set_int(AG, 19)
|
|
end)
|
|
AcMMenu:add_button("Waste Management", function()
|
|
globals.set_int(AG, 20)
|
|
end)
|
|
AcMMenu:add_button("Red Mist", function()
|
|
globals.set_int(AG, 21)
|
|
end)
|
|
AcMMenu:add_button("Show Off", function()
|
|
globals.set_int(AG, 22)
|
|
end)
|
|
AcMMenu:add_button("Kifflom!", function()
|
|
globals.set_int(AG, 23)
|
|
end)
|
|
AcMMenu:add_button("Three Man Army", function()
|
|
globals.set_int(AG, 24)
|
|
end)
|
|
AcMMenu:add_button("Out of Your Depth", function()
|
|
globals.set_int(AG, 25)
|
|
end)
|
|
AcMMenu:add_button("Altruist Acolyte", function()
|
|
globals.set_int(AG, 26)
|
|
end)
|
|
AcMMenu:add_button("A Lot of Cheddar", function()
|
|
globals.set_int(AG, 27)
|
|
end)
|
|
AcMMenu:add_button("Trading Pure Alpha", function()
|
|
globals.set_int(AG, 28)
|
|
end)
|
|
AcMMenu:add_button("Pimp My Sidearm", function()
|
|
globals.set_int(AG, 29)
|
|
end)
|
|
AcMMenu:add_button("Wanted:Alive Or Alive", function()
|
|
globals.set_int(AG, 30)
|
|
end)
|
|
AcMMenu:add_button("Los Santos Customs", function()
|
|
globals.set_int(AG, 31)
|
|
end)
|
|
AcMMenu:add_button("Close Shave", function()
|
|
globals.set_int(AG, 32)
|
|
end)
|
|
AcMMenu:add_button("Off the Plane", function()
|
|
globals.set_int(AG, 33)
|
|
end)
|
|
AcMMenu:add_button("Three-Bit Gangster", function()
|
|
globals.set_int(AG, 34)
|
|
end)
|
|
AcMMenu:add_button("Making Moves", function()
|
|
globals.set_int(AG, 35)
|
|
end)
|
|
AcMMenu:add_button("Above the Law", function()
|
|
globals.set_int(AG, 36)
|
|
end)
|
|
AcMMenu:add_button("Numero Uno", function()
|
|
globals.set_int(AG, 37)
|
|
end)
|
|
AcMMenu:add_button("The Midnight Club", function()
|
|
globals.set_int(AG, 38)
|
|
end)
|
|
AcMMenu:add_button("Unnatural Selection", function()
|
|
globals.set_int(AG, 39)
|
|
end)
|
|
AcMMenu:add_button("Backseat Driver", function()
|
|
globals.set_int(AG, 40)
|
|
end)
|
|
AcMMenu:add_button("Run Like The Wind", function()
|
|
globals.set_int(AG, 41)
|
|
end)
|
|
AcMMenu:add_button("Clean Sweep", function()
|
|
globals.set_int(AG, 42)
|
|
end)
|
|
AcMMenu:add_button("Decorated", function()
|
|
globals.set_int(AG, 43)
|
|
end)
|
|
AcMMenu:add_button("Stick Up Kid", function()
|
|
globals.set_int(AG, 44)
|
|
end)
|
|
AcMMenu:add_button("Enjoy Your Stay", function()
|
|
globals.set_int(AG, 45)
|
|
end)
|
|
AcMMenu:add_button("Crew Cut", function()
|
|
globals.set_int(AG, 46)
|
|
end)
|
|
AcMMenu:add_button("Full Refund", function()
|
|
globals.set_int(AG, 47)
|
|
end)
|
|
AcMMenu:add_button("Dialling Digits", function()
|
|
globals.set_int(AG, 48)
|
|
end)
|
|
AcMMenu:add_button("American Dream", function()
|
|
globals.set_int(AG, 49)
|
|
end)
|
|
AcMMenu:add_button("A New Perspective", function()
|
|
globals.set_int(AG, 50)
|
|
end)
|
|
AcMMenu:add_button("Be Prepared", function()
|
|
globals.set_int(AG, 51)
|
|
end)
|
|
AcMMenu:add_button("In the Name of Science", function()
|
|
globals.set_int(AG, 52)
|
|
end)
|
|
AcMMenu:add_button("Dead Presidents", function()
|
|
globals.set_int(AG, 53)
|
|
end)
|
|
AcMMenu:add_button("Parole Day", function()
|
|
globals.set_int(AG, 54)
|
|
end)
|
|
AcMMenu:add_button("Shot Caller", function()
|
|
globals.set_int(AG, 55)
|
|
end)
|
|
AcMMenu:add_button("Four Way", function()
|
|
globals.set_int(AG, 56)
|
|
end)
|
|
AcMMenu:add_button("Live a Little", function()
|
|
globals.set_int(AG, 57)
|
|
end)
|
|
AcMMenu:add_button("Can't Touch This", function()
|
|
globals.set_int(AG, 58)
|
|
end)
|
|
AcMMenu:add_button("Mastermind", function()
|
|
globals.set_int(AG, 59)
|
|
end)
|
|
AcMMenu:add_button("Vinewood Visionary", function()
|
|
globals.set_int(AG, 60)
|
|
end)
|
|
AcMMenu:add_button("Majestic", function()
|
|
globals.set_int(AG, 61)
|
|
end)
|
|
AcMMenu:add_button("Humans of Los Santos", function()
|
|
globals.set_int(AG, 62)
|
|
end)
|
|
AcMMenu:add_button("First Time Director", function()
|
|
globals.set_int(AG, 63)
|
|
end)
|
|
AcMMenu:add_button("Animal Lover", function()
|
|
globals.set_int(AG, 64)
|
|
end)
|
|
AcMMenu:add_button("Ensemble Piece", function()
|
|
globals.set_int(AG, 65)
|
|
end)
|
|
AcMMenu:add_button("Cult Movie", function()
|
|
globals.set_int(AG, 66)
|
|
end)
|
|
AcMMenu:add_button("Location Scout", function()
|
|
globals.set_int(AG, 67)
|
|
end)
|
|
AcMMenu:add_button("Method Actor", function()
|
|
globals.set_int(AG, 68)
|
|
end)
|
|
AcMMenu:add_button("Cryptozoologist", function()
|
|
globals.set_int(AG, 69)
|
|
end)
|
|
AcMMenu:add_button("Getting Started", function()
|
|
globals.set_int(AG, 70)
|
|
end)
|
|
AcMMenu:add_button("The Data Breaches", function()
|
|
globals.set_int(AG, 71)
|
|
end)
|
|
AcMMenu:add_button("The Bogdan Problem", function()
|
|
globals.set_int(AG, 72)
|
|
end)
|
|
AcMMenu:add_button("The Doomsday Scenario", function()
|
|
globals.set_int(AG, 73)
|
|
end)
|
|
AcMMenu:add_button("A World Worth Saving", function()
|
|
globals.set_int(AG, 74)
|
|
end)
|
|
AcMMenu:add_button("Orbital Obliteration", function()
|
|
globals.set_int(AG, 75)
|
|
end)
|
|
AcMMenu:add_button("Elitist", function()
|
|
globals.set_int(AG, 76)
|
|
end)
|
|
AcMMenu:add_button("Masterminds", function()
|
|
globals.set_int(AG, 77)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local current_objectives_global = 2359296 --("am_challenges")
|
|
local weekly_objectives_global = 2732111 --("am_challenges")
|
|
local objectives_state_global = 1574746 --("am_challenges")
|
|
|
|
FAUT:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
if ImGui.Button("Complete All Daily & Weekly Challenges") then
|
|
script.run_in_fiber(function(script)
|
|
for i = 0, 2 do --Unlock all daily rewards.
|
|
local objective =
|
|
globals.get_int(current_objectives_global + (1 + (0 * 5574)) + 681 + 4248 + (1 + (i * 3)))
|
|
globals.set_int(objectives_state_global + 1 + (1 + (i * 1)), objective)
|
|
end
|
|
globals.set_int(objectives_state_global, 1)
|
|
globals.set_int(
|
|
weekly_objectives_global + (1 + (0 * 6)) + 1,
|
|
globals.get_int(weekly_objectives_global + (1 + (0 * 6)) + 2)
|
|
) --Unlock Weekly Objective
|
|
gui.show_message("Challenges", "All Daily And Weekly Challenges Are Now Completed.")
|
|
end)
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
LSCMUnlockeRecoveryMenu = makeOnlineTab(RecoveryMenu:add_tab("LSCM Unlocker Menu"))
|
|
|
|
LSCMUnlockeRecoveryMenu:add_button("Unlock All Rep Lvl 1000", function()
|
|
for i = FMg + 31047, FMg + 31076 do
|
|
globals.set_float(i, 100000)
|
|
end
|
|
gui.show_message(
|
|
"LSCM",
|
|
"LVL 1000 Activated Just Sit In The Test Drive Vehicle And Enter LSCM Track To See The Changes."
|
|
)
|
|
end)
|
|
|
|
LSCMUnlockeRecoveryMenu:add_button("LSCM Prize Ride Unlock", function()
|
|
stats.set_bool(MPX() .. "CARMEET_PV_CHLLGE_CMPLT", true)
|
|
stats.set_bool(MPX() .. "CARMEET_PV_CLMED", false)
|
|
gui.show_message("LSCM", "Your Prize Car Is Now Unlocked.")
|
|
end)
|
|
|
|
LSCMUnlockeRecoveryMenu:add_button("Unlock Trade Prices for Headlights", function()
|
|
stats_set_packed_bools(24980, 24991, true)
|
|
gui.show_message("LSCM", "Trade Prices For Headlights Are Now Unlocked.")
|
|
end)
|
|
|
|
LSCMNote = LSCMUnlockeRecoveryMenu:add_tab("Read Me Tutorial")
|
|
|
|
LSCMNote:add_text("Buy a membership, activate, sit in", function() end)
|
|
LSCMNote:add_text("a test car and go to the track", function() end)
|
|
LSCMNote:add_text("", function() end)
|
|
LSCMNote:add_text("If your level is not 1, then activate", function() end)
|
|
LSCMNote:add_text("and buy something in the LSCM store", function() end)
|
|
LSCMNote:add_text("", function() end)
|
|
LSCMNote:add_text("If you've used LS Tuner awards unlock", function() end)
|
|
LSCMNote:add_text("before, all unlocks will be temporary only", function() end)
|
|
LSCMNote:add_text("", function() end)
|
|
LSCMNote:add_text("--- Manual Online Override ---", function() end)
|
|
LSCMNote:add_text("To manually set/bypass the online state,", function() end)
|
|
LSCMNote:add_text("toggle 'Bypass Online Check' in the main tab.", function() end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
L7NEG7 = makeOnlineTab(L7NEG:add_tab("Ultimate Money Methods Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
BusinessesMenu = makeOnlineTab(L7NEG7:add_tab("Businesses Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
AirCargoMenu = makeOnlineTab(BusinessesMenu:add_tab("Air Cargo Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CARGO1 = FMg + 22581
|
|
CARGO2 = FMg + 22582
|
|
CARGO3 = FMg + 22583
|
|
CARGO4 = FMg + 22584
|
|
CARGO5 = FMg + 22585
|
|
CARGO6 = FMg + 22586
|
|
CARGO7 = FMg + 22587
|
|
CARGO8 = FMg + 22588
|
|
CARGO9 = FMg + 22589
|
|
|
|
local hanvalue = AirCargoMenu:add_input_int("Crate Value")
|
|
|
|
AirCargoMenu:add_button("Set Value", function()
|
|
local HangarCrateVlaue = hanvalue:get_value()
|
|
globals.set_int(CARGO1, HangarCrateVlaue)
|
|
globals.set_int(CARGO2, HangarCrateVlaue)
|
|
globals.set_int(CARGO3, HangarCrateVlaue)
|
|
globals.set_int(CARGO4, HangarCrateVlaue)
|
|
globals.set_int(CARGO5, HangarCrateVlaue)
|
|
globals.set_int(CARGO6, HangarCrateVlaue)
|
|
globals.set_int(CARGO7, HangarCrateVlaue)
|
|
globals.set_int(CARGO8, HangarCrateVlaue)
|
|
globals.set_int(CARGO9, HangarCrateVlaue)
|
|
gui.show_message("Crate Value Setter", "Your Crates Values was set to " .. HangarCrateVlaue .. ".")
|
|
end)
|
|
|
|
AirCargoMenu:add_separator()
|
|
|
|
RCRT = AirCargoMenu:add_checkbox("Remove Ron's Cut")
|
|
script.register_looped("RonCutRemover", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if RCRT:is_enabled() then
|
|
globals.set_float(FMg + 22564, 0)
|
|
else
|
|
globals.set_float(FMg + 22564, 0.025)
|
|
end
|
|
end)
|
|
|
|
AirCargoMenu:add_separator()
|
|
|
|
PRPGD = AirCargoMenu:add_checkbox("Disable Player RP Gain")
|
|
script.register_looped("PlayerRPGainDisabler", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if PRPGD:is_enabled() then
|
|
globals.set_float(FMg + 1, 0)
|
|
else
|
|
globals.set_float(FMg + 1, 1)
|
|
end
|
|
end)
|
|
|
|
AirCargoMenu:add_separator()
|
|
|
|
AirCargoMenu:add_button("Open Hangar Screen", function()
|
|
SCRIPT.REQUEST_SCRIPT("apparcadebusinesshub")
|
|
SYSTEM.START_NEW_SCRIPT("apparcadebusinesshub", 8344)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
AirCargoEditorMenu = makeOnlineTab(AirCargoMenu:add_tab("Air Cargo Data Editor"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
AirCargoEditorMenu:add_button("Reset Crate Sell Stats-0/0 Sales", function()
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_BUY_COMPLET", 0)
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_BUY_UNDERTAK", 0)
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_SEL_COMPLET", 0)
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_SEL_UNDERTAK", 0)
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_EARNINGS", 0)
|
|
stats.set_int(MPX() .. "HANGAR_CONTRABAND_TOTAL", 0)
|
|
stats.set_int(MPX() .. "LFETIME_HANGAR_EARN_BONUS", 0)
|
|
stats.set_int(MPX() .. "RIVAL_HANGAR_CRATES_STOLEN", 0)
|
|
globals.set_int(CSg1, 11)
|
|
globals.set_int(CSg2, 1)
|
|
globals.set_int(CSg2, 0)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
UseAtYourOwnRiskMenu = makeOnlineTab(L7NEG7:add_tab("Use At Your Own Risk Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CeoManagerMenu = makeOnlineTab(UseAtYourOwnRiskMenu:add_tab("Ceo Manager Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CEO1 = FMg + 15821 --("EXEC_CONTRABAND_SALE_VALUE_THRESHOLD1")
|
|
CEO2 = FMg + 15588 --("EXEC_BUY_COOLDOWN")
|
|
CEO3 = FMg + 15589 --("EXEC_SELL_COOLDOWN")
|
|
SMC1 = 574 + 1 --("gb_contraband_sell")
|
|
SMC2 = 574 + 7 --("gb_contraband_sell")
|
|
SMC3 = 574 + 584 --("gb_contraband_sell")
|
|
SMC4 = 574 + 55 --("gb_contraband_sell")
|
|
SMC5 = 574 + 595 --("gb_contraband_sell")
|
|
SMC6 = 589 --("Popup_Confirm_Success") in ("appsecuroserv")
|
|
SMC7 = 770 --("MP_WH_SELL") or ("WH_MFREASON_12") in ("appsecuroserv")
|
|
SMC8 = 771 --("MP_WH_SELL") or ("WH_MFREASON_12") in ("appsecuroserv")
|
|
SMC9 = 632 + 5 --("SPEECH_PARAMS_SHOUTED_CRITICAL") in ("gb_contraband_buy")
|
|
SMC10 = 632 + 1 --func_91() in ("gb_contraband_buy")
|
|
SMC11 = 632 + 191 --("gb_contraband_buy")
|
|
SMC12 = 632 + 192 --("gb_contraband_buy")
|
|
|
|
local cs = "appsecuroserv"
|
|
|
|
local ci = "gb_contraband_sell"
|
|
|
|
local cb = "gb_contraband_buy"
|
|
|
|
local am = "am_mp_warehouse"
|
|
|
|
local am2 = "am_mp_peds"
|
|
|
|
cratevalue = 0
|
|
CeoManagerMenu:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
cratevalue, used = ImGui.DragInt("Crate Value", cratevalue, 10000, 0, 6000000)
|
|
if used then
|
|
globals.set_int(CEO1, cratevalue)
|
|
end
|
|
end)
|
|
|
|
checkbox = CeoManagerMenu:add_checkbox("Start Ceo Manager")
|
|
|
|
PRPGD = CeoManagerMenu:add_checkbox("Disable Player RP Gain")
|
|
script.register_looped("PlayerRPGainDisabler", function(script)
|
|
script:yield()
|
|
if PRPGD:is_enabled() then
|
|
globals.set_float(FMg + 1, 0)
|
|
else
|
|
globals.set_float(FMg + 1, 1)
|
|
end
|
|
end)
|
|
|
|
CeoManagerMenu:add_button("Open Warehouse Screen", function()
|
|
SCRIPT.REQUEST_SCRIPT("apparcadebusinesshub")
|
|
SYSTEM.START_NEW_SCRIPT("apparcadebusinesshub", 8344)
|
|
end)
|
|
|
|
script.register_looped("yimceoloop", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
-- removed useless call
|
|
globals.set_int(CEO2, 0)
|
|
globals.set_int(CEO3, 0)
|
|
|
|
if checkbox:is_enabled() == true then
|
|
if locals.get_int(ci, 2) == 1 then
|
|
locals.set_int(ci, SMC5, 1)
|
|
locals.set_int(ci, SMC4, 0)
|
|
locals.set_int(ci, SMC3, 0)
|
|
locals.set_int(ci, SMC2, 7)
|
|
script:sleep(500)
|
|
locals.set_int(ci, SMC1, 99999)
|
|
end
|
|
if locals.get_int(cs, 2) == 1 then
|
|
script:sleep(500)
|
|
locals.set_int(cs, SMC8, 1)
|
|
script:sleep(200)
|
|
locals.set_int(cs, SMC7, 1)
|
|
script:sleep(200)
|
|
locals.set_int(cs, SMC6, 3012)
|
|
script:sleep(1000)
|
|
end
|
|
if locals.get_int(cb, 2) == 1 then
|
|
locals.set_int(cb, SMC9, 1)
|
|
locals.set_int(cb, SMC10, 111)
|
|
locals.set_int(cb, SMC11, 6)
|
|
locals.set_int(cb, SMC12, 4)
|
|
gui.show_message("Your Warehouse is now full! 111/111 Crates")
|
|
end
|
|
if locals.get_int(ci, 2) ~= 1 then
|
|
script:sleep(500)
|
|
if locals.get_int(am, 2) == 1 then
|
|
SCRIPT.REQUEST_SCRIPT("appsecuroserv")
|
|
SYSTEM.START_NEW_SCRIPT("appsecuroserv", 8344)
|
|
SCRIPT.SET_SCRIPT_AS_NO_LONGER_NEEDED("appsecuroserv")
|
|
end
|
|
end
|
|
end
|
|
script:sleep(500)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
NightClubSafeMenu = makeOnlineTab(UseAtYourOwnRiskMenu:add_tab("NightClub Safe Loop Menu"))
|
|
|
|
SafeAmount = 300000
|
|
SafeCapacity = 23769 --NIGHTCLUBMAXSAFEVALUE
|
|
IncomeStart = 23746 --NIGHTCLUBINCOMEUPTOPOP5
|
|
IncomeEnd = 23765 --NIGHTCLUBINCOMEUPTOPOP100
|
|
|
|
NCRSCB = NightClubSafeMenu:add_checkbox("Enable Nitghtclub $300k/5s (Safe Remote AFK)")
|
|
script.register_looped("nightclubremotelooptest", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if NCRSCB:is_enabled() == true then
|
|
SafeValue = 1845298 + self.get_id() + 260 + 364 + 5 --("am_mp_nightclub") or we can just use TUNEABLE: NIGHTCLUBMAXSAFEVALUE
|
|
for i = IncomeStart, IncomeEnd do
|
|
globals.set_int(FMg + i, SafeAmount)
|
|
end
|
|
globals.set_int(FMg + SafeCapacity, SafeAmount)
|
|
stats.set_int(MPX() .. "CLUB_PAY_TIME_LEFT", -1)
|
|
script:sleep(2500)
|
|
if globals.get_int(SafeValue) ~= 0 then
|
|
end
|
|
locals.set_int("am_mp_nightclub", NLCl, 1)
|
|
globals.set_int(4516981, 0)
|
|
globals.set_int(4516982, 0)
|
|
globals.set_int(4516983, 0)
|
|
script:sleep(2500)
|
|
end
|
|
end)
|
|
|
|
NightClubSafeMenu:add_separator()
|
|
|
|
NightClubSafeMenu:add_button("Open Nightclub Screen", function()
|
|
SYSTEM.START_NEW_SCRIPT("appBusinessHub", 1424)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local GVMENU = makeOnlineTab(L7NEG:add_tab("Gun Van Menu "))
|
|
|
|
-- Rainbow color function
|
|
function gunvan_rainbow_color(offset)
|
|
local time = os.clock() * 2
|
|
local r = math.sin(time + offset) * 0.5 + 0.5
|
|
local g = math.sin(time + offset + 2.094) * 0.5 + 0.5
|
|
local b = math.sin(time + offset + 4.188) * 0.5 + 0.5
|
|
return r, g, b, 1.0
|
|
end
|
|
|
|
-- Help marker function with rainbow colored icon
|
|
function gunvan_help_marker(text)
|
|
ImGui.SameLine()
|
|
local r, g, b, a = gunvan_rainbow_color(0)
|
|
ImGui.PushStyleColor(ImGuiCol.Text, r, g, b, a)
|
|
ImGui.Text("[?]")
|
|
ImGui.PopStyleColor()
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.BeginTooltip()
|
|
ImGui.PushTextWrapPos(ImGui.GetFontSize() * 35)
|
|
ImGui.TextUnformatted(text)
|
|
ImGui.PopTextWrapPos()
|
|
ImGui.EndTooltip()
|
|
end
|
|
end
|
|
|
|
local gunvan_locations = {
|
|
vec3:new(-29.532, 6435.136, 31.162),
|
|
vec3:new(1705.214, 4819.167, 41.75),
|
|
vec3:new(1795.522, 3899.753, 33.869),
|
|
vec3:new(1335.536, 2758.746, 51.099),
|
|
vec3:new(795.583, 1210.78, 338.962),
|
|
vec3:new(-3192.67, 1077.205, 20.594),
|
|
vec3:new(-789.719, 5400.921, 33.915),
|
|
vec3:new(-24.384, 3048.167, 40.703),
|
|
vec3:new(2666.786, 1469.324, 24.237),
|
|
vec3:new(-1454.966, 2667.503, 3.2),
|
|
vec3:new(2340.418, 3054.188, 47.888),
|
|
vec3:new(1509.183, -2146.795, 76.853),
|
|
vec3:new(1137.404, -1358.654, 34.322),
|
|
vec3:new(-57.208, -2658.793, 5.737),
|
|
vec3:new(1905.017, 565.222, 175.558),
|
|
vec3:new(974.484, -1718.798, 30.296),
|
|
vec3:new(779.077, -3266.297, 5.719),
|
|
vec3:new(-587.728, -1637.208, 19.611),
|
|
vec3:new(733.99, -736.803, 26.165),
|
|
vec3:new(-1694.632, -454.082, 40.712),
|
|
vec3:new(-1330.726, -1163.948, 4.313),
|
|
vec3:new(-496.618, 40.231, 52.316),
|
|
vec3:new(275.527, 66.509, 94.108),
|
|
vec3:new(260.928, -763.35, 30.559),
|
|
vec3:new(-478.025, -741.45, 30.299),
|
|
vec3:new(894.94, 3603.911, 32.56),
|
|
vec3:new(-2166.511, 4289.503, 48.733),
|
|
vec3:new(1465.633, 6553.67, 13.771),
|
|
vec3:new(1101.032, -335.172, 66.944),
|
|
vec3:new(149.683, -1655.674, 29.028),
|
|
}
|
|
|
|
local van_locations = {
|
|
"Paleto Bay - 1",
|
|
"Grapeseed - 2",
|
|
"Sandy Shores - 3",
|
|
"Grand Senora - 4",
|
|
"Vinewood Hills - 5",
|
|
"Chumash - 6",
|
|
"Paleto Forest - 7",
|
|
"Zancudo River - 8",
|
|
"Power Station - 9",
|
|
"Lago Zancudo - 10",
|
|
"Grand Senora - 11",
|
|
"El Burro Heights - 12",
|
|
"Murrieta Heights - 13",
|
|
"Elysian Island - 14",
|
|
"Tataviam - 15",
|
|
"La Mesa - 16",
|
|
"Terminal - 17",
|
|
"La Puerta - 18",
|
|
"La Mesa - 19",
|
|
"Del Perro - 20",
|
|
"Magellan Ave - 21",
|
|
"West Vinewood - 22",
|
|
"Downtown Vinewood - 23",
|
|
"Pillbox Hill - 24",
|
|
"Little Seoul - 25",
|
|
"Alamo Sea - 26",
|
|
"North Chumash - 27",
|
|
"Mount Chiliad - 28",
|
|
"Mirror Park - 29",
|
|
"Davis - 30",
|
|
}
|
|
|
|
local weapons_data = {
|
|
"WEAPON_KNIFE",
|
|
"WEAPON_NIGHTSTICK",
|
|
"WEAPON_HAMMER",
|
|
"WEAPON_BOTTLE",
|
|
"WEAPON_DAGGER",
|
|
"WEAPON_KNUCKLE",
|
|
"WEAPON_MACHETE",
|
|
"WEAPON_FLASHLIGHT",
|
|
"WEAPON_SWITCHBLADE",
|
|
"WEAPON_BATTLEAXE",
|
|
"WEAPON_POOLCUE",
|
|
"WEAPON_WRENCH",
|
|
"WEAPON_HATCHET",
|
|
"WEAPON_BAT",
|
|
"WEAPON_CROWBAR",
|
|
"WEAPON_STUNROD",
|
|
"WEAPON_PISTOL",
|
|
"WEAPON_PISTOL_MK2",
|
|
"WEAPON_COMBATPISTOL",
|
|
"WEAPON_APPISTOL",
|
|
"WEAPON_PISTOL50",
|
|
"WEAPON_SNSPISTOL",
|
|
"WEAPON_SNSPISTOL_MK2",
|
|
"WEAPON_HEAVYPISTOL",
|
|
"WEAPON_VINTAGEPISTOL",
|
|
"WEAPON_FLAREGUN",
|
|
"WEAPON_MARKSMANPISTOL",
|
|
"WEAPON_REVOLVER",
|
|
"WEAPON_REVOLVER_MK2",
|
|
"WEAPON_DOUBLEACTION",
|
|
"WEAPON_RAYPISTOL",
|
|
"WEAPON_CERAMICPISTOL",
|
|
"WEAPON_NAVYREVOLVER",
|
|
"WEAPON_GADGETPISTOL",
|
|
"WEAPON_STUNGUN_MP",
|
|
"WEAPON_MICROSMG",
|
|
"WEAPON_SMG",
|
|
"WEAPON_SMG_MK2",
|
|
"WEAPON_ASSAULTSMG",
|
|
"WEAPON_COMBATPDW",
|
|
"WEAPON_MACHINEPISTOL",
|
|
"WEAPON_MINISMG",
|
|
"WEAPON_MG",
|
|
"WEAPON_COMBATMG",
|
|
"WEAPON_COMBATMG_MK2",
|
|
"WEAPON_GUSENBERG",
|
|
"WEAPON_RAYCARBINE",
|
|
"WEAPON_ASSAULTRIFLE",
|
|
"WEAPON_ASSAULTRIFLE_MK2",
|
|
"WEAPON_CARBINERIFLE",
|
|
"WEAPON_CARBINERIFLE_MK2",
|
|
"WEAPON_ADVANCEDRIFLE",
|
|
"WEAPON_SPECIALCARBINE",
|
|
"WEAPON_SPECIALCARBINE_MK2",
|
|
"WEAPON_BULLPUPRIFLE",
|
|
"WEAPON_BULLPUPRIFLE_MK2",
|
|
"WEAPON_COMPACTRIFLE",
|
|
"WEAPON_MILITARYRIFLE",
|
|
"WEAPON_HEAVYRIFLE",
|
|
"WEAPON_TACTICALRIFLE",
|
|
"WEAPON_PUMPSHOTGUN",
|
|
"WEAPON_PUMPSHOTGUN_MK2",
|
|
"WEAPON_SAWNOFFSHOTGUN",
|
|
"WEAPON_ASSAULTSHOTGUN",
|
|
"WEAPON_BULLPUPSHOTGUN",
|
|
"WEAPON_MUSKET",
|
|
"WEAPON_HEAVYSHOTGUN",
|
|
"WEAPON_DBSHOTGUN",
|
|
"WEAPON_AUTOSHOTGUN",
|
|
"WEAPON_COMBATSHOTGUN",
|
|
"WEAPON_SNIPERRIFLE",
|
|
"WEAPON_HEAVYSNIPER",
|
|
"WEAPON_HEAVYSNIPER_MK2",
|
|
"WEAPON_MARKSMANRIFLE",
|
|
"WEAPON_MARKSMANRIFLE_MK2",
|
|
"WEAPON_PRECISIONRIFLE",
|
|
"WEAPON_GRENADELAUNCHER",
|
|
"WEAPON_RPG",
|
|
"WEAPON_MINIGUN",
|
|
"WEAPON_HOMINGLAUNCHER",
|
|
"WEAPON_COMPACTLAUNCHER",
|
|
"WEAPON_RAYMINIGUN",
|
|
"WEAPON_EMPLAUNCHER",
|
|
"WEAPON_RAILGUNXM3",
|
|
"WEAPON_TECPISTOL",
|
|
"WEAPON_FIREWORK",
|
|
"WEAPON_BATTLERIFLE",
|
|
"WEAPON_SNOWLAUNCHER",
|
|
}
|
|
|
|
selected_loc = 0
|
|
selected_slot = 0
|
|
is_typing = false
|
|
weapon_skins = false
|
|
gta_plus_blip = false
|
|
livery_lock = false
|
|
weapon_editor_popup = false
|
|
filter_text = ""
|
|
weapon_name = ""
|
|
|
|
gun_van_loc = 0
|
|
|
|
function render_weapon_editor()
|
|
ImGui.SetNextWindowSize(700, 420)
|
|
ImGui.OpenPopup("Weapon Editor")
|
|
|
|
if
|
|
ImGui.BeginPopupModal(
|
|
"Weapon Editor",
|
|
weapon_editor_popup,
|
|
ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.Modal
|
|
)
|
|
then
|
|
selected_slot =
|
|
ImGui.Combo("Select Slot", selected_slot, { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }, 10)
|
|
|
|
filter_text = ImGui.InputText("Weapon Name", filter_text, 100)
|
|
if ImGui.IsItemActive() then
|
|
is_typing = true
|
|
else
|
|
is_typing = false
|
|
end
|
|
|
|
if ImGui.BeginListBox("##weapons", 450, 200) then
|
|
for index, item in ipairs(weapons_data) do
|
|
local display_name = weapons.get_weapon_display_name(item)
|
|
if string.find(display_name:lower(), filter_text:lower()) then
|
|
if ImGui.Selectable(display_name) then
|
|
filter_text = display_name
|
|
weapon_name = item
|
|
end
|
|
end
|
|
end
|
|
ImGui.EndListBox()
|
|
end
|
|
|
|
if ImGui.Button("Set Weapon") then
|
|
local is_weapon_valid = weapons.get_weapon_display_name(weapon_name) ~= ""
|
|
|
|
if is_weapon_valid then
|
|
tunables.set_int("XM22_GUN_VAN_SLOT_WEAPON_TYPE_" .. selected_slot, joaat(weapon_name))
|
|
else
|
|
gui.show_error("Gun Van", "Invalid weapon.")
|
|
end
|
|
end
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Remove Weapon") then
|
|
tunables.set_int("XM22_GUN_VAN_SLOT_WEAPON_TYPE_" .. selected_slot, 0)
|
|
end
|
|
|
|
if ImGui.Button("Close") then
|
|
selected_slot = 0
|
|
filter_text = ""
|
|
weapon_name = ""
|
|
weapon_editor_popup = false
|
|
ImGui.CloseCurrentPopup()
|
|
end
|
|
|
|
ImGui.EndPopup()
|
|
end
|
|
end
|
|
|
|
script.register_looped("Gun Van", function()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
gun_van_loc = globals.get_int(2652581 + 2706)
|
|
|
|
if is_typing then
|
|
PAD.DISABLE_ALL_CONTROL_ACTIONS(0)
|
|
end
|
|
|
|
if weapon_skins then
|
|
tunables.set_bool(1490225691, false)
|
|
end
|
|
|
|
if livery_lock then
|
|
local value = locals.get_int("gunclub_shop", 206 + 747)
|
|
if value ~= nil then
|
|
value = value | (1 << 8)
|
|
locals.set_int("gunclub_shop", 206 + 747, value)
|
|
end
|
|
end
|
|
|
|
if gta_plus_blip then
|
|
local gun_van_sprite = HUD.GET_FIRST_BLIP_INFO_ID(844)
|
|
|
|
tunables.set_float(15999531, 10000.0)
|
|
if HUD.DOES_BLIP_EXIST(gun_van_sprite) then
|
|
HUD.SET_BLIP_AS_SHORT_RANGE(gun_van_sprite, false)
|
|
end
|
|
end
|
|
end)
|
|
|
|
GVMENU:add_imgui(function()
|
|
if weapon_editor_popup then
|
|
render_weapon_editor()
|
|
end
|
|
|
|
ImGui.Text("Current Location: " .. (gun_van_loc ~= -1 and gun_van_loc + 1 or "N/A"))
|
|
|
|
ImGui.SetNextItemWidth(265)
|
|
selected_loc = ImGui.Combo("##selected_loc", selected_loc, van_locations, 30)
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Set New Gun Van Location") then
|
|
globals.set_int(2652581 + 2706, selected_loc)
|
|
end
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Teleport") then
|
|
script.run_in_fiber(function()
|
|
local coords = gunvan_locations[selected_loc + 1]
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
end)
|
|
end
|
|
|
|
weapon_skins, on_tick = ImGui.Checkbox("Weapon Skins", weapon_skins)
|
|
gunvan_help_marker("Enables the special liveries for Knife and Baseball Bat.")
|
|
|
|
if on_tick then
|
|
if not weapon_skins then
|
|
tunables.set_bool(1490225691, true)
|
|
end
|
|
end
|
|
|
|
livery_lock, on_tick = ImGui.Checkbox("Remove Livery Lock", livery_lock)
|
|
gunvan_help_marker(
|
|
"Removes the hard-coded lock on special weapon liveries, such as Season's Greetings, Employee of the Month etc."
|
|
)
|
|
|
|
if on_tick then
|
|
if not livery_lock then
|
|
local value = locals.get_int("gunclub_shop", 206 + 747)
|
|
if value ~= nil then
|
|
value = value & ~(1 << 8)
|
|
locals.set_int("gunclub_shop", 206 + 747, value)
|
|
end
|
|
end
|
|
end
|
|
|
|
gta_plus_blip, on_tick = ImGui.Checkbox("Blip Always Visible", gta_plus_blip)
|
|
gunvan_help_marker("The Gun Van will always be blipped on the map, just like in GTA+.")
|
|
|
|
if on_tick then
|
|
if not gta_plus_blip then
|
|
tunables.set_float(15999531, 500.0)
|
|
end
|
|
end
|
|
|
|
discount, on_tick = ImGui.Checkbox("Jewish Trade Skills (-10%)", discount)
|
|
gunvan_help_marker("Allows 10% off off any weapon in gun van")
|
|
|
|
if on_tick then
|
|
if discount then
|
|
globals_set_ints(GVADg + 1, GVADg + 9, 1, 1036831744)
|
|
globals_set_ints(GVTDg + 1, GVTDg + 3, 1, 1036831744)
|
|
globals_set_ints(GVWDg + 1, GVWDg + 5, 1, 1036831744)
|
|
else
|
|
globals_set_ints(GVADg + 1, GVADg + 9, 1, 0)
|
|
globals_set_ints(GVTDg + 1, GVTDg + 3, 1, 0)
|
|
globals_set_ints(GVWDg + 1, GVWDg + 5, 1, 0)
|
|
end
|
|
end
|
|
ImGui.Separator()
|
|
|
|
if ImGui.TreeNode("Weapons") then
|
|
for i = 0, 9 do
|
|
local weapon_hash = tunables.get_int("XM22_GUN_VAN_SLOT_WEAPON_TYPE_" .. i)
|
|
|
|
if weapon_hash ~= 0 then
|
|
local weapon_name = weapons.get_weapon_display_name(weapon_hash)
|
|
local weapon_discount =
|
|
math.floor(tunables.get_float("XM22_GUN_VAN_SLOT_WEAPON_DISCOUNT_" .. i) * 100.0)
|
|
|
|
ImGui.Text(i + 1 .. " - " .. weapon_name .. " (" .. weapon_discount .. "%)")
|
|
end
|
|
end
|
|
|
|
if ImGui.Button("Edit Weapons") then
|
|
weapon_editor_popup = true
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.TreePop()
|
|
end
|
|
|
|
if ImGui.TreeNode("Throwables") then
|
|
for i = 0, 2 do
|
|
local throwable_hash = tunables.get_int("XM22_GUN_VAN_SLOT_THROWABLE_TYPE_" .. i)
|
|
|
|
if throwable_hash ~= 0 then
|
|
local throwable_name = weapons.get_weapon_display_name(throwable_hash)
|
|
local throwable_discount =
|
|
math.floor(tunables.get_float("XM22_GUN_VAN_SLOT_THROWABLE_DISCOUNT_" .. i) * 100.0)
|
|
|
|
ImGui.Text(i + 1 .. " - " .. throwable_name .. " (" .. throwable_discount .. "%)")
|
|
end
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.TreePop()
|
|
end
|
|
|
|
if ImGui.TreeNode("Body Armor") then
|
|
local armour_discounts = {}
|
|
|
|
for i = 0, 4 do
|
|
armour_discounts[i + 1] = math.floor(tunables.get_float("XM22_GUN_VAN_SLOT_ARMOUR_DISCOUNT_" .. i) * 100.0)
|
|
end
|
|
|
|
ImGui.Text("Super Light Armor (" .. armour_discounts[1] .. "%)")
|
|
ImGui.Text("Light Armor (" .. armour_discounts[2] .. "%)")
|
|
ImGui.Text("Standard Armor (" .. armour_discounts[3] .. "%)")
|
|
ImGui.Text("Heavy Armor (" .. armour_discounts[4] .. "%)")
|
|
ImGui.Text("Super Heavy Armor (" .. armour_discounts[5] .. "%)")
|
|
|
|
ImGui.TreePop()
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
---@diagnostic disable: undefined-global, lowercase-global
|
|
|
|
SCRIPT_NAME = "YimResupplier"
|
|
local TAGET_BUILD <const> = "3788.0"
|
|
|
|
-- ============================================================================
|
|
-- JSON LIBRARY (rxi's json.lua)
|
|
-- ============================================================================
|
|
function JSON()
|
|
local json = { _version = "0.1.2" }
|
|
local encode
|
|
local escape_char_map = {
|
|
["\\"] = "\\",
|
|
['"'] = '"',
|
|
["\b"] = "b",
|
|
["\f"] = "f",
|
|
["\n"] = "n",
|
|
["\r"] = "r",
|
|
["\t"] = "t",
|
|
}
|
|
|
|
local escape_char_map_inv = { ["/"] = "/" }
|
|
for k, v in pairs(escape_char_map) do
|
|
escape_char_map_inv[v] = k
|
|
end
|
|
|
|
function escape_char(c)
|
|
return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
|
|
end
|
|
|
|
function encode_nil(val)
|
|
return "null"
|
|
end
|
|
|
|
function encode_table(val, stack)
|
|
local res = {}
|
|
stack = stack or {}
|
|
if stack[val] then
|
|
error("circular reference")
|
|
end
|
|
|
|
stack[val] = true
|
|
|
|
if rawget(val, 1) ~= nil or next(val) == nil then
|
|
local n = 0
|
|
for k in pairs(val) do
|
|
if type(k) ~= "number" then
|
|
error("invalid table: mixed or invalid key types")
|
|
end
|
|
n = n + 1
|
|
end
|
|
if n ~= #val then
|
|
error("invalid table: sparse array")
|
|
end
|
|
for i, v in ipairs(val) do
|
|
table.insert(res, encode(v, stack))
|
|
end
|
|
stack[val] = nil
|
|
return "[" .. table.concat(res, ",") .. "]"
|
|
else
|
|
for k, v in pairs(val) do
|
|
if type(k) ~= "string" then
|
|
error("invalid table: mixed or invalid key types")
|
|
end
|
|
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
|
|
end
|
|
stack[val] = nil
|
|
return "{" .. table.concat(res, ",") .. "}"
|
|
end
|
|
end
|
|
|
|
function encode_string(val)
|
|
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
|
|
end
|
|
|
|
function encode_number(val)
|
|
if val ~= val or val <= -math.huge or val >= math.huge then
|
|
error("unexpected number value '" .. tostring(val) .. "'")
|
|
end
|
|
return string.format("%.14g", val)
|
|
end
|
|
|
|
local type_func_map = {
|
|
["nil"] = encode_nil,
|
|
["table"] = encode_table,
|
|
["string"] = encode_string,
|
|
["number"] = encode_number,
|
|
["boolean"] = tostring,
|
|
}
|
|
|
|
encode = function(val, stack)
|
|
local t = type(val)
|
|
local f = type_func_map[t]
|
|
if f then
|
|
return f(val, stack)
|
|
end
|
|
error("unexpected type '" .. t .. "'")
|
|
end
|
|
|
|
function json.encode(val)
|
|
return (encode(val))
|
|
end
|
|
|
|
local parse
|
|
|
|
function create_set(...)
|
|
local res = {}
|
|
for i = 1, select("#", ...) do
|
|
res[select(i, ...)] = true
|
|
end
|
|
return res
|
|
end
|
|
|
|
local space_chars = create_set(" ", "\t", "\r", "\n")
|
|
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
|
|
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
|
|
local literals = create_set("true", "false", "null")
|
|
|
|
local literal_map = {
|
|
["true"] = true,
|
|
["false"] = false,
|
|
["null"] = nil,
|
|
}
|
|
|
|
function next_char(str, idx, set, negate)
|
|
for i = idx, #str do
|
|
if set[str:sub(i, i)] ~= negate then
|
|
return i
|
|
end
|
|
end
|
|
return #str + 1
|
|
end
|
|
|
|
function decode_error(str, idx, msg)
|
|
local line_count = 1
|
|
local col_count = 1
|
|
for i = 1, idx - 1 do
|
|
col_count = col_count + 1
|
|
if str:sub(i, i) == "\n" then
|
|
line_count = line_count + 1
|
|
col_count = 1
|
|
end
|
|
end
|
|
error(string.format("%s at line %d col %d", msg, line_count, col_count))
|
|
end
|
|
|
|
function codepoint_to_utf8(n)
|
|
local f = math.floor
|
|
if n <= 0x7f then
|
|
return string.char(n)
|
|
elseif n <= 0x7ff then
|
|
return string.char(f(n / 64) + 192, n % 64 + 128)
|
|
elseif n <= 0xffff then
|
|
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
|
|
elseif n <= 0x10ffff then
|
|
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, f(n % 4096 / 64) + 128, n % 64 + 128)
|
|
end
|
|
error(string.format("invalid unicode codepoint '%x'", n))
|
|
end
|
|
|
|
function parse_unicode_escape(s)
|
|
local n1 = tonumber(s:sub(1, 4), 16)
|
|
local n2 = tonumber(s:sub(7, 10), 16)
|
|
if n2 then
|
|
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
|
|
else
|
|
return codepoint_to_utf8(n1)
|
|
end
|
|
end
|
|
|
|
function parse_string(str, i)
|
|
local res = ""
|
|
local j = i + 1
|
|
local k = j
|
|
|
|
while j <= #str do
|
|
local x = str:byte(j)
|
|
if x < 32 then
|
|
decode_error(str, j, "control character in string")
|
|
elseif x == 92 then
|
|
res = res .. str:sub(k, j - 1)
|
|
j = j + 1
|
|
local c = str:sub(j, j)
|
|
if c == "u" then
|
|
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
|
|
or str:match("^%x%x%x%x", j + 1)
|
|
or decode_error(str, j - 1, "invalid unicode escape in string")
|
|
res = res .. parse_unicode_escape(hex)
|
|
j = j + #hex
|
|
else
|
|
if not escape_chars[c] then
|
|
decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
|
|
end
|
|
res = res .. escape_char_map_inv[c]
|
|
end
|
|
k = j + 1
|
|
elseif x == 34 then
|
|
res = res .. str:sub(k, j - 1)
|
|
return res, j + 1
|
|
end
|
|
j = j + 1
|
|
end
|
|
decode_error(str, i, "expected closing quote for string")
|
|
end
|
|
|
|
function parse_number(str, i)
|
|
local x = next_char(str, i, delim_chars)
|
|
local s = str:sub(i, x - 1)
|
|
local n = tonumber(s)
|
|
if not n then
|
|
decode_error(str, i, "invalid number '" .. s .. "'")
|
|
end
|
|
return n, x
|
|
end
|
|
|
|
function parse_literal(str, i)
|
|
local x = next_char(str, i, delim_chars)
|
|
local word = str:sub(i, x - 1)
|
|
if not literals[word] then
|
|
decode_error(str, i, "invalid literal '" .. word .. "'")
|
|
end
|
|
return literal_map[word], x
|
|
end
|
|
|
|
function parse_array(str, i)
|
|
local res = {}
|
|
local n = 1
|
|
i = i + 1
|
|
while 1 do
|
|
local x
|
|
i = next_char(str, i, space_chars, true)
|
|
if str:sub(i, i) == "]" then
|
|
i = i + 1
|
|
break
|
|
end
|
|
x, i = parse(str, i)
|
|
res[n] = x
|
|
n = n + 1
|
|
i = next_char(str, i, space_chars, true)
|
|
local chr = str:sub(i, i)
|
|
i = i + 1
|
|
if chr == "]" then
|
|
break
|
|
end
|
|
if chr ~= "," then
|
|
decode_error(str, i, "expected ']' or ','")
|
|
end
|
|
end
|
|
return res, i
|
|
end
|
|
|
|
function parse_object(str, i)
|
|
local res = {}
|
|
i = i + 1
|
|
while 1 do
|
|
local key, val
|
|
i = next_char(str, i, space_chars, true)
|
|
if str:sub(i, i) == "}" then
|
|
i = i + 1
|
|
break
|
|
end
|
|
if str:sub(i, i) ~= '"' then
|
|
decode_error(str, i, "expected string for key")
|
|
end
|
|
key, i = parse(str, i)
|
|
i = next_char(str, i, space_chars, true)
|
|
if str:sub(i, i) ~= ":" then
|
|
decode_error(str, i, "expected ':' after key")
|
|
end
|
|
i = next_char(str, i + 1, space_chars, true)
|
|
val, i = parse(str, i)
|
|
res[key] = val
|
|
i = next_char(str, i, space_chars, true)
|
|
local chr = str:sub(i, i)
|
|
i = i + 1
|
|
if chr == "}" then
|
|
break
|
|
end
|
|
if chr ~= "," then
|
|
decode_error(str, i, "expected '}' or ','")
|
|
end
|
|
end
|
|
return res, i
|
|
end
|
|
|
|
local char_func_map = {
|
|
['"'] = parse_string,
|
|
["0"] = parse_number,
|
|
["1"] = parse_number,
|
|
["2"] = parse_number,
|
|
["3"] = parse_number,
|
|
["4"] = parse_number,
|
|
["5"] = parse_number,
|
|
["6"] = parse_number,
|
|
["7"] = parse_number,
|
|
["8"] = parse_number,
|
|
["9"] = parse_number,
|
|
["-"] = parse_number,
|
|
["t"] = parse_literal,
|
|
["f"] = parse_literal,
|
|
["n"] = parse_literal,
|
|
["["] = parse_array,
|
|
["{"] = parse_object,
|
|
}
|
|
|
|
parse = function(str, idx)
|
|
local chr = str:sub(idx, idx)
|
|
local f = char_func_map[chr]
|
|
if f then
|
|
return f(str, idx)
|
|
end
|
|
decode_error(str, idx, "unexpected character '" .. chr .. "'")
|
|
end
|
|
|
|
function json.decode(str)
|
|
if type(str) ~= "string" then
|
|
error("expected argument of type string, got " .. type(str))
|
|
end
|
|
local res, idx = parse(str, next_char(str, 1, space_chars, true))
|
|
idx = next_char(str, idx, space_chars, true)
|
|
if idx <= #str then
|
|
decode_error(str, idx, "trailing garbage")
|
|
end
|
|
return res
|
|
end
|
|
|
|
return json
|
|
end
|
|
|
|
-- ============================================================================
|
|
-- YIMCONFIG SYSTEM
|
|
-- ============================================================================
|
|
function YimConfig(DEFAULT_CONFIG)
|
|
local json = JSON()
|
|
local script_json = string.format("%s.json", SCRIPT_NAME)
|
|
local yc = {
|
|
_version = "1.0.0",
|
|
_credits = [[
|
|
|
|
¤ Universal Config System For YimMenu-Lua ¤
|
|
|
|
- Original code written by Harmless: https://github.com/harmless05
|
|
|
|
- Modified for universal use by SAMURAI (xesdoog): https://github.com/xesdoog
|
|
|
|
- Uses rxi's JSON Library: https://github.com/rxi/json.lua
|
|
]],
|
|
}
|
|
|
|
function file_exists(name)
|
|
return io.exists(name)
|
|
end
|
|
|
|
local writeToFile = function(data)
|
|
local file, _ = io.open(script_json, "w")
|
|
if file == nil then
|
|
log.warning("Failed to write to " .. script_json)
|
|
gui.show_error("YimConfig", "Failed to write to " .. script_json)
|
|
return false
|
|
end
|
|
file:write(json.encode(data))
|
|
file:close()
|
|
return true
|
|
end
|
|
|
|
local readFromFile = function()
|
|
local file, _ = io.open(script_json, "r")
|
|
if file == nil then
|
|
return nil
|
|
end
|
|
local content = file:read("*all")
|
|
file:close()
|
|
return json.decode(content)
|
|
end
|
|
|
|
local checkAndCreateConfig = function()
|
|
if DEFAULT_CONFIG == nil then
|
|
gui.show_error(
|
|
"YimConfig",
|
|
"Missing default config! Please create a default config table in your main script."
|
|
)
|
|
error("[FATAL] Missing default config! Please create a default config global table in your main script.")
|
|
end
|
|
local exists = file_exists(script_json)
|
|
local config
|
|
if not exists then
|
|
log.debug("Config file not found! Creating a default config...")
|
|
return writeToFile(DEFAULT_CONFIG)
|
|
else
|
|
config = readFromFile()
|
|
if config == nil then
|
|
return nil
|
|
end
|
|
|
|
for key, defaultValue in pairs(DEFAULT_CONFIG) do
|
|
if config[key] == nil then
|
|
config[key] = defaultValue
|
|
end
|
|
end
|
|
return writeToFile(config)
|
|
end
|
|
end
|
|
|
|
local readAndDecodeConfig = function()
|
|
if not checkAndCreateConfig() then
|
|
return nil
|
|
end
|
|
return readFromFile()
|
|
end
|
|
|
|
yc.save = function(item_tag, value)
|
|
local t = readAndDecodeConfig()
|
|
if t then
|
|
t[item_tag] = value
|
|
if not writeToFile(t) then
|
|
log.warning("Failed to save config to " .. script_json)
|
|
end
|
|
end
|
|
end
|
|
|
|
yc.read = function(item_tag)
|
|
local t = readAndDecodeConfig()
|
|
if t then
|
|
return t[item_tag]
|
|
else
|
|
log.warning("Failed to read config from " .. script_json)
|
|
end
|
|
end
|
|
|
|
yc.reset = function()
|
|
writeToFile(DEFAULT_CONFIG)
|
|
end
|
|
|
|
yc.encode = json.encode
|
|
yc.decode = json.decode
|
|
|
|
return yc
|
|
end
|
|
|
|
-- ============================================================================
|
|
-- UTILITY FUNCTIONS
|
|
-- ============================================================================
|
|
local TAGET_BUILD = "3889"
|
|
|
|
function GetBuildNumber()
|
|
local ptr = memory.scan_pattern("8B C3 33 D2 C6 44 24 20")
|
|
if ptr and not ptr:is_null() then
|
|
ptr = ptr:add(0x24)
|
|
if ptr and not ptr:is_null() then
|
|
ptr = ptr:rip()
|
|
if ptr and not ptr:is_null() then
|
|
return ptr:get_string()
|
|
end
|
|
end
|
|
end
|
|
return "Unknown"
|
|
end
|
|
|
|
function formatMoney(value)
|
|
return "$" .. tostring(value):reverse():gsub("%d%d%d", "%1,"):reverse():gsub("^,", "")
|
|
end
|
|
|
|
function coloredText(text, wrap_size, color)
|
|
ImGui.PushStyleColor(ImGuiCol.Text, color[1] / 255, color[2] / 255, color[3] / 255, color[4])
|
|
ImGui.PushTextWrapPos(ImGui.GetFontSize() * wrap_size)
|
|
ImGui.TextWrapped(text)
|
|
ImGui.PopTextWrapPos()
|
|
ImGui.PopStyleColor(1)
|
|
end
|
|
|
|
function selfTP(keepVehicle, setHeading, coords, heading)
|
|
script.run_in_fiber(function(selftp)
|
|
STREAMING.REQUEST_COLLISION_AT_COORD(coords.x, coords.y, coords.z)
|
|
selftp:sleep(300)
|
|
if setHeading then
|
|
if heading == nil then
|
|
heading = 0
|
|
end
|
|
ENTITY.SET_ENTITY_HEADING(self.get_ped(), heading)
|
|
end
|
|
if keepVehicle then
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(self.get_ped(), coords.x, coords.y, coords.z)
|
|
else
|
|
TASK.CLEAR_PED_TASKS_IMMEDIATELY(self.get_ped())
|
|
ENTITY.SET_ENTITY_COORDS(self.get_ped(), coords.x, coords.y, coords.z, false, false, false, true)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function getCEOvalue_G(crates)
|
|
local G
|
|
if crates ~= nil then
|
|
if crates == 1 then
|
|
G = 15821
|
|
end
|
|
if crates == 2 then
|
|
G = 15822
|
|
end
|
|
if crates == 3 then
|
|
G = 15823
|
|
end
|
|
if crates == 4 or crates == 5 then
|
|
G = 15824
|
|
end
|
|
if crates == 6 or crates == 7 then
|
|
G = 15825
|
|
end
|
|
if crates == 8 or crates == 9 then
|
|
G = 15826
|
|
end
|
|
if crates >= 10 and crates <= 14 then
|
|
G = 15827
|
|
end
|
|
if crates >= 15 and crates <= 19 then
|
|
G = 15828
|
|
end
|
|
if crates >= 20 and crates <= 24 then
|
|
G = 15829
|
|
end
|
|
if crates >= 25 and crates <= 29 then
|
|
G = 15830
|
|
end
|
|
if crates >= 30 and crates <= 34 then
|
|
G = 15831
|
|
end
|
|
if crates >= 35 and crates <= 39 then
|
|
G = 15832
|
|
end
|
|
if crates >= 40 and crates <= 44 then
|
|
G = 15833
|
|
end
|
|
if crates >= 45 and crates <= 49 then
|
|
G = 15834
|
|
end
|
|
if crates >= 50 and crates <= 59 then
|
|
G = 15835
|
|
end
|
|
if crates >= 60 and crates <= 69 then
|
|
G = 15836
|
|
end
|
|
if crates >= 70 and crates <= 79 then
|
|
G = 15837
|
|
end
|
|
if crates >= 80 and crates <= 89 then
|
|
G = 15838
|
|
end
|
|
if crates >= 90 and crates <= 99 then
|
|
G = 15839
|
|
end
|
|
if crates >= 100 and crates <= 110 then
|
|
G = 15840
|
|
end
|
|
if crates == 111 then
|
|
G = 15841
|
|
end
|
|
else
|
|
G = 0
|
|
end
|
|
return G
|
|
end
|
|
|
|
-- ============================================================================
|
|
-- MAIN SCRIPT
|
|
-- ============================================================================
|
|
local DEFAULT_CONFIG = {
|
|
cashUpdgrade1 = false,
|
|
cashUpdgrade2 = false,
|
|
cokeUpdgrade1 = false,
|
|
cokeUpdgrade2 = false,
|
|
methUpdgrade1 = false,
|
|
methUpdgrade2 = false,
|
|
weedUpdgrade1 = false,
|
|
weedUpdgrade2 = false,
|
|
fdUpdgrade1 = false,
|
|
fdUpdgrade2 = false,
|
|
bunkerUpdgrade1 = false,
|
|
bunkerUpdgrade2 = false,
|
|
acidUpdgrade = false,
|
|
}
|
|
|
|
local CFG = YimConfig(DEFAULT_CONFIG)
|
|
log.info(
|
|
string.format("Ultimate_Menu_Legacy.lua: YimConfig v%s successfully loaded\n%s", CFG._version, CFG._credits)
|
|
)
|
|
|
|
yim_resupplier = L7NEG:add_tab("YimResupplier")
|
|
|
|
hangarOwned = false
|
|
fCashOwned = false
|
|
cokeOwned = false
|
|
methOwned = false
|
|
weedOwned = false
|
|
fdOwned = false
|
|
bunkerOwned = false
|
|
acidOwned = false
|
|
hangarTotal = 0
|
|
cashTotal = 0
|
|
cokeTotal = 0
|
|
methTotal = 0
|
|
weedTotal = 0
|
|
fdTotal = 0
|
|
bunkerTotal = 0
|
|
acidTotal = 0
|
|
main_global = 1673807
|
|
cashUpdgrade1 = CFG.read("cashUpdgrade1")
|
|
cashUpdgrade2 = CFG.read("cashUpdgrade2")
|
|
cokeUpdgrade1 = CFG.read("cokeUpdgrade1")
|
|
cokeUpdgrade2 = CFG.read("cokeUpdgrade2")
|
|
methUpdgrade1 = CFG.read("methUpdgrade1")
|
|
methUpdgrade2 = CFG.read("methUpdgrade2")
|
|
weedUpdgrade1 = CFG.read("weedUpdgrade1")
|
|
weedUpdgrade2 = CFG.read("weedUpdgrade2")
|
|
fdUpdgrade1 = CFG.read("fdUpdgrade1")
|
|
fdUpdgrade2 = CFG.read("fdUpdgrade2")
|
|
bunkerUpdgrade1 = CFG.read("bunkerUpdgrade1")
|
|
bunkerUpdgrade2 = CFG.read("bunkerUpdgrade2")
|
|
acidUpdgrade = CFG.read("acidUpdgrade")
|
|
|
|
yim_resupplier:add_imgui(function()
|
|
if
|
|
network.is_session_started()
|
|
and not (SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0)
|
|
then
|
|
hangarOwned = stats.get_int(MPX() .. "PROP_HANGAR") ~= 0
|
|
fCashOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT0") ~= 0
|
|
cokeOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT1") ~= 0
|
|
methOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT2") ~= 0
|
|
weedOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT3") ~= 0
|
|
fdOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT4") ~= 0
|
|
bunkerOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT5") ~= 0
|
|
acidOwned = stats.get_int(MPX() .. "PROP_FAC_SLOT6") ~= 0
|
|
ImGui.BeginTabBar("YimResupplier", ImGuiTabBarFlags.None)
|
|
if ImGui.BeginTabItem("Manage Supplies") then
|
|
local wh1Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE0") or 0
|
|
local wh2Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE1") or 0
|
|
local wh3Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE2") or 0
|
|
local wh4Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE3") or 0
|
|
local wh5Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE4") or 0
|
|
local hangarSupply = stats.get_int(MPX() .. "HANGAR_CONTRABAND_TOTAL") or 0
|
|
local cashSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY0") or 0
|
|
local dfSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY1") or 0
|
|
local methSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY2") or 0
|
|
local weedSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY3") or 0
|
|
local cokeSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY4") or 0
|
|
local bunkerSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY5") or 0
|
|
local acidSupply = stats.get_int(MPX() .. "MATTOTALFORFACTORY6") or 0
|
|
local ceoSupply = (wh1Supplies + wh2Supplies + wh3Supplies + wh4Supplies + wh5Supplies)
|
|
ImGui.Spacing()
|
|
ImGui.Text("Hangar Cargo")
|
|
ImGui.Separator()
|
|
if hangarOwned then
|
|
ImGui.Text("Current Supplies:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((hangarSupply / 50), 140, 30)
|
|
if hangarSupply < 50 then
|
|
if ImGui.Button("Source Random Crate(s)") then
|
|
script.run_in_fiber(function()
|
|
stats.set_bool_masked(MPX() .. "DLC22022PSTAT_BOOL3", true, 9)
|
|
end)
|
|
end
|
|
ImGui.SameLine()
|
|
hangarLoop, used = ImGui.Checkbox("Auto-Fill", hangarLoop)
|
|
if hangarLoop then
|
|
script.run_in_fiber(function(hangarSupp)
|
|
repeat
|
|
stats.set_bool_masked(MPX() .. "DLC22022PSTAT_BOOL3", true, 9)
|
|
hangarSupp:sleep(969)
|
|
until hangarSupply == 50 or hangarLoop == false
|
|
end)
|
|
end
|
|
else
|
|
if hangarLoop then
|
|
hangarLoop = false
|
|
end
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
if ImGui.Button("Teleport##hangar") then
|
|
script.run_in_fiber(function()
|
|
local hangarBlip = HUD.GET_FIRST_BLIP_INFO_ID(569)
|
|
local hangarLoc
|
|
if HUD.DOES_BLIP_EXIST(hangarBlip) then
|
|
hangarLoc = HUD.GET_BLIP_COORDS(hangarBlip)
|
|
selfTP(true, false, hangarLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Hangar.")
|
|
end
|
|
ImGui.Spacing()
|
|
ImGui.Text("CEO Warehouses")
|
|
ImGui.Separator()
|
|
ImGui.Text("Current Supplies:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((ceoSupply / 555), 140, 30)
|
|
if ceoSupply < 555 then
|
|
if ImGui.Button("Source Random Crate(s)##ceo") then
|
|
script.run_in_fiber(function(fillceo)
|
|
for i = 12, 16 do
|
|
stats.set_bool_masked(MPX() .. "FIXERPSTAT_BOOL1", true, i)
|
|
fillceo:sleep(500)
|
|
end
|
|
end)
|
|
end
|
|
ImGui.SameLine()
|
|
ceoLoop, used = ImGui.Checkbox("Auto-Fill##ceo", ceoLoop)
|
|
if ceoLoop then
|
|
script.run_in_fiber(function(ceoloop)
|
|
repeat
|
|
for i = 12, 16 do
|
|
stats.set_bool_masked(MPX() .. "FIXERPSTAT_BOOL1", true, i)
|
|
ceoloop:sleep(500)
|
|
end
|
|
ceoloop:sleep(969)
|
|
until ceoSupply == 555 or ceoLoop == false
|
|
end)
|
|
end
|
|
else
|
|
if ceoLoop then
|
|
ceoLoop = false
|
|
end
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
if ImGui.Button("Teleport To Office") then
|
|
script.run_in_fiber(function()
|
|
local ceoBlip = HUD.GET_FIRST_BLIP_INFO_ID(475)
|
|
local ceoLoc
|
|
if HUD.DOES_BLIP_EXIST(ceoBlip) then
|
|
ceoLoc = HUD.GET_BLIP_COORDS(ceoBlip)
|
|
selfTP(true, false, ceoLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
ImGui.Spacing()
|
|
ImGui.Text("MC Supplies")
|
|
ImGui.Separator()
|
|
if fCashOwned then
|
|
ImGui.Text("Fake Cash:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(55, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((cashSupply / 100), 140, 30)
|
|
if math.ceil(cashSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##FakeCash") then
|
|
globals.set_int(main_global + 0 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##fc") then
|
|
script.run_in_fiber(function()
|
|
local fcBlip = HUD.GET_FIRST_BLIP_INFO_ID(500)
|
|
local fcLoc
|
|
if HUD.DOES_BLIP_EXIST(fcBlip) then
|
|
fcLoc = HUD.GET_BLIP_COORDS(fcBlip)
|
|
selfTP(false, false, fcLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Fake Cash business.")
|
|
end
|
|
if cokeOwned then
|
|
ImGui.Text("Cocaine:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(73, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((cokeSupply / 100), 140, 30)
|
|
if math.ceil(cokeSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##Cocaine") then
|
|
globals.set_int(main_global + 4 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##coke") then
|
|
script.run_in_fiber(function()
|
|
local cokeBlip = HUD.GET_FIRST_BLIP_INFO_ID(497)
|
|
local cokeLoc
|
|
if HUD.DOES_BLIP_EXIST(cokeBlip) then
|
|
cokeLoc = HUD.GET_BLIP_COORDS(cokeBlip)
|
|
selfTP(false, false, cokeLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Cocaine business.")
|
|
end
|
|
if methOwned then
|
|
ImGui.Text("Meth:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(95, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((methSupply / 100), 140, 30)
|
|
if math.ceil(methSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##Meth") then
|
|
globals.set_int(main_global + 2 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##meth") then
|
|
script.run_in_fiber(function()
|
|
local methBlip = HUD.GET_FIRST_BLIP_INFO_ID(499)
|
|
local methLoc
|
|
if HUD.DOES_BLIP_EXIST(methBlip) then
|
|
methLoc = HUD.GET_BLIP_COORDS(methBlip)
|
|
selfTP(false, false, methLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Meth business.")
|
|
end
|
|
if weedOwned then
|
|
ImGui.Text("Weed:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(90, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((weedSupply / 100), 140, 30)
|
|
if math.ceil(weedSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##Weed") then
|
|
globals.set_int(main_global + 3 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##weed") then
|
|
script.run_in_fiber(function()
|
|
local weedBlip = HUD.GET_FIRST_BLIP_INFO_ID(496)
|
|
local weedLoc
|
|
if HUD.DOES_BLIP_EXIST(weedBlip) then
|
|
weedLoc = HUD.GET_BLIP_COORDS(weedBlip)
|
|
selfTP(false, false, weedLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Weed business.")
|
|
end
|
|
if fdOwned then
|
|
ImGui.Text("Document Forgery: ")
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((dfSupply / 100), 140, 30)
|
|
if math.ceil(dfSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##DocumentForgery") then
|
|
globals.set_int(main_global + 1 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##fd") then
|
|
script.run_in_fiber(function()
|
|
local fdBlip = HUD.GET_FIRST_BLIP_INFO_ID(498)
|
|
local fdLoc
|
|
if HUD.DOES_BLIP_EXIST(fdBlip) then
|
|
fdLoc = HUD.GET_BLIP_COORDS(fdBlip)
|
|
selfTP(false, false, fdLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Document Forgery office.")
|
|
end
|
|
if bunkerOwned then
|
|
ImGui.Text("Bunker:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(80, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((bunkerSupply / 100), 140, 30)
|
|
if math.ceil(bunkerSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##Bunker") then
|
|
globals.set_int(main_global + 5 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##bunker") then
|
|
script.run_in_fiber(function()
|
|
local bunkerBlip = HUD.GET_FIRST_BLIP_INFO_ID(557)
|
|
local bunkerLoc
|
|
if HUD.DOES_BLIP_EXIST(bunkerBlip) then
|
|
bunkerLoc = HUD.GET_BLIP_COORDS(bunkerBlip)
|
|
selfTP(true, false, bunkerLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
else
|
|
ImGui.Text("You don't own a Bunker.")
|
|
end
|
|
if acidOwned then
|
|
ImGui.Text("Acid Lab:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(70, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar((acidSupply / 100), 140, 30)
|
|
if math.ceil(acidSupply) < 100 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button(" Fill ##AcidLab") then
|
|
globals.set_int(main_global + 6 + 1, 1)
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##acid") then
|
|
script.run_in_fiber(function()
|
|
local acidBlip = HUD.GET_FIRST_BLIP_INFO_ID(848)
|
|
local acidLoc
|
|
if HUD.DOES_BLIP_EXIST(acidBlip) then
|
|
acidLoc = HUD.GET_BLIP_COORDS(acidBlip)
|
|
selfTP(true, false, acidLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.Dummy(1, 10)
|
|
coloredText(
|
|
"WARNING!\10Teleport buttons might be broken in public sessions.",
|
|
40,
|
|
{ 255, 204, 0, 0.8 }
|
|
)
|
|
end
|
|
else
|
|
ImGui.Text("You don't own an Acid Lab.")
|
|
end
|
|
ImGui.EndTabItem()
|
|
end
|
|
if ImGui.BeginTabItem("Production Overview") then
|
|
--------------------------------------- Hangar ----------------------------------------------------------------------
|
|
if hangarOwned then
|
|
ImGui.Text("Hangar:")
|
|
local hangarCargo = stats.get_int(MPX() .. "HANGAR_CONTRABAND_TOTAL") or 0
|
|
hangarTotal = hangarCargo * 30000
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(hangarCargo / 50),
|
|
160,
|
|
25,
|
|
tostring(hangarCargo) .. " Crates (" .. tostring(math.floor(hangarCargo / 0.5)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(hangarTotal))
|
|
end
|
|
--------------------------------------- CEO ----------------------------------------------------------------------
|
|
ImGui.Separator()
|
|
ImGui.Text("CEO:")
|
|
local wh1Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE0") or 0
|
|
local wh2Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE1") or 0
|
|
local wh3Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE2") or 0
|
|
local wh4Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE3") or 0
|
|
local wh5Supplies = stats.get_int(MPX() .. "CONTOTALFORWHOUSE4") or 0
|
|
if wh1Supplies ~= nil and wh1Supplies > 0 then
|
|
wh1Value = (globals.get_int(262145 + (getCEOvalue_G(wh1Supplies))))
|
|
else
|
|
wh1Value = 0
|
|
end
|
|
if wh2Supplies ~= nil and wh2Supplies > 0 then
|
|
wh2Value = (globals.get_int(262145 + (getCEOvalue_G(wh2Supplies))))
|
|
else
|
|
wh2Value = 0
|
|
end
|
|
if wh3Supplies ~= nil and wh3Supplies > 0 then
|
|
wh3Value = (globals.get_int(262145 + (getCEOvalue_G(wh3Supplies))))
|
|
else
|
|
wh3Value = 0
|
|
end
|
|
if wh4Supplies ~= nil and wh4Supplies > 0 then
|
|
wh4Value = (globals.get_int(262145 + (getCEOvalue_G(wh4Supplies))))
|
|
else
|
|
wh4Value = 0
|
|
end
|
|
if wh5Supplies ~= nil and wh5Supplies > 0 then
|
|
wh5Value = (globals.get_int(262145 + (getCEOvalue_G(wh5Supplies))))
|
|
else
|
|
wh5Value = 0
|
|
end
|
|
local ceoSupply = (wh1Supplies + wh2Supplies + wh3Supplies + wh4Supplies + wh5Supplies)
|
|
ceoTotal = (
|
|
(wh1Value * wh1Supplies)
|
|
+ (wh2Value * wh2Supplies)
|
|
+ (wh3Value * wh3Supplies)
|
|
+ (wh4Value * wh4Supplies)
|
|
+ (wh5Value * wh5Supplies)
|
|
)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(ceoSupply / 555),
|
|
160,
|
|
25,
|
|
tostring(ceoSupply) .. " Crates (" .. tostring(math.floor((ceoSupply / 555) * 100)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(ceoTotal))
|
|
--------------------------------------- Fake Cash -------------------------------------------------------------------
|
|
if fCashOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Fake Cash:")
|
|
ImGui.SameLine()
|
|
cashUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##cash", cashUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("cashUpdgrade1", cashUpdgrade1)
|
|
end
|
|
cashUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##cash", cashUpdgrade2)
|
|
if used then
|
|
CFG.save("cashUpdgrade2", cashUpdgrade2)
|
|
end
|
|
if cashUpdgrade1 then
|
|
cashOffset1 = globals.get_int(262145 + 17415)
|
|
else
|
|
cashOffset1 = 0
|
|
end
|
|
if cashUpdgrade2 then
|
|
cashOffset2 = globals.get_int(262145 + 17421)
|
|
else
|
|
cashOffset2 = 0
|
|
end
|
|
local cashProduct = stats.get_int(MPX() .. "PRODTOTALFORFACTORY0") or 0
|
|
cashTotal = ((globals.get_int(262145 + 17409) + cashOffset1 + cashOffset2) * cashProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(cashProduct / 40),
|
|
160,
|
|
25,
|
|
tostring(cashProduct) .. " Boxes (" .. tostring(math.floor(cashProduct * 2.5)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(cashTotal))
|
|
end
|
|
---------------------------------------Coke----------------------------------------------------------------------
|
|
if cokeOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Cocaine: ")
|
|
ImGui.SameLine()
|
|
cokeUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##coke", cokeUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("cokeUpdgrade1", cokeUpdgrade1)
|
|
end
|
|
cokeUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##coke", cokeUpdgrade2)
|
|
if used then
|
|
CFG.save("cokeUpdgrade2", cokeUpdgrade2)
|
|
end
|
|
if cokeUpdgrade1 then
|
|
cokeOffset1 = globals.get_int(262145 + 17416)
|
|
else
|
|
cokeOffset1 = 0
|
|
end
|
|
if cokeUpdgrade2 then
|
|
cokeOffset2 = globals.get_int(262145 + 17422)
|
|
else
|
|
cokeOffset2 = 0
|
|
end
|
|
local cokeProduct = stats.get_int(MPX() .. "PRODTOTALFORFACTORY1") or 0
|
|
cokeTotal = ((globals.get_int(262145 + 17410) + cokeOffset1 + cokeOffset2) * cokeProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(cokeProduct / 10),
|
|
160,
|
|
25,
|
|
tostring(cokeProduct) .. " Kilos (" .. tostring(cokeProduct * 10) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(cokeTotal))
|
|
end
|
|
---------------------------------------Meth-----------------------------------------------------------------------
|
|
if methOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Meth: ")
|
|
ImGui.SameLine()
|
|
methUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##meth", methUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("methUpdgrade1", methUpdgrade1)
|
|
end
|
|
methUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##meth", methUpdgrade2)
|
|
if used then
|
|
CFG.save("methUpdgrade2", methUpdgrade2)
|
|
end
|
|
if methUpdgrade1 then
|
|
methOffset1 = globals.get_int(262145 + 17417)
|
|
else
|
|
methOffset1 = 0
|
|
end
|
|
if methUpdgrade2 then
|
|
methOffset2 = globals.get_int(262145 + 17423)
|
|
else
|
|
methOffset2 = 0
|
|
end
|
|
local methProduct = stats.get_int(MPX() .. "PRODTOTALFORFACTORY2") or 0
|
|
methTotal = ((globals.get_int(262145 + 17411) + methOffset1 + methOffset2) * methProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(methProduct / 20),
|
|
160,
|
|
25,
|
|
tostring(methProduct) .. " Pounds (" .. tostring(methProduct * 5) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(methTotal))
|
|
end
|
|
---------------------------------------Weed------------------------------------------------------------------------
|
|
if weedOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Weed: ")
|
|
ImGui.SameLine()
|
|
weedUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##weed", weedUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("weedUpdgrade1", weedUpdgrade1)
|
|
end
|
|
weedUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##weed", weedUpdgrade2)
|
|
if used then
|
|
CFG.save("weedUpdgrade2", weedUpdgrade2)
|
|
end
|
|
if weedUpdgrade1 then
|
|
weedOffset1 = globals.get_int(262145 + 17418)
|
|
else
|
|
weedOffset1 = 0
|
|
end
|
|
if weedUpdgrade2 then
|
|
weedOffset2 = globals.get_int(262145 + 17424)
|
|
else
|
|
weedOffset2 = 0
|
|
end
|
|
local weedProduct = stats.get_int("MPX_PRODTOTALFORFACTORY3")
|
|
weedTotal = ((globals.get_int(262145 + 17412) + weedOffset1 + weedOffset2) * weedProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(weedProduct / 80),
|
|
160,
|
|
25,
|
|
tostring(weedProduct) .. " Pounds (" .. tostring(math.floor(weedProduct / 8 * 10)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(weedTotal))
|
|
end
|
|
---------------------------------------Document Forgery------------------------------------------------------------
|
|
if fdOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Fake ID: ")
|
|
ImGui.SameLine()
|
|
fdUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##fd", fdUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("fdUpdgrade1", fdUpdgrade1)
|
|
end
|
|
fdUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##fd", fdUpdgrade2)
|
|
if used then
|
|
CFG.save("fdUpdgrade2", fdUpdgrade2)
|
|
end
|
|
if fdUpdgrade1 then
|
|
fdOffset1 = globals.get_int(262145 + 17414)
|
|
else
|
|
fdOffset1 = 0
|
|
end
|
|
if fdUpdgrade2 then
|
|
fdOffset2 = globals.get_int(262145 + 17420)
|
|
else
|
|
fdOffset2 = 0
|
|
end
|
|
local fdProduct = stats.get_int("MPX_PRODTOTALFORFACTORY4")
|
|
fdTotal = ((globals.get_int(262145 + 17408) + fdOffset1 + fdOffset2) * fdProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(fdProduct / 60),
|
|
160,
|
|
25,
|
|
tostring(fdProduct) .. " Boxes (" .. tostring(math.floor(fdProduct / 6 * 10)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(fdTotal))
|
|
end
|
|
---------------------------------------Bunker-----------------------------------------------------------------------
|
|
if bunkerOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Bunker: ")
|
|
ImGui.SameLine()
|
|
bunkerUpdgrade1, used = ImGui.Checkbox("Equipment Upgrade##bunker", bunkerUpdgrade1)
|
|
ImGui.SameLine()
|
|
if used then
|
|
CFG.save("bunkerUpdgrade1", bunkerUpdgrade1)
|
|
end
|
|
bunkerUpdgrade2, used = ImGui.Checkbox("Staff Upgrade##bunker", bunkerUpdgrade2)
|
|
if used then
|
|
CFG.save("bunkerUpdgrade2", bunkerUpdgrade2)
|
|
end
|
|
if bunkerUpdgrade1 then
|
|
bunkerOffset1 = globals.get_int(262145 + 21345)
|
|
else
|
|
bunkerOffset1 = 0
|
|
end
|
|
if bunkerUpdgrade2 then
|
|
bunkerOffset2 = globals.get_int(262145 + 21344)
|
|
else
|
|
bunkerOffset2 = 0
|
|
end
|
|
local bunkerProduct = stats.get_int("MPX_PRODTOTALFORFACTORY5")
|
|
bunkerTotal = ((globals.get_int(262145 + 21343) + bunkerOffset1 + bunkerOffset2) * bunkerProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(bunkerProduct / 100),
|
|
160,
|
|
25,
|
|
tostring(bunkerProduct) .. " Crates (" .. tostring(bunkerProduct) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text("BC: " .. formatMoney(bunkerTotal) .. "\nLS: " .. formatMoney(math.floor(bunkerTotal * 1.5)))
|
|
end
|
|
---------------------------------------Acid Lab-------------------------------------------------------------------
|
|
if acidOwned then
|
|
ImGui.Separator()
|
|
ImGui.Text("Acid Lab: ")
|
|
ImGui.SameLine()
|
|
acidUpdgrade, used = ImGui.Checkbox("Equipment Upgrade##acid", acidUpdgrade)
|
|
if used then
|
|
CFG.save("acidUpdgrade", acidUpdgrade)
|
|
end
|
|
if acidUpdgrade then
|
|
acidOffset = globals.get_int(262145 + 17419)
|
|
else
|
|
acidOffset = 0
|
|
end
|
|
local acidProduct = stats.get_int("MPX_PRODTOTALFORFACTORY6")
|
|
acidTotal = ((globals.get_int(262145 + 17413) + acidOffset) * acidProduct)
|
|
ImGui.Text("Product:")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(5, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(
|
|
(acidProduct / 100),
|
|
160,
|
|
25,
|
|
tostring(acidProduct) .. " Sheets (" .. tostring(math.floor(acidProduct / 16 * 10)) .. "%)"
|
|
)
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
ImGui.Text("Value:")
|
|
ImGui.SameLine()
|
|
ImGui.Text(formatMoney(acidTotal))
|
|
end
|
|
ImGui.Spacing()
|
|
ImGui.Separator()
|
|
local finalAmt = (
|
|
hangarTotal
|
|
+ ceoTotal
|
|
+ cashTotal
|
|
+ cokeTotal
|
|
+ methTotal
|
|
+ weedTotal
|
|
+ fdTotal
|
|
+ bunkerTotal
|
|
+ acidTotal
|
|
)
|
|
ImGui.Spacing()
|
|
ImGui.Text("Total Profit = " .. formatMoney(finalAmt))
|
|
ImGui.EndTabItem()
|
|
end
|
|
if ImGui.BeginTabItem("Business Safes") then
|
|
if stats.get_int("MPX_PROP_NIGHTCLUB") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ Nightclub ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(50, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##nc") then
|
|
script.run_in_fiber(function()
|
|
local ncBlip = HUD.GET_FIRST_BLIP_INFO_ID(614)
|
|
local ncLoc
|
|
if HUD.DOES_BLIP_EXIST(ncBlip) then
|
|
ncLoc = HUD.GET_BLIP_COORDS(ncBlip)
|
|
selfTP(false, false, ncLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currentNcPop = stats.get_int("MPX_CLUB_POPULARITY")
|
|
local popDiff = 1000 - currentNcPop
|
|
local currNcSafeMoney = stats.get_int("MPX_CLUB_SAFE_CASH_VALUE")
|
|
ImGui.Text("Popularity: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(35, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currentNcPop / 1000, 160, 25, tostring(currentNcPop))
|
|
if currentNcPop < 1000 then
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Max Popularity") then
|
|
stats.set_int("MPX_CLUB_POPULARITY", currentNcPop + popDiff)
|
|
gui.show_success("YimResupplier", "Nightclub popularity increased.")
|
|
end
|
|
end
|
|
ImGui.Text("Safe: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(75, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currNcSafeMoney / 250000, 160, 25, formatMoney(currNcSafeMoney))
|
|
ImGui.Separator()
|
|
end
|
|
if stats.get_int("MPX_PROP_ARCADE") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ Arcade ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(60, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##arcade") then
|
|
script.run_in_fiber(function()
|
|
local arBlip = HUD.GET_FIRST_BLIP_INFO_ID(740)
|
|
local arLoc
|
|
if HUD.DOES_BLIP_EXIST(arBlip) then
|
|
arLoc = HUD.GET_BLIP_COORDS(arBlip)
|
|
selfTP(false, false, arLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currArSafeMoney = stats.get_int("MPX_ARCADE_SAFE_CASH_VALUE")
|
|
ImGui.Text("Safe: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(75, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currArSafeMoney / 100000, 160, 25, formatMoney(currArSafeMoney))
|
|
ImGui.Separator()
|
|
end
|
|
if stats.get_int("MPX_PROP_SECURITY_OFFICE") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ Agency ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(60, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##agnc") then
|
|
script.run_in_fiber(function()
|
|
local agncBlip = HUD.GET_FIRST_BLIP_INFO_ID(826)
|
|
local agncLoc
|
|
if HUD.DOES_BLIP_EXIST(agncBlip) then
|
|
agncLoc = HUD.GET_BLIP_COORDS(agncBlip)
|
|
selfTP(false, false, agncLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currAgSafeMoney = stats.get_int("MPX_FIXER_SAFE_CASH_VALUE")
|
|
ImGui.Text("Safe: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(75, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currAgSafeMoney / 250000, 160, 25, formatMoney(currAgSafeMoney))
|
|
ImGui.Separator()
|
|
end
|
|
if stats.get_int("MPX_PROP_CLUBHOUSE") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ MC Clubhouse ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(10, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##mc") then
|
|
script.run_in_fiber(function()
|
|
local mcBlip = HUD.GET_FIRST_BLIP_INFO_ID(492)
|
|
local mcLoc
|
|
if HUD.DOES_BLIP_EXIST(mcBlip) then
|
|
mcLoc = HUD.GET_BLIP_COORDS(mcBlip)
|
|
selfTP(false, false, mcLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currClubHouseBarProfit = stats.get_int("MPX_BIKER_BAR_RESUPPLY_CASH")
|
|
ImGui.Text("Bar Earnings: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(15, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currClubHouseBarProfit / 100000, 160, 25, formatMoney(currClubHouseBarProfit))
|
|
ImGui.Separator()
|
|
end
|
|
if stats.get_int("MPX_PROP_BAIL_OFFICE") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ Bail Office ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(40, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##bail") then
|
|
script.run_in_fiber(function()
|
|
local bailBlip = HUD.GET_FIRST_BLIP_INFO_ID(893)
|
|
local bailLoc
|
|
if HUD.DOES_BLIP_EXIST(bailBlip) then
|
|
bailLoc = HUD.GET_BLIP_COORDS(bailBlip)
|
|
bailLoc.y = bailLoc.y + 1.2
|
|
selfTP(false, false, bailLoc)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currBailSafe = stats.get_int("MPX_BAIL_SAFE_CASH_VALUE")
|
|
ImGui.Text("Safe: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(75, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currBailSafe / 100000, 160, 25, formatMoney(currBailSafe))
|
|
ImGui.Separator()
|
|
end
|
|
if stats.get_int("MPX_SALVAGE_YARD_OWNED") ~= 0 then
|
|
ImGui.Spacing()
|
|
ImGui.Spacing()
|
|
ImGui.Text("¤ Salvage Yard ¤")
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(20, 1)
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Teleport##salvage") then
|
|
script.run_in_fiber(function()
|
|
local slvgBlip = HUD.GET_FIRST_BLIP_INFO_ID(867)
|
|
local slvgLoc
|
|
if HUD.DOES_BLIP_EXIST(slvgBlip) then
|
|
slvgLoc = HUD.GET_BLIP_COORDS(slvgBlip)
|
|
selfTP(false, true, slvgLoc, 180)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
local currSalvSafe = stats.get_int("MPX_SALVAGE_SAFE_CASH_VALUE")
|
|
ImGui.Text("Safe: ")
|
|
ImGui.SameLine()
|
|
ImGui.Dummy(75, 1)
|
|
ImGui.SameLine()
|
|
ImGui.ProgressBar(currSalvSafe / 250000, 160, 25, formatMoney(currSalvSafe))
|
|
end
|
|
if INTERIOR.GET_INTERIOR_FROM_ENTITY(self.get_ped()) == 0 then
|
|
ImGui.Dummy(1, 10)
|
|
coloredText("WARNING!\10Teleport buttons might be broken in public sessions.", 40, { 255, 204, 0, 0.8 })
|
|
end
|
|
ImGui.EndTabItem()
|
|
end
|
|
else
|
|
ImGui.Text("\nUnavailable in Single Player.\n\n")
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
ReportsMenu = L7NEG:add_tab("Reports Menu")
|
|
ReportsMenu:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
ImGui.Text("Griefing: " .. stats.get_int("MPPLY_GRIEFING"))
|
|
ImGui.Text("Exploiting: " .. stats.get_int("MPPLY_EXPLOITS"))
|
|
ImGui.Text("Abusing Bugs: " .. stats.get_int("MPPLY_GAME_EXPLOITS"))
|
|
ImGui.Text("Annoying People In Text: " .. stats.get_int("MPPLY_TC_ANNOYINGME"))
|
|
ImGui.Text("Hate Speech In Voice: " .. stats.get_int("MPPLY_VC_HATE"))
|
|
ImGui.Text("Offensive Language: " .. stats.get_int("MPPLY_OFFENSIVE_LANGUAGE"))
|
|
ImGui.Text("Offensive Tagplate: " .. stats.get_int("MPPLY_OFFENSIVE_TAGPLATE"))
|
|
ImGui.Text("Offensive Content: " .. stats.get_int("MPPLY_OFFENSIVE_UGC"))
|
|
ImGui.Text("Bad Crew Name: " .. stats.get_int("MPPLY_BAD_CREW_NAME"))
|
|
ImGui.Text("Bad Crew Motto: " .. stats.get_int("MPPLY_BAD_CREW_MOTTO"))
|
|
ImGui.Text("Bad Crew Status: " .. stats.get_int("MPPLY_BAD_CREW_STATUS"))
|
|
ImGui.Text("Bad Crew Emblem: " .. stats.get_int("MPPLY_BAD_CREW_EMBLEM"))
|
|
ImGui.Separator()
|
|
ImGui.Text("Now onto your commends:")
|
|
ImGui.Separator()
|
|
ImGui.Text("Friendly: " .. stats.get_int("MPPLY_FRIENDLY"))
|
|
ImGui.Text("Helpful: " .. stats.get_int("MPPLY_HELPFUL"))
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
WareHouseDataEditorMenu = makeOnlineTab(L7NEG7:add_tab("WareHouse Data Editor"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
WareHouseDataEditorMenu:add_button("Auto-Reset stats-0/0Sales", function()
|
|
stats.set_int(MPX() .. "LIFETIME_BUY_COMPLETE", 0)
|
|
stats.set_int(MPX() .. "LIFETIME_BUY_UNDERTAKEN", 0)
|
|
stats.set_int(MPX() .. "LIFETIME_SELL_COMPLETE", 0)
|
|
stats.set_int(MPX() .. "LIFETIME_SELL_UNDERTAKEN", 0)
|
|
stats.set_int(MPX() .. "LIFETIME_CONTRA_EARNINGS", 0)
|
|
globals.set_int(CSg1, 11)
|
|
globals.set_int(CSg2, 1)
|
|
script:sleep(300)
|
|
globals.set_int(CSg2, 0)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
L7NEG7N = makeOnlineTab(L7NEG7:add_tab("Tutorial ReadMe"))
|
|
|
|
L7NEG7N:add_text(" Ceo Crates Method ", function() end)
|
|
L7NEG7N:add_text(" First Enter Your Warehouse ", function() end)
|
|
L7NEG7N:add_text(
|
|
" Then Stand In Front Of Your Warehouse Computer And Then Active The Enable Ceo Manager ",
|
|
function() end
|
|
)
|
|
L7NEG7N:add_text("", function() end)
|
|
L7NEG7N:add_text("https://l7neg.is-a.dev/discord", function() end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
HeistsDataEditorMenu = makeOnlineTab(L7NEG:add_tab("Heists Data Editor Menu"))
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local ApartmentDataEditorMenu = HeistsDataEditorMenu:add_tab("Apartment Heist ")
|
|
|
|
ApartmentDataEditorMenu:add_text("Preps")
|
|
ApartmentDataEditorMenu:add_button("Complete Preps", function()
|
|
stats.set_int(MPX() .. "HEIST_PLANNING_STAGE", -1)
|
|
gui.show_message("Apartment Heist", "Preps should've been completed")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_text("")
|
|
ApartmentDataEditorMenu:add_text("For Fleeca:")
|
|
ApartmentDataEditorMenu:add_text(
|
|
'Pay for the preparation, start the first mission and as soon as you are sent to scout\nchange the session, come back to planning room, press "Complete Preps" near white board and press "E"'
|
|
)
|
|
ApartmentDataEditorMenu:add_text("For Other Heist:")
|
|
ApartmentDataEditorMenu:add_text(
|
|
'Start the mission and leave after the 1st cutscene ends, press "Complete Preps" near white board and press "E"'
|
|
)
|
|
ApartmentDataEditorMenu:add_separator()
|
|
ApartmentDataEditorMenu:add_button("Kill Cooldown", function()
|
|
globals.set_int(ACDg + 1 + (PLAYER.PLAYER_ID() * 77) + 76, -1)
|
|
gui.show_message("Apartment Heist", "Cooldown should've been killed")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Change Session", function()
|
|
changeSession(8)
|
|
end)
|
|
|
|
-- Lives Editor for Apartment Heist
|
|
ApartmentDataEditorMenu:add_separator()
|
|
ApartmentDataEditorMenu:add_text("Team Lives:")
|
|
local livesValueApartment = 3
|
|
ApartmentDataEditorMenu:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Team Lives:")
|
|
livesValueApartment, _ = ImGui.InputInt("##ApartmentLives", livesValueApartment)
|
|
if ImGui.Button("Set Lives##Apartment") then
|
|
if livesValueApartment < 1 then
|
|
gui.show_message("Apartment Heist", "Lives must be at least 1!")
|
|
else
|
|
locals.set_int("fm_mission_controller", AHLIVESL, livesValueApartment)
|
|
gui.show_message("Apartment Heist", "Team lives set to " .. livesValueApartment)
|
|
end
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Default is 3. Infinite team lives for the heist (set to 999999 for unlimited)")
|
|
end
|
|
end)
|
|
|
|
local heistCuts = {
|
|
easy = {
|
|
[1328892776] = { -5862, 2981 },
|
|
[964111671] = { -1614, 857 },
|
|
[1131632450] = { -1168, 634 },
|
|
[1967927346] = { -1596, 848 },
|
|
[1182286714] = { -700, 400 },
|
|
},
|
|
normal = {
|
|
[1328892776] = { -2878, 1489 },
|
|
[964111671] = { -756, 428 },
|
|
[1131632450] = { -534, 317 },
|
|
[1967927346] = { -748, 424 },
|
|
[1182286714] = { -300, 200 },
|
|
},
|
|
hard = {
|
|
[1328892776] = { -2284, 1192 },
|
|
[964111671] = { -584, 342 },
|
|
[1131632450] = { -406, 253 },
|
|
[1967927346] = { -578, 339 },
|
|
[1182286714] = { -220, 160 },
|
|
},
|
|
}
|
|
|
|
ApartmentDataEditorMenu:add_separator()
|
|
ApartmentDataEditorMenu:add_text(
|
|
"Works only for you. Allows you to get 12 millions bonus for The Pacific Standard Job on hard difficulty.\nEnable before starting the heist. Has a cooldown."
|
|
)
|
|
|
|
local apartmentBonus = ApartmentDataEditorMenu:add_checkbox("12mil Bonus")
|
|
local previousState = false
|
|
|
|
script.register_looped("SN_Apartment_Bonus", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
local currentState = apartmentBonus:is_enabled()
|
|
if currentState ~= previousState then
|
|
stats.set_int(joaat("MPPLY_HEISTFLOWORDERPROGRESS"), currentState and 268435455 or 134217727)
|
|
stats.set_bool(joaat("MPPLY_AWD_HST_ORDER"), not currentState)
|
|
stats.set_int(joaat("MPPLY_HEISTTEAMPROGRESSBITSET"), currentState and 268435455 or 134217727)
|
|
stats.set_bool(joaat("MPPLY_AWD_HST_SAME_TEAM"), not currentState)
|
|
stats.set_int(joaat("MPPLY_HEISTNODEATHPROGREITSET"), currentState and 268435455 or 134217727)
|
|
stats.set_bool(joaat("MPPLY_AWD_HST_ULT_CHAL"), not currentState)
|
|
gui.show_message(
|
|
"12mil Bonus",
|
|
currentState and "Bonus should've been applied. Don't forget about difficulty"
|
|
or "Bonus should've been unapplied"
|
|
)
|
|
previousState = currentState
|
|
end
|
|
script:sleep(100)
|
|
end)
|
|
|
|
ApartmentDataEditorMenu:add_separator()
|
|
local difficultyKeys = { "easy", "normal", "hard" }
|
|
ApartmentDataEditorMenu:add_button("3mil Payout", function()
|
|
script.run_in_fiber(function(ap)
|
|
local key = globals.get_int(ACDg + (PLAYER.PLAYER_ID() * 77) + 24 + 2)
|
|
local difficultyG = globals.get_int(AHDg)
|
|
local difficulty = difficultyKeys[difficultyG + 1]
|
|
local cuts = heistCuts[difficulty][key]
|
|
if cuts then
|
|
globals.set_int(ACg1, 100 - (cuts[2] * locals.get_int("fmmc_launcher", HGGs1)))
|
|
globals.set_int(ACg2, cuts[2])
|
|
if key ~= 1328892776 then
|
|
globals.set_int(ACg3, cuts[2])
|
|
globals.set_int(ACg4, cuts[2])
|
|
end
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(2, 201, 1)
|
|
ap:sleep(1000)
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(2, 202, 1)
|
|
ap:sleep(1000)
|
|
globals.set_int(ACg5, -1 * (-100 + cuts[1]) / 2)
|
|
gui.show_message("Apartment Heist", "Cuts should've been applied")
|
|
end
|
|
end)
|
|
end)
|
|
ApartmentDataEditorMenu:add_separator()
|
|
|
|
local apartCut1 = 0
|
|
local apartCut2 = 0
|
|
local apartCut3 = 0
|
|
local apartCut4 = 0
|
|
ApartmentDataEditorMenu:add_imgui(function()
|
|
PAD.DISABLE_CONTROL_ACTION(2, 237, true)
|
|
ImGui.Text("Custom Cuts:")
|
|
ImGui.SetNextItemWidth(150)
|
|
apartCut1 = ImGui.InputInt("Cut 1", apartCut1)
|
|
ImGui.SameLine()
|
|
ImGui.SetNextItemWidth(150)
|
|
apartCut2 = ImGui.InputInt("Cut 2", apartCut2)
|
|
ImGui.SetNextItemWidth(150)
|
|
apartCut3 = ImGui.InputInt("Cut 3", apartCut3)
|
|
ImGui.SameLine()
|
|
ImGui.SetNextItemWidth(150)
|
|
apartCut4 = ImGui.InputInt("Cut 4", apartCut4)
|
|
if ImGui.Button("Set Cuts") then
|
|
script.run_in_fiber(function(ccut)
|
|
local heistType = locals.get_int("fmmc_launcher", HGGs1)
|
|
local multiplier = (heistType == 1328892776) and 2 or 4
|
|
globals.set_int(ACg1, 100 - (apartCut1 * multiplier))
|
|
globals.set_int(ACg2, 100 - (apartCut2 * multiplier))
|
|
globals.set_int(ACg3, 100 - (apartCut3 * multiplier))
|
|
globals.set_int(ACg4, 100 - (apartCut4 * multiplier))
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(2, 201, 1)
|
|
ccut:sleep(1000)
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(2, 202, 1)
|
|
ccut:sleep(1000)
|
|
globals.set_int(ACg5, -1 * (-100 + globals.get_int(ACg1)) / multiplier)
|
|
gui.show_message("Apartment Heist", "Cuts should've been applied")
|
|
end)
|
|
end
|
|
end)
|
|
ApartmentDataEditorMenu:add_separator()
|
|
ApartmentDataEditorMenu:add_text("Extras")
|
|
ApartmentDataEditorMenu:add_button("Bypass Fleeca Hack", function()
|
|
locals.set_int("fm_mission_controller", AFHl, 7)
|
|
gui.show_message("Apartment Heist", "Hacking process should've been skipped")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Bypass Fleeca Drill", function()
|
|
locals.set_float("fm_mission_controller", AFDl, 100)
|
|
gui.show_message("Apartment Heist", "Drilling process should've been skipped")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Bypass Pacific Hack", function()
|
|
locals.set_int("fm_mission_controller", AFPl, 9)
|
|
gui.show_message("Apartment Heist", "Hacking process should've been skipped")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Skip Checkpoint", function()
|
|
locals.set_int("fm_mission_controller", AHSo, locals.get_int("fm_mission_controller", AHSo) | (1 << 17))
|
|
gui.show_message("Apartment Heist", "Checkpoint should've been skipped")
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Unlock All Jobs", function()
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_0", globals.get_int(AUAJg1))
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_0_L", 5)
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_1", globals.get_int(AUAJg2))
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_1_L", 5)
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_2", globals.get_int(AUAJg3))
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_2_L", 5)
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_3", globals.get_int(AUAJg4))
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_3_L", 5)
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_4", globals.get_int(AUAJg5))
|
|
stats.set_int(MPX() .. "HEIST_SAVED_STRAND_4_L", 5)
|
|
gui.show_message("Apartment Heist", "All jobs should've been unlocked. Don't forget to restart the game")
|
|
end)
|
|
ApartmentDataEditorMenu:add_button("Solo Launch", function()
|
|
if locals.get_int("fmmc_launcher", HGGs1) ~= nil then
|
|
if locals.get_int("fmmc_launcher", HGGs1) ~= 0 then
|
|
if locals.get_int("fmmc_launcher", HGGs1) > 1 then
|
|
locals.set_int("fmmc_launcher", HGGs2, 1)
|
|
globals.set_int(794989 + 4 + 1 + (locals.get_int("fmmc_launcher", HGGs1) * 95) + 75, 1)
|
|
end
|
|
globals.set_int(HGLs1, 1)
|
|
globals.set_int(HGLs2, 1)
|
|
globals.set_int(HGLs3, 1)
|
|
globals.set_int(HGLs4, 0)
|
|
end
|
|
end
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Skip Cutscene", SkipCutscene)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Force Ready", function()
|
|
script.run_in_fiber(function(script)
|
|
network.force_script_host("fm_mission_controller")
|
|
script:sleep(1000)
|
|
for i = 1, 4 do
|
|
globals.set_int(2658291 + 1 + ((i - 1) * 468) + 270, 6)
|
|
end
|
|
gui.show_message("Apartment Heist", "Everyone should've been forced ready")
|
|
end)
|
|
end)
|
|
ApartmentDataEditorMenu:add_sameline()
|
|
ApartmentDataEditorMenu:add_button("Instant Finish", function()
|
|
script.run_in_fiber(function(script)
|
|
network.force_script_host("fm_mission_controller")
|
|
script:sleep(1000)
|
|
local heistType = globals.get_int(ACDg + (PLAYER.PLAYER_ID() * 77) + 24 + 2)
|
|
if heistType == 1182286714 then
|
|
locals.set_int("fm_mission_controller", AIFl2, 5)
|
|
locals.set_int("fm_mission_controller", AIFl3, 80)
|
|
locals.set_int("fm_mission_controller", AIFl4, 10000000)
|
|
locals.set_int("fm_mission_controller", AIFl5, 99999)
|
|
locals.set_int("fm_mission_controller", AIFl6, 99999)
|
|
else
|
|
locals.set_int("fm_mission_controller", AIFl1, 12)
|
|
locals.set_int("fm_mission_controller", AIFl4, 99999)
|
|
locals.set_int("fm_mission_controller", AIFl5, 99999)
|
|
locals.set_int("fm_mission_controller", AIFl6, 99999)
|
|
end
|
|
end)
|
|
end)
|
|
ApartmentDataEditorMenu:add_text("")
|
|
ApartmentDataEditorMenu:add_text("Note: After Clicking Unlock All Heists, restart the game")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Agency tab
|
|
local AgencyContracts = {
|
|
{ name = "None", index = 3 },
|
|
{ name = "Nightclub", index = 4 },
|
|
{ name = "Marina", index = 12 },
|
|
{ name = "Nightlife Leak", index = 28 },
|
|
{ name = "Country Club", index = 60 },
|
|
{ name = "Guest List", index = 123 },
|
|
{ name = "High Society Leak", index = 254 },
|
|
{ name = "Davis", index = 508 },
|
|
{ name = "Ballas", index = 1020 },
|
|
{ name = "South Central Leak", index = 2044 },
|
|
{ name = "Studio Time", index = 2045 },
|
|
{ name = "Don't Fuck With Dre", index = 4095 },
|
|
}
|
|
|
|
local contractNames = {}
|
|
for i, contract in ipairs(AgencyContracts) do
|
|
table.insert(contractNames, contract.name)
|
|
end
|
|
local sContract = 0
|
|
local SN_Agency = HeistsDataEditorMenu:add_tab("Agency ")
|
|
SN_Agency:add_text("Money")
|
|
local agencySafe = SN_Agency:add_checkbox("Agency Safe Loop")
|
|
script.register_looped("agencyloop", function(script)
|
|
script:yield()
|
|
if agencySafe:is_enabled() == true then
|
|
gui.show_message("Business Manager", "Supplying Agency Safe with money")
|
|
stats.set_int(MPX() .. "FIXER_COUNT", 500)
|
|
stats.set_int(MPX() .. "FIXER_PASSIVE_PAY_TIME_LEFT", -1)
|
|
script:sleep(500)
|
|
end
|
|
end)
|
|
SN_Agency:add_separator()
|
|
SN_Agency:add_imgui(function()
|
|
ImGui.Text("Contract:")
|
|
ImGui.SetNextItemWidth(200)
|
|
local nSelected, clicked = ImGui.Combo("##AgencyContract", sContract, contractNames, #contractNames)
|
|
if clicked then
|
|
sContract = nSelected
|
|
local contractD = AgencyContracts[sContract + 1]
|
|
local contractId = contractD.index
|
|
|
|
stats.set_int(MPX() .. "FIXER_STORY_BS", contractId)
|
|
if contractId < 18 then
|
|
stats.set_int(MPX() .. "FIXER_STORY_STRAND", 0)
|
|
elseif contractId < 128 then
|
|
stats.set_int(MPX() .. "FIXER_STORY_STRAND", 1)
|
|
elseif contractId < 2044 then
|
|
stats.set_int(MPX() .. "FIXER_STORY_STRAND", 2)
|
|
else
|
|
stats.set_int(MPX() .. "FIXER_STORY_STRAND", -1)
|
|
end
|
|
end
|
|
end)
|
|
|
|
SN_Agency:add_button("Complete Preps", function()
|
|
stats.set_int(MPX() .. "FIXER_GENERAL_BS", -1)
|
|
stats.set_int(MPX() .. "FIXER_COMPLETED_BS", -1)
|
|
stats.set_int(MPX() .. "FIXER_STORY_COOLDOWN", -1)
|
|
gui.show_message("Agency", "Preps should've been completed")
|
|
end)
|
|
SN_Agency:add_separator()
|
|
SN_Agency:add_text("Payouts:")
|
|
local agencyPayoutValue = 0
|
|
SN_Agency:add_imgui(function()
|
|
agencyPayoutValue, _ = ImGui.InputInt("##AgencyPayout", agencyPayoutValue)
|
|
end)
|
|
SN_Agency:add_button("Max", function()
|
|
agencyPayoutValue = 2500000
|
|
gui.show_message("Agency", "Payout should've been maximized. Don't forget to apply")
|
|
end)
|
|
SN_Agency:add_button("Apply Payout", function()
|
|
local payout = agencyPayoutValue
|
|
tunables.set_int("FIXER_FINALE_LEADER_CASH_REWARD", payout)
|
|
gui.show_message("Agency", "Payout should've been applied")
|
|
end)
|
|
SN_Agency:add_text("Use 'Apply Payout' after you can see the minimap.")
|
|
SN_Agency:add_separator()
|
|
SN_Agency:add_button("Instant Finish", function()
|
|
locals.set_int("fm_mission_controller_2020", AGFl1, 51338752)
|
|
locals.set_int("fm_mission_controller_2020", AGFl2, 50)
|
|
gui.show_message("Agency", "Heist should've been finished")
|
|
end)
|
|
SN_Agency:add_sameline()
|
|
SN_Agency:add_button("Skip Cutscene", SkipCutscene)
|
|
SN_Agency:add_sameline()
|
|
SN_Agency:add_button("Kill Cooldowns", function()
|
|
tunables.set_int("FIXER_STORY_COOLDOWN_POSIX", 0)
|
|
tunables.set_int("FIXER_SECURITY_CONTRACT_COOLDOWN_TIME", 0)
|
|
tunables.set_int("REQUEST_FRANKLIN_PAYPHONE_HIT_COOLDOWN", 0)
|
|
stats.set_int(MPX() .. "FIXER_STORY_COOLDOWN", -1)
|
|
gui.show_message("Agency", "Cooldowns should've been killed")
|
|
end)
|
|
SN_Agency:add_separator()
|
|
SN_Agency:add_text("After All choices and pressing Complete Preps wait for sometime")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Autoshop tab
|
|
local AutoShopContracts = {
|
|
{ name = "None", index = -1 },
|
|
{ name = "Union Deposit.", index = 0 },
|
|
{ name = "Superdol. Deal", index = 1 },
|
|
{ name = "Bank Contract", index = 2 },
|
|
{ name = "ECU Job", index = 3 },
|
|
{ name = "Prison Contrac.", index = 4 },
|
|
{ name = "Agency Deal", index = 5 },
|
|
{ name = "Lost Contract", index = 6 },
|
|
{ name = "Data Contract", index = 7 },
|
|
}
|
|
|
|
local autoSelectedIndex = 0
|
|
local SN_Autoshop = HeistsDataEditorMenu:add_tab("Autoshop ")
|
|
SN_Autoshop:add_imgui(function()
|
|
ImGui.Text("Contract:")
|
|
autoSelectedIndex = ImGui.Combo(
|
|
"##AutoContract",
|
|
autoSelectedIndex,
|
|
{
|
|
AutoShopContracts[1].name,
|
|
AutoShopContracts[2].name,
|
|
AutoShopContracts[3].name,
|
|
AutoShopContracts[4].name,
|
|
AutoShopContracts[5].name,
|
|
AutoShopContracts[6].name,
|
|
AutoShopContracts[7].name,
|
|
AutoShopContracts[8].name,
|
|
AutoShopContracts[9].name,
|
|
},
|
|
9
|
|
)
|
|
end)
|
|
SN_Autoshop:add_button("Apply & Complete Preps", function()
|
|
local contract = AutoShopContracts[autoSelectedIndex + 1].index
|
|
stats.set_int(MPX() .. "TUNER_CURRENT", contract)
|
|
stats.set_int(MPX() .. "TUNER_GEN_BS", (contract == 1 and 4351 or 12543))
|
|
locals.set_int("tuner_planning", ASRBl, 2)
|
|
gui.show_message("Autoshop", "Preps should've been completed")
|
|
end)
|
|
SN_Autoshop:add_button("Reset Preps", function()
|
|
stats.set_int(MPX() .. "TUNER_GEN_BS", 12467)
|
|
locals.set_int("tuner_planning", ASRBl, 2)
|
|
gui.show_message("Autoshop", "Preps should've been reset")
|
|
end)
|
|
SN_Autoshop:add_button("Redraw Board", function()
|
|
locals.set_int("tuner_planning", ASRBl, 2)
|
|
gui.show_message("Autoshop", "Board should've been redrawn")
|
|
end)
|
|
SN_Autoshop:add_separator()
|
|
SN_Autoshop:add_text("Payouts:")
|
|
local autoPayoutValue = 0
|
|
SN_Autoshop:add_imgui(function()
|
|
autoPayoutValue, _ = ImGui.InputInt("##AutoPayout", autoPayoutValue)
|
|
end)
|
|
SN_Autoshop:add_button("Max", function()
|
|
autoPayoutValue = 2000000
|
|
gui.show_message("Autoshop", "Payout should've been maximized. Don't forget to apply")
|
|
end)
|
|
SN_Autoshop:add_button("Apply Payout", function()
|
|
local payout = autoPayoutValue
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD0", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD1", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD2", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD3", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD4", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD5", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD6", payout)
|
|
tunables.set_int("TUNER_ROBBERY_LEADER_CASH_REWARD7", payout)
|
|
tunables.set_float("TUNER_ROBBERY_CONTACT_FEE", 0.0)
|
|
gui.show_message("Autoshop", "Payout should've been applied")
|
|
end)
|
|
SN_Autoshop:add_text("Use 'Apply Payout' after you can see the minimap.")
|
|
SN_Autoshop:add_separator()
|
|
SN_Autoshop:add_text("Extras")
|
|
SN_Autoshop:add_button("Instant Finish", function()
|
|
locals.set_int("fm_mission_controller_2020", ASIFl1, 51338977)
|
|
locals.set_int("fm_mission_controller_2020", ASIFl2, 101)
|
|
gui.show_message("Autoshop", "Heist should've been finished")
|
|
end)
|
|
SN_Autoshop:add_sameline()
|
|
SN_Autoshop:add_button("Skip Cutscene", SkipCutscene)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Salvage Yard --
|
|
local SalvageYard = {
|
|
robberies = {
|
|
{ name = "Cargo Ship", index = 0 },
|
|
{ name = "Gangbanger", index = 1 },
|
|
{ name = "Duggan", index = 2 },
|
|
{ name = "Podium", index = 3 },
|
|
{ name = "McTony", index = 4 },
|
|
},
|
|
vehicles = {
|
|
{ name = "LM87", index = 1 },
|
|
{ name = "Cinquemila", index = 2 },
|
|
{ name = "Autarch", index = 3 },
|
|
{ name = "Tigon", index = 4 },
|
|
{ name = "Champion", index = 5 },
|
|
{ name = "10F", index = 6 },
|
|
{ name = "SM722", index = 7 },
|
|
{ name = "Omnis e-GT", index = 8 },
|
|
{ name = "Growler", index = 9 },
|
|
{ name = "Deity", index = 10 },
|
|
{ name = "Itali RSX", index = 11 },
|
|
{ name = "Coquette D10", index = 12 },
|
|
{ name = "Jubilee", index = 13 },
|
|
{ name = "Astron", index = 14 },
|
|
{ name = "Comet S2 Cabr.", index = 15 },
|
|
{ name = "Torero", index = 16 },
|
|
{ name = "Cheetah Classic", index = 17 },
|
|
{ name = "Turismo Classic", index = 18 },
|
|
{ name = "Infernus Classic", index = 19 },
|
|
{ name = "Stafford", index = 20 },
|
|
{ name = "GT500", index = 21 },
|
|
{ name = "Viseris", index = 22 },
|
|
{ name = "Mamba", index = 23 },
|
|
{ name = "Coquette Black.", index = 24 },
|
|
{ name = "Stinger GT", index = 25 },
|
|
{ name = "Z-Type", index = 26 },
|
|
{ name = "Broadway", index = 27 },
|
|
{ name = "Vigero ZX", index = 28 },
|
|
{ name = "Buffalo STX", index = 29 },
|
|
{ name = "Ruston", index = 30 },
|
|
{ name = "Gauntl. Hellfire", index = 31 },
|
|
{ name = "Dominator GTT", index = 32 },
|
|
{ name = "Roosevelt Valor", index = 33 },
|
|
{ name = "Swinger", index = 34 },
|
|
{ name = "Stirling GT", index = 35 },
|
|
{ name = "Omnis", index = 36 },
|
|
{ name = "Tropos Rallye", index = 37 },
|
|
{ name = "Jugular", index = 38 },
|
|
{ name = "Patriot Mil-Spec", index = 39 },
|
|
{ name = "Toros", index = 40 },
|
|
{ name = "Caracara 4x4", index = 41 },
|
|
{ name = "Sentinel Classic", index = 42 },
|
|
{ name = "Weevil", index = 43 },
|
|
{ name = "Blista Kanjo", index = 44 },
|
|
{ name = "Eudora", index = 45 },
|
|
{ name = "Kamacho", index = 46 },
|
|
{ name = "Hellion", index = 47 },
|
|
{ name = "Ellie", index = 48 },
|
|
{ name = "Hermes", index = 49 },
|
|
{ name = "Hustler", index = 50 },
|
|
{ name = "Turismo Om.", index = 51 },
|
|
{ name = "Buffalo EVX", index = 52 },
|
|
{ name = "Itali GTO St.", index = 53 },
|
|
{ name = "Virtue", index = 54 },
|
|
{ name = "Ignus", index = 55 },
|
|
{ name = "Zentorno", index = 56 },
|
|
{ name = "Neon", index = 57 },
|
|
{ name = "Furia", index = 58 },
|
|
{ name = "Zorrusso", index = 59 },
|
|
{ name = "Thrax", index = 60 },
|
|
{ name = "Vagner", index = 61 },
|
|
{ name = "Panthere", index = 62 },
|
|
{ name = "Itali GTO", index = 63 },
|
|
{ name = "S80RR", index = 64 },
|
|
{ name = "Tyrant", index = 65 },
|
|
{ name = "Entity MT", index = 66 },
|
|
{ name = "Torero XO", index = 67 },
|
|
{ name = "Neo", index = 68 },
|
|
{ name = "Corsita", index = 69 },
|
|
{ name = "Paragon R", index = 70 },
|
|
{ name = "Franken Stange", index = 71 },
|
|
{ name = "Comet Safari", index = 72 },
|
|
{ name = "FR36", index = 73 },
|
|
{ name = "Hotring Everon", index = 74 },
|
|
{ name = "Komoda", index = 75 },
|
|
{ name = "Tailgater S", index = 76 },
|
|
{ name = "Jester Classic", index = 77 },
|
|
{ name = "Jester RR", index = 78 },
|
|
{ name = "Euros", index = 79 },
|
|
{ name = "ZR350", index = 80 },
|
|
{ name = "Cypher", index = 81 },
|
|
{ name = "Dominator ASP", index = 82 },
|
|
{ name = "Baller ST-D", index = 83 },
|
|
{ name = "Casco", index = 84 },
|
|
{ name = "Drift Yosemite", index = 85 },
|
|
{ name = "Everon", index = 86 },
|
|
{ name = "Penumbra FF", index = 87 },
|
|
{ name = "V-STR", index = 88 },
|
|
{ name = "Dominator GT", index = 89 },
|
|
{ name = "Schlagen GT", index = 90 },
|
|
{ name = "Cavalcade XL", index = 91 },
|
|
{ name = "Clique", index = 92 },
|
|
{ name = "Boor", index = 93 },
|
|
{ name = "Sugoi", index = 94 },
|
|
{ name = "Greenwood", index = 95 },
|
|
{ name = "Brigham", index = 96 },
|
|
{ name = "Issi Rally", index = 97 },
|
|
{ name = "Seminole Fr.", index = 98 },
|
|
{ name = "Kanjo SJ", index = 99 },
|
|
{ name = "Previon", index = 100 },
|
|
},
|
|
modifications = {
|
|
{ name = "Version 1", index = 0 },
|
|
{ name = "Version 2", index = 1 },
|
|
{ name = "Version 3", index = 2 },
|
|
{ name = "Version 4", index = 3 },
|
|
{ name = "Version 5", index = 4 },
|
|
},
|
|
keeps = {
|
|
{ name = "Can't Claim", index = 0 },
|
|
{ name = "Can Claim", index = 1 },
|
|
},
|
|
tunables = {
|
|
robbery_slot1_type = 1152433341,
|
|
robbery_slot2_type = 852564222,
|
|
robbery_slot3_type = 552662330,
|
|
vehicle_slot1_type = -1012732012,
|
|
vehicle_slot1_value = -1699398139,
|
|
vehicle_slot1_cankeep = -1700733442,
|
|
vehicle_slot2_type = 1366330161,
|
|
vehicle_slot2_value = -1997104504,
|
|
vehicle_slot2_cankeep = -1547046832,
|
|
vehicle_slot3_type = 1806057372,
|
|
vehicle_slot3_value = -1704051341,
|
|
vehicle_slot3_cankeep = 1830093543,
|
|
cooldown_weekly = "SALV23_VEH_ROBBERY_WEEK_ID",
|
|
},
|
|
salvage_missions = {
|
|
{ script = "fm_content_vehrob_cargo_ship", step1 = 7185 + 1, step2 = 7330 + 1249 },
|
|
{ script = "fm_content_vehrob_police", step1 = 9011 + 1, step2 = 9144 + 1305 },
|
|
{ script = "fm_content_vehrob_arena", step1 = 7912 + 1, step2 = 8032 + 1314 },
|
|
{ script = "fm_content_vehrob_casino_prize", step1 = 9191 + 1, step2 = 9328 + 1258 },
|
|
{ script = "fm_content_vehrob_submarine", step1 = 6218 + 1, step2 = 6356 + 1159 },
|
|
},
|
|
}
|
|
|
|
local slot_names = { "Slot 1", "Slot 2", "Slot 3" }
|
|
local slot1 = {
|
|
robbery_index = 0,
|
|
vehicle_index = 0,
|
|
mod_index = 0,
|
|
keep_index = 0,
|
|
}
|
|
local slot2 = {
|
|
robbery_index = 0,
|
|
vehicle_index = 0,
|
|
mod_index = 0,
|
|
keep_index = 0,
|
|
}
|
|
local slot3 = {
|
|
robbery_index = 0,
|
|
vehicle_index = 0,
|
|
mod_index = 0,
|
|
keep_index = 0,
|
|
}
|
|
|
|
local robbery_names = {}
|
|
for _, robbery in ipairs(SalvageYard.robberies) do
|
|
table.insert(robbery_names, robbery.name)
|
|
end
|
|
|
|
local vehicle_names = {}
|
|
for _, vehicle in ipairs(SalvageYard.vehicles) do
|
|
table.insert(vehicle_names, vehicle.name)
|
|
end
|
|
|
|
local mod_names = {}
|
|
for _, mod in ipairs(SalvageYard.modifications) do
|
|
table.insert(mod_names, mod.name)
|
|
end
|
|
|
|
local keep_names = {}
|
|
for _, keep in ipairs(SalvageYard.keeps) do
|
|
table.insert(keep_names, keep.name)
|
|
end
|
|
local ssIndex = 0
|
|
local SN_Salvage = HeistsDataEditorMenu:add_tab("Salvage Yard ")
|
|
SN_Salvage:add_imgui(function()
|
|
local nIndex, changed = ImGui.Combo("##Slot", ssIndex, slot_names, #slot_names)
|
|
if changed then
|
|
ssIndex = nIndex
|
|
end
|
|
local currSlot = ssIndex + 1
|
|
local slots = { slot1, slot2, slot3 }
|
|
local slot = slots[currSlot]
|
|
|
|
local nIndex, changed = ImGui.Combo("Robbery", slot.robbery_index, robbery_names, #robbery_names)
|
|
if changed then
|
|
slot.robbery_index = nIndex
|
|
gui.show_message(
|
|
"Salvage Yard",
|
|
"Selected " .. slot_names[ssIndex + 1] .. " robbery: " .. robbery_names[slot.robbery_index + 1]
|
|
)
|
|
end
|
|
|
|
nIndex, changed = ImGui.Combo("Vehicle", slot.vehicle_index, vehicle_names, #vehicle_names)
|
|
if changed then
|
|
slot.vehicle_index = nIndex
|
|
gui.show_message(
|
|
"Salvage Yard",
|
|
"Selected " .. slot_names[ssIndex + 1] .. " vehicle: " .. vehicle_names[slot.vehicle_index + 1]
|
|
)
|
|
end
|
|
|
|
nIndex, changed = ImGui.Combo("Modification", slot.mod_index, mod_names, #mod_names)
|
|
if changed then
|
|
slot.mod_index = nIndex
|
|
gui.show_message(
|
|
"Salvage Yard",
|
|
"Selected " .. slot_names[ssIndex + 1] .. " modification: " .. mod_names[slot.mod_index + 1]
|
|
)
|
|
end
|
|
|
|
nIndex, changed = ImGui.Combo("Status", slot.keep_index, keep_names, #keep_names)
|
|
if changed then
|
|
slot.keep_index = nIndex
|
|
gui.show_message(
|
|
"Salvage Yard",
|
|
"Selected " .. slot_names[ssIndex + 1] .. " status: " .. keep_names[slot.keep_index + 1]
|
|
)
|
|
end
|
|
|
|
if ImGui.Button("Apply Changes") then
|
|
local robbery = SalvageYard.robberies[slot.robbery_index + 1].index
|
|
local vehicle = SalvageYard.vehicles[slot.vehicle_index + 1].index
|
|
local mod = SalvageYard.modifications[slot.mod_index + 1].index
|
|
local keep = SalvageYard.keeps[slot.keep_index + 1].index
|
|
tunables.set_int(SalvageYard.tunables["robbery_slot" .. currSlot .. "_type"], robbery)
|
|
tunables.set_int(SalvageYard.tunables["vehicle_slot" .. currSlot .. "_type"], vehicle + mod * 100)
|
|
tunables.set_int(SalvageYard.tunables["vehicle_slot" .. currSlot .. "_cankeep"], keep)
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", slot_names[ssIndex + 1] .. " changes should've been applied")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Make Available") then
|
|
stats.set_int(MPX() .. "SALV23_VEHROB_STATUS" .. (currSlot - 1), 0)
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", slot_names[ssIndex + 1] .. " should've been made Available")
|
|
end
|
|
end)
|
|
|
|
SN_Salvage:add_text("")
|
|
SN_Salvage:add_text("Preps")
|
|
SN_Salvage:add_separator()
|
|
SN_Salvage:add_button("Complete Preps", function()
|
|
stats.set_int(MPX() .. "SALV23_GEN_BS", -1)
|
|
stats.set_int(MPX() .. "SALV23_SCOPE_BS", -1)
|
|
stats.set_int(MPX() .. "SALV23_FM_PROG", -1)
|
|
stats.set_int(MPX() .. "SALV23_INST_PROG", -1)
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", "Preps should've been completed")
|
|
end)
|
|
SN_Salvage:add_sameline()
|
|
SN_Salvage:add_button("Reset Preps", function()
|
|
stats.set_int(MPX() .. "SALV23_GEN_BS", 0)
|
|
stats.set_int(MPX() .. "SALV23_SCOPE_BS", 0)
|
|
stats.set_int(MPX() .. "SALV23_FM_PROG", 0)
|
|
stats.set_int(MPX() .. "SALV23_INST_PROG", 0)
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", "Preps should've been reset")
|
|
end)
|
|
SN_Salvage:add_button("Reload Screen", function()
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", "Screen should've been reloaded")
|
|
end)
|
|
SN_Salvage:add_button("Skip Weekly Cooldown", function()
|
|
tunables.set_int(SalvageYard.tunables.cooldown_weekly, stats.get_int(MPX() .. "SALV23_WEEK_SYNC") + 1)
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", "Cooldown should've been skipped")
|
|
end)
|
|
|
|
SN_Salvage:add_separator()
|
|
SN_Salvage:add_text("Payout")
|
|
local sell_value_slot1 = SN_Salvage:add_input_int("Sell Value Slot 1")
|
|
sell_value_slot1:set_value(0)
|
|
local sell_value_slot2 = SN_Salvage:add_input_int("Sell Value Slot 2")
|
|
sell_value_slot2:set_value(0)
|
|
local sell_value_slot3 = SN_Salvage:add_input_int("Sell Value Slot 3")
|
|
sell_value_slot3:set_value(0)
|
|
SN_Salvage:add_button("Apply Sell Values", function()
|
|
tunables.set_int(SalvageYard.tunables.vehicle_slot1_value, sell_value_slot1:get_value())
|
|
tunables.set_int(SalvageYard.tunables.vehicle_slot2_value, sell_value_slot2:get_value())
|
|
tunables.set_int(SalvageYard.tunables.vehicle_slot3_value, sell_value_slot3:get_value())
|
|
locals.set_int("vehrob_planning", SYRl1, 2)
|
|
gui.show_message("Salvage Yard", "Sell values should've been applied")
|
|
end)
|
|
|
|
SN_Salvage:add_text("")
|
|
SN_Salvage:add_text("Misc")
|
|
SN_Salvage:add_separator()
|
|
SN_Salvage:add_button("Instant Finish", function()
|
|
for _, mission in ipairs(SalvageYard.salvage_missions) do
|
|
local value = locals.get_int(mission.script, mission.step1)
|
|
locals.set_int(mission.script, mission.step1, value | (1 << 11))
|
|
locals.set_int(mission.script, mission.step2, 2)
|
|
end
|
|
gui.show_message("Salvage Yard", "Heist should've been finished")
|
|
end)
|
|
SN_Salvage:add_sameline()
|
|
SN_Salvage:add_button("Instant Sell", function()
|
|
local player_ped = PLAYER.PLAYER_PED_ID()
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(player_ped, 1169.0, -2976.0, 6.0)
|
|
gui.show_message("Salvage Yard", "Sell mission should've been finished")
|
|
end)
|
|
SN_Salvage:add_sameline()
|
|
SN_Salvage:add_button("Skip Cutscene", SkipCutscene)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Cluckin Bell --
|
|
local cluckperps = {
|
|
{ id = 0, name = "Slush Fund" },
|
|
{ id = 1, name = "Breaking and Entering" },
|
|
{ id = 3, name = "Concealed Rewards" },
|
|
{ id = 7, name = "Hit And Run" },
|
|
{ id = 15, name = "Disorganized Crime" },
|
|
{ id = 31, name = "Scene of Crime" },
|
|
}
|
|
|
|
local SN_Cluck = HeistsDataEditorMenu:add_tab("Cluckin Bell Heist ")
|
|
|
|
SN_Cluck:add_text("Complete Preps")
|
|
|
|
for _, cluckprep in ipairs(cluckperps) do
|
|
SN_Cluck:add_button(cluckprep.name, function()
|
|
stats.set_int(MPX() .. "SALV23_INST_PROG", cluckprep.id)
|
|
end)
|
|
SN_Cluck:add_sameline()
|
|
end
|
|
SN_Cluck:add_separator()
|
|
SN_Cluck:add_text("Reset preps")
|
|
SN_Cluck:add_button("Reset Preps", function()
|
|
stats.set_int(MPX() .. "SALV23_INST_PROG", 0)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Doomsday --
|
|
|
|
function DoomsdayActSetter(progress, status)
|
|
stats.set_int(MPX() .. "GANGOPS_FLOW_MISSION_PROG", progress)
|
|
stats.set_int(MPX() .. "GANGOPS_HEIST_STATUS", status)
|
|
stats.set_int(MPX() .. "GANGOPS_FLOW_NOTIFICATIONS", 1557)
|
|
end
|
|
|
|
local SN_Doomsday = HeistsDataEditorMenu:add_tab("Doomsday Heist ")
|
|
SN_Doomsday:add_text("Doomsday Acts")
|
|
SN_Doomsday:add_button("Data Breaches", function()
|
|
DoomsdayActSetter(503, 229383)
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Bogdan Problem", function()
|
|
DoomsdayActSetter(240, 229378)
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Doomsday Scenario", function()
|
|
DoomsdayActSetter(16368, 229380)
|
|
end)
|
|
|
|
local DoomsdayHeists = {
|
|
[503] = { 975000, 1218750 },
|
|
[240] = { 1425000, 1771250 },
|
|
[16368] = { 1800000, 2250000 },
|
|
}
|
|
|
|
function SetDoomsdayMaxPayout()
|
|
local heist = stats.get_int(MPX() .. "GANGOPS_FLOW_MISSION_PROG")
|
|
local difficulty = globals.get_int(AHDg)
|
|
if difficulty == 0 then
|
|
difficulty = 1
|
|
end
|
|
|
|
local heistData = DoomsdayHeists[heist]
|
|
if heistData == nil then
|
|
return
|
|
end
|
|
|
|
local payout = heistData[difficulty]
|
|
local maxPayout = 2550000
|
|
local cut = math.floor(maxPayout / (payout / 100))
|
|
|
|
return cut
|
|
end
|
|
|
|
SN_Doomsday:add_separator()
|
|
SN_Doomsday:add_text("Custom Cuts:")
|
|
local dmsdyCut1 = SN_Doomsday:add_input_int("Cut 1")
|
|
local dmsdyCut2 = SN_Doomsday:add_input_int("Cut 2")
|
|
local dmsdyCut3 = SN_Doomsday:add_input_int("Cut 3")
|
|
local dmsdyCut4 = SN_Doomsday:add_input_int("Cut 4")
|
|
|
|
local Presets = {
|
|
{ name = "All - 0%", index = 0 },
|
|
{ name = "All - 85%", index = 85 },
|
|
{ name = "All - 100%", index = 100 },
|
|
{ name = "2.55mil Payout", index = -1 },
|
|
}
|
|
|
|
local presetNames = {}
|
|
for _, preset in ipairs(Presets) do
|
|
table.insert(presetNames, preset.name)
|
|
end
|
|
local sPresetIndex = 0
|
|
|
|
SN_Doomsday:add_imgui(function()
|
|
ImGui.Text("Presets:")
|
|
ImGui.SetNextItemWidth(170)
|
|
local nIndex, changed = ImGui.Combo("##DoomsdayPreset", sPresetIndex, presetNames, #presetNames)
|
|
if changed then
|
|
sPresetIndex = nIndex
|
|
local selected = Presets[sPresetIndex + 1]
|
|
local cutValue = selected.index
|
|
if cutValue == -1 then
|
|
cutValue = SetDoomsdayMaxPayout()
|
|
end
|
|
if dmsdyCut1 then
|
|
dmsdyCut1:set_value(cutValue)
|
|
end
|
|
if dmsdyCut2 then
|
|
dmsdyCut2:set_value(cutValue)
|
|
end
|
|
if dmsdyCut3 then
|
|
dmsdyCut3:set_value(cutValue)
|
|
end
|
|
if dmsdyCut4 then
|
|
dmsdyCut4:set_value(cutValue)
|
|
end
|
|
end
|
|
end)
|
|
|
|
SN_Doomsday:add_button("Apply Cuts", function()
|
|
globals.set_int(DCg1, dmsdyCut1:get_value())
|
|
globals.set_int(DCg2, dmsdyCut2:get_value())
|
|
globals.set_int(DCg3, dmsdyCut3:get_value())
|
|
globals.set_int(DCg4, dmsdyCut4:get_value())
|
|
gui.show_message("Doomsday Heist", "Cuts should've been applied")
|
|
end)
|
|
|
|
-- Lives Editor for Doomsday Heist
|
|
SN_Doomsday:add_separator()
|
|
SN_Doomsday:add_text("Team Lives:")
|
|
local livesValueDoomsday = 3
|
|
SN_Doomsday:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Team Lives:")
|
|
livesValueDoomsday, _ = ImGui.InputInt("##DoomsdayLives", livesValueDoomsday)
|
|
if ImGui.Button("Set Lives##Doomsday") then
|
|
if livesValueDoomsday < 1 then
|
|
gui.show_message("Doomsday Heist", "Lives must be at least 1!")
|
|
else
|
|
locals.set_int("fm_mission_controller", DDLIVESL, livesValueDoomsday)
|
|
gui.show_message("Doomsday Heist", "Team lives set to " .. livesValueDoomsday)
|
|
end
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Default is 3. Infinite team lives for the heist (set to 999999 for unlimited)")
|
|
end
|
|
end)
|
|
|
|
SN_Doomsday:add_separator()
|
|
SN_Doomsday:add_text("Preps")
|
|
SN_Doomsday:add_button("Reset Preps", function()
|
|
DoomsdayActSetter(240, 0)
|
|
gui.show_message("Doomsday Heist", "Preps should've been reset")
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Complete Preps", function()
|
|
stats.set_int(MPX() .. "GANGOPS_FM_MISSION_PROG", -1)
|
|
end)
|
|
SN_Doomsday:add_separator()
|
|
SN_Doomsday:add_text("Extras")
|
|
SN_Doomsday:add_button("By Act III Pass hack", function()
|
|
locals.set_int("fm_mission_controller", DDSHl, 3)
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Solo Launch", function()
|
|
if locals.get_int("fmmc_launcher", HGGs1) ~= nil then
|
|
if locals.get_int("fmmc_launcher", HGGs1) ~= 0 then
|
|
if locals.get_int("fmmc_launcher", HGGs1) > 1 then
|
|
locals.set_int("fmmc_launcher", HGGs2, 1)
|
|
globals.set_int(794989 + 4 + 1 + (locals.get_int("fmmc_launcher", HGGs1) * 95) + 75, 1)
|
|
end
|
|
globals.set_int(HGLs1, 1)
|
|
globals.set_int(HGLs2, 1)
|
|
globals.set_int(HGLs3, 1)
|
|
globals.set_int(HGLs4, 0)
|
|
end
|
|
end
|
|
end)
|
|
SN_Doomsday:add_button("Instant Finish", function()
|
|
locals.set_int("fm_mission_controller", DDIF1, 12)
|
|
locals.set_int("fm_mission_controller", DDIF2, 150)
|
|
locals.set_int("fm_mission_controller", DDIF3, 99999)
|
|
locals.set_int("fm_mission_controller", DDIF4, 99999)
|
|
locals.set_int("fm_mission_controller", DDIF5, 80)
|
|
gui.show_message("Doomsday Heist", "Heist should've been finished")
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Force Ready", function()
|
|
script.run_in_fiber(function(script)
|
|
network.force_script_host("fm_mission_controller")
|
|
script:sleep(1000)
|
|
for i = 1, 4 do
|
|
globals.set_int(1882572 + 1 + ((i - 1) * 315) + 43 + 11 + i, 1)
|
|
end
|
|
gui.show_message("Doomsday Heist", "Everyone should've been forced ready")
|
|
end)
|
|
end)
|
|
SN_Doomsday:add_sameline()
|
|
SN_Doomsday:add_button("Skip Cutscene", SkipCutscene)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Casino Heist --
|
|
|
|
local CasinoHeistEditorMenu = HeistsDataEditorMenu:add_tab("Casino Heist")
|
|
|
|
CasinoHeistEditorMenu:add_text("One Click Setups:")
|
|
CasinoHeistEditorMenu:add_button("Casino Silent&Sneaky (Diamonds)", function()
|
|
stats.set_int(MPX() .. "H3OPT_APPROACH", 1)
|
|
stats.set_int(MPX() .. "H3_LAST_APPROACH", 3)
|
|
stats.set_int(MPX() .. "H3OPT_TARGET", 3)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET1", 127)
|
|
stats.set_int(MPX() .. "H3OPT_DISRUPTSHIP", 3)
|
|
stats.set_int(MPX() .. "H3OPT_KEYLEVELS", 2)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE2", -1)
|
|
stats.set_int(MPX() .. "H3OPT_CREWWEAP", 4)
|
|
stats.set_int(MPX() .. "H3OPT_CREWDRIVER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_CREWHACKER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_VEHS", 2)
|
|
stats.set_int(MPX() .. "H3OPT_WEAPS", 1)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET0", 262399)
|
|
stats.set_int(MPX() .. "H3OPT_MASKS", 2)
|
|
end)
|
|
CasinoHeistEditorMenu:add_button("Casino The Big Con (Diamonds)", function()
|
|
stats.set_int(MPX() .. "H3OPT_APPROACH", 2)
|
|
stats.set_int(MPX() .. "H3_LAST_APPROACH", 3)
|
|
stats.set_int(MPX() .. "H3OPT_TARGET", 3)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET1", 799)
|
|
stats.set_int(MPX() .. "H3OPT_DISRUPTSHIP", 3)
|
|
stats.set_int(MPX() .. "H3OPT_KEYLEVELS", 2)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE2", -1)
|
|
stats.set_int(MPX() .. "H3OPT_CREWWEAP", 4)
|
|
stats.set_int(MPX() .. "H3OPT_CREWDRIVER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_CREWHACKER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_VEHS", 2)
|
|
stats.set_int(MPX() .. "H3OPT_WEAPS", 0)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET0", 913623)
|
|
stats.set_int(MPX() .. "H3OPT_MASKS", 2)
|
|
end)
|
|
CasinoHeistEditorMenu:add_button("Casino Aggressive (Diamonds)", function()
|
|
stats.set_int(MPX() .. "H3OPT_APPROACH", 3)
|
|
stats.set_int(MPX() .. "H3_LAST_APPROACH", 1)
|
|
stats.set_int(MPX() .. "H3OPT_TARGET", 3)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET1", 799)
|
|
stats.set_int(MPX() .. "H3OPT_DISRUPTSHIP", 3)
|
|
stats.set_int(MPX() .. "H3OPT_KEYLEVELS", 2)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE2", -1)
|
|
stats.set_int(MPX() .. "H3OPT_CREWWEAP", 4)
|
|
stats.set_int(MPX() .. "H3OPT_CREWDRIVER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_CREWHACKER", 5)
|
|
stats.set_int(MPX() .. "H3OPT_VEHS", 2)
|
|
stats.set_int(MPX() .. "H3OPT_WEAPS", 1)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET0", 1835223)
|
|
stats.set_int(MPX() .. "H3OPT_MASKS", 2)
|
|
end)
|
|
|
|
CasinoHeistEditorMenu:add_separator()
|
|
|
|
-- Lives Editor for Casino Heist
|
|
CasinoHeistEditorMenu:add_text("Team Lives:")
|
|
local livesValueCasino = 3
|
|
CasinoHeistEditorMenu:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Team Lives:")
|
|
livesValueCasino, _ = ImGui.InputInt("##CasinoLives", livesValueCasino)
|
|
if ImGui.Button("Set Lives##Casino") then
|
|
if livesValueCasino < 1 then
|
|
gui.show_message("Casino Heist", "Lives must be at least 1!")
|
|
else
|
|
locals.set_int("fm_mission_controller", DCLIVESL, livesValueCasino)
|
|
gui.show_message("Casino Heist", "Team lives set to " .. livesValueCasino)
|
|
end
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Default is 3. Infinite team lives for the heist (set to 999999 for unlimited)")
|
|
end
|
|
end)
|
|
|
|
CasinoHeistEditorMenu:add_separator()
|
|
|
|
DiamondCasinoDifficulties = {
|
|
{ name = "Normal", index = 0 },
|
|
{ name = "Hard", index = 1 },
|
|
}
|
|
|
|
diamondApproachList = {
|
|
{ name = "Silent n Snea.", index = 1 },
|
|
{ name = "Big Con", index = 2 },
|
|
{ name = "Aggressive", index = 3 },
|
|
}
|
|
|
|
diamondGunmanList = {
|
|
{ name = "Karl Abolaji", index = 1 },
|
|
{ name = "Charlie Reed", index = 3 },
|
|
{ name = "Patrick McRear.", index = 5 },
|
|
{ name = "Gustavo Mota", index = 2 },
|
|
{ name = "Chester McCoy", index = 4 },
|
|
}
|
|
|
|
diamondLoadoutList = {
|
|
{ name = "Micro SMG (S)", index = 1 },
|
|
{ name = "Mac. Pistol (S)", index = 1 },
|
|
{ name = "Micro SMG", index = 1 },
|
|
{ name = "Double Barrel", index = 1 },
|
|
{ name = "Sawed-Off", index = 1 },
|
|
{ name = "Heavy Revolver", index = 1 },
|
|
{ name = "Assau. SMG (S)", index = 3 },
|
|
{ name = "Bullpup Sh. (S)", index = 3 },
|
|
{ name = "Machine Pistol", index = 3 },
|
|
{ name = "Sweeper Shot.", index = 3 },
|
|
{ name = "Assault SMG", index = 3 },
|
|
{ name = "Pump Shotgun", index = 3 },
|
|
{ name = "Combat PDW", index = 5 },
|
|
{ name = "Assault Rif. (S)", index = 5 },
|
|
{ name = "Sawed-Off", index = 5 },
|
|
{ name = "Compact Rifle", index = 5 },
|
|
{ name = "Heavy Shotgun", index = 5 },
|
|
{ name = "Combat MG", index = 5 },
|
|
{ name = "Carbin. Rif. (S)", index = 2 },
|
|
{ name = "Assau. Sho. (S)", index = 2 },
|
|
{ name = "Carbine Rifle", index = 2 },
|
|
{ name = "Assault Shot.", index = 2 },
|
|
{ name = "Carbine Rifle", index = 2 },
|
|
{ name = "Assault Shot.", index = 2 },
|
|
{ name = "Pump Sh. II (S)", index = 4 },
|
|
{ name = "Carbine R. II (S)", index = 4 },
|
|
{ name = "SMG Mk II", index = 4 },
|
|
{ name = "Bullpup Rifle II", index = 4 },
|
|
{ name = "Pump Shot. II", index = 4 },
|
|
{ name = "Assault Rifle II", index = 4 },
|
|
}
|
|
|
|
diamondDriverList = {
|
|
{ name = "Karim Denz", index = 1 },
|
|
{ name = "Zach Nelson", index = 4 },
|
|
{ name = "Taliana Martinez", index = 2 },
|
|
{ name = "Eddie Toh", index = 3 },
|
|
{ name = "Chester McCoy", index = 5 },
|
|
}
|
|
|
|
diamondVehiclesList = {
|
|
{ name = "Issi Classic", index = 1 },
|
|
{ name = "Asbo", index = 1 },
|
|
{ name = "Blista Kanjo", index = 1 },
|
|
{ name = "Sentinel Class.", index = 1 },
|
|
{ name = "Manchez", index = 4 },
|
|
{ name = "Stryder", index = 4 },
|
|
{ name = "Defiler", index = 4 },
|
|
{ name = "Lectro", index = 4 },
|
|
{ name = "Retinue Mk II", index = 2 },
|
|
{ name = "Drift Yosemite", index = 2 },
|
|
{ name = "Sugoi", index = 2 },
|
|
{ name = "Jugular", index = 2 },
|
|
{ name = "Sultan Classic", index = 3 },
|
|
{ name = "Gauntl. Classic", index = 3 },
|
|
{ name = "Ellie", index = 3 },
|
|
{ name = "Komoda", index = 3 },
|
|
{ name = "Zhaba", index = 5 },
|
|
{ name = "Vagrant", index = 5 },
|
|
{ name = "Outlaw", index = 5 },
|
|
{ name = "Everon", index = 5 },
|
|
}
|
|
|
|
diamondHackerList = {
|
|
{ name = "Rickie Lukens", index = 1 },
|
|
{ name = "Yohan Blair", index = 3 },
|
|
{ name = "Christian Feltz", index = 2 },
|
|
{ name = "Page Harris", index = 5 },
|
|
{ name = "Avi Schwartz.", index = 4 },
|
|
}
|
|
|
|
diamondMasksList = {
|
|
{ name = "None", index = 0 },
|
|
{ name = "Geometric Set", index = 1 },
|
|
{ name = "Hunter Set", index = 2 },
|
|
{ name = "Oni Half Mask Set", index = 3 },
|
|
{ name = "Emoji Set", index = 4 },
|
|
{ name = "Ornate Skull Set", index = 5 },
|
|
{ name = "Lucky Fruit Set", index = 6 },
|
|
{ name = "Guerilla Set", index = 7 },
|
|
{ name = "Clown Set", index = 8 },
|
|
{ name = "Animal Set", index = 9 },
|
|
{ name = "Riot Set", index = 10 },
|
|
{ name = "Oni Full Mask Set", index = 11 },
|
|
{ name = "Hockey Set", index = 12 },
|
|
}
|
|
|
|
diamondGuardsList = {
|
|
{ name = "Elite", index = 0 },
|
|
{ name = "Pro", index = 1 },
|
|
{ name = "Unit", index = 2 },
|
|
{ name = "Rookie", index = 3 },
|
|
}
|
|
|
|
diamondKeycardsList = {
|
|
{ name = "None", index = 0 },
|
|
{ name = "Level 1", index = 1 },
|
|
{ name = "Level 2", index = 2 },
|
|
}
|
|
|
|
diamondTargetList = {
|
|
{ name = "Cash", index = 0 },
|
|
{ name = "Arts", index = 2 },
|
|
{ name = "Gold", index = 1 },
|
|
{ name = "Diamonds", index = 3 },
|
|
}
|
|
|
|
DiamondCasinoCrewCut = {
|
|
{ tunable = "CH_LESTER_CUT", default = 5 },
|
|
{ tunable = "HEIST3_PREPBOARD_GUNMEN_KARL_CUT", default = 5 },
|
|
{ tunable = "HEIST3_PREPBOARD_GUNMEN_GUSTAVO_CUT", default = 9 },
|
|
{ tunable = "HEIST3_PREPBOARD_GUNMEN_CHARLIE_CUT", default = 7 },
|
|
{ tunable = "HEIST3_PREPBOARD_GUNMEN_CHESTER_CUT", default = 10 },
|
|
{ tunable = "HEIST3_PREPBOARD_GUNMEN_PATRICK_CUT", default = 8 },
|
|
{ tunable = "HEIST3_DRIVERS_KARIM_CUT", default = 5 },
|
|
{ tunable = "HEIST3_DRIVERS_TALIANA_CUT", default = 7 },
|
|
{ tunable = "HEIST3_DRIVERS_EDDIE_CUT", default = 9 },
|
|
{ tunable = "HEIST3_DRIVERS_ZACH_CUT", default = 6 },
|
|
{ tunable = "HEIST3_DRIVERS_CHESTER_CUT", default = 10 },
|
|
{ tunable = "HEIST3_HACKERS_RICKIE_CUT", default = 3 },
|
|
{ tunable = "HEIST3_HACKERS_CHRISTIAN_CUT", default = 7 },
|
|
{ tunable = "HEIST3_HACKERS_YOHAN_CUT", default = 5 },
|
|
{ tunable = "HEIST3_HACKERS_AVI_CUT", default = 10 },
|
|
{ tunable = "HEIST3_HACKERS_PAIGE_CUT", default = 9 },
|
|
}
|
|
|
|
-- Build name lists for all combos
|
|
diamondDifficultyNames = {}
|
|
for _, item in ipairs(DiamondCasinoDifficulties) do
|
|
table.insert(diamondDifficultyNames, item.name)
|
|
end
|
|
diamondDifficultyIndex = 0
|
|
|
|
diamondApproachNames = {}
|
|
for _, item in ipairs(diamondApproachList) do
|
|
table.insert(diamondApproachNames, item.name)
|
|
end
|
|
diamondApproachIndex = 0
|
|
|
|
diamondGunmanNames = {}
|
|
for _, item in ipairs(diamondGunmanList) do
|
|
table.insert(diamondGunmanNames, item.name)
|
|
end
|
|
diamondGunmanIndex = 0
|
|
|
|
local diamondLoadoutIndex = 0
|
|
|
|
local diamondDriverNames = {}
|
|
for _, item in ipairs(diamondDriverList) do
|
|
table.insert(diamondDriverNames, item.name)
|
|
end
|
|
local diamondDriverIndex = 0
|
|
|
|
local diamondVehiclesIndex = 0
|
|
|
|
local diamondHackerNames = {}
|
|
for _, item in ipairs(diamondHackerList) do
|
|
table.insert(diamondHackerNames, item.name)
|
|
end
|
|
local diamondHackerIndex = 0
|
|
|
|
local diamondMasksNames = {}
|
|
for _, item in ipairs(diamondMasksList) do
|
|
table.insert(diamondMasksNames, item.name)
|
|
end
|
|
local diamondMasksIndex = 0
|
|
|
|
local diamondGuardsNames = {}
|
|
for _, item in ipairs(diamondGuardsList) do
|
|
table.insert(diamondGuardsNames, item.name)
|
|
end
|
|
local diamondGuardsIndex = 0
|
|
|
|
local diamondKeycardsNames = {}
|
|
for _, item in ipairs(diamondKeycardsList) do
|
|
table.insert(diamondKeycardsNames, item.name)
|
|
end
|
|
local diamondKeycardsIndex = 0
|
|
|
|
local diamondTargetNames = {}
|
|
for _, item in ipairs(diamondTargetList) do
|
|
table.insert(diamondTargetNames, item.name)
|
|
end
|
|
local diamondTargetIndex = 0
|
|
|
|
-- All prep dropdowns in a single add_imgui block so they render in the correct position
|
|
CasinoHeistEditorMenu:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Text("Preps:")
|
|
ImGui.Separator()
|
|
|
|
-- Difficulty
|
|
local nIndex, changed =
|
|
ImGui.Combo("Difficulty", diamondDifficultyIndex, diamondDifficultyNames, #diamondDifficultyNames)
|
|
if changed then
|
|
diamondDifficultyIndex = nIndex
|
|
end
|
|
|
|
-- Approach
|
|
nIndex, changed = ImGui.Combo("Approach", diamondApproachIndex, diamondApproachNames, #diamondApproachNames)
|
|
if changed then
|
|
diamondApproachIndex = nIndex
|
|
end
|
|
|
|
-- Gunman
|
|
nIndex, changed = ImGui.Combo("Gunman", diamondGunmanIndex, diamondGunmanNames, #diamondGunmanNames)
|
|
if changed then
|
|
diamondGunmanIndex = nIndex
|
|
diamondLoadoutIndex = 0
|
|
end
|
|
|
|
-- Loadout (filtered by gunman)
|
|
do
|
|
local gIndex = diamondGunmanList[diamondGunmanIndex + 1].index
|
|
local filnames = {}
|
|
for _, item in ipairs(diamondLoadoutList) do
|
|
if item.index == gIndex then
|
|
table.insert(filnames, item.name)
|
|
end
|
|
end
|
|
nIndex, changed = ImGui.Combo("Loadout", diamondLoadoutIndex, filnames, #filnames)
|
|
if changed then
|
|
diamondLoadoutIndex = nIndex
|
|
end
|
|
end
|
|
|
|
-- Driver
|
|
nIndex, changed = ImGui.Combo("Driver", diamondDriverIndex, diamondDriverNames, #diamondDriverNames)
|
|
if changed then
|
|
diamondDriverIndex = nIndex
|
|
diamondVehiclesIndex = 0
|
|
end
|
|
|
|
-- Vehicles (filtered by driver)
|
|
do
|
|
local dIndex = diamondDriverList[diamondDriverIndex + 1].index
|
|
local filnames = {}
|
|
for _, item in ipairs(diamondVehiclesList) do
|
|
if item.index == dIndex then
|
|
table.insert(filnames, item.name)
|
|
end
|
|
end
|
|
nIndex, changed = ImGui.Combo("Vehicles", diamondVehiclesIndex, filnames, #filnames)
|
|
if changed then
|
|
diamondVehiclesIndex = nIndex
|
|
end
|
|
end
|
|
|
|
-- Hacker
|
|
nIndex, changed = ImGui.Combo("Hacker", diamondHackerIndex, diamondHackerNames, #diamondHackerNames)
|
|
if changed then
|
|
diamondHackerIndex = nIndex
|
|
end
|
|
|
|
-- Masks
|
|
nIndex, changed = ImGui.Combo("Masks", diamondMasksIndex, diamondMasksNames, #diamondMasksNames)
|
|
if changed then
|
|
diamondMasksIndex = nIndex
|
|
end
|
|
|
|
-- Guards
|
|
nIndex, changed = ImGui.Combo("Guards", diamondGuardsIndex, diamondGuardsNames, #diamondGuardsNames)
|
|
if changed then
|
|
diamondGuardsIndex = nIndex
|
|
end
|
|
|
|
-- Keycards
|
|
nIndex, changed = ImGui.Combo("Keycards", diamondKeycardsIndex, diamondKeycardsNames, #diamondKeycardsNames)
|
|
if changed then
|
|
diamondKeycardsIndex = nIndex
|
|
end
|
|
|
|
-- Target
|
|
nIndex, changed = ImGui.Combo("Target", diamondTargetIndex, diamondTargetNames, #diamondTargetNames)
|
|
if changed then
|
|
diamondTargetIndex = nIndex
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Apply & Complete Preps button (inline so it appears right after the dropdowns)
|
|
if ImGui.Button("Apply & Complete Preps") then
|
|
local approach = diamondApproachList[diamondApproachIndex + 1].index
|
|
local gunman = diamondGunmanList[diamondGunmanIndex + 1].index
|
|
local loadout = diamondLoadoutIndex
|
|
local driver = diamondDriverList[diamondDriverIndex + 1].index
|
|
local vehicles = diamondVehiclesIndex
|
|
local hacker = diamondHackerList[diamondHackerIndex + 1].index
|
|
local masks = diamondMasksList[diamondMasksIndex + 1].index
|
|
local guards = diamondGuardsList[diamondGuardsIndex + 1].index
|
|
local keycards = diamondKeycardsList[diamondKeycardsIndex + 1].index
|
|
local target = diamondTargetList[diamondTargetIndex + 1].index
|
|
local difficulty = DiamondCasinoDifficulties[diamondDifficultyIndex + 1].index
|
|
stats.set_int(MPX() .. "H3OPT_POI", -1)
|
|
stats.set_int(MPX() .. "H3OPT_ACCESSPOINTS", -1)
|
|
stats.set_int(MPX() .. "CAS_HEIST_NOTS", -1)
|
|
stats.set_int(MPX() .. "CAS_HEIST_FLOW", -1)
|
|
stats.set_int(MPX() .. "H3_LAST_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H3_HARD_APPROACH", (difficulty == 0) and 0 or approach)
|
|
stats.set_int(MPX() .. "H3OPT_APPROACH", approach)
|
|
stats.set_int(MPX() .. "H3OPT_CREWWEAP", gunman)
|
|
stats.set_int(MPX() .. "H3OPT_WEAPS", loadout)
|
|
stats.set_int(MPX() .. "H3OPT_CREWDRIVER", driver)
|
|
stats.set_int(MPX() .. "H3OPT_VEHS", vehicles)
|
|
stats.set_int(MPX() .. "H3OPT_CREWHACKER", hacker)
|
|
stats.set_int(MPX() .. "H3OPT_TARGET", target)
|
|
stats.set_int(MPX() .. "H3OPT_MASKS", masks)
|
|
stats.set_int(MPX() .. "H3OPT_DISRUPTSHIP", guards)
|
|
stats.set_int(MPX() .. "H3OPT_KEYLEVELS", keycards)
|
|
stats.set_int(MPX() .. "H3OPT_BODYARMORLVL", -1)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET0", -1)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET1", -1)
|
|
stats.set_int(MPX() .. "H3OPT_COMPLETEDPOSIX", -1)
|
|
locals.set_int("gb_casino_heist_planning", DCRBl, 2)
|
|
gui.show_message("Diamond Casino Heist", "Preps should've been completed")
|
|
end
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Reset Preps##diamond") then
|
|
stats.set_int(MPX() .. "H3_LAST_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H3_HARD_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H3_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H3OPT_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H3OPT_CREWWEAP", 0)
|
|
stats.set_int(MPX() .. "H3OPT_WEAPS", 0)
|
|
stats.set_int(MPX() .. "H3OPT_CREWDRIVER", 0)
|
|
stats.set_int(MPX() .. "H3OPT_VEHS", 0)
|
|
stats.set_int(MPX() .. "H3OPT_CREWHACKER", 0)
|
|
stats.set_int(MPX() .. "H3OPT_MASKS", 0)
|
|
stats.set_int(MPX() .. "H3OPT_TARGET", 0)
|
|
stats.set_int(MPX() .. "H3OPT_DISRUPTSHIP", 0)
|
|
stats.set_int(MPX() .. "H3OPT_BODYARMORLVL", 1)
|
|
stats.set_int(MPX() .. "H3OPT_KEYLEVELS", 0)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET0", 0)
|
|
stats.set_int(MPX() .. "H3OPT_BITSET1", 0)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE0", 0)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE1", 0)
|
|
stats.set_int(MPX() .. "H3_BOARD_DIALOGUE2", 0)
|
|
stats.set_int("MPPLY_H3_COOLDOWN", 0)
|
|
stats.set_int(MPX() .. "H3OPT_COMPLETEDPOSIX", 0)
|
|
locals.set_int("gb_casino_heist_planning", DCRBl, 2)
|
|
gui.show_message("Diamond Casino Heist", "Preps should've been reset")
|
|
end
|
|
end)
|
|
|
|
local casinoCrewCuts_enabled = false
|
|
local casinoPc1_val = 0
|
|
local casinoPc2_val = 0
|
|
local casinoPc3_val = 0
|
|
local casinoPc4_val = 0
|
|
|
|
function SetDiamondMaxPayout()
|
|
local approach = stats.get_int(MPX() .. "H3OPT_APPROACH")
|
|
local hardApproach = stats.get_int(MPX() .. "H3_HARD_APPROACH")
|
|
local target = stats.get_int(MPX() .. "H3OPT_TARGET")
|
|
local difficulty = (approach == hardApproach) and 2 or 1
|
|
local payouts = {
|
|
[0] = { 2115000, 2326500 },
|
|
[2] = { 2350000, 2585000 },
|
|
[1] = { 2585000, 2843500 },
|
|
[3] = { 3290000, 3619000 },
|
|
}
|
|
if payouts[target] == nil then
|
|
return 100, 100
|
|
end
|
|
local payout = payouts[target][difficulty] + 819000
|
|
local maxPayout = 3619000
|
|
local gunman = stats.get_int(MPX() .. "H3OPT_CREWWEAP")
|
|
local driver = stats.get_int(MPX() .. "H3OPT_CREWDRIVER")
|
|
local hacker = stats.get_int(MPX() .. "H3OPT_CREWHACKER")
|
|
local buyerFee = 0.1
|
|
local lesterCut = 0.05
|
|
local gunmanCuts = { [1] = 0.05, [3] = 0.07, [5] = 0.08, [2] = 0.09, [4] = 0.1 }
|
|
local driverCuts = { [1] = 0.05, [4] = 0.06, [2] = 0.07, [3] = 0.09, [5] = 0.1 }
|
|
local hackerCuts = { [1] = 0.03, [3] = 0.05, [2] = 0.07, [5] = 0.09, [4] = 0.1 }
|
|
local feePayout = payout - (payout * buyerFee)
|
|
local lesterPayout = feePayout * lesterCut
|
|
local gunmanPayout = feePayout * (gunmanCuts[gunman] or 0)
|
|
local driverPayout = feePayout * (driverCuts[driver] or 0)
|
|
local hackerPayout = feePayout * (hackerCuts[hacker] or 0)
|
|
local crewPayout = lesterPayout + gunmanPayout + driverPayout + hackerPayout
|
|
local hostCut = math.floor(maxPayout / ((feePayout - crewPayout) / 100))
|
|
local otherCut = math.floor(maxPayout / (payout / 100))
|
|
return hostCut, otherCut
|
|
end
|
|
|
|
local casinoCutPresets = {
|
|
{ name = "All - 0%", index = 0 },
|
|
{ name = "All - 85%", index = 85 },
|
|
{ name = "All - 100%", index = 100 },
|
|
{ name = "3.6mil Payout", index = -1 },
|
|
}
|
|
local casinoCutPresetNames = {}
|
|
for _, preset in ipairs(casinoCutPresets) do
|
|
table.insert(casinoCutPresetNames, preset.name)
|
|
end
|
|
local sPresetIndex = 0
|
|
|
|
CasinoHeistEditorMenu:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
|
|
ImGui.Separator()
|
|
ImGui.Text("Cuts:")
|
|
|
|
-- Remove Crew Cuts checkbox
|
|
casinoCrewCuts_enabled, _ = ImGui.Checkbox("Remove Crew Cuts", casinoCrewCuts_enabled)
|
|
|
|
-- Player cut inputs
|
|
casinoPc1_val, _ = ImGui.InputInt("Player Cut 1", casinoPc1_val)
|
|
casinoPc2_val, _ = ImGui.InputInt("Player Cut 2", casinoPc2_val)
|
|
casinoPc3_val, _ = ImGui.InputInt("Player Cut 3", casinoPc3_val)
|
|
casinoPc4_val, _ = ImGui.InputInt("Player Cut 4", casinoPc4_val)
|
|
|
|
-- Presets
|
|
ImGui.Text("Presets:")
|
|
ImGui.SetNextItemWidth(170)
|
|
local nIndex, changed = ImGui.Combo("##DiamondPreset", sPresetIndex, casinoCutPresetNames, #casinoCutPresetNames)
|
|
if changed then
|
|
sPresetIndex = nIndex
|
|
local selected = casinoCutPresets[sPresetIndex + 1]
|
|
local hostCut = selected.index
|
|
local otherCut = selected.index
|
|
if selected.index == -1 then
|
|
hostCut, otherCut = SetDiamondMaxPayout()
|
|
casinoCrewCuts_enabled = true
|
|
else
|
|
casinoCrewCuts_enabled = false
|
|
end
|
|
casinoPc1_val = hostCut
|
|
casinoPc2_val = otherCut
|
|
casinoPc3_val = otherCut
|
|
casinoPc4_val = otherCut
|
|
end
|
|
|
|
if ImGui.Button("Apply Cuts") then
|
|
globals.set_int(DCCg1, casinoPc1_val)
|
|
globals.set_int(DCCg2, casinoPc2_val)
|
|
globals.set_int(DCCg3, casinoPc3_val)
|
|
globals.set_int(DCCg4, casinoPc4_val)
|
|
gui.show_message("Casino Heist", "Cuts should've been applied")
|
|
end
|
|
end)
|
|
|
|
script.register_looped("DiamondCasino_Crew", function()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
for _, cut in ipairs(DiamondCasinoCrewCut) do
|
|
if casinoCrewCuts_enabled then
|
|
tunables.set_int(cut.tunable, 0)
|
|
else
|
|
tunables.set_int(cut.tunable, cut.default)
|
|
end
|
|
end
|
|
end)
|
|
|
|
CasinoHeistEditorMenu:add_imgui(function()
|
|
if isOffline() then
|
|
return
|
|
end
|
|
ImGui.Separator()
|
|
if ImGui.Button("Reload boards") then
|
|
locals.set_int("gb_casino_heist_planning", DCRBl, 2)
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Solo Launch") then
|
|
if locals.get_int("fmmc_launcher", HGGs1) ~= nil and locals.get_int("fmmc_launcher", HGGs1) ~= 0 then
|
|
if locals.get_int("fmmc_launcher", HGGs1) > 1 then
|
|
locals.set_int("fmmc_launcher", HGGs2, 1)
|
|
globals.set_int(794989 + 4 + 1 + (locals.get_int("fmmc_launcher", HGGs1) * 95) + 75, 1)
|
|
end
|
|
globals.set_int(HGLs1, 1)
|
|
globals.set_int(HGLs2, 1)
|
|
globals.set_int(HGLs3, 1)
|
|
globals.set_int(HGLs4, 0)
|
|
end
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Kill Cooldown") then
|
|
stats.set_int(MPX() .. "H3_COMPLETEDPOSIX", -1)
|
|
stats.set_int("MPPLY_H3_COOLDOWN", -1)
|
|
gui.show_message("Diamond Casino Heist", "Cooldown should've been killed")
|
|
end
|
|
end)
|
|
|
|
local CasinoHeistExtra = CasinoHeistEditorMenu:add_tab("Extras")
|
|
CasinoHeistExtra:add_text("Hacks")
|
|
local casinoAutograbber = CasinoHeistExtra:add_checkbox("Autograbber")
|
|
script.register_looped("casinoAg", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
if casinoAutograbber:is_enabled() then
|
|
if locals.get_int(FMC, DCAg) == 3 then
|
|
locals.set_int(FMC, DCAg, 4)
|
|
elseif locals.get_int(FMC, DCAg) == 4 then
|
|
locals.set_float(FMC, DCAs, 2.0)
|
|
end
|
|
end
|
|
end)
|
|
CasinoHeistExtra:add_button("Bypass Fingerprint Hack", function()
|
|
if locals.get_int(FMC, DCFHl) == 4 then
|
|
locals.set_int(FMC, DCFHl, 5)
|
|
end
|
|
end)
|
|
CasinoHeistExtra:add_sameline()
|
|
CasinoHeistExtra:add_button("Bypass Keypad Hack", function()
|
|
if locals.get_int(FMC, DCKHl) ~= 4 then
|
|
locals.set_int(FMC, DCKHl, 5)
|
|
end
|
|
end)
|
|
CasinoHeistExtra:add_sameline()
|
|
CasinoHeistExtra:add_button("Bypass Drill Vault Door", function()
|
|
locals.set_int(FMC, DCDVDl1, locals.get_int(FMC, DCDVDl2))
|
|
end)
|
|
CasinoHeistExtra:add_button("Instant Finish", function()
|
|
local approachType = stats.get_int(MPX() .. "H3OPT_APPROACH")
|
|
if approachType == 3 then
|
|
locals.set_int(FMC, DCXf1, 12)
|
|
locals.set_int(FMC, DCXf3, 80)
|
|
locals.set_int(FMC, DCXf4, 10000000)
|
|
locals.set_int(FMC, DCXf5, 99999)
|
|
locals.set_int(FMC, DCXf6, 99999)
|
|
else
|
|
locals.set_int(FMC, DCXf2, 5)
|
|
locals.set_int(FMC, DCXf3, 80)
|
|
locals.set_int(FMC, DCXf4, 10000000)
|
|
locals.set_int(FMC, DCXf5, 99999)
|
|
locals.set_int(FMC, DCXf6, 99999)
|
|
end
|
|
gui.show_message("Instant Heist Passed", "Activated")
|
|
end)
|
|
CasinoHeistExtra:add_sameline()
|
|
CasinoHeistExtra:add_button("Force Ready", function()
|
|
script.run_in_fiber(function(script)
|
|
network.force_script_host(FMC)
|
|
script:sleep(1000)
|
|
for i = 1, 4 do
|
|
globals.set_int(1882572 + 1 + ((i - 1) * 315) + 43 + 11 + i, 1)
|
|
end
|
|
end)
|
|
end)
|
|
CasinoHeistExtra:add_sameline()
|
|
CasinoHeistExtra:add_button("Skip Cutscene", SkipCutscene)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Cayo Heist --
|
|
local CayoPericoCrewCut = {
|
|
{ tunable = "IH_DEDUCTION_PAVEL_CUT", default = -0.02 },
|
|
{ tunable = "IH_DEDUCTION_FENCING_FEE", default = -0.1 },
|
|
}
|
|
|
|
local cayoPrimaryTargets = {
|
|
{ name = "Panther Statue", id = 5 },
|
|
{ name = "Medrazo Files", id = 4 },
|
|
{ name = "Diamond", id = 3 },
|
|
{ name = "Bonds", id = 2 },
|
|
{ name = "Necklace", id = 1 },
|
|
{ name = "Tequila", id = 0 },
|
|
}
|
|
|
|
function CayoCompletePreps()
|
|
stats.set_int(MPX() .. "H4CNF_UNIFORM", -1)
|
|
stats.set_int(MPX() .. "H4CNF_GRAPPEL", -1)
|
|
stats.set_int(MPX() .. "H4CNF_TROJAN", 5)
|
|
stats.set_int(MPX() .. "H4CNF_WEP_DISRP", 3)
|
|
stats.set_int(MPX() .. "H4CNF_ARM_DISRP", 3)
|
|
stats.set_int(MPX() .. "H4CNF_HEL_DISRP", 3)
|
|
stats.set_int(MPX() .. "H4_PLAYTHROUGH_STATUS", 10)
|
|
stats.set_int(MPX() .. "H4CNF_BS_GEN", -1)
|
|
stats.set_int(MPX() .. "H4CNF_BS_ENTR", 63)
|
|
stats.set_int(MPX() .. "H4CNF_BS_ABIL", 63)
|
|
stats.set_int(MPX() .. "H4CNF_APPROACH", -1)
|
|
end
|
|
|
|
function CayoTargetsSetter(cash, weed, coke, gold, where, target, value)
|
|
stats.set_int(MPX() .. "H4LOOT_CASH_" .. where, cash)
|
|
stats.set_int(MPX() .. "H4LOOT_CASH_" .. where .. "_SCOPED", cash)
|
|
stats.set_int(MPX() .. "H4LOOT_WEED_" .. where, weed)
|
|
stats.set_int(MPX() .. "H4LOOT_WEED_" .. where .. "_SCOPED", weed)
|
|
stats.set_int(MPX() .. "H4LOOT_COKE_" .. where, coke)
|
|
stats.set_int(MPX() .. "H4LOOT_COKE_" .. where .. "_SCOPED", coke)
|
|
stats.set_int(MPX() .. "H4LOOT_GOLD_" .. where, gold)
|
|
stats.set_int(MPX() .. "H4LOOT_GOLD_" .. where .. "_SCOPED", gold)
|
|
if target ~= "NONE" then
|
|
stats.set_int(MPX() .. "H4LOOT_" .. target .. "_V", value)
|
|
end
|
|
end
|
|
|
|
function CayoPaintingsToggler(Enabled)
|
|
if Enabled then
|
|
stats.set_int(MPX() .. "H4LOOT_PAINT", 127)
|
|
stats.set_int(MPX() .. "H4LOOT_PAINT_SCOPED", 127)
|
|
stats.set_int(MPX() .. "H4LOOT_PAINT_V", 189500)
|
|
else
|
|
stats.set_int(MPX() .. "H4LOOT_PAINT", 0)
|
|
stats.set_int(MPX() .. "H4LOOT_PAINT_SCOPED", 0)
|
|
end
|
|
end
|
|
|
|
function CutsPresetter(global_start, global_finish, cut)
|
|
globals.set_int(GCg, cut)
|
|
for i = global_start, global_finish do
|
|
globals.set_int(i, cut)
|
|
end
|
|
end
|
|
|
|
local cayoSecondaryTargets = {
|
|
{
|
|
name = "None",
|
|
caps = "NONE",
|
|
amount = {
|
|
compound = { cash = 0, weed = 0, coke = 0, gold = 0 },
|
|
island = { cash = 0, weed = 0, coke = 0, gold = 0 },
|
|
},
|
|
value = 0,
|
|
},
|
|
{
|
|
name = "Gold",
|
|
caps = "GOLD",
|
|
amount = {
|
|
compound = { cash = 0, weed = 0, coke = 0, gold = 255 },
|
|
island = { cash = 0, weed = 0, coke = 0, gold = 16777215 },
|
|
},
|
|
value = 333333,
|
|
},
|
|
{
|
|
name = "Cocaine",
|
|
caps = "COKE",
|
|
amount = {
|
|
compound = { cash = 0, weed = 0, coke = 255, gold = 0 },
|
|
island = { cash = 0, weed = 0, coke = 16777215, gold = 0 },
|
|
},
|
|
value = 202500,
|
|
},
|
|
{
|
|
name = "Weed",
|
|
caps = "WEED",
|
|
amount = {
|
|
compound = { cash = 0, weed = 255, coke = 0, gold = 0 },
|
|
island = { cash = 0, weed = 16777215, coke = 0, gold = 0 },
|
|
},
|
|
value = 135000,
|
|
},
|
|
{
|
|
name = "Cash",
|
|
caps = "CASH",
|
|
amount = {
|
|
compound = { cash = 255, weed = 0, coke = 0, gold = 0 },
|
|
island = { cash = 16777215, weed = 0, coke = 0, gold = 0 },
|
|
},
|
|
value = 83250,
|
|
},
|
|
}
|
|
|
|
local cayoLocations = {
|
|
{ name = "Front Gate", x = 4990.0386, y = -5717.6895, z = 19.876024 },
|
|
{ name = "El Rubio's Office", x = 5010.12, y = -5750.1353, z = 28.844675 },
|
|
{ name = "Primary Target", x = 5006.7, y = -5756.2, z = 15.483983 },
|
|
{ name = "Secondary Target", x = 4999.764160, y = -5749.863770, z = 14.840000 },
|
|
{ name = "Safe Zone", x = 4771.479, y = -6165.737, z = -39.079613 },
|
|
{ name = "Entrance Drinage Pipe", x = 5043.74, y = -5815.3193, z = -10.574497 },
|
|
{ name = "Enter Cayo Perico", x = 5053.8516, y = -5772.852, z = -4.1588774 },
|
|
{ name = "Elevator", x = 5012.1533, y = -5749.0107, z = 28.945145 },
|
|
}
|
|
|
|
local cayoApproachVehicles = {
|
|
{ name = "Longfin", id = 65345 },
|
|
{ name = "Patrol Boat", id = 65313 },
|
|
{ name = "Stealth Annihilator", id = 65425 },
|
|
{ name = "Velum", id = 65289 },
|
|
{ name = "Alkonost", id = 65413 },
|
|
{ name = "Kosatka", id = 65283 },
|
|
{ name = "All Ways", id = 65535 },
|
|
}
|
|
|
|
local cayoWeapons = {
|
|
{ name = "Aggressor", id = 1 },
|
|
{ name = "Conspirator", id = 2 },
|
|
{ name = "Crackshot", id = 3 },
|
|
{ name = "Saboteur", id = 4 },
|
|
{ name = "Marksman", id = 5 },
|
|
}
|
|
|
|
-- Move these variables outside to maintain state
|
|
local sPrimary = 0
|
|
local compoundI = 0
|
|
local islandI = 0
|
|
local sApproach = 0
|
|
local sWeapon = 0
|
|
local bagValue = 0
|
|
local addPaintings = false
|
|
local cayocut1 = 0
|
|
local cayocut2 = 0
|
|
local cayocut3 = 0
|
|
local cayocut4 = 0
|
|
local cayoCrewCuts = false
|
|
local livesValueCayo = 3
|
|
|
|
local CayoHeistEditorMenu = HeistsDataEditorMenu:add_tab("Cayo Perico Heist ")
|
|
|
|
-- Put EVERYTHING inside add_imgui
|
|
CayoHeistEditorMenu:add_imgui(function()
|
|
if checkOnline() then
|
|
return
|
|
end
|
|
|
|
-- Cayo Bag Size Editor
|
|
ImGui.Text("Cayo Bag Size Editor")
|
|
bagValue, _ = ImGui.InputInt("Bag Size", bagValue)
|
|
if ImGui.Button("Set Bag Size") then
|
|
globals.set_int(CPBg, bagValue)
|
|
gui.show_message("Cayo Perico", "Bag size set to " .. bagValue)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Primary Target
|
|
ImGui.Text("Primary Target:")
|
|
local primaryNames = {}
|
|
for _, target in ipairs(cayoPrimaryTargets) do
|
|
table.insert(primaryNames, target.name)
|
|
end
|
|
local nIndex, changed = ImGui.Combo("##CayoPrimary", sPrimary, primaryNames, #primaryNames)
|
|
if changed then
|
|
sPrimary = nIndex
|
|
local selected = cayoPrimaryTargets[sPrimary + 1]
|
|
stats.set_int(MPX() .. "H4CNF_TARGET", selected.id)
|
|
gui.show_message("Cayo Perico", "Primary target set to: " .. selected.name)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Secondary Targets
|
|
local targetNames = {}
|
|
for i, target in ipairs(cayoSecondaryTargets) do
|
|
table.insert(targetNames, target.name)
|
|
end
|
|
|
|
ImGui.Text("Compound Target:")
|
|
local nCompoundI, clickedCompound = ImGui.Combo("##Compound", compoundI, targetNames, #targetNames)
|
|
if clickedCompound then
|
|
compoundI = nCompoundI
|
|
local selected = cayoSecondaryTargets[compoundI + 1]
|
|
CayoTargetsSetter(
|
|
selected.amount.compound.cash,
|
|
selected.amount.compound.weed,
|
|
selected.amount.compound.coke,
|
|
selected.amount.compound.gold,
|
|
"C",
|
|
selected.caps,
|
|
selected.value
|
|
)
|
|
gui.show_message("Cayo Perico", "Compound target set to: " .. selected.name)
|
|
end
|
|
|
|
ImGui.Text("Island Target:")
|
|
local nIslandI, clickedIsland = ImGui.Combo("##Island", islandI, targetNames, #targetNames)
|
|
if clickedIsland then
|
|
islandI = nIslandI
|
|
local selected = cayoSecondaryTargets[islandI + 1]
|
|
CayoTargetsSetter(
|
|
selected.amount.island.cash,
|
|
selected.amount.island.weed,
|
|
selected.amount.island.coke,
|
|
selected.amount.island.gold,
|
|
"I",
|
|
selected.caps,
|
|
selected.value
|
|
)
|
|
gui.show_message("Cayo Perico", "Island target set to: " .. selected.name)
|
|
end
|
|
|
|
ImGui.Text("")
|
|
addPaintings, _ = ImGui.Checkbox("Paintings", addPaintings)
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Difficulty
|
|
ImGui.Text("Difficulty:")
|
|
if ImGui.Button("Hard") then
|
|
stats.set_int(MPX() .. "H4_PROGRESS", 131055)
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Normal") then
|
|
stats.set_int(MPX() .. "H4_PROGRESS", 126823)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Approach
|
|
local approachNames = {}
|
|
for _, veh in ipairs(cayoApproachVehicles) do
|
|
table.insert(approachNames, veh.name)
|
|
end
|
|
ImGui.Text("Approach:")
|
|
local nIndex2, changed2 = ImGui.Combo("##CayoApproach", sApproach, approachNames, #approachNames)
|
|
if changed2 then
|
|
sApproach = nIndex2
|
|
local selected = cayoApproachVehicles[sApproach + 1]
|
|
stats.set_int(MPX() .. "H4_MISSIONS", selected.id)
|
|
gui.show_message("Cayo Perico", "Approach set to: " .. selected.name)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Weapons
|
|
local weaponNames = {}
|
|
for _, wep in ipairs(cayoWeapons) do
|
|
table.insert(weaponNames, wep.name)
|
|
end
|
|
ImGui.Text("Weapons:")
|
|
local nIndex3, changed3 = ImGui.Combo("##CayoWeapon", sWeapon, weaponNames, #weaponNames)
|
|
if changed3 then
|
|
sWeapon = nIndex3
|
|
local selected = cayoWeapons[sWeapon + 1]
|
|
stats.set_int(MPX() .. "H4CNF_WEAPONS", selected.id)
|
|
gui.show_message("Cayo Perico", "Weapon loadout set to: " .. selected.name)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Preps
|
|
if ImGui.Button("Complete Preps") then
|
|
CayoPaintingsToggler(addPaintings)
|
|
CayoCompletePreps()
|
|
locals.set_int("heist_island_planning", CPRSl, 2)
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Reset Preps") then
|
|
stats.set_int(MPX() .. "H4_PROGRESS", 0)
|
|
stats.set_int(MPX() .. "H4_MISSIONS", 0)
|
|
stats.set_int(MPX() .. "H4CNF_APPROACH", 0)
|
|
stats.set_int(MPX() .. "H4CNF_TARGET", -1)
|
|
stats.set_int(MPX() .. "H4CNF_BS_GEN", 0)
|
|
stats.set_int(MPX() .. "H4CNF_BS_ENTR", 0)
|
|
stats.set_int(MPX() .. "H4CNF_BS_ABIL", 0)
|
|
stats.set_int(MPX() .. "H4_PLAYTHROUGH_STATUS", 0)
|
|
locals.set_int("heist_island_planning", CPRSl, 2)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Crew Cuts
|
|
ImGui.Text("Removes fencing fee and Pavel's cut")
|
|
cayoCrewCuts, _ = ImGui.Checkbox("Remove Crew Cuts", cayoCrewCuts)
|
|
-- Note: script.register_looped for this should be handled separately
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Cuts
|
|
ImGui.Text("Cuts to All")
|
|
if ImGui.Button("100") then
|
|
CutsPresetter(CPCg1, CPCg4, 100)
|
|
end
|
|
|
|
ImGui.Text("")
|
|
ImGui.Text("Custom Cut")
|
|
cayocut1, _ = ImGui.InputInt("Cut 1", cayocut1)
|
|
cayocut2, _ = ImGui.InputInt("Cut 2", cayocut2)
|
|
cayocut3, _ = ImGui.InputInt("Cut 3", cayocut3)
|
|
cayocut4, _ = ImGui.InputInt("Cut 4", cayocut4)
|
|
if ImGui.Button("Set") then
|
|
globals.set_int(CPCg1, cayocut1)
|
|
globals.set_int(CPCg2, cayocut2)
|
|
globals.set_int(CPCg3, cayocut3)
|
|
globals.set_int(CPCg4, cayocut4)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Reload Planning Screen
|
|
ImGui.Text("Reload Planning Screen")
|
|
if ImGui.Button("Reload Planning Screen") then
|
|
locals.set_int("heist_island_planning", CPRSl, 2)
|
|
gui.show_message("Cayo Perico Heist", "Screen should've been reloaded")
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Extras
|
|
ImGui.Text("Extras")
|
|
if ImGui.Button("Bypass Drainage Cut") then
|
|
locals.set_int("fm_mission_controller_2020", CPSTCl, 6)
|
|
gui.show_message("Cayo Perico Heist", "Cutting process should've been skipped")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Bypass Fingerprint Scanner") then
|
|
locals.set_int("fm_mission_controller_2020", CPFHl, 5)
|
|
gui.show_message("Cayo Perico Heist", "Hacking process should've been skipped")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Bypass Plasma Cutter") then
|
|
locals.set_float("fm_mission_controller_2020", CPPCCl, 100.0)
|
|
gui.show_message("Cayo Perico Heist", "Cutting process should've been skipped")
|
|
end
|
|
|
|
ImGui.Text("Team Lives:")
|
|
livesValueCayo, _ = ImGui.InputInt("##CayolivesValue", livesValueCayo)
|
|
if ImGui.Button("Set Lives") then
|
|
locals.set_int("fm_mission_controller_2020", CPLIVESL, livesValueCayo)
|
|
gui.show_message("Cayo Perico Heist", "Team Lives value set to " .. livesValueCayo)
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Default is 3. Infinite team lives for the heist (set to 999999 for unlimited)")
|
|
end
|
|
|
|
if ImGui.Button("Remove All CCTV's") then
|
|
for _, ent in pairs(entities.get_all_objects_as_handles()) do
|
|
for __, cam in pairs(CamList) do
|
|
if ENTITY.GET_ENTITY_MODEL(ent) == cam then
|
|
ENTITY.SET_ENTITY_AS_MISSION_ENTITY(ent, true, true)
|
|
ENTITY.DELETE_ENTITY(ent)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
CamList = {
|
|
joaat("prop_cctv_cam_01a"),
|
|
joaat("prop_cctv_cam_01b"),
|
|
joaat("prop_cctv_cam_02a"),
|
|
joaat("prop_cctv_cam_03a"),
|
|
joaat("prop_cctv_cam_04a"),
|
|
joaat("prop_cctv_cam_04c"),
|
|
joaat("prop_cctv_cam_05a"),
|
|
joaat("prop_cctv_cam_06a"),
|
|
joaat("prop_cctv_cam_07a"),
|
|
joaat("prop_cs_cctv"),
|
|
joaat("p_cctv_s"),
|
|
joaat("hei_prop_bank_cctv_01"),
|
|
joaat("hei_prop_bank_cctv_02"),
|
|
joaat("ch_prop_ch_cctv_cam_02a"),
|
|
joaat("xm_prop_x17_server_farm_cctv_01"),
|
|
}
|
|
|
|
if ImGui.Button("Instant Finish") then
|
|
locals.set_int("fm_mission_controller_2020", CPXf1, 9)
|
|
locals.set_int("fm_mission_controller_2020", CPXf2, 50)
|
|
gui.show_message("Cayo Perico Heist", "Heist should've been finished")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Skip Cutscene") then
|
|
SkipCutscene()
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Force Ready") then
|
|
script.run_in_fiber(function(script)
|
|
network.force_script_host("fm_mission_controller_2020")
|
|
script:sleep(1000)
|
|
for i = 1, 4 do
|
|
globals.set_int(1979868 + 1 + ((i - 1) * 27) + 7 + i, 1)
|
|
end
|
|
gui.show_message("Cayo Perico Heist", "Everyone should've been forced ready")
|
|
end)
|
|
end
|
|
|
|
if ImGui.Button("Kill Cooldown (after solo)") then
|
|
stats.set_int(MPX() .. "H4_TARGET_POSIX", 1659643454)
|
|
stats.set_int(MPX() .. "H4_COOLDOWN", 0)
|
|
stats.set_int(MPX() .. "H4_COOLDOWN_HARD", 0)
|
|
gui.show_message("Cayo Perico Heist", "Cooldown should've been killed")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Kill Cooldown (after team)") then
|
|
stats.set_int(MPX() .. "H4_TARGET_POSIX", 1659429119)
|
|
stats.set_int(MPX() .. "H4_COOLDOWN", 0)
|
|
stats.set_int(MPX() .. "H4_COOLDOWN_HARD", 0)
|
|
gui.show_message("Cayo Perico Heist", "Cooldown should've been killed")
|
|
end
|
|
|
|
ImGui.Text("After clicking the Kill Cooldown button, go offline and then come back online")
|
|
|
|
ImGui.Separator()
|
|
|
|
-- Teleports
|
|
ImGui.Text("Teleports")
|
|
|
|
for i, location in ipairs(cayoLocations) do
|
|
if ImGui.Button(location.name) then
|
|
local ped = PLAYER.PLAYER_PED_ID()
|
|
PED.SET_PED_COORDS_KEEP_VEHICLE(ped, location.x, location.y, location.z)
|
|
end
|
|
|
|
if i < 6 or i == 7 then
|
|
ImGui.SameLine()
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Handle the Crew Cuts loop separately
|
|
script.register_looped("SN_CayoPerico_Crew", function(script)
|
|
script:yield()
|
|
if
|
|
not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0
|
|
then
|
|
return
|
|
end
|
|
for _, cut in ipairs(CayoPericoCrewCut) do
|
|
if cayoCrewCuts then
|
|
tunables.set_float(cut.tunable, 0)
|
|
else
|
|
tunables.set_float(cut.tunable, cut.default)
|
|
end
|
|
end
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
-- Kortz Center Heist
|
|
|
|
-- Glass case display info
|
|
glassCaseNames = {
|
|
[0] = "Venus d'Algernon",
|
|
[1] = "Gemstone",
|
|
[2] = "Horse",
|
|
[3] = "Coquard Carcanet",
|
|
[4] = "Memento Non Mori",
|
|
}
|
|
glassCaseTypes = {
|
|
[0] = "Tall Glass Case",
|
|
[1] = "Tall Glass Case",
|
|
[2] = "Horizontal Glass Case",
|
|
[3] = "Horizontal Glass Case",
|
|
[4] = "Horizontal Glass Case",
|
|
}
|
|
|
|
-- Create menu tab
|
|
KortzCenterHeistMenu = HeistsDataEditorMenu:add_tab("Kortz Center Heist")
|
|
|
|
-- State
|
|
k26_heist_target = 0
|
|
selectedPayoutTarget = 0
|
|
autoHacks = false
|
|
dataCrackTriggered = false
|
|
fingerprintTriggered = false
|
|
vaultDoorTriggered = false
|
|
heistWasActive = false
|
|
bagSizeValue = 100
|
|
weeklyMultiplierValue = 4.0
|
|
livesValue = 3
|
|
|
|
-- Target names
|
|
local targetShortNames = {
|
|
"La Dernière Débauche", "Hare Oneself Think", "The Downfall of Rome",
|
|
"Brother Brother", "A Cast of Characters", "Gone To Seed",
|
|
"True Love", "Breathless", "Consumato", "I Hear Voices",
|
|
"Winter, Nowhere", "Pearl Necklace", "Chat on Fruit", "Pumpkin",
|
|
"Twindifference", "Stacks Study V", "I, Fruit", "To Beat About Bush",
|
|
"In Excess Success", "Juiced", "Winding Road Home", "Teckels",
|
|
"Trust", "Until Death", "What Are Melons?", "Outcome Endeavour", "Mi O Melee",
|
|
}
|
|
|
|
-- Base payouts
|
|
local targetBasePayouts = {
|
|
481250, 304500, 305000, 305500, 306000, 306500, 307000,
|
|
307500, 308000, 308500, 309000, 309500, 310000, 310500,
|
|
311000, 311500, 312000, 312500, 313000, 313500, 314000,
|
|
314500, 315000, 315500, 316000, 365000, 317000,
|
|
}
|
|
|
|
k26Targets = {}
|
|
for i = 1, 27 do
|
|
k26Targets[i] = { name = targetShortNames[i], id = i - 1, payout = targetBasePayouts[i], index = i }
|
|
end
|
|
|
|
targetNames = {}
|
|
for _, target in ipairs(k26Targets) do
|
|
table.insert(targetNames, target.name)
|
|
end
|
|
|
|
local payoutModifiers = {}
|
|
local payoutCustomValues = {}
|
|
for i = 1, 27 do
|
|
payoutModifiers[i] = 1.0
|
|
payoutCustomValues[i] = 0
|
|
end
|
|
|
|
-- Helper functions
|
|
function isKortzHeistActive()
|
|
return SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("fm_mission_controller_v3")) > 0
|
|
end
|
|
|
|
function getCurrentBagSize()
|
|
return globals.get_int(KCBGL)
|
|
end
|
|
|
|
function getCurrentLives()
|
|
return locals.get_int("fm_mission_controller_v3", KCLIVESL)
|
|
end
|
|
|
|
-- Get payout from Global_262145.f_37405 + (index + 1)
|
|
function getCurrentPayout(index)
|
|
local value = globals.get_int(KCPAYOUT_BASE + index + 1)
|
|
if value == 0 or value == nil then
|
|
return targetBasePayouts[index + 1] or 0
|
|
end
|
|
return value
|
|
end
|
|
|
|
-- Set payout to Global_262145.f_37405 + (index + 1)
|
|
function setPayout(index, value)
|
|
globals.set_int(KCPAYOUT_BASE + index + 1, value)
|
|
end
|
|
|
|
function EnableSoloSecondaryTargets()
|
|
local target_indices = { 0, 1, 5, 6, 7, 20, 21 }
|
|
for _, i in ipairs(target_indices) do
|
|
local base = KCSECONDARY_BASE + (i * 333)
|
|
globals.set_int(base + 68, 0)
|
|
globals.set_int(base + 143, 0)
|
|
end
|
|
gui.show_message("Kortz Center", "Solo secondary targets enabled")
|
|
end
|
|
|
|
function SetKortzTarget(target_index)
|
|
stats.set_int(MPX() .. "K26_HEIST_TARGET", target_index)
|
|
locals.set_int("kortz_planning", KCBRL, 2)
|
|
gui.show_message("Kortz Center Heist", "Target set to: " .. targetShortNames[target_index + 1])
|
|
end
|
|
|
|
function KortzReloadBoard()
|
|
locals.set_int("kortz_planning", KCBRL, 2)
|
|
gui.show_message("Kortz Center Heist", "Planning board reloaded")
|
|
end
|
|
|
|
function KortzSkipCooldown()
|
|
globals.set_int(KCCDG, 0)
|
|
globals.set_int(KCCD2G, 0)
|
|
gui.show_message("Kortz Center Heist", "Cooldowns reset to 0")
|
|
end
|
|
|
|
-- Smooth rainbow fade info helper
|
|
function RainbowInfo(tooltip)
|
|
local time = os.clock() * 0.5
|
|
local r = (math.sin(time) + 1) / 2
|
|
local g = (math.sin(time + 2.094) + 1) / 2
|
|
local b = (math.sin(time + 4.188) + 1) / 2
|
|
ImGui.TextColored(r, g, b, 1.0, "[?]")
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip(tooltip)
|
|
end
|
|
end
|
|
|
|
-- Toggle dropdown helper
|
|
function ToggleBitDropdown(label, stat_name, bit, tooltip)
|
|
local current = stats.get_int(MPX() .. stat_name)
|
|
local is_set = (current & bit) ~= 0
|
|
local options = { "Not Done", "Done" }
|
|
local idx = is_set and 1 or 0
|
|
local new_idx, changed = ImGui.Combo(label, idx, options, 2)
|
|
if changed then
|
|
if new_idx == 1 then
|
|
stats.set_int(MPX() .. stat_name, current | bit)
|
|
gui.show_message("Kortz Center Heist", label .. " completed")
|
|
else
|
|
stats.set_int(MPX() .. stat_name, current & ~bit)
|
|
gui.show_message("Kortz Center Heist", label .. " undone")
|
|
end
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip(tooltip)
|
|
end
|
|
end
|
|
|
|
-- Auto hack functions
|
|
local function KortzSkipDataCrack()
|
|
if isKortzHeistActive() then
|
|
for b = 0, 7 do
|
|
locals.set_int("fm_mission_controller_v3", KCDCL + 1 + (b * 4), 1)
|
|
end
|
|
locals.set_int("fm_mission_controller_v3", KCDCL, 1)
|
|
gui.show_message("Kortz Center Cracker", "Data crack bypassed")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzSkipFingerprint()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCFHL, 5)
|
|
gui.show_message("Kortz Center Cracker", "Fingerprint scanner bypassed")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzSkipVaultDoor()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCVLL, 5)
|
|
gui.show_message("Kortz Center Cracker", "Vault door bypassed")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzAutoAccessCode()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCAC_BASE + (0 * 2), 0)
|
|
locals.set_int("fm_mission_controller_v3", KCAC_BASE + (1 * 2), 0)
|
|
locals.set_int("fm_mission_controller_v3", KCAC_BASE + (2 * 2), 0)
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(0, 237, 1.0)
|
|
gui.show_message("Kortz Center Cracker", "Access code entered: 00-00-00")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzDisableLasers()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCLGL, 4294784)
|
|
globals.set_int(KCLDG, 1)
|
|
gui.show_message("Kortz Center Cracker", "Laser grid neutralized")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function CutVenus()
|
|
if isKortzHeistActive() then
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (0 * 13) + KCCGL_OFFSET, 100.0)
|
|
gui.show_message("Kortz Center Cracker", "Venus d'Algernon cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function CutGemstone()
|
|
if isKortzHeistActive() then
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (1 * 13) + KCCGL_OFFSET, 100.0)
|
|
gui.show_message("Kortz Center Cracker", "Gemstone cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function CutHorse()
|
|
if isKortzHeistActive() then
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (2 * 13) + KCCGL_OFFSET, 100.0)
|
|
gui.show_message("Kortz Center Cracker", "Horse cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function CutCoquard()
|
|
if isKortzHeistActive() then
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (3 * 13) + KCCGL_OFFSET, 100.0)
|
|
gui.show_message("Kortz Center Cracker", "Coquard Carcanet cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function CutMemento()
|
|
if isKortzHeistActive() then
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (4 * 13) + KCCGL_OFFSET, 100.0)
|
|
gui.show_message("Kortz Center Cracker", "Memento Non Mori cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzCutAllGlass()
|
|
if isKortzHeistActive() then
|
|
for i = 0, 4 do
|
|
locals.set_float("fm_mission_controller_v3", KCCGL_BASE + (i * 13) + KCCGL_OFFSET, 100.0)
|
|
end
|
|
gui.show_message("Kortz Center Cracker", "All glass cases cut")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzTakePrimary()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCPT_STATE, 15)
|
|
locals.set_int("fm_mission_controller_v3", KCPT_STATE, 17)
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(0, 237, 1.0)
|
|
gui.show_message("Kortz Center Cracker", "Primary target acquired")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
local function KortzTakeSecondary()
|
|
if isKortzHeistActive() then
|
|
locals.set_int("fm_mission_controller_v3", KCST_STATE, 3)
|
|
PAD.SET_CONTROL_VALUE_NEXT_FRAME(0, 219, 1.0)
|
|
gui.show_message("Kortz Center Cracker", "Secondary target secured")
|
|
else
|
|
gui.show_message("Kortz Center Cracker", "Heist not active")
|
|
end
|
|
end
|
|
|
|
-- Auto hack loop
|
|
script.register_looped("KortzCenterAutoHack", function(s)
|
|
s:yield()
|
|
if not network.is_session_started()
|
|
or SCRIPT.GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(joaat("maintransition")) > 0 then
|
|
return
|
|
end
|
|
|
|
local heistActive = isKortzHeistActive()
|
|
|
|
if not heistActive and heistWasActive then
|
|
dataCrackTriggered = false
|
|
fingerprintTriggered = false
|
|
vaultDoorTriggered = false
|
|
heistWasActive = false
|
|
s:sleep(500)
|
|
return
|
|
end
|
|
|
|
heistWasActive = heistActive
|
|
|
|
if not heistActive or not autoHacks then
|
|
s:sleep(500)
|
|
return
|
|
end
|
|
|
|
if not dataCrackTriggered then
|
|
local isActive = false
|
|
for b = 0, 7 do
|
|
if locals.get_int("fm_mission_controller_v3", KCDCL + 1 + (b * 4)) == 0 then
|
|
isActive = true
|
|
break
|
|
end
|
|
end
|
|
if isActive then
|
|
for b = 0, 7 do
|
|
locals.set_int("fm_mission_controller_v3", KCDCL + 1 + (b * 4), 1)
|
|
end
|
|
locals.set_int("fm_mission_controller_v3", KCDCL, 1)
|
|
dataCrackTriggered = true
|
|
gui.show_message("Kortz Center Cracker", "Auto: Data crack bypassed")
|
|
s:sleep(1000)
|
|
return
|
|
end
|
|
end
|
|
|
|
if not fingerprintTriggered then
|
|
local val = locals.get_int("fm_mission_controller_v3", KCFHL)
|
|
if val ~= nil and val >= 0 and val <= 4 then
|
|
locals.set_int("fm_mission_controller_v3", KCFHL, 5)
|
|
fingerprintTriggered = true
|
|
gui.show_message("Kortz Center Cracker", "Auto: Fingerprint bypassed")
|
|
s:sleep(1000)
|
|
return
|
|
end
|
|
end
|
|
|
|
if not vaultDoorTriggered then
|
|
local val = locals.get_int("fm_mission_controller_v3", KCVLL)
|
|
if val ~= nil and val >= 0 and val <= 4 then
|
|
locals.set_int("fm_mission_controller_v3", KCVLL, 5)
|
|
vaultDoorTriggered = true
|
|
gui.show_message("Kortz Center Cracker", "Auto: Vault door bypassed")
|
|
s:sleep(1000)
|
|
return
|
|
end
|
|
end
|
|
|
|
s:sleep(100)
|
|
end)
|
|
|
|
-- ============================================
|
|
-- MAIN UI
|
|
-- ============================================
|
|
|
|
KortzCenterHeistMenu:add_imgui(function()
|
|
if checkOnline() then return end
|
|
|
|
local heistActive = isKortzHeistActive()
|
|
if heistActive then
|
|
ImGui.TextColored(0.0, 1.0, 0.0, 1.0, "HEIST IS ACTIVE")
|
|
else
|
|
ImGui.TextColored(1.0, 0.5, 0.0, 1.0, "HEIST NOT ACTIVE")
|
|
end
|
|
ImGui.Dummy(0, 5)
|
|
|
|
-- PRIMARY TARGET
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "PRIMARY TARGET")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Select the main painting you want to steal.\nClick SET TARGET to apply it.")
|
|
ImGui.Separator()
|
|
|
|
local nIndex, changed = ImGui.Combo("##PrimaryTarget", k26_heist_target, targetShortNames, #targetShortNames)
|
|
if changed then
|
|
k26_heist_target = nIndex
|
|
end
|
|
|
|
if ImGui.Button("SET TARGET") then
|
|
SetKortzTarget(k26_heist_target)
|
|
selectedPayoutTarget = k26_heist_target
|
|
end
|
|
ImGui.SameLine()
|
|
ImGui.Text("Selected: " .. targetShortNames[k26_heist_target + 1])
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- PAYOUT SETTINGS
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "PAYOUT SETTINGS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Adjust the payout for the selected target.")
|
|
ImGui.Separator()
|
|
|
|
selectedPayoutTarget = k26_heist_target
|
|
local targetIdx = selectedPayoutTarget + 1
|
|
|
|
if targetIdx >= 1 and targetIdx <= 27 then
|
|
ImGui.Text("Target: " .. targetShortNames[targetIdx])
|
|
ImGui.TextColored(0.0, 1.0, 0.0, 1.0, "Payout: $" .. string.format("%.0f", targetBasePayouts[targetIdx]))
|
|
|
|
ImGui.Dummy(0, 5)
|
|
ImGui.Text("Multiplier:")
|
|
payoutModifiers[targetIdx], _ = ImGui.InputFloat("##Multiplier" .. targetIdx, payoutModifiers[targetIdx], 0.1, 0.5, "%.1f")
|
|
ImGui.Text("Custom Value:")
|
|
payoutCustomValues[targetIdx], _ = ImGui.InputInt("##CustomValue" .. targetIdx, payoutCustomValues[targetIdx], 1000, 10000)
|
|
ImGui.Dummy(0, 5)
|
|
|
|
if ImGui.Button("Apply Multiplier") then
|
|
local newPayout = math.floor(targetBasePayouts[targetIdx] * payoutModifiers[targetIdx])
|
|
setPayout(targetIdx - 1, newPayout)
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "Payout set to $" .. string.format("%.0f", newPayout))
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Apply Custom Value") then
|
|
if payoutCustomValues[targetIdx] > 0 then
|
|
setPayout(targetIdx - 1, payoutCustomValues[targetIdx])
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "Payout set to $" .. string.format("%.0f", payoutCustomValues[targetIdx]))
|
|
end
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Reset This Target") then
|
|
setPayout(targetIdx - 1, targetBasePayouts[targetIdx])
|
|
KortzReloadBoard()
|
|
payoutModifiers[targetIdx] = 1.0
|
|
payoutCustomValues[targetIdx] = 0
|
|
gui.show_message("Kortz Center Heist", "Payout reset to base")
|
|
end
|
|
end
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- GENERAL SETTINGS
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "GENERAL SETTINGS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Adjust bag size, team lives, weekly multiplier, difficulty, and cooldowns.")
|
|
ImGui.Separator()
|
|
|
|
local currentBag = getCurrentBagSize()
|
|
ImGui.Text("Bag Capacity: " .. currentBag)
|
|
bagSizeValue, _ = ImGui.InputInt("##BagSize", bagSizeValue)
|
|
if ImGui.Button("Set Bag Size") then
|
|
globals.set_int(KCBGL, bagSizeValue)
|
|
gui.show_message("Kortz Center Heist", "Bag capacity set to " .. bagSizeValue)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
local currentLives = getCurrentLives()
|
|
ImGui.Text("Team Lives: " .. currentLives)
|
|
livesValue, _ = ImGui.InputInt("##Lives", livesValue)
|
|
if ImGui.Button("Set Lives") then
|
|
locals.set_int("fm_mission_controller_v3", KCLIVESL, livesValue)
|
|
gui.show_message("Kortz Center Heist", "Team lives set to " .. livesValue)
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
ImGui.Text("Weekly Bonus Multiplier:")
|
|
weeklyMultiplierValue, _ = ImGui.InputFloat("##WeeklyMultiplier", weeklyMultiplierValue)
|
|
if ImGui.Button("Set Weekly Multiplier") then
|
|
globals.set_float(KCWMG, weeklyMultiplierValue)
|
|
gui.show_message("Kortz Center Heist", "Weekly multiplier set to " .. weeklyMultiplierValue .. "x")
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
local hard_stat = stats.get_int(MPX() .. "K26_GENERAL_BS")
|
|
local hard_active = (hard_stat & (1 << 28)) ~= 0
|
|
if hard_active then
|
|
ImGui.TextColored(1.0, 0.3, 0.3, 1.0, "HARD MODE: ACTIVE")
|
|
else
|
|
ImGui.TextColored(0.0, 1.0, 0.0, 1.0, "NORMAL MODE: ACTIVE")
|
|
end
|
|
|
|
if ImGui.Button("Hard Mode") then
|
|
stats.set_int(MPX() .. "K26_GENERAL_BS", stats.get_int(MPX() .. "K26_GENERAL_BS") | (1 << 28))
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "Hard Mode enabled")
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Enable Hard Mode")
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Normal Mode") then
|
|
stats.set_int(MPX() .. "K26_GENERAL_BS", stats.get_int(MPX() .. "K26_GENERAL_BS") & ~(1 << 28))
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "Normal Mode enabled")
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Enable Normal Mode")
|
|
end
|
|
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Skip Cooldown") then
|
|
KortzSkipCooldown()
|
|
end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Unlock All Paintings") then
|
|
stats.set_int(MPX() .. "K26_TARGETS_OWNED_BS", -1)
|
|
gui.show_message("Kortz Center Heist", "All paintings unlocked")
|
|
end
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- HIGH PRIORITY
|
|
ImGui.TextColored(1.0, 0.8, 0.0, 1.0, "HIGH PRIORITY (STRONGLY RECOMMENDED)")
|
|
ImGui.SameLine()
|
|
RainbowInfo("These preps make the heist much easier.\nStrongly recommended for a smooth run.")
|
|
ImGui.Separator()
|
|
|
|
ToggleBitDropdown("Unmarked Weapons", "K26_ROBBERY_PROG", 128, "Weapons that can't be traced")
|
|
ToggleBitDropdown("Getaway Vehicle", "K26_ROBBERY_PROG", 256, "Armored getaway vehicle")
|
|
ToggleBitDropdown("Guard Routes", "K26_GENERAL_BS", 32, "Reveals guard patrol patterns")
|
|
ToggleBitDropdown("Glass Cutter", "K26_GENERAL_BS", 64, "Tool for cutting display cases")
|
|
ToggleBitDropdown("Power Drills", "K26_GENERAL_BS", 128, "Drills for certain locks")
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- REQUIRED PREPS
|
|
ImGui.TextColored(1.0, 0.5, 0.5, 1.0, "REQUIRED PREPS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("These are mandatory to start the heist.")
|
|
ImGui.Separator()
|
|
|
|
local scope_current = stats.get_int(MPX() .. "K26_ROBBERY_PROG")
|
|
local scope_done = (scope_current & 1) ~= 0
|
|
local scope_idx = scope_done and 1 or 0
|
|
local scope_new, scope_changed = ImGui.Combo("Scope Out Kortz Center", scope_idx, { "Not Done", "Done" }, 2)
|
|
if scope_changed then
|
|
if scope_new == 1 then
|
|
stats.set_int(MPX() .. "K26_ROBBERY_PROG", scope_current | 1)
|
|
stats.set_int(MPX() .. "K26_SCOPING_BS", -1)
|
|
stats.set_int(MPX() .. "K26_POI_BS", -1)
|
|
gui.show_message("Kortz Center Heist", "Scope Out completed")
|
|
else
|
|
stats.set_int(MPX() .. "K26_ROBBERY_PROG", scope_current & ~1)
|
|
gui.show_message("Kortz Center Heist", "Scope Out undone")
|
|
end
|
|
end
|
|
|
|
ToggleBitDropdown("Alpha Mail Disguise", "K26_ROBBERY_PROG", 2, "Disguise to enter building")
|
|
ToggleBitDropdown("Staff Key Card", "K26_ROBBERY_PROG", 8, "Access to staff areas")
|
|
ToggleBitDropdown("Hacking Device", "K26_ROBBERY_PROG", 32, "Required for vault door")
|
|
ToggleBitDropdown("Access Code", "K26_ROBBERY_PROG", 64, "Code for security terminal")
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- OPTIONAL PREPS
|
|
ImGui.TextColored(0.6, 0.6, 0.6, 1.0, "OPTIONAL PREPS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Optional preps that can help but aren't required.")
|
|
ImGui.Separator()
|
|
|
|
ToggleBitDropdown("Hazmat Suit", "K26_ROBBERY_PROG", 4, "Access to chemical area")
|
|
ToggleBitDropdown("Tactical Equipment", "K26_ROBBERY_PROG", 16, "Body armor and gear")
|
|
ToggleBitDropdown("Annihilator Stealth", "K26_ROBBERY_PROG", 512, "Stealth helicopter")
|
|
ToggleBitDropdown("Manchez", "K26_ROBBERY_PROG", 1024, "Motorcycle")
|
|
ToggleBitDropdown("EMP Charges", "K26_ROBBERY_PROG", 2048, "Disable electronics")
|
|
ToggleBitDropdown("Guard Shipments", "K26_ROBBERY_PROG", 4096, "Weaken security")
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- OPTIONAL UPGRADES
|
|
ImGui.TextColored(0.6, 0.6, 0.6, 1.0, "OPTIONAL UPGRADES")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Extra upgrades for loadouts, entrances, and vehicles.")
|
|
ImGui.Separator()
|
|
|
|
ToggleBitDropdown("Vault Keypad", "K26_GENERAL_BS", 16, "Bypass vault keypad")
|
|
ToggleBitDropdown("EMP Charges (Upgrade)", "K26_GENERAL_BS", 256, "EMP upgrade")
|
|
ToggleBitDropdown("Street Loadout", "K26_GENERAL_BS", 512, "Basic weapons")
|
|
ToggleBitDropdown("Security Loadout", "K26_GENERAL_BS", 1024, "Better weapons")
|
|
ToggleBitDropdown("Military Loadout", "K26_GENERAL_BS", 2048, "Top weapons")
|
|
ToggleBitDropdown("Staff Entrance", "K26_GENERAL_BS", 4096, "Staff entry point")
|
|
ToggleBitDropdown("Sewer", "K26_GENERAL_BS", 32768, "Sewer entry point")
|
|
ToggleBitDropdown("Manhole Key Location", "K26_GENERAL_BS", 65536, "Find manhole key")
|
|
ToggleBitDropdown("Red Manchez", "K26_GENERAL_BS", 131072, "Red motorcycle")
|
|
ToggleBitDropdown("Blue Manchez", "K26_GENERAL_BS", 262144, "Blue motorcycle")
|
|
ToggleBitDropdown("Green Manchez", "K26_GENERAL_BS", 524288, "Green motorcycle")
|
|
ToggleBitDropdown("Yellow Manchez", "K26_GENERAL_BS", 1048576, "Yellow motorcycle")
|
|
ToggleBitDropdown("Advanced Avionics", "K26_GENERAL_BS", 8388608, "Better helicopter")
|
|
ToggleBitDropdown("Manhole Key", "K26_GENERAL_BS", 134217728, "Sewer access key")
|
|
ToggleBitDropdown("Weak Guards", "K26_GENERAL_BS", -2147483648, "Easier guards")
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- POINTS OF INTEREST
|
|
ImGui.TextColored(0.6, 0.6, 0.6, 1.0, "POINTS OF INTEREST")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Scope all points of interest to unlock optional preps.")
|
|
ImGui.Separator()
|
|
|
|
local poi_current = stats.get_int(MPX() .. "K26_POI_BS")
|
|
local poi_idx = (poi_current == -1) and 1 or 0
|
|
local poi_new, poi_changed = ImGui.Combo("Points of Interest Scoped", poi_idx, { "Not Done", "Done" }, 2)
|
|
if poi_changed then
|
|
stats.set_int(MPX() .. "K26_POI_BS", poi_new == 1 and -1 or 0)
|
|
gui.show_message("Kortz Center Heist", poi_new == 1 and "POI scoped" or "POI unscoped")
|
|
end
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- SECONDARY TARGETS
|
|
ImGui.TextColored(0.6, 0.6, 0.6, 1.0, "SECONDARY TARGETS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Scope all secondary targets for extra loot.")
|
|
ImGui.Separator()
|
|
|
|
local scop_current = stats.get_int(MPX() .. "K26_SCOPING_BS")
|
|
local scop_idx = (scop_current == -1) and 1 or 0
|
|
local scop_new, scop_changed = ImGui.Combo("All Secondary Targets Scoped", scop_idx, { "Not Done", "Done" }, 2)
|
|
if scop_changed then
|
|
stats.set_int(MPX() .. "K26_SCOPING_BS", scop_new == 1 and -1 or 0)
|
|
gui.show_message("Kortz Center Heist", scop_new == 1 and "Secondary targets scoped" or "Secondary targets unscoped")
|
|
end
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- QUICK ACTIONS
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "QUICK ACTIONS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Complete all selections or reset to just show selected target.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Complete All Selections") then
|
|
local general_bits = -1
|
|
general_bits = general_bits & ~(1 << 28)
|
|
stats.set_int(MPX() .. "K26_GENERAL_BS", general_bits)
|
|
stats.set_int(MPX() .. "K26_ROBBERY_PROG", 65535)
|
|
stats.set_int(MPX() .. "K26_SCOPING_BS", -1)
|
|
stats.set_int(MPX() .. "K26_POI_BS", -1)
|
|
stats.set_int(MPX() .. "K26_HEIST_TARGET", k26_heist_target)
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "All selections completed in Normal Mode")
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Complete ALL dropdown selections.\nKeeps Normal Mode active (Hard Mode NOT enabled).")
|
|
end
|
|
|
|
ImGui.SameLine()
|
|
|
|
if ImGui.Button("Reset (Keep Target Only)") then
|
|
stats.set_int(MPX() .. "K26_ROBBERY_PROG", 1)
|
|
stats.set_int(MPX() .. "K26_SCOPING_BS", -1)
|
|
stats.set_int(MPX() .. "K26_POI_BS", -1)
|
|
stats.set_int(MPX() .. "K26_GENERAL_BS", 0)
|
|
stats.set_int(MPX() .. "K26_HEIST_TARGET", k26_heist_target)
|
|
KortzReloadBoard()
|
|
gui.show_message("Kortz Center Heist", "Reset done, target kept: " .. targetShortNames[k26_heist_target + 1])
|
|
end
|
|
if ImGui.IsItemHovered() then
|
|
ImGui.SetTooltip("Reset all preps and upgrades.\nOnly the currently selected target from dropdown will remain.")
|
|
end
|
|
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- BOARD MANAGEMENT
|
|
ImGui.TextColored(0.6, 0.6, 0.6, 1.0, "BOARD MANAGEMENT")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Refresh the planning board to see changes.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Reload Planning Board") then
|
|
KortzReloadBoard()
|
|
end
|
|
ImGui.Dummy(0, 8)
|
|
|
|
-- EXTRAS
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "EXTRAS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Additional tools for the heist.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Skip Cutscene") then
|
|
SkipCutscene()
|
|
gui.show_message("Kortz Center Heist", "Cutscene skipped")
|
|
end
|
|
end)
|
|
|
|
-- ============================================
|
|
-- MISSION CRACKER TAB
|
|
-- ============================================
|
|
|
|
KortzCenterCrackerMenu = KortzCenterHeistMenu:add_tab("Mission Cracker")
|
|
|
|
KortzCenterCrackerMenu:add_imgui(function()
|
|
if checkOnline() then return end
|
|
|
|
local heistActive = isKortzHeistActive()
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "AUTO DOOR HACKS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Automatically bypass hacks when they appear.")
|
|
ImGui.Separator()
|
|
|
|
autoHacks, _ = ImGui.Checkbox("Enable Auto Door Hacks", autoHacks)
|
|
if not heistActive then
|
|
ImGui.TextColored(1.0, 0.8, 0.0, 1.0, "Start heist first to use auto hacks")
|
|
end
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "MANUAL DOOR HACKS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Click to bypass hacks manually.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Skip Data Crack") then KortzSkipDataCrack() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Skip Fingerprint Hack") then KortzSkipFingerprint() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Skip Vault Door Hack") then KortzSkipVaultDoor() end
|
|
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "ACCESS & SECURITY")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Bypass security systems.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Auto-Enter Access Code") then KortzAutoAccessCode() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Disable Lasers") then KortzDisableLasers() end
|
|
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "GLASS CUTTING")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Cut display case glass instantly.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Cut All Glass") then KortzCutAllGlass() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Venus d'Algernon") then CutVenus() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Gemstone") then CutGemstone() end
|
|
|
|
if ImGui.Button("Horse") then CutHorse() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Coquard Carcanet") then CutCoquard() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Memento Non Mori") then CutMemento() end
|
|
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "SOLO SECONDARY TARGETS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Enable secondary targets for solo play.")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Enable Solo Secondary Targets (B2 Floor)") then
|
|
EnableSoloSecondaryTargets()
|
|
end
|
|
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "TARGETS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Grab targets instantly (stand near them).")
|
|
ImGui.Separator()
|
|
|
|
if ImGui.Button("Take Primary Target") then KortzTakePrimary() end
|
|
ImGui.SameLine()
|
|
if ImGui.Button("Take Secondary Target") then KortzTakeSecondary() end
|
|
|
|
ImGui.Dummy(0, 5)
|
|
|
|
ImGui.TextColored(1.0, 0.8, 0.2, 1.0, "GLASS CASE STATUS")
|
|
ImGui.SameLine()
|
|
RainbowInfo("Current status of all display cases.")
|
|
ImGui.Separator()
|
|
|
|
for i = 0, 4 do
|
|
local progress = locals.get_float("fm_mission_controller_v3", KCCGL_BASE + (i * 13) + KCCGL_OFFSET)
|
|
local status = "Available"
|
|
local r, g, b = 1.0, 0.0, 0.0
|
|
if progress >= 100.0 then
|
|
status = "Cut"
|
|
r, g, b = 0.0, 1.0, 0.0
|
|
elseif progress == 0 then
|
|
status = "Empty"
|
|
r, g, b = 0.5, 0.5, 0.5
|
|
end
|
|
ImGui.TextColored(r, g, b, 1.0, glassCaseTypes[i] .. ": " .. glassCaseNames[i] .. " - " .. status)
|
|
end
|
|
end)
|
|
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
MissionsSelectorAndCooldownMenu = makeOnlineTab(L7NEG:add_tab("Missions Selector And cooldown Menu"))
|
|
|
|
MissionsSelectorAndCooldownMenu:add_button("Remove Dax Fooligan missions CoolDown ", function()
|
|
stats.set_int(MPX() .. "XM22JUGGALOWORKCDTIMER", -1)
|
|
end)
|
|
|
|
MissionsSelectorAndCooldownMenu:add_button("Remove VIP/MC Cooldown", function()
|
|
stats.set_int("MPPLY_VIPGAMEPLAYDISABLEDTIMER", 0)
|
|
end)
|
|
|
|
MissionsSelectorAndCooldownMenu:add_button("Skip Yacht Missions", function()
|
|
stats.set_int(MPX() .. "YACHT_MISSION_PROG", 0)
|
|
stats.set_int(MPX() .. "YACHT_MISSION_FLOW", 21845)
|
|
stats.set_int(MPX() .. "CASINO_DECORATION_GIFT_1", -1)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CreditsMenu = L7NEG:add_tab("Credits")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Yimura = CreditsMenu:add_tab("Yimura and his team/maintainers")
|
|
Yimura:add_text("Source:")
|
|
Yimura:add_text("https://github.com/Mr-X-GTA/YimMenu")
|
|
Yimura:add_text("https://github.com/YimMenu/YimMenuV2")
|
|
|
|
SILENTSALO = CreditsMenu:add_tab("Silent")
|
|
SILENTSALO:add_text("Source:")
|
|
SILENTSALO:add_text("https://github.com/SilentSal0/Silent-Night")
|
|
SILENTSALO:add_text("Maintained by nightli:")
|
|
SILENTSALO:add_text("https://github.com/xnightli06x/Silent-Night")
|
|
|
|
XESDDOOG = CreditsMenu:add_tab("SAMURAI aka xesdoog")
|
|
XESDDOOG:add_text("Source:")
|
|
XESDDOOG:add_text("https://github.com/YimMenu-Lua/YimResupplier")
|
|
|
|
IMAGINENOTHING = CreditsMenu:add_tab("ImagineNothing")
|
|
IMAGINENOTHING:add_text("For Kortz Center Heist stats and Locals/globals:")
|
|
IMAGINENOTHING:add_text("https://www.unknowncheats.me/forum/4742522-post603.html")
|
|
IMAGINENOTHING:add_text("https://www.unknowncheats.me/forum/4746347-post762.html")
|
|
|
|
SLON = CreditsMenu:add_tab("SLON")
|
|
SLON:add_text("Source:")
|
|
SLON:add_text("https://www.unknowncheats.me/forum/grand-theft-auto-v/591335-yimceo-ceo-crates-method-yimmenu.html")
|
|
|
|
Alestarov = CreditsMenu:add_tab("Alestarov")
|
|
Alestarov:add_text("Source:")
|
|
Alestarov:add_text("https://github.com/YimMenu-Lua/Alestarov-Menu")
|
|
|
|
YOUMENU = CreditsMenu:add_tab("And You <3")
|
|
YOUMENU:add_text(
|
|
"Yes You Without You Or Your PRs and support You Give Me This Script Would Be Nothing Fr So Big Thanks To You All"
|
|
)
|
|
YOUMENU:add_text("You can report Bugs And Make PRs With Features Down Bellow:")
|
|
YOUMENU:add_text("https://github.com/UltimateMenu/UltimateMenu/issues")
|
|
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|