Merge pull request #1033 from FlightControl-Master/FF/Develop

Warehouse v0.6.4
This commit is contained in:
Frank 2018-10-17 21:59:57 +02:00 committed by GitHub
commit 3c1547bd6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,7 +12,7 @@
-- * Strategic components such as capturing, defending and destroying warehouses and their associated infrastructure. -- * 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). -- * Intelligent spawning of aircraft on airports (only if enough parking spots are available).
-- * Possibility to hook into events and customize actions. -- * Possibility to hook into events and customize actions.
-- * Persistance of assets. Warehouse assets can be saved and loaded from file. -- * Persistence of assets. Warehouse assets can be saved and loaded from file.
-- * Can be easily interfaced to other MOOSE classes. -- * Can be easily interfaced to other MOOSE classes.
-- --
-- === -- ===
@ -66,6 +66,9 @@
-- @field #table offroadpaths Table holding user defined paths from one warehouse to another. -- @field #table offroadpaths Table holding user defined paths from one warehouse to another.
-- @field #boolean autodefence When the warehouse is under attack, automatically spawn assets to defend the warehouse. -- @field #boolean autodefence When the warehouse is under attack, automatically spawn assets to defend the warehouse.
-- @field #number spawnzonemaxdist Max distance between warehouse and spawn zone. Default 5000 meters. -- @field #number spawnzonemaxdist Max distance between warehouse and spawn zone. Default 5000 meters.
-- @field #boolean autosave Automatically save assets to file when mission ends.
-- @field #string autosavepath Path where the asset file is saved on auto save.
-- @field #string autosavefilename File name of the auto asset save file. Default is auto generated from warehouse id and name.
-- @extends Core.Fsm#FSM -- @extends Core.Fsm#FSM
--- Have your assets at the right place at the right time - or not! --- Have your assets at the right place at the right time - or not!
@ -677,7 +680,7 @@
-- --
-- === -- ===
-- --
-- # Persistance of Assets -- # Persistence of Assets
-- --
-- Assets in stock of a warehouse can be saved to a file on your hard drive and then loaded from that file at a later point. This enables to restart the mission -- Assets in stock of a warehouse can be saved to a file on your hard drive and then loaded from that file at a later point. This enables to restart the mission
-- and restore the warehouse stock. -- and restore the warehouse stock.
@ -696,7 +699,7 @@
-- --
-- in the file "MissionScripting.lua", which is located in the subdirectory "Scripts" of your DCS installation root directory. -- in the file "MissionScripting.lua", which is located in the subdirectory "Scripts" of your DCS installation root directory.
-- --
-- ### Don'ts -- ### Don't!
-- --
-- Do not use **semi-colons** or **equal signs** in the group names of your assets as these are used as separators in the saved and loaded files texts. -- Do not use **semi-colons** or **equal signs** in the group names of your assets as these are used as separators in the saved and loaded files texts.
-- If you do, it will cause problems and give you a headache! -- If you do, it will cause problems and give you a headache!
@ -708,10 +711,16 @@
-- 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 -- 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". -- "Warehouse-1234_Batumi.txt".
-- --
-- warehouseBatumi:Save("D:\\My Warehouse Data\\") -- warehouseBatumi:Save("D:\\My Warehouse Data\\")
-- --
-- This will save all asset data to in "D:\\My Warehouse Data\\Warehouse-1234_Batumi.txt". -- This will save all asset data to in "D:\\My Warehouse Data\\Warehouse-1234_Batumi.txt".
-- --
-- ### Automatic Save at Mission End
--
-- The assets can be saved automatically when the mission is ended via the @{WAREHOUSE.SetSaveOnMissionEnd}(*path*, *filename*) function, i.e.
--
-- warehouseBatumi:SetSaveOnMissionEnd("D:\\My Warehouse Data\\")
--
-- ## Load Assets -- ## 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 -- 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
@ -724,9 +733,9 @@
-- --
-- Loading the assets is done by -- Loading the assets is done by
-- --
-- warehouseBatumi:New(STATIC:FindByName("Warehouse Batumi")) -- warehouseBatumi:New(STATIC:FindByName("Warehouse Batumi"))
-- warehouseBatumi:Load("D:\\My Warehouse Data\\") -- warehouseBatumi:Load("D:\\My Warehouse Data\\")
-- warehouseBatumi:Start() -- 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. -- 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 -- 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
@ -1543,6 +1552,9 @@ WAREHOUSE = {
offroadpaths = {}, offroadpaths = {},
autodefence = false, autodefence = false,
spawnzonemaxdist = 5000, spawnzonemaxdist = 5000,
autosave = false,
autosavepath = nil,
autosavefile = nil,
} }
--- Item of the warehouse stock table. --- Item of the warehouse stock table.
@ -1714,7 +1726,7 @@ WAREHOUSE.db = {
--- Warehouse class version. --- Warehouse class version.
-- @field #string version -- @field #string version
WAREHOUSE.version="0.6.3" WAREHOUSE.version="0.6.4"
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- TODO: Warehouse todo list. -- TODO: Warehouse todo list.
@ -2397,6 +2409,18 @@ function WAREHOUSE:SetAutoDefenceOff()
return self return self
end end
--- Set auto defence off. This is the default.
-- @param #WAREHOUSE self
-- @param #string path Path where to save the asset data file.
-- @param #string filename File name. Default is generated automatically from warehouse id.
-- @return #WAREHOUSE self
function WAREHOUSE:SetSaveOnMissionEnd(path, filename)
self.autosave=true
self.autosavepath=path
self.autosavefile=filename
return self
end
--- Set the airbase belonging to this warehouse. --- Set the airbase belonging to this warehouse.
-- Note that it has to be of the same coalition as the warehouse. -- Note that it has to be of the same coalition as the warehouse.
@ -3042,6 +3066,7 @@ function WAREHOUSE:onafterStart(From, Event, To)
self:HandleEvent(EVENTS.Crash, self._OnEventCrashOrDead) self:HandleEvent(EVENTS.Crash, self._OnEventCrashOrDead)
self:HandleEvent(EVENTS.Dead, self._OnEventCrashOrDead) self:HandleEvent(EVENTS.Dead, self._OnEventCrashOrDead)
self:HandleEvent(EVENTS.BaseCaptured, self._OnEventBaseCaptured) self:HandleEvent(EVENTS.BaseCaptured, self._OnEventBaseCaptured)
self:HandleEvent(EVENTS.MissionEnd, self._OnEventMissionEnd)
-- This event triggers the arrived event for air assets. -- This event triggers the arrived event for air assets.
-- TODO Might need to make this landing or optional! -- TODO Might need to make this landing or optional!
@ -4925,6 +4950,7 @@ function WAREHOUSE:onbeforeLoad(From, Event, To, path, filename)
return true return true
else else
self:_ErrorMessage(string.format("ERROR: file %s does not exist! Cannot load assets.", filename), 60) self:_ErrorMessage(string.format("ERROR: file %s does not exist! Cannot load assets.", filename), 60)
return false
end end
end end
@ -4977,6 +5003,7 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
local descriptors=UTILS.Split(asset,";") local descriptors=UTILS.Split(asset,";")
local asset={} local asset={}
local isasset=false
for _,descriptor in pairs(descriptors) do for _,descriptor in pairs(descriptors) do
local keyval=UTILS.Split(descriptor,"=") local keyval=UTILS.Split(descriptor,"=")
@ -4989,15 +5016,20 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
elseif keyval[1]=="country" then elseif keyval[1]=="country" then
-- Get country id. -- Get country id.
Country=tonumber(keyval[2]) Country=tonumber(keyval[2])
elseif #keyval==2 then else
-- This is an asset.
isasset=true
local key=keyval[1] local key=keyval[1]
local val=keyval[2] local val=keyval[2]
--env.info(string.format("FF asset key=%s val=%s", key, val))
-- Livery or skill could be "nil". -- Livery or skill could be "nil".
if val=="nil" then if val=="nil" then
val=nil val=nil
end end
-- Convert string to number where necessary. -- Convert string to number where necessary.
if key=="cargobay" or key=="weight" or key=="loadradius" then if key=="cargobay" or key=="weight" or key=="loadradius" then
@ -5011,13 +5043,14 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
end end
-- Add to table. -- Add to table.
table.insert(assets, asset) if isasset then
table.insert(assets, asset)
end
end end
-- Respawn warehouse with prev coalition if necessary. -- Respawn warehouse with prev coalition if necessary.
self:E(string.format("Changing country %d-->%d (before)", self:GetCountry(), Country))
if Country~=self:GetCountry() then if Country~=self:GetCountry() then
self:E(string.format("Changing country %d-->%d (after)", self:GetCountry(), Country)) self:T(self.wid..string.format("Changing warehouse country %d-->%d on loading assets.", self:GetCountry(), Country))
self:ChangeCountry(Country) self:ChangeCountry(Country)
end end
@ -5960,6 +5993,18 @@ function WAREHOUSE:_OnEventBaseCaptured(EventData)
end end
end end
--- Warehouse event handling function.
-- Handles the case when the mission is ended.
-- @param #WAREHOUSE self
-- @param Core.Event#EVENTDATA EventData Event data.
function WAREHOUSE:_OnEventMissionEnd(EventData)
self:T3(self.wid..string.format("Warehouse %s captured event mission end!",self.alias))
if self.autosave then
self:Save(self.autosavepath, self.autosavefile)
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Helper functions -- Helper functions
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ -7712,7 +7757,7 @@ end
function WAREHOUSE:_ErrorMessage(text, duration) function WAREHOUSE:_ErrorMessage(text, duration)
duration=duration or 20 duration=duration or 20
if duration>0 then if duration>0 then
MESSAGE:New(text, duration):ToAllIf() MESSAGE:New(text, duration):ToAll()
end end
self:E(self.wid..text) self:E(self.wid..text)
end end