private void CopyButtonClick(object sender, RoutedEventArgs e)
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            UniqueBase temp = Helpers.DeepClone((UniqueBase)EquipList.SelectedItem);

            Uniques.Add(temp);
            foreach (AffixBase b in temp.FixedUniqueAffixes)
            {
                b.AffixBonuses.CollectionChanged += b.RaiseListStringChanged;
                b.AffixBonuses.CollectionChanged += temp.RaisePropertyAffixString;

                foreach (AffixBonus bonus in b.AffixBonuses)
                {
                    bonus.PropertyChanged += b.RaiseListStringChanged_;
                    bonus.PropertyChanged += temp.RaisePropertyAffixString_;
                }
            }
            foreach (AffixBase b in temp.RandomUniqueAffixes)
            {
                b.AffixBonuses.CollectionChanged += b.RaiseListStringChanged;
                b.AffixBonuses.CollectionChanged += temp.RaisePropertyAffixString;

                foreach (AffixBonus bonus in b.AffixBonuses)
                {
                    bonus.PropertyChanged += b.RaiseListStringChanged_;
                    bonus.PropertyChanged += temp.RaisePropertyAffixString_;
                }
            }
        }
Ejemplo n.º 2
0
    public string[] GetLocalizationText(UniqueBase unique)
    {
        string stringId = unique.idName;

        string[] output = new string[2];
        if (uniqueLocalizationData.TryGetValue("unique." + stringId, out string value))
        {
            if (value == "")
            {
                output[0] = stringId;
            }
            else
            {
                output[0] = value;
            }
        }
        else
        {
            output[0] = stringId;
        }

        if (uniqueLocalizationData.TryGetValue("unique." + stringId + ".text", out string desc))
        {
            output[1] = desc;
        }

        return(output);
    }
        private void CalculateWeaponDps(UniqueBase unique, Dictionary <BonusType, StatBonus> maxStatBonuses)
        {
            Dictionary <ElementType, DamageStore> weaponDamage = new Dictionary <ElementType, DamageStore>();

            foreach (ElementType element in Enum.GetValues(typeof(ElementType)))
            {
                weaponDamage[element] = new DamageStore(0, 0);
            }
            weaponDamage[0].Min = CalculateStat(unique.MinDamage, maxStatBonuses, BonusType.LOCAL_PHYSICAL_DAMAGE_MIN);
            weaponDamage[0].Max = CalculateStat(unique.MaxDamage, maxStatBonuses, BonusType.LOCAL_PHYSICAL_DAMAGE_MAX);
            weaponDamage[0].Min = CalculateStat(weaponDamage[0].Min, maxStatBonuses, BonusType.LOCAL_PHYSICAL_DAMAGE);
            weaponDamage[0].Max = CalculateStat(weaponDamage[0].Max, maxStatBonuses, BonusType.LOCAL_PHYSICAL_DAMAGE);

            weaponDamage[ElementType.FIRE].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_FIRE_DAMAGE_MIN);
            weaponDamage[ElementType.FIRE].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_FIRE_DAMAGE_MAX);
            weaponDamage[ElementType.FIRE].Min = CalculateStat(weaponDamage[ElementType.FIRE].Min, maxStatBonuses, BonusType.LOCAL_FIRE_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);
            weaponDamage[ElementType.FIRE].Max = CalculateStat(weaponDamage[ElementType.FIRE].Max, maxStatBonuses, BonusType.LOCAL_FIRE_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);

            weaponDamage[ElementType.COLD].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_COLD_DAMAGE_MIN);
            weaponDamage[ElementType.COLD].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_COLD_DAMAGE_MAX);
            weaponDamage[ElementType.COLD].Min = CalculateStat(weaponDamage[ElementType.COLD].Min, maxStatBonuses, BonusType.LOCAL_COLD_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);
            weaponDamage[ElementType.COLD].Max = CalculateStat(weaponDamage[ElementType.COLD].Max, maxStatBonuses, BonusType.LOCAL_COLD_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);

            weaponDamage[ElementType.LIGHTNING].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_LIGHTNING_DAMAGE_MIN);
            weaponDamage[ElementType.LIGHTNING].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_LIGHTNING_DAMAGE_MAX);
            weaponDamage[ElementType.LIGHTNING].Min = CalculateStat(weaponDamage[ElementType.LIGHTNING].Min, maxStatBonuses, BonusType.LOCAL_LIGHTNING_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);
            weaponDamage[ElementType.LIGHTNING].Max = CalculateStat(weaponDamage[ElementType.LIGHTNING].Max, maxStatBonuses, BonusType.LOCAL_LIGHTNING_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);

            weaponDamage[ElementType.EARTH].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_EARTH_DAMAGE_MIN);
            weaponDamage[ElementType.EARTH].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_EARTH_DAMAGE_MAX);
            weaponDamage[ElementType.EARTH].Min = CalculateStat(weaponDamage[ElementType.EARTH].Min, maxStatBonuses, BonusType.LOCAL_EARTH_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);
            weaponDamage[ElementType.EARTH].Max = CalculateStat(weaponDamage[ElementType.EARTH].Max, maxStatBonuses, BonusType.LOCAL_EARTH_DAMAGE, BonusType.LOCAL_ELEMENTAL_DAMAGE);

            weaponDamage[ElementType.DIVINE].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_DIVINE_DAMAGE_MIN);
            weaponDamage[ElementType.DIVINE].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_DIVINE_DAMAGE_MAX);
            weaponDamage[ElementType.DIVINE].Min = CalculateStat(weaponDamage[ElementType.DIVINE].Min, maxStatBonuses, BonusType.LOCAL_DIVINE_DAMAGE, BonusType.LOCAL_PRIMORDIAL_DAMAGE);
            weaponDamage[ElementType.DIVINE].Max = CalculateStat(weaponDamage[ElementType.DIVINE].Max, maxStatBonuses, BonusType.LOCAL_DIVINE_DAMAGE, BonusType.LOCAL_PRIMORDIAL_DAMAGE);

            weaponDamage[ElementType.VOID].Min = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_VOID_DAMAGE_MIN);
            weaponDamage[ElementType.VOID].Max = CalculateStat(0, maxStatBonuses, BonusType.LOCAL_VOID_DAMAGE_MAX);
            weaponDamage[ElementType.VOID].Min = CalculateStat(weaponDamage[ElementType.VOID].Min, maxStatBonuses, BonusType.LOCAL_VOID_DAMAGE, BonusType.LOCAL_PRIMORDIAL_DAMAGE);
            weaponDamage[ElementType.VOID].Max = CalculateStat(weaponDamage[ElementType.VOID].Max, maxStatBonuses, BonusType.LOCAL_VOID_DAMAGE, BonusType.LOCAL_PRIMORDIAL_DAMAGE);

            float AttackSpeed = CalculateStat(unique.AttackSpeed, maxStatBonuses, BonusType.LOCAL_ATTACK_SPEED);
            float pDps        = (weaponDamage[0].Min + weaponDamage[0].Max) / 2f * AttackSpeed;

            int   eMin = weaponDamage[ElementType.FIRE].Min + weaponDamage[ElementType.COLD].Min + weaponDamage[ElementType.LIGHTNING].Min + weaponDamage[ElementType.EARTH].Min;
            int   eMax = weaponDamage[ElementType.FIRE].Max + weaponDamage[ElementType.COLD].Max + weaponDamage[ElementType.LIGHTNING].Max + weaponDamage[ElementType.EARTH].Max;
            float eDps = (eMin + eMax) / 2f * AttackSpeed;

            int   aMin = weaponDamage[ElementType.DIVINE].Min + weaponDamage[ElementType.VOID].Min;
            int   aMax = weaponDamage[ElementType.DIVINE].Max + weaponDamage[ElementType.VOID].Max;
            float aDps = (aMin + aMax) / 2f * AttackSpeed;

            pDpsLabel.Content = "pDps: " + pDps;
            eDpsLabel.Content = "eDps: " + eDps;
            aDpsLabel.Content = "aDps: " + aDps;
        }
