private double CalculateDamage(ProjectType projectType, RequiredTechType techType) { double levelAppliedDamage = CalculateSkillLevelDamage(BaseDamage); double additionalDamage = AdditionalValueFromPassive <IDamageConvertible>(levelAppliedDamage, damagePassive => { return(damagePassive.CalculateAppliedDamage(levelAppliedDamage, projectType, techType)); }); double passiveAppliedDamage = levelAppliedDamage + additionalDamage; double typeAppliedDamage = passiveAppliedDamage * (1 + SynastryCache.LanguageToProjectSynastry.GetValue(Information.Type)(projectType)); double techAppliedDamage = typeAppliedDamage * (1 + SynastryCache.LanguageToTechSynastry.GetValue(Information.Type)(techType)); return(techAppliedDamage); }
public void ApplySkill(IHurtable hurtable, ProjectType projectType, RequiredTechType techType) { if (Random.Range(0f, 1f) > Accuracy) { OnSkillMissed(this); } else { double critical = 1; if (IsTriggerable == false) { DebugLogger.LogWarningFormat("ActiveSkill::ApplySkill => Skill '{0}'의 쿨타임이 {1} 남아있는 상태에서 발동되려고 합니다.", Information.Name, RemainingCooldown); } if (UnityEngine.Random.Range(0, 1) > Information.CriticalProbability) { critical += Information.CriticalRatio; } hurtable.Hurt((int)(CalculateDamage(projectType, techType) * critical)); RemainingCooldown = DefaultCooldown; } }
public double CalculateAppliedDamage(double baseDamage, ProjectType projectType, RequiredTechType techType) { return(baseDamage * (1 + (Information.AcquisitionLevel * 0.01))); }