diff --git a/OpenRA.Mods.RA/Cargo.cs b/OpenRA.Mods.RA/Cargo.cs index be8a49002b..98fa24b00f 100644 --- a/OpenRA.Mods.RA/Cargo.cs +++ b/OpenRA.Mods.RA/Cargo.cs @@ -190,7 +190,10 @@ namespace OpenRA.Mods.RA foreach (var npe in self.TraitsImplementing()) npe.PassengerExited(self, a); - a.Trait().Transport = null; + var p = a.Trait(); + p.Transport = null; + foreach (var u in p.Info.GrantUpgrades) + self.Trait().RevokeUpgrade(self, u, p); return a; } @@ -232,7 +235,10 @@ namespace OpenRA.Mods.RA foreach (var npe in self.TraitsImplementing()) npe.PassengerEntered(self, a); - a.Trait().Transport = self; + var p = a.Trait(); + p.Transport = self; + foreach (var u in p.Info.GrantUpgrades) + self.Trait().GrantUpgrade(self, u, p); } public void Killed(Actor self, AttackInfo e) diff --git a/OpenRA.Mods.RA/Passenger.cs b/OpenRA.Mods.RA/Passenger.cs index 77717ecfd6..9e2c4c7641 100644 --- a/OpenRA.Mods.RA/Passenger.cs +++ b/OpenRA.Mods.RA/Passenger.cs @@ -99,6 +99,9 @@ namespace OpenRA.Mods.RA [Desc("Range from self for looking for an alternate transport (default: 5.5 cells).")] public readonly WRange AlternateTransportScanRange = WRange.FromCells(11) / 2; + [Desc("Upgrade types to grant to transport.")] + public readonly string[] GrantUpgrades = { }; + public object Create(ActorInitializer init) { return new Passenger(this); } }