Split mission.lua into mission.lua, reinforcements.lua and supportpowers.lua. Fixes #4204

This commit is contained in:
ScottNZ
2013-12-06 14:20:45 +13:00
parent df7487ec01
commit 5799cfdcf2
9 changed files with 99 additions and 89 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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