Пример #1
0
        private static float GetAnimDefenceRatio(BaseActor actor)
        {
            float animDefenceRatio = 0f;

            if (actor is MonsterActor)
            {
                MonsterActor actor2 = (MonsterActor)actor;
                float        defaultAnimDefenceRatio = actor2.config.StateMachinePattern.DefaultAnimDefenceRatio;
                string       currentSkillID          = actor2.monster.CurrentSkillID;
                animDefenceRatio = defaultAnimDefenceRatio;
                if (actor2.monster.IsAnimatorInTag(MonsterData.MonsterTagGroup.Throw))
                {
                    return(actor2.config.StateMachinePattern.ThrowAnimDefenceRatio + actor2.GetProperty("Actor_ThrowAniDefenceDelta"));
                }
                if (string.IsNullOrEmpty(currentSkillID) || !actor2.config.Skills.ContainsKey(currentSkillID))
                {
                    return(animDefenceRatio);
                }
                float num3 = actor2.monster.GetCurrentNormalizedTime() % 1f;
                ConfigMonsterSkill skill = actor2.config.Skills[currentSkillID];
                if ((num3 <= skill.AnimDefenceNormalizedTimeStart) || (num3 >= skill.AnimDefenceNormalizedTimeStop))
                {
                    return(animDefenceRatio);
                }
                return(skill.AnimDefenceRatio);
            }
            if (actor is AvatarActor)
            {
                AvatarActor actor3 = (AvatarActor)actor;
                animDefenceRatio = actor3.config.StateMachinePattern.DefaultAnimDefenceRatio;
                string str2 = actor3.avatar.CurrentSkillID;
                if (!string.IsNullOrEmpty(str2) && actor3.config.Skills.ContainsKey(str2))
                {
                    float             num4   = actor3.avatar.GetCurrentNormalizedTime() % 1f;
                    ConfigAvatarSkill skill2 = actor3.config.Skills[str2];
                    if ((num4 > skill2.AnimDefenceNormalizedTimeStart) && (num4 < skill2.AnimDefenceNormalizedTimeStop))
                    {
                        animDefenceRatio = skill2.AnimDefenceRatio;
                    }
                }
            }
            return(animDefenceRatio);
        }
Пример #2
0
        public static AttackResult ResolveAttackDataFinal(BaseActor attackee, AttackData attackData)
        {
            if (!attackData.rejected)
            {
                if ((attackData.attackeeAniDefenceRatio > attackData.attackerAniDamageRatio) && (attackData.hitEffect > AttackResult.AnimatorHitEffect.Light))
                {
                    attackData.hitEffect = AttackResult.AnimatorHitEffect.Light;
                }
                if ((attackee is MonsterActor) && (attackData.beHitEffectPattern == null))
                {
                    MonsterActor actor = (MonsterActor)attackee;
                    if ((attackData.isAnimEventAttack && (attackData.hitEffect == AttackResult.AnimatorHitEffect.Light)) && (attackData.attackerAniDamageRatio > 0.4f))
                    {
                        if (((attackData.attackEffectPattern == null) || !attackData.attackEffectPattern.MuteAttackEffect) && (actor.IsActive() && (actor.monster.CurrentSkillID != null)))
                        {
                            ConfigMonsterSkill skill = actor.config.Skills[actor.monster.CurrentSkillID];
                            if (actor.monster.GetCurrentNormalizedTime() < skill.AttackNormalizedTimeStop)
                            {
                                attackData.beHitEffectPattern = InLevelData.InLevelMiscData.NoBreakBehitEffect;
                            }
                        }
                    }
                    else if (actor.abilityState.ContainsState(AbilityState.Frozen))
                    {
                        attackData.beHitEffectPattern = InLevelData.InLevelMiscData.FrozenBehitEffect;
                    }
                    else if (attackData.attackerAniDamageRatio <= 0.6f)
                    {
                        attackData.beHitEffectPattern = actor.config.StateMachinePattern.BeHitEffect;
                    }
                    else if (attackData.attackerAniDamageRatio <= 0.8f)
                    {
                        attackData.beHitEffectPattern = actor.config.StateMachinePattern.BeHitEffectMid;
                    }
                    else
                    {
                        attackData.beHitEffectPattern = actor.config.StateMachinePattern.BeHitEffectBig;
                    }
                }
                attackData.aniDamageRatio = attackData.attackerAniDamageRatio;
                List <KeyValuePair <AttackResult.ElementType, float> > list = new List <KeyValuePair <AttackResult.ElementType, float> > {
                    new KeyValuePair <AttackResult.ElementType, float>(0, attackData.plainDamage),
                    new KeyValuePair <AttackResult.ElementType, float>(3, attackData.iceDamage),
                    new KeyValuePair <AttackResult.ElementType, float>(1, attackData.fireDamage),
                    new KeyValuePair <AttackResult.ElementType, float>(2, attackData.thunderDamage),
                    new KeyValuePair <AttackResult.ElementType, float>(4, attackData.alienDamage)
                };
                KeyValuePair <AttackResult.ElementType, float> pair = list[0];
                for (int i = 1; i < list.Count; i++)
                {
                    KeyValuePair <AttackResult.ElementType, float> pair2 = list[i];
                    if (pair2.Value > pair.Value)
                    {
                        pair = pair2;
                    }
                }
                attackData.plainDamage   = 0f;
                attackData.iceDamage     = 0f;
                attackData.fireDamage    = 0f;
                attackData.thunderDamage = 0f;
                attackData.alienDamage   = 0f;
                switch (pair.Key)
                {
                case AttackResult.ElementType.Plain:
                    attackData.plainDamage = pair.Value;
                    break;

                case AttackResult.ElementType.Fire:
                    attackData.fireDamage = pair.Value;
                    break;

                case AttackResult.ElementType.Thunder:
                    attackData.thunderDamage = pair.Value;
                    break;

                case AttackResult.ElementType.Ice:
                    attackData.iceDamage = pair.Value;
                    break;

                case AttackResult.ElementType.Alien:
                    attackData.alienDamage = pair.Value;
                    break;
                }
                attackData.resolveStep = AttackData.AttackDataStep.FinalResolved;
            }
            return(attackData);
        }