115 lines
3.6 KiB
Lua
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
|