Files
career_retrievedamaged/lua/ge/extensions/career/vehicleRetrieval.lua

125 lines
5.1 KiB
Lua
Raw Normal View History

2025-02-02 19:25:51 +01:00
-- 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/>.
2025-02-02 19:07:50 +01:00
local M = {}
M.dependencies = { 'career_modules_inventory', 'freeroam_facilities', "career_vehicleSaveSystem",
"career_modules_permissions", 'career_modules_valueCalculator' }
2025-02-02 19:07:50 +01:00
2025-03-04 20:31:07 +01:00
local career_modules_inventory_removeVehicleObject
2025-12-11 12:16:55 +01:00
local career_modules_inventory_openMenu
2025-03-04 20:31:07 +01:00
local vehicleObjectsToRemove = {}
2025-02-03 12:07:34 +01:00
local function spawnVehicle(inventoryId, callback)
if career_modules_inventory.getVehicleIdFromInventoryId(inventoryId) then
callback()
else
career_modules_inventory.spawnVehicle(inventoryId, nil, callback)
end
end
2025-03-06 18:09:31 +01:00
local function Retrieve(inventoryId)
career_vehicleSaveSystem.EnqueueVehicleToSave(inventoryId)
if not career_vehicleSaveSystem.SaveVehicle(inventoryId) then
career_vehicleSaveSystem.DequeueVehicleToSave(inventoryId)
end
local vehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(inventoryId, true)
local currentVehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(inventoryId)
career_vehicleSaveSystem.CheckSavedAsync(function()
extensions.core_jobsystem.create(
function(job)
career_vehicleSaveSystem.SetFade(true)
job.sleep(1)
spawnVehicle(inventoryId, function()
career_vehicleSaveSystem.TeleportVehicle(inventoryId, false)
career_vehicleSaveSystem.LoadVehicle(inventoryId, currentVehicleValue < vehicleValue)
end)
end
)
end)
2025-02-02 19:07:50 +01:00
end
local function onComputerAddFunctions(menuData, computerFunctions)
if menuData.computerFacility.functions["vehicleInventory"] then
2025-03-06 18:09:31 +01:00
local favouriteVehicleId = career_modules_inventory.getFavoriteVehicle()
2025-12-11 12:16:55 +01:00
local vehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(favouriteVehicleId, true)
local currentVehicleValue = career_modules_valueCalculator.getInventoryVehicleValue(favouriteVehicleId)
local function_label = "Retrieve Favourite Vehicle"
if currentVehicleValue < vehicleValue then
function_label = function_label .. " (Damaged)"
end
2025-02-02 19:07:50 +01:00
local computerFunctionData = {
id = "retrieve_damaged",
2025-12-11 12:16:55 +01:00
label = function_label,
2025-03-06 18:09:31 +01:00
callback = function() Retrieve(favouriteVehicleId) end,
2025-02-02 19:07:50 +01:00
order = 1
}
2025-03-06 18:09:31 +01:00
2025-03-06 18:10:38 +01:00
local repairPermission = career_modules_permissions.getStatusForTag("vehicleRepair",
{ inventoryId = favouriteVehicleId })
if not repairPermission["allow"] then
computerFunctionData.disabled = true
computerFunctionData.reason = { type = "text", label = "Vehicle is being repaired." }
end
2025-02-02 19:07:50 +01:00
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
2025-03-04 20:31:07 +01:00
local function RemoveVehicleObject(inventoryId)
if career_modules_inventory.getVehicleIdFromInventoryId(inventoryId) then
table.insert(vehicleObjectsToRemove, inventoryId)
career_vehicleSaveSystem.EnqueueVehicleToSave(inventoryId)
career_vehicleSaveSystem.SaveVehicle(inventoryId)
career_vehicleSaveSystem.CheckSavedAsync(function()
career_modules_inventory_removeVehicleObject(inventoryId)
end)
end
2025-03-04 20:31:07 +01:00
end
2025-12-11 12:16:55 +01:00
local function OpenMenu(_chooseButtonsData, header, _buttonsActive)
if _chooseButtonsData then
for _, buttonData in ipairs(_chooseButtonsData) do
if buttonData.buttonText == "Retrieve" then
buttonData.buttonText = "Retrieve"
buttonData.callback = function(inventoryId) Retrieve(inventoryId) end
buttonData.repairRequired = false
end
end
end
career_modules_inventory_openMenu(_chooseButtonsData, header, _buttonsActive)
end
2025-03-04 20:31:07 +01:00
local function onCareerActive()
career_modules_inventory_removeVehicleObject = career_modules_inventory.removeVehicleObject
career_modules_inventory.removeVehicleObject = RemoveVehicleObject
2025-12-11 12:16:55 +01:00
career_modules_inventory_openMenu = career_modules_inventory.openMenu
career_modules_inventory.openMenu = OpenMenu
2025-02-02 19:07:50 +01:00
end
M.onComputerAddFunctions = onComputerAddFunctions
2025-03-04 20:31:07 +01:00
M.onCareerActive = onCareerActive
2025-02-02 19:07:50 +01:00
return M