Esempio n. 1
0
        /// <summary>
        /// Decodes item specific data
        /// </summary>
        private void ReadItemDataExtendedSpecific()
        {
            if (ItemDefs.IsArmor(ItemCode))
            {
                ReadData("Defense", ItemDefs.ItemStatCostsByName["armorclass"].SaveBits);
                Defense -= (uint)ItemDefs.ItemStatCostsByName["armorclass"].SaveAdd;
            }

            if (ItemDefs.IsWeapon(ItemCode) || ItemDefs.IsArmor(ItemCode))
            {
                ReadData("MaxDurability", ItemDefs.ItemStatCostsByName["maxdurability"].SaveBits);
                MaxDurability -= (uint)ItemDefs.ItemStatCostsByName["maxdurability"].SaveAdd;

                if (MaxDurability != 0)
                {
                    ReadData("Durability", ItemDefs.ItemStatCostsByName["durability"].SaveBits);
                    Durability -= (uint)ItemDefs.ItemStatCostsByName["durability"].SaveAdd;
                }
                else
                {
                    IsIndestructable = true;
                }
            }

            // Not sure of the order of socketed+stackable. Socketed arrows seem to mess up
            if (ItemDefs.IsStackable(ItemCode))
            {
                ReadData("Quantity", 9);
            }
            if (IsSocketed)
            {
                ReadData("SocketCount", 4);
            }

            if (Quality == ItemQuality.Set)
            {
                ReadData("NumberOfSetProperties", 5);
            }

            ReadPropertyList(properties);

            if (Quality == ItemQuality.Set)
            {
                int numberOfSetProperties = (int)GetDataValue("NumberOfSetProperties");

                while (bs.RemainingBits > 9)
                {
                    ReadPropertyList(propertiesSet);
                }
            }

            if (IsRuneword)
            {
                ReadPropertyList(propertiesRuneword);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Creates a new SaveReader
 /// </summary>
 public SaveReader(string resourceSet)
 {
     // load only once
     if (ItemDefs.Loaded)
     {
         return;
     }
     Resources.Instance.ResourceSet = resourceSet;
     ItemDefs.LoadItemDefs();
 }
Esempio n. 3
0
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(String.Format("{0} {1}", ItemCode, ItemDefs.GetItemDescription(ItemCode)));

            if (this.IsSocketed)
            {
                sb.Append(" Soc: " + this.SocketsFilled + "/" + this.SocketCount);
            }
            if (!this.IsIndestructable)
            {
                sb.Append(" Dur: " + this.Durability + " / " + this.MaxDurability);
            }

            return(sb.ToString());
        }
Esempio n. 4
0
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(String.Format("{0} {1}", ItemCode, ItemDefs.GetItemDescription(ItemCode)));

            if (sockets.Count > 0)
            {
                sb.Append(" { ");
                for (int i = 0; i < sockets.Count; i++)
                {
                    sb.Append(ItemDefs.GetItemDescription(sockets[i].ItemCode));

                    if (i < sockets.Count - 1)
                    {
                        sb.Append(", ");
                    }
                }
                sb.Append(" }");
            }

            return(sb.ToString());
        }
 /// <summary>
 /// Creates a new SaveReader
 /// </summary>
 public SaveReader(string resourceSet)
 {
     Resources.Instance.ResourceSet = resourceSet;
     ItemDefs.LoadItemDefs();
 }
Esempio n. 6
0
        /// <summary>
        /// Decodes extended item data
        /// </summary>
        private void ReadItemDataExtended()
        {
            ReadData("SocketsFilled", 3);
            if (!IsPacketData)
            {
                ReadData("Id", 32);
            }
            ReadData("Level", 7);
            ReadData("Quality", 4);
            ReadData("HasGraphic", 1);
            if (HasGraphic)
            {
                ReadData("Graphic", 3);
            }

            // No idea what this flag is. Some say Class data others say Color data
            ReadData("ClassFlag", 1);
            if (ClassFlag)
            {
                ReadData("ClassInfo", 11);
            }

            if (!IsIdentified)
            {
                return;
            }

            switch (Quality)
            {
            case ItemQuality.Inferior:
                ReadData("InferiorQualityType", 3);
                break;

            case ItemQuality.Superior:
                ReadData("SuperiorQualityType", 3);
                break;

            case ItemQuality.Normal:
                if (ItemDefs.IsCharm(ItemCode))
                {
                    ReadData("CharmData", 12);
                }
                if (ItemDefs.IsScrollOrTome(ItemCode))
                {
                    ReadData("SpellId", 5);
                }
                else if (ItemDefs.IsMonsterPart(ItemCode))
                {
                    ReadData("MonsterId", 10);
                }
                break;

            case ItemQuality.Magic:
                ReadData("MagicPrefix", 11);
                ReadData("MagicSuffix", 11);
                break;

            case ItemQuality.Rare:
            case ItemQuality.Craft:
                ReadData("PrefixNameId", 8);
                ReadData("SuffixNameId", 8);

                for (int i = 0; i < 3; i++)
                {
                    string prefixIndex = string.Format("PrefixFlag{0}", i);

                    ReadData(prefixIndex, 1);
                    if (GetDataBoolean(prefixIndex))
                    {
                        ReadData(string.Format("Prefix{0}", i), 11);
                    }

                    string suffixIndex = string.Format("SuffixFlag{0}", i);

                    ReadData(suffixIndex, 1);
                    if (GetDataBoolean(suffixIndex))
                    {
                        ReadData(string.Format("Suffix{0}", i), 11);
                    }
                }
                break;

            case ItemQuality.Unique:
            case ItemQuality.Set:
                ReadData("UniqueSetId", 12);
                break;

            default:
                break;
            }

            if (IsRuneword)
            {
                ReadData("RunewordId", 16);
            }
            if (IsPersonalized)
            {
                ReadString("PersonalizedName", 7);                 //TODO: 15 in ROT?
            }
        }