diff --git a/mods/d2k/maps/atreides-01a/atreides01a.lua b/mods/d2k/maps/atreides-01a/atreides01a.lua index 8fff222bd5..ab3a44818c 100644 --- a/mods/d2k/maps/atreides-01a/atreides01a.lua +++ b/mods/d2k/maps/atreides-01a/atreides01a.lua @@ -99,15 +99,37 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillHarkonnen = player.AddSecondaryObjective("Eliminate all Harkonnen units and reinforcements\nin the area.") - Trigger.OnRemovedFromWorld(AtreidesConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + return true + end + end) + end + + Trigger.OnRemovedFromWorld(AtreidesConyard, function() + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then harkonnen.MarkCompletedObjective(KillAtreides) else Trigger.OnAllRemovedFromWorld(refs, function() harkonnen.MarkCompletedObjective(KillAtreides) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end) diff --git a/mods/d2k/maps/atreides-01b/atreides01b.lua b/mods/d2k/maps/atreides-01b/atreides01b.lua index 869f9988c0..7325a20d07 100644 --- a/mods/d2k/maps/atreides-01b/atreides01b.lua +++ b/mods/d2k/maps/atreides-01b/atreides01b.lua @@ -99,15 +99,37 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillHarkonnen = player.AddSecondaryObjective("Eliminate all Harkonnen units and reinforcements\nin the area.") - Trigger.OnRemovedFromWorld(AtreidesConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + return true + end + end) + end + + Trigger.OnRemovedFromWorld(AtreidesConyard, function() + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then harkonnen.MarkCompletedObjective(KillAtreides) else Trigger.OnAllRemovedFromWorld(refs, function() harkonnen.MarkCompletedObjective(KillAtreides) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end) diff --git a/mods/d2k/maps/atreides-03a/atreides03a.lua b/mods/d2k/maps/atreides-03a/atreides03a.lua index d7cf68ec82..eaa7f9f39c 100644 --- a/mods/d2k/maps/atreides-03a/atreides03a.lua +++ b/mods/d2k/maps/atreides-03a/atreides03a.lua @@ -124,6 +124,40 @@ WorldLoaded = function() Camera.Position = AConyard.CenterPosition + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + ordos.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + + Trigger.OnRemovedFromWorld(AConyard, function() + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) + if #refs == 0 then + ordos.MarkCompletedObjective(KillAtreides) + else + Trigger.OnAllRemovedFromWorld(refs, function() + ordos.MarkCompletedObjective(KillAtreides) + end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + end + end) + Trigger.OnAllKilled(OrdosBase, function() Utils.Do(ordos.GetGroundAttackers(), IdleHunt) end) diff --git a/mods/d2k/maps/atreides-03b/atreides03b.lua b/mods/d2k/maps/atreides-03b/atreides03b.lua index 2c7f717c86..bfd8dfb1f6 100644 --- a/mods/d2k/maps/atreides-03b/atreides03b.lua +++ b/mods/d2k/maps/atreides-03b/atreides03b.lua @@ -124,6 +124,40 @@ WorldLoaded = function() Camera.Position = AConyard.CenterPosition + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + ordos.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + + Trigger.OnRemovedFromWorld(AConyard, function() + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) + if #refs == 0 then + ordos.MarkCompletedObjective(KillAtreides) + else + Trigger.OnAllRemovedFromWorld(refs, function() + ordos.MarkCompletedObjective(KillAtreides) + end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + end + end) + Trigger.OnAllKilled(OrdosBase, function() Utils.Do(ordos.GetGroundAttackers(), IdleHunt) end) diff --git a/mods/d2k/maps/harkonnen-01a/harkonnen01a.lua b/mods/d2k/maps/harkonnen-01a/harkonnen01a.lua index 40e59e2b47..5d929b8b78 100644 --- a/mods/d2k/maps/harkonnen-01a/harkonnen01a.lua +++ b/mods/d2k/maps/harkonnen-01a/harkonnen01a.lua @@ -99,8 +99,27 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillAtreides = player.AddSecondaryObjective("Eliminate all Atreides units and reinforcements\nin the area.") + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + Trigger.OnRemovedFromWorld(HarkonnenConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then atreides.MarkCompletedObjective(KillHarkonnen) @@ -108,6 +127,10 @@ WorldLoaded = function() Trigger.OnAllRemovedFromWorld(refs, function() atreides.MarkCompletedObjective(KillHarkonnen) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end) diff --git a/mods/d2k/maps/harkonnen-01b/harkonnen01b.lua b/mods/d2k/maps/harkonnen-01b/harkonnen01b.lua index 40e59e2b47..5d929b8b78 100644 --- a/mods/d2k/maps/harkonnen-01b/harkonnen01b.lua +++ b/mods/d2k/maps/harkonnen-01b/harkonnen01b.lua @@ -99,8 +99,27 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillAtreides = player.AddSecondaryObjective("Eliminate all Atreides units and reinforcements\nin the area.") + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + Trigger.OnRemovedFromWorld(HarkonnenConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then atreides.MarkCompletedObjective(KillHarkonnen) @@ -108,6 +127,10 @@ WorldLoaded = function() Trigger.OnAllRemovedFromWorld(refs, function() atreides.MarkCompletedObjective(KillHarkonnen) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end) diff --git a/mods/d2k/maps/ordos-01a/ordos01a.lua b/mods/d2k/maps/ordos-01a/ordos01a.lua index abd7ee9b1c..09a2f4763b 100644 --- a/mods/d2k/maps/ordos-01a/ordos01a.lua +++ b/mods/d2k/maps/ordos-01a/ordos01a.lua @@ -99,8 +99,27 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillHarkonnen = player.AddSecondaryObjective("Eliminate all Harkonnen units and reinforcements\nin the area.") + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + Trigger.OnRemovedFromWorld(OrdosConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then harkonnen.MarkCompletedObjective(KillOrdos) @@ -108,6 +127,10 @@ WorldLoaded = function() Trigger.OnAllRemovedFromWorld(refs, function() harkonnen.MarkCompletedObjective(KillOrdos) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end) diff --git a/mods/d2k/maps/ordos-01b/ordos01b.lua b/mods/d2k/maps/ordos-01b/ordos01b.lua index 68cf01e4a4..e348923427 100644 --- a/mods/d2k/maps/ordos-01b/ordos01b.lua +++ b/mods/d2k/maps/ordos-01b/ordos01b.lua @@ -99,8 +99,27 @@ WorldLoaded = function() GatherSpice = player.AddPrimaryObjective("Harvest " .. tostring(SpiceToHarvest) .. " Solaris worth of Spice.") KillHarkonnen = player.AddSecondaryObjective("Eliminate all Harkonnen units and reinforcements\nin the area.") + local checkResourceCapacity = function() + Trigger.AfterDelay(0, function() + if player.ResourceCapacity < SpiceToHarvest then + Media.DisplayMessage("We don't have enough silo space to store the required amount of Spice!", "Mentat") + Trigger.AfterDelay(DateTime.Seconds(3), function() + harkonnen.MarkCompletedObjective(KillAtreides) + end) + + return true + end + end) + end + Trigger.OnRemovedFromWorld(OrdosConyard, function() - local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" end) + + -- Mission already failed, no need to check the other conditions as well + if checkResourceCapacity() then + return + end + + local refs = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "refinery" and actor.Owner == player end) if #refs == 0 then harkonnen.MarkCompletedObjective(KillAtreides) @@ -108,6 +127,10 @@ WorldLoaded = function() Trigger.OnAllRemovedFromWorld(refs, function() harkonnen.MarkCompletedObjective(KillAtreides) end) + + local silos = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "silo" and actor.Owner == player end) + Utils.Do(refs, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) + Utils.Do(silos, function(actor) Trigger.OnRemovedFromWorld(actor, checkResourceCapacity) end) end end)