Files
OpenRA/mods/ra/maps/allies-06a/allies06a.lua
2017-01-06 12:42:20 +01:00

221 lines
7.1 KiB
Lua

AlliedReinforcementsA = { "e1", "e1", "e1", "e1", "e1" }
AlliedReinforcementsB = { "e3", "e3", "e3", "e3", "e3" }
BadGuys = { BadGuy1, BadGuy2, BadGuy3 }
SovietDogPatrols =
{
{ Patrol_1_e1, Patrol_1_dog },
{ Patrol_2_e1, Patrol_2_dog },
{ Patrol_3_e1, Patrol_3_dog },
{ Patrol_4_e1, Patrol_4_dog }
}
SovietDogPatrolPaths =
{
{ Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location },
{ Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location },
{ Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location },
{ Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location }
}
Mammoths = { Mammoth1, Mammoth2, Mammoth3 }
SovietMammothPaths =
{
{ TnkPatrol1.Location, TnkPatrol2.Location,TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location, TnkPatrol8.Location },
{ TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location, TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location },
{ TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location }
}
SovietSubPath = { SubPatrol3_1.Location, SubPatrol3_2.Location, SubPatrol3_3.Location }
ParadropWaypoints =
{
easy = { UnitBStopLocation },
normal = { UnitBStopLocation, UnitAStopLocation },
hard = { UnitBStopLocation, MCVStopLocation, UnitAStopLocation }
}
SovietTechLabs = { TechLab1, TechLab2, TechLab3 }
TechLabCams = { TechCam1, TechCam2, TechCam3 }
GroupPatrol = function(units, waypoints, delay)
local i = 1
local stop = false
Utils.Do(units, function(unit)
Trigger.OnIdle(unit, function()
if stop then
return
end
if unit.Location == waypoints[i] then
local bool = Utils.All(units, function(actor) return actor.IsIdle end)
if bool then
stop = true
i = i + 1
if i > #waypoints then
i = 1
end
Trigger.AfterDelay(delay, function() stop = false end)
end
else
unit.AttackMove(waypoints[i])
end
end)
end)
end
InitialSovietPatrols = function()
-- Dog Patrols
for i = 1, 4 do
GroupPatrol(SovietDogPatrols[i], SovietDogPatrolPaths[i], DateTime.Seconds(5))
end
-- Mammoth Patrols
for i = 1, 3 do
Trigger.AfterDelay(DateTime.Seconds(6 * (i - 1)), function()
Trigger.OnIdle(Mammoths[i], function()
Mammoths[i].Patrol(SovietMammothPaths[i])
end)
end)
end
-- Sub Patrols
Patrol1Sub.Patrol({ SubPatrol1_1.Location, SubPatrol1_2.Location })
Patrol2Sub.Patrol({ SubPatrol2_1.Location, SubPatrol2_2.Location })
Patrol3Sub1.Patrol(SovietSubPath)
Patrol3Sub2.Patrol(SovietSubPath)
end
InitialAlliedReinforcements = function()
local camera = Actor.Create("Camera", true, { Owner = player, Location = DefaultCameraPosition.Location })
Trigger.AfterDelay(DateTime.Seconds(30), camera.Destroy)
Reinforcements.Reinforce(player, AlliedReinforcementsA, { AlliedEntry1.Location, UnitBStopLocation.Location }, 2)
Trigger.AfterDelay(DateTime.Seconds(2), function()
Reinforcements.Reinforce(player, AlliedReinforcementsB, { AlliedEntry2.Location, UnitAStopLocation.Location }, 2)
end)
Trigger.AfterDelay(DateTime.Seconds(5), function()
Reinforcements.Reinforce(player, { "mcv" }, { AlliedEntry3.Location, MCVStopLocation.Location })
end)
end
CaptureRadarDome = function()
Trigger.OnKilled(Radar, function()
player.MarkFailedObjective(CaptureRadarDomeObj)
end)
Trigger.OnCapture(Radar, function()
player.MarkCompletedObjective(CaptureRadarDomeObj)
end)
end
infiltrated = false
InfiltrateTechCenter = function()
Utils.Do(SovietTechLabs, function(a)
Trigger.OnInfiltrated(a, function()
if infiltrated then
return
end
infiltrated = true
DestroySovietsObj = player.AddPrimaryObjective("Destroy all Soviet buildings and units in the area.")
player.MarkCompletedObjective(InfiltrateTechCenterObj)
local Proxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr })
Utils.Do(ParadropWaypoints[Map.LobbyOption("difficulty")], function(waypoint)
Proxy.SendParatroopers(waypoint.CenterPosition, false, Facing.South)
end)
Proxy.Destroy()
end)
end)
Trigger.OnAllKilled(SovietTechLabs, function()
if not player.IsObjectiveCompleted(InfiltrateTechCenterObj) then
player.MarkFailedObjective(InfiltrateTechCenterObj)
end
end)
end
InfiltrateRef = function()
Trigger.OnInfiltrated(Refinery, function()
player.MarkCompletedObjective(InfiltrateRefObj)
end)
Trigger.OnKilled(Refinery, function()
if not player.IsObjectiveCompleted(InfiltrateRefObj) then
player.MarkFailedObjective(InfiltrateRefObj)
end
end)
end
Tick = function()
if DateTime.GameTime > DateTime.Seconds(10) and player.HasNoRequiredUnits() then
player.MarkFailedObjective(InfiltrateTechCenterObj)
end
if DestroySovietsObj and ussr.HasNoRequiredUnits() then
player.MarkCompletedObjective(DestroySovietsObj)
end
end
WorldLoaded = function()
player = Player.GetPlayer("Greece")
ussr = Player.GetPlayer("USSR")
Trigger.OnObjectiveAdded(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "MissionFailed")
end)
Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "MissionAccomplished")
end)
InfiltrateTechCenterObj = player.AddPrimaryObjective("Infiltrate one of the Soviet tech centers.")
CaptureRadarDomeObj = player.AddSecondaryObjective("Capture the Radar Dome at the shore.")
InfiltrateRefObj = player.AddSecondaryObjective("Infiltrate the Refinery for money.")
Camera.Position = DefaultCameraPosition.CenterPosition
if Map.LobbyOption("difficulty") ~= "hard" then
Utils.Do(TechLabCams, function(a)
Actor.Create("TECH.CAM", true, { Owner = player, Location = a.Location })
end)
if Map.LobbyOption("difficulty") == "easy" then
Actor.Create("Camera", true, { Owner = player, Location = Weapcam.Location })
end
end
Utils.Do(BadGuys, function(a)
a.AttackMove(MCVStopLocation.Location)
end)
Trigger.AfterDelay(DateTime.Seconds(1), function()
InitialAlliedReinforcements()
InitialSovietPatrols()
end)
Trigger.OnEnteredProximityTrigger(SovietMiniBaseCam.CenterPosition, WDist.New(1024 * 6), function(a, id)
if a.Owner == player then
Trigger.RemoveProximityTrigger(id)
local cam = Actor.Create("Camera", true, { Owner = player, Location = SovietMiniBaseCam.Location })
Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy)
end
end)
CaptureRadarDome()
InfiltrateTechCenter()
InfiltrateRef()
Trigger.AfterDelay(0, ActivateAI)
end