mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #1033 from FlightControl-Master/FF/Develop
Warehouse v0.6.4
This commit is contained in:
commit
3c1547bd6c
@ -12,7 +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.
|
||||
-- * Persistence of assets. Warehouse assets can be saved and loaded from file.
|
||||
-- * 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 #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 #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
|
||||
|
||||
--- 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
|
||||
-- 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.
|
||||
--
|
||||
-- ### 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.
|
||||
-- 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
|
||||
-- "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".
|
||||
--
|
||||
-- ### 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
|
||||
--
|
||||
-- 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
|
||||
--
|
||||
-- warehouseBatumi:New(STATIC:FindByName("Warehouse Batumi"))
|
||||
-- warehouseBatumi:Load("D:\\My Warehouse Data\\")
|
||||
-- warehouseBatumi:Start()
|
||||
-- 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
|
||||
@ -1543,6 +1552,9 @@ WAREHOUSE = {
|
||||
offroadpaths = {},
|
||||
autodefence = false,
|
||||
spawnzonemaxdist = 5000,
|
||||
autosave = false,
|
||||
autosavepath = nil,
|
||||
autosavefile = nil,
|
||||
}
|
||||
|
||||
--- Item of the warehouse stock table.
|
||||
@ -1714,7 +1726,7 @@ WAREHOUSE.db = {
|
||||
|
||||
--- Warehouse class version.
|
||||
-- @field #string version
|
||||
WAREHOUSE.version="0.6.3"
|
||||
WAREHOUSE.version="0.6.4"
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- TODO: Warehouse todo list.
|
||||
@ -2397,6 +2409,18 @@ function WAREHOUSE:SetAutoDefenceOff()
|
||||
return self
|
||||
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.
|
||||
-- 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.Dead, self._OnEventCrashOrDead)
|
||||
self:HandleEvent(EVENTS.BaseCaptured, self._OnEventBaseCaptured)
|
||||
self:HandleEvent(EVENTS.MissionEnd, self._OnEventMissionEnd)
|
||||
|
||||
-- This event triggers the arrived event for air assets.
|
||||
-- TODO Might need to make this landing or optional!
|
||||
@ -4925,6 +4950,7 @@ function WAREHOUSE:onbeforeLoad(From, Event, To, path, filename)
|
||||
return true
|
||||
else
|
||||
self:_ErrorMessage(string.format("ERROR: file %s does not exist! Cannot load assets.", filename), 60)
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
@ -4977,6 +5003,7 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
local descriptors=UTILS.Split(asset,";")
|
||||
|
||||
local asset={}
|
||||
local isasset=false
|
||||
for _,descriptor in pairs(descriptors) do
|
||||
|
||||
local keyval=UTILS.Split(descriptor,"=")
|
||||
@ -4989,11 +5016,16 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
elseif keyval[1]=="country" then
|
||||
-- Get country id.
|
||||
Country=tonumber(keyval[2])
|
||||
elseif #keyval==2 then
|
||||
else
|
||||
|
||||
-- This is an asset.
|
||||
isasset=true
|
||||
|
||||
local key=keyval[1]
|
||||
local val=keyval[2]
|
||||
|
||||
--env.info(string.format("FF asset key=%s val=%s", key, val))
|
||||
|
||||
-- Livery or skill could be "nil".
|
||||
if val=="nil" then
|
||||
val=nil
|
||||
@ -5011,13 +5043,14 @@ function WAREHOUSE:onafterLoad(From, Event, To, path, filename)
|
||||
end
|
||||
|
||||
-- Add to table.
|
||||
table.insert(assets, asset)
|
||||
if isasset then
|
||||
table.insert(assets, asset)
|
||||
end
|
||||
end
|
||||
|
||||
-- Respawn warehouse with prev coalition if necessary.
|
||||
self:E(string.format("Changing country %d-->%d (before)", self:GetCountry(), Country))
|
||||
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)
|
||||
end
|
||||
|
||||
@ -5960,6 +5993,18 @@ function WAREHOUSE:_OnEventBaseCaptured(EventData)
|
||||
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
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -7712,7 +7757,7 @@ end
|
||||
function WAREHOUSE:_ErrorMessage(text, duration)
|
||||
duration=duration or 20
|
||||
if duration>0 then
|
||||
MESSAGE:New(text, duration):ToAllIf()
|
||||
MESSAGE:New(text, duration):ToAll()
|
||||
end
|
||||
self:E(self.wid..text)
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user