示例#1
0
        public static void BuildReferenceList(AllItemAttributes itemAttributes, AllInflictStatuses inflictStatuses, AllAbilities abilities, AllItems items)
        {
            foreach (ItemAttributes itemAttr in itemAttributes.ItemAttributes)
            {
                itemAttr.ReferencingItemIndexes.Clear();
            }

            foreach (InflictStatus inflictStatus in inflictStatuses.InflictStatuses)
            {
                inflictStatus.ReferencingAbilityIDs.Clear();
                inflictStatus.ReferencingItemIndexes.Clear();
            }

            for (int index = 0; index < items.Items.Count; index++)
            {
                Item item = items.Items[index];

                if (item.SIA < itemAttributes.ItemAttributes.Length)
                {
                    itemAttributes.ItemAttributes[item.SIA].ReferencingItemIndexes.Add(index);
                }

                if (item is Weapon)
                {
                    Weapon weapon = (Weapon)item;
                    if (weapon.Formula.Value != 2)
                    {
                        if (weapon.InflictStatus < inflictStatuses.InflictStatuses.Length)
                        {
                            inflictStatuses.InflictStatuses[weapon.InflictStatus].ReferencingItemIndexes.Add(index);
                        }
                    }
                }
                else if (item is ChemistItem)
                {
                    ChemistItem chemistItem = (ChemistItem)item;
                    if (chemistItem.Formula != 2)
                    {
                        if (chemistItem.InflictStatus < inflictStatuses.InflictStatuses.Length)
                        {
                            inflictStatuses.InflictStatuses[chemistItem.InflictStatus].ReferencingItemIndexes.Add(index);
                        }
                    }
                }
            }

            for (int index = 0; index < abilities.Abilities.Length; index++)
            {
                Ability ability = abilities.Abilities[index];
                if (ability.IsNormal)
                {
                    if ((ability.Attributes.Formula.Value != 2) && (ability.Attributes.InflictStatus < inflictStatuses.InflictStatuses.Length))
                    {
                        inflictStatuses.InflictStatuses[ability.Attributes.InflictStatus].ReferencingAbilityIDs.Add(index);
                    }
                }
            }
        }
示例#2
0
        public static void RepointSpecificInflictStatus(AllItems items, AllAbilities abilities, AllInflictStatuses allInflictStatuses, byte oldID, byte newID)
        {
            for (int itemIndex = 0; itemIndex < items.Items.Count; itemIndex++)
            {
                Item item = items.Items[itemIndex];
                if (item is Weapon)
                {
                    Weapon weapon = (Weapon)item;
                    if ((weapon.Formula.Value != 2) && (weapon.InflictStatus == oldID))
                    {
                        weapon.InflictStatus    = newID;
                        weapon.OldInflictStatus = newID;
                        allInflictStatuses.InflictStatuses[newID].ReferencingItemIndexes.Add(itemIndex);
                    }
                }
                else if (item is ChemistItem)
                {
                    ChemistItem chemistItem = (ChemistItem)item;
                    if ((chemistItem.Formula != 2) && (chemistItem.InflictStatus == oldID))
                    {
                        chemistItem.InflictStatus    = newID;
                        chemistItem.OldInflictStatus = newID;
                        allInflictStatuses.InflictStatuses[newID].ReferencingItemIndexes.Add(itemIndex);
                    }
                }
            }

            for (int abilityIndex = 0; abilityIndex < abilities.Abilities.Length; abilityIndex++)
            {
                Ability ability = abilities.Abilities[abilityIndex];
                if (!ability.IsNormal)
                {
                    continue;
                }

                AbilityAttributes abilityAttrs = ability.Attributes;
                if ((abilityAttrs.Formula.Value != 2) && (abilityAttrs.InflictStatus == oldID))
                {
                    abilityAttrs.InflictStatus    = newID;
                    abilityAttrs.OldInflictStatus = newID;
                    allInflictStatuses.InflictStatuses[newID].ReferencingAbilityIDs.Add(abilityIndex);
                }
            }

            allInflictStatuses.InflictStatuses[oldID].ReferencingItemIndexes.Clear();
            allInflictStatuses.InflictStatuses[oldID].ReferencingAbilityIDs.Clear();
        }
        private void UpdateInflictStatus(int itemIndex)
        {
            if (itemIndex >= 0)
            {
                Item item = ((List <Item>)itemListBox.DataSource)[itemIndex];
                if (item is Weapon)
                {
                    Weapon weapon = (Weapon)item;
                    if (weapon.OldInflictStatus != weapon.InflictStatus)
                    {
                        inflictStatuses.InflictStatuses[weapon.OldInflictStatus].ReferencingItemIndexes.Remove(itemIndex);
                    }

                    if (weapon.Formula.Value == 2)
                    {
                        inflictStatuses.InflictStatuses[weapon.InflictStatus].ReferencingItemIndexes.Remove(itemIndex);
                    }
                    else
                    {
                        inflictStatuses.InflictStatuses[weapon.InflictStatus].ReferencingItemIndexes.Add(itemIndex);
                    }

                    weapon.OldInflictStatus = weapon.InflictStatus;
                }
                else if (item is ChemistItem)
                {
                    ChemistItem chemistItem = (ChemistItem)item;
                    if (chemistItem.OldInflictStatus != chemistItem.InflictStatus)
                    {
                        inflictStatuses.InflictStatuses[chemistItem.OldInflictStatus].ReferencingItemIndexes.Remove(itemIndex);
                    }

                    if (chemistItem.Formula == 2)
                    {
                        inflictStatuses.InflictStatuses[chemistItem.InflictStatus].ReferencingItemIndexes.Remove(itemIndex);
                    }
                    else
                    {
                        inflictStatuses.InflictStatuses[chemistItem.InflictStatus].ReferencingItemIndexes.Add(itemIndex);
                    }

                    chemistItem.OldInflictStatus = chemistItem.InflictStatus;
                }
            }
        }
