Files
OpenRA/mods/cnc/maps/gdi03/gdi03.lua
2015-07-12 17:27:11 +02:00

115 lines
3.6 KiB
Lua

SamSites = { Sam1, Sam2, Sam3, Sam4 }
Sam4Guards = { Sam4Guard0, Sam4Guard1, Sam4Guard2, Sam4Guard3, Sam4Guard4, HiddenBuggy }
NodInfantrySquad = { "e1", "e1", "e1", "e1", "e1" }
NodAttackRoutes = { { AttackWaypoint }, { AttackWaypoint }, { AttackRallypoint1, AttackRallypoint2, AttackWaypoint } }
InfantryReinforcements = { "e1", "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e2", "e2" }
JeepReinforcements = { "jeep", "jeep", "jeep" }
AttackPlayer = function()
if NodBarracks.IsDead or NodBarracks.Owner == player then
return
end
local after = function(team)
local count = 1
local route = Utils.Random(NodAttackRoutes)
Utils.Do(team, function(actor)
Trigger.OnIdle(actor, function()
if actor.Location == route[count].Location then
if not count == #route then
count = count + 1
else
Trigger.ClearAll(actor)
Trigger.AfterDelay(0, function()
Trigger.OnIdle(actor, actor.Hunt)
end)
end
else
actor.AttackMove(route[count].Location)
end
end)
end)
Trigger.OnAllKilled(team, function() Trigger.AfterDelay(DateTime.Seconds(15), AttackPlayer) end)
end
NodBarracks.Build(NodInfantrySquad, after)
end
SendReinforcements = function()
Reinforcements.Reinforce(player, JeepReinforcements, { VehicleStart.Location, VehicleStop.Location })
Reinforcements.Reinforce(player, InfantryReinforcements, { InfantryStart.Location, InfantryStop.Location }, 5)
Trigger.AfterDelay(DateTime.Seconds(3), function()
Reinforcements.Reinforce(player, { "mcv" }, { VehicleStart.Location, MCVwaypoint.Location })
InitialUnitsArrived = true
end)
Media.PlaySpeechNotification(player, "Reinforce")
end
WorldLoaded = function()
player = Player.GetPlayer("GDI")
enemy = Player.GetPlayer("Nod")
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)
nodObjective = enemy.AddPrimaryObjective("Destroy all GDI troops.")
gdiMainObjective = player.AddPrimaryObjective("Eliminate all Nod forces in the area.")
gdiAirSupportObjective = player.AddSecondaryObjective("Destroy the SAM sites to receive air support.")
Trigger.OnPlayerLost(player, function()
Media.PlaySpeechNotification(player, "Lose")
end)
Trigger.OnPlayerWon(player, function()
Media.PlaySpeechNotification(player, "Win")
end)
Trigger.OnAllKilled(SamSites, function()
player.MarkCompletedObjective(gdiAirSupportObjective)
Actor.Create("airstrike.proxy", true, { Owner = player })
end)
Utils.Do(Map.NamedActors, function(actor)
if actor.Owner == enemy and actor.HasProperty("StartBuildingRepairs") then
Trigger.OnDamaged(actor, function(building)
if building.Owner == enemy and building.Health < 0.25 * building.MaxHealth then
building.StartBuildingRepairs()
end
end)
end
end)
Trigger.OnDamaged(Sam4, function()
Utils.Do(Sam4Guards, function(sam4Guard)
if not sam4Guard.IsDead then
Trigger.OnIdle(sam4Guard, sam4Guard.Hunt)
end
end)
end)
InitialUnitsArrived = false
SendReinforcements()
Camera.Position = MCVwaypoint.CenterPosition
Trigger.AfterDelay(DateTime.Seconds(15), AttackPlayer)
end
Tick = function()
if InitialUnitsArrived then
if player.HasNoRequiredUnits() then
enemy.MarkCompletedObjective(nodObjective)
end
if enemy.HasNoRequiredUnits() then
player.MarkCompletedObjective(gdiMainObjective)
end
end
end