コード例 #1
0
ファイル: QuestInfo.cs プロジェクト: a11874430/Mir2-2
        public QuestInfo(BinaryReader reader)
        {
            Index            = reader.ReadInt32();
            Name             = reader.ReadString();
            Group            = reader.ReadString();
            FileName         = reader.ReadString();
            RequiredMinLevel = reader.ReadInt32();

            if (Envir.LoadVersion >= 38)
            {
                RequiredMaxLevel = reader.ReadInt32();
                if (RequiredMaxLevel == 0)
                {
                    RequiredMaxLevel = ushort.MaxValue;
                }
            }

            RequiredQuest = reader.ReadInt32();
            RequiredClass = (RequiredClass)reader.ReadByte();
            Type          = (QuestType)reader.ReadByte();
            GotoMessage   = reader.ReadString();
            KillMessage   = reader.ReadString();
            ItemMessage   = reader.ReadString();
            if (Envir.LoadVersion >= 37)
            {
                FlagMessage = reader.ReadString();
            }

            LoadInfo();
        }
コード例 #2
0
ファイル: ClientData.cs プロジェクト: NightBakery/mir2
    public ClientQuestInfo(BinaryReader reader)
    {
        Index    = reader.ReadInt32();
        NPCIndex = reader.ReadUInt32();
        Name     = reader.ReadString();
        Group    = reader.ReadString();

        int count = reader.ReadInt32();

        for (int i = 0; i < count; i++)
        {
            Description.Add(reader.ReadString());
        }

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            TaskDescription.Add(reader.ReadString());
        }

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            ReturnDescription.Add(reader.ReadString());
        }

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            CompletionDescription.Add(reader.ReadString());
        }

        MinLevelNeeded     = reader.ReadInt32();
        MaxLevelNeeded     = reader.ReadInt32();
        QuestNeeded        = reader.ReadInt32();
        ClassNeeded        = (RequiredClass)reader.ReadByte();
        Type               = (QuestType)reader.ReadByte();
        TimeLimitInSeconds = reader.ReadInt32();
        RewardGold         = reader.ReadUInt32();
        RewardExp          = reader.ReadUInt32();
        RewardCredit       = reader.ReadUInt32();


        count = reader.ReadInt32();

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

        count = reader.ReadInt32();

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

        FinishNPCIndex = reader.ReadUInt32();
    }
コード例 #3
0
ファイル: QuestInfo.cs プロジェクト: putao520/mir3
        protected internal override void OnCreated()
        {
            base.OnCreated();

            Amount = 1;

            Class = RequiredClass.All;
        }
コード例 #4
0
ファイル: LMS_BR_Info.cs プロジェクト: coolzoom/mir2-master
        public LMS_RewardInfo(BinaryReader reader)
        {
            bool valid = reader.ReadBoolean();

            if (valid)
            {
                ItemReward = new ItemInfo(reader, Envir.LoadVersion, Envir.LoadCustomVersion, false);
            }
            RequiredClass = (RequiredClass)reader.ReadByte();
            Group         = reader.ReadByte();
            Rate          = reader.ReadUInt16();
            Rank          = reader.ReadByte();
        }
コード例 #5
0
        public QuestInfo(BinaryReader reader)
        {
            Index            = reader.ReadInt32();
            Name             = reader.ReadString();
            Group            = reader.ReadString();
            FileName         = reader.ReadString();
            RequiredMinLevel = reader.ReadInt32();

            if (Envir.LoadVersion >= 38)
            {
                RequiredMaxLevel = reader.ReadInt32();
                if (RequiredMaxLevel == 0)
                {
                    RequiredMaxLevel = ushort.MaxValue;
                }
            }

            RequiredQuest = reader.ReadInt32();
            RequiredClass = (RequiredClass)reader.ReadByte();
            Type          = (QuestType)reader.ReadByte();
            GotoMessage   = reader.ReadString();
            KillMessage   = reader.ReadString();
            ItemMessage   = reader.ReadString();
            if (Envir.LoadVersion >= 37)
            {
                FlagMessage = reader.ReadString();
            }

            if (Envir.LoadVersion > 72)
            {
                percentageExp = reader.ReadBoolean();
            }

            if (Envir.LoadVersion > 77)
            {
                Time = reader.ReadInt32();
            }

            if (Envir.LoadVersion > 103)
            {
                HeroQuest = reader.ReadBoolean();
            }

            if (Envir.LoadVersion > 111)
            {
                autoComplete = reader.ReadBoolean();
            }

            LoadInfo();
        }
