public static Dictionary <DamageElement, MinMaxFloat> GetBuffIncreaseDamages(this ICharacterData data) { if (data == null) { return(new Dictionary <DamageElement, MinMaxFloat>()); } Dictionary <DamageElement, MinMaxFloat> result = new Dictionary <DamageElement, MinMaxFloat>(); IList <CharacterBuff> buffs = data.Buffs; foreach (CharacterBuff buff in buffs) { result = GameDataHelpers.CombineDamages(result, buff.GetIncreaseDamages()); } // 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 = GameDataHelpers.CombineDamages(result, skill.GetPassiveBuffIncreaseDamages()); } return(result); }
public static Dictionary <DamageElement, MinMaxFloat> GetIncreaseDamages(this ICharacterData data, bool sumWithEquipments = true, bool sumWithBuffs = true) { Dictionary <DamageElement, MinMaxFloat> result = new Dictionary <DamageElement, MinMaxFloat>(); if (sumWithEquipments) { result = GameDataHelpers.CombineDamages(result, data.GetEquipmentIncreaseDamages()); } if (sumWithBuffs) { result = GameDataHelpers.CombineDamages(result, data.GetBuffIncreaseDamages()); } return(result); }
public static void GetAllStats(this ICharacterData data, out CharacterStats resultStats, Dictionary <Attribute, short> resultAttributes, Dictionary <DamageElement, float> resultResistances, Dictionary <DamageElement, MinMaxFloat> resultIncreaseDamages, Dictionary <Skill, short> resultSkills, Dictionary <EquipmentSet, int> resultEquipmentSets, out int resultMaxHp, out int resultMaxMp, out int resultMaxStamina, out int resultMaxFood, out int resultMaxWater, out float resultTotalItemWeight, out float resultAtkSpeed, out float resultMoveSpeed) { resultStats = new CharacterStats(); resultAttributes.Clear(); resultResistances.Clear(); resultIncreaseDamages.Clear(); resultSkills.Clear(); resultEquipmentSets.Clear(); GetEquipmentSetBonus(data, out resultStats, resultAttributes, resultResistances, resultIncreaseDamages, resultSkills, resultEquipmentSets); resultStats = resultStats + data.GetStats(); resultAttributes = GameDataHelpers.CombineAttributes(resultAttributes, data.GetAttributes()); resultResistances = GameDataHelpers.CombineResistances(resultResistances, data.GetResistances()); resultIncreaseDamages = GameDataHelpers.CombineDamages(resultIncreaseDamages, data.GetIncreaseDamages()); resultSkills = GameDataHelpers.CombineSkills(resultSkills, data.GetSkills()); // Sum with other stats resultMaxHp = (int)resultStats.hp; resultMaxMp = (int)resultStats.mp; resultMaxStamina = (int)resultStats.stamina; resultMaxFood = (int)resultStats.food; resultMaxWater = (int)resultStats.water; resultTotalItemWeight = GameInstance.Singleton.GameplayRule.GetTotalWeight(data); resultAtkSpeed = resultStats.atkSpeed; resultMoveSpeed = resultStats.moveSpeed; // Validate max amount foreach (Attribute attribute in new List <Attribute>(resultAttributes.Keys)) { if (attribute.maxAmount > 0 && resultAttributes[attribute] > attribute.maxAmount) { resultAttributes[attribute] = attribute.maxAmount; } } }
public Dictionary <DamageElement, MinMaxFloat> GetSocketsIncreaseDamages() { if (GetEquipmentItem() == null || Sockets.Count == 0) { return(null); } Dictionary <DamageElement, MinMaxFloat> result = new Dictionary <DamageElement, MinMaxFloat>(); Item tempEnhancer; foreach (int socketId in Sockets) { if (GameInstance.Items.TryGetValue(socketId, out tempEnhancer)) { // Level for increase stats always 1 result = GameDataHelpers.CombineDamages(tempEnhancer.socketEnhanceEffect.damages, result, 1f); } } return(result); }
public static Dictionary <DamageElement, MinMaxFloat> GetEquipmentIncreaseDamages(this ICharacterData data) { if (data == null) { return(new Dictionary <DamageElement, MinMaxFloat>()); } Dictionary <DamageElement, MinMaxFloat> result = new Dictionary <DamageElement, MinMaxFloat>(); // Armors IList <CharacterItem> equipItems = data.EquipItems; foreach (CharacterItem equipItem in equipItems) { if (equipItem.IsEmpty()) { continue; } result = GameDataHelpers.CombineDamages(result, equipItem.GetIncreaseDamages()); result = GameDataHelpers.CombineDamages(result, equipItem.GetSocketsIncreaseDamages()); } // Weapons EquipWeapons equipWeapons = data.EquipWeapons; if (equipWeapons != null) { // Right hand equipment if (equipWeapons.rightHand.IsEmpty()) { result = GameDataHelpers.CombineDamages(result, equipWeapons.rightHand.GetIncreaseDamages()); result = GameDataHelpers.CombineDamages(result, equipWeapons.rightHand.GetSocketsIncreaseDamages()); } // Left hand equipment if (equipWeapons.leftHand.IsEmpty()) { result = GameDataHelpers.CombineDamages(result, equipWeapons.leftHand.GetIncreaseDamages()); result = GameDataHelpers.CombineDamages(result, equipWeapons.leftHand.GetSocketsIncreaseDamages()); } } 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; } } } }