CheatMenuSA/moonloader/lib/cheat-menu/modules/animation.lua
2020-12-03 03:18:34 +06:00

166 lines
6.8 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.tanimation =
{
fighting =
{
selected = imgui.new.int(fconfig.Get('tanimation.fighting.selected',1)),
names = {"Default","Boxing","Kung fu","Kick Boxing","Punch Kick"},
},
filter = imgui.ImGuiTextFilter(),
ifp_name = imgui.new.char[20](),
list = fcommon.LoadJson("animation"),
loop = imgui.new.bool(fconfig.Get('tanimation.loop',false)),
name = imgui.new.char[20](),
ped = imgui.new.bool(fconfig.Get('tanimation.ped',false)),
secondary = imgui.new.bool(fconfig.Get('tanimation.secondary',false)),
walking =
{
selected = imgui.new.int(fconfig.Get('tanimation.walking.selected',1)),
names = {"default","man","shuffle","oldman","gang1","gang2","oldfatman","fatman","jogger","drunkman","blindman","swat","woman","shopping","busywoman","sexywoman","pro","oldwoman","fatwoman","jogwoman","oldfatwoman","skate"},
},
}
function PlayAnimation(file,animation)
if module.tanimation.ped[0] == true then
if doesCharExist(fped.tped.selected) then
char = fped.tped.selected
else
printHelpString("~r~No~w~ ped selected")
return
end
else
char = PLAYER_PED
end
if file ~= "PED" then -- don't remove if animation is from ped.ifp
requestAnimation(file)
loadAllModelsNow()
end
if module.tanimation.secondary[0] == true then
taskPlayAnimSecondary(char,animation,file,4.0,module.tanimation.loop[0],0,0,0,-1)
else
taskPlayAnim(char,animation,file,4.0,module.tanimation.loop[0],0,0,0,-1)
end
fcommon.CheatActivated()
if file ~= "PED" then -- don't remove if animation is from ped.ifp
removeAnimation(file)
end
end
-- Main function
function module.AnimationMain()
imgui.Spacing()
if imgui.Button("Stop animation",imgui.ImVec2(fcommon.GetSize(1))) then
local char = nil
if module.tanimation.ped[0] == true then
if fped.tped.selected ~= nil then
char = fped.tped.selected
else
printHelpString("~r~No~w~ ped selected")
return
end
else
char = PLAYER_PED
end
clearCharTasks(char)
fcommon.CheatActivated()
end
imgui.Spacing()
-- Checkboxes
imgui.Columns(3,nil,false)
fcommon.CheckBoxVar("Loop##Animation",module.tanimation.loop)
imgui.NextColumn()
fcommon.CheckBoxVar("Ped##Animation",module.tanimation.ped,"Play animation on ped.Aim with a gun to select.")
imgui.NextColumn()
fcommon.CheckBoxVar("Secondary##Animation",module.tanimation.secondary)
imgui.Columns(1)
if fcommon.BeginTabBar('Animation') then
if fcommon.BeginTabItem('Search') then
fcommon.DrawEntries(fconst.IDENTIFIER.ANIMATION,fconst.DRAW_TYPE.TEXT,function(anim,file)
PlayAnimation(file,anim)
end,
function(text,category)
if imgui.MenuItemBool("Remove animation") then
module.tanimation.list[category][text] = nil
local bool = false
for k,v in pairs(module.tanimation.list[category]) do
bool = true
end
if not bool then
module.tanimation.list[category] = nil
end
printHelpString("Animation ~r~removed")
end
end,function(a) return a end,module.tanimation.list)
end
if fcommon.BeginTabItem('Misc') then
if fcommon.DropDownListNumber("Fighting",module.tanimation.fighting.names,module.tanimation.fighting.selected) then
giveMeleeAttackToChar(PLAYER_PED,module.tanimation.fighting.selected[0]+3,6)
fcommon.CheatActivated()
end
if fcommon.DropDownListNumber("Walking",module.tanimation.walking.names,module.tanimation.walking.selected) then
if module.tanimation.walking.names[module.tanimation.walking.selected[0]] == "default" then
writeMemory(0x609A4E,4,0x4D48689,false)
writeMemory(0x609A52,2,0,false)
else
writeMemory(0x609A4E,4,-0x6F6F6F70,false)
writeMemory(0x609A52,2,0x9090,false)
requestAnimation(module.tanimation.walking.names[module.tanimation.walking.selected[0]])
loadAllModelsNow()
setAnimGroupForChar(PLAYER_PED,module.tanimation.walking.names[module.tanimation.walking.selected[0]])
removeAnimation(module.tanimation.walking.names[module.tanimation.walking.selected[0]])
end
fcommon.CheatActivated()
end
end
if fcommon.BeginTabItem('Custom') then
imgui.InputTextWithHint("File","ped",module.tanimation.ifp_name,ffi.sizeof(module.tanimation.ifp_name))
imgui.InputTextWithHint("Animation##input","cower",module.tanimation.name,ffi.sizeof(module.tanimation.name))
imgui.Spacing()
if imgui.Button("Add animation",imgui.ImVec2(fcommon.GetSize(1))) then
if ffi.string(module.tanimation.ifp_name) == "" then
printHelpString("No file name found")
else
if ffi.string(module.tanimation.name) == "" then
printHelpString("No animation name found")
else
if module.tanimation.list[ffi.string(module.tanimation.ifp_name)] == nil then
module.tanimation.list[ffi.string(module.tanimation.ifp_name)] = {}
end
module.tanimation.list[ffi.string(module.tanimation.ifp_name)][ffi.string(module.tanimation.name)] = ffi.string(module.tanimation.name)
printHelpString("Animation ~g~added")
end
end
end
end
fcommon.EndTabBar()
end
end
return module