コード例 #6
0
ファイル: QuestInfo.cs プロジェクト: a11874430/Mir2-2
        public QuestInfo(MySqlDataReader readerQuestInfo)
        {
            Index            = Convert.ToInt32(readerQuestInfo["IndexID"]);
            Name             = readerQuestInfo["Name"].ToString();
            Group            = readerQuestInfo["Group_"].ToString();
            FileName         = readerQuestInfo["FileName"].ToString();
            RequiredMinLevel = Convert.ToInt32(readerQuestInfo["RequiredMinLevel"]);
            RequiredMaxLevel = Convert.ToInt32(readerQuestInfo["RequiredMaxLevel"]);
            RequiredQuest    = Convert.ToInt32(readerQuestInfo["RequiredQuest"]);
            RequiredClass    = (RequiredClass)Convert.ToByte(readerQuestInfo["RequiredClass"]);
            Type             = (QuestType)Convert.ToByte(readerQuestInfo["Type"]);
            GotoMessage      = readerQuestInfo["GotoMessage"].ToString();
            KillMessage      = readerQuestInfo["KillMessage"].ToString();
            ItemMessage      = readerQuestInfo["ItemMessage"].ToString();
            FlagMessage      = readerQuestInfo["FlagMessage"].ToString();

            LoadInfo();
        }
コード例 #7
0
 public QuestInfo UpdateQuestInfo(QuestInfo m)
 {
     CarryItems            = m.CarryItems;
     CompletionDescription = m.CompletionDescription;
     CreditReward          = m.CreditReward;
     Description           = m.Description;
     ExpReward             = m.ExpReward;
     FileName         = m.FileName;
     FixedRewards     = m.FixedRewards;
     BuffRewards      = m.BuffRewards;
     FlagMessage      = m.FlagMessage;
     FlagTasks        = m.FlagTasks;
     GoldReward       = m.GoldReward;
     GotoMessage      = m.GotoMessage;
     Group            = m.Group;
     Index            = m.Index;
     ItemMessage      = m.ItemMessage;
     ItemTasks        = m.ItemTasks;
     KillMessage      = m.KillMessage;
     KillTasks        = m.KillTasks;
     Name             = m.Name;
     NpcIndex         = m.NpcIndex;
     NpcInfo          = m.NpcInfo;
     percentageExp    = m.percentageExp;
     autoComplete     = m.autoComplete;
     RequiredClass    = m.RequiredClass;
     RequiredMaxLevel = m.RequiredMaxLevel;
     RequiredMinLevel = m.RequiredMinLevel;
     RequiredQuest    = m.RequiredQuest;
     SelectRewards    = m.SelectRewards;
     TaskDescription  = m.TaskDescription;
     Time             = m.Time;
     Type             = m.Type;
     _finishNpcIndex  = m._finishNpcIndex;
     _regexMessage    = m._regexMessage;
     ItemExpReward    = m.ItemExpReward;
     return(this);
 }
コード例 #8
0
ファイル: QuestInfo.cs プロジェクト: ufaith/cmir2
        public QuestInfo(BinaryReader reader)
        {
            Index = reader.ReadInt32();
            Name = reader.ReadString();
            Group = reader.ReadString();
            FileName = reader.ReadString();
            RequiredMinLevel = reader.ReadInt32();

            if (Envir.LoadVersion >= 38)
            {
                RequiredMaxLevel = reader.ReadInt32();
                if (RequiredMaxLevel == 0) RequiredMaxLevel = byte.MaxValue;
            }

            RequiredQuest = reader.ReadInt32();
            RequiredClass = (RequiredClass)reader.ReadByte();
            Type = (QuestType)reader.ReadByte();
            GotoMessage = reader.ReadString();
            KillMessage = reader.ReadString();
            ItemMessage = reader.ReadString();
            if(Envir.LoadVersion >= 37) FlagMessage = reader.ReadString();

            LoadInfo();
        }
