Exemplo n.º 1
0
        public static SkillDamageType GetSkillDamageType(string strtype)
        {
            SkillDamageType type = SkillDamageType.Target;

            switch (strtype.ToLower())
            {
            case "target":
                type = SkillDamageType.Target;
                break;

            case "targetarea":
                type = SkillDamageType.TargetArea;
                break;

            case "casterarea":
                type = SkillDamageType.CasterArea;
                break;

            case "casterfront":
                type = SkillDamageType.CasterFront;
                break;
            }

            return(type);
        }
Exemplo n.º 2
0
 public static float CalcDamage(SkillDamageType type, Character chara, float skillDamageFactor, float baseSkillDamage)
 {
     float damage = 0;
     switch (type)
     {
         case SkillDamageType.ATK:
             {
                 damage = Mathf.FloorToInt(Clamp(chara.ATK) * skillDamageFactor + baseSkillDamage);
             } break;
         case SkillDamageType.HP:
             {
                 damage = Mathf.FloorToInt(Clamp(chara.MaxHp) * skillDamageFactor + baseSkillDamage);
             } break;
         case SkillDamageType.AS:
             {
                 damage = Mathf.FloorToInt(Clamp(chara.AS) * skillDamageFactor + baseSkillDamage);
             } break;
         case SkillDamageType.DEF:
             {
                 damage = Mathf.FloorToInt(Clamp(chara.DEF) * skillDamageFactor + baseSkillDamage);
             } break;
         default:
             {
                 damage = baseSkillDamage;
             } break;
     }
     return damage;
 }
Exemplo n.º 3
0
 void InitDamage()
 {
     string str = skilldata.Damage;
     JsonData[] json = JsonMapper.ToObject<JsonData[]>(str);
     int type = (int)json[0];
     skillDamType = (SkillDamageType)type;
     baseSkillDamage = (float)json[1];
     baseSkillDamage = baseSkillDamage + lv * skilldata.GrowDamage;
     skillDamageFactor = (float)json[2];
 }
Exemplo n.º 4
0
        public static int CalcImpactDamage(CharacterInfo sender,
                                           CharacterInfo receiver,
                                           SkillDamageType damageType,
                                           ElementDamageType elementType,
                                           float attackFactor,
                                           int damageFromConfig,
                                           out bool isCritical)
        {
            isCritical = false;
            if (null == sender || null == receiver)
            {
                return(damageFromConfig);
            }

            int   ad    = sender.GetActualProperty().AttackBase;
            int   adp   = receiver.GetActualProperty().ADefenceBase;
            int   mdp   = receiver.GetActualProperty().MDefenceBase;
            int   level = receiver.GetLevel();
            float fd    = sender.GetActualProperty().FireDamage;
            float fe    = receiver.GetActualProperty().FireERD;
            float id    = sender.GetActualProperty().IceDamage;
            float ie    = receiver.GetActualProperty().IceERD;
            float pd    = sender.GetActualProperty().PoisonDamage;
            float pe    = receiver.GetActualProperty().PoisonERD;
            float c     = sender.GetActualProperty().Critical;
            float cp    = sender.GetActualProperty().CriticalPow;
            float cbhp  = sender.GetActualProperty().CriticalBackHitPow;
            float ccp   = sender.GetActualProperty().CriticalCrackPow;
            float sd    = sender.GetMovementStateInfo().GetFaceDir();
            float rd    = receiver.GetMovementStateInfo().GetFaceDir();

            if (level <= 0)
            {
                return(damageFromConfig);
            }

            float baseDamage    = 0f;
            float elementDamage = 0f;
            float normalDamage  = 0f;
            float skillDamage   = 0f;
            float totalDamage   = damageFromConfig;

            /// base
            if (SkillDamageType.DC_Ad == damageType)
            {
                if (IsInvalid(adp, level))
                {
                    baseDamage = 0;
                }
                else
                {
                    baseDamage = ad * (1 - (adp / (float)level) / (float)(10 + Math.Abs(adp) / (float)level));
                }
            }
            else if (SkillDamageType.DC_Ap == damageType)
            {
                if (IsInvalid(mdp, level))
                {
                    baseDamage = 0;
                }
                else
                {
                    baseDamage = ad * (1 - (mdp / (float)level) / (float)(10 + Math.Abs(mdp) / (float)level));
                }
            }
            /// element
            if (ElementDamageType.DC_Fire == elementType)
            {
                if (IsInvalid(fe, level))
                {
                    elementDamage = 0;
                }
                else
                {
                    elementDamage = fd * (1 - (fe / (float)level) / (float)(10 + Math.Abs(fe) / (float)level));
                }
            }
            else if (ElementDamageType.DC_Ice == elementType)
            {
                if (IsInvalid(ie, level))
                {
                    elementDamage = 0;
                }
                else
                {
                    elementDamage = id * (1 - (ie / (float)level) / (float)(10 + Math.Abs(ie) / (float)level));
                }
            }
            else if (ElementDamageType.DC_Poison == elementType)
            {
                if (IsInvalid(pe, level))
                {
                    elementDamage = 0;
                }
                else
                {
                    elementDamage = pd * (1 - (pe / (float)level) / (float)(10 + Math.Abs(pe) / (float)level));
                }
            }
            /// normal
            normalDamage = (baseDamage + elementDamage) * attackFactor;
            /// skill
            if (IsInvalid(adp, level))
            {
                skillDamage = 0;
            }
            else
            {
                skillDamage = damageFromConfig * (1 - (adp / (float)level) / (float)(10 + Math.Abs(adp) / (float)level));
            }
            /// total
            totalDamage = normalDamage + skillDamage;
            /// critical
            int   num    = CrossEngineHelper.Random.Next(0, 100);
            float random = (float)(num * 0.01);

            if (random < c)
            {
                isCritical   = true;
                totalDamage *= cp;
            }
            /// check backhit
            if (IsBackHit(sd, rd))
            {
                totalDamage *= cbhp;
            }
            /// ckeck crack
            if (IsCrack(receiver))
            {
                totalDamage *= ccp;
            }

            return((int)totalDamage);
        }