Files
OpenRA/mods/ra/maps/allies-04/allies04.lua
2016-08-21 18:34:29 +02:00

171 lines
4.5 KiB
Lua

ConvoyUnits =
{
{ "ftrk", "ftrk", "truk", "truk", "apc", "ftrk" },
{ "ftrk", "3tnk", "truk", "truk", "apc" },
{ "3tnk", "3tnk", "truk", "truk", "ftrk" }
}
ConvoyRallyPoints =
{
{ SovietEntry1.Location, SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally6.Location },
{ SovietEntry2.Location, SovietRally10.Location, SovietRally11.Location }
}
ConvoyDelays =
{
easy = { DateTime.Minutes(4), DateTime.Minutes(5) + DateTime.Seconds(20) },
normal = { DateTime.Minutes(2) + DateTime.Seconds(30), DateTime.Minutes(4) },
hard = { DateTime.Minutes(1) + DateTime.Seconds(30), DateTime.Minutes(2) + DateTime.Seconds(30) }
}
Convoys =
{
easy = 2,
normal = 3,
hard = 5
}
ParadropDelays =
{
easy = { DateTime.Seconds(40), DateTime.Seconds(90) },
normal = { DateTime.Seconds(30), DateTime.Seconds(70) },
hard = { DateTime.Seconds(20), DateTime.Seconds(50) }
}
ParadropWaves =
{
easy = 4,
normal = 6,
hard = 10
}
ParadropLZs = { ParadropPoint1.CenterPosition, ParadropPoint2.CenterPosition, ParadropPoint3.CenterPosition }
Paradropped = 0
Paradrop = function()
Trigger.AfterDelay(Utils.RandomInteger(ParadropDelay[1], ParadropDelay[2]), function()
local units = PowerProxy.SendParatroopers(Utils.Random(ParadropLZs))
Utils.Do(units, function(unit)
Trigger.OnAddedToWorld(unit, IdleHunt)
end)
Paradropped = Paradropped + 1
if Paradropped <= ParadropWaves[Map.LobbyOption("difficulty")] then
Paradrop()
end
end)
end
ConvoysSent = 0
SendConvoys = function()
Trigger.AfterDelay(Utils.RandomInteger(ConvoyDelay[1], ConvoyDelay[2]), function()
local path = Utils.Random(ConvoyRallyPoints)
local units = Reinforcements.Reinforce(ussr, Utils.Random(ConvoyUnits), { path[1] })
local lastWaypoint = path[#path]
Utils.Do(units, function(unit)
Trigger.OnAddedToWorld(unit, function()
if unit.Type == "truk" then
Utils.Do(path, function(waypoint)
unit.Move(waypoint)
end)
Trigger.OnIdle(unit, function()
unit.Move(lastWaypoint)
end)
else
unit.Patrol(path)
Trigger.OnIdle(unit, function()
unit.AttackMove(lastWaypoint)
end)
end
end)
end)
local id = Trigger.OnEnteredFootprint({ lastWaypoint }, function(a, id)
if a.Owner == ussr and Utils.Any(units, function(unit) return unit == a end) then
-- We are at our destination and thus don't care about other queued actions anymore
a.Stop()
a.Destroy()
if a.Type == "truk" then
player.MarkFailedObjective(DestroyConvoys)
end
end
end)
Trigger.OnAllRemovedFromWorld(units, function()
Trigger.RemoveFootprintTrigger(id)
ConvoysSent = ConvoysSent + 1
if ConvoysSent <= Convoys[Map.LobbyOption("difficulty")] then
SendConvoys()
else
player.MarkCompletedObjective(DestroyConvoys)
end
end)
Media.PlaySpeechNotification(player, "ConvoyApproaching")
end)
end
Tick = function()
if player.HasNoRequiredUnits() then
player.MarkFailedObjective(KillUSSR)
end
if ussr.HasNoRequiredUnits() then
player.MarkCompletedObjective(KillUSSR)
-- We don't care about future convoys anymore
player.MarkCompletedObjective(DestroyConvoys)
end
end
InitObjectives = function()
Trigger.OnObjectiveAdded(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end)
KillUSSR = player.AddPrimaryObjective("Destroy all Soviet units and buildings in this region.")
DestroyConvoys = player.AddSecondaryObjective("Eliminate all passing Soviet convoys.")
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()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(player, "MissionFailed")
end)
end)
Trigger.OnPlayerWon(player, function()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(player, "MissionAccomplished")
end)
end)
end
WorldLoaded = function()
player = Player.GetPlayer("Greece")
ussr = Player.GetPlayer("USSR")
Camera.Position = AlliedConyard.CenterPosition
InitObjectives()
local difficulty = Map.LobbyOption("difficulty")
ConvoyDelay = ConvoyDelays[difficulty]
ParadropDelay = ParadropDelays[difficulty]
PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr })
Paradrop()
SendConvoys()
Trigger.AfterDelay(0, ActivateAI)
end