// ----------------------------------------------------------------------------------- // UCE_CalculateElementalResistance // ----------------------------------------------------------------------------------- public virtual float UCE_CalculateElementalResistance(UCE_ElementTemplate element, bool bCache = true) { float fResistance = 1.0f; // 1.0f = 100% damage by default float fValue = 0f; UCE_ElementCache elementCache = null; // -- Check Caching if (bCache && _elementsCache.TryGetValue(element.name, out elementCache) && Time.time < elementCache.timer) { return(elementCache.value); } // ------------------------------- Calculation ----------------------------------- // -- Bonus: Base Resistance float fBase = fResistance; // 1.0f = 100% damage by default foreach (LevelBasedElement ele in elementalResistances) { if (ele.template == element) { fBase += ele.Get(level); } } // -- Bonus: Passive Skills float fPassiveBonus = (from skill in skills where skill.level > 0 && skill.data is PassiveSkill select((PassiveSkill)skill.data).GetResistance(element, skill.level)).Sum(); // -- Bonus: Buffs float fBuffBonus = buffs.Sum(buff => buff.GetResistance(element)); fValue = fResistance - (fBase + fPassiveBonus + fBuffBonus); // ----------------------------- Calculation End --------------------------------- // -- Update Caching if (bCache && elementCache != null) { elementCache.timer = Time.time + cacheTimerInterval; elementCache.value = fValue; _elementsCache[element.name] = elementCache; } else if (bCache) { elementCache = new UCE_ElementCache(); elementCache.timer = Time.time + cacheTimerInterval; elementCache.value = fValue; _elementsCache.Add(element.name, elementCache); } return(fValue); }
// ----------------------------------------------------------------------------------- // OnDealDamage_UCE_Elements // ----------------------------------------------------------------------------------- public override float UCE_CalculateElementalResistance(UCE_ElementTemplate element, bool bCache = true) { float fValue = 0f; UCE_ElementCache elementCache = null; // -- Check Caching if (_elementsCache != null) { _elementsCache.TryGetValue(element.name, out elementCache); } if (bCache && elementCache != null && Time.time < elementCache.timer) { return(elementCache.value); } // ------------------------------- Calculation ----------------------------------- // -- Bonus: Base Resistance float fResistance = base.UCE_CalculateElementalResistance(element, false); // -- Bonus: Equipment float fEquipmentBonus = (from slot in equipment where slot.amount > 0 select((EquipmentItem)slot.item.data).GetResistance(element)).Sum(); // -- Bonus: Equipment Sets float fSetBonus = 0f; #if _iMMOTRAITS && _iMMOEQUIPMENTSETS && _iMMOELEMENTS // -- Equipment Bonus (Set Bonus) foreach (ItemSlot slot in equipment) { fSetBonus += slot.item.setBonusElementIndividual(slot, equipment, element); } // -- Equipment Bonus (Set Bonus) foreach (ItemSlot slot in equipment) { float tmpPointsP = slot.item.setBonusElementPartial(slot, equipment, element); fSetBonus += tmpPointsP; if (tmpPointsP > 0) { break; } } // -- Equipment Bonus (Set Bonus) foreach (ItemSlot slot in equipment) { float tmpPointsC = slot.item.setBonusElementComplete(slot, equipment, element); fSetBonus += tmpPointsC; if (tmpPointsC > 0) { break; } } #endif // -- Bonus: Traits float fTraitBonus = 0f; #if _iMMOTRAITS && _iMMOELEMENTS fTraitBonus = UCE_Traits.Sum(trait => trait.GetResistance(element)); #endif fValue = fResistance - (fEquipmentBonus + fTraitBonus + fSetBonus); // ----------------------------- Calculation End --------------------------------- // -- Update Caching if (bCache && elementCache != null) { elementCache.timer = Time.time + cacheTimerInterval; elementCache.value = fValue; _elementsCache[element.name] = elementCache; } else if (bCache) { elementCache = new UCE_ElementCache(); elementCache.timer = Time.time + cacheTimerInterval; elementCache.value = fValue; _elementsCache.Add(element.name, elementCache); } return(fValue); }