using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonLang; using System; using System.Collections.Generic; using System.Linq; using System.Text; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonSkill.Plugin.Skills; namespace XmdsCommonSkill.Plugin.PassiveSkills.Monster { /// /// 狂暴 生命值低于50时触发,赤虎妖伤害大幅上升,自身移动速度大幅下降 一个增加自身伤害同时降低自身速度的BUFF /// public class Monster_601011 : XmdsPassiveSkillBase { /// ///ID. /// public static int ID = 601011; /// /// BUFF时间. 姚晟:填一个很长的数值,90000秒这样 /// public static int Buff_Time = 90000000; public static int Buff_ID = 601011; /// /// BUFF 攻击增加. /// public static XmdsSkillValue Buff_Value_1; /// /// BUFF 减速 /// public static XmdsSkillValue Buff_Value_2; public static int Condition_1 = 5000; /// /// 是否使用. /// private bool HasDone = false; private int mUUID = 0; public override int SkillID { get { return ID; } } protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID); var bufflist = pack.GetXmdsBuffList(); if (bufflist.Count >= 2) { //攻击增加. var propChange = (XmdsBuff_PropChange)bufflist[0]; propChange.CurentChangeType = XmdsVirtual.UnitAttributeType.Attack; propChange.CurrentValue = this.GetTargetFormulaValue(skillInfo.SkillLevel, Buff_Value_1); propChange.IsPercent = true; //防御增加. var buff_speed = (XmdsBuff_MoveSpeedDown)bufflist[1]; buff_speed.ChangePercent = -this.GetTargetFormulaValue(skillInfo.SkillLevel, Buff_Value_2); propChange.IsPercent = true; } BuffTemplate bt = pack.mBuffTemplate; bt.IsHarmful = false; bt.LifeTimeMS = Buff_Time; pack.BindTemplateAndDispose(); owner.RegistSendBuff(bt); //注册招架监听. mUUID = owner.RegistOnHitDamage(OnHandleOnHitDamage, skillInfo, true); } private float OnHandleOnHitDamage(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if (HasDone == false) { int v1 = CUtils.CastInt(hitter.mUnit.MaxHP * (Condition_1 * 1.0f / XmdsDamageCalculator.PERER)); //小于指定血量. if (hitter.mUnit.CurrentHP - damage < v1) { HasDone = true; //触发技能效果. hitter.mUnit.AddBuff(Buff_ID, hitter.mUnit); CommonAI.Zone.LaunchSpell ls = new CommonAI.Zone.LaunchSpell(); ls.SpellID = SkillID; //播放声音特效. //hitter.mUnit.Parent.unitLaunchSpell(hitter.mUnit, ls, // hitter.mUnit.X, hitter.mUnit.Y, // hitter.mUnit.ID); } } return damage; } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitDamage(mUUID); } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out Buff_Value_1, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out Buff_Value_2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); } } }