Add Soviet 11a

This commit is contained in:
Smittytron
2021-02-15 22:20:48 -06:00
committed by reaperrr
parent e161d9daa7
commit ca2f966c3b
7 changed files with 1309 additions and 0 deletions

View File

@@ -0,0 +1,242 @@
--[[
Copyright 2007-2021 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.
]]
FirstPatrolActors = { Cruiser1, Gunboat1, Gunboat2 }
PatrolA = { Rocket1, Rocket2 }
PatrolB = { Rocket3, Rocket4 }
PatrolC = { Rocket5, Rocket6 }
PatrolPathA = { RocketPath1.Location, RocketPath2.Location }
PatrolPathB = { RocketPath3.Location, RocketPath4.Location }
PatrolPathC = { RocketPath5.Location, RocketPath6.Location }
Helipads = { Helipad1, Helipad2, Helipad3, Helipad4 }
HeliType = { "heli" }
DestroyerSquad = { "dd", "dd" }
DestroyerDelays =
{
easy = 4,
normal = 3,
hard = 2
}
TransportDelays =
{
easy = 6,
normal = 5,
hard = 4
}
AlliedShips =
{
easy = { "pt", "pt", "dd" },
normal = { "pt", "dd", "dd" },
hard = { "dd", "dd" , "dd" }
}
Helis = { }
PatrolWay = { ShipWaypoint1.Location, ShipWaypoint2.Location, ShipWaypoint3.Location, ShipWaypoint4.Location, ShipWaypoint5.Location }
TransportWays =
{
{ AlliedTransportEntry1.Location, AlliedTransportDrop1.Location },
{ AlliedTransportEntry2.Location, AlliedTransportDrop2.Location },
{ AlliedTransportEntry3.Location, AlliedTransportDrop3.Location }
}
SurpriseTransportWay = { SurpriseTransportEntry.Location, SurpriseTransportDrop.Location }
TransportUnits =
{
easy = { { "1tnk", "1tnk", "2tnk" }, { "arty", "jeep", "1tnk" } },
normal = { { "1tnk", "2tnk", "2tnk" }, { "arty", "arty", "1tnk" } },
hard = { { "2tnk", "2tnk", "2tnk" }, { "arty", "arty", "2tnk" } }
}
SurpriseTransportUnits =
{
easy = { "jeep", "jeep", "1tnk" },
normal = { "jeep", "jeep", "1tnk" },
hard = { "jeep", "1tnk", "2tnk" }
}
ProductionDelays =
{
easy = 3,
normal = 2,
hard = 1
}
IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end
SendCruiser = function()
if NavalYard2.IsDead or NavalYard2.Owner ~= Greece then
return
end
local boat = Reinforcements.Reinforce(Greece, { "ca" }, { CruiserEntry.Location })
Utils.Do(boat, function(ca)
ca.Move(DefaultCameraPosition.Location)
Trigger.OnKilled(ca, function()
Trigger.AfterDelay(DateTime.Minutes(3), SendCruiser)
end)
end)
end
WesternBoatAttacks = function()
if NavalYard3.IsDead or NavalYard3.Owner ~= Greece then
return
end
local boats = Reinforcements.Reinforce(Greece, DestroyerSquad, { ShipEntry.Location })
Utils.Do(boats, function(dd)
dd.Patrol(PatrolWay, false, 1)
IdleHunt(dd)
end)
Trigger.OnAllKilled(boats, function()
Trigger.AfterDelay(DateTime.Minutes(DestroyerDelays), WesternBoatAttacks)
end)
end
AlliedTransportReinforcements = function()
local way = Utils.Random(TransportWays)
local group = Utils.Random(TransportUnits)
local units = Reinforcements.ReinforceWithTransport(Greece, "lst", group, way, { way[2], way[1] } )[2]
Utils.Do(units, function(a)
Trigger.OnAddedToWorld(a, function()
a.AttackMove(PlayerBase.Location)
IdleHunt(a)
end)
end)
Trigger.AfterDelay(DateTime.Minutes(TransportDelays), AlliedTransportReinforcements)
end
BuildingsHealing = function()
local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == Greece and self.HasProperty("StartBuildingRepairs") end)
Utils.Do(buildings, function(actor)
Trigger.OnDamaged(actor, function(building)
if building.Owner == Greece and building.Health < building.MaxHealth * 3/4 then
building.StartBuildingRepairs()
end
end)
end)
end
StartPatrols = function()
Utils.Do(FirstPatrolActors, function(a)
if not a.IsDead then
a.Patrol(PatrolWay, false, 1)
IdleHunt(a)
end
end)
Utils.Do(PatrolA, function(a)
a.Patrol(PatrolPathA, true, 20)
end)
Utils.Do(PatrolB, function(b)
b.Patrol(PatrolPathB, true, 20)
end)
Utils.Do(PatrolC, function(c)
c.Patrol(PatrolPathC, true, 20)
end)
end
ProduceShips = function()
if NavalYard1.IsDead or NavalYard1.Owner ~= Greece then
return
end
Greece.Build(AlliedShips, function(ships)
Utils.Do(ships, function(a)
a.AttackMove(ShipWaypoint5.Location)
IdleHunt(a)
end)
end)
Trigger.AfterDelay(DateTime.Minutes(ProductionDelays), ProduceShips)
end
ProduceHelicopters = function()
if Utils.All(Helipads, function(a) return a.IsDead or a.Owner ~= Greece end) then
return
end
Greece.Build(HeliType, function(helis)
local heli = helis[1]
Helis[#Helis+1] = heli
Trigger.OnKilled(heli, ProduceHelicopters)
local alive = Utils.Where(Helis, function(y) return not y.IsDead end)
if #alive < 2 then
Trigger.AfterDelay(DateTime.Minutes(ProductionDelays), ProduceHelicopters)
end
InitializeAttackAircraft(heli, USSR)
end)
end
AlliedTransportAmbush = function()
Trigger.OnEnteredProximityTrigger(AmbushTrigger.CenterPosition, WDist.New(1024 * 7), function(a, id)
if a.Owner == USSR then
Trigger.RemoveProximityTrigger(id)
local way = SurpriseTransportWay
local group = SurpriseTransportUnits
local units = Reinforcements.ReinforceWithTransport(Greece, "lst", group, way, { way[2], way[1] } )[2]
Utils.Do(units, function(a)
Trigger.OnAddedToWorld(a, function()
a.AttackMove(PlayerBase.Location)
IdleHunt(a)
end)
end)
end
end)
end
BridgeTrigger = function()
TheBridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge1" end)[1]
Trigger.OnKilled(BridgeBarrel, function()
if not TheBridge.IsDead then
TheBridge.Kill()
end
end)
Trigger.OnEnteredProximityTrigger(BaseBridge.CenterPosition, WDist.FromCells(3), function(actor, id)
if actor.Owner == USSR and actor.Type ~= "badr" and actor.Type ~= "u2" and actor.Type ~= "camera.spyplane" then
Trigger.RemoveProximityTrigger(id)
if not BridgeTank.IsDead and not BridgeBarrel.IsDead and not TheBridge.IsDead then
BridgeTank.Attack(BridgeBarrel, true, true)
end
end
end)
end
ActivateAI = function()
local difficulty = Map.LobbyOption("difficulty")
TransportDelays = TransportDelays[difficulty]
DestroyerDelays = DestroyerDelays[difficulty]
TransportUnits = TransportUnits[difficulty]
ProductionDelays = ProductionDelays[difficulty]
AlliedShips = AlliedShips[difficulty]
SurpriseTransportUnits = SurpriseTransportUnits[difficulty]
BuildingsHealing()
AlliedTransportAmbush()
BridgeTrigger()
NavalYard1.IsPrimaryBuilding = true
Trigger.AfterDelay(DateTime.Minutes(1), StartPatrols)
Trigger.AfterDelay(DateTime.Minutes(3), AlliedTransportReinforcements)
Trigger.AfterDelay(DateTime.Minutes(4), WesternBoatAttacks)
Trigger.AfterDelay(DateTime.Minutes(5), ProduceShips)
Trigger.AfterDelay(DateTime.Minutes(6), ProduceHelicopters)
Trigger.AfterDelay(DateTime.Minutes(7), SendCruiser)
end