diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index f00675d58a..369bf87239 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -172,3 +172,5 @@ LuaScripts: mods/ra/lua/team.lua mods/ra/lua/media.lua mods/ra/lua/mission.lua + mods/ra/lua/reinforcements.lua + mods/ra/lua/supportpowers.lua diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index bdccad9daa..857a1c26e8 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -152,3 +152,5 @@ LuaScripts: mods/ra/lua/team.lua mods/ra/lua/media.lua mods/ra/lua/mission.lua + mods/ra/lua/reinforcements.lua + mods/ra/lua/supportpowers.lua diff --git a/mods/ra/lua/mission.lua b/mods/ra/lua/mission.lua index ed26c90e0a..94fca80214 100644 --- a/mods/ra/lua/mission.lua +++ b/mods/ra/lua/mission.lua @@ -1,87 +1,5 @@ Mission = { } -Mission.PerformHelicopterInsertion = function(owner, helicopterName, passengerNames, enterPosition, unloadPosition, exitPosition) - local facing = { Map.GetFacing(WPos.op_Subtraction(unloadPosition, enterPosition), 0), "Int32" } - local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" } - local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude }) - local cargo = Actor.Trait(heli, "Cargo") - local passengers = { } - for i, passengerName in ipairs(passengerNames) do - local passenger = Actor.Create(passengerName, { AddToWorld = false, Owner = owner }) - cargo:Load(heli, passenger) - passengers[i] = passenger - end - Actor.HeliFly(heli, unloadPosition) - Actor.Turn(heli, 0) - Actor.HeliLand(heli, true) - Actor.UnloadCargo(heli, true) - Actor.Wait(heli, 125) - Actor.HeliFly(heli, exitPosition) - Actor.RemoveSelf(heli) - return heli, passengers -end - -Mission.PerformHelicopterExtraction = function(owner, helicopterName, passengers, enterPosition, loadPosition, exitPosition) - local facing = { Map.GetFacing(WPos.op_Subtraction(loadPosition, enterPosition), 0), "Int32" } - local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" } - local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude }) - local cargo = Actor.Trait(heli, "Cargo") - Actor.HeliFly(heli, loadPosition) - Actor.Turn(heli, 0) - Actor.HeliLand(heli, true) - Actor.WaitFor(heli, function() - for i, passenger in ipairs(passengers) do - if not cargo.Passengers:Contains(passenger) then - return false - end - end - return true - end) - Actor.Wait(heli, 125) - Actor.HeliFly(heli, exitPosition) - Actor.RemoveSelf(heli) - return heli -end - -Mission.Reinforce = function(owner, reinforcementNames, enterLocation, rallyPointLocation, interval, onCreateFunc) - local facing = { Map.GetFacing(CPos.op_Subtraction(rallyPointLocation, enterLocation), 0), "Int32" } - local ret = { } - for i = 1, #reinforcementNames do - local reinforcement = Actor.Create(reinforcementNames[i], { AddToWorld = false, Owner = owner, Location = enterLocation, Facing = facing }) - table.insert(ret, reinforcement) - OpenRA.RunAfterDelay((i - 1) * interval, function() - World:Add(reinforcement) - Actor.MoveNear(reinforcement, rallyPointLocation, 2) - if onCreateFunc ~= nil then - onCreateFunc(reinforcement) - end - end) - end - return ret -end - -Mission.Parabomb = function(owner, planeName, enterLocation, bombLocation) - local facing = { Map.GetFacing(CPos.op_Subtraction(bombLocation, enterLocation), 0), "Int32" } - local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } - local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) - Actor.Trait(plane, "AttackBomber"):SetTarget(bombLocation.CenterPosition) - Actor.Fly(plane, bombLocation.CenterPosition) - Actor.FlyOffMap(plane) - Actor.RemoveSelf(plane) -end - -Mission.Paradrop = function(owner, planeName, passengerNames, enterLocation, dropLocation) - local facing = { Map.GetFacing(CPos.op_Subtraction(dropLocation, enterLocation), 0), "Int32" } - local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } - local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) - Actor.FlyAttackCell(plane, dropLocation) - Actor.Trait(plane, "ParaDrop"):SetLZ(dropLocation) - local cargo = Actor.Trait(plane, "Cargo") - for i, passengerName in ipairs(passengerNames) do - cargo:Load(plane, Actor.Create(passengerName, { AddToWorld = false, Owner = owner })) - end -end - Mission.MissionOver = function(winners, losers, setWinStates) World:SetLocalPauseState(true) World:set_PauseStateLocked(true) diff --git a/mods/ra/lua/reinforcements.lua b/mods/ra/lua/reinforcements.lua new file mode 100644 index 0000000000..d9eb68b131 --- /dev/null +++ b/mods/ra/lua/reinforcements.lua @@ -0,0 +1,61 @@ +Reinforcements = { } + +Reinforcements.PerformHelicopterInsertion = function(owner, helicopterName, passengerNames, enterPosition, unloadPosition, exitPosition) + local facing = { Map.GetFacing(WPos.op_Subtraction(unloadPosition, enterPosition), 0), "Int32" } + local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" } + local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude }) + local cargo = Actor.Trait(heli, "Cargo") + local passengers = { } + for i, passengerName in ipairs(passengerNames) do + local passenger = Actor.Create(passengerName, { AddToWorld = false, Owner = owner }) + cargo:Load(heli, passenger) + passengers[i] = passenger + end + Actor.HeliFly(heli, unloadPosition) + Actor.Turn(heli, 0) + Actor.HeliLand(heli, true) + Actor.UnloadCargo(heli, true) + Actor.Wait(heli, 125) + Actor.HeliFly(heli, exitPosition) + Actor.RemoveSelf(heli) + return heli, passengers +end + +Reinforcements.PerformHelicopterExtraction = function(owner, helicopterName, passengers, enterPosition, loadPosition, exitPosition) + local facing = { Map.GetFacing(WPos.op_Subtraction(loadPosition, enterPosition), 0), "Int32" } + local altitude = { Actor.TraitInfo(helicopterName, "AircraftInfo").CruiseAltitude, "Int32" } + local heli = Actor.Create(helicopterName, { Owner = owner, CenterPosition = enterPosition, Facing = facing, Altitude = altitude }) + local cargo = Actor.Trait(heli, "Cargo") + Actor.HeliFly(heli, loadPosition) + Actor.Turn(heli, 0) + Actor.HeliLand(heli, true) + Actor.WaitFor(heli, function() + for i, passenger in ipairs(passengers) do + if not cargo.Passengers:Contains(passenger) then + return false + end + end + return true + end) + Actor.Wait(heli, 125) + Actor.HeliFly(heli, exitPosition) + Actor.RemoveSelf(heli) + return heli +end + +Reinforcements.Reinforce = function(owner, reinforcementNames, enterLocation, rallyPointLocation, interval, onCreateFunc) + local facing = { Map.GetFacing(CPos.op_Subtraction(rallyPointLocation, enterLocation), 0), "Int32" } + local ret = { } + for i = 1, #reinforcementNames do + local reinforcement = Actor.Create(reinforcementNames[i], { AddToWorld = false, Owner = owner, Location = enterLocation, Facing = facing }) + table.insert(ret, reinforcement) + OpenRA.RunAfterDelay((i - 1) * interval, function() + World:Add(reinforcement) + Actor.MoveNear(reinforcement, rallyPointLocation, 2) + if onCreateFunc ~= nil then + onCreateFunc(reinforcement) + end + end) + end + return ret +end \ No newline at end of file diff --git a/mods/ra/lua/supportpowers.lua b/mods/ra/lua/supportpowers.lua new file mode 100644 index 0000000000..bd6b4d50bc --- /dev/null +++ b/mods/ra/lua/supportpowers.lua @@ -0,0 +1,23 @@ +SupportPowers = { } + +SupportPowers.Parabomb = function(owner, planeName, enterLocation, bombLocation) + local facing = { Map.GetFacing(CPos.op_Subtraction(bombLocation, enterLocation), 0), "Int32" } + local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } + local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) + Actor.Trait(plane, "AttackBomber"):SetTarget(bombLocation.CenterPosition) + Actor.Fly(plane, bombLocation.CenterPosition) + Actor.FlyOffMap(plane) + Actor.RemoveSelf(plane) +end + +SupportPowers.Paradrop = function(owner, planeName, passengerNames, enterLocation, dropLocation) + local facing = { Map.GetFacing(CPos.op_Subtraction(dropLocation, enterLocation), 0), "Int32" } + local altitude = { Actor.TraitInfo(planeName, "AircraftInfo").CruiseAltitude, "Int32" } + local plane = Actor.Create(planeName, { Location = enterLocation, Owner = owner, Facing = facing, Altitude = altitude }) + Actor.FlyAttackCell(plane, dropLocation) + Actor.Trait(plane, "ParaDrop"):SetLZ(dropLocation) + local cargo = Actor.Trait(plane, "Cargo") + for i, passengerName in ipairs(passengerNames) do + cargo:Load(plane, Actor.Create(passengerName, { AddToWorld = false, Owner = owner })) + end +end \ No newline at end of file diff --git a/mods/ra/maps/allies-01-classic/mission.lua b/mods/ra/maps/allies-01-classic/mission.lua index b57014e5c3..c52bf6be7b 100644 --- a/mods/ra/maps/allies-01-classic/mission.lua +++ b/mods/ra/maps/allies-01-classic/mission.lua @@ -13,7 +13,7 @@ CivilianWait = 150 BaseAlertDelay = 300 SendInsertionHelicopter = function() - local heli, passengers = Mission.PerformHelicopterInsertion(player, InsertionHelicopterType, { TanyaType }, + local heli, passengers = Reinforcements.PerformHelicopterInsertion(player, InsertionHelicopterType, { TanyaType }, InsertionEntry.CenterPosition, InsertionLZ.CenterPosition, InsertionEntry.CenterPosition) tanya = passengers[1] Actor.OnKilled(tanya, TanyaKilled) @@ -21,7 +21,7 @@ end SendJeeps = function() Media.PlaySpeechNotification("ReinforcementsArrived") - Mission.Reinforce(player, JeepReinforcements, InsertionEntry.Location, InsertionLZ.Location, JeepInterval) + Reinforcements.Reinforce(player, JeepReinforcements, InsertionEntry.Location, InsertionLZ.Location, JeepInterval) end RunInitialActivities = function() @@ -59,7 +59,7 @@ LabGuardsKilled = function() end SendExtractionHelicopter = function() - local heli = Mission.PerformHelicopterExtraction(player, ExtractionHelicopterType, { einstein }, + local heli = Reinforcements.PerformHelicopterExtraction(player, ExtractionHelicopterType, { einstein }, SouthReinforcementsPoint.CenterPosition, ExtractionLZ.CenterPosition, ExtractionExitPoint.CenterPosition) Actor.OnKilled(heli, HelicopterDestroyed) Actor.OnRemovedFromWorld(heli, HelicopterExtractionCompleted) diff --git a/mods/ra/maps/allies-02-classic/mission.lua b/mods/ra/maps/allies-02-classic/mission.lua index b6c0bf1d37..1c2ae5d54d 100644 --- a/mods/ra/maps/allies-02-classic/mission.lua +++ b/mods/ra/maps/allies-02-classic/mission.lua @@ -1,5 +1,5 @@ -Reinforcements = { "e1", "e1", "e1", "jeep" } -ReinforcementsInterval = 15 +JeepReinforcements = { "e1", "e1", "e1", "jeep" } +JeepReinforcementsInterval = 15 TruckNames = { "truk", "truk", "truk" } TruckInterval = 25 TruckDelay = 75 @@ -15,7 +15,7 @@ end SendJeepReinforcements = function() Media.PlaySpeechNotification("ReinforcementsArrived") - Mission.Reinforce(player, Reinforcements, ReinforcementsEntryPoint.Location, ReinforcementsRallyPoint.Location, ReinforcementsInterval) + Reinforcements.Reinforce(player, JeepReinforcements, ReinforcementsEntryPoint.Location, ReinforcementsRallyPoint.Location, JeepReinforcementsInterval) end RunInitialActivities = function() @@ -49,7 +49,7 @@ end SendTrucks = function() Media.PlaySpeechNotification("ConvoyApproaching") OpenRA.RunAfterDelay(TruckDelay, function() - local trucks = Mission.Reinforce(france, TruckNames, TruckEntryPoint.Location, TruckRallyPoint.Location, TruckInterval, + local trucks = Reinforcements.Reinforce(france, TruckNames, TruckEntryPoint.Location, TruckRallyPoint.Location, TruckInterval, function(truck) Actor.Move(truck, TruckExitPoint.Location) Actor.RemoveSelf(truck) diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 630f97383f..245e507a6c 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -172,3 +172,5 @@ LuaScripts: mods/ra/lua/team.lua mods/ra/lua/media.lua mods/ra/lua/mission.lua + mods/ra/lua/reinforcements.lua + mods/ra/lua/supportpowers.lua diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index ffb690c447..ad335e599b 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -193,3 +193,5 @@ LuaScripts: mods/ra/lua/team.lua mods/ra/lua/media.lua mods/ra/lua/mission.lua + mods/ra/lua/reinforcements.lua + mods/ra/lua/supportpowers.lua