Ejemplo n.º 4
0
    public void LoadEquipmentData()
    {
        if (equipDict == null)
        {
            equipDict = new Dictionary <Guid, EquipSaveData>();
        }
        else
        {
            equipDict.Clear();
        }

        GameManager.Instance.PlayerStats.ClearEquipmentInventory();
        foreach (EquipSaveData equipData in equipList)
        {
            Equipment equipment = null;
            if (equipData.rarity == RarityType.UNIQUE)
            {
                equipment = Equipment.CreateUniqueFromBase(equipData.baseId, equipData.ilvl, equipData.uniqueVersion);
            }
            else
            {
                equipment = Equipment.CreateEquipmentFromBase(equipData.baseId, equipData.ilvl);
            }

            if (equipment == null)
            {
                continue;
            }

            GameManager.Instance.PlayerStats.AddEquipmentToInventory(equipment);

            equipment.SetId(equipData.id);
            equipment.Name = equipData.name;
            equipment.SetRarity(equipData.rarity);

            if (equipData.rarity == RarityType.UNIQUE)
            {
                UniqueBase uniqueBase = equipment.Base as UniqueBase;
                if (uniqueBase.uniqueVersion == equipData.uniqueVersion)
                {
                    for (int i = 0; i < uniqueBase.fixedUniqueAffixes.Count; i++)
                    {
                        AffixBase affixBase = uniqueBase.fixedUniqueAffixes[i];
                        equipment.prefixes.Add(new Affix(affixBase, equipData.prefixes[i].affixValues, equipData.prefixes[i].triggerValues, false, false));
                    }
                }
            }
            else
            {
                LoadEquipmentAffixes(equipData, equipment);
            }

            equipment.UpdateItemStats();

            equipDict.Add(equipData.id, equipData);
        }
    }
