示例#1
0
        public Skill(Skills owner, SkillInfo info, IGenericReader reader)
        {
            Owner = owner;
            Info  = info;

            int version = reader.ReadByte();

            switch (version)
            {
            case 0:
            {
                m_Base = reader.ReadUShort();
                m_Cap  = reader.ReadUShort();
                Lock   = (SkillLock)reader.ReadByte();

                break;
            }

            case 0xFF:
            {
                m_Base = 0;
                m_Cap  = 1000;
                Lock   = SkillLock.Up;

                break;
            }

            default:
            {
                if ((version & 0xC0) == 0x00)
                {
                    if ((version & 0x1) != 0)
                    {
                        m_Base = reader.ReadUShort();
                    }

                    if ((version & 0x2) != 0)
                    {
                        m_Cap = reader.ReadUShort();
                    }
                    else
                    {
                        m_Cap = 1000;
                    }

                    if ((version & 0x4) != 0)
                    {
                        Lock = (SkillLock)reader.ReadByte();
                    }
                }

                break;
            }
            }

            if (Lock is < SkillLock.Up or > SkillLock.Locked)
            {
                Lock = SkillLock.Up;
            }
        }
示例#2
0
        private void Deserialize(IGenericReader reader, int version)
        {
            switch (version)
            {
            case 1:
            {
                // Use this line instead if you are getting world loading issues
                _resource = (CraftResource)reader.ReadByte();
                // _resource = (CraftResource)reader.ReadInt();
                break;
            }

            case 0:
            {
                var info = reader.ReadInt() switch
                {
                    0 => OreInfo.Iron,
                    1 => OreInfo.DullCopper,
                    2 => OreInfo.ShadowIron,
                    3 => OreInfo.Copper,
                    4 => OreInfo.Bronze,
                    5 => OreInfo.Gold,
                    6 => OreInfo.Agapite,
                    7 => OreInfo.Verite,
                    8 => OreInfo.Valorite,
                    _ => null
                };

                _resource = CraftResources.GetFromOreInfo(info);
                break;
            }
            }
        }
示例#3
0
        public static Poison Deserialize(IGenericReader reader)
        {
            switch (reader.ReadByte())
            {
            case 1: return(GetPoison(reader.ReadByte()));

            case 2:
                // no longer used, safe to remove?
                reader.ReadInt();
                reader.ReadDouble();
                reader.ReadInt();
                reader.ReadTimeSpan();
                break;
            }

            return(null);
        }
示例#4
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();


            if (version <= 1)
            {
                Timer.DelayCall(Fix, version);
            }
        }
示例#5
0
        public static void Deserialize(IGenericReader reader, int version, BaseObjectiveInstance objInstance)
        {
            if (reader.ReadBool())
            {
                DateTime endTime = reader.ReadDeltaTime();

                if (objInstance != null)
                {
                    objInstance.EndTime = endTime;
                }
            }

            DataType extraDataType = (DataType)reader.ReadByte();

            switch (extraDataType)
            {
            case DataType.EscortObjective:
            {
                bool completed = reader.ReadBool();

                if (objInstance is EscortObjectiveInstance instance)
                {
                    instance.HasCompleted = completed;
                }

                break;
            }

            case DataType.KillObjective:
            {
                int slain = reader.ReadInt();

                if (objInstance is KillObjectiveInstance instance)
                {
                    instance.Slain = slain;
                }

                break;
            }

            case DataType.DeliverObjective:
            {
                bool completed = reader.ReadBool();

                if (objInstance is DeliverObjectiveInstance instance)
                {
                    instance.HasCompleted = completed;
                }

                break;
            }
            }
        }
示例#6
0
        public VirtueInfo(IGenericReader reader)
        {
            int version = reader.ReadByte();

            switch (version)
            {
            case 1: // Changed the values throughout the virtue system
            case 0:
            {
                int mask = reader.ReadByte();

                if (mask != 0)
                {
                    Values = new int[8];

                    for (var i = 0; i < 8; ++i)
                    {
                        if ((mask & (1 << i)) != 0)
                        {
                            Values[i] = reader.ReadInt();
                        }
                    }
                }

                break;
            }
            }

            if (version == 0)
            {
                Compassion *= 200;
                Sacrifice  *= 250; // Even though 40 (the max) only gives 10k, It's because it was formerly too easy

                // No direct conversion factor for Justice, this is just an approximation
                Justice *= 500;

                // All the other virtues haven't been defined at 'version 0' point in time in the scripts.
            }
        }
