fix tk detection; fix crash on lacking ValuedInfo; fix traits being fetched twice; fix needless mutation of 'exp'

This commit is contained in:
Chris Forbes
2010-05-27 18:31:42 +12:00
parent a070820695
commit 0c8e8b5658
2 changed files with 84 additions and 95 deletions

View File

@@ -18,9 +18,8 @@
*/
#endregion
using OpenRA.Traits;
using System.Linq;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
{
class GivesExperienceInfo : TraitInfo<GivesExperience> { public readonly int Experience = -1; }
@@ -32,16 +31,17 @@ namespace OpenRA.Mods.RA
if (e.DamageState == DamageState.Dead)
{
// Prevent TK from giving exp
//if (self.Owner == e.Attacker.Owner)
// return;
var exp = 0;
if (self.Info.Traits.Get<ValuedInfo>() != null)
exp = self.Info.Traits.Get<ValuedInfo>().Cost;
if (self.Info.Traits.Get<GivesExperienceInfo>().Experience >= 0)
exp = self.Info.Traits.Get<GivesExperienceInfo>().Experience;
var killer = e.Attacker.traits.WithInterface<GainsExperience>().FirstOrDefault();
//if (e.Attacker == null || e.Attacker.Owner.Stances[ self.Owner ] == Stance.Ally )
// return;
var info = self.Info.Traits.Get<GivesExperienceInfo>();
var valued = self.Info.Traits.GetOrDefault<ValuedInfo>();
var exp = info.Experience >= 0
? info.Experience
: valued != null ? valued.Cost : 0;
var killer = e.Attacker.traits.GetOrDefault<GainsExperience>();
if (killer != null)
killer.GiveExperience(exp);
}