public void OnEventAboutToTrigger(RuleAttackRoll evt)
 {
     if (evt.Target.Descriptor == Descriptor)
     {
         evt.AddTemporaryModifier(evt.Initiator.Stats.AdditionalAttackBonus.AddModifier(_bonus, Source, (string)null, ModifierDescriptor.FavoredEnemy));
     }
 }
Ejemplo n.º 2
0
        public void OnEventAboutToTrigger(RuleAttackRoll evt)
        {
            if (evt.Target.Descriptor.Resources.GetResourceAmount(resource) < cost)
            {
                return;
            }

            if ((base.Owner.Body.PrimaryHand.Weapon.Blueprint.Category == WeaponCategory.Dagger || base.Owner.Body.PrimaryHand.Weapon.Blueprint.Category == WeaponCategory.Starknife) && base.Owner.Body.PrimaryHand.Weapon.Blueprint.IsRanged)
            {
                ThrowAnything.toggleThrown(base.Owner.Body.PrimaryHand.Weapon, evt.Initiator);
                did_swap = true;
            }

            if (!evt.Weapon.Blueprint.IsMelee || evt.Parry != null || !base.Owner.Unit.IsEnemy(evt.Initiator))
            {
                return;
            }
            if (evt.Target != base.Owner.Unit)
            {
                return;
            }
            if (!base.Owner.Unit.IsReach(evt.Target, base.Owner.Body.PrimaryHand))
            {
                return;
            }
            //TODO - Conditions?

            /*
             * if (this.AttackerCondition.HasConditions)
             * {
             *  MechanicsContext maybeContext = base.Fact.MaybeContext;
             *  using ((maybeContext != null) ? maybeContext.GetDataScope(evt.Initiator) : null)
             *  {
             *      if (!this.AttackerCondition.Check(null))
             *      {
             *          return;
             *      }
             *  }
             * }
             */

            evt.TryParry(base.Owner.Unit, base.Owner.Body.PrimaryHand.Weapon, 0);
            if (evt.Parry == null)
            {
                return;
            }
            ModifiableValue additionalAttackBonus = base.Owner.Stats.AdditionalAttackBonus;
            int             num = evt.Initiator.Descriptor.State.Size - base.Owner.State.Size;

            if (num > 0)
            {
                int value = -2 * num;
                evt.AddTemporaryModifier(additionalAttackBonus.AddModifier(value, this, ModifierDescriptor.Penalty));
            }
        }
        public void OnEventAboutToTrigger(RuleAttackRoll evt)
        {
            var unit_part_fe = this.Owner.Get <UnitPartFavoredEnemy>();

            if (unit_part_fe == null)
            {
                return;
            }

            foreach (var fe in unit_part_fe.Entries)
            {
                if ((fe.CheckedFeatures).Any <BlueprintUnitFact>((Func <BlueprintUnitFact, bool>)(p => evt.Initiator.Descriptor.HasFact(p))))
                {
                    evt.AddTemporaryModifier(evt.Target.Stats.AC.AddModifier(this.value.Calculate(this.Fact.MaybeContext) * this.Fact.GetRank(), (GameLogicComponent)this, this.descriptor));
                    break;
                }
            }
        }