コード例 #1
0
    public static Dictionary <Skill, short> GetSkills(this ICharacterData data, bool sumWithEquipments = true)
    {
        Dictionary <Skill, short> result = data.GetCharacterSkills();

        if (sumWithEquipments)
        {
            result = GameDataHelpers.CombineSkills(result, data.GetEquipmentSkills());
        }
        return(result);
    }
コード例 #2
0
    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;
            }
        }
    }
コード例 #3
0
    public Dictionary <Skill, short> GetSocketsIncreaseSkills()
    {
        if (GetEquipmentItem() == null || Sockets.Count == 0)
        {
            return(null);
        }
        Dictionary <Skill, short> result = new Dictionary <Skill, short>();
        Item tempEnhancer;

        foreach (int socketId in Sockets)
        {
            if (GameInstance.Items.TryGetValue(socketId, out tempEnhancer))
            {
                // Level for increase stats always 1
                result = GameDataHelpers.CombineSkills(tempEnhancer.socketEnhanceEffect.skills, result);
            }
        }
        return(result);
    }
コード例 #4
0
    public static Dictionary <Skill, short> GetEquipmentSkills(this ICharacterData data)
    {
        if (data == null)
        {
            return(new Dictionary <Skill, short>());
        }
        Dictionary <Skill, short> result = new Dictionary <Skill, short>();
        // Armors
        IList <CharacterItem> equipItems = data.EquipItems;

        foreach (CharacterItem equipItem in equipItems)
        {
            if (equipItem.IsEmpty())
            {
                continue;
            }
            result = GameDataHelpers.CombineSkills(result, equipItem.GetIncreaseSkills());
            result = GameDataHelpers.CombineSkills(result, equipItem.GetSocketsIncreaseSkills());
        }
        // Weapons
        EquipWeapons equipWeapons = data.EquipWeapons;

        if (equipWeapons != null)
        {
            // Right hand equipment
            if (!equipWeapons.rightHand.IsEmpty())
            {
                result = GameDataHelpers.CombineSkills(result, equipWeapons.rightHand.GetIncreaseSkills());
                result = GameDataHelpers.CombineSkills(result, equipWeapons.rightHand.GetSocketsIncreaseSkills());
            }
            // Left hand equipment
            if (!equipWeapons.leftHand.IsEmpty())
            {
                result = GameDataHelpers.CombineSkills(result, equipWeapons.leftHand.GetIncreaseSkills());
                result = GameDataHelpers.CombineSkills(result, equipWeapons.leftHand.GetSocketsIncreaseSkills());
            }
        }
        return(result);
    }
コード例 #5
0
    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;
                }
            }
        }
    }