public static CharacterStats GetBuffStats(this ICharacterData data) { if (data == null) { return(new CharacterStats()); } CharacterStats result = new CharacterStats(); IList <CharacterBuff> buffs = data.Buffs; foreach (CharacterBuff buff in buffs) { result += buff.GetIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(buff.GetIncreaseAttributes()); } // Passive skills IList <CharacterSkill> skills = data.Skills; foreach (CharacterSkill skill in skills) { if (skill.GetSkill() == null || skill.GetSkill().skillType != SkillType.Passive || skill.level <= 0) { continue; } result += skill.GetPassiveBuffIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(skill.GetPassiveBuffIncreaseAttributes()); } return(result); }
public static CharacterStats GetBuffStats(this ICharacterData data) { if (data == null) { return(new CharacterStats()); } var result = new CharacterStats(); var buffs = data.Buffs; foreach (var buff in buffs) { result += buff.GetIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(buff.GetIncreaseAttributes()); } // Passive skills var skills = data.Skills; Buff tempBuff; foreach (var skill in skills) { if (skill.GetSkill() == null || skill.GetSkill().skillType != SkillType.Passive || skill.level <= 0) { continue; } tempBuff = skill.GetSkill().buff; result += tempBuff.GetIncreaseStats(skill.level); result += GameDataHelpers.GetStatsFromAttributes(tempBuff.GetIncreaseAttributes(skill.level)); } return(result); }
public static CharacterStats GetCharacterStats(this ICharacterData data) { if (data == null) { return(new CharacterStats()); } short level = data.Level; BaseCharacter character = data.GetDatabase(); CharacterStats result = new CharacterStats(); if (character != null) { result += character.GetCharacterStats(level); } result += GameDataHelpers.GetStatsFromAttributes(GetAttributes(data)); return(result); }
public static CharacterStats GetEquipmentStats(this ICharacterData data) { if (data == null) { return(new CharacterStats()); } CharacterStats result = new CharacterStats(); // Armors IList <CharacterItem> equipItems = data.EquipItems; foreach (CharacterItem equipItem in equipItems) { if (equipItem.IsEmpty()) { continue; } result += equipItem.GetIncreaseStats(); result += equipItem.GetSocketsIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(equipItem.GetIncreaseAttributes()); result += GameDataHelpers.GetStatsFromAttributes(equipItem.GetSocketsIncreaseAttributes()); } // Weapons EquipWeapons equipWeapons = data.EquipWeapons; if (equipWeapons != null) { // Right hand equipment if (!equipWeapons.rightHand.IsEmpty()) { result += equipWeapons.rightHand.GetIncreaseStats(); result += equipWeapons.rightHand.GetSocketsIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.rightHand.GetIncreaseAttributes()); result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.rightHand.GetSocketsIncreaseAttributes()); } // Left hand equipment if (!equipWeapons.leftHand.IsEmpty()) { result += equipWeapons.leftHand.GetIncreaseStats(); result += equipWeapons.leftHand.GetSocketsIncreaseStats(); result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.leftHand.GetIncreaseAttributes()); result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.leftHand.GetSocketsIncreaseAttributes()); } } return(result); }
public static CharacterStats GetEquipmentStats(this ICharacterData data) { if (data == null) { return(new CharacterStats()); } var result = new CharacterStats(); // Armors Item tempEquipment = null; var equipItems = data.EquipItems; foreach (var equipItem in equipItems) { tempEquipment = equipItem.GetEquipmentItem(); if (tempEquipment != null) { result += tempEquipment.GetIncreaseStats(equipItem.level, equipItem.GetEquipmentBonusRate()); result += GameDataHelpers.GetStatsFromAttributes(tempEquipment.GetIncreaseAttributes(equipItem.level, equipItem.GetEquipmentBonusRate())); } } // Weapons var equipWeapons = data.EquipWeapons; if (equipWeapons != null) { // Right hand equipment var rightHandItem = equipWeapons.rightHand; tempEquipment = rightHandItem.GetEquipmentItem(); if (tempEquipment != null) { result += tempEquipment.GetIncreaseStats(rightHandItem.level, rightHandItem.GetEquipmentBonusRate()); result += GameDataHelpers.GetStatsFromAttributes(tempEquipment.GetIncreaseAttributes(rightHandItem.level, rightHandItem.GetEquipmentBonusRate())); } // Left hand equipment var leftHandItem = equipWeapons.leftHand; tempEquipment = leftHandItem.GetEquipmentItem(); if (tempEquipment != null) { result += tempEquipment.GetIncreaseStats(leftHandItem.level, leftHandItem.GetEquipmentBonusRate()); result += GameDataHelpers.GetStatsFromAttributes(tempEquipment.GetIncreaseAttributes(leftHandItem.level, leftHandItem.GetEquipmentBonusRate())); } } return(result); }
public static void GetEquipmentSetBonus(this ICharacterData data, out CharacterStats bonusStats, Dictionary <Attribute, short> bonusAttributes, Dictionary <DamageElement, float> bonusResistances, Dictionary <DamageElement, MinMaxFloat> bonusIncreaseDamages, Dictionary <Skill, short> bonusSkills, Dictionary <EquipmentSet, int> equipmentSets) { bonusStats = new CharacterStats(); bonusAttributes.Clear(); bonusResistances.Clear(); bonusIncreaseDamages.Clear(); bonusSkills.Clear(); // Equipment Set equipmentSets.Clear(); // Armor equipment set foreach (CharacterItem equipItem in data.EquipItems) { if (equipItem.NotEmptySlot() && equipItem.GetItem().equipmentSet != null) { if (equipmentSets.ContainsKey(equipItem.GetItem().equipmentSet)) { ++equipmentSets[equipItem.GetItem().equipmentSet]; } else { equipmentSets.Add(equipItem.GetItem().equipmentSet, 0); } } } // Weapon equipment set if (data.EquipWeapons != null) { // Right hand equipment set if (data.EquipWeapons.rightHand.NotEmptySlot() && data.EquipWeapons.rightHand.GetItem().equipmentSet != null) { if (equipmentSets.ContainsKey(data.EquipWeapons.rightHand.GetItem().equipmentSet)) { ++equipmentSets[data.EquipWeapons.rightHand.GetItem().equipmentSet]; } else { equipmentSets.Add(data.EquipWeapons.rightHand.GetItem().equipmentSet, 0); } } // Left hand equipment set if (data.EquipWeapons.leftHand.NotEmptySlot() && data.EquipWeapons.leftHand.GetItem().equipmentSet != null) { if (equipmentSets.ContainsKey(data.EquipWeapons.leftHand.GetItem().equipmentSet)) { ++equipmentSets[data.EquipWeapons.leftHand.GetItem().equipmentSet]; } else { equipmentSets.Add(data.EquipWeapons.leftHand.GetItem().equipmentSet, 0); } } } // Apply set items Dictionary <Attribute, short> tempIncreaseAttributes; Dictionary <DamageElement, float> tempIncreaseResistances; Dictionary <DamageElement, MinMaxFloat> tempIncreaseDamages; Dictionary <Skill, short> tempIncreaseSkills; CharacterStats tempIncreaseStats; foreach (KeyValuePair <EquipmentSet, int> cacheEquipmentSet in equipmentSets) { EquipmentBonus[] effects = cacheEquipmentSet.Key.effects; int setAmount = cacheEquipmentSet.Value; for (int i = 0; i < setAmount; ++i) { if (i < effects.Length) { // Make temp of data tempIncreaseAttributes = GameDataHelpers.CombineAttributes(effects[i].attributes, null, 1f); tempIncreaseResistances = GameDataHelpers.CombineResistances(effects[i].resistances, null, 1f); tempIncreaseDamages = GameDataHelpers.CombineDamages(effects[i].damages, null, 1f); tempIncreaseSkills = GameDataHelpers.CombineSkills(effects[i].skills, null); tempIncreaseStats = effects[i].stats + GameDataHelpers.GetStatsFromAttributes(tempIncreaseAttributes); // Combine to result dictionaries bonusAttributes = GameDataHelpers.CombineAttributes(bonusAttributes, tempIncreaseAttributes); bonusResistances = GameDataHelpers.CombineResistances(bonusResistances, tempIncreaseResistances); bonusIncreaseDamages = GameDataHelpers.CombineDamages(bonusIncreaseDamages, tempIncreaseDamages); bonusSkills = GameDataHelpers.CombineSkills(bonusSkills, tempIncreaseSkills); bonusStats += tempIncreaseStats; } else { break; } } } }