From 57ce6bcec2c62de42049c0a4cbc7db387339e5e5 Mon Sep 17 00:00:00 2001 From: kaltokri Date: Fri, 1 Mar 2024 17:22:22 +0100 Subject: [PATCH] Switched demo mission link in Core/SpawnStatic and Wrapper/Storage --- Moose Development/Moose/Core/SpawnStatic.lua | 150 +++++++++---------- Moose Development/Moose/Wrapper/Storage.lua | 106 ++++++------- 2 files changed, 128 insertions(+), 128 deletions(-) diff --git a/Moose Development/Moose/Core/SpawnStatic.lua b/Moose Development/Moose/Core/SpawnStatic.lua index 77543f5fc..f6a082ddf 100644 --- a/Moose Development/Moose/Core/SpawnStatic.lua +++ b/Moose Development/Moose/Core/SpawnStatic.lua @@ -1,36 +1,36 @@ --- **Core** - Spawn statics. --- +-- -- === --- +-- -- ## Features: --- +-- -- * Spawn new statics from a static already defined in the mission editor. -- * Spawn new statics from a given template. -- * Spawn new statics from a given type. -- * Spawn with a custom heading and location. -- * Spawn within a zone. -- * Spawn statics linked to units, .e.g on aircraft carriers. --- --- === --- --- # Demo Missions --- --- ## [SPAWNSTATIC Demo Missions](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/master/Core/SpawnStatic) -- --- -- === --- +-- +-- # Demo Missions +-- +-- ## [SPAWNSTATIC Demo Missions](https://github.com/FlightControl-Master/MOOSE_Demos/tree/master/Core/SpawnStatic) +-- +-- +-- === +-- -- # YouTube Channel --- +-- -- ## No videos yet! --- +-- -- === --- +-- -- ### Author: **FlightControl** -- ### Contributions: **funkyfranky** --- +-- -- === --- +-- -- @module Core.SpawnStatic -- @image Core_Spawnstatic.JPG @@ -58,37 +58,37 @@ --- Allows to spawn dynamically new @{Wrapper.Static}s into your mission. --- --- Through creating a copy of an existing static object template as defined in the Mission Editor (ME), SPAWNSTATIC can retireve the properties of the defined static object template (like type, category etc), +-- +-- Through creating a copy of an existing static object template as defined in the Mission Editor (ME), SPAWNSTATIC can retireve the properties of the defined static object template (like type, category etc), -- and "copy" these properties to create a new static object and place it at the desired coordinate. --- --- New spawned @{Wrapper.Static}s get **the same name** as the name of the template Static, or gets the given name when a new name is provided at the Spawn method. +-- +-- New spawned @{Wrapper.Static}s get **the same name** as the name of the template Static, or gets the given name when a new name is provided at the Spawn method. -- By default, spawned @{Wrapper.Static}s will follow a naming convention at run-time: --- +-- -- * Spawned @{Wrapper.Static}s will have the name _StaticName_#_nnn_, where _StaticName_ is the name of the **Template Static**, and _nnn_ is a **counter from 0 to 99999**. --- +-- -- # SPAWNSTATIC Constructors --- +-- -- Firstly, we need to create a SPAWNSTATIC object that will be used to spawn new statics into the mission. There are three ways to do this. --- +-- -- ## Use another Static --- +-- -- A new SPAWNSTATIC object can be created using another static by the @{#SPAWNSTATIC.NewFromStatic}() function. All parameters such as position, heading, country will be initialized -- from the static. --- +-- -- ## From a Template --- +-- -- A SPAWNSTATIC object can also be created from a template table using the @{#SPAWNSTATIC.NewFromTemplate}(SpawnTemplate, CountryID) function. All parameters are taken from the template. --- +-- -- ## From a Type --- +-- -- A very basic method is to create a SPAWNSTATIC object by just giving the type of the static. All parameters must be initialized from the InitXYZ functions described below. Otherwise default values -- are used. For example, if no spawn coordinate is given, the static will be created at the origin of the map. --- +-- -- # Setting Parameters --- +-- -- Parameters such as the spawn position, heading, country etc. can be set via :Init*XYZ* functions. Note that these functions must be given before the actual spawn command! --- +-- -- * @{#SPAWNSTATIC.InitCoordinate}(Coordinate) Sets the coordinate where the static is spawned. Statics are always spawnd on the ground. -- * @{#SPAWNSTATIC.InitHeading}(Heading) sets the orientation of the static. -- * @{#SPAWNSTATIC.InitLivery}(LiveryName) sets the livery of the static. Not all statics support this. @@ -99,17 +99,17 @@ -- * @{#SPAWNSTATIC.InitLinkToUnit}(Unit, OffsetX, OffsetY, OffsetAngle) links the static to a unit, e.g. to an aircraft carrier. -- -- # Spawning the Statics --- +-- -- Once the SPAWNSTATIC object is created and parameters are initialized, the spawn command can be given. There are different methods where some can be used to directly set parameters -- such as position and heading. --- +-- -- * @{#SPAWNSTATIC.Spawn}(Heading, NewName) spawns the static with the set parameters. Optionally, heading and name can be given. The name **must be unique**! -- * @{#SPAWNSTATIC.SpawnFromCoordinate}(Coordinate, Heading, NewName) spawn the static at the given coordinate. Optionally, heading and name can be given. The name **must be unique**! -- * @{#SPAWNSTATIC.SpawnFromPointVec2}(PointVec2, Heading, NewName) spawns the static at a POINT_VEC2 coordinate. Optionally, heading and name can be given. The name **must be unique**! -- * @{#SPAWNSTATIC.SpawnFromZone}(Zone, Heading, NewName) spawns the static at the center of a @{Core.Zone}. Optionally, heading and name can be given. The name **must be unique**! --- +-- -- @field #SPAWNSTATIC SPAWNSTATIC --- +-- SPAWNSTATIC = { ClassName = "SPAWNSTATIC", SpawnIndex = 0, @@ -139,9 +139,9 @@ SPAWNSTATIC = { function SPAWNSTATIC:NewFromStatic(SpawnTemplateName, SpawnCountryID) local self = BASE:Inherit( self, BASE:New() ) -- #SPAWNSTATIC - + local TemplateStatic, CoalitionID, CategoryID, CountryID = _DATABASE:GetStaticGroupTemplate(SpawnTemplateName) - + if TemplateStatic then self.SpawnTemplatePrefix = SpawnTemplateName self.TemplateStaticUnit = UTILS.DeepCopy(TemplateStatic.units[1]) @@ -166,11 +166,11 @@ end function SPAWNSTATIC:NewFromTemplate(SpawnTemplate, CountryID) local self = BASE:Inherit( self, BASE:New() ) -- #SPAWNSTATIC - + self.TemplateStaticUnit = UTILS.DeepCopy(SpawnTemplate) self.SpawnTemplatePrefix = SpawnTemplate.name self.CountryID = CountryID or country.id.USA - + return self end @@ -189,7 +189,7 @@ function SPAWNSTATIC:NewFromType(StaticType, StaticCategory, CountryID) self.InitStaticCategory=StaticCategory self.CountryID=CountryID or country.id.USA self.SpawnTemplatePrefix=self.InitStaticType - + self.InitStaticCoordinate=COORDINATE:New(0, 0, 0) self.InitStaticHeading=0 @@ -291,7 +291,7 @@ function SPAWNSTATIC:InitCountry(CountryID) return self end ---- Initialize name prefix statics get. This will be appended by "#0001", "#0002" etc. +--- Initialize name prefix statics get. This will be appended by "#0001", "#0002" etc. -- @param #SPAWNSTATIC self -- @param #string NamePrefix Name prefix of statics spawned. Will append #0001, etc to the name. -- @return #SPAWNSTATIC self @@ -327,13 +327,13 @@ function SPAWNSTATIC:Spawn(Heading, NewName) if Heading then self.InitStaticHeading=Heading end - + if NewName then self.InitStaticName=NewName end return self:_SpawnStatic(self.TemplateStaticUnit, self.CountryID) - + end --- Creates a new @{Wrapper.Static} from a POINT_VEC2. @@ -347,7 +347,7 @@ function SPAWNSTATIC:SpawnFromPointVec2(PointVec2, Heading, NewName) local vec2={x=PointVec2:GetX(), y=PointVec2:GetY()} local Coordinate=COORDINATE:NewFromVec2(vec2) - + return self:SpawnFromCoordinate(Coordinate, Heading, NewName) end @@ -362,11 +362,11 @@ function SPAWNSTATIC:SpawnFromCoordinate(Coordinate, Heading, NewName) -- Set up coordinate. self.InitStaticCoordinate=Coordinate - + if Heading then self.InitStaticHeading=Heading end - + if NewName then self.InitStaticName=NewName end @@ -385,7 +385,7 @@ function SPAWNSTATIC:SpawnFromZone(Zone, Heading, NewName) -- Spawn the new static at the center of the zone. local Static = self:SpawnFromPointVec2( Zone:GetPointVec2(), Heading, NewName ) - + return Static end @@ -399,45 +399,45 @@ function SPAWNSTATIC:_SpawnStatic(Template, CountryID) Template=Template or {} local CountryID=CountryID or self.CountryID - + if self.InitStaticType then Template.type=self.InitStaticType end - + if self.InitStaticCategory then Template.category=self.InitStaticCategory end - - if self.InitStaticCoordinate then - Template.x = self.InitStaticCoordinate.x + + if self.InitStaticCoordinate then + Template.x = self.InitStaticCoordinate.x Template.y = self.InitStaticCoordinate.z - Template.alt = self.InitStaticCoordinate.y + Template.alt = self.InitStaticCoordinate.y end - + if self.InitStaticHeading then - Template.heading = math.rad(self.InitStaticHeading) + Template.heading = math.rad(self.InitStaticHeading) end if self.InitStaticShape then Template.shape_name=self.InitStaticShape end - + if self.InitStaticLivery then Template.livery_id=self.InitStaticLivery end - + if self.InitStaticDead~=nil then Template.dead=self.InitStaticDead end - + if self.InitStaticCargo~=nil then Template.canCargo=self.InitStaticCargo end - + if self.InitStaticCargoMass~=nil then Template.mass=self.InitStaticCargoMass end - + if self.InitLinkUnit then Template.linkUnit=self.InitLinkUnit:GetID() Template.linkOffset=true @@ -446,45 +446,45 @@ function SPAWNSTATIC:_SpawnStatic(Template, CountryID) Template.offsets.x=self.InitOffsetX Template.offsets.angle=self.InitOffsetAngle and math.rad(self.InitOffsetAngle) or 0 end - + if self.InitFarp then Template.heliport_callsign_id = self.InitFarpCallsignID Template.heliport_frequency = self.InitFarpFreq Template.heliport_modulation = self.InitFarpModu Template.unitId=nil end - + -- Increase spawn index counter. self.SpawnIndex = self.SpawnIndex + 1 - + -- Name of the spawned static. Template.name = self.InitStaticName or string.format("%s#%05d", self.SpawnTemplatePrefix, self.SpawnIndex) -- Add and register the new static. local mystatic=_DATABASE:AddStatic(Template.name) - + -- Debug output. self:T(Template) - + -- Add static to the game. local Static=nil --DCS#StaticObject - + if self.InitFarp then - - local TemplateGroup={} + + local TemplateGroup={} TemplateGroup.units={} TemplateGroup.units[1]=Template - + TemplateGroup.visible=true TemplateGroup.hidden=false TemplateGroup.x=Template.x TemplateGroup.y=Template.y TemplateGroup.name=Template.name - self:T("Spawning FARP") + self:T("Spawning FARP") self:T({Template=Template}) self:T({TemplateGroup=TemplateGroup}) - + -- ED's dirty way to spawn FARPS. Static=coalition.addGroup(CountryID, -1, TemplateGroup) @@ -499,10 +499,10 @@ function SPAWNSTATIC:_SpawnStatic(Template, CountryID) world.onEvent(Event) else - self:T("Spawning Static") - self:T2({Template=Template}) + self:T("Spawning Static") + self:T2({Template=Template}) Static=coalition.addStaticObject(CountryID, Template) end - + return mystatic end diff --git a/Moose Development/Moose/Wrapper/Storage.lua b/Moose Development/Moose/Wrapper/Storage.lua index 7d4b6da12..04210136a 100644 --- a/Moose Development/Moose/Wrapper/Storage.lua +++ b/Moose Development/Moose/Wrapper/Storage.lua @@ -8,7 +8,7 @@ -- -- ## Example Missions: -- --- Demo missions can be found on [github](https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/Wrapper/Storage). +-- Demo missions can be found on [github](https://github.com/FlightControl-Master/MOOSE_Demos/tree/master/Wrapper/Storage). -- -- === -- @@ -33,93 +33,93 @@ -- === -- -- # The STORAGE Concept --- --- The STORAGE class offers an easy-to-use wrapper interface to all DCS API functions of DCS warehouses. +-- +-- The STORAGE class offers an easy-to-use wrapper interface to all DCS API functions of DCS warehouses. -- We named the class STORAGE, because the name WAREHOUSE is already taken by another MOOSE class. --- +-- -- This class allows you to add and remove items to a DCS warehouse, such as aircraft, liquids, weapons and other equipment. --- +-- -- # Constructor --- +-- -- A DCS warehouse is associated with an airbase. Therefore, a `STORAGE` instance is automatically created, once an airbase is registered and added to the MOOSE database. --- --- You can get the `STORAGE` object from the --- --- -- Create a STORAGE instance of the Batumi warehouse +-- +-- You can get the `STORAGE` object from the +-- +-- -- Create a STORAGE instance of the Batumi warehouse -- local storage=STORAGE:FindByName("Batumi") --- +-- -- An other way to get the `STORAGE` object is to retrieve it from the AIRBASE function `AIRBASE:GetStorage()` --- +-- -- -- Get storage instance of Batumi airbase -- local Batumi=AIRBASE:FindByName("Batumi") -- local storage=Batumi:GetStorage() --- +-- -- # Aircraft, Weapons and Equipment --- +-- -- ## Adding Items --- +-- -- To add aircraft, weapons and/or othe equipment, you can use the @{#STORAGE.AddItem}() function --- +-- -- storage:AddItem("A-10C", 3) -- storage:AddItem("weapons.missiles.AIM_120C", 10) --- +-- -- This will add three A-10Cs and ten AIM-120C missiles to the warehouse inventory. --- +-- -- ## Setting Items --- +-- -- You can also explicitly set, how many items are in the inventory with the @{#STORAGE.SetItem}() function. --- +-- -- ## Removing Items --- +-- -- Items can be removed from the inventory with the @{#STORAGE.RemoveItem}() function. --- +-- -- ## Getting Amount --- +-- -- The number of items currently in the inventory can be obtained with the @{#STORAGE.GetItemAmount}() function --- +-- -- local N=storage:GetItemAmount("A-10C") -- env.info(string.format("We currently have %d A-10Cs available", N)) --- +-- -- # Liquids --- +-- -- Liquids can be added and removed by slightly different functions as described below. Currently there are four types of liquids --- +-- -- * Jet fuel `STORAGE.Liquid.JETFUEL` -- * Aircraft gasoline `STORAGE.Liquid.GASOLINE` -- * MW 50 `STORAGE.Liquid.MW50` -- * Diesel `STORAGE.Liquid.DIESEL` --- +-- -- ## Adding Liquids --- +-- -- To add a certain type of liquid, you can use the @{#STORAGE.AddItem}(Type, Amount) function --- +-- -- storage:AddLiquid(STORAGE.Liquid.JETFUEL, 10000) -- storage:AddLiquid(STORAGE.Liquid.DIESEL, 20000) --- +-- -- This will add 10,000 kg of jet fuel and 20,000 kg of diesel to the inventory. --- +-- -- ## Setting Liquids --- +-- -- You can also explicitly set the amount of liquid with the @{#STORAGE.SetLiquid}(Type, Amount) function. --- +-- -- ## Removing Liquids --- +-- -- Liquids can be removed with @{#STORAGE.RemoveLiquid}(Type, Amount) function. --- +-- -- ## Getting Amount --- +-- -- The current amount of a certain liquid can be obtained with the @{#STORAGE.GetLiquidAmount}(Type) function --- +-- -- local N=storage:GetLiquidAmount(STORAGE.Liquid.DIESEL) -- env.info(string.format("We currently have %d kg of Diesel available", N)) --- --- +-- +-- -- # Inventory --- +-- -- The current inventory of the warehouse can be obtained with the @{#STORAGE.GetInventory}() function. This returns three tables with the aircraft, liquids and weapons: --- +-- -- local aircraft, liquids, weapons=storage:GetInventory() --- +-- -- UTILS.PrintTableToLog(aircraft) -- UTILS.PrintTableToLog(liquids) -- UTILS.PrintTableToLog(weapons) @@ -168,7 +168,7 @@ function STORAGE:New(AirbaseName) local self=BASE:Inherit(self, BASE:New()) -- #STORAGE self.airbase=Airbase.getByName(AirbaseName) - + if Airbase.getWarehouse then self.warehouse=self.airbase:getWarehouse() end @@ -322,7 +322,7 @@ end function STORAGE:GetLiquidName(Type) local name="Unknown" - + if Type==STORAGE.Liquid.JETFUEL then name = "Jet fuel" elseif Type==STORAGE.Liquid.GASOLINE then @@ -411,25 +411,25 @@ function STORAGE:IsUnlimited(Type) -- Get current amount of type. local N=self:GetAmount(Type) - + local unlimited=false - + if N>0 then - + -- Remove one item. self:RemoveAmount(Type, 1) - + -- Get amount. local n=self:GetAmount(Type) - + -- If amount did not change, it is unlimited. unlimited=n==N - + -- Add item back. if not unlimited then self:AddAmount(Type, 1) end - + -- Debug info. self:I(self.lid..string.format("Type=%s: unlimited=%s (N=%d n=%d)", tostring(Type), tostring(unlimited), N, n)) end @@ -523,7 +523,7 @@ end function STORAGE:GetInventory(Item) local inventory=self.warehouse:getInventory(Item) - + return inventory.aircraft, inventory.liquids, inventory.weapon end