示例#7
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();

            switch (version)
            {
            case 0:
            {
                m_LabelNumber = reader.ReadEncodedInt();
                break;
            }
            }
        }
示例#8
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            m_TreasureLevel = (TreasureLevel)reader.ReadByte();
            m_MinSpawnTime  = reader.ReadShort();
            m_MaxSpawnTime  = reader.ReadShort();

            if (!Locked)
            {
                StartResetTimer();
            }
        }
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();

            if (ItemID == 4678 || ItemID == 4679)
            {
                ItemID = 4656;
            }
            else if (ItemID == 4712 || ItemID == 4713)
            {
                ItemID = 4702;
            }
        }
示例#10
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            LootType = LootType.Blessed;

            int version = reader.ReadInt();

            switch (version)
            {
            case 3:
            {
                m_Quality = (BookQuality)reader.ReadByte();
                goto case 2;
            }

            case 2:
            {
                m_Crafter = reader.ReadEntity <Mobile>();
                goto case 1;
            }

            case 1:
            {
                m_Level = (SecureLevel)reader.ReadInt();
                goto case 0;
            }

            case 0:
            {
                int count = reader.ReadInt();

                m_Entries = new List <RunebookEntry>(count);

                for (int i = 0; i < count; ++i)
                {
                    m_Entries.Add(new RunebookEntry(reader));
                }

                m_Description  = reader.ReadString();
                m_CurCharges   = reader.ReadInt();
                m_MaxCharges   = reader.ReadInt();
                m_DefaultIndex = reader.ReadInt();

                break;
            }
            }
        }
示例#11
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();

            if (version == 0)
            {
                Timer.DelayCall(TimeSpan.Zero, () =>
                {
                    for (int i = 0; i < Components.Count; ++i)
                    {
                        if (Components[i] is AddonComponent ac && ac.Hue == 2118)
                        {
                            ac.Hue = 1161;
                        }
                    }
                });
示例#12
0
        public RunebookEntry(IGenericReader reader)
        {
            int version = reader.ReadByte();

            switch (version)
            {
            case 1:
            {
                m_House = reader.ReadEntity <BaseHouse>();
                goto case 0;
            }

            case 0:
            {
                m_Location    = reader.ReadPoint3D();
                m_Map         = reader.ReadMap();
                m_Description = reader.ReadString();

                break;
            }
            }
        }
示例#13
0
        public Skill(Skills owner, SkillInfo info, IGenericReader reader)
        {
            Owner = owner;
            Info  = info;

            int version = reader.ReadByte();

            switch (version)
            {
            case 0:
            {
                m_Base = reader.ReadUShort();
                m_Cap  = reader.ReadUShort();
                Lock   = (SkillLock)reader.ReadByte();

                break;
            }

            case 0xFF:
            {
                m_Base = 0;
                m_Cap  = 1000;
                Lock   = SkillLock.Up;

                break;
            }

            default:
            {
                if ((version & 0xC0) == 0x00)
                {
                    if ((version & 0x1) != 0)
                    {
                        m_Base = reader.ReadUShort();
                    }

                    if ((version & 0x2) != 0)
                    {
                        m_Cap = reader.ReadUShort();
                    }
                    else
                    {
                        m_Cap = 1000;
                    }

                    if ((version & 0x4) != 0)
                    {
                        Lock = (SkillLock)reader.ReadByte();
                    }
                }

                break;
            }
            }

            if (Lock < SkillLock.Up || Lock > SkillLock.Locked)
            {
                Console.WriteLine("Bad skill lock -> {0}.{1}", owner.Owner, Lock);
                Lock = SkillLock.Up;
            }
        }
示例#14
0
        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();
        }
示例#15
0
 public static Poison ReadPoison(this IGenericReader reader) =>
 reader.ReadBool() ? Poison.GetPoison(reader.ReadByte()) : null;