コード例 #9
0
ファイル: Common.cs プロジェクト: thedeaths/official-mir2c-
    public ClientQuestInfo(BinaryReader reader)
    {
        Index = reader.ReadInt32();
        NPCIndex = reader.ReadUInt32();
        Name = reader.ReadString();
        Group = reader.ReadString();

        int count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
            Description.Add(reader.ReadString());

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
            TaskDescription.Add(reader.ReadString());

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
            CompletionDescription.Add(reader.ReadString());

        MinLevelNeeded = reader.ReadInt32();
        MaxLevelNeeded = reader.ReadInt32();
        QuestNeeded = reader.ReadInt32();
        ClassNeeded = (RequiredClass)reader.ReadByte();
        Type = (QuestType)reader.ReadByte();
        RewardGold = reader.ReadUInt32();
        RewardExp = reader.ReadUInt32();
        RewardCredit = reader.ReadUInt32();

        count = reader.ReadInt32();

        for (int i = 0; i < count; i++ )
            RewardsFixedItem.Add(new QuestItemReward(reader));

        count = reader.ReadInt32();

        for (int i = 0; i < count; i++)
            RewardsSelectItem.Add(new QuestItemReward(reader));

        FinishNPCIndex = reader.ReadUInt32();
    }
コード例 #10
0
ファイル: Common.cs プロジェクト: thedeaths/official-mir2c-
    public ItemInfo(BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue)
    {
        Index = reader.ReadInt32();
        Name = reader.ReadString();
        Type = (ItemType) reader.ReadByte();
        if (version >= 40) Grade = (ItemGrade)reader.ReadByte();
        RequiredType = (RequiredType) reader.ReadByte();
        RequiredClass = (RequiredClass) reader.ReadByte();
        RequiredGender = (RequiredGender) reader.ReadByte();
        if(version >= 17) Set = (ItemSet)reader.ReadByte();

        Shape = version >= 30 ? reader.ReadInt16() : reader.ReadSByte();
        Weight = reader.ReadByte();
        Light = reader.ReadByte();
        RequiredAmount = reader.ReadByte();

        Image = reader.ReadUInt16();
        Durability = reader.ReadUInt16();

        StackSize = reader.ReadUInt32();
        Price = reader.ReadUInt32();

        MinAC = reader.ReadByte();
        MaxAC = reader.ReadByte();
        MinMAC = reader.ReadByte();
        MaxMAC = reader.ReadByte();
        MinDC = reader.ReadByte();
        MaxDC = reader.ReadByte();
        MinMC = reader.ReadByte();
        MaxMC = reader.ReadByte();
        MinSC = reader.ReadByte();
        MaxSC = reader.ReadByte();
        if (version < 25)
        {
            HP = reader.ReadByte();
            MP = reader.ReadByte();
        }
        else
        {
            HP = reader.ReadUInt16();
            MP = reader.ReadUInt16();
        }
        Accuracy = reader.ReadByte();
        Agility = reader.ReadByte();

        Luck = reader.ReadSByte();
        AttackSpeed = reader.ReadSByte();

        StartItem = reader.ReadBoolean();

        BagWeight = reader.ReadByte();
        HandWeight = reader.ReadByte();
        WearWeight = reader.ReadByte();

        if (version >= 9) Effect = reader.ReadByte();
        if (version >= 20)
        {
            Strong = reader.ReadByte();
            MagicResist = reader.ReadByte();
            PoisonResist = reader.ReadByte();
            HealthRecovery = reader.ReadByte();
            SpellRecovery = reader.ReadByte();
            PoisonRecovery = reader.ReadByte();
            HPrate = reader.ReadByte();
            MPrate = reader.ReadByte();
            CriticalRate = reader.ReadByte();
            CriticalDamage = reader.ReadByte();
            byte bools = reader.ReadByte();
            NeedIdentify = (bools & 0x01) == 0x01;
            ShowGroupPickup = (bools & 0x02) == 0x02;
            ClassBased = (bools & 0x04) == 0x04;
            LevelBased = (bools & 0x08) == 0x08;
            CanMine = (bools & 0x10) == 0x10;
            MaxAcRate = reader.ReadByte();
            MaxMacRate = reader.ReadByte();
            Holy = reader.ReadByte();
            Freezing = reader.ReadByte();
            PoisonAttack = reader.ReadByte();
            if (version < 55)
            {
                Bind = (BindMode)reader.ReadByte();
            }
            else
            {
                Bind = (BindMode)reader.ReadInt16();
            }
            
        }
        if (version >= 21)
        {
            Reflect = reader.ReadByte();
            HpDrainRate = reader.ReadByte();
            Unique = (SpecialItemMode)reader.ReadInt16();
        }
        if (version >= 24)
        {
            RandomStatsId = reader.ReadByte();
        }
        else
        {
            RandomStatsId = 255;
            if ((Type == ItemType.Weapon) || (Type == ItemType.Armour) || (Type == ItemType.Helmet) || (Type == ItemType.Necklace) || (Type == ItemType.Bracelet) || (Type == ItemType.Ring) || (Type == ItemType.Mount))
                RandomStatsId = (byte)Type;
            if ((Type == ItemType.Belt) || (Type == ItemType.Boots))
                RandomStatsId = 7;
        }

        if (version >= 40) CanFastRun = reader.ReadBoolean();

        if (version >= 41)
        {
            CanAwakening = reader.ReadBoolean();
            bool isTooltip = reader.ReadBoolean();
            if (isTooltip)
                ToolTip = reader.ReadString();
        }
    }
