using CommonAI.Zone; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonServer.XLS.Data; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using XmdsCommonSkill.Plugin.Skills; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using CommonAI.Zone.Formula; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using CommonLang; using CommonAI.Data; namespace XmdsCommonSkill.Plugin.PassiveSkills.Monster { /// /// 科斯林伯爵 - 狂怒1:在接下来10秒内,攻击增加x,暴击增加x. /// 10秒后释放愤怒,对身边敌人造成x%物攻伤害并短暂击飞敌人在Boss生命小于30%时释放. /// 该被动效果为,血量小于30%激活主动技能. /// 10340512、10340513不要加入怪物技能列表,被动技能触发时候会主动调用. /// public class Monster_10340502 : XmdsPassiveSkillBase { /// /// 技能ID. /// public static int ID = 10340502; /// /// 血量小于%多少. /// public static int Condition_1 = 3000; /// /// 激活的技能1. /// public static int ActiveSkillID_1 = 10340512; /// /// 激活的技能2. /// public static int ActiveSkillID_2 = 10340522; /// /// 倒计时X秒后施放狂怒2段. /// public static int CountTime = 10000; /// /// 是否使用. /// private bool HasDone = false; private int mUUID_1 = 0; private int mUUID_2 = 0; /// /// 拥有者. /// private XmdsVirtual mOwner = null; /// ///计时器. /// private TimeExpire mBuffTimer = null; /// /// 是否开始计时. /// private bool mStartCountTime = false; /// /// 获取技能ID. /// public override int SkillID { get { return ID; } } protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner) { mOwner = owner; //注册招架监听. mUUID_1 = owner.RegistOnHitDamage(OnHandleOnHitDamage, skillInfo, true); mUUID_2 = owner.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, 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 || hitter.mUnit.CurrentHP < v1) { //只用一次. HasDone = true; mOwner.UnRegistOnHitDamage(mUUID_1); //激活指定技能. GameSkill gs = new GameSkill(); gs.SkillID = ActiveSkillID_1; gs.SkillType = XmdsSkillType.active; gs.SkillLevel = 1; //狂怒第一阶段. hitter.SkillHelper.AddActiveSkill(gs); gs = new GameSkill(); gs.SkillID = ActiveSkillID_2; gs.SkillType = XmdsSkillType.active; gs.SkillLevel = 1; hitter.SkillHelper.AddActiveSkill(gs); //狂怒第二阶段. hitter.mUnit.SetSkillActive(ActiveSkillID_2, false); } } return damage; } protected override void OnDispose(XmdsVirtual owner) { owner.UnRegistOnHitDamage(mUUID_1); mOwner = null; } private bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param) { //技能只有在符合血量条件的情况下才能触发. if (skill.ID == ActiveSkillID_1 || skill.ID == ActiveSkillID_2) { int v1 = CUtils.CastInt(launcher.mUnit.MaxHP * (Condition_1 * 1.0f / XmdsDamageCalculator.PERER)); if (launcher.mUnit.MaxHP >= v1) { return false; } } if (skill.ID == ActiveSkillID_1) { if (mStartCountTime == false) { //启动计时器. if (mBuffTimer == null) { mBuffTimer = new TimeExpire(CountTime); } else { mBuffTimer.Reset(CountTime); } mStartCountTime = true; } else { //倒计时中不能再次施放该技能. return false; } } return true; } protected override void OnUpdate(int intervalMS, bool slowRefresh) { if (mBuffTimer != null && mStartCountTime == true) { if (mBuffTimer.Update(intervalMS)) { mStartCountTime = false; mBuffTimer.Reset(); LaunchSkill(); } } base.OnUpdate(intervalMS, slowRefresh); } private void LaunchSkill() { if (mOwner != null) { mOwner.mUnit.SetSkillActive(ActiveSkillID_2, true); mOwner.mUnit.ClearSkillCD(ActiveSkillID_2); mOwner.mUnit.launchSkill(ActiveSkillID_2, new InstanceUnit.LaunchSkillParam()); } } } }