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); }
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); }