mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
WH
This commit is contained in:
parent
d87cb41b75
commit
e17b5356dd
@ -12,6 +12,7 @@
|
||||
-- * Strategic components such as capturing, defending and destroying warehouses and their associated infrastructure.
|
||||
-- * Intelligent spawning of aircraft on airports (only if enough parking spots are available).
|
||||
-- * Possibility to hook into events and customize actions.
|
||||
-- * Persistance of assets. Warehouse assets can be saved and loaded from file.
|
||||
-- * Can be easily interfaced to other MOOSE classes.
|
||||
--
|
||||
-- ===
|
||||
@ -675,6 +676,48 @@
|
||||
-- Mission designers can capture the events with OnAfterEvent functions, e.g. @{#WAREHOUSE.OnAfterDelivered} or @{#WAREHOUSE.OnAfterAirbaseCaptured}.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- # Persistance of Assets
|
||||
--
|
||||
-- Assets in stock of a warehouse can be saved to a file on the hard drive and then loaded from the file at a later point. This enables to restart the mission
|
||||
-- and restore the warehouse stock.
|
||||
--
|
||||
-- ## Prerequisite
|
||||
--
|
||||
-- **Important** By default, DCS does not allow for writing data to files. Therefore, one first has to comment out the line "blblba" in the the file "blabla"
|
||||
--
|
||||
-- ## Save Assets
|
||||
--
|
||||
-- Saving asset data to file is achieved by the @{WAREHOUSE.Save}(*path*, *filename*) function. The parameter *path* specifies the path on the file system where the
|
||||
-- warehouse data is saved. If you do not specify a path, the file is saved your the DCS installation root directory.
|
||||
-- The parameter *filename* is optional and defines the name of the saved file. By default this is automatically created from the warehouse id and name, for example
|
||||
-- "Warehouse-1234_Batumi.txt".
|
||||
--
|
||||
-- warehouseBatumi:Save("D:\\My Warehouse Data\\")
|
||||
--
|
||||
-- This will save all asset data to as "D:\My Warehouse Data\Warehouse-1234_Batumi.txt".
|
||||
--
|
||||
-- ## Load Assets
|
||||
--
|
||||
-- Loading assets data from file is achieved by the @{WAREHOUSE.Load}(*path*, *filename*) function. The parameter *path* specifies the path on the file system where the
|
||||
-- warehouse data is loaded from. If you do not specify a path, the file is loaded from your the DCS installation root directory.
|
||||
-- The parameter *filename* is optional and defines the name of the file to load. By default this is automatically generated from the warehouse id and name, for example
|
||||
-- "Warehouse-1234_Batumi.txt".
|
||||
--
|
||||
-- Note that the warehouse **must not be started** and in the *Running* state in order to load the assets. In other words, loading should happen after the
|
||||
-- @{#WAREHOUSE.New} command is specified in the code but before the @{#WAREHOUSE.Start} command is given.
|
||||
--
|
||||
-- Loading the assets is done by
|
||||
--
|
||||
-- warehouseBatumi:New(STATIC:FindByName("Warehouse Batumi"))
|
||||
-- warehouseBatumi:Load("D:\\My Warehouse Data\\")
|
||||
-- warehouseBatumi:Start()
|
||||
--
|
||||
-- This sequence loads all assets from file. If a warehouse was captured in the last mission, it also respawns the static warehouse structure with the right coaliton.
|
||||
-- However, it due to DCS limitations it is not possible to set the airbase coalition. This has to be done manually in the mission editor. Or alternatively, one could
|
||||
-- spawn some ground units via a self request and let them capture the airbase.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- # Examples
|
||||
--
|
||||
@ -4692,8 +4735,11 @@ function WAREHOUSE:onafterSave(From, Event, To, path, filename)
|
||||
MESSAGE:New(text,30):ToAllIf(self.Debug or self.Report)
|
||||
self:I(self.wid..text)
|
||||
|
||||
-- Loop over all assets in stock.
|
||||
local warehouseassets=""
|
||||
warehouseassets=warehouseassets..string.format("coalition=%d\n", self:GetCoalition())
|
||||
warehouseassets=warehouseassets..string.format("country=$d\n", self:GetCountry())
|
||||
|
||||
-- Loop over all assets in stock.
|
||||
for _,_asset in pairs(self.stock) do
|
||||
local asset=_asset -- #WAREHOUSE.Assetitem
|
||||
|
||||
@ -4759,6 +4805,10 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
-- Split by line break.
|
||||
local assetdata=UTILS.Split(data,"\n")
|
||||
|
||||
-- Coalition and coutrny.
|
||||
local Coalition
|
||||
local Country
|
||||
|
||||
-- Loop over asset lines.
|
||||
local assets={}
|
||||
for _,asset in pairs(assetdata) do
|
||||
@ -4768,21 +4818,33 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
|
||||
local asset={}
|
||||
for _,descriptor in pairs(descriptors) do
|
||||
|
||||
local keyval=UTILS.Split(descriptor,"=")
|
||||
|
||||
if #keyval==2 then
|
||||
local key=keyval[1]
|
||||
local val=keyval[2]
|
||||
|
||||
if keyval[1]=="coalition" then
|
||||
-- Get coalition side.
|
||||
Coalition=keyval[2]
|
||||
elseif keyval[1]=="country" then
|
||||
-- Get country id.
|
||||
Country=keyval[2]
|
||||
elseif #keyval==2 then
|
||||
|
||||
-- Livery or skill could be "nil".
|
||||
if val=="nil" then
|
||||
val=nil
|
||||
end
|
||||
|
||||
-- Convert string to number where necessary.
|
||||
if key=="cargobay" or key=="weight" or key=="loadradius" then
|
||||
asset[key]=tonumber(val)
|
||||
else
|
||||
asset[key]=val
|
||||
local key=keyval[1]
|
||||
local val=keyval[2]
|
||||
|
||||
-- Livery or skill could be "nil".
|
||||
if val=="nil" then
|
||||
val=nil
|
||||
end
|
||||
|
||||
-- Convert string to number where necessary.
|
||||
if key=="cargobay" or key=="weight" or key=="loadradius" then
|
||||
asset[key]=tonumber(val)
|
||||
else
|
||||
asset[key]=val
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@ -4792,6 +4854,11 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
table.insert(assets, asset)
|
||||
end
|
||||
|
||||
-- Respawn warehouse with prev coalition if necessary.
|
||||
if Coalition~=self:GetCoalition() then
|
||||
self:Captured(Coalition, Country)
|
||||
end
|
||||
|
||||
for _,_asset in pairs(assets) do
|
||||
local asset=_asset --#WAREHOUSE.Assetitem
|
||||
|
||||
@ -4799,11 +4866,10 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
if group then
|
||||
self:AddAsset(group, 1, asset.attribute, asset.cargobay, asset.weight, asset.loadradius, asset.skill, asset.livery, asset.assignment)
|
||||
else
|
||||
env.info("FF group doest not exit ".. tostring(asset.templatename))
|
||||
self:E(string.format("ERROR: Group %s doest not exit. Cannot be loaded as asset.", tostring(asset.templatename)))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user