using CommonAI.Zone; using CommonAI.Zone.Instance; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonServer.XLS.Data; namespace XmdsCommonSkill.Plugin.Skills.Priest { /// /// 暗影形态: 进入暗影形态,物防提高x%,移动速度提高x%,每秒消耗x%法力对身边的所有敌人造成x倍魔攻伤害,附加x点魔法伤害. /// public class Priest_501050 : XmdsSkillBase { /// /// 技能ID. /// public static int ID = 501050; /// /// 伤害类型. /// public static XmdsVirtual.AttackType AtkType_1 = XmdsVirtual.AttackType.magAtk; /// /// 伤害倍数. /// public static XmdsSkillValue DP_1; /// /// 伤害倍数每级成长. /// public static XmdsSkillValue DP_up; /// /// 附加伤害. /// public static XmdsSkillValue DM_1; /// /// BUFF. /// public static int Buff_1 = (int)XmdsBuffBase.XmdsBuffList.AN_YIN_XING_TAI; /// /// BUFF时长. /// public static XmdsSkillValue BuffLifeTime; /// /// 蓝消耗. /// public static XmdsSkillValue MPCost; /// /// 护甲上升. /// public static XmdsSkillValue DefUp; /// /// 速度上升. /// public static XmdsSkillValue SpeedUp; /// /// 仇恨系数. /// public static XmdsSkillValue ThreatValue; /// /// 获取技能ID. /// public override int SkillID { get { return ID; } } protected override void OnSkillDamagePerEvent(BattleParams param) { int ret = CalDamagePer(DP_1, DP_up, param.GameSkill.SkillLevel); param.SkillDamagePer = ret; } protected override void OnskillDamageModifyEvent(BattleParams param) { int ret = 0; ret = GetTargetFormulaValue(param.GameSkill.SkillLevel, DM_1); param.SkillDamageModify = ret; } protected override void OnAttackTypeEvent(BattleParams param) { param.AttackType = AtkType_1; } protected override void OnThreatValueEvent(BattleParams param) { param.ThreatValue = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, ThreatValue); } protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { //注册技能结束监听. unit.RegistStateSkillEndEvent(OnStateEndEvent, info, false); //标记效果实现. XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_1); BuffTemplate bt = pack.mBuffTemplate; bt.FirstTimeEnable = false; pack.BindTemplateAndDispose(); bt.IsHarmful = false; unit.RegistSendBuff(bt); } protected override void OnSkillLogicEvent(BattleParams param) { //打自己加BUFF. if ( param.AtkProp.DamagePerID == 1) { param.UseFormulaType = BattleParams.FormulaType.None; //物防. XmdsBuff_PropChange b1 = (XmdsBuff_PropChange)param.Attacker.GetRegisBuffVirtual(Buff_1, 0); b1.IsPercent = true; b1.CurentChangeType = (int)XmdsBuff_PropChange.PropChangeType.AC; b1.CurrentValue = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, DefUp); //速度. XmdsBuff_MoveSpeedChange b2 = (XmdsBuff_MoveSpeedChange)param.Attacker.GetRegisBuffVirtual(Buff_1, 1); b2.ChangePercent = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, SpeedUp); XmdsBuffBase b3 = (XmdsBuffBase)param.Attacker.GetRegisBuffVirtual(Buff_1, 2); //设置伤害回调. b3.SetOnHitCallBack(param.GameSkill, OnXmdsBuffHitEvent); BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_1); bt.LifeTimeMS = GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffLifeTime); param.Attacker.mUnit.AddBuff(Buff_1); } //打敌人 else if (param.AtkProp.DamagePerID == 2) { //donothing. } } private void OnXmdsBuffHitEvent(BattleParams param) { //计算每秒蓝消耗量. float p = 1.0f * this.GetTargetFormulaValue(param.GameSkill.SkillLevel, MPCost) / XmdsDamageCalculator.PERER; int mpChange = (int)(param.Hitter.mUnit.MaxMP * p); param.Hitter.AddMP(-mpChange,false); //蓝<=0.中断当前技能状态. if (param.Hitter.mUnit.CurrentMP <= 0) { var sk = param.Hitter.mUnit.CurrentState as InstanceUnit.StateSkill; if (sk != null) { sk.block(); } } } private void OnStateEndEvent(XmdsVirtual owner, InstanceUnit.StateSkill state, GameSkill gs) { //技能结束,BUFF结束. if (state.SkillData.ID == ID) { owner.mUnit.removeBuff(Buff_1, InstanceUnit.BuffState.EndResult_ByCode); } } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); AtkType_1 = data.GetAtkType(); InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate); InitData(data, out DP_up, XmdsSkillData.XmdsSkillDataKey.DmgRatePerLvl); InitData(data, out DM_1, XmdsSkillData.XmdsSkillDataKey.ExdDmgSet); InitData(data, out MPCost, XmdsSkillData.XmdsSkillDataKey.ValueSet); // 耗蓝. InitData(data, out DefUp, XmdsSkillData.XmdsSkillDataKey.ValueSet2); // 物防. InitData(data, out SpeedUp, XmdsSkillData.XmdsSkillDataKey.ValueSet3); // 速度. InitData(data, out BuffLifeTime, XmdsSkillData.XmdsSkillDataKey.BuffTime); InitData(data, out ThreatValue, XmdsSkillData.XmdsSkillDataKey.HateRate); } } }