Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 50ef5ae23d | |||
| 8a71e9b816 | |||
| 0423e8c03d | |||
| 559135b292 | |||
| 5ca5ce8bac |
20
.gitea/workflows/package.yml
Normal file
20
.gitea/workflows/package.yml
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Package BeamNG.drive mod
|
||||
run-name: Package ${{ github.event.repository.name }}.zip for release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
Build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Compress to zip
|
||||
run: zip -r ${{ github.event.repository.name }}.zip *
|
||||
- name: Release
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
files: ${{ github.event.repository.name }}.zip
|
||||
1466
lua/ge/extensions/career/modules/inventory.lua
Normal file
1466
lua/ge/extensions/career/modules/inventory.lua
Normal file
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@ M.dependencies = { 'career_modules_inventory', 'freeroam_facilities', "career_ve
|
||||
"career_modules_permissions", 'career_modules_valueCalculator' }
|
||||
|
||||
local career_modules_inventory_removeVehicleObject
|
||||
local career_modules_inventory_openMenu
|
||||
local vehicleObjectsToRemove = {}
|
||||
|
||||
local function spawnVehicle(inventoryId, callback)
|
||||
@@ -41,17 +42,11 @@ local function Retrieve(inventoryId)
|
||||
career_vehicleSaveSystem.CheckSavedAsync(function()
|
||||
extensions.core_jobsystem.create(
|
||||
function(job)
|
||||
spawnVehicle(inventoryId, function()
|
||||
local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
|
||||
local location = { pos = veh:getPosition(), rot = quat(0, 0, 1, 0) * quat(veh:getRefNodeRotation()) }
|
||||
local garage = career_modules_inventory.getClosestGarage(location.pos)
|
||||
career_vehicleSaveSystem.SetFade(true)
|
||||
job.sleep(1)
|
||||
if currentVehicleValue < vehicleValue then
|
||||
career_vehicleSaveSystem.LoadVehicle(inventoryId)
|
||||
else
|
||||
log('I', 'retrieval', 'retrieving vehicle ' .. inventoryId .. " in an undamaged state")
|
||||
end
|
||||
freeroam_facilities.teleportToGarage(garage.id, veh, false)
|
||||
spawnVehicle(inventoryId, function()
|
||||
career_vehicleSaveSystem.TeleportVehicle(inventoryId, false)
|
||||
career_vehicleSaveSystem.LoadVehicle(inventoryId, currentVehicleValue < vehicleValue)
|
||||
end)
|
||||
end
|
||||
)
|
||||
@@ -62,9 +57,16 @@ local function onComputerAddFunctions(menuData, computerFunctions)
|
||||
if menuData.computerFacility.functions["vehicleInventory"] then
|
||||
local favouriteVehicleId = career_modules_inventory.getFavoriteVehicle()
|
||||
|
||||
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
|
||||
|
||||
local computerFunctionData = {
|
||||
id = "retrieve_damaged",
|
||||
label = "Retrieve Favourite Damaged",
|
||||
label = function_label,
|
||||
callback = function() Retrieve(favouriteVehicleId) end,
|
||||
order = 1
|
||||
}
|
||||
@@ -86,17 +88,34 @@ local function onComputerAddFunctions(menuData, computerFunctions)
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
local function onCareerActive()
|
||||
career_modules_inventory_removeVehicleObject = career_modules_inventory.removeVehicleObject
|
||||
career_modules_inventory.removeVehicleObject = RemoveVehicleObject
|
||||
career_modules_inventory_openMenu = career_modules_inventory.openMenu
|
||||
career_modules_inventory.openMenu = OpenMenu
|
||||
end
|
||||
|
||||
M.onComputerAddFunctions = onComputerAddFunctions
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
|
||||
local M = {}
|
||||
|
||||
M.dependencies = { 'career_career', 'career_saveSystem', 'career_modules_inventory' }
|
||||
M.dependencies = { 'freeroam_facilities', 'ui_fadeScreen', 'career_career', 'career_saveSystem',
|
||||
'career_modules_inventory' }
|
||||
|
||||
local extensionName = "career_vehicleSaveSystem"
|
||||
local vehicleSaves_temp = "/temp/career/vehicle_saves"
|
||||
@@ -75,6 +76,42 @@ local function DequeueVehicleToSave(inventoryId)
|
||||
M.queuedVehicleSaves[inventoryId] = nil
|
||||
end
|
||||
|
||||
local function TeleportVehicle(inventoryId, delayed, callback)
|
||||
log("I", "loading", "teleporting vehicle " .. inventoryId)
|
||||
|
||||
local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
|
||||
local location = { pos = veh:getPosition(), rot = quat(0, 0, 1, 0) * quat(veh:getRefNodeRotation()) }
|
||||
local garage = career_modules_inventory.getClosestGarage(location.pos)
|
||||
|
||||
extensions.core_jobsystem.create(function(job)
|
||||
if delayed then
|
||||
job.sleep(1)
|
||||
end
|
||||
freeroam_facilities.teleportToGarage(garage.id, veh, false)
|
||||
|
||||
if callback then
|
||||
callback()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local fadeInProgress = false
|
||||
local function SetFade(fade)
|
||||
if fadeInProgress and fade then
|
||||
return
|
||||
end
|
||||
if not fadeInProgress and not fade then
|
||||
return
|
||||
end
|
||||
if fade then
|
||||
ui_fadeScreen.start(0.5)
|
||||
fadeInProgress = true
|
||||
else
|
||||
ui_fadeScreen.stop(0.5)
|
||||
fadeInProgress = false
|
||||
end
|
||||
end
|
||||
|
||||
local function VehiclesSaved()
|
||||
if next(M.queuedVehicleSaves) == nil then
|
||||
log('I', 'saving', 'all vehicles saved')
|
||||
@@ -117,17 +154,43 @@ local function SaveVehicle(inventoryId)
|
||||
end
|
||||
end
|
||||
|
||||
local function LoadVehicle(inventoryId)
|
||||
local function FinishedLoading(inventoryId)
|
||||
M.SetFade(false)
|
||||
local veh = be:getObjectByID(career_modules_inventory.getVehicleIdFromInventoryId(inventoryId))
|
||||
local pos, _ = freeroam_facilities.getGaragePosRot(career_modules_inventory.getClosestGarage(), veh)
|
||||
career_modules_playerDriving.showPosition(pos)
|
||||
end
|
||||
|
||||
local function LoadVehicle(inventoryId, loadDamaged)
|
||||
local saveFile = GetVehicleSaveFile(vehicleSaves_temp, inventoryId)
|
||||
|
||||
local vehicleId = career_modules_inventory.getVehicleIdFromInventoryId(inventoryId)
|
||||
if vehicleId then
|
||||
log("I", "loading", "loading vehicle from " .. saveFile)
|
||||
if loadDamaged then
|
||||
local object = be:getObjectByID(vehicleId)
|
||||
object:queueLuaCommand("beamstate.load(\"" ..
|
||||
saveFile .. "\");" ..
|
||||
"for key, value in pairs(v.data.controller) do if value['fileName'] == 'advancedCouplerControl' then local c = controller.getController(value['name']) if c['reset'] then c['reset']() end end end"
|
||||
object:queueLuaCommand(
|
||||
"beamstate.load(\"" .. saveFile .. "\"); " ..
|
||||
"for key, value in pairs(v.data.controller) do " ..
|
||||
" if value['fileName'] == 'advancedCouplerControl' then " ..
|
||||
" local c = controller.getController(value['name']) " ..
|
||||
" if c['reset'] then " ..
|
||||
" c['reset']() " ..
|
||||
" end " ..
|
||||
" end " ..
|
||||
" end; " ..
|
||||
" obj:queueGameEngineLua(' " ..
|
||||
" career_vehicleSaveSystem.TeleportVehicle( " ..
|
||||
" " .. inventoryId .. ", " ..
|
||||
" true, " ..
|
||||
" function() " ..
|
||||
" career_vehicleSaveSystem.FinishedLoading(" .. inventoryId .. ")" ..
|
||||
" end) " ..
|
||||
" ');"
|
||||
)
|
||||
else
|
||||
FinishedLoading(inventoryId)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -167,6 +230,11 @@ M.queuedVehicleSaves = {}
|
||||
|
||||
M.SaveVehicle = SaveVehicle
|
||||
M.LoadVehicle = LoadVehicle
|
||||
M.FinishedLoading = FinishedLoading
|
||||
|
||||
M.TeleportVehicle = TeleportVehicle
|
||||
|
||||
M.SetFade = SetFade
|
||||
|
||||
M.CheckSavedAsync = CheckSavedAsync
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ M.dependencies = { 'career_career' }
|
||||
|
||||
extensions.load("career_vehicleSaveSystem")
|
||||
extensions.load("career_vehicleRetrieval")
|
||||
extensions.load("career_modules_inventory")
|
||||
|
||||
M.onInit = function()
|
||||
setExtensionUnloadMode(M, "manual")
|
||||
|
||||
Reference in New Issue
Block a user