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

namespace XmdsCommonSkill.Plugin.FunctionEvent
{
    /// <summary>
    /// 单挑王事件.首次恢复最大血量5%,之后每秒回复1%,持续5秒.
    /// </summary>
    public class XmdsBattleFunctionEvent_10000 : XmdsBattleFunctionEventBase
    {
        public static readonly int EventID = 10000;

		private int BuffValue_1 = 0;        // 一次性回血量:5%.
		private int BuffValue_2 = 0;		// 后续每秒回血量:1%.
        private int Buff_LifeTime = 0;      // buff持续时间.

		public override int GetEventID() { return EventID; }

		protected override bool OnInit()
        {
			BuffConfig config = base.GetBuffConfig();
			BuffValue_1 = System.Int32.Parse(config.ValueSet1);
			BuffValue_2 = System.Int32.Parse(config.ValueSet2);
			Buff_LifeTime = System.Int32.Parse(config.ValueSet3);

            return XmdsBuffFactory.GetInstance().XmdsBuffPackTest(base.mBuff_ID, XmdsBuffProperties.XmdsBuffAbility.AddHP);
        }

        protected override void OnTriggerEvent(XmdsVirtual target, XmdsVirtual sender)
        {
            //首次回血量计算.
            int hp1 = CUtils.CastInt(BuffValue_1 * XmdsUnitProp.PER * target.MirrorProp.MaxHP);
            //执行首次回血.
            target.AddHP(hp1, null, true);

            //每秒回血计算.
            int hp2 = CUtils.CastInt(BuffValue_2 * XmdsUnitProp.PER * target.MirrorProp.MaxHP);

            XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(base.mBuff_ID);
            XmdsBuff_AddHP buff = (XmdsBuff_AddHP)pack.GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility.AddHP);
            buff.ChangeValue = hp2;

            BuffTemplate bt = pack.mBuffTemplate;
            bt.IsHarmful = false;
            bt.LifeTimeMS = Buff_LifeTime;
            bt.FirstTimeEnable = false;
            (bt.Properties as XmdsBuffProperties).Dispelled = false;
            pack.BindTemplateAndDispose();

            target.mUnit.AddBuff(bt, sender.mUnit);
        }
    }
}