From 0ff93328440864cd25eec67a54f60acfb293d044 Mon Sep 17 00:00:00 2001 From: UberWaffe Date: Wed, 6 Aug 2014 09:20:05 +0200 Subject: [PATCH 1/3] Crate actions can now define required prerequisites. --- OpenRA.Mods.RA/CrateAction.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/CrateAction.cs b/OpenRA.Mods.RA/CrateAction.cs index 997220719e..d0a478b791 100644 --- a/OpenRA.Mods.RA/CrateAction.cs +++ b/OpenRA.Mods.RA/CrateAction.cs @@ -30,6 +30,9 @@ namespace OpenRA.Mods.RA [Desc("The earliest time (in ticks) that this crate action can occur on.")] public readonly int TimeDelay = 0; + + [Desc("Only allow this crate action when the collector has these prerequisites")] + public readonly string[] Prerequisites = { }; [Desc("Actor types that this crate action will not occur for.")] [ActorReference] public string[] ExcludedActorTypes = { }; @@ -52,10 +55,13 @@ namespace OpenRA.Mods.RA { if (self.World.WorldTick < info.TimeDelay) return 0; - + if (info.ExcludedActorTypes.Contains(collector.Info.Name)) return 0; + if (info.Prerequisites.Any() && !collector.Owner.PlayerActor.Trait().HasPrerequisites(info.Prerequisites)) + return 0; + return GetSelectionShares(collector); } From 9756132006a5673a19807b8d6f900ceb217b6a70 Mon Sep 17 00:00:00 2001 From: UberWaffe Date: Wed, 6 Aug 2014 09:59:55 +0200 Subject: [PATCH 2/3] Update mods (only d2k and RA affected) crate actions to take tech levels and prerequisites into account. --- mods/d2k/rules/misc.yaml | 15 +++++++++++++++ mods/ra/rules/misc.yaml | 14 +++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/mods/d2k/rules/misc.yaml b/mods/d2k/rules/misc.yaml index 78eec36622..3e1cf4e9e1 100644 --- a/mods/d2k/rules/misc.yaml +++ b/mods/d2k/rules/misc.yaml @@ -21,59 +21,74 @@ CRATE: GiveUnitCrateAction@Trike: SelectionShares: 20 Units: trike + Prerequisites: techlevel.low, Light GiveUnitCrateAction@Raider: SelectionShares: 15 Units: raider ValidRaces: ordos + Prerequisites: techlevel.low, Light GiveUnitCrateAction@Quad: SelectionShares: 40 Units: quad + Prerequisites: techlevel.medium, Light, Outpost GiveUnitCrateAction@CombatA: SelectionShares: 10 Units: combata ValidRaces: atreides + Prerequisites: techlevel.low, Heavy GiveUnitCrateAction@CombatH: SelectionShares: 10 Units: combath ValidRaces: harkonnen + Prerequisites: techlevel.low, Heavy GiveUnitCrateAction@CombatO: SelectionShares: 10 Units: combato ValidRaces: ordos + Prerequisites: techlevel.low, Heavy GiveUnitCrateAction@SiegeTank: SelectionShares: 10 Units: siegetank + Prerequisites: techlevel.medium, Heavy, Outpost GiveUnitCrateAction@MissileTank: SelectionShares: 10 Units: missiletank + Prerequisites: techlevel.high, Hitech GiveUnitCrateAction@StealthRaider: SelectionShares: 7 Units: stealthraider ValidRaces: ordos + Prerequisites: techlevel.medium, Hitech GiveUnitCrateAction@Fremen: SelectionShares: 5 Units: fremen,fremen ValidRaces: atreides + Prerequisites: techlevel.high, Palace GiveUnitCrateAction@Sardaukar: SelectionShares: 8 Units: sardaukar,sardaukar ValidRaces: harkonnen + Prerequisites: techlevel.high, Palace GiveUnitCrateAction@Saboteur: SelectionShares: 3 Units: saboteur,saboteur ValidRaces: ordos + Prerequisites: techlevel.high, Palace GiveUnitCrateAction@SonicTank: SelectionShares: 5 Units: sonictank ValidRaces: atreides + Prerequisites: techlevel.high, Research GiveUnitCrateAction@Devast: SelectionShares: 2 Units: devast ValidRaces: harkonnen + Prerequisites: techlevel.high, Research GiveUnitCrateAction@DeviatorTank: SelectionShares: 5 Units: deviatortank ValidRaces: ordos + Prerequisites: techlevel.high, Research GiveMcvCrateAction@Atreides: SelectionShares: 0 NoBaseSelectionShares: 9001 diff --git a/mods/ra/rules/misc.yaml b/mods/ra/rules/misc.yaml index ce7aaec68c..1588faf8b6 100644 --- a/mods/ra/rules/misc.yaml +++ b/mods/ra/rules/misc.yaml @@ -102,37 +102,37 @@ CRATE: SelectionShares: 7 Units: jeep ValidRaces: allies - TimeDelay: 3000 + Prerequisites: techlevel.low GiveUnitCrateAction@arty: SelectionShares: 6 Units: arty ValidRaces: allies - TimeDelay: 4500 + Prerequisites: techlevel.medium, dome GiveUnitCrateAction@v2rl: SelectionShares: 6 Units: v2rl ValidRaces: soviet - TimeDelay: 4500 + Prerequisites: techlevel.medium, dome GiveUnitCrateAction@1tnk: SelectionShares: 5 Units: 1tnk ValidRaces: allies - TimeDelay: 3000 + Prerequisites: techlevel.low GiveUnitCrateAction@2tnk: SelectionShares: 4 Units: 2tnk ValidRaces: allies - TimeDelay: 4500 + Prerequisites: techlevel.medium, fix GiveUnitCrateAction@3tnk: SelectionShares: 4 Units: 3tnk ValidRaces: soviet - TimeDelay: 4500 + Prerequisites: techlevel.medium, fix GiveUnitCrateAction@4tnk: SelectionShares: 3 Units: 4tnk ValidRaces: soviet - TimeDelay: 9000 + Prerequisites: techlevel.unrestricted, fix, techcenter GiveUnitCrateAction@squadlight: SelectionShares: 7 Units: e1,e1,e1,e3,e3 From 30e675a306c58283462f65dfcf1a0ac340fe8fea Mon Sep 17 00:00:00 2001 From: UberWaffe Date: Wed, 6 Aug 2014 10:01:45 +0200 Subject: [PATCH 3/3] Added YamlException to GiveUnitCrateAction if no units are defined. --- OpenRA.Mods.RA/Crates/GiveUnitCrateAction.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/Crates/GiveUnitCrateAction.cs b/OpenRA.Mods.RA/Crates/GiveUnitCrateAction.cs index 2132d2e2f6..b9f42d047f 100644 --- a/OpenRA.Mods.RA/Crates/GiveUnitCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/GiveUnitCrateAction.cs @@ -38,7 +38,12 @@ namespace OpenRA.Mods.RA.Crates readonly List usedCells = new List(); public GiveUnitCrateAction(Actor self, GiveUnitCrateActionInfo info) - : base(self, info) { Info = info; } + : base(self, info) + { + Info = info; + if (!Info.Units.Any()) + throw new YamlException("A GiveUnitCrateAction does not specify any units to give. This might be because the yaml is referring to 'Unit' rather than 'Units'."); + } public bool CanGiveTo(Actor collector) {