Files
OpenRA/mods/cnc/maps/gdi06/gdi06.lua

238 lines
6.2 KiB
Lua

IslandSamSites = { SAM01, SAM02 }
NodBase = { PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, PowerPlant5, Refinery, HandOfNod, Silo1, Silo2, Silo3, Silo4, ConYard, CommCenter }
FlameSquad = { FlameGuy1, FlameGuy2, FlameGuy3 }
FlameSquadRoute = { waypoint4.Location, waypoint12.Location, waypoint4.Location, waypoint6.Location }
FootPatrol1Squad = { MiniGunner1, MiniGunner2, RocketSoldier1 }
FootPatrol1Route = {
waypoint4.Location,
waypoint12.Location,
waypoint13.Location,
waypoint3.Location,
waypoint2.Location,
waypoint7.Location,
waypoint6.Location
}
FootPatrol2Squad = { MiniGunner3, MiniGunner4 }
FootPatrol2Route = {
waypoint14.Location,
waypoint16.Location
}
FootPatrol3Squad = { MiniGunner5, MiniGunner6 }
FootPatrol3Route = {
waypoint15.Location,
waypoint17.Location
}
FootPatrol4Route = {
waypoint4.Location,
waypoint5.Location
}
FootPatrol5Squad = { RocketSoldier2, RocketSoldier3, RocketSoldier4 }
FootPatrol5Route = {
waypoint4.Location,
waypoint12.Location,
waypoint13.Location,
waypoint8.Location,
waypoint9.Location,
}
Buggy1Route = {
waypoint6.Location,
waypoint7.Location,
waypoint2.Location,
waypoint8.Location,
waypoint9.Location,
waypoint8.Location,
waypoint2.Location,
waypoint7.Location
}
Buggy2Route = {
waypoint6.Location,
waypoint10.Location,
waypoint11.Location,
waypoint10.Location
}
HuntTriggerActivator = { SAM03, SAM04, SAM05, SAM06, LightTank1, LightTank2, LightTank3, Buggy1, Buggy2, Turret1, Turret2 }
AttackCellTriggerActivator = { CPos.New(57,26), CPos.New(56,26), CPos.New(57,25), CPos.New(56,25), CPos.New(57,24), CPos.New(56,24), CPos.New(57,23), CPos.New(56,23), CPos.New(57,22), CPos.New(56,22), CPos.New(57,21), CPos.New(56,21) }
AttackUnits = { LightTank2, LightTank3 }
KillCounter = 0
WorldLoaded = function()
player = Player.GetPlayer("GDI")
enemy = Player.GetPlayer("Nod")
civilian = Player.GetPlayer("Neutral")
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)
if Map.LobbyOption("difficulty") == "easy" then
CommandoType = "rmbo.easy"
KillCounterHuntThreshold = 30
elseif Map.LobbyOption("difficulty") == "hard" then
CommandoType = "rmbo.hard"
KillCounterHuntThreshold = 15
else
CommandoType = "rmbo"
KillCounterHuntThreshold = 20
end
destroyObjective = player.AddPrimaryObjective("Destroy the Nod ********.")
Trigger.OnKilled(Airfield, function()
player.MarkCompletedObjective(destroyObjective)
end)
Utils.Do(NodBase, function(structure)
Trigger.OnKilled(structure, function()
player.MarkCompletedObjective(destroyObjective)
end)
end)
Trigger.OnAllKilled(IslandSamSites, function()
TransportFlare = Actor.Create('flare', true, { Owner = player, Location = Flare.Location })
Reinforcements.ReinforceWithTransport(player, 'tran', nil, { lstStart.Location, TransportRally.Location })
end)
Trigger.OnKilled(CivFleeTrigger, function()
if not Civilian.IsDead then
Civilian.Move(CivHideOut.Location)
end
end)
Trigger.OnKilled(AttackTrigger2, function()
Utils.Do(FlameSquad, function(unit)
if not unit.IsDead then
unit.Patrol(FlameSquadRoute, false)
end
end)
end)
Trigger.OnEnteredFootprint(AttackCellTriggerActivator, function(a, id)
if a.Owner == player then
Utils.Do(AttackUnits, function(unit)
if not unit.IsDead then
unit.AttackMove(waypoint10.Location)
end
end)
Trigger.RemoveFootprintTrigger(id)
end
end)
Utils.Do(HuntTriggerActivator, function(unit)
Trigger.OnDamaged(unit, HuntTriggerFunction)
end)
Trigger.AfterDelay(5, NodKillCounter)
Utils.Do(FootPatrol1Squad, function(unit)
unit.Patrol(FootPatrol1Route, true)
end)
Utils.Do(FootPatrol2Squad, function(unit)
unit.Patrol(FootPatrol2Route, true, 50)
end)
Utils.Do(FootPatrol3Squad, function(unit)
unit.Patrol(FootPatrol3Route, true, 50)
end)
Utils.Do(FootPatrol5Squad, function(unit)
unit.Patrol(FootPatrol5Route, true, 50)
end)
AttackTrigger2.Patrol(FootPatrol4Route, true, 25)
LightTank1.Move(waypoint6.Location)
Buggy1.Patrol(Buggy1Route, true, 25)
Buggy2.Patrol(Buggy2Route, true, 25)
Camera.Position = UnitsRally.CenterPosition
Reinforce({ CommandoType })
end
Tick = function()
if DateTime.GameTime > DateTime.Seconds(5) and player.HasNoRequiredUnits() then
player.MarkFailedObjective(destroyObjective)
end
end
Reinforce = function(units)
Media.PlaySpeechNotification(player, "Reinforce")
ReinforceWithLandingCraft(units, lstStart.Location, lstEnd.Location, UnitsRally.Location)
end
ReinforceWithLandingCraft = function(units, transportStart, transportUnload, rallypoint)
local transport = Actor.Create("oldlst", true, { Owner = player, Facing = 0, Location = transportStart })
local subcell = 0
Utils.Do(units, function(a)
transport.LoadPassenger(Actor.Create(a, false, { Owner = transport.Owner, Facing = transport.Facing, Location = transportUnload, SubCell = subcell }))
subcell = subcell + 1
end)
transport.ScriptedMove(transportUnload)
transport.CallFunc(function()
Utils.Do(units, function()
local a = transport.UnloadPassenger()
a.IsInWorld = true
a.MoveIntoWorld(transport.Location - CVec.New(0, 1))
if rallypoint ~= nil then
a.Move(rallypoint)
end
end)
end)
transport.Wait(5)
transport.ScriptedMove(transportStart)
transport.Destroy()
end
NodKillCounter = function()
local enemyUnits = enemy.GetGroundAttackers()
Utils.Do(enemyUnits, function(unit)
Trigger.OnKilled(unit, function()
KillCounter = KillCounter + 1
if KillCounter >= KillCounterHuntThreshold then
HuntTriggerFunction()
end
end)
end)
end
HuntTriggerFunction = function()
local list = enemy.GetGroundAttackers()
Utils.Do(list, function(unit)
IdleHunt(unit)
end)
end
IdleHunt = function(unit)
if not unit.IsDead then
Trigger.OnIdle(unit, unit.Hunt)
end
end