示例#4
0
        public static void RepointInflictStatus(AllItems items, AllAbilities abilities, AllInflictStatuses allInflictStatuses)
        {
            Dictionary <int, int> repointMap = GetRepointMap <InflictStatus>(allInflictStatuses.InflictStatuses);

            for (int itemIndex = 0; itemIndex < items.Items.Count; itemIndex++)
            {
                Item item = items.Items[itemIndex];
                if (item is Weapon)
                {
                    Weapon weapon = (Weapon)item;
                    if (weapon.Formula.Value != 2)
                    {
                        int newID = 0;
                        if (repointMap.TryGetValue(weapon.InflictStatus, out newID))
                        {
                            weapon.InflictStatus    = (byte)newID;
                            weapon.OldInflictStatus = (byte)newID;
                            allInflictStatuses.InflictStatuses[newID].ReferencingItemIndexes.Add(itemIndex);
                        }
                    }
                }
                else if (item is ChemistItem)
                {
                    ChemistItem chemistItem = (ChemistItem)item;
                    if (chemistItem.Formula != 2)
                    {
                        int newID = 0;
                        if (repointMap.TryGetValue(chemistItem.InflictStatus, out newID))
                        {
                            chemistItem.InflictStatus    = (byte)newID;
                            chemistItem.OldInflictStatus = (byte)newID;
                            allInflictStatuses.InflictStatuses[newID].ReferencingItemIndexes.Add(itemIndex);
                        }
                    }
                }
            }

            for (int abilityIndex = 0; abilityIndex < abilities.Abilities.Length; abilityIndex++)
            {
                Ability ability = abilities.Abilities[abilityIndex];
                if (!ability.IsNormal)
                {
                    continue;
                }

                AbilityAttributes abilityAttrs = ability.Attributes;
                if (abilityAttrs.Formula.Value != 2)
                {
                    int newID = 0;
                    if (repointMap.TryGetValue(abilityAttrs.InflictStatus, out newID))
                    {
                        abilityAttrs.InflictStatus    = (byte)newID;
                        abilityAttrs.OldInflictStatus = (byte)newID;
                        allInflictStatuses.InflictStatuses[newID].ReferencingAbilityIDs.Add(abilityIndex);
                    }
                }
            }

            foreach (int index in repointMap.Keys)
            {
                InflictStatus inflictStatus = allInflictStatuses.InflictStatuses[index];
                inflictStatus.ReferencingItemIndexes.Clear();
                inflictStatus.ReferencingAbilityIDs.Clear();
            }
        }