Fix Spawning and Better Saving

This commit is contained in:
snoutie 2025-02-03 12:07:34 +01:00
parent 3aaaa3a15f
commit 9517395e1e

View File

@ -18,49 +18,79 @@ local M = {}
M.dependencies = { 'career_career', 'career_modules_computer', 'career_modules_inventory', 'career_modules_payment', M.dependencies = { 'career_career', 'career_modules_computer', 'career_modules_inventory', 'career_modules_payment',
'career_modules_playerAttributes' } 'career_modules_playerAttributes' }
local function tprint(tbl, indent) local function getVehicleSavesFolder(savePath)
if not indent then indent = 0 end return savePath .. "/career/_vehicle_saves"
local toprint = string.rep(" ", indent) .. "{\r\n" end
indent = indent + 2
for k, v in pairs(tbl) do local function getInventoryIdFolder(vehicleSavesPath, inventoryId)
toprint = toprint .. string.rep(" ", indent) return vehicleSavesPath .. "/" .. inventoryId
if (type(k) == "number") then end
toprint = toprint .. "[" .. k .. "] = "
elseif (type(k) == "string") then local function getInventoryIdFile(inventoryIdPath)
toprint = toprint .. k .. "= " return inventoryIdPath .. "/save.json"
end end
if (type(v) == "number") then
toprint = toprint .. v .. ",\r\n" local function createFolderIfNeeded(path)
elseif (type(v) == "string") then if not FS:directoryExists(path) then
toprint = toprint .. "\"" .. v .. "\",\r\n" FS:directoryCreate(path)
elseif (type(v) == "table") then end
toprint = toprint .. tprint(v, indent + 2) .. ",\r\n" end
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n" local function prepareFolders(inventoryId)
end local _, savePath = career_saveSystem.getCurrentSaveSlot()
local vehicleSavesFolder = getVehicleSavesFolder(savePath)
createFolderIfNeeded(vehicleSavesFolder)
local inventoryIdFolder = getInventoryIdFolder(vehicleSavesFolder, inventoryId)
createFolderIfNeeded(inventoryIdFolder)
return getInventoryIdFile(inventoryIdFolder)
end
local function onSave(inventoryId)
local fileName = prepareFolders(inventoryId)
local vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId)
if vehicleId then
local object = be:getObjectByID(vehicleId)
object:queueLuaCommand('beamstate.save("' .. fileName .. '")')
end
end
local function onLoad(inventoryId)
local fileName = prepareFolders(inventoryId)
local vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId)
if vehicleId then
local object = be:getObjectByID(vehicleId)
object:queueLuaCommand('beamstate.load("' .. fileName .. '")')
end
end
local function spawnVehicle(inventoryId, callback)
if career_modules_inventory.getVehicleIdFromInventoryId(inventoryId) then
callback()
else
career_modules_inventory.spawnVehicle(inventoryId, nil, callback)
end end
toprint = toprint .. string.rep(" ", indent - 2) .. "}"
return toprint
end end
local function retrieve_favourite() local function retrieve_favourite()
local fav_veh_id = career_modules_inventory.getFavoriteVehicle() 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( extensions.core_jobsystem.create(
function(job) function(job)
job.sleep(0.2) onSave(fav_veh_id)
local veh = career_modules_inventory.spawnVehicle(fav_veh_id, 2) job.sleep(1)
local vehh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(fav_veh_id)) spawnVehicle(fav_veh_id, function()
local location = { pos = vehh:getPosition(), rot = quat(0, 0, 1, 0) * quat(vehh:getRefNodeRotation()) } local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(fav_veh_id))
local garage = career_modules_inventory.getClosestGarage(location.pos) local location = { pos = veh:getPosition(), rot = quat(0, 0, 1, 0) * quat(veh:getRefNodeRotation()) }
freeroam_facilities.teleportToGarage(garage.id, vehh, false) local garage = career_modules_inventory.getClosestGarage(location.pos)
veh:queueLuaCommand("beamstate.load()")
onLoad(fav_veh_id)
job.sleep(1)
freeroam_facilities.teleportToGarage(garage.id, veh, false)
end)
end end
) )
end end
@ -84,10 +114,7 @@ end
local function onSaveCurrentSaveSlot(currentSavePath, oldSaveDate, vehiclesThumbnailUpdate) local function onSaveCurrentSaveSlot(currentSavePath, oldSaveDate, vehiclesThumbnailUpdate)
local vs = career_modules_inventory.getVehicles() local vs = career_modules_inventory.getVehicles()
for id, _ in pairs(vs) do for id, _ in pairs(vs) do
local vid = career_modules_inventory.getVehicleIdFromInventoryId(id) onSave(id)
local veh = be:getObjectByID(vid)
veh:queueLuaCommand("beamstate.save()")
end end
end end