1--[[ 2 Copyright 2007-2020 The OpenRA Developers (see AUTHORS) 3 This file is part of OpenRA, which is free software. It is made 4 available to you under the terms of the GNU General Public License 5 as published by the Free Software Foundation, either version 3 of 6 the License, or (at your option) any later version. For more 7 information, see COPYING. 8]] 9IntroAttackers = { IntroSoldier1, IntroSoldier2, IntroSoldier3 } 10 11BridgeShroudTrigger = { CPos.New(63, 71), CPos.New(64, 71), CPos.New(65, 71), CPos.New(69, 65), CPos.New(70, 65), CPos.New(71, 65) } 12BridgeExplosionTrigger = { CPos.New(66, 69), CPos.New(67, 69), CPos.New(68, 69) } 13TransportTrigger = { CPos.New(75, 58) } 14EnemyBaseShroudTrigger = { CPos.New(64, 52), CPos.New(64, 53), CPos.New(64, 54), CPos.New(64, 55), CPos.New(64, 56), CPos.New(64, 57), CPos.New(64, 58), CPos.New(64, 59), CPos.New(64, 60), CPos.New(64, 61), CPos.New(64, 62), CPos.New(64, 63), CPos.New(64, 64) } 15ParachuteTrigger = { CPos.New(80, 66), CPos.New(81, 66), CPos.New(82, 66), CPos.New(83, 66), CPos.New(84, 66), CPos.New(85, 66),CPos.New(86, 66), CPos.New(87, 66), CPos.New(88, 66), CPos.New(89, 66) } 16EnemyBaseEntranceShroudTrigger = { CPos.New(80, 73), CPos.New(81, 73), CPos.New(82, 73), CPos.New(83, 73), CPos.New(84, 73), CPos.New(85, 73),CPos.New(86, 73), CPos.New(87, 73), CPos.New(88, 73), CPos.New(89, 73) } 17 18SendUSSRParadrops = function() 19 paraproxy1 = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) 20 paraproxy1.ActivateParatroopers(ParachuteBaseEntrance.CenterPosition, Facing.North) 21 paraproxy1.Destroy() 22end 23 24SendUSSRParadropsBase = function() 25 paraproxy2 = Actor.Create("powerproxy.paratroopers2", false, { Owner = player }) 26 paraproxy2.ActivateParatroopers(ParachuteBase1.CenterPosition, Facing.East) 27 paraproxy2.Destroy() 28 paraproxy3 = Actor.Create("powerproxy.paratroopers3", false, { Owner = player }) 29 paraproxy3.ActivateParatroopers(ParachuteBase2.CenterPosition, Facing.East) 30 paraproxy3.Destroy() 31end 32 33Trigger.OnEnteredFootprint(BridgeShroudTrigger, function(a, id) 34 if not bridgeShroudTrigger and a.Owner == player then 35 bridgeShroudTrigger = true 36 local cameraBridge = Actor.Create("camera", true, { Owner = player, Location = CameraBridge.Location }) 37 Trigger.AfterDelay(DateTime.Seconds(15), function() 38 cameraBridge.Destroy() 39 end) 40 end 41end) 42 43Trigger.OnEnteredFootprint(BridgeExplosionTrigger, function(a, id) 44 if not bridgeExplosionTrigger and a.Owner == player then 45 bridgeExplosionTrigger = true 46 if not BarrelBridge.IsDead then 47 BarrelBridge.Kill() 48 end 49 end 50end) 51 52Trigger.OnEnteredFootprint(EnemyBaseEntranceShroudTrigger, function(a, id) 53 if not enemyBaseEntranceShroudTrigger and a.Owner == player then 54 enemyBaseEntranceShroudTrigger = true 55 local cameraBaseEntrance = Actor.Create("camera", true, { Owner = player, Location = CameraBaseEntrance.Location }) 56 Trigger.AfterDelay(DateTime.Seconds(15), function() 57 cameraBaseEntrance.Destroy() 58 end) 59 end 60end) 61 62Trigger.OnEnteredFootprint(EnemyBaseShroudTrigger, function(a, id) 63 if not enemyBaseShroudTrigger and a.Owner == player then 64 enemyBaseShroudTrigger = true 65 local cameraBase1 = Actor.Create("camera", true, { Owner = player, Location = CameraBase1.Location }) 66 local cameraBase2 = Actor.Create("camera", true, { Owner = player, Location = CameraBase2.Location }) 67 Trigger.AfterDelay(DateTime.Seconds(15), function() 68 cameraBase1.Destroy() 69 cameraBase2.Destroy() 70 end) 71 end 72end) 73 74Trigger.OnEnteredFootprint(ParachuteTrigger, function(a, id) 75 if not parachuteTrigger and a.Owner == player then 76 parachuteTrigger = true 77 SendUSSRParadrops() 78 Media.PlaySpeechNotification(player, "ReinforcementsArrived") 79 end 80end) 81 82Trigger.OnEnteredFootprint(TransportTrigger, function(a, id) 83 if not transportTrigger and a.Type == "truk" then 84 transportTrigger = true 85 if not TransportTruck.IsDead then 86 TransportTruck.Wait(DateTime.Seconds(5)) 87 TransportTruck.Move(TransportWaypoint2.Location) 88 TransportTruck.Wait(DateTime.Seconds(5)) 89 TransportTruck.Move(TransportWaypoint3.Location) 90 TransportTruck.Wait(DateTime.Seconds(5)) 91 TransportTruck.Move(TransportWaypoint1.Location) 92 end 93 Trigger.AfterDelay(DateTime.Seconds(10), function() 94 transportTrigger = false 95 end) 96 end 97end) 98 99Trigger.OnKilled(BarrelBase, function() 100 SendUSSRParadropsBase() 101 Media.PlaySpeechNotification(player, "ReinforcementsArrived") 102end) 103 104Trigger.OnKilled(BarrelBridge, function() 105 local bridgepart = Map.ActorsInBox(BridgeCheck1.CenterPosition, BridgeCheck2.CenterPosition, function(self) return self.Type == "br1" end)[1] 106 if not bridgepart.IsDead then 107 bridgepart.Kill() 108 end 109end) 110 111Trigger.OnKilled(Church1, function() 112 Actor.Create("moneycrate", true, { Owner = player, Location = TransportWaypoint3.Location }) 113end) 114 115Trigger.OnKilled(Church2, function() 116 Actor.Create("healcrate", true, { Owner = player, Location = Church2.Location }) 117end) 118 119Trigger.OnKilled(ForwardCommand, function() 120 enemy.MarkCompletedObjective(alliedObjective) 121end) 122 123Trigger.OnKilled(IntroSoldier1, function() 124 local cameraIntro = Actor.Create("camera", true, { Owner = player, Location = CameraStart.Location }) 125 Trigger.AfterDelay(DateTime.Seconds(15), function() 126 cameraIntro.Destroy() 127 end) 128end) 129 130WorldLoaded = function() 131 player = Player.GetPlayer("USSR") 132 enemy = Player.GetPlayer("Greece") 133 Utils.Do(IntroAttackers, function(actor) 134 if not actor.IsDead then 135 Trigger.OnIdle(actor, actor.Hunt) 136 end 137 end) 138 Trigger.AfterDelay(0, function() 139 local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == enemy and self.HasProperty("StartBuildingRepairs") end) 140 Utils.Do(buildings, function(actor) 141 Trigger.OnDamaged(actor, function(building, attacker) 142 if building.Owner == enemy and building.Health < building.MaxHealth * 0.8 then 143 building.StartBuildingRepairs() 144 end 145 end) 146 end) 147 end) 148 Trigger.OnObjectiveAdded(player, function(p, id) 149 Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") 150 end) 151 Trigger.OnObjectiveCompleted(player, function(p, id) 152 Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") 153 end) 154 Trigger.OnObjectiveFailed(player, function(p, id) 155 Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") 156 end) 157 Trigger.OnPlayerWon(player, function() 158 Media.PlaySpeechNotification(player, "Win") 159 end) 160 Trigger.OnPlayerLost(player, function() 161 Media.PlaySpeechNotification(player, "Lose") 162 end) 163 alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") 164 sovietObjective1 = player.AddPrimaryObjective("Protect the Command Center.") 165 sovietObjective2 = player.AddPrimaryObjective("Destroy all Allied units and structures.") 166end 167 168Tick = function() 169 if player.HasNoRequiredUnits() then 170 enemy.MarkCompletedObjective(alliedObjective) 171 end 172 173 if enemy.HasNoRequiredUnits() then 174 player.MarkCompletedObjective(sovietObjective1) 175 player.MarkCompletedObjective(sovietObjective2) 176 end 177 178 if enemy.Resources >= enemy.ResourceCapacity * 0.75 then 179 enemy.Cash = enemy.Cash + enemy.Resources - enemy.ResourceCapacity * 0.25 180 enemy.Resources = enemy.ResourceCapacity * 0.25 181 end 182end 183