if Date.Halloween then UnitTypes = { "ant", "ant", "ant" } BeachUnitTypes = { "ant", "ant" } ParadropUnitTypes = { "ant", "ant", "ant", "ant", "ant" } ProducedUnitTypes = { { AlliedBarracks1, { "e1", "e3" } }, { AlliedBarracks2, { "e1", "e3" } }, { SovietBarracks1, { "ant" } }, { SovietBarracks2, { "ant" } }, { SovietBarracks3, { "ant" } }, { AlliedWarFactory1, { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, { SovietWarFactory1, { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } } } else UnitTypes = { "3tnk", "ftrk", "ttnk", "apc" } BeachUnitTypes = { "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4" } ParadropUnitTypes = { "e1", "e1", "e2", "e3", "e4" } ProducedUnitTypes = { { AlliedBarracks1, { "e1", "e3" } }, { AlliedBarracks2, { "e1", "e3" } }, { SovietBarracks1, { "dog", "e1", "e2", "e3", "e4", "shok" } }, { SovietBarracks2, { "dog", "e1", "e2", "e3", "e4", "shok" } }, { SovietBarracks3, { "dog", "e1", "e2", "e3", "e4", "shok" } }, { AlliedWarFactory1, { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, { SovietWarFactory1, { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } } } end ShipUnitTypes = { "1tnk", "1tnk", "jeep", "2tnk", "2tnk" } ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Paradrop6, Paradrop7, Paradrop8 } BindActorTriggers = function(a) if a.HasProperty("Hunt") then if a.Owner == allies then Trigger.OnIdle(a, a.Hunt) else Trigger.OnIdle(a, function(a) a.AttackMove(AlliedTechnologyCenter.Location) end) end end if a.HasProperty("HasPassengers") then Trigger.OnDamaged(a, function() if a.HasPassengers then a.Stop() a.UnloadPassengers() end end) end end SendSovietUnits = function(entryCell, unitTypes, interval) local i = 0 team = {} Utils.Do(unitTypes, function(type) local a = Actor.Create(type, false, { Owner = soviets, Location = entryCell }) BindActorTriggers(a) Trigger.AfterDelay(i * interval, function() a.IsInWorld = true end) table.insert(team, a) i = i + 1 end) Trigger.OnAllKilled(team, function() SendSovietUnits(entryCell, unitTypes, interval) end) end ShipAlliedUnits = function() local transport = Actor.Create("lst", true, { Location = LstEntry.Location, Owner = allies }) Utils.Do(ShipUnitTypes, function(type) local a = Actor.Create(type, false, { Owner = allies }) BindActorTriggers(a) transport.LoadPassenger(a) end) transport.Move(LstUnload.Location) transport.UnloadPassengers() transport.Wait(Utils.Seconds(2)) transport.Move(LstEntry.Location) transport.Destroy() Trigger.AfterDelay(Utils.Seconds(60), ShipAlliedUnits) end ParadropSovietUnits = function() local lz = Utils.Random(ParadropWaypoints).Location local start = Utils.CenterOfCell(Map.RandomEdgeCell()) + WVec.New(0, 0, Actor.CruiseAltitude("badr")) local transport = Actor.Create("badr", true, { CenterPosition = start, Owner = soviets, Facing = (Utils.CenterOfCell(lz) - start).Facing }) Utils.Do(ParadropUnitTypes, function(type) local a = Actor.Create(type, false, { Owner = soviets }) BindActorTriggers(a) transport.LoadPassenger(a) end) transport.Paradrop(lz) Trigger.AfterDelay(Utils.Seconds(35), ParadropSovietUnits) end ProduceUnits = function(t) local factory = t[1] if not factory.IsDead then local unitType = t[2][Utils.RandomInteger(1, #t[2] + 1)] factory.Wait(Actor.BuildTime(unitType)) factory.Produce(unitType) factory.CallFunc(function() ProduceUnits(t) end) end end SetupAlliedUnits = function() Utils.Do(Map.NamedActors, function(a) if a.Owner == allies and a.HasProperty("Invulnerable") then a.Invulnerable = true a.Stance = "Defend" end end) end SetupFactories = function() Utils.Do(ProducedUnitTypes, function(pair) Trigger.OnProduction(pair[1], function(_, a) BindActorTriggers(a) end) end) end ChronoshiftAlliedUnits = function() local cells = Utils.ExpandFootprint({ ChronoshiftLocation.Location }, false) local units = { } for i = 1, #cells do local unit = Actor.Create("2tnk", true, { Owner = allies, Facing = 0 }) BindActorTriggers(unit) units[unit] = cells[i] end Chronosphere.Chronoshift(units) Trigger.AfterDelay(Utils.Seconds(60), ChronoshiftAlliedUnits) end ticks = 0 speed = 5 Tick = function() ticks = ticks + 1 local t = (ticks + 45) % (360 * speed) * (math.pi / 180) / speed; Camera.Position = viewportOrigin + WVec.New(19200 * math.sin(t), 20480 * math.cos(t), 0) end WorldLoaded = function() allies = Player.GetPlayer("Allies") soviets = Player.GetPlayer("Soviets") viewportOrigin = Camera.Position SetupAlliedUnits() SetupFactories() ShipAlliedUnits() ParadropSovietUnits() Trigger.AfterDelay(Utils.Seconds(5), ChronoshiftAlliedUnits) Utils.Do(ProducedUnitTypes, ProduceUnits) SendSovietUnits(Entry1.Location, UnitTypes, 50) SendSovietUnits(Entry2.Location, UnitTypes, 50) SendSovietUnits(Entry3.Location, UnitTypes, 50) SendSovietUnits(Entry4.Location, UnitTypes, 50) SendSovietUnits(Entry5.Location, UnitTypes, 50) SendSovietUnits(Entry6.Location, UnitTypes, 50) SendSovietUnits(Entry7.Location, BeachUnitTypes, 15) end