Files
OpenRA/mods/ra/maps/allies-07/allies07.lua
2018-09-27 16:04:17 +02:00

223 lines
7.0 KiB
Lua

--[[
Copyright 2007-2018 The OpenRA Developers (see AUTHORS)
This file is part of OpenRA, which is free software. It is made
available to you under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version. For more
information, see COPYING.
]]
DestroySubPensTriggerActivator = { Spen1, Spen2, Spen3, Spen4, Spen5 }
ClearSubActivityTriggerActivator = { Sub1, Sub2, Sub3, Sub4, Sub5, Sub6, Sub7, Sub8, Sub9, Sub10, Sub11, Sub12, Sub13, Sub14, Sub15, Sub16, Sub17 }
AlliedGunboats = { "pt", "pt", "pt" }
BeachRifles = { BeachRifle1, BeachRifle2, BeachRifle3, BeachRifle4 }
lstReinforcements =
{
first =
{
actors = { "mcv", "jeep", "2tnk", "2tnk" },
entryPath = { AlliedMCVEntry.Location, Unload1.Location },
exitPath = { AlliedMCVEntry.Location }
},
second =
{
actors = { "jeep", "2tnk", "e1", "e1", "e1" },
entryPath = { AlliedMCVEntry.Location, Unload1.Location },
exitPath = { AlliedMCVEntry.Location }
}
}
if Map.LobbyOption("difficulty") == "easy" then
ActivateAIDelay = DateTime.Minutes(1)
else
ActivateAIDelay = DateTime.Seconds(30)
end
RaidingParty = { "3tnk", "3tnk", "v2rl", "e1", "e2"}
BaseRaidDelay1 = { DateTime.Minutes(1), DateTime.Minutes(2) }
BaseRaidDelay2 = { DateTime.Minutes(3), DateTime.Minutes(4) }
RaidOnePath = { RaidOneEntry.Location, RaidOneLanding.Location }
RaidTwoPath = { RaidTwoEntry.Location, RaidTwoLanding.Location }
StartTimer = false
TimerColor = Player.GetPlayer("USSR").Color
TimerTicks = DateTime.Minutes(10)
ticked = TimerTicks
StartTimerDelay = DateTime.Minutes(5)
InitialAlliedReinforcements = function()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Reinforcements.Reinforce(greece, AlliedGunboats, { GunboatEntry.Location, waypoint42.Location }, 2)
Media.PlaySpeechNotification(greece, "ReinforcementsArrived")
local reinforcement = lstReinforcements.first
Reinforcements.ReinforceWithTransport(greece, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
end)
end
BeachRunners = function()
Trigger.AfterDelay(DateTime.Seconds(7), function()
Utils.Do(BeachRifles, function(actor)
actor.Move(BeachRifleDestination.Location)
end)
end)
end
SecondAlliedLanding = function()
Trigger.AfterDelay(DateTime.Minutes(1), function()
Media.PlaySpeechNotification(greece, "ReinforcementsArrived")
local reinforcement = lstReinforcements.second
Reinforcements.ReinforceWithTransport(greece, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
end)
end
CaptureRadarDome = function()
Trigger.OnKilled(RadarDome, function()
greece.MarkFailedObjective(CaptureRadarDomeObj)
end)
Trigger.OnCapture(RadarDome, function()
greece.MarkCompletedObjective(CaptureRadarDomeObj)
BaseRaids()
end)
end
BaseRaids = function()
if Map.LobbyOption("difficulty") == "easy" then
return
else
Trigger.AfterDelay(Utils.RandomInteger(BaseRaidDelay1[1], BaseRaidDelay1[2]), function()
local raiders = Reinforcements.ReinforceWithTransport(ussr, "lst", RaidingParty, RaidOnePath, { RaidOneEntry.Location })[2]
Utils.Do(raiders, function(a)
Trigger.OnAddedToWorld(a, function()
a.AttackMove(PlayerBase.Location)
IdleHunt(a)
end)
end)
end)
Trigger.AfterDelay(Utils.RandomInteger(BaseRaidDelay2[1], BaseRaidDelay2[2]), function()
local raiders = Reinforcements.ReinforceWithTransport(ussr, "lst", RaidingParty, RaidTwoPath, { RaidTwoEntry.Location })[2]
Utils.Do(raiders, function(a)
Trigger.OnAddedToWorld(a, function()
a.AttackMove(PlayerBase.Location)
IdleHunt(a)
end)
end)
end)
end
end
StartTimerFunction = function()
if Map.LobbyOption("difficulty") == "hard" then
StartTimer = true
Media.PlaySpeechNotification(greece, "TimerStarted")
end
end
FinishTimer = function()
for i = 0, 5, 1 do
local c = TimerColor
if i % 2 == 0 then
c = HSLColor.White
end
Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("Enemy approaching", c) end)
end
Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end)
end
BattalionWays =
{
{ HardEntry1.Location, HardLanding1.Location },
{ HardEntry2.Location, HardLanding2.Location },
{ HardEntry3.Location, HardLanding3.Location },
{ HardEntry4.Location, HardLanding4.Location },
{ HardEntry5.Location, HardLanding5.Location },
{ HardEntry6.Location, HardLanding6.Location }
}
SendArmoredBattalion = function()
Media.PlaySpeechNotification(greece, "EnemyUnitsApproaching")
Utils.Do(BattalionWays, function(way)
local units = { "3tnk", "3tnk", "3tnk", "4tnk", "4tnk" }
local armor = Reinforcements.ReinforceWithTransport(ussr, "lst", units , way, { way[2], way[1] })[2]
Utils.Do(armor, function(a)
Trigger.OnAddedToWorld(a, function()
a.AttackMove(PlayerBase.Location)
IdleHunt(a)
end)
end)
end)
end
DestroySubPensCompleted = function()
greece.MarkCompletedObjective(DestroySubPens)
end
ClearSubActivityCompleted = function()
greece.MarkCompletedObjective(ClearSubActivity)
end
Tick = function()
ussr.Cash = 5000
badguy.Cash = 500
if StartTimer then
if ticked > 0 then
UserInterface.SetMissionText("Soviet armored battalion arrives in " .. Utils.FormatTime(ticked), TimerColor)
ticked = ticked - 1
elseif ticked == 0 then
FinishTimer()
SendArmoredBattalion()
ticked = ticked - 1
end
end
if greece.HasNoRequiredUnits() then
ussr.MarkCompletedObjective(BeatAllies)
end
end
WorldLoaded = function()
greece = Player.GetPlayer("Greece")
ussr = Player.GetPlayer("USSR")
badguy = Player.GetPlayer("BadGuy")
Camera.Position = DefaultCameraPosition.CenterPosition
CaptureRadarDomeObj = greece.AddPrimaryObjective("Capture the Radar Dome.")
DestroySubPens = greece.AddPrimaryObjective("Destroy all Soviet Sub Pens")
ClearSubActivity = greece.AddSecondaryObjective("Clear the area of all sub activity")
BeatAllies = ussr.AddPrimaryObjective("Defeat the Allied forces.")
Trigger.OnObjectiveCompleted(greece, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(greece, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnPlayerLost(greece, function()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(greece, "MissionFailed")
end)
end)
Trigger.OnPlayerWon(greece, function()
Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(greece, "MissionAccomplished")
end)
end)
PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr })
InitialAlliedReinforcements()
SecondAlliedLanding()
BeachRunners()
CaptureRadarDome()
Trigger.AfterDelay(ActivateAIDelay, ActivateAI)
Trigger.AfterDelay(StartTimerDelay, StartTimerFunction)
Trigger.OnAllRemovedFromWorld(DestroySubPensTriggerActivator, DestroySubPensCompleted)
Trigger.OnAllRemovedFromWorld(ClearSubActivityTriggerActivator, ClearSubActivityCompleted)
end