career_retrievedamaged/lua/ge/extensions/career/retrievedamaged.lua
2025-02-02 19:25:51 +01:00

98 lines
3.8 KiB
Lua

-- Copyright (C) 2025 snoutie
-- Authors: snoutie (copyright@achtarmig.org)
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU Affero 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 Affero General Public License for more details.
-- You should have received a copy of the GNU Affero General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
local M = {}
M.dependencies = { 'career_career', 'career_modules_computer', 'career_modules_inventory', 'career_modules_payment',
'career_modules_playerAttributes' }
local function tprint(tbl, indent)
if not indent then indent = 0 end
local toprint = string.rep(" ", indent) .. "{\r\n"
indent = indent + 2
for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent)
if (type(k) == "number") then
toprint = toprint .. "[" .. k .. "] = "
elseif (type(k) == "string") then
toprint = toprint .. k .. "= "
end
if (type(v) == "number") then
toprint = toprint .. v .. ",\r\n"
elseif (type(v) == "string") then
toprint = toprint .. "\"" .. v .. "\",\r\n"
elseif (type(v) == "table") then
toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
end
end
toprint = toprint .. string.rep(" ", indent - 2) .. "}"
return toprint
end
local function retrieve_favourite()
local fav_veh_id = career_modules_inventory.getFavoriteVehicle()
local vid = career_modules_inventory.getVehicleIdFromInventoryId(fav_veh_id)
if vid then
local old_veh = be:getObjectByID(vid)
old_veh:queueLuaCommand("beamstate.save()")
end
extensions.core_jobsystem.create(
function(job)
job.sleep(0.2)
local veh = career_modules_inventory.spawnVehicle(fav_veh_id, 2)
local vehh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(fav_veh_id))
local location = { pos = vehh:getPosition(), rot = quat(0, 0, 1, 0) * quat(vehh:getRefNodeRotation()) }
local garage = career_modules_inventory.getClosestGarage(location.pos)
freeroam_facilities.teleportToGarage(garage.id, vehh, false)
veh:queueLuaCommand("beamstate.load()")
end
)
end
local function onComputerAddFunctions(menuData, computerFunctions)
if menuData.computerFacility.functions["vehicleInventory"] then
local computerFunctionData = {
id = "retrieve_damaged",
label = "Retrieve Favourite Damaged",
callback = retrieve_favourite,
order = 1
}
if menuData.tutorialPartShoppingActive or menuData.tutorialTuningActive then
computerFunctionData.disabled = true
computerFunctionData.reason = career_modules_computer.reasons.tutorialActive
end
computerFunctions.general[computerFunctionData.id] = computerFunctionData
end
end
local function onSaveCurrentSaveSlot(currentSavePath, oldSaveDate, vehiclesThumbnailUpdate)
local vs = career_modules_inventory.getVehicles()
for id, _ in pairs(vs) do
local vid = career_modules_inventory.getVehicleIdFromInventoryId(id)
local veh = be:getObjectByID(vid)
veh:queueLuaCommand("beamstate.save()")
end
end
M.onSaveCurrentSaveSlot = onSaveCurrentSaveSlot
M.onComputerAddFunctions = onComputerAddFunctions
return M