Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
 public double CalculateAppliedDamage(double baseDamage, ProjectType projectType, RequiredTechType techType)
 {
     return(baseDamage * (1 + (Information.AcquisitionLevel * 0.01)));
 }