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

306 lines
13 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.tped =
{
gang =
{
is_exgangwars_installed = false,
index = imgui.new.int(0),
list =
{
"Ballas",
"Grove street families",
"Los santos vagos",
"San fierro rifa",
"Da nang boys",
"Mafia",
"Mountain cloud triad",
"Varrio los aztecas",
"Gang9",
"Gang10",
},
names =
{
["Ballas"] = 0,
["Da nang boys"] = 4,
["Gang9"] = 8,
["Gang10"] = 9,
["Grove street families"] = 1,
["Los santos vagos"] = 2,
["Mafia"] = 5,
["Mountain cloud triad"] = 6,
["San fierro rifa"] = 3,
["Varrio los aztecas"] = 7,
},
wars = imgui.new.bool(fconfig.Get('tped.gang.wars',false)),
},
images = {},
names = fcommon.LoadJson("ped"),
path = tcheatmenu.dir .. "peds\\",
ped_health_display = imgui.new.bool(fconfig.Get('tped.ped_health_display',false)),
selected = nil,
spawned_peds=
{
list = {},
ped_bleed = imgui.new.bool(fconfig.Get('tped.spawned_peds.ped_bleed',false)),
ped_accuracy= imgui.new.int(fconfig.Get('tped.spawned_peds.ped_accuracy',50)),
ped_health = imgui.new.int(fconfig.Get('tped.spawned_peds.ped_health',100)),
ped_type_list = {"Civ male","Civ female","Cop","Ballas","Grove Street Families","Los Santos Vagos",
"San Fierro Rifa","Da Nang Boys","Mafia","Mountain Cloud Triads","Varrio Los Aztecas",
"Gang 9","Medic","Dealer","Criminal","Fireman","Prostitute"},
ped_type_selected = imgui.new.int(fconfig.Get('tped.spawned_peds.ped_type_selected',1)),
ped_weapon_ammo = imgui.new.int(fconfig.Get('tped.spawned_peds.ped_weapon_ammo',99999)),
ped_weapon_selected = fconfig.Get('tped.spawned_peds.ped_weapon_selected',"None"),
ped_weapon_id = imgui.new.int(fconfig.Get('tped.spawned_peds.ped_weapon_id',-1)),
stand_still = imgui.new.bool(fconfig.Get('tped.spawned_peds.stand_still',true)),
},
special = fcommon.LoadJson("ped special"),
}
module.tped.gang.array = imgui.new['const char*'][#module.tped.gang.list](module.tped.gang.list)
if getModuleHandle("ExGangWars.asi") ~= 0 then
module.tped.gang.is_exgangwars_installed = true
end
-- Returns ped name
function module.GetModelName(model)
if module.tped.names[model] then
return module.tped.names[model]
else
return ""
end
end
function module.SpawnPed(model)
if module.tped.names[model] ~= nil then
local ped = nil
if module.tped.special[model] == nil then
model = tonumber(model)
requestModel(model)
loadAllModelsNow()
local x,y,z = getCharCoordinates(PLAYER_PED)
ped = createChar(module.tped.spawned_peds.ped_type_selected[0]+3,model,x,y,z)
markModelAsNoLongerNeeded(model)
module.tped.spawned_peds.list[ped] = tostring(getCharModel(ped))
else
if hasSpecialCharacterLoaded(model) then
unloadSpecialCharacter(model)
end
loadSpecialCharacter(module.tped.special[tostring(model)],1)
loadAllModelsNow()
local x,y,z = getCharCoordinates(PLAYER_PED)
ped = createChar(module.tped.spawned_peds.ped_type_selected[0]+3,290,x,y,z) -- CIVMALE
module.tped.spawned_peds.list[ped] = tostring(getCharModel(ped))
markModelAsNoLongerNeeded(module.tped.special[tostring(model)])
end
if ped ~= nil then
if not module.tped.spawned_peds.stand_still[0] then
markCharAsNoLongerNeeded(ped)
end
setCharHealth(ped,module.tped.spawned_peds.ped_health[0])
setCharBleeding(ped,module.tped.spawned_peds.ped_bleed[0])
setCharAccuracy(ped,module.tped.spawned_peds.ped_accuracy[0])
if module.tped.spawned_peds.ped_weapon_id ~= -1 then
local model = getWeapontypeModel(module.tped.spawned_peds.ped_weapon_id)
if isModelAvailable(model) then
requestModel(model)
loadAllModelsNow()
giveWeaponToChar(ped,module.tped.spawned_peds.ped_weapon_id,module.tped.spawned_peds.ped_weapon_ammo[0])
end
end
printHelpString("Ped ~g~Spawned")
end
end
end
function module.PedHealthDisplay()
while module.tped.ped_health_display[0] do
local result, char = getCharPlayerIsTargeting(PLAYER_HANDLE)
if result then
local health = getCharHealth(char)
local x,y,z = getCharCoordinates(char)
local screenX,screenY = convert3DCoordsToScreen(x,y,z+1.0)
mad.draw_text(tostring(health),screenX,screenY,1,0.8,0.4,0,false,false,false,255,255,255,255,false)
end
wait(0)
end
end
function module.RemoveAllSpawnedPeds()
for ped,model in pairs(module.tped.spawned_peds.list) do
removeCharElegantly(ped)
module.tped.spawned_peds.list[ped] = nil
end
end
function GetLargestGangInZone()
local gang = 0
local density = 0
for title,id in pairs(module.tped.gang.names) do
local x,y,z = getCharCoordinates(PLAYER_PED)
local gang_desity = getZoneGangStrength(getNameOfInfoZone(x,y,z),id)
if gang_desity > density then
density = gang_desity
gang = id
end
end
return gang
end
function SetSelectedWeapon(weapon)
module.tped.spawned_peds.ped_weapon_id = weapon
module.tped.spawned_peds.ped_weapon_selected = fweapon.GetModelName(weapon)
end
function module.PedMain()
if fcommon.BeginTabBar('PedBar') then
if fcommon.BeginTabItem('Checkboxes') then
imgui.Columns(2,nil,false)
if fcommon.CheckBoxVar("Display target health",module.tped.ped_health_display) then
fcommon.CreateThread(module.PedHealthDisplay)
end
fcommon.CheckBoxValue("Elvis everywhere",0x969157)
fcommon.CheckBoxValue("Everyone is armed",0x969140)
fcommon.CheckBoxValue("Gangs control streets",0x96915B)
fcommon.CheckBoxValue("Gangs everywhere",0x96915A)
if fcommon.CheckBoxVar("Gang wars",module.tped.gang.wars,nil,
function()
if imgui.Button("Start gang war",imgui.ImVec2(fcommon.GetSize(2))) then
if GetLargestGangInZone() == 1 then
callFunction(0x444300,0,0) -- defensive gang war
else
callFunction(0x446050,0,0) -- offensive gang war
end
setGangWarsActive(true)
end
imgui.SameLine()
if imgui.Button("End gang war",imgui.ImVec2(fcommon.GetSize(2))) then
callFunction(0x4464C0,0,0)
setGangWarsActive(true)
end
imgui.Dummy(imgui.ImVec2(0,20))
imgui.TextWrapped("Gang zone density:")
imgui.Spacing()
for title,id in pairs(module.tped.gang.names) do
local x,y,z = getCharCoordinates(PLAYER_PED)
local density = imgui.new.int(getZoneGangStrength(getNameOfInfoZone(x,y,z),id))
imgui.PushItemWidth(imgui.GetWindowWidth()/2)
if imgui.SliderInt(title,density,0,255) then
setZoneGangStrength(getNameOfInfoZone(x,y,z),id,density[0])
clearSpecificZonesToTriggerGangWar()
end
end
imgui.PopItemWidth()
imgui.Dummy(imgui.ImVec2(0,20))
if not module.tped.gang.is_exgangwars_installed then
imgui.TextWrapped("You'll need ExGangWars plugin to display some turf colors")
imgui.Spacing()
if imgui.Button("Download ExGangWars",imgui.ImVec2(fcommon.GetSize(1))) then
os.execute('explorer "https://gtaforums.com/topic/682194-extended-gang-wars/"')
end
end
end) then
setGangWarsActive(module.tped.gang.wars[0])
end
imgui.NextColumn()
fcommon.CheckBoxValue("No road peds",0x8D2538,nil,0,25)
fcommon.CheckBoxValue("Peds mayhem",0x96913E)
fcommon.CheckBoxValue("Peds attack with rockets",0x969158)
fcommon.CheckBoxValue("Peds riot",0x969175)
fcommon.CheckBoxValue("Slut magnet",0x96915D)
imgui.Columns(1)
imgui.Spacing()
end
if fcommon.BeginTabItem('Menus') then
fcommon.UpdateAddress({name = 'Pedestrian density multiplier',address = 0x8D2530,size = 4,min = 0,max = 10, default = 1,is_float = true})
fcommon.DropDownMenu("Recruit anyone",function()
fcommon.RadioButtonAddress("Select Weapon",{"9mm","AK47","Rockets"},{0x96917C,0x96917D,0x96917E})
end)
end
if fcommon.BeginTabItem('Spawn') then
if imgui.Button("Remove all spawned peds",imgui.ImVec2(fcommon.GetSize(1))) then
module.RemoveAllSpawnedPeds()
printHelpString("All peds removed")
end
imgui.Spacing()
if fcommon.BeginTabBar("SpawnPedBar") then
if fcommon.BeginTabItem('Spawner') then
fcommon.DrawEntries(fconst.IDENTIFIER.PED,fconst.DRAW_TYPE.IMAGE,module.SpawnPed,nil,module.GetModelName,module.tped.images,fconst.PED.IMAGE_HEIGHT,fconst.PED.IMAGE_WIDTH)
end
if fcommon.BeginTabItem('Config') then
imgui.Columns(2,nil,false)
fcommon.CheckBoxVar("Don't move",module.tped.spawned_peds.stand_still)
imgui.NextColumn()
fcommon.CheckBoxVar("Ped bleed",module.tped.spawned_peds.ped_bleed)
imgui.Columns(1)
imgui.Spacing()
imgui.Text("Selected weapon: " .. module.tped.spawned_peds.ped_weapon_selected)
fcommon.ConfigPanel("Select weapon",function()
if imgui.Button("Clear weapon selection",imgui.ImVec2(fcommon.GetSize(1))) then
module.tped.spawned_peds.ped_weapon_id = -1
module.tped.spawned_peds.ped_weapon_selected = "None"
end
imgui.Spacing()
imgui.InputInt("Weapon ammo", module.tped.spawned_peds.ped_weapon_ammo)
imgui.Spacing()
imgui.Text("Selected weapon: " .. module.tped.spawned_peds.ped_weapon_selected)
fcommon.DrawEntries(fconst.IDENTIFIER.WEAPON,fconst.DRAW_TYPE.IMAGE,SetSelectedWeapon,nil,fweapon.GetModelName,fweapon.tweapon.images,fconst.WEAPON.IMAGE_HEIGHT,fconst.WEAPON.IMAGE_WIDTH,function(a) return a ~= "Jetpack"end )
end)
imgui.Spacing()
imgui.SliderInt("Accuracy", module.tped.spawned_peds.ped_accuracy, 0.0, 100.0)
if imgui.InputInt("Health", module.tped.spawned_peds.ped_health) then
module.tped.spawned_peds.ped_health[0] = module.tped.spawned_peds.ped_health[0] < 0 and 0 or module.tped.spawned_peds.ped_health[0]
module.tped.spawned_peds.ped_health[0] = module.tped.spawned_peds.ped_health[0] > 1000 and 1000 or module.tped.spawned_peds.ped_health[0]
end
fcommon.DropDownListNumber("Ped type",module.tped.spawned_peds.ped_type_list,module.tped.spawned_peds.ped_type_selected)
end
fcommon.EndTabBar()
end
end
fcommon.EndTabBar()
end
end
return module