// Generate By EToy
// Don't Edit It!!

using XGame.Framework.Database;
using XGame.Framework.Serialization;

namespace XGame.Database
{
    /// <summary> Chapter </summary>
    public sealed class ChapterTable : ITable
    {
        long ITable.Key => Id;

        /// <summary> ID10000000*关卡类型+章节*10000+关卡*100+节点 </summary>
        public int Id { get; private set; } // sc

        /// <summary> 关卡类型1：常规关卡 </summary>
        public int Type { get; private set; } // c

        /// <summary> 关卡名称 </summary>
        public string Name { get; private set; } // c

        /// <summary> 等级 </summary>
        public int Level { get; private set; } // sc

        /// <summary> 调节系数 </summary>
        public int Power { get; private set; } // sc

        /// <summary> 地图 </summary>
        public int Map { get; private set; } // c

        /// <summary> 章节 </summary>
        public int Chapter { get; private set; } // sc

        /// <summary> 关卡 </summary>
        public int Section { get; private set; } // sc

        /// <summary> 节点 </summary>
        public int Part { get; private set; } // sc

        /// <summary> 0：普通节点1：BOSS节点 </summary>
        public int Part_type { get; private set; } // c

        /// <summary> 每波出怪间隔（单位：豪秒） </summary>
        public int Interval { get; private set; } // c

        /// <summary> 第1波怪物ID，数量 </summary>
        public int[] Monster_refresh1 { get; private set; } // sc

        /// <summary> 第2波怪物ID，数量 </summary>
        public int[] Monster_refresh2 { get; private set; } // sc

        /// <summary> 第3波怪物ID，数量 </summary>
        public int[] Monster_refresh3 { get; private set; } // sc

        /// <summary> 第4波怪物ID，数量 </summary>
        public int[] Monster_refresh4 { get; private set; } // sc

        /// <summary> 第5波怪物ID，数量 </summary>
        public int[] Monster_refresh5 { get; private set; } // sc

        /// <summary> 关卡通关限时（单位：豪秒）-1:表现不限制 </summary>
        public int Time { get; private set; } // sc

        /// <summary> 在线奖励 </summary>
        public int[] Online_reward { get; private set; } // sc

        /// <summary> 离线奖励 </summary>
        public int[] Offline_reward { get; private set; } // sc

        void ISerializable.Deserialize(IReader reader)
        {
            Id = reader.ReadInt();
            Type = reader.ReadInt();
            Name = reader.ReadString();
            Level = reader.ReadInt();
            Power = reader.ReadInt();
            Map = reader.ReadInt();
            Chapter = reader.ReadInt();
            Section = reader.ReadInt();
            Part = reader.ReadInt();
            Part_type = reader.ReadInt();
            Interval = reader.ReadInt();
            Monster_refresh1 = reader.ReadEnumerable<int[]>();
            Monster_refresh2 = reader.ReadEnumerable<int[]>();
            Monster_refresh3 = reader.ReadEnumerable<int[]>();
            Monster_refresh4 = reader.ReadEnumerable<int[]>();
            Monster_refresh5 = reader.ReadEnumerable<int[]>();
            Time = reader.ReadInt();
            Online_reward = reader.ReadEnumerable<int[]>();
            Offline_reward = reader.ReadEnumerable<int[]>();
        }

        void ISerializable.Serialize(IWriter writer)
        {
            writer.Write(Id);
            writer.Write(Type);
            writer.Write(Name);
            writer.Write(Level);
            writer.Write(Power);
            writer.Write(Map);
            writer.Write(Chapter);
            writer.Write(Section);
            writer.Write(Part);
            writer.Write(Part_type);
            writer.Write(Interval);
            writer.Write(Monster_refresh1);
            writer.Write(Monster_refresh2);
            writer.Write(Monster_refresh3);
            writer.Write(Monster_refresh4);
            writer.Write(Monster_refresh5);
            writer.Write(Time);
            writer.Write(Online_reward);
            writer.Write(Offline_reward);
        }
    }
}
