public void AddFightValues(FightValues p_fightValues)
        {
            AddEquipmentDependentFightValues(p_fightValues);
            foreach (Skill skill in m_availableSkills)
            {
                foreach (SkillEffectStaticData skillEffectStaticData in skill.CurrentlyAvailableEffects)
                {
                    ESkillEffectType type = skillEffectStaticData.Type;
                    switch (type)
                    {
                    case ESkillEffectType.INCREASE_MAGIC_RESISTANCE:
                        IncreaseMagicResistance(p_fightValues, skillEffectStaticData, skill);
                        break;

                    default:
                        if (type == ESkillEffectType.INCREASE_MAGIC_FACTOR_SKILL_BONUS)
                        {
                            IncreaseMagicSkillBonus(p_fightValues, skillEffectStaticData, skill);
                        }
                        break;

                    case ESkillEffectType.INCREASE_EVADE_VALUE:
                        p_fightValues.EvadeValue = (Int32)Math.Round(ResolveValue(p_fightValues.EvadeValue, skillEffectStaticData, skill), MidpointRounding.AwayFromZero);
                        break;
                    }
                }
            }
        }
 public void OnCombatReceivedDamage(ref Damage damage, ref Resistance resistance, ref DamageResult damageResult, Boolean p_isCritical, Boolean p_isMelee, EDamageType p_damageType)
 {
     foreach (Skill skill in m_availableSkills)
     {
         foreach (SkillEffectStaticData skillEffectStaticData in skill.CurrentlyAvailableEffects)
         {
             ESkillEffectType type = skillEffectStaticData.Type;
             if (type == ESkillEffectType.REDUCE_INCOMING_CRITICAL_MAGIC_DAMAGE)
             {
                 if (p_isCritical)
                 {
                     damageResult.EffectiveValue = (Int32)Math.Round(damageResult.EffectiveValue * (1f - skillEffectStaticData.Value), MidpointRounding.AwayFromZero);
                 }
             }
         }
     }
 }
 public void OnCombatEnd(AttackResult p_result, Boolean p_isMelee, EDamageType p_damageType)
 {
     foreach (Skill skill in m_availableSkills)
     {
         foreach (SkillEffectStaticData skillEffectStaticData in skill.CurrentlyAvailableEffects)
         {
             ESkillEffectType type = skillEffectStaticData.Type;
             if (type == ESkillEffectType.RESTORE_MANA_ON_RESIST_MAGIC)
             {
                 if (p_result.Result == EResultType.EVADE && p_damageType != EDamageType.PHYSICAL)
                 {
                     Int32 num = (Int32)ResolveValue(m_character.ManaPoints, skillEffectStaticData, skill);
                     m_character.ChangeMP(num - m_character.ManaPoints);
                 }
             }
         }
     }
 }
        public Single GetReducePriceDifferenceCoefficient()
        {
            Single result = 0;

            foreach (Skill skill in m_availableSkills)
            {
                foreach (SkillEffectStaticData skillEffectStaticData in skill.CurrentlyAvailableEffects)
                {
                    ESkillEffectType type = skillEffectStaticData.Type;
                    if (type == ESkillEffectType.ReducePriceDifference)
                    {
                        result = ResolveValue(result, skillEffectStaticData, skill);
                    }
                }
            }

            return(result);
        }
        private void AddSkillEffects(FightValues p_fightValues, Equipment p_equipment, EEquipSlots p_slot, Skill p_skill)
        {
            List <SkillEffectStaticData> currentlyAvailableEffects = p_skill.CurrentlyAvailableEffects;

            foreach (SkillEffectStaticData skillEffectStaticData in currentlyAvailableEffects)
            {
                ESkillEffectType type = skillEffectStaticData.Type;
                switch (type)
                {
                case ESkillEffectType.INCREASE_ATTACK_VALUE:
                    IncreaseAttackValue(p_fightValues, skillEffectStaticData, p_skill, p_slot);
                    break;

                case ESkillEffectType.INCREASE_DAMAGE_FACTOR:
                    IncreaseDamageFactor(p_fightValues, skillEffectStaticData, p_skill, p_slot);
                    break;

                case ESkillEffectType.INCREASE_DAMAGE_SKILL_BONUS:
                    IncreaseDamageSkillBonus(p_fightValues, skillEffectStaticData, p_skill, p_slot);
                    break;

                default:
                    if (type == ESkillEffectType.INCREASE_ARMOR_VALUE)
                    {
                        IncreaseArmorValue(p_fightValues, skillEffectStaticData, p_skill);
                    }
                    break;

                case ESkillEffectType.INCREASE_CRITICAL_HIT_CHANCE:
                    IncreaseCriticalHitChances(p_fightValues, skillEffectStaticData, p_skill, p_slot);
                    break;

                case ESkillEffectType.INCREASE_CRITICAL_DAMAGE:
                    IncreaseCriticalDamageFactor(p_fightValues, skillEffectStaticData, p_skill, p_slot);
                    break;

                case ESkillEffectType.INCREASE_CRITICAL_MAGIC_DAMAGE:
                    IncreaseCriticalMagicDamageFactor(p_fightValues, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.INCREASE_CRITICAL_MAGIC_HIT_CHANCE:
                    IncreaseMagicalCriticalHitChances(p_fightValues, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.ADDITIONAL_BLOCK_ATTEMPT:
                    IncreaseBlockAttempts(p_fightValues, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.ADDITIONAL_MELEE_BLOCK_ATTEMPT:
                    IncreaseMeleeBlockAttempts(p_fightValues, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.INCREASE_CRITICAL_HIT_DESTINY_MULTIPLIER:
                    IncreaseCriticalHitDestinyMultiplier(p_fightValues, p_slot, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.DECREASE_DAMAGE_PENALTY:
                    DecreaseDamageValuePenalty(p_fightValues, p_slot, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.DECREASE_ATTACK_VALUE_PENALTY:
                    DecreaseAttackValuePenalty(p_fightValues, skillEffectStaticData, p_skill);
                    break;

                case ESkillEffectType.INCREASE_BLOCK_CHANCE:
                    IncreaseBlockChance(p_fightValues, skillEffectStaticData, p_skill);
                    break;
                }
            }
        }