using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonAI.Zone;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonSkill.Plugin.Buffs;
using CommonAI.Zone.Instance;
using XmdsCommonServer.XLS.Data;
using CommonAI.Data;

namespace XmdsCommonSkill.Plugin.Skills.Assassin
{
    /// <summary>
    /// 闷棍: 偷袭敌人,造成x倍物攻伤害。若敌人在非战斗状态中,将被瘫痪x秒;若敌人在战斗状态中,则只有x%概率会被瘫痪.
    /// </summary>
    public class Assassin_202040 : XmdsSkillBase
    {
        public static int ID = 202040;

        /// 伤害倍数.
        public static XmdsSkillValue DP_1;

        public static int Buff_1 = (int)XmdsBuffBase.XmdsBuffList.TAN_HUAN;

        /// 战斗状态敌人,触发瘫痪几率(配表,可升级).
        public static XmdsSkillValue Buff_Rate_Up;

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

        protected override void OnSkillDamagePerEvent(BattleParams param)
        {
            int ret = CalDamagePer(DP_1, param.GameSkill.SkillLevel);
            param.SkillDamagePer = ret;
        }

        protected override void OnSkillLogicEvent(BattleParams param)
        {
            bool f = true;

            //战斗状态有概率被瘫痪.
            if (param.Hitter.CombatState != BattleStatus.None)
            {
                f = param.Attacker.RandomPercent(this.GetTargetFormulaValue(param.GameSkill.SkillLevel, Buff_Rate_Up));
            }

            //非战斗状态一定被瘫痪.
            if (f)
            {
                BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_1);
                bt.LifeTimeMS = 5000;
                param.Hitter.mUnit.AddBuff(Buff_1, param.Attacker.mUnit);
            }
        }

        protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
        {
            XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_1);
            BuffTemplate bt = pack.mBuffTemplate;
            if (bt != null)
            {
                bt.IsHarmful = true;
                pack.BindTemplateAndDispose();
                unit.RegistSendBuff(bt);
            }

            base.OnInit(info, unit, ref template);
        }


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