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

namespace XmdsCommonSkill.Plugin.Skills.Assassin
{
    /// <summary>
    /// 涂毒: 使毁伤攻击时,额外对敌人在x秒内造成共计x倍物攻的毒伤害.
    /// </summary>
    public class Assassin_201010 : Assassin_200010
    {
        public static new int ID = 201010;

        public static int Buff_2 = (int)XmdsBuffBase.XmdsBuffList.DU_SHANG;
        public static XmdsSkillValue Buff_2_Value;
        public override int SkillID { get { return ID; } }


        protected override void OnSkillLogicEvent(BattleParams param)
        {
            addLianJiDian(param);

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

            UnitBuff ub = param.Attacker.GetRegisBuffVirtual(Buff_2);
            XmdsBuff_Bleed buff = ub as XmdsBuff_Bleed;

            int t = this.GetTargetFormulaValue(param.Attacker.SkillHelper.GetGameSkill(SkillID).TalentSkillLevel1, Buff_2_Value);
            t = CUtils.CastInt(t / XmdsDamageCalculator.PERER * param.Attacker.MirrorProp.BaseAttack);
            t = XmdsDamageCalculator.GetDamage(t, param.Attacker, param.Hitter, param.Source); // 参与物防计算
            buff.ChangeValue = t / (bt.LifeTimeMS / 1000);

            param.Hitter.mUnit.AddBuff(Buff_2, param.Attacker.mUnit);

        }

        protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
        {
            //技能技能初始化,常用作为修改BUFF能力等等.
            XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_1);
            BuffTemplate bt = pack.mBuffTemplate;
            bt.IsHarmful = false;
            pack.BindTemplateAndDispose();
            unit.RegistSendBuff(bt);

            //多段伤害实现.
            pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_2);
            XmdsBuff_Bleed buff = (XmdsBuff_Bleed)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.Bleed);
            bt = pack.mBuffTemplate;
            bt.IsHarmful = true;

            pack.BindTemplateAndDispose();           
            unit.RegistSendBuff(bt);
        }

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