Update Soviet-08a

This commit is contained in:
Smittytron
2020-05-26 21:09:41 -05:00
committed by abcdefg30
parent 2eba8b6c37
commit 86992751c7
4 changed files with 102 additions and 105 deletions

View File

@@ -921,31 +921,31 @@ Actors:
Location: 100,97 Location: 100,97
Owner: USSR Owner: USSR
Facing: 127 Facing: 127
Actor258: pt Boat1: pt
Location: 19,26 Location: 19,26
Owner: Greece Owner: Greece
Facing: 191 Facing: 191
Actor259: pt Boat2: pt
Location: 19,58 Location: 19,58
Owner: Greece Owner: Greece
Facing: 159 Facing: 159
Actor260: pt Boat3: pt
Location: 49,109 Location: 49,109
Owner: Greece Owner: Greece
Facing: 223 Facing: 223
Actor261: pt Boat4: pt
Location: 109,75 Location: 109,75
Owner: Greece Owner: Greece
Facing: 31 Facing: 31
Actor262: pt Boat5: pt
Location: 109,31 Location: 109,31
Owner: Greece Owner: Greece
Facing: 63 Facing: 63
Actor263: pt Boat6: pt
Location: 69,18 Location: 69,18
Owner: Greece Owner: Greece
Facing: 63 Facing: 63
Actor264: dd Boat7: dd
Location: 48,23 Location: 48,23
Owner: Greece Owner: Greece
Facing: 159 Facing: 159
@@ -1063,5 +1063,8 @@ Actors:
DDPatrol2Point7: waypoint DDPatrol2Point7: waypoint
Location: 97,78 Location: 97,78
Owner: Neutral Owner: Neutral
BoatRally: waypoint
Location: 97,93
Owner: Neutral
Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml

View File

@@ -33,6 +33,11 @@ LST.Reinforcement:
Image: lst Image: lst
Interactable: Interactable:
V01:
-SpawnActorOnDeath@1:
-SpawnActorOnDeath@2:
-SpawnActorOnDeath@3:
SCRIPTEDDROP: SCRIPTEDDROP:
ParatroopersPower: ParatroopersPower:
DisplayBeacon: False DisplayBeacon: False

View File

