public virtual void OnHeroPolicyApplied(Policies.Policy policy) { if (policy.Kind == PolicyKind.Move) { } else if (policy.Kind == PolicyKind.Attack) { HandlePolicyApplied(policy); var ap = policy as AttackPolicy; var enemyVictim = ap.Victim as Enemy; if (enemyVictim != null) { //StrikeBack shall be done when hero is hit //if (enemyVictim.Alive && gm.Hero.CanUseAbility(Abilities.AbilityKind.StrikeBack)) //{ // gm.UseAbility(enemyVictim, gm.Hero, Abilities.AbilityKind.StrikeBack, false); //} var bulkOK = HandleBulk(enemyVictim, EntityStatKind.ChanceToBulkAttack); if (!bulkOK) { var repeatOK = gm.Hero.IsStatRandomlyTrue(EntityStatKind.ChanceToRepeatMeleeAttack); if (repeatOK) { gm.ApplyHeroPhysicalAttackPolicy(enemyVictim, false); } } } } HandleHeroActionDone(); }
public virtual void OnHeroPolicyApplied(Policies.Policy policy) { if (policy.Kind == PolicyKind.Move) { } else if (policy.Kind == PolicyKind.Attack) { HandlePolicyApplied(policy); var ap = policy as AttackPolicy; var en = ap.Victim as Enemy; var bulkOK = HandleBulk(en, EntityStatKind.ChanceToBulkAttack); if (!bulkOK) { var repeatOK = gm.Hero.IsStatRandomlyTrue(EntityStatKind.ChanceToRepeatMelleeAttack); if (repeatOK) { gm.Context.ApplyPhysicalAttackPolicy(gm.Hero, en, (p) => { }); } } } HandleHeroActionDone(); }