173 lines
4.7 KiB
Lua
173 lines
4.7 KiB
Lua
--[[
|
|
Copyright 2007-2019 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.
|
|
]]
|
|
|
|
if Map.LobbyOption("difficulty") == "easy" then
|
|
Rambo = "rmbo.easy"
|
|
elseif Map.LobbyOption("difficulty") == "hard" then
|
|
Rambo = "rmbo.hard"
|
|
else
|
|
Rambo = "rmbo"
|
|
end
|
|
|
|
GDIBuildings = {ConYard, PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, PowerPlant5, Barracks,
|
|
Silo1, Silo2, WeaponsFactory, CommCenter, GuardTower1, GuardTower2}
|
|
|
|
|
|
function RepairBuilding(building, attacker)
|
|
if not building.IsDead and building.Owner == enemy then
|
|
building.StartBuildingRepairs(enemy)
|
|
end
|
|
end
|
|
|
|
|
|
Mammoths = {Mammoth1, Mammoth2, Mammoth3}
|
|
Grenadiers = {Grenadier1, Grenadier2, Grenadier3, Grenadier4}
|
|
MediumTanks = {MediumTank1, MediumTank2}
|
|
Riflemen = {Rifleman1, Rifleman2, Rifleman3, Rifleman4}
|
|
|
|
MammothPatrolPath = {MammothWaypoint1.Location, MammothWaypoint2.Location}
|
|
RiflemenPatrolPath = {RiflemenWaypoint1.Location, RiflemenWaypoint2.Location}
|
|
|
|
DamageTrigger = false
|
|
|
|
|
|
function TankDamaged(tank, attacker)
|
|
if not DamageTrigger then
|
|
DamageTrigger = true
|
|
Utils.Do(Grenadiers, function(grenadier)
|
|
if not grenadier.IsDead then
|
|
grenadier.AttackMove(tank.Location)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
function GrenadierDamaged(grenadier, attacker)
|
|
if not DamageTrigger then
|
|
DamageTrigger = true
|
|
Utils.Do(MediumTanks, function(tank)
|
|
if not tank.IsDead then
|
|
tank.AttackMove(grenadier.Location)
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
InfantrySquad = {"e1", "e1", "e1", "e1", "e1"}
|
|
|
|
|
|
function MoveToNorthEntrance(squad)
|
|
Utils.Do(squad, function(unit)
|
|
if not unit.IsDead then
|
|
unit.AttackMove(NorthEntrance.Location)
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
function EnteredFromNorth(actor, id)
|
|
if actor.Owner == player then
|
|
Trigger.RemoveFootprintTrigger(id)
|
|
if not Barracks.IsDead and Barracks.Owner == enemy then
|
|
Barracks.Build(InfantrySquad, MoveToNorthEntrance)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function DeliverCommando()
|
|
Media.PlaySpeechNotification(player, "Reinforce")
|
|
units = Reinforcements.ReinforceWithTransport(player, 'tran.in', {Rambo}, {ChinookEntry.Location, ChinookTarget.Location}, {ChinookEntry.Location})
|
|
rambo = units[2][1]
|
|
Trigger.OnKilled(rambo, function(a, k)
|
|
player.MarkFailedObjective(keepRamboAliveObjective)
|
|
end)
|
|
Trigger.OnPlayerWon(player, function(player)
|
|
if not rambo.IsDead then
|
|
player.MarkCompletedObjective(keepRamboAliveObjective)
|
|
end
|
|
end)
|
|
end
|
|
|
|
|
|
function WorldLoaded()
|
|
player = Player.GetPlayer("Nod")
|
|
enemy = Player.GetPlayer("GDI")
|
|
|
|
enemy.Cash = 10000
|
|
|
|
Camera.Position = DefaultCameraPosition.CenterPosition
|
|
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)
|
|
|
|
Trigger.OnPlayerWon(player, function()
|
|
Media.PlaySpeechNotification(player, "Win")
|
|
end)
|
|
|
|
Trigger.OnPlayerLost(player, function()
|
|
Media.PlaySpeechNotification(player, "Lose")
|
|
end)
|
|
|
|
gdiObjective = enemy.AddPrimaryObjective("Eliminate all Nod forces in the area.")
|
|
warFactoryObjective = player.AddPrimaryObjective("Destroy or capture the Weapons Factory.")
|
|
destroyTanksObjective = player.AddPrimaryObjective("Destroy the Mammoth tanks in the R&D base.")
|
|
keepRamboAliveObjective = player.AddSecondaryObjective("Keep your Commando alive.")
|
|
|
|
Trigger.OnKilledOrCaptured(WeaponsFactory, function()
|
|
player.MarkCompletedObjective(warFactoryObjective)
|
|
end)
|
|
Trigger.OnAllKilled(Mammoths, function()
|
|
player.MarkCompletedObjective(destroyTanksObjective)
|
|
end)
|
|
|
|
Trigger.AfterDelay(DateTime.Seconds(1), DeliverCommando)
|
|
|
|
Utils.Do(Mammoths, function(mammoth)
|
|
mammoth.Stance = "HoldFire"
|
|
end)
|
|
|
|
Utils.Do(MediumTanks, function(tank)
|
|
Trigger.OnDamaged(tank, TankDamaged)
|
|
end)
|
|
|
|
Utils.Do(Grenadiers, function(grenadier)
|
|
Trigger.OnDamaged(grenadier, GrenadierDamaged)
|
|
end)
|
|
|
|
Utils.Do(GDIBuildings, function(building)
|
|
Trigger.OnDamaged(building, RepairBuilding)
|
|
end)
|
|
|
|
Trigger.OnEnteredFootprint({NorthEntrance.Location}, EnteredFromNorth)
|
|
|
|
Utils.Do(Riflemen, function(rifleman)
|
|
rifleman.Patrol(RiflemenPatrolPath)
|
|
end)
|
|
|
|
PatrollingMammoth.Patrol(MammothPatrolPath)
|
|
end
|
|
|
|
|
|
function Tick()
|
|
if DateTime.GameTime > 2 then
|
|
if player.HasNoRequiredUnits() then
|
|
enemy.MarkCompletedObjective(gdiObjective)
|
|
end
|
|
end
|
|
end
|