コード例 #11
0
ファイル: ItemData.cs プロジェクト: cpp1992/mir2
    public ItemInfo(BinaryReader reader, int version = int.MaxValue, int Customversion = int.MaxValue)
    {
        Index          = reader.ReadInt32();
        Name           = reader.ReadString();
        Type           = (ItemType)reader.ReadByte();
        Grade          = (ItemGrade)reader.ReadByte();
        RequiredType   = (RequiredType)reader.ReadByte();
        RequiredClass  = (RequiredClass)reader.ReadByte();
        RequiredGender = (RequiredGender)reader.ReadByte();
        Set            = (ItemSet)reader.ReadByte();

        Shape          = reader.ReadInt16();
        Weight         = reader.ReadByte();
        Light          = reader.ReadByte();
        RequiredAmount = reader.ReadByte();

        Image      = reader.ReadUInt16();
        Durability = reader.ReadUInt16();

        StackSize = reader.ReadUInt32();
        Price     = reader.ReadUInt32();

        MinAC    = reader.ReadByte();
        MaxAC    = reader.ReadByte();
        MinMAC   = reader.ReadByte();
        MaxMAC   = reader.ReadByte();
        MinDC    = reader.ReadByte();
        MaxDC    = reader.ReadByte();
        MinMC    = reader.ReadByte();
        MaxMC    = reader.ReadByte();
        MinSC    = reader.ReadByte();
        MaxSC    = reader.ReadByte();
        HP       = reader.ReadUInt16();
        MP       = reader.ReadUInt16();
        Accuracy = reader.ReadByte();
        Agility  = reader.ReadByte();

        Luck        = reader.ReadSByte();
        AttackSpeed = reader.ReadSByte();

        StartItem = reader.ReadBoolean();

        BagWeight  = reader.ReadByte();
        HandWeight = reader.ReadByte();
        WearWeight = reader.ReadByte();

        Effect         = reader.ReadByte();
        Strong         = reader.ReadByte();
        MagicResist    = reader.ReadByte();
        PoisonResist   = reader.ReadByte();
        HealthRecovery = reader.ReadByte();
        SpellRecovery  = reader.ReadByte();
        PoisonRecovery = reader.ReadByte();
        HPrate         = reader.ReadByte();
        MPrate         = reader.ReadByte();
        CriticalRate   = reader.ReadByte();
        CriticalDamage = reader.ReadByte();
        byte bools = reader.ReadByte();

        NeedIdentify    = (bools & 0x01) == 0x01;
        ShowGroupPickup = (bools & 0x02) == 0x02;
        ClassBased      = (bools & 0x04) == 0x04;
        LevelBased      = (bools & 0x08) == 0x08;
        CanMine         = (bools & 0x10) == 0x10;

        if (version >= 77)
        {
            GlobalDropNotify = (bools & 0x20) == 0x20;
        }

        MaxAcRate     = reader.ReadByte();
        MaxMacRate    = reader.ReadByte();
        Holy          = reader.ReadByte();
        Freezing      = reader.ReadByte();
        PoisonAttack  = reader.ReadByte();
        Bind          = (BindMode)reader.ReadInt16();
        Reflect       = reader.ReadByte();
        HpDrainRate   = reader.ReadByte();
        Unique        = (SpecialItemMode)reader.ReadInt16();
        RandomStatsId = reader.ReadByte();

        CanFastRun = reader.ReadBoolean();

        CanAwakening = reader.ReadBoolean();
        bool isTooltip = reader.ReadBoolean();

        if (isTooltip)
        {
            ToolTip = reader.ReadString();
        }

        if (version < 70) //before db version 70 all specialitems had wedding rings disabled, after that it became a server option
        {
            if ((Type == ItemType.Ring) && (Unique != SpecialItemMode.None))
            {
                Bind |= BindMode.NoWeddingRing;
            }
        }
    }