Ejemplo n.º 5
0
 private void ReloadLocalization_Click(object sender, RoutedEventArgs e)
 {
     Localization.LoadStrings();
     if (UniqueItemEditor.EquipList.SelectedItem != null)
     {
         UniqueBase u = UniqueItemEditor.EquipList.SelectedItem as UniqueBase;
         u.RaisePropertyAffixString_(null, null);
     }
 }
Ejemplo n.º 6
0
    public static Equipment CreateRandomUnique(int ilvl, GroupType?group = null)
    {
        UniqueBase uniqueBase = ResourceManager.Instance.GetRandomUniqueBase(ilvl, group);

        if (uniqueBase == null)
        {
            return(null);
        }
        return(CreateUniqueFromBase(uniqueBase, ilvl));
    }
        private void AddButtonClick(object sender, RoutedEventArgs e)
        {
            UniqueBase temp = new UniqueBase
            {
                IdName        = "UNTITLED NEW",
                InnateAffixId = null
            };

            Uniques.Add(temp);
        }
        private void SortRandomAffixes()
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            UniqueBase uniqueBase = EquipList.SelectedItem as UniqueBase;

            for (int i = 0; i < uniqueBase.RandomUniqueAffixes.Count; i++)
            {
                uniqueBase.RandomUniqueAffixes[i].IdName = uniqueBase.IdName + "R" + i;
            }
            uniqueBase.RaisePropertyAffixString_(null, null);
        }
        private void RandomRemoveButtonClick(object sender, RoutedEventArgs e)
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            if (RandomAffixesList.SelectedItem == null)
            {
                return;
            }
            UniqueBase uniqueBase = EquipList.SelectedItem as UniqueBase;

            uniqueBase.RandomUniqueAffixes.Remove(RandomAffixesList.SelectedItem as AffixBase);
            SortRandomAffixes();
        }
Ejemplo n.º 10
0
    public static Equipment CreateUniqueFromBase(UniqueBase uniqueBase, int ilvl)
    {
        Equipment e = CreateEquipmentFromBase(uniqueBase, ilvl);

        if (e == null)
        {
            return(null);
        }

        e.Rarity = RarityType.UNIQUE;
        foreach (AffixBase affixBase in uniqueBase.fixedUniqueAffixes)
        {
            e.prefixes.Add(new Affix(affixBase));
        }
        e.UpdateItemStats();
        return(e);
    }
        private void RandomAddButtonClick(object sender, RoutedEventArgs e)
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            UniqueBase uniqueBase = EquipList.SelectedItem as UniqueBase;
            AffixBase  temp       = new AffixBase
            {
                IdName    = uniqueBase.IdName + "R" + uniqueBase.RandomUniqueAffixes.Count,
                AffixType = AffixType.UNIQUE
            };

            AddPropertyListeners(uniqueBase, temp);

            uniqueBase.RandomUniqueAffixes.Add(temp);
            SortRandomAffixes();
        }
