/// <summary> /// La creatura attacca un'altra creatura /// Restituisce i dati relativi all'attacco cioè: /// Risultati, danno effettuati e danni subiti -> AttackResult struct /// </summary> public override AttackResult Attack(Creature other) { AttackResult result; if (base.IsDead || base.IsUnconscious || other.IsDead || other.IsUnconscious) { result = new AttackResult(Results.Failed, 0, 0); } else { int res = other.Parry(Fate.Next(0, Strenght + 1), CriticalHit(), this); if (res > 0) { result = new AttackResult(Results.Success, res, 0); //se il guerriero uccide la creatura nemica aumenta l'esperienza //e riceve la metà dei soldi che possedeva l'altra creatura (li ruba in fretta) if (other.IsDead || other.IsUnconscious) { _level.GainExperience(10 * other.Level); if (_level.LevelUp()) { LevelUpCharacteristic(); } _money += (other.Money / 2); } } else if (res < 0) { result = new AttackResult(Results.ParryAndRiposte, 0, res * (-1)); } else { result = new AttackResult(Results.Parry, 0, 0); } _weapon.ReduceIntegrity(); if (_weapon.Integrity <= (int)(0.15f * _weapon.InitialIntegrity) && _money >= _weapon.CostForRepair) { _money -= _weapon.CostForRepair; _weapon.Repair(); } } return(result); }
/// <summary> /// La creatura attacca un'altra creatura /// Restituisce i dati relativi all'attacco cioè: /// Risultati, danno effettuati e danni subiti -> AttackResult struct /// </summary> public override AttackResult Attack(Creature other) { AttackResult result; if (base.IsDead || base.IsUnconscious || other.IsDead || other.IsUnconscious) { result = new AttackResult(Results.Failed, 0, 0); } else { int res = other.Parry(Fate.Next(0, Strenght + 1), CriticalHit(), this); if (res > 0) { result = new AttackResult(Results.Success, res, 0); //se il goblin uccide la creatura nemica aumenta l'esperienza //e ruba tutti i soldi che possedeva l'altra creatura if (other.IsDead || other.IsUnconscious) { _level.GainExperience(10 * other.Level); if (_level.LevelUp()) { LevelUpCharacteristic(); } _money += (other.Money); } } else if (res < 0) { result = new AttackResult(Results.ParryAndRiposte, 0, res * (-1)); } else { result = new AttackResult(Results.Parry, 0, 0); } } return(result); }
/// <summary> /// Metodo per controllare se si verifica un colpo critico oppure no, /// Di default un goblin ha il 2% di chance di effettuare un colpo critico /// </summary> protected override int CriticalHit( ) { return(Fate.Next(0, 101) < _criticalHitChances ? 2 : 1); }