@@ -8,8 +8,7 @@
]] ]]
IdlingUnits = { } IdlingUnits = { }
DDPatrol1 = { "dd", "dd" } DDPatrol = { "dd", "dd" }
DDPatrol2 = { "dd", "dd" }
DDPatrol1Path = { DDPatrol1Point1.Location, DDPatrol1Point2.Location, DDPatrol1Point3.Location, DDPatrol1Point4.Location, DDPatrol1Point5.Location, DDPatrol1Point6.Location } DDPatrol1Path = { DDPatrol1Point1.Location, DDPatrol1Point2.Location, DDPatrol1Point3.Location, DDPatrol1Point4.Location, DDPatrol1Point5.Location, DDPatrol1Point6.Location }
DDPatrol2Path = { DDPatrol2Point1.Location, DDPatrol2Point2.Location, DDPatrol2Point3.Location, DDPatrol2Point4.Location, DDPatrol2Point5.Location, DDPatrol2Point6.Location, DDPatrol2Point7.Location } DDPatrol2Path = { DDPatrol2Point1.Location, DDPatrol2Point2.Location, DDPatrol2Point3.Location, DDPatrol2Point4.Location, DDPatrol2Point5.Location, DDPatrol2Point6.Location, DDPatrol2Point7.Location }
ShipArrivePath = { DDEntry.Location, DDEntryStop.Location } ShipArrivePath = { DDEntry.Location, DDEntryStop.Location }
@@ -33,9 +32,9 @@ WTransUnits =
WTransDelays = WTransDelays =
{ {
easy = 5, easy = DateTime.Minutes(5),
normal = 3, normal = DateTime.Minutes(3),
hard = 2 hard = DateTime.Minutes(2)
} }
AttackGroup = { } AttackGroup = { }
@@ -62,7 +61,7 @@ IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt
WTransWaves = function() WTransWaves = function()
local way = Utils.Random(WTransWays) local way = Utils.Random(WTransWays)
local units = Utils.Random(WTransUnits) local units = Utils.Random(WTransUnits)
local attackUnits = Reinforcements.ReinforceWithTransport(greece, "lst", units , way, { way[2], way[1] })[2] local attackUnits = Reinforcements.ReinforceWithTransport(Greece, "lst", units , way, { way[2], way[1] })[2]
Utils.Do(attackUnits, function(a) Utils.Do(attackUnits, function(a)
Trigger.OnAddedToWorld(a, function() Trigger.OnAddedToWorld(a, function()
a.AttackMove(SovietStart.Location) a.AttackMove(SovietStart.Location)
@@ -70,7 +69,7 @@ WTransWaves = function()
end) end)
end) end)
Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) Trigger.AfterDelay(WTransDelays, WTransWaves)
end end
SendAttackGroup = function() SendAttackGroup = function()
@@ -88,11 +87,11 @@ SendAttackGroup = function()
end end
ProduceInfantry = function() ProduceInfantry = function()
if (GreeceTent1.IsDead or GreeceTent1.Owner ~= greece) and (GreeceTent2.IsDead or GreeceTent2.Owner ~= greece) then if (GreeceTent1.IsDead or GreeceTent1.Owner ~= Greece) and (GreeceTent2.IsDead or GreeceTent2.Owner ~= Greece) then
return return
end end
greece.Build({ Utils.Random(AlliedInfantry) }, function(units) Greece.Build({ Utils.Random(AlliedInfantry) }, function(units)
table.insert(AttackGroup, units[1]) table.insert(AttackGroup, units[1])
SendAttackGroup() SendAttackGroup()
Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry) Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry)
@@ -100,55 +99,36 @@ ProduceInfantry = function()
end end
ProduceVehicles = function() ProduceVehicles = function()
if GreeceWarFactory.IsDead or GreeceWarFactory.Owner ~= greece then if GreeceWarFactory.IsDead or GreeceWarFactory.Owner ~= Greece then
return return
end end
greece.Build({ Utils.Random(AlliedVehicles[AlliedVehicleType]) }, function(units) Greece.Build({ Utils.Random(AlliedVehicles[AlliedVehicleType]) }, function(units)
table.insert(AttackGroup, units[1]) table.insert(AttackGroup, units[1])
SendAttackGroup() SendAttackGroup()
Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceVehicles) Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceVehicles)
end) end)
end end
BringDDPatrol1 = function() BringDDPatrol = function(patrolPath)
local units = Reinforcements.Reinforce(greece, DDPatrol1, ShipArrivePath, 0) local units = Reinforcements.Reinforce(Greece, DDPatrol, ShipArrivePath)
Utils.Do(units, function(unit) Utils.Do(units, function(unit)
Trigger.OnIdle(unit, function(patrols) Trigger.OnIdle(unit, function(patrols)
patrols.Patrol(DDPatrol1Path, true, 200) patrols.Patrol(patrolPath, true, 200)
end) end)
end) end)
if GreeceNavalYard.IsDead then
return
else
Trigger.OnAllKilled(units, function()
if Map.LobbyOption("difficulty") == "easy" then
Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol1)
else
Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol1)
end
end)
end
end
BringDDPatrol2 = function() Trigger.OnAllKilled(units, function()
local units = Reinforcements.Reinforce(greece, DDPatrol2, ShipArrivePath, 0)
Utils.Do(units, function(unit)
Trigger.OnIdle(unit, function(patrols)
patrols.Patrol(DDPatrol2Path, true, 200)
end)
end)
if GreeceNavalYard.IsDead then if GreeceNavalYard.IsDead then
return return
else else
Trigger.OnAllKilled(units, function()
if Map.LobbyOption("difficulty") == "easy" then if Map.LobbyOption("difficulty") == "easy" then
Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol2) Trigger.AfterDelay(DateTime.Minutes(7), function() BringDDPatrol(patrolPath) end)
else else
Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol2) Trigger.AfterDelay(DateTime.Minutes(4), function() BringDDPatrol(patrolPath) end)
end
end end
end) end)
end
end end
ActivateAI = function() ActivateAI = function()
@@ -156,10 +136,10 @@ ActivateAI = function()
WTransUnits = WTransUnits[difficulty] WTransUnits = WTransUnits[difficulty]
WTransDelays = WTransDelays[difficulty] WTransDelays = WTransDelays[difficulty]
local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("StartBuildingRepairs") end) local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == Greece and self.HasProperty("StartBuildingRepairs") end)
Utils.Do(buildings, function(actor) Utils.Do(buildings, function(actor)
Trigger.OnDamaged(actor, function(building) Trigger.OnDamaged(actor, function(building)
if building.Owner == greece and building.Health < building.MaxHealth * 3/4 then if building.Owner == Greece and building.Health < building.MaxHealth * 3/4 then
building.StartBuildingRepairs() building.StartBuildingRepairs()
end end
end) end)
@@ -171,6 +151,6 @@ ActivateAI = function()
ProduceInfantry() ProduceInfantry()
ProduceVehicles() ProduceVehicles()
BringDDPatrol1() BringDDPatrol(DDPatrol1Path)
Trigger.AfterDelay(DateTime.Minutes(1), BringDDPatrol2) Trigger.AfterDelay(DateTime.Minutes(1), function() BringDDPatrol(DDPatrol2Path) end)
end end

View File

@@ -6,9 +6,9 @@
the License, or (at your option) any later version. For more the License, or (at your option) any later version. For more
information, see COPYING. information, see COPYING.
]] ]]
alliedScouts = { Actor189, Actor216, Actor217, Actor218, Actor219 } AlliedScouts = { Actor189, Actor216, Actor217, Actor218, Actor219 }
ussrReinforcements = SovReinforcements =
{ {
east = east =
{ {
@@ -30,66 +30,58 @@ ussrReinforcements =
} }
} }
Obj2ActorTriggerActivator = { Church, Actor147, Actor148, Actor149, Actor150, Actor151, Actor152, Actor153 } Village = { Church, Actor147, Actor148, Actor149, Actor150, Actor151, Actor152, Actor153 }
ActivateAIDelay = DateTime.Seconds(45) ActivateAIDelay = DateTime.Seconds(45)
AddEastReinforcementTrigger = function() AddEastReinforcementTrigger = function()
Trigger.AfterDelay(DateTime.Seconds(30), function() Trigger.AfterDelay(DateTime.Seconds(30), function()
Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
local reinforcement = ussrReinforcements.east local reinforcement = SovReinforcements.east
Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) Reinforcements.ReinforceWithTransport(USSR, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
end) end)
end end
AddSouthReinforcementTrigger = function() AddSouthReinforcementTrigger = function()
Trigger.AfterDelay(DateTime.Seconds(60), function() Trigger.AfterDelay(DateTime.Seconds(60), function()
Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
local reinforcement = ussrReinforcements.south local reinforcement = SovReinforcements.south
Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) Reinforcements.ReinforceWithTransport(USSR, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
end) end)
end end
AddParadropReinforcementTrigger = function() AddParadropReinforcementTrigger = function()
Trigger.AfterDelay(DateTime.Seconds(90), function() Trigger.AfterDelay(DateTime.Seconds(90), function()
Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
scripteddrop.TargetParatroopers(ScriptedParadrop.CenterPosition, Angle.New(40)) ScriptedDrop.TargetParatroopers(ScriptedParadrop.CenterPosition, Angle.New(40))
end) end)
end end
ChurchAmbushTrigger = function() ChurchAmbushTrigger = function()
if not AmbushSwitch then if not AmbushSwitch then
local hiding = Reinforcements.Reinforce(germany, { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e3', 'e3', 'e3' }, { ChurchAmbush.Location, AmbushMove.Location }) local hiding = Reinforcements.Reinforce(Germany, { 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e1', 'e3', 'e3', 'e3' }, { ChurchAmbush.Location, AmbushMove.Location }, 0)
Utils.Do(hiding, function(actor) Utils.Do(hiding, IdleHunt)
IdleHunt(actor)
end)
end end
AmbushSwitch = true AmbushSwitch = true
end end
Trigger.OnKilled(Church, function() Trigger.OnKilled(Church, function()
Actor.Create("moneycrate", true, { Owner = ussr, Location = ChurchAmbush.Location }) Actor.Create("moneycrate", true, { Owner = USSR, Location = ChurchAmbush.Location })
end) end)
Obj2TriggerFunction = function() DestroyVillage = function()
ussr.MarkCompletedObjective(DestroyVillageObjective) Media.PlaySpeechNotification(USSR, "ReinforcementsArrived")
Media.PlaySpeechNotification(ussr, "ReinforcementsArrived") USSR.MarkCompletedObjective(DestroyVillageObjective)
local reinforcement = ussrReinforcements.mammoth local reinforcement = SovReinforcements.mammoth
Reinforcements.ReinforceWithTransport(ussr, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath) Reinforcements.ReinforceWithTransport(USSR, "lst.reinforcement", reinforcement.actors, reinforcement.entryPath, reinforcement.exitPath)
end
AddReinforcmentTriggers = function()
AddEastReinforcementTrigger()
AddSouthReinforcementTrigger()
AddParadropReinforcementTrigger()
end end
AddRetreatTrigger = function() AddRetreatTrigger = function()
Trigger.OnEnteredProximityTrigger(Actor222.CenterPosition, WDist.FromCells(12), function(actor, id) Trigger.OnEnteredProximityTrigger(Actor222.CenterPosition, WDist.FromCells(12), function(actor, id)
if actor.Owner == ussr and actor.Type == "barr" then if actor.Owner == USSR and actor.Type == "barr" then
alliedScouts = Utils.Where(alliedScouts, function(scout) return not scout.IsDead end) AlliedScouts = Utils.Where(AlliedScouts, function(scout) return not scout.IsDead end)
local removed local removed
Utils.Do(alliedScouts, function(scout) Utils.Do(AlliedScouts, function(scout)
if scout.Type == "e1" and not removed then if scout.Type == "e1" and not removed then
removed = true removed = true
else else
@@ -102,61 +94,78 @@ AddRetreatTrigger = function()
end) end)
end end
Tick = function() BoatAttack = function(boat)
greece.Cash = 1000 if boat.IsDead then
return
else
boat.AttackMove(BoatRally.Location)
end
end
if greece.HasNoRequiredUnits() and germany.HasNoRequiredUnits() then Tick = function()
ussr.MarkCompletedObjective(KillAll) Greece.Cash = 1000
if Greece.HasNoRequiredUnits() and Germany.HasNoRequiredUnits() then
USSR.MarkCompletedObjective(KillAll)
end end
if ussr.HasNoRequiredUnits() then if USSR.HasNoRequiredUnits() then
greece.MarkCompletedObjective(BeatUSSR) Greece.MarkCompletedObjective(BeatUSSR)
end end
end end
WorldLoaded = function() WorldLoaded = function()
ussr = Player.GetPlayer("USSR") USSR = Player.GetPlayer("USSR")
germany = Player.GetPlayer("Germany") Germany = Player.GetPlayer("Germany")
greece = Player.GetPlayer("Greece") Greece = Player.GetPlayer("Greece")
Trigger.OnObjectiveAdded(ussr, function(p, id) Trigger.OnObjectiveAdded(USSR, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective")
end) end)
KillAll = ussr.AddPrimaryObjective("Destroy all Allied units and structures.") KillAll = USSR.AddObjective("Destroy all Allied units and structures.")
DestroyVillageObjective = ussr.AddSecondaryObjective("Destroy the village of Allied sympathizers.") DestroyVillageObjective = USSR.AddObjective("Destroy the village of Allied sympathizers.", "Secondary", false)
BeatUSSR = greece.AddPrimaryObjective("Defeat the Soviet forces.") BeatUSSR = Greece.AddObjective("Defeat the Soviet forces.")
Trigger.OnObjectiveCompleted(ussr, function(p, id) Trigger.OnObjectiveCompleted(USSR, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end) end)
Trigger.OnObjectiveFailed(ussr, function(p, id) Trigger.OnObjectiveFailed(USSR, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end) end)
Trigger.OnPlayerLost(ussr, function() Trigger.OnPlayerLost(USSR, function()
Trigger.AfterDelay(DateTime.Seconds(1), function() Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(ussr, "MissionFailed") Media.PlaySpeechNotification(USSR, "MissionFailed")
end) end)
end) end)
Trigger.OnPlayerWon(ussr, function() Trigger.OnPlayerWon(USSR, function()
Trigger.AfterDelay(DateTime.Seconds(1), function() Trigger.AfterDelay(DateTime.Seconds(1), function()
Media.PlaySpeechNotification(ussr, "MissionAccomplished") Media.PlaySpeechNotification(USSR, "MissionAccomplished")
end) end)
end) end)
AddReinforcmentTriggers() AddEastReinforcementTrigger()
AddSouthReinforcementTrigger()
AddParadropReinforcementTrigger()
AddRetreatTrigger() AddRetreatTrigger()
scripteddrop = Actor.Create("scripteddrop", false, { Owner = ussr }) ScriptedDrop = Actor.Create("scripteddrop", false, { Owner = USSR })
OnAnyDamaged(Obj2ActorTriggerActivator, ChurchAmbushTrigger) OnAnyDamaged(Village, ChurchAmbushTrigger)
Trigger.OnAllRemovedFromWorld(Obj2ActorTriggerActivator, Obj2TriggerFunction) Trigger.OnAllRemovedFromWorld(Village, DestroyVillage)
Camera.Position = SovietBase.CenterPosition Camera.Position = SovietBase.CenterPosition
Trigger.AfterDelay(ActivateAIDelay, ActivateAI) Trigger.AfterDelay(ActivateAIDelay, ActivateAI)
Trigger.AfterDelay(DateTime.Minutes(2), function() BoatAttack(Boat1) end)
Trigger.AfterDelay(DateTime.Minutes(5), function() BoatAttack(Boat2) end)
Trigger.AfterDelay(DateTime.Minutes(7), function() BoatAttack(Boat3) end)
Trigger.AfterDelay(DateTime.Minutes(10), function() BoatAttack(Boat4) end)
Trigger.AfterDelay(DateTime.Minutes(12), function() BoatAttack(Boat5) end)
Trigger.AfterDelay(DateTime.Minutes(14), function() BoatAttack(Boat6) end)
Trigger.AfterDelay(DateTime.Minutes(15), function() BoatAttack(Boat7) end)
end end
OnAnyDamaged = function(actors, func) OnAnyDamaged = function(actors, func)