Add allies04
This commit is contained in:
170
mods/ra/maps/allies-04/allies04.lua
Normal file
170
mods/ra/maps/allies-04/allies04.lua
Normal file
@@ -0,0 +1,170 @@
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user