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

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

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

        /// <summary> BUFFIDBUFF类型*100+序号 </summary>
        public int Id { get; private set; } // sc

        /// <summary> 名字 </summary>
        public string Name { get; private set; } // c

        /// <summary> 图标 </summary>
        public string Icon { get; private set; } // c

        /// <summary> buff描述 </summary>
        public string Desc { get; private set; } // c

        /// <summary> 元素系1：火2：雷3：冰4：毒5：风0：无元素 </summary>
        public EElementType Element { get; private set; }

        /// <summary> 叠加上限 </summary>
        public int AddUp { get; private set; } // sc

        /// <summary> BUFF持续时间 </summary>
        public int EndureTime { get; private set; } // sc

        /// <summary> buff特效 </summary>
        public string BuffEffect { get; private set; } // c

        /// <summary> buff结束特效 </summary>
        public string BuffEndEffect { get; private set; } // c

        /// <summary> 作用对象 1：主角 2：所有飞剑 3：主角+飞剑 4：所有剑 8：所有斧 16：所有锤 32：所有法杖 64：所有匕首 512：受击者(敌方单体)1024：敌方群体2048：友方群体4096：施法者 </summary>
        public int TargetType { get; private set; } // sc

        /// <summary> BUFF类型1：属性类（增加攻击，增加防御，增加生命，增加攻速，增加免伤，降低移动速度，降低攻击速度，普攻时伤害加成，暴击时伤害加成，连击时伤害加成，反击时伤害加成，技能暴击时伤害加成，伤害加成，技能伤害加成，回复）2：眩晕3：眩晕状态伤害加成4：冰冻5：冰冻状态伤害加成6：沉默7：麻痹8：护盾9：护盾转化（时间内护盾没有被击破直接转化成生命）10：流血/中毒/灼烧11：流血时伤害加深/中毒时伤害加深/灼烧时伤害加深12：无敌13：回复效果降低110:元素易伤-易燃120:元素易伤-引雷130:元素易伤-冻伤140:元素易伤-毒雾150:元素易伤-风语 </summary>
        public int BuffType { get; private set; } // sc

        /// <summary> BUFF效果1:属性类型BUFF（属性ID，属性数值（正值表示增加，负值表示降低，增加的属性值根据属性类型直接进行+/-））3：正值表示增加，负值表示降低5：正值表示增加，负值表示降低7：正值表示增加，负值表示降低8：生命护盾百分比9：护盾值转化百分比10：每秒的百分比伤害11：百分比效果12：持续时长110:[灼烧buffId,触发概率,3,灼烧buffId,5,炎爆技能id]120:[天雷技能Id,触发概率,3,眩晕buffId,5,磁暴技能Id)]130:[1(预留)，伤害加成比例,3,冰冻buffId,5,冰盾Buffid]140:[毒buffId,触发概率,3,毒爆技能Id,5,中毒层数]150:[攻速buffId,触发概率,3,攻速buffId,5,飓风技能id] </summary>
        public int[] BuffTypeNum { get; private set; } // sc

        void ISerializable.Deserialize(IReader reader)
        {
            Id = reader.ReadInt();
            Name = reader.ReadString();
            Icon = reader.ReadString();
            Desc = reader.ReadString();
            Element = (EElementType)reader.ReadInt();
            AddUp = reader.ReadInt();
            EndureTime = reader.ReadInt();
            BuffEffect = reader.ReadString();
            BuffEndEffect = reader.ReadString();
            TargetType = reader.ReadInt();
            BuffType = reader.ReadInt();
            BuffTypeNum = reader.ReadEnumerable<int[]>();
        }

        void ISerializable.Serialize(IWriter writer)
        {
            writer.Write(Id);
            writer.Write(Name);
            writer.Write(Icon);
            writer.Write(Desc);
            writer.Write((int)Element);
            writer.Write(AddUp);
            writer.Write(EndureTime);
            writer.Write(BuffEffect);
            writer.Write(BuffEndEffect);
            writer.Write(TargetType);
            writer.Write(BuffType);
            writer.Write(BuffTypeNum);
        }
    }
}
