using XmdsCommonServer.XLS.Data;
using XmdsCommonServer.Plugin;
using XmdsCommonSkill.Plugin.Buffs;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
using CommonAI.Zone;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using CommonLang;

namespace XmdsCommonSkill.Plugin.Skills.Monster
{
    /// <summary>
    /// 疫病之王亚巴顿 - 瘟疫传染: 对随机目标释放瘟疫魔法,使其在10秒内总计流失生命x%.
    /// 5秒后该魔法会传染到目标身边y米内的随机1个队友身上(随机目标,范围内必定传染).
    /// </summary>
    public class Monster_6061204 : XmdsSkillBase
    {
        public static int ID = 6061204;

        /// 流血BUFFID.
        public static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.WEN_YI;

        public static XmdsSkillValue BuffDamageHPPec;

        public override int SkillID { get { return ID; } }

        protected override void OnSkillLogicEvent(BattleParams param)
        {
            param.UseDamageType = CommonAI.Data.DamageType.None;

            // 流血
            UnitBuff ub = param.Attacker.GetRegisBuffVirtual(Buff_ID);
            XmdsBuff_Bleed buff = ub as XmdsBuff_Bleed;
            int t = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffDamageHPPec);
            t = CUtils.CastInt(t / XmdsDamageCalculator.PERER * param.Hitter.MirrorProp.MaxHP);
            buff.ChangeValue = t / 5;

            BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
            bt.LifeTimeMS = 5000;

            // 上buff
            param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
        }

        protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
        {
            XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
            XmdsBuff_Bleed buff = (XmdsBuff_Bleed)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.Bleed);
            BuffTemplate bt = pack.mBuffTemplate;
            bt.IsHarmful = true;
            pack.BindTemplateAndDispose();
            unit.RegistSendBuff(bt);
        }

        protected override void OnInitSkillParam()
        {
            XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
            InitData(data, out BuffDamageHPPec, XmdsSkillData.XmdsSkillDataKey.ValueSet);
        }
    }
}