Ejemplo n.º 12
0
    public static Equipment CreateUniqueFromBase(string uniqueId, int ilvl, int uniqueVersion)
    {
        UniqueBase uniqueBase = ResourceManager.Instance.GetUniqueBase(uniqueId);

        if (uniqueBase == null)
        {
            return(null);
        }
        if (uniqueVersion == uniqueBase.uniqueVersion)
        {
            Equipment e = CreateEquipmentFromBase(uniqueBase, ilvl);
            e.Rarity = RarityType.UNIQUE;
            return(e);
        }
        else
        {
            return(CreateUniqueFromBase(uniqueBase, ilvl));
        }
    }
        private void RandomCopyButtonClick(object sender, RoutedEventArgs e)
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            if (RandomAffixesList.SelectedItem == null)
            {
                return;
            }
            UniqueBase uniqueBase = EquipList.SelectedItem as UniqueBase;

            AffixBase temp = Helpers.DeepClone((AffixBase)RandomAffixesList.SelectedItem);

            temp.IdName = uniqueBase.IdName + "R" + uniqueBase.RandomUniqueAffixes.Count;
            AddPropertyListeners(uniqueBase, temp);
            uniqueBase.RandomUniqueAffixes.Add(temp);
            SortRandomAffixes();
        }
Ejemplo n.º 14
0
    public void SaveEquipmentData(Equipment equipItem)
    {
        EquipSaveData equipData;

        if (!equipDict.ContainsKey(equipItem.Id))
        {
            equipData = new EquipSaveData
            {
                id     = equipItem.Id,
                baseId = equipItem.Base.idName,
                ilvl   = (byte)equipItem.ItemLevel
            };
            equipDict[equipItem.Id] = equipData;
            equipList.Add(equipData);
        }
        else
        {
            equipData = equipDict[equipItem.Id];
        }

        equipData.name   = equipItem.Name;
        equipData.rarity = equipItem.Rarity;
        if (equipItem.Rarity == RarityType.UNIQUE)
        {
            UniqueBase uniqueBase = equipItem.Base as UniqueBase;
            equipData.uniqueVersion = (byte)uniqueBase.uniqueVersion;
        }
        equipData.prefixes.Clear();
        foreach (Affix affix in equipItem.prefixes)
        {
            equipData.prefixes.Add(new AffixSaveData(affix.Base.idName, affix.GetAffixValues(), affix.GetEffectValues(), affix.IsCrafted, affix.IsLocked));
        }

        equipData.suffixes.Clear();
        foreach (Affix affix in equipItem.suffixes)
        {
            equipData.suffixes.Add(new AffixSaveData(affix.Base.idName, affix.GetAffixValues(), affix.GetEffectValues(), affix.IsCrafted, affix.IsLocked));
        }
    }
        private void RandomAffixesList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (EquipList.SelectedItem == null)
            {
                return;
            }
            ListView listView = sender as ListView;

            if (listView.SelectedItem == null)
            {
                return;
            }

            BonusPropGrid.SelectedAffix = listView.SelectedItem as AffixBase;

            UniqueBase unique = EquipList.SelectedItem as UniqueBase;
            Dictionary <BonusType, StatBonus> maxStatBonuses = new Dictionary <BonusType, StatBonus>();
            Dictionary <BonusType, StatBonus> minStatBonuses = new Dictionary <BonusType, StatBonus>();

            foreach (AffixBase x in unique.FixedUniqueAffixes)
            {
                foreach (AffixBonus y in x.AffixBonuses)
                {
                    if (!maxStatBonuses.ContainsKey(y.BonusType))
                    {
                        maxStatBonuses.Add(y.BonusType, new StatBonus());
                        minStatBonuses.Add(y.BonusType, new StatBonus());
                    }
                    maxStatBonuses[y.BonusType].AddBonus(y.ModifyType, y.MaxValue);
                    minStatBonuses[y.BonusType].AddBonus(y.ModifyType, y.MinValue);
                }
            }


            CalculateWeaponDps(unique, maxStatBonuses);
        }
