public bool OnSkillUse(CharacterStats player, Stats enemy, EffectValues skillValues) { if (CheckCooldown(false)) { return(SkillUseEffect(player, enemy, skillValues)); // False on interrupted skill } return(true); }
public bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValues) { if (CheckCooldown(false)) { return(AttackHitEffect(self as CharacterStats, attacker, attackValues)); } return(true); }
public bool OnAttackUse(CharacterStats player, Stats enemy, EffectValues attackValues) { if (CheckCooldown(false)) { return(AttackUseEffect(player, enemy, attackValues)); } return(true); }
protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy) { int drain = Power(player, enemy); SkillEffectValues = new EffectValues(drain, drain, this); return(true); }
protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy) { essence = Buff.AddBuff <ShadowEssence>(player); int damage = Power(player, enemy) * essence.Stacks; SkillEffectValues = new EffectValues(damage, source: this); return(true); }
public void AttackEnemy(Stats self, Stats target) { EffectValues attackValues = new EffectValues(self.Attack); CharacterStats player = null; if (self is CharacterStats) // Check if player is attacking { player = self as CharacterStats; } // Check buff and item effects on attacking unit if (player != null) // Player is attacking { foreach (Buff buff in self.Buffs) // Buff events { if (!buff.OnAttackUse(player, target, attackValues)) { return; } } foreach (Item item in player.OwnerUnit.Items) // Item events { if (!item.OnAttackUse(player, target, attackValues)) { return; } } } else // Enemy is attacking { foreach (Buff buff in self.Buffs) { if (!buff.OnAttackUse((CharacterStats)target, self, attackValues)) { return; } } } // Calculate attack value and check buff and item effects if (target.OwnerUnit.OnAttackHit(target, self, attackValues)) { int damage = Math.Max(0, attackValues.Damage - target.Armour); target.Health -= damage; if (player != null) // Player is attacking { Battle.WriteEnemyHealth("Your attack", damage, target); } else // Enemy is attacking { Battle.WritePlayerDamage(self.OwnerUnit.Name, "attack", damage, target.Health); } } }
// Handles the damage and healing part of the skill usend on the enemy private static void damageAndHealing(CharacterStats player, Stats self, EffectValues skillEffectValues) { if (skillEffectValues.Damage >= 0) { self.Health -= skillEffectValues.Damage; Battle.WriteEnemyHealth(skillEffectValues.SourceSkill.Name, skillEffectValues.Damage, self); } if (skillEffectValues.Healing >= 0) { player.Health += skillEffectValues.Healing; Battle.WritePlayerHealthGain(skillEffectValues.SourceSkill.Name, skillEffectValues.Healing, player); } }
protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy) { shard = Buff.AddBuff <SoulShard>(player); if (soulShardCost > shard.Stacks) { Console.WriteLine($"Not enough {shard.Name} to use skill.\n"); return(false); } int damage = Power(player, enemy); SkillEffectValues = new EffectValues(damage, source: this); return(true); }
public override bool OnSkillHit(CharacterStats player, Stats enemy, EffectValues skillEffectValues) // Always call when overriding { foreach (Buff buff in player.Buffs) { if (!buff.OnSkillHit(player, enemy, skillEffectValues)) { return(false); // Skill interrupted by buff effect } } foreach (Item item in player.OwnerUnit.Items) { if (!item.OnSkillHit(player, enemy, skillEffectValues)) { return(false); // Skill interrupted by item effect } } return(base.OnSkillHit(player, enemy, skillEffectValues)); }
public sealed override bool OnSkillHit(CharacterStats player, Stats self, EffectValues skillEffectValues) { foreach (Buff buff in self.Buffs) { if (!buff.OnSkillHit(player, self, skillEffectValues)) { return(false); // Skill usage interrupted by an effect } } // Checks for base effects and then enemy's effect. If both return true then skill usage has not been interrupted and can proceed if (base.OnSkillHit(player, self, skillEffectValues) && SkillHitEffect(player, self, skillEffectValues)) { damageAndHealing(player, self, skillEffectValues); return(true); } return(false); }
// Checks all buff and item effects on the attacked unit // Returns false on impaired by an effect attack; True on successful attack public virtual bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValues) // Always call when overriding { foreach (Buff buff in self.Buffs) // Check buff effects for attacked unit { if (!buff.OnAttackHit(self, attacker, attackValues)) { return(false); } } if (self is CharacterStats) // Player is attacked --> check item effects { CharacterStats player = self as CharacterStats; foreach (Item item in player.OwnerUnit.Items) { if (!item.OnAttackHit(player, attacker, attackValues)) { return(false); // Checks for item cooldown and item on attack hit effect } } } return(true); }
protected virtual bool SkillHitEffect(CharacterStats player, Stats enemy, EffectValues attackValues) => true; // Don't call when overriding // Returns true if skill should continue; False on interrupted (e.g. miss, resist, etc.) protected virtual bool SkillUseEffect(CharacterStats player, Stats enemy, EffectValues attackValues) => true; // Don't call when overriding
public virtual bool OnSkillUse(CharacterStats player, Stats enemy, EffectValues skillValues) { return(true); }
public virtual bool OnAttackUse(CharacterStats player, Stats enemy, EffectValues attackValues) { return(true); }
public virtual bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValue) { return(true); }
// Resets necessary skill values and prepares skill for fresh use public virtual void Refresh() { SkillEffectValues = new EffectValues(); CurrentCooldown = 0; }
// The behaviour of the enemy for when hit by a skill // Returns true if skill has not been interrupted; False if skill has been interrupted and should not proceed protected virtual bool SkillHitEffect(CharacterStats player, Stats self, EffectValues skillEffectValues) { return(true); }
// Sets effect values and checks casting conditions // Returns true on valid usage condition (e.g. player has enough soul shards to cast draw soul) protected virtual bool SetSkillEffectValues(CharacterStats player, Stats enemy) { SkillEffectValues = new EffectValues(Power(player, enemy), source: this); return(true); }