From 508e35aec3a21078051295b530e5abc86a03eb99 Mon Sep 17 00:00:00 2001 From: funkyfranky Date: Mon, 27 Aug 2018 00:10:05 +0200 Subject: [PATCH] Warehouse v0.2.7 --- Moose Development/Moose/AI/AI_Cargo_APC.lua | 2 + .../Moose/AI/AI_Cargo_Dispatcher.lua | 7 +- .../Moose/AI/AI_Cargo_Helicopter.lua | 25 ++- Moose Development/Moose/Core/Zone.lua | 1 + .../Moose/Functional/Warehouse.lua | 208 +++++++++++------- .../Moose/Wrapper/Controllable.lua | 9 +- Moose Development/Moose/Wrapper/Group.lua | 3 +- 7 files changed, 158 insertions(+), 97 deletions(-) diff --git a/Moose Development/Moose/AI/AI_Cargo_APC.lua b/Moose Development/Moose/AI/AI_Cargo_APC.lua index 47b900cd0..58a2e7589 100644 --- a/Moose Development/Moose/AI/AI_Cargo_APC.lua +++ b/Moose Development/Moose/AI/AI_Cargo_APC.lua @@ -804,6 +804,7 @@ end -- @param #AI_CARGO_APC self function AI_CARGO_APC._BackHome(APC, self) --Trigger BackHome event. + env.info(string.format("FF APC %s is back home task function!",APC:GetName())) APC:SmokeGreen() self:__BackHome(1) end @@ -815,5 +816,6 @@ end -- @param Event -- @param To function AI_CARGO_APC:onafterBackHome( APC, From, Event, To ) + env.info(string.format("FF APC %s is back home event!",APC:GetName())) APC:SmokeRed() end \ No newline at end of file diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua index 5bda17ffe..05264bfa6 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua @@ -402,7 +402,12 @@ function AI_CARGO_DISPATCHER:onafterMonitor() function AI_Cargo.OnAfterUnloaded( AI_Cargo, Carrier, From, Event, To, Cargo ) self:Unloaded( Carrier, Cargo ) - end + end + + -- FF added back home event. + function AI_Cargo.OnAfterBackHome( AI_Cargo, Carrier, From, Event, To) + self:BackHome( Carrier ) + end end -- The Pickup sequence ... diff --git a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua index 540d4b064..e115a09dc 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua @@ -241,8 +241,11 @@ function AI_CARGO_HELICOPTER:onafterLanded( Helicopter, From, Event, To ) end end - if self.RouteDeploy == true then - if Helicopter:GetHeight( true ) <= 5 and Helicopter:GetVelocityKMH() < 10 then + if self.RouteDeploy == true then + local height=Helicopter:GetHeight( true ) + local velocity=Helicopter:GetVelocityKMH() + env.info(string.format("FF helo in air %s, height = %d m, velocity = %d km/h", tostring(Helicopter:InAir()), height, velocity)) + if height <= 10 and velocity < 10 then self:Unload( true ) self.RouteDeploy = false self.Transporting = false @@ -823,15 +826,21 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat --- Now we're going to do something special, we're going to call a function from a waypoint action at the AIControllable... Helicopter:WayPointInitialize( Route ) - local Tasks = {} - + local Tasks = {} Tasks[#Tasks+1] = Helicopter:TaskLandAtVec2( CoordinateTo:GetVec2() ) - Tasks[#Tasks+1] = Helicopter:TaskFunction("AI_CARGO_HELICOPTER._BackHome", self) - Route[#Route].task = Helicopter:TaskCombo( Tasks ) - - Route[#Route+1] = WaypointTo + -- FF + --[[ + local Tasks2 = {} + Tasks2[#Tasks2+1] = Helicopter:TaskFunction("AI_CARGO_HELICOPTER._BackHome", self) + + Route[#Route+1] = WaypointTo + Route[#Route].task = Helicopter:TaskCombo( Tasks2 ) + -- FF + ]] + + Route[#Route+1] = WaypointTo -- Now route the helicopter Helicopter:Route( Route, 0 ) diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index 207587aee..4d28f6ebc 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -1078,6 +1078,7 @@ function ZONE_UNIT:GetVec2() local ZoneVec2 = self.ZoneUNIT:GetVec2() if ZoneVec2 then + local heading if self.relative_to_unit then heading = ( self.ZoneUNIT:GetHeading() or 0.0 ) * math.pi / 180.0 else diff --git a/Moose Development/Moose/Functional/Warehouse.lua b/Moose Development/Moose/Functional/Warehouse.lua index 0be2f17a5..c9fca1ca5 100644 --- a/Moose Development/Moose/Functional/Warehouse.lua +++ b/Moose Development/Moose/Functional/Warehouse.lua @@ -69,7 +69,7 @@ -- -- The MOOSE warehouse adds a new logistic component to the DCS World. *Assets*, i.e. ground, airborne and naval units, can be transferred from one place -- to another in a realistic and highly automatic fashion. In contrast to a "DCS warehouse" these assets have a physical representation in game. In particular, --- this means they can be destroyed during the transport, add more life to the DCS world etc. +-- this means they can be destroyed during the transport and add more life to the DCS world. -- -- Or, in other words, on a scale between 1 and 10, how important do you reckon it is to have the right assets at the right place in a conflict? -- @@ -417,7 +417,7 @@ WAREHOUSE.db = { --- Warehouse class version. -- @field #string version -WAREHOUSE.version="0.2.6" +WAREHOUSE.version="0.2.7" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO: Warehouse todo list. @@ -503,32 +503,32 @@ function WAREHOUSE:New(warehouse, alias) self.spawnzone=ZONE_RADIUS:New(string.format("Warehouse %s spawn zone", self.warehouse:GetName()), warehouse:GetVec2(), 200) -- Start State. - self:SetStartState("Stopped") + self:SetStartState("NotReadyYet") -- Add FSM transitions. - -- From State --> Event --> To State - self:AddTransition("Stopped", "Load", "Stopped") -- TODO Load the warehouse state. No sure if it should be in stopped state. - self:AddTransition("Stopped", "Start", "Running") -- Start the warehouse. - self:AddTransition("*", "Status", "*") -- Status update. - self:AddTransition("*", "AddAsset", "*") -- Add asset to warehouse stock. - self:AddTransition("*", "AddRequest", "*") -- New request from other warehouse. - self:AddTransition("Running", "Request", "*") -- Process a request. Only in running mode. - self:AddTransition("Attacked", "Request", "*") -- Process a request. Only in running mode. - self:AddTransition("*", "Unloaded", "*") -- Cargo has been unloaded from the carrier. - self:AddTransition("*", "Arrived", "*") -- Cargo group has arrived at destination. - self:AddTransition("*", "Delivered", "*") -- All cargo groups of a request have been delivered to the requesting warehouse. - self:AddTransition("Running", "SelfRequest", "*") -- Request to warehouse itself. Requested assets are only spawned but not delivered anywhere. - self:AddTransition("Attacked", "SelfRequest", "*") -- Request to warehouse itself. Also possible when warehouse is under attack! - self:AddTransition("Running", "Pause", "Paused") -- TODO Pause the processing of new requests. Still possible to add assets and requests. - self:AddTransition("Paused", "Unpause", "Running") -- TODO Unpause the warehouse. Queued requests are processed again. - self:AddTransition("*", "Stop", "Stopped") -- TODO Stop the warehouse. - self:AddTransition("*", "Save", "*") -- TODO Save the warehouse state to disk. - self:AddTransition("*", "Attacked", "Attacked") -- TODO Warehouse is under attack by enemy coalition. - self:AddTransition("Attacked", "Defeated", "Running") -- TODO Attack by other coalition was defeated! - self:AddTransition("Attacked", "Captured", "Running") -- TODO Warehouse was captured by another coalition. It must have been attacked first. - self:AddTransition("*", "AirbaseCaptured", "*") -- TODO Airbase was captured by other coalition. - self:AddTransition("*", "AirbaseRecaptured", "*") -- TODO Airbase was re-captured from other coalition. - self:AddTransition("*", "Destroyed", "*") -- TODO Warehouse was destoryed. All assets in stock are gone and warehouse is stopped. + -- From State --> Event --> To State + self:AddTransition("NotReadyYet", "Load", "NotReadyYet") -- TODO Load the warehouse state. No sure if it should be in stopped state. + self:AddTransition("NotReadyYet", "Start", "Running") -- Start the warehouse. + self:AddTransition("*", "Status", "*") -- Status update. + self:AddTransition("*", "AddAsset", "*") -- Add asset to warehouse stock. + self:AddTransition("*", "AddRequest", "*") -- New request from other warehouse. + self:AddTransition("Running", "Request", "*") -- Process a request. Only in running mode. + self:AddTransition("Attacked", "Request", "*") -- Process a request. Only in running mode. + self:AddTransition("*", "Unloaded", "*") -- Cargo has been unloaded from the carrier. + self:AddTransition("*", "Arrived", "*") -- Cargo or transport group has arrived. + self:AddTransition("*", "Delivered", "*") -- All cargo groups of a request have been delivered to the requesting warehouse. + self:AddTransition("Running", "SelfRequest", "*") -- Request to warehouse itself. Requested assets are only spawned but not delivered anywhere. + self:AddTransition("Attacked", "SelfRequest", "*") -- Request to warehouse itself. Also possible when warehouse is under attack! + self:AddTransition("Running", "Pause", "Paused") -- TODO Pause the processing of new requests. Still possible to add assets and requests. + self:AddTransition("Paused", "Unpause", "Running") -- TODO Unpause the warehouse. Queued requests are processed again. + self:AddTransition("*", "Stop", "Stopped") -- TODO Stop the warehouse. + self:AddTransition("*", "Save", "*") -- TODO Save the warehouse state to disk. + self:AddTransition("*", "Attacked", "Attacked") -- TODO Warehouse is under attack by enemy coalition. + self:AddTransition("Attacked", "Defeated", "Running") -- TODO Attack by other coalition was defeated! + self:AddTransition("Attacked", "Captured", "Running") -- TODO Warehouse was captured by another coalition. It must have been attacked first. + self:AddTransition("*", "AirbaseCaptured", "*") -- TODO Airbase was captured by other coalition. + self:AddTransition("*", "AirbaseRecaptured", "*") -- TODO Airbase was re-captured from other coalition. + self:AddTransition("*", "Destroyed", "*") -- TODO Warehouse was destoryed. All assets in stock are gone and warehouse is stopped. ------------------------ --- Pseudo Functions --- @@ -1356,31 +1356,20 @@ function WAREHOUSE:_SpawnAssetAircraft(asset, request, parking, uncontrolled) else - -- First route point is the warehouse airbase. - template.route.points[1]=self.airbase:GetCoordinate():WaypointAir("BARO", COORDINATE.WaypointType.TakeOffParking, COORDINATE.WaypointAction.FromParkingArea, 0, true, self.airbase, nil, "Spawnpoint") - - --[[ - -- Link. - local spawnpoint=template.route.points[1] + local hotstart=true - -- Set initial waypoint type/action ==> cold start. - spawnpoint.type = COORDINATE.WaypointType.TakeOffParking - spawnpoint.action = COORDINATE.WaypointAction.FromParkingArea + -- Cold start (default). + local _type=COORDINATE.WaypointType.TakeOffParking + local _action=COORDINATE.WaypointAction.FromParkingArea - --spawnpoint.type = COORDINATE.WaypointType.TakeOffParkingHot - --spawnpoint.action = COORDINATE.WaypointAction.FromParkingAreaHot - - -- Set airbase ID. - if AirbaseCategory == Airbase.Category.HELIPAD or AirbaseCategory == Airbase.Category.SHIP then - spawnpoint.helipadId = AirbaseID - spawnpoint.linkUnit = AirbaseID - spawnpoint.airdromeId = nil - elseif AirbaseCategory == Airbase.Category.AIRDROME then - spawnpoint.airdromeId = AirbaseID - spawnpoint.linkUnit = nil - spawnpoint.helipadId = nil + -- Hot start. + if hotstart then + _type=COORDINATE.WaypointType.TakeOffParkingHot + _action=COORDINATE.WaypointAction.FromParkingAreaHot end - ]] + + -- First route point is the warehouse airbase. + template.route.points[1]=self.airbase:GetCoordinate():WaypointAir("BARO",_type,_action, 0, true, self.airbase, nil, "Spawnpoint") end @@ -1963,9 +1952,17 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request) --- On after BackHome event. function CargoTransport:OnAfterBackHome(From, Event, To, Carrier) + -- Intellisense. + local carrier=Carrier --Wrapper.Group#GROUP + -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE - Carrier:SmokeRed() + local warehouse=carrier:GetState(carrier, "WAREHOUSE") --#WAREHOUSE + carrier:SmokeWhite() + + -- Debug info. + local text=string.format("Carrier %s is back home at warehouse %s.", tostring(Carrier:GetName()), tostring(warehouse.warehouse:GetName())) + MESSAGE:New(text, 5):ToAllIf(warehouse.Debug) + warehouse:I(warehouse.wid..text) -- Add carrier back to warehouse stock. Actual unit is destroyed. warehouse:AddAsset(Carrier) @@ -2139,7 +2136,7 @@ end -- @param Wrapper.Group#GROUP group The group that was delivered. function WAREHOUSE:onafterArrived(From, Event, To, group) - self:E(self.wid..string.format("Cargo %s arrived!", tostring(group:GetName()))) + self:I(self.wid..string.format("Cargo %s arrived!", tostring(group:GetName()))) group:SmokeOrange() -- Update pending request. @@ -2150,8 +2147,10 @@ function WAREHOUSE:onafterArrived(From, Event, To, group) -- Number of cargo assets still in group set. local ncargo=request.cargogroupset:Count() - -- Info - self:E(self.wid..string.format("Cargo %d of %s arrived at warehouse %s. Assets still to deliver %d.",request.ndelivered, tostring(request.nasset), request.warehouse.alias, ncargo)) + -- Debug message. + local text=string.format("Cargo %d of %s arrived at warehouse %s. Assets still to deliver %d.",request.ndelivered, tostring(request.nasset), request.warehouse.alias, ncargo) + MESSAGE:New(text, 5):ToCoalitionIf(self.coalition, self.Debug) + self:I(self.wid..text) -- Route mobile ground group to the warehouse. Group has 60 seconds to get there or it is despawned and added as asset to the new warehouse regardless. if group:IsGround() and group:GetSpeedMax()>1 then @@ -2229,18 +2228,13 @@ end function WAREHOUSE:onafterDelivered(From, Event, To, request) -- Debug info - self:E(self.wid..string.format("All assets from warehouse %s delivered to warehouse %s!", self.alias, request.warehouse.alias)) - + local text=string.format("Warehouse %s: All assets delivered to warehouse %s!", self.alias, request.warehouse.alias) + MESSAGE:New(text, 5):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) + + -- Make some noice :) self:_Fireworks(request.warehouse.coordinate) - --[[ - -- Fireworks! - for i=1,91 do - local color=math.random(0,3) - request.warehouse.coordinate:Flare(color, i-1) - end - ]] - -- Remove pending request: self:_DeleteQueueItem(request, self.pending) @@ -2287,7 +2281,11 @@ end -- @param DCS#coalition.side Coalition which is attacking the warehouse. -- @param DCS#country.id Country which is attacking the warehouse. function WAREHOUSE:onafterAttacked(From, Event, To, Coalition, Country) - self:E(self.wid..string.format("Our warehouse is under attack!")) + + -- Warning. + local text=string.format("Warehouse %s: We are under attack!", self.alias) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) -- Spawn all ground units in the spawnzone? self:AddRequest(self, WAREHOUSE.Descriptor.CATEGORY, Group.Category.GROUND, "all", nil, nil , 0) @@ -2299,7 +2297,11 @@ end -- @param #string Event Event. -- @param #string To To state. function WAREHOUSE:onafterDefeated(From, Event, To) - self:E(self.wid..string.format("Attack was defeated!")) + + -- Message. + local text=string.format("Warehouse %s: Enemy attack was defeated!", self.alias) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) --if self.defenderrequest then for _,request in pairs(self.defending) do @@ -2339,7 +2341,11 @@ end -- @param DCS#coalition.side Coalition which captured the warehouse. -- @param DCS#country.id Country which has captured the warehouse. function WAREHOUSE:onafterCaptured(From, Event, To, Coalition, Country) - self:E(self.wid..string.format("Our warehouse was captured by coalition %d!", Coalition)) + + -- Message. + local text=string.format("Warehouse %s: We were captured by enemy coalition (%d)!", self.alias, Coalition) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) -- Respawn warehouse with new coalition/country. self.warehouse:ReSpawn(Country) @@ -2379,8 +2385,16 @@ end -- @param #string To To state. -- @param DCS#coalition.side Coalition which captured the warehouse. function WAREHOUSE:onafterAirbaseCaptured(From, Event, To, Coalition) - self:E(self.wid..string.format("Our airbase %s was captured by coalition %d!", self.airbasename, Coalition)) + + -- Message. + local text=string.format("Warehouse %s: Our airbase %s was captured by the enemy (coalition=%d)!", self.alias, self.airbasename, Coalition) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) + + -- Debug smoke. self.airbase:GetCoordinate():SmokeRed() + + -- Set airbase to nil and category to no airbase. self.airbase=nil self.category=-1 -- -1 indicates no airbase. end @@ -2392,9 +2406,17 @@ end -- @param #string To To state. -- @param DCS#coalition.side Coalition which captured the warehouse. function WAREHOUSE:onafterAirbaseRecaptured(From, Event, To, Coalition) - self:E(self.wid..string.format("We re-capturd our airbase %s from coalition %d!", self.airbasename, Coalition)) + + -- Message. + local text=string.format("Warehouse %s: We recaptured our airbase %d from the enemy (coalition=%d)!", self.alias, self.airbasename, Coalition) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) + + -- Set airbase and category. self.airbase=AIRBASE:FindByName(self.airbasename) self.category=self.airbase:GetDesc().category + + -- Debug smoke. self.airbase:GetCoordinate():SmokeGreen() end @@ -2405,7 +2427,12 @@ end -- @param #string Event Event. -- @param #string To To state. function WAREHOUSE:onafterDestroyed(From, Event, To) - self:E(self.wid..string.format("Our warehouse was destroyed!")) + + -- Message. + local text=string.format("Warehouse %s was destroyed!", self.alias) + MESSAGE:New(text, 20):ToCoalitionIf(self.coalition, self.Report or self.Debug) + self:I(self.wid..text) + -- Stop warehouse FSM. self:Stop() end @@ -2563,7 +2590,9 @@ function WAREHOUSE:_OnEventArrived(EventData) if wid~=nil and aid~=nil and rid~=nil then -- Debug info. - self:E(self.wid..string.format("Air asset group %s arrived.", group:GetName())) + local text=string.format("Air asset group %s arrived at warehouse %s.", group:GetName(), self.alias) + --MESSAGE:New + self:E(self.wid..text) -- Trigger arrived event for this group. Note that each unit of a group will trigger this event. So the onafterArrived function needs to take care of that. -- Actually, we only take the first unit of the group that arrives. If it does, we assume the whole group arrived, which might not be the case, since @@ -2640,6 +2669,24 @@ function WAREHOUSE:_OnEventLanding(EventData) local wid,aid,rid=self:_GetIDsFromGroup(group) if wid==self.uid then self:E(self.wid..string.format("Warehouse %s captured event landing of its asset unit %s.", self.alias, EventData.IniUnitName)) + + -- Get request of this group + local request=self:_GetRequestOfGroup(group,self.pending) + + -- If request is nil, the cargo has been delivered. + -- TODO: I might need to add a delivered table, to be better able to get this right. + if request==nil then + + -- Check if helicopter landed in spawn zone. If so, we call it a day and add it back to stock. + if group:GetCategory()==Group.Category.HELICOPTER then + if self.spawnzone:IsCoordinateInZone(EventData.IniUnit:GetCoordinate()) then + group:SmokeWhite() + self:__AddAsset(30, group) + end + end + + end + end end end @@ -2772,7 +2819,7 @@ function WAREHOUSE:_CheckConquered() local _country=unit:GetCountry() -- Debug info. - self:E(self.wid..string.format("Unit %s in warehouse zone of radius=%d m. Coalition=%d, country=%d. Distance = %d m.",unit:GetName(), radius,_coalition,_country, distance)) + self:T2(self.wid..string.format("Unit %s in warehouse zone of radius=%d m. Coalition=%d, country=%d. Distance = %d m.",unit:GetName(), radius,_coalition,_country, distance)) -- Add up units for each side. if _coalition==coalition.side.BLUE then @@ -2791,7 +2838,7 @@ function WAREHOUSE:_CheckConquered() end -- Debug info. - self:E(self.wid..string.format("Ground troops in warehouse zone: blue=%d, red=%d, neutral=%d", Nblue, Nred, Nneutral)) + self:T(self.wid..string.format("Ground troops in warehouse zone: blue=%d, red=%d, neutral=%d", Nblue, Nred, Nneutral)) -- Figure out the new coalition if any. @@ -2911,7 +2958,8 @@ function WAREHOUSE:_CheckRequestConsistancy(queue) valid=false end - -- Is receiving warehouse stopped? + -- Is receiving warehouse stopped? Actually, running state is checked later. So I leave this for now in case the warehouse was not started yet. + -- TODO: Introduce another FSM start state to be able to distinguish between a warehouse that was not started yet or was started and then stopped! if request.warehouse:IsStopped() then self:E(self.wid..string.format("ERROR: Incorrect request. Requesting warehouse is stopped!")) valid=false @@ -3031,7 +3079,7 @@ function WAREHOUSE:_CheckRequestConsistancy(queue) -- TODO: May needs refinement if warehouse is on land and requestor is ship in harbour?! if (request.category==Airbase.Category.SHIP or self.category==Airbase.Category.SHIP) then self:E("ERROR: Incorrect request. Ground asset requested but warehouse or requestor is SHIP!") - valid=false + --valid=false end if asset_train then @@ -3042,11 +3090,13 @@ function WAREHOUSE:_CheckRequestConsistancy(queue) valid=false end else - -- Check if there is a valid path on road. - local hasroad=self:HasConnectionRoad(request.warehouse) - if not hasroad then - self:E("ERROR: Incorrect request. No valid path on road for ground assets!") - valid=false + if self.warehouse:GetName()~=request.warehouse.warehouse:GetName() then + -- Check if there is a valid path on road. + local hasroad=self:HasConnectionRoad(request.warehouse) + if not hasroad then + self:E("ERROR: Incorrect request. No valid path on road for ground assets!") + valid=false + end end end elseif asset_naval then diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index b607b4643..d5bff0bc0 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -1605,7 +1605,7 @@ end -- RouteToZone( GroundGroup, ZoneList[1] ) -- function CONTROLLABLE:TaskFunction( FunctionString, ... ) - self:F2( { FunctionString, arg } ) + self:E({TaskFunction=FunctionString, arguments=arg}) local DCSTask @@ -1616,17 +1616,12 @@ function CONTROLLABLE:TaskFunction( FunctionString, ... ) local ArgumentKey = '_' .. tostring( arg ):match("table: (.*)") self:SetState( self, ArgumentKey, arg ) DCSScript[#DCSScript+1] = "local Arguments = MissionControllable:GetState( MissionControllable, '" .. ArgumentKey .. "' ) " - --DCSScript[#DCSScript+1] = "MissionControllable:ClearState( MissionControllable, '" .. ArgumentKey .. "' ) " DCSScript[#DCSScript+1] = FunctionString .. "( MissionControllable, unpack( Arguments ) )" else DCSScript[#DCSScript+1] = FunctionString .. "( MissionControllable )" end - DCSTask = self:TaskWrappedAction( - self:CommandDoScript( - table.concat( DCSScript ) - ) - ) + DCSTask = self:TaskWrappedAction(self:CommandDoScript(table.concat( DCSScript ))) self:T( DCSTask ) diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index 8b7f34a26..2e088d308 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -1606,8 +1606,7 @@ end --- Returns true if the first unit of the GROUP is in the air. -- @param Wrapper.Group#GROUP self --- @return #boolean true if in the first unit of the group is in the air. --- @return #nil The GROUP is not existing or not alive. +-- @return #boolean true if in the first unit of the group is in the air or #nil if the GROUP is not existing or not alive. function GROUP:InAir() self:F2( self.GroupName )