using CommonAI.Data;
using CommonAI.Zone;
using CommonAI.Zone.Formula;
using CommonAI.Zone.Helper;
using CommonAI.Zone.Instance;
using CommonLang;
using System;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using XmdsCommonServer.XLS.Data;

namespace XmdsCommonSkill.Plugin.Skills.Magic
{
	/// <summary>
	/// 法师【1】技能 1 - 2(根据敌人当前生命值,造成额外伤害,当前血越低伤害越高,波动值n-n1(有上下限))
	/// </summary>
	public class Magic_310120 : Magic_310110
	{
        /// 技能ID.
        private static int ID = 310120;

		//1-2血量每减少N1,伤害提高N2
		protected XmdsSkillValue mValueSet3;

        /// 获取技能ID.
        public override int SkillID { get { return ID; } }

		private float mHpMaxLayer = 0;

		protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
		{
			base.OnInit(info, unit, ref template);

			this.mHpMaxLayer = (XmdsDamageCalculator.PERER / mValueSet3.GetValue(info.TalentSkillLevel2, 1));
		}

		protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
		{
			base.OnSkillDataChange(gs, unit);

			this.mHpMaxLayer = XmdsDamageCalculator.PERER / mValueSet3.GetValue(gs.TalentSkillLevel2, 1);
		}

		protected override void OnSkillDamagePerEvent(BattleParams param)
        {
            base.OnSkillDamagePerEvent(param);

			int hpLevel = (int)(mHpMaxLayer  - mHpMaxLayer / param.Hitter.MirrorProp.MaxHP * param.Hitter.mUnit.CurrentHP);
			if(hpLevel > 0)
			{
				param.SkillDamagePer += hpLevel * mValueSet3.GetValue(param.GameSkill.TalentSkillLevel2, 2);
			}			
		}

        protected override void OnInitConfig()
        {
            XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
            InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
            InitData(data, out mValueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
            InitData(data, out mValueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);

			// 扩展配置
			InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8);
		}
    }
}