Ejemplo n.º 16
0
    public override int GetItemValue()
    {
        float affixValueMultiplier = 1;
        float rollValue;
        int   actualAffixCount;

        if (Rarity != RarityType.UNIQUE)
        {
            foreach (Affix affix in GetAllAffixes())
            {
                if (affix.AffixType == AffixType.INNATE)
                {
                    continue;
                }
                int weightValue = 0;
                foreach (var weight in affix.Base.spawnWeight)
                {
                    if (GetGroupTypes().Contains(weight.type))
                    {
                        weightValue = weight.weight;
                        break;
                    }
                }

                float weightModifier;
                if (weightValue > 0)
                {
                    weightModifier = 1000f / weightValue;
                }
                else
                {
                    weightModifier = 5f;
                }

                affixValueMultiplier += weightModifier;

                if (affix.Base.affixBonuses.Count == 0)
                {
                    continue;
                }
                rollValue = 0;

                for (int i = 0; i < affix.Base.affixBonuses.Count; i++)
                {
                    //UnityEngine.Debug.Log(affix.Base.idName + " " + +rollValueMultiplier + " " + affix.GetAffixValue(i) + " " + affix.Base.affixBonuses[i].minValue);
                    float valueDifference = affix.Base.affixBonuses[i].maxValue - affix.Base.affixBonuses[i].minValue;
                    if (valueDifference == 0)
                    {
                        rollValue += 0.7f;
                        continue;
                    }
                    rollValue += (affix.GetAffixValue(i) - affix.Base.affixBonuses[i].minValue) / valueDifference * 0.7f;
                }
                rollValue            /= affix.Base.affixBonuses.Count;
                affixValueMultiplier += rollValue;
            }
        }
        else
        {
            UniqueBase uniqueBase          = Base as UniqueBase;
            float      rollValueMultiplier = 0f;
            actualAffixCount = 0;
            foreach (Affix affix in GetAllAffixes())
            {
                if (affix.Base.affixBonuses.Count == 0)
                {
                    continue;
                }
                rollValue = 0;
                for (int i = 0; i < affix.Base.affixBonuses.Count; i++)
                {
                    //UnityEngine.Debug.Log(affix.Base.idName + " " + +rollValueMultiplier + " " + affix.GetAffixValue(i) + " " + affix.Base.affixBonuses[i].minValue);
                    float valueDifference = affix.Base.affixBonuses[i].maxValue - affix.Base.affixBonuses[i].minValue;
                    if (valueDifference == 0)
                    {
                        rollValue += 0.5f;
                        continue;
                    }
                    rollValue += (affix.GetAffixValue(i) - affix.Base.affixBonuses[i].minValue) / valueDifference;
                }
                rollValueMultiplier += rollValue / affix.Base.affixBonuses.Count;
                actualAffixCount++;
            }
            rollValueMultiplier = 1 + rollValueMultiplier / actualAffixCount;

            if (uniqueBase.spawnWeight == 0)
            {
                affixValueMultiplier = 500f * rollValueMultiplier;
            }
            else
            {
                affixValueMultiplier = Math.Min((1000f / uniqueBase.spawnWeight) * (uniqueBase.dropLevel / 100f) * 50f * rollValueMultiplier, 500f);
            }
        }

        return(Math.Max((int)(affixValueMultiplier * ItemLevel * 1.5f), 1));
    }
 private static void AddPropertyListeners(UniqueBase uniqueBase, AffixBase temp)
 {
     temp.AffixBonuses.CollectionChanged += temp.RaiseListStringChanged;
     temp.AffixBonuses.CollectionChanged += uniqueBase.RaisePropertyAffixString;
 }