-- 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 . 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