using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.XLS.Data; namespace XmdsCommonSkill.Plugin.Skills.Monster { /// /// 黑暗执法者 - 治疗术: 治疗附近血量最低的队友,治疗量等于x倍魔攻+y. /// public class Monster_10210202 : XmdsSkillBase { public static int ID = 10210202; public static XmdsSkillValue DP_1; public override int SkillID { get { return ID; } } protected override void OnRegistEvent() { this.RegistEvent(EventType.UseFormluaType, OnUseFormluaTypeEvent); base.OnRegistEvent(); } protected override void OnSkillDamagePerEvent(BattleParams param) { int ret = CalDamagePer(DP_1, param.GameSkill.SkillLevel); param.SkillDamagePer = ret; } private void OnUseFormluaTypeEvent(BattleParams param) { param.UseDamageType = CommonAI.Data.DamageType.Heal; } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate); } protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info, false); base.OnInit(info, unit, ref template); } protected virtual bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param) { //治疗附近血量最低的队友. using (var list = ListObjectPool.AllocAutoRelease()) { float r = skill.Data.AttackRange; launcher.mUnit.Parent.getObjectsRoundRange( (obj, dx, dy, dr) => { var u = obj as InstanceUnit; if (launcher.IsAllies(u.Virtual as XmdsVirtual, true)) { return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y); } return false; }, launcher.mUnit.X, launcher.mUnit.Y, r, list, launcher.mUnit.AoiStatus); if (list.Count > 0) { list.Sort((a, b) => { return a.CurrentHP - b.CurrentHP; }); param.TargetUnitID = list[0].ID; } } return true; } } }