From d8dc953252b623f134fdba71771481cb073fae30 Mon Sep 17 00:00:00 2001 From: Applevangelist Date: Thu, 5 Feb 2026 12:20:34 +0100 Subject: [PATCH] xx --- Moose Development/Moose/Core/Event.lua | 15 +- Moose Development/Moose/Core/Point.lua | 19 -- .../Moose/Functional/Warehouse.lua | 233 +++++++----------- .../Moose/Functional/ZoneGoalCargo.lua | 2 +- Moose Development/Moose/Ops/OpsTransport.lua | 2 +- 5 files changed, 106 insertions(+), 165 deletions(-) diff --git a/Moose Development/Moose/Core/Event.lua b/Moose Development/Moose/Core/Event.lua index aa72e9766..9b3d96f15 100644 --- a/Moose Development/Moose/Core/Event.lua +++ b/Moose Development/Moose/Core/Event.lua @@ -184,6 +184,7 @@ EVENT = { ClassName = "EVENT", ClassID = 0, MissionEnd = false, + CreateMarkCoordinateOnEvent = false, } world.event.S_EVENT_NEW_CARGO = world.event.S_EVENT_MAX + 1000 @@ -1345,7 +1346,9 @@ function EVENT:onEvent( Event ) Event.IniDCSUnit = Event.initiator Event.IniDCSUnitName = ( Event.IniDCSUnit and Event.IniDCSUnit.getName ) and Event.IniDCSUnit:getName() or "Scenery no name "..math.random(1,20000) Event.IniUnitName = Event.IniDCSUnitName - Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator ) + local ID = (Event.IniDCSUnit and Event.IniDCSUnit.getID) and Event.IniDCSUnit:getID() or Event.IniDCSUnitName + Event.IniUnit = (_SCENERY ~= nil) and _SCENERY[ID] or nil + --Event.IniUnit = SCENERY:Register( Event.IniDCSUnitName, Event.initiator ) Event.IniCategory = (Event.IniDCSUnit and Event.IniDCSUnit.getDesc ) and Event.IniDCSUnit:getDesc().category Event.IniTypeName = (Event.initiator and Event.initiator.isExist and Event.initiator:isExist() and Event.IniDCSUnit and Event.IniDCSUnit.getTypeName) and Event.IniDCSUnit:getTypeName() or "SCENERY" @@ -1449,11 +1452,11 @@ function EVENT:onEvent( Event ) Event.TgtDCSUnitName = Event.TgtDCSUnit.getName and Event.TgtDCSUnit:getName() or nil if Event.TgtDCSUnitName~=nil then Event.TgtUnitName = Event.TgtDCSUnitName - Event.TgtUnit = SCENERY:Register( Event.TgtDCSUnitName, Event.target ) + local ID = (Event.TgtDCSUnit and Event.TgtDCSUnit.getID) and Event.TgtDCSUnit:getID() or Event.TgtDCSUnitName + --Event.TgtUnit = SCENERY:Register( Event.TgtDCSUnitName, Event.target ) + Event.TgtUnit = (_SCENERY ~= nil) and _SCENERY[ID] or nil Event.TgtCategory = Event.TgtDCSUnit:getDesc().category Event.TgtTypeName = Event.TgtDCSUnit:getTypeName() - --self:I("Event Registered for Scenery Object ".. Event.TgtDCSUnitName) - --UTILS.PrintTableToLog(Event.TgtUnit) end end end @@ -1492,7 +1495,9 @@ function EVENT:onEvent( Event ) if Event.idx then Event.MarkID=Event.idx Event.MarkVec3=Event.pos - Event.MarkCoordinate=COORDINATE:NewFromVec3(Event.pos) + if self.CreateMarkCoordinateOnEvent == true then + Event.MarkCoordinate=COORDINATE:NewFromVec3(Event.pos) + end Event.MarkText=Event.text Event.MarkCoalition=Event.coalition Event.IniCoalition=Event.coalition diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index ee2b0c6ce..8d4a3189c 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -3725,25 +3725,6 @@ do -- COORDINATE local ModeA2A = nil - --[[ - if Task then - if Task:IsInstanceOf( TASK_A2A ) then - ModeA2A = true - else - if Task:IsInstanceOf( TASK_A2G ) then - ModeA2A = false - else - if Task:IsInstanceOf( TASK_CARGO ) then - ModeA2A = false - end - if Task:IsInstanceOf( TASK_CAPTURE_ZONE ) then - ModeA2A = false - end - end - end - end - --]] - if ModeA2A == nil then local IsAir = Controllable and ( Controllable:IsAirPlane() or Controllable:IsHelicopter() ) or false if IsAir then diff --git a/Moose Development/Moose/Functional/Warehouse.lua b/Moose Development/Moose/Functional/Warehouse.lua index 6db991fd6..be917fb0f 100644 --- a/Moose Development/Moose/Functional/Warehouse.lua +++ b/Moose Development/Moose/Functional/Warehouse.lua @@ -4605,6 +4605,14 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request) end +function WAREHOUSE:_CallbackLoaded() + MESSAGE:New("TaskEmbarking",30,"Task"):ToAll() +end + +function WAREHOUSE:_CallbackUnloaded() + MESSAGE:New("TaskDisembarking",30,"Task"):ToAll() +end + --- On after "RequestSpawned" event. Initiates the transport of the assets to the requesting warehouse. -- @param #WAREHOUSE self -- @param #string From From state. @@ -4616,7 +4624,7 @@ end function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet, TransportGroupSet) -- General type and category. - local _cargotype=Request.cargoattribute --#WAREHOUSE.Attribute + local _cargotype=Request.cargoattribute --#WAREHOUSE.Attribute local _cargocategory=Request.cargocategory --DCS#Group.Category -- Add groups to pending item. @@ -4712,57 +4720,35 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet or Request.transporttype==WAREHOUSE.TransportType.ARMEDSHIP or Request.transporttype==WAREHOUSE.TransportType.WARSHIP then _boardradius=6000 end - - -- Empty cargo group set. - local CargoGroups=SET_CARGO:New() - - -- Add cargo groups to set. - for _,_group in pairs(CargoGroupSet:GetSetObjects()) do - - -- Find asset belonging to this group. - local asset=self:FindAssetInDB(_group) - -- New cargo group object. - local cargogroup=CARGO_GROUP:New(_group, _cargotype,_group:GetName(),_boardradius, asset.loadradius) - - -- Set weight for this group. - cargogroup:SetWeight(asset.weight) - - -- Add group to group set. - CargoGroups:AddCargo(cargogroup) - - end - + ------------------------ -- Create Dispatchers -- ------------------------ -- Cargo dispatcher. - local CargoTransport --AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER + local CargoTransport --Ops.Auftrag#AUFTRAG - if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE then + if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE or Request.transporttype==WAREHOUSE.TransportType.HELICOPTER then -- Pickup and deploy zones. - local PickupAirbaseSet = SET_ZONE:New():AddZone(ZONE_AIRBASE:New(self.airbase:GetName())) - local DeployAirbaseSet = SET_ZONE:New():AddZone(ZONE_AIRBASE:New(Request.airbase:GetName())) + local PickupZone = ZONE_AIRBASE:New(self.airbase:GetName()) + local DeployZone = ZONE_AIRBASE:New(Request.airbase:GetName()) + + local DropoffCoordinate = DeployZone:GetRandomCoordinate(50,200,{land.SurfaceType.LAND, land.SurfaceType.ROAD}) + local PickupCoordinate = PickupZone:GetRandomCoordinate(50,200,{land.SurfaceType.LAND, land.SurfaceType.ROAD}) + + local Auftrag = AUFTRAG:NewTROOPTRANSPORT(CargoGroupSet,DropoffCoordinate,PickupCoordinate,500) - -- Define dispatcher for this task. - CargoTransport = AI_CARGO_DISPATCHER_AIRPLANE:New(TransportGroupSet, CargoGroups, PickupAirbaseSet, DeployAirbaseSet) - - -- Set home zone. - CargoTransport:SetHomeZone(ZONE_AIRBASE:New(self.airbase:GetName())) - - elseif Request.transporttype==WAREHOUSE.TransportType.HELICOPTER then - - -- Pickup and deploy zones. - local PickupZoneSet = SET_ZONE:New():AddZone(self.spawnzone) - local DeployZoneSet = SET_ZONE:New():AddZone(Request.warehouse.spawnzone) - - -- Define dispatcher for this task. - CargoTransport = AI_CARGO_DISPATCHER_HELICOPTER:New(TransportGroupSet, CargoGroups, PickupZoneSet, DeployZoneSet) - - -- Home zone. - CargoTransport:SetHomeZone(self.spawnzone) + CargoGroupSet:SetProperty("WAREHOUSE_REQUEST",Request) + for _,_Group in pairs (TransportGroupSet.Set) do + local FlightGroup = FLIGHTGROUP:New(_Group) + FlightGroup:AddMission(Auftrag) + Auftrag:AddOpsGroup(FlightGroup) + FlightGroup:SetHomebase(self.airbase) + end + CargoTransport=Auftrag + elseif Request.transporttype==WAREHOUSE.TransportType.APC then -- Pickup and deploy zones. @@ -4824,8 +4810,6 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet deployinner=20 end end - CargoTransport:SetPickupRadius(pickupouter, pickupinner) - CargoTransport:SetDeployRadius(deployouter, deployinner) -- Adjust carrier units. This has to come AFTER the dispatchers have been defined because they set the cargobay free weight! @@ -4851,107 +4835,77 @@ function WAREHOUSE:onafterRequestSpawned(From, Event, To, Request, CargoGroupSet -- Dispatcher Event Functions -- -------------------------------- - --- Function called after carrier picked up something. - function CargoTransport:OnAfterPickedUp(From, Event, To, Carrier, PickupZone) - + --- Function called when cargo is loading. + function CargoTransport:OnBeforeExecuting(From,Event,To) + -- Cargo loaded -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE - - -- Debug message. - local text=string.format("Carrier group %s picked up at pickup zone %s.", Carrier:GetName(), PickupZone:GetName()) - warehouse:T(warehouse.lid..text) - + local opsgroups = CargoTransport:GetOpsGroups() + + for _,_group in pairs(opsgroups) do + + local Carrier = _group:GetGroup() + local Element = Carrier:GetUnit(1) + local warehouse=Carrier:GetProperty("WAREHOUSE") --#WAREHOUSE + + for _,Cargo in pairs(CargoGroupSet.Set) do + + -- Debug message. + local text=string.format("Carrier group %s loaded cargo %s into unit %s in pickup zone", Carrier:GetName(), Cargo:GetName(), Element.UnitName) + warehouse:T(warehouse.lid..text) + + -- Get cargo group object. + local group=Cargo --Wrapper.Group#GROUP + + -- Get request. + local request = CargoGroupSet:GetProperty("WAREHOUSE_REQUEST") + + -- Add cargo group to this carrier. + table.insert(request.carriercargo[Element.UnitName], warehouse:_GetNameWithOut(Cargo:GetName())) + + end + end end - - --- Function called if something was deployed. - function CargoTransport:OnAfterDeployed(From, Event, To, Carrier, DeployZone) - - -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE - - -- Debug message. - -- TODO: Depoloy zone is nil! - --local text=string.format("Carrier group %s deployed at deploy zone %s.", Carrier:GetName(), DeployZone:GetName()) - --warehouse:T(warehouse.lid..text) - - end - - --- Function called if carrier group is going home. - function CargoTransport:OnAfterHome(From, Event, To, Carrier, Coordinate, Speed, Height, HomeZone) - - -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE - - -- Debug message. - local text=string.format("Carrier group %s going home to zone %s.", Carrier:GetName(), HomeZone:GetName()) - warehouse:T(warehouse.lid..text) - - end - - --- Function called when a carrier unit has loaded a cargo group. - function CargoTransport:OnAfterLoaded(From, Event, To, Carrier, Cargo, CarrierUnit, PickupZone) - - -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE - - -- Debug message. - local text=string.format("Carrier group %s loaded cargo %s into unit %s in pickup zone %s", Carrier:GetName(), Cargo:GetName(), CarrierUnit:GetName(), PickupZone:GetName()) - warehouse:T(warehouse.lid..text) - - -- Get cargo group object. - local group=Cargo:GetObject() --Wrapper.Group#GROUP - - -- Get request. - local request=warehouse:_GetRequestOfGroup(group, warehouse.pending) - - -- Add cargo group to this carrier. - table.insert(request.carriercargo[CarrierUnit:GetName()], warehouse:_GetNameWithOut(Cargo:GetName())) - - end - + --- Function called when cargo has arrived and was unloaded. - function CargoTransport:OnAfterUnloaded(From, Event, To, Carrier, Cargo, CarrierUnit, DeployZone) - + function CargoTransport:OnBeforeDone(From,Event,To) + + -- Cargo unloading -- Get warehouse state. - local warehouse=Carrier:GetState(Carrier, "WAREHOUSE") --#WAREHOUSE + local opsgroups = CargoTransport:GetOpsGroups() + + for _,_group in pairs(opsgroups) do + + local Carrier = _group:GetGroup() + local Element = Carrier:GetUnit(1) + local warehouse=Carrier:GetProperty("WAREHOUSE") --#WAREHOUSE + + for _,Cargo in pairs(CargoGroupSet.Set) do - -- Get group obejet. - local group=Cargo:GetObject() --Wrapper.Group#GROUP - - -- Debug message. - local text=string.format("Cargo group %s was unloaded from carrier unit %s.", tostring(group:GetName()), tostring(CarrierUnit:GetName())) - warehouse:T(warehouse.lid..text) - - -- Load the cargo in the warehouse. - --Cargo:Load(warehouse.warehouse) - - -- Trigger Arrived event. - warehouse:Arrived(group) + -- Debug message. + local text=string.format("Cargo group %s was unloaded from carrier unit", tostring(Element:GetName())) + warehouse:T(warehouse.lid..text) + + -- Trigger Arrived event. + warehouse:Arrived(Cargo) + + end + + function _group:OnAfterLanded(From,Event,To,airbase) + local mybase = warehouse.airbasename + if airbase:GetName() == mybase then + -- 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.lid..text) + + -- Call arrived event for carrier. + warehouse:__Arrived(1, Carrier) + end + end + + end end - --- 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: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.lid..text) - - -- Call arrived event for carrier. - warehouse:__Arrived(1, Carrier) - - end - - -- Start dispatcher. - CargoTransport:__Start(5) - end ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -5453,7 +5407,8 @@ function WAREHOUSE:onafterAssetSpawned(From, Event, To, group, asset, request) end -- Set warehouse state. - group:SetState(group, "WAREHOUSE", self) + --group:SetState(group, "WAREHOUSE", self) + group:SetProperty("WAREHOUSE",self) -- Check if all assets groups are spawned and trigger events. local n=0 diff --git a/Moose Development/Moose/Functional/ZoneGoalCargo.lua b/Moose Development/Moose/Functional/ZoneGoalCargo.lua index 10b91e12f..367202261 100644 --- a/Moose Development/Moose/Functional/ZoneGoalCargo.lua +++ b/Moose Development/Moose/Functional/ZoneGoalCargo.lua @@ -23,7 +23,7 @@ do -- ZoneGoal - -- @type ZONE_GOAL_CARGO + --- @type ZONE_GOAL_CARGO -- @extends Functional.ZoneGoal#ZONE_GOAL diff --git a/Moose Development/Moose/Ops/OpsTransport.lua b/Moose Development/Moose/Ops/OpsTransport.lua index f5c8e84f2..4a280a9e4 100644 --- a/Moose Development/Moose/Ops/OpsTransport.lua +++ b/Moose Development/Moose/Ops/OpsTransport.lua @@ -511,7 +511,7 @@ function OPSTRANSPORT:New(CargoGroups, PickupZone, DeployZone) -- @param Ops.OpsGroup#OPSGROUP OpsGroupCarrier Carrier OPSGROUP that unloaded the cargo. - --TODO: Psydofunctions + --TODO: Pseudofunctions -- Call status update. self:__StatusUpdate(-1)