コード例 #12
0
ファイル: LMS_BR_Info.cs プロジェクト: coolzoom/mir2-master
        public List <LMS_RewardInfo> CreateRewards(byte rank, PlayerObject player)
        {
            RequiredClass playersClass =
                player.Class == MirClass.Warrior ? RequiredClass.Warrior :
                player.Class == MirClass.Wizard ? RequiredClass.Wizard :
                player.Class == MirClass.Taoist ? RequiredClass.Taoist :
                player.Class == MirClass.Assassin ? RequiredClass.Assassin :
                RequiredClass.Archer;
            List <LMS_RewardInfo> rewards = new List <LMS_RewardInfo>();
            List <LMS_RewardInfo> group0  = new List <LMS_RewardInfo>();
            List <LMS_RewardInfo> group1  = new List <LMS_RewardInfo>();
            List <LMS_RewardInfo> group2  = new List <LMS_RewardInfo>();
            List <LMS_RewardInfo> group3  = new List <LMS_RewardInfo>();
            List <LMS_RewardInfo> group4  = new List <LMS_RewardInfo>();

            for (int i = 0; i < Info.Rewards.Count; i++)
            {
                if (Info.Rewards[i].Rank == 0)
                {
                }
                else if (Info.Rewards[i].Rank != rank)
                {
                    continue;
                }
                if (Info.Rewards[i].RequiredClass == RequiredClass.None)
                {
                }
                else if (Info.Rewards[i].RequiredClass != playersClass)
                {
                    continue;
                }
                if (Info.Rewards[i].Group == 0)
                {
                    group0.Add(Info.Rewards[i]);
                }
                else if (Info.Rewards[i].Group == 1)
                {
                    group1.Add(Info.Rewards[i]);
                }
                else if (Info.Rewards[i].Group == 2)
                {
                    group2.Add(Info.Rewards[i]);
                }
                else if (Info.Rewards[i].Group == 3)
                {
                    group3.Add(Info.Rewards[i]);
                }
                else if (Info.Rewards[i].Group == 4)
                {
                    group4.Add(Info.Rewards[i]);
                }
            }
            if (group0 != null &&
                group0.Count > 0)
            {
                int item1Index = group0.Count == 1 ? 0 : Envir.Random.Next(0, group0.Count - 1);
                if (group0[item1Index] != null)
                {
                    if (Envir.Random.Next(0, 10000) <= group0[item1Index].Rate)
                    {
                        rewards.Add(group0[item1Index]);
                    }
                }
            }
            if (group1 != null &&
                group1.Count > 0)
            {
                int item2Index = group1.Count == 1 ? 0 : Envir.Random.Next(0, group1.Count - 1);
                if (Envir.Random.Next(0, 10000) <= group1[item2Index].Rate)
                {
                    rewards.Add(group1[item2Index]);
                }
            }
            if (group2 != null &&
                group2.Count > 0)
            {
                int item3Index = group2.Count == 1 ? 0 : Envir.Random.Next(0, group2.Count - 1);
                if (Envir.Random.Next(0, 10000) <= group2[item3Index].Rate)
                {
                    rewards.Add(group2[item3Index]);
                }
            }
            if (group3 != null &&
                group3.Count > 0)
            {
                int item4Index = group3.Count == 1 ? 0 : Envir.Random.Next(0, group3.Count - 1);
                if (Envir.Random.Next(0, 10000) <= group3[item4Index].Rate)
                {
                    rewards.Add(group3[item4Index]);
                }
            }
            if (group4 != null &&
                group4.Count > 0)
            {
                int item5Index = group4.Count == 1 ? 0 : Envir.Random.Next(0, group4.Count - 1);
                if (Envir.Random.Next(0, 10000) <= group4[item5Index].Rate)
                {
                    rewards.Add(group4[item5Index]);
                }
            }
            return(rewards);
        }
