public void ProcessDamageEvent(IEntity damager, ICombatant damaged, int damage) { bool resolve_after = !resolving_stack && !attack_happening; AfterDamageTakenTriggerInfo info = new AfterDamageTakenTriggerInfo(damager, damaged, damage); AfterDamageDealtTriggerInfo dealt_info = new AfterDamageDealtTriggerInfo(damager, damaged, damage); Creature creature = damager as Creature; if (creature != null) { AddTriggersToStack(creature.abilities.GetLocalTriggers(dealt_info)); } AddTriggersToStack(trigger_manager.GetTriggers(dealt_info)); creature = damaged as Creature; if (creature != null) { AddTriggersToStack(creature.abilities.GetLocalTriggers(info)); } AddTriggersToStack(trigger_manager.GetTriggers(info)); if (resolve_after) { ResolveStack(); } }
public override bool TriggersFrom(TriggerInfo info) { if (info.type != type) { return(false); } AfterDamageTakenTriggerInfo damage_info = info as AfterDamageTakenTriggerInfo; if (damage_info == null) { return(false); } if (damage_info.damaged.entity_type == EntityType.player && !players) { return(false); } if (damage_info.damaged as Creature != null && !creatures) { return(false); } return(damage_info.damage >= damage_needed_to_trigger); }
public override void Resolve(TriggerInfo info) { base.Resolve(info); if (info.type == TriggerType.damage_taken) { AfterDamageTakenTriggerInfo damage_info = info as AfterDamageTakenTriggerInfo; if (damage_info.damager != null) { foreach (TargetedEffect te in effects_targeting_damager) { te.SetTarget(damage_info.damager); te.Resolve(source); } } } }