558 lines
22 KiB
Lua
558 lines
22 KiB
Lua
-- Cheat Menu - Cheat menu for Grand Theft Auto SanAndreas
|
|
-- Copyright (C) 2019-2020 Grinch_
|
|
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- (at your option) any later version.
|
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
local module = {}
|
|
|
|
module.tmenu =
|
|
{
|
|
auto_update_check = imgui.new.bool(fconfig.Get('tmenu.auto_update_check',true)),
|
|
auto_reload = imgui.new.bool(fconfig.Get('tmenu.auto_reload',true)),
|
|
command =
|
|
{
|
|
filter = imgui.ImGuiTextFilter(),
|
|
height = 40,
|
|
input_field = imgui.new.char[256](),
|
|
list = {},
|
|
show = imgui.new.bool(false),
|
|
},
|
|
crash_text = "",
|
|
dont_save = imgui.new.bool(fconfig.Get('tmenu.dont_save',false)),
|
|
enable_stat_saving = imgui.new.bool(fconfig.Get('tmenu.enable_stat_saving',false)),
|
|
fast_load_images = imgui.new.bool(fconfig.Get('tmenu.fast_load_images',true)),
|
|
font =
|
|
{
|
|
list = {},
|
|
selected = fconfig.Get('tmenu.font.selected',"Trebucbd.ttf"),
|
|
size = imgui.new.int(fconfig.Get('tmenu.font.size',math.floor(resY/54.85))),
|
|
},
|
|
get_beta_updates = imgui.new.bool(fconfig.Get('tmenu.get_beta_updates',true)),
|
|
hot_keys =
|
|
{
|
|
asc_key = fconfig.Get('tmenu.hot_keys.asc_key',{vkeys.VK_RETURN,vkeys.VK_RETURN}),
|
|
camera_mode = fconfig.Get('tmenu.hot_keys.camera_mode',{vkeys.VK_LMENU,vkeys.VK_C}),
|
|
camera_mode_forward = fconfig.Get('tmenu.hot_keys.camera_mode_forward',{vkeys.VK_I,vkeys.VK_I}),
|
|
camera_mode_backward = fconfig.Get('tmenu.hot_keys.camera_mode_backward',{vkeys.VK_K,vkeys.VK_K}),
|
|
camera_mode_left = fconfig.Get('tmenu.hot_keys.camera_mode_left',{vkeys.VK_J,vkeys.VK_J}),
|
|
camera_mode_right = fconfig.Get('tmenu.hot_keys.camera_mode_right',{vkeys.VK_L,vkeys.VK_L}),
|
|
camera_mode_slow = fconfig.Get('tmenu.hot_keys.camera_mode_slow',{vkeys.VK_RCONTROL,vkeys.VK_RCONTROL}),
|
|
camera_mode_fast = fconfig.Get('tmenu.hot_keys.camera_mode_fast',{vkeys.VK_RSHIFT,vkeys.VK_RSHIFT}),
|
|
camera_mode_up = fconfig.Get('tmenu.hot_keys.camera_mode_up',{vkeys.VK_O,vkeys.VK_O}),
|
|
camera_mode_down = fconfig.Get('tmenu.hot_keys.camera_mode_down',{vkeys.VK_P,vkeys.VK_P}),
|
|
command_window = fconfig.Get('tmenu.hot_keys.command_window',{vkeys.VK_LMENU,vkeys.VK_M}),
|
|
menu_open = fconfig.Get('tmenu.hot_keys.menu_open',{vkeys.VK_LCONTROL,vkeys.VK_M}),
|
|
quick_screenshot = fconfig.Get('tmenu.hot_keys.quick_screenshot',{vkeys.VK_LCONTROL,vkeys.VK_S}),
|
|
quick_teleport = fconfig.Get('tmenu.hot_keys.quick_teleport',{vkeys.VK_X,vkeys.VK_Y}),
|
|
script_manager_temp = {vkeys.VK_LCONTROL,vkeys.VK_1}
|
|
},
|
|
lock_player = imgui.new.bool(fconfig.Get('tmenu.lock_player',false)),
|
|
overlay =
|
|
{
|
|
coordinates = imgui.new.bool(fconfig.Get('tmenu.overlay.coordinates',false)),
|
|
fps = imgui.new.bool(fconfig.Get('tmenu.overlay.fps',false)),
|
|
show = imgui.new.bool(true),
|
|
location = imgui.new.bool(fconfig.Get('tmenu.overlay.location',false)),
|
|
position = {"Custom","Top Left","Top Right","Bottom Left","Bottom Right"},
|
|
position_array = {},
|
|
position_index = imgui.new.int(fconfig.Get('tmenu.overlay.position_index',4)),
|
|
health = imgui.new.bool(fconfig.Get('tmenu.overlay.health',false)),
|
|
pos_x = imgui.new.int(fconfig.Get('tmenu.overlay.pos_x',0)),
|
|
pos_y = imgui.new.int(fconfig.Get('tmenu.overlay.pos_y',0)),
|
|
speed = imgui.new.bool(fconfig.Get('tmenu.overlay.speed',false)),
|
|
transparent_bg = imgui.new.bool(fconfig.Get('tmenu.overlay.transparent_bg',false)),
|
|
},
|
|
repo_version = nil,
|
|
show_tooltips = imgui.new.bool(fconfig.Get('tmenu.show_tooltips',true)),
|
|
show_crash_message = imgui.new.bool(fconfig.Get('tmenu.show_crash_message',true)),
|
|
update_status = fconst.UPDATE_STATUS.HIDE_MSG,
|
|
}
|
|
|
|
module.tmenu.overlay.position_array = imgui.new['const char*'][#module.tmenu.overlay.position](module.tmenu.overlay.position)
|
|
|
|
--------------------------------------------------
|
|
-- Command window
|
|
|
|
function module.FindArgument(t,string)
|
|
for k,v in ipairs(t) do
|
|
if v == string then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function module.RegisterCommand(string,call_back_func,desc,usage)
|
|
module.tmenu.command.list[string] = {call_back_func,desc,usage}
|
|
end
|
|
|
|
function module.ExecuteCommand()
|
|
|
|
local string = ffi.string(module.tmenu.command.input_field)
|
|
local t = {}
|
|
|
|
for w in string:gmatch("%S+") do
|
|
table.insert(t,w)
|
|
end
|
|
|
|
for v,k in pairs(module.tmenu.command.list) do
|
|
if v == t[1] then
|
|
k[1](t)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
function module.RegisterAllCommands()
|
|
|
|
module.RegisterCommand("reload",function(t)
|
|
thisScript():reload()
|
|
end,"Reload cheat menu")
|
|
|
|
module.RegisterCommand("reloadall",function(t)
|
|
reloadScripts()
|
|
end,"Reload all moonloader scripts")
|
|
|
|
module.RegisterCommand("tp",function(t)
|
|
if t[2] == nil or t[3] == nil then
|
|
printHelpString("Required coordinate missing")
|
|
return
|
|
end
|
|
|
|
if t[4] == nil then t[4] = getGroundZFor3dCoord(x,y,100) end
|
|
lua_thread.create(fteleport.Teleport,tonumber(t[2]),tonumber(t[3]),tonumber(t[4]))
|
|
end,"Teleport to coordinates","{int X} {int Y} {int Z}(optional)")
|
|
|
|
module.RegisterCommand("settime",function(t)
|
|
setTimeOfDay(t[2],t[3])
|
|
printHelpString("Time set")
|
|
end,"Sets in-game time","{int hour} {int minute}")
|
|
|
|
module.RegisterCommand("cheatmenu",function(t)
|
|
tcheatmenu.show[0] = not tcheatmenu.show[0]
|
|
end,"Open or close cheat menu")
|
|
|
|
module.RegisterCommand("sethealth",function(t)
|
|
setCharHealth(PLAYER_PED,tonumber(t[2]))
|
|
printHelpString("Set health to " .. t[2])
|
|
end,"Sets player health to value","{int health}")
|
|
|
|
module.RegisterCommand("setmaxhealth",function(t)
|
|
setCharMaxHealth(PLAYER_PED,tonumber(t[2]))
|
|
printHelpString("Set max health to " .. t[2])
|
|
end,"Sets player max health to value","{int max_health}")
|
|
|
|
module.RegisterCommand("copycoordinates",function(t)
|
|
local x,y,z = getCharCoordinates(PLAYER_PED)
|
|
setClipboardText(string.format("%s %s %s",math.floor(x),math.floor(y),math.floor(z)))
|
|
printHelpString("Coordinates copied to clipboard")
|
|
end,"Copies coordinates to clipboard")
|
|
|
|
module.RegisterCommand("setcarspeed",function(t)
|
|
if isCharInAnyCar(PLAYER_PED) then
|
|
local car = getCarCharIsUsing(PLAYER_PED)
|
|
setCarForwardSpeed(car,tonumber(t[2]))
|
|
printHelpString("Car speed set to " ..t[2])
|
|
else
|
|
printHelpString("Player is not in any car")
|
|
end
|
|
end,"Sets vehicle speed","{int speed}")
|
|
|
|
module.RegisterCommand("restorecam",function(t)
|
|
restoreCamera()
|
|
end,"Restores camera to default")
|
|
|
|
module.RegisterCommand("cameramode",function(t)
|
|
fgame.tgame.camera.bool[0] = not fgame.tgame.camera.bool[0]
|
|
fcommon.CreateThread(fgame.CameraMode)
|
|
end,"Enable or disable camera mode")
|
|
|
|
module.RegisterCommand("veh",function(t)
|
|
if t[2] == nil then
|
|
printHelpString("No vehicle name provided")
|
|
return
|
|
end
|
|
|
|
local model = tonumber(t[2])
|
|
|
|
if type(model) == "nil" then
|
|
print(string.upper(t[2]))
|
|
model = casts.CModelInfo.GetModelFromName(string.upper(t[2]))
|
|
|
|
if model ~= 0 and isModelAvailable(model) then
|
|
fvehicle.GiveVehicleToPlayer(model)
|
|
else
|
|
printHelpString("Invalid vehicle name")
|
|
end
|
|
end
|
|
|
|
|
|
end,"Spawns vehicle","{vehicle name}")
|
|
|
|
module.RegisterCommand("wep",function(t)
|
|
if t[2] == nil then
|
|
printHelpString("No weapon name provided")
|
|
return
|
|
end
|
|
|
|
local model = tonumber(t[2])
|
|
|
|
if type(model) == "nil" then
|
|
model = fweapon.CBaseWeaponInfo(string.upper(t[2]))
|
|
if model == 0 then
|
|
printHelpString("Invalid weapon name")
|
|
return
|
|
end
|
|
t[2] = model
|
|
fweapon.GiveWeapon(t[2])
|
|
end
|
|
end,"Spawns weapon","{weapon name}")
|
|
end
|
|
--------------------------------------------------
|
|
-- Updater code
|
|
|
|
function module.CheckUpdates()
|
|
|
|
if fmenu.tmenu.get_beta_updates[0] then
|
|
link = "https://raw.githubusercontent.com/user-grinch/Cheat-Menu/master/moonloader/cheat-menu.lua"
|
|
else
|
|
link = "https://api.github.com/repos/user-grinch/Cheat-Menu/tags"
|
|
end
|
|
|
|
downloadUrlToFile(link,string.format("%s/version.txt",tcheatmenu.dir),
|
|
function(id, status, p1, p2)
|
|
if status == fconst.UPDATE_STATUS.DOWNLOADED then
|
|
local file_path = string.format("%s\\version.txt",tcheatmenu.dir)
|
|
if doesFileExist(file_path) then
|
|
local file = io.open(file_path,"rb")
|
|
local content = file:read("*all")
|
|
|
|
if fmenu.tmenu.get_beta_updates[0] then
|
|
repo_version = content:match("script_version_number%((%d+)%)")
|
|
this_version = script.this.version_num
|
|
else
|
|
repo_version = decodeJson(content)[1].name
|
|
this_version = script.this.version
|
|
end
|
|
|
|
if repo_version ~= nil then
|
|
if tostring(repo_version) > tostring(this_version) then
|
|
module.tmenu.update_status = fconst.UPDATE_STATUS.NEW_UPDATE
|
|
module.tmenu.repo_version = tostring(repo_version)
|
|
printHelpString("New update available")
|
|
else
|
|
printHelpString("No update found")
|
|
end
|
|
else
|
|
printHelpString("Couldn't connect to github. The rest of the menu is still functional. You can disable auto update check from 'Menu'")
|
|
end
|
|
io.close(file)
|
|
os.remove(file_path)
|
|
else
|
|
print("Version.txt doesn't exist")
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function module.DownloadUpdate()
|
|
if fmenu.tmenu.get_beta_updates[0] then
|
|
link = "https://github.com/user-grinch/Cheat-Menu/archive/master.zip"
|
|
else
|
|
link = "https://github.com/user-grinch/Cheat-Menu/archive/".. module.tmenu.repo_version .. ".zip"
|
|
end
|
|
|
|
downloadUrlToFile(link,string.format("%supdate.zip",tcheatmenu.dir),
|
|
function(id, status, p1, p2)
|
|
if status == fconst.UPDATE_STATUS.DOWNLOADED then
|
|
fmenu.tmenu.update_status = fconst.UPDATE_STATUS.DOWNLOADED
|
|
printHelpString("Download complete. Click the 'Install update' button to finish.")
|
|
end
|
|
end)
|
|
|
|
printHelpString("Download has started. You'll get notified when the download completes.")
|
|
module.tmenu.update_status = fconst.UPDATE_STATUS.DOWNLOADING
|
|
end
|
|
|
|
function module.InstallUpdate()
|
|
fmenu.tmenu.update_status = fconst.UPDATE_STATUS.HIDE_MSG
|
|
fgame.tgame.script_manager.skip_auto_reload = true
|
|
ziplib.zip_extract(tcheatmenu.dir .. "update.zip",tcheatmenu.dir,nil,nil)
|
|
|
|
local dir = tcheatmenu.dir
|
|
|
|
if fmenu.tmenu.get_beta_updates[0] then
|
|
dir = dir .. "\\Cheat-Menu-master\\"
|
|
else
|
|
dir = dir .. "\\Cheat-Menu-" .. fmenu.tmenu.repo_version .. "\\"
|
|
end
|
|
|
|
fcommon.MoveFiles(dir,getGameDirectory())
|
|
|
|
os.remove(tcheatmenu.dir .. "update.zip")
|
|
|
|
-- Delete the old config file too, causes crash?
|
|
os.remove(string.format(tcheatmenu.dir .. "/json/config.json"))
|
|
fconfig.tconfig.save_config = false
|
|
|
|
printHelpString("Update ~g~Installed")
|
|
print("Update installed. Reloading script.")
|
|
thisScript():reload()
|
|
end
|
|
|
|
--------------------------------------------------
|
|
|
|
function module.MenuMain()
|
|
|
|
if fcommon.BeginTabBar('MenuBar') then
|
|
if fcommon.BeginTabItem('Config') then
|
|
if imgui.Button("Reset to default",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
module.tmenu.crash_text = "Default configuration ~g~restored"
|
|
fconfig.tconfig.reset = true
|
|
thisScript():reload()
|
|
end
|
|
imgui.SameLine()
|
|
if imgui.Button("Reload",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
module.tmenu.crash_text = "Cheat Menu ~g~reloaded"
|
|
thisScript():reload()
|
|
end
|
|
imgui.Spacing()
|
|
imgui.PushItemWidth((imgui.GetWindowContentRegionWidth()-imgui.GetStyle().ItemSpacing.x) * 0.50)
|
|
fcommon.DropDownListStr("##Selectfont",fmenu.tmenu.font.list,"Font - " ..fmenu.tmenu.font.selected,
|
|
function(key,val)
|
|
imgui.GetIO().FontDefault = val
|
|
fmenu.tmenu.font.selected = key
|
|
end)
|
|
imgui.SameLine()
|
|
if imgui.SliderInt("##Fontsize", module.tmenu.font.size, 12, 48) then
|
|
tcheatmenu.restart_required = true
|
|
end
|
|
imgui.PopItemWidth()
|
|
imgui.Dummy(imgui.ImVec2(0,5))
|
|
imgui.Columns(2,nil,false)
|
|
fcommon.CheckBoxVar("Auto reload",module.tmenu.auto_reload,"Reload cheat menu automatically\nin case of a crash.\n\nMight cause crash loop sometimes.")
|
|
fcommon.CheckBoxVar("Check for updates",module.tmenu.auto_update_check,"Cheat Menu will automatically check for updates\nonline. This requires an internet connection and\
|
|
will download files from github repository.")
|
|
fcommon.CheckBoxVar("Don't save changes",module.tmenu.dont_save,"Don't save any changes done to the menu.\nMenu will always start as a new install.")
|
|
fcommon.CheckBoxVar("Enable stat saving",module.tmenu.enable_stat_saving,"Save stats data in config file. These will be loaded\non new game start or save game load.\n\
|
|
Includes health, armour, stamina, body, fat etc.")
|
|
fcommon.CheckBoxVar("Fast load images",module.tmenu.fast_load_images,"Loads images at the menu startup. Enabling this may\ndecrease fps loss when opening the image tabs but\
|
|
can freeze the game at startup for a few seconds.\n\nBest to enable if you won't reload the menu frequently.")
|
|
imgui.NextColumn()
|
|
fcommon.CheckBoxVar("Get beta updates",module.tmenu.get_beta_updates,"Receive frequent beta updates.\
|
|
These updates might be unstable.")
|
|
fcommon.CheckBoxVar("Lock player",module.tmenu.lock_player,"Lock player controls while the menu is open")
|
|
fcommon.CheckBoxVar("Show crash message",module.tmenu.show_crash_message)
|
|
fcommon.CheckBoxVar("Show tooltips",module.tmenu.show_tooltips,"Shows usage tips beside options")
|
|
imgui.Columns(1)
|
|
end
|
|
if fcommon.BeginTabItem('Overlay') then
|
|
imgui.Columns(2,nil,false)
|
|
fcommon.CheckBoxVar("No background",module.tmenu.overlay.transparent_bg)
|
|
fcommon.CheckBoxVar("Show coordinates",module.tmenu.overlay.coordinates)
|
|
fcommon.CheckBoxVar("Show FPS",module.tmenu.overlay.fps)
|
|
imgui.NextColumn()
|
|
|
|
fcommon.CheckBoxVar("Show location",module.tmenu.overlay.location)
|
|
fcommon.CheckBoxVar("Show vehicle health",module.tmenu.overlay.health)
|
|
fcommon.CheckBoxVar("Show vehicle speed",module.tmenu.overlay.speed)
|
|
imgui.Columns(1)
|
|
|
|
imgui.Spacing()
|
|
imgui.Combo("Position", module.tmenu.overlay.position_index,module.tmenu.overlay.position_array,#module.tmenu.overlay.position)
|
|
fcommon.InformationTooltip("You can also right click on the\noverlay to access these options")
|
|
end
|
|
if fcommon.BeginTabItem('Commands') then
|
|
module.tmenu.command.filter:Draw("Search")
|
|
fcommon.InformationTooltip(string.format("Open command window using %s\nand close using Enter",fcommon.GetHotKeyNames(module.tmenu.hot_keys.command_window)))
|
|
imgui.Spacing()
|
|
|
|
if imgui.BeginChild("Command entries") then
|
|
for v,k in fcommon.spairs(module.tmenu.command.list) do
|
|
if module.tmenu.command.filter:PassFilter(v) and imgui.CollapsingHeader(v) then
|
|
imgui.Spacing()
|
|
if k[2] ~= nil then
|
|
imgui.TextWrapped("Description: " .. k[2])
|
|
end
|
|
|
|
if k[3] == nil then k[3] = "" end
|
|
imgui.TextWrapped("Usage: " .. v .. " " .. k[3])
|
|
|
|
imgui.Separator()
|
|
end
|
|
end
|
|
imgui.EndChild()
|
|
end
|
|
end
|
|
if fcommon.BeginTabItem('Hotkeys') then
|
|
local x,y = fcommon.GetSize(3)
|
|
y = y/1.2
|
|
|
|
fcommon.HotKey("Open/ close cheat menu",module.tmenu.hot_keys.menu_open)
|
|
fcommon.HotKey("Open command window",module.tmenu.hot_keys.command_window)
|
|
|
|
imgui.Dummy(imgui.ImVec2(0,10))
|
|
|
|
fcommon.HotKey("Activate aim skin changer",module.tmenu.hot_keys.asc_key)
|
|
fcommon.HotKey("Take quick screenshot",module.tmenu.hot_keys.quick_screenshot)
|
|
fcommon.HotKey("Toggle quick teleport",module.tmenu.hot_keys.quick_teleport)
|
|
|
|
imgui.Dummy(imgui.ImVec2(0,10))
|
|
|
|
fcommon.HotKey("Enable/ disable camera mode",module.tmenu.hot_keys.camera_mode)
|
|
fcommon.HotKey("Camera mode forward",module.tmenu.hot_keys.camera_mode_forward)
|
|
fcommon.HotKey("Camera mode backward",module.tmenu.hot_keys.camera_mode_backward)
|
|
fcommon.HotKey("Camera mode left",module.tmenu.hot_keys.camera_mode_left)
|
|
fcommon.HotKey("Camera mode right",module.tmenu.hot_keys.camera_mode_right)
|
|
fcommon.HotKey("Camera mode slower movement",module.tmenu.hot_keys.camera_mode_slow)
|
|
fcommon.HotKey("Camera mode faster movement",module.tmenu.hot_keys.camera_mode_fast)
|
|
fcommon.HotKey("Camera mode up (lock on player)",module.tmenu.hot_keys.camera_mode_up)
|
|
fcommon.HotKey("Camera mode down (lock on player)",module.tmenu.hot_keys.camera_mode_down)
|
|
imgui.Dummy(imgui.ImVec2(0,10))
|
|
|
|
imgui.TextWrapped("You can reset these config to default from 'Reset to default' button under 'Config' tab")
|
|
end
|
|
if fcommon.BeginTabItem('Styles') then
|
|
if fstyle.tstyle.status then
|
|
if imgui.Button("Delete style",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
if fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1] == nil then
|
|
printHelpString("No style selected")
|
|
else
|
|
if fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1] == "Default" then
|
|
printHelpString("Can't delete default style")
|
|
else
|
|
fstyle.tstyle.styles_table[(fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1])] = nil
|
|
fstyle.tstyle.list = fstyle.getStyles()
|
|
fstyle.tstyle.array = imgui.new['const char*'][#fstyle.tstyle.list](fstyle.tstyle.list)
|
|
fcommon.SaveJson("styles",fstyle.tstyle.styles_table)
|
|
|
|
for k,v in ipairs(fstyle.tstyle.list) do
|
|
if v == "Default" then
|
|
fstyle.tstyle.selected[0] = k-1
|
|
end
|
|
end
|
|
|
|
if fstyle.tstyle.list[fstyle.tstyle.selected[0]+1] == nil then
|
|
fstyle.tstyle.selected[0] = fstyle.tstyle.selected[0] - 1
|
|
end
|
|
fstyle.applyStyle(imgui.GetStyle(), fstyle.tstyle.list[fstyle.tstyle.selected[0]+1])
|
|
fstyle.tstyle.selected_name = fstyle.tstyle.list[fstyle.tstyle.selected[0]+1]
|
|
printHelpString("Style deleted")
|
|
end
|
|
end
|
|
end
|
|
imgui.SameLine()
|
|
if imgui.Button("Save style",imgui.ImVec2(fcommon.GetSize(2))) then
|
|
fstyle.saveStyles(imgui.GetStyle(), ffi.string(fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1]))
|
|
fstyle.tstyle.list = fstyle.getStyles()
|
|
fstyle.tstyle.array = imgui.new['const char*'][#fstyle.tstyle.list](fstyle.tstyle.list)
|
|
fstyle.applyStyle(imgui.GetStyle(), fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1])
|
|
fstyle.tstyle.selected_name = fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1]
|
|
|
|
printHelpString("Style saved")
|
|
end
|
|
end
|
|
|
|
imgui.Spacing()
|
|
|
|
imgui.InputText('##styleName', fstyle.tstyle.name, ffi.sizeof(fstyle.tstyle.name) - 1)
|
|
imgui.SameLine()
|
|
local vec_size = imgui.GetItemRectSize()
|
|
local text = "Add style"
|
|
vec_size.x = imgui.CalcTextSize(text).x+10
|
|
if imgui.Button(text,vec_size) then
|
|
fstyle.saveStyles(imgui.GetStyle(), ffi.string(fstyle.tstyle.name))
|
|
fstyle.tstyle.list = fstyle.getStyles()
|
|
fstyle.tstyle.array = imgui.new['const char*'][#fstyle.tstyle.list](fstyle.tstyle.list)
|
|
for k,v in ipairs(fstyle.tstyle.list) do
|
|
if v == ffi.string(fstyle.tstyle.name) then
|
|
fstyle.tstyle.selected[0] = k-1
|
|
end
|
|
end
|
|
fstyle.tstyle.selected_name = fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1]
|
|
printHelpString("Style added")
|
|
end
|
|
|
|
if fstyle.tstyle.status then
|
|
|
|
if imgui.Combo('Select style', fstyle.tstyle.selected, fstyle.tstyle.array, #fstyle.tstyle.list) then
|
|
fstyle.applyStyle(imgui.GetStyle(), fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1])
|
|
fstyle.tstyle.selected_name = fstyle.tstyle.list[fstyle.tstyle.selected[0] + 1]
|
|
end
|
|
|
|
fstyle.StyleEditor()
|
|
end
|
|
end
|
|
if fcommon.BeginTabItem('License') then
|
|
imgui.TextWrapped("This program is free software: you can redistribute it and/or modify it under the terms of the \z
|
|
GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or \z
|
|
(at your option) any later version. \n\n\z
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied \z
|
|
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. \n\n\z
|
|
|
|
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n\n\z
|
|
|
|
Copyright (C) 2019-2020 Grinch_ \n")
|
|
end
|
|
if fcommon.BeginTabItem('About') then
|
|
if imgui.Button("Check updates",imgui.ImVec2(fcommon.GetSize(3))) then
|
|
module.CheckUpdates()
|
|
end
|
|
imgui.SameLine()
|
|
if imgui.Button("Discord server",imgui.ImVec2(fcommon.GetSize(3))) then
|
|
os.execute('explorer "https://discord.gg/ZzW7kmf"')
|
|
end
|
|
imgui.SameLine()
|
|
if imgui.Button("GitHub repo",imgui.ImVec2(fcommon.GetSize(3))) then
|
|
os.execute('explorer "https://github.com/user-grinch/Cheat-Menu"')
|
|
end
|
|
imgui.Spacing()
|
|
|
|
if imgui.BeginChild("AboutChild") then
|
|
|
|
imgui.Columns(2,nil,false)
|
|
imgui.Text(string.format("%s v%s",script.this.name,script.this.version))
|
|
imgui.Text(string.format("Build: %d",script.this.version_num))
|
|
|
|
imgui.NextColumn()
|
|
imgui.Text(string.format("Author: %s",script.this.authors[1]))
|
|
imgui.Text(string.format("Imgui: v%s",imgui._VERSION))
|
|
imgui.Columns(1)
|
|
|
|
imgui.TextWrapped("\nPlease provide 'moonloader.log' in case of debugging.")
|
|
imgui.Dummy(imgui.ImVec2(0,10))
|
|
imgui.TextWrapped("Special thanks to,")
|
|
imgui.Columns(2,nil,false)
|
|
|
|
imgui.TextWrapped("Dowglas_")
|
|
imgui.TextWrapped("guru guru")
|
|
imgui.TextWrapped("Israel")
|
|
imgui.TextWrapped("Junior-Djjr")
|
|
|
|
imgui.NextColumn()
|
|
imgui.TextWrapped("randazz0")
|
|
imgui.TextWrapped("Um_Geek")
|
|
imgui.TextWrapped("Modding community")
|
|
imgui.TextWrapped("Rockstar Games")
|
|
imgui.EndChild()
|
|
end
|
|
imgui.Columns(1)
|
|
end
|
|
fcommon.EndTabBar()
|
|
end
|
|
end
|
|
|
|
return module
|