コード例 #13
0
ファイル: Common.cs プロジェクト: xiaofengzhiyu/CSharpMir
    public ItemInfo(BinaryReader reader, int version = int.MaxValue)
    {
        Index = reader.ReadInt32();
        Name = reader.ReadString();
        Type = (ItemType) reader.ReadByte();
        RequiredType = (RequiredType) reader.ReadByte();
        RequiredClass = (RequiredClass) reader.ReadByte();
        RequiredGender = (RequiredGender) reader.ReadByte();

        Shape = reader.ReadSByte();
        Weight = reader.ReadByte();
        Light = reader.ReadByte();
        RequiredAmount = reader.ReadByte();

        Image = reader.ReadUInt16();
        Durability = reader.ReadUInt16();

        StackSize = reader.ReadUInt32();
        Price = reader.ReadUInt32();

        MinAC = reader.ReadByte();
        MaxAC = reader.ReadByte();
        MinMAC = reader.ReadByte();
        MaxMAC = reader.ReadByte();
        MinDC = reader.ReadByte();
        MaxDC = reader.ReadByte();
        MinMC = reader.ReadByte();
        MaxMC = reader.ReadByte();
        MinSC = reader.ReadByte();
        MaxSC = reader.ReadByte();
        HP = reader.ReadByte();
        MP = reader.ReadByte();
        Accuracy = reader.ReadByte();
        Agility = reader.ReadByte();

        Luck = reader.ReadSByte();
        AttackSpeed = reader.ReadSByte();

        StartItem = reader.ReadBoolean();

        BagWeight = reader.ReadByte();
        HandWeight = reader.ReadByte();
        WearWeight = reader.ReadByte();

        if (version >= 9) Effect = reader.ReadByte();
    }
コード例 #14
0
    public ItemInfo(BinaryReader reader, int version = int.MaxValue, int customVersion = int.MaxValue)
    {
        Index          = reader.ReadInt32();
        Name           = reader.ReadString();
        Type           = (ItemType)reader.ReadByte();
        Grade          = (ItemGrade)reader.ReadByte();
        RequiredType   = (RequiredType)reader.ReadByte();
        RequiredClass  = (RequiredClass)reader.ReadByte();
        RequiredGender = (RequiredGender)reader.ReadByte();
        Set            = (ItemSet)reader.ReadByte();

        Shape          = reader.ReadInt16();
        Weight         = reader.ReadByte();
        Light          = reader.ReadByte();
        RequiredAmount = reader.ReadByte();

        Image      = reader.ReadUInt16();
        Durability = reader.ReadUInt16();

        if (version <= 84)
        {
            StackSize = (ushort)reader.ReadUInt32();
        }
        else
        {
            StackSize = reader.ReadUInt16();
        }

        Price = reader.ReadUInt32();

        if (version <= 84)
        {
            Stats                = new Stats();
            Stats[Stat.MinAC]    = reader.ReadByte();
            Stats[Stat.MaxAC]    = reader.ReadByte();
            Stats[Stat.MinMAC]   = reader.ReadByte();
            Stats[Stat.MaxMAC]   = reader.ReadByte();
            Stats[Stat.MinDC]    = reader.ReadByte();
            Stats[Stat.MaxDC]    = reader.ReadByte();
            Stats[Stat.MinMC]    = reader.ReadByte();
            Stats[Stat.MaxMC]    = reader.ReadByte();
            Stats[Stat.MinSC]    = reader.ReadByte();
            Stats[Stat.MaxSC]    = reader.ReadByte();
            Stats[Stat.HP]       = reader.ReadUInt16();
            Stats[Stat.MP]       = reader.ReadUInt16();
            Stats[Stat.Accuracy] = reader.ReadByte();
            Stats[Stat.Agility]  = reader.ReadByte();

            Stats[Stat.Luck]        = reader.ReadSByte();
            Stats[Stat.AttackSpeed] = reader.ReadSByte();
        }

        StartItem = reader.ReadBoolean();

        if (version <= 84)
        {
            Stats[Stat.BagWeight]  = reader.ReadByte();
            Stats[Stat.HandWeight] = reader.ReadByte();
            Stats[Stat.WearWeight] = reader.ReadByte();
        }

        Effect = reader.ReadByte();

        if (version <= 84)
        {
            Stats[Stat.Strong]         = reader.ReadByte();
            Stats[Stat.MagicResist]    = reader.ReadByte();
            Stats[Stat.PoisonResist]   = reader.ReadByte();
            Stats[Stat.HealthRecovery] = reader.ReadByte();
            Stats[Stat.SpellRecovery]  = reader.ReadByte();
            Stats[Stat.PoisonRecovery] = reader.ReadByte();
            Stats[Stat.HPRatePercent]  = reader.ReadByte();
            Stats[Stat.MPRatePercent]  = reader.ReadByte();
            Stats[Stat.CriticalRate]   = reader.ReadByte();
            Stats[Stat.CriticalDamage] = reader.ReadByte();
        }


        byte bools = reader.ReadByte();

        NeedIdentify    = (bools & 0x01) == 0x01;
        ShowGroupPickup = (bools & 0x02) == 0x02;
        ClassBased      = (bools & 0x04) == 0x04;
        LevelBased      = (bools & 0x08) == 0x08;
        CanMine         = (bools & 0x10) == 0x10;

        if (version >= 77)
        {
            GlobalDropNotify = (bools & 0x20) == 0x20;
        }

        if (version <= 84)
        {
            Stats[Stat.MaxACRatePercent]  = reader.ReadByte();
            Stats[Stat.MaxMACRatePercent] = reader.ReadByte();
            Stats[Stat.Holy]         = reader.ReadByte();
            Stats[Stat.Freezing]     = reader.ReadByte();
            Stats[Stat.PoisonAttack] = reader.ReadByte();
        }

        Bind = (BindMode)reader.ReadInt16();

        if (version <= 84)
        {
            Stats[Stat.Reflect]            = reader.ReadByte();
            Stats[Stat.HPDrainRatePercent] = reader.ReadByte();
        }

        Unique        = (SpecialItemMode)reader.ReadInt16();
        RandomStatsId = reader.ReadByte();

        CanFastRun = reader.ReadBoolean();

        CanAwakening = reader.ReadBoolean();

        if (version > 83)
        {
            Slots = reader.ReadByte();
        }

        if (version > 84)
        {
            Stats = new Stats(reader);
        }

        bool isTooltip = reader.ReadBoolean();

        if (isTooltip)
        {
            ToolTip = reader.ReadString();
        }

        if (version < 70) //before db version 70 all specialitems had wedding rings disabled, after that it became a server option
        {
            if ((Type == ItemType.Ring) && (Unique != SpecialItemMode.None))
            {
                Bind |= BindMode.NoWeddingRing;
            }
        }
    }