using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang; using System; using System.Collections.Generic; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.Units; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonSkill.Plugin.PassiveSkills.Magic; using static CommonAI.Zone.Instance.InstanceUnit; namespace XmdsCommonSkill.Plugin.Skills.Boss { /// /// 隐藏BOSS-道君分身, 捆仙索 /// 随机对N名玩家释放捆仙锁,被捆仙锁命中会被定身在原地无法移动和攻击,每秒对玩家造成最大血量的<$1>的伤害持续<$2>秒。 /// 同时场景中出现对应玩家名称的小怪,击杀小怪后玩家解除定身。怪物血量为boss血量<$3> /// Monster_10490403 /// public class Boss_90316 : XmdsSkillBase { private static int ID = 90316; public override int SkillID { get { return ID; } } private static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.BOSS_ZB_TRAP; // 捆仙索buff public static XmdsSkillValue damageValue; // 最大生命百分比伤害 public static XmdsSkillValue buffTime; // Buff时间 public static XmdsSkillValue mirrorMonsterHP; // 镜像怪生命值 public static XmdsSkillValue trapCount; // 束缚上限 private static XmdsSkillValue summonUnitID; // 召唤单位ID // 转换小怪id private static int mCheckRange = 10; protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID); BuffTemplate bt = pack.mBuffTemplate; bt.IsHarmful = true; pack.BindTemplateAndDispose(); unit.RegistSendBuff(bt); unit.RegistLaunchSkillOver(OnLaunchSkillOver, info, false); } private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill) { //治疗自己和队友 using (var list = ListObjectPool.AllocAutoRelease()) { launcher.mUnit.Parent.getObjectsRoundRange((obj, dx, dy, dr) => { var u = obj as InstanceUnit; if (u.IsPlayer) { return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y); } return false; }, launcher.mUnit.X, launcher.mUnit.Y, mCheckRange, list, launcher.mUnit.AoiStatus); int count = Math.Max(list.Count, trapCount.GetValue()); UnitInfo sumUnitInfo = XmdsBattleSkill.GetUnitInfo(summonUnitID.GetValue()); // 召唤连接单位 for (int i = 0; i < count; i++) { AddUnitEvent aue = null; var unit = list[i].Parent.AddUnit( sumUnitInfo, sumUnitInfo.Name, list[i].Force, 1, list[i].X, list[i].Y, list[i].Direction, out aue, list[i]) as XmdsInstanceSummonUnit; } //int addHP = CUtils.CastInt(launcher.MirrorProp.BaseAttack * XmdsUnitProp.PER * valueSet1.GetValue(info.SkillLevel)); //加血 & 加速 //for (int i = 0; i < list.Count; i++) //{ // list[i].AddHP(addHP, launcher.mUnit); // list[i].AddBuff(Buff_ID, launcher.mUnit); //} } return 0; } protected override void OnInitSkillParam() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out damageValue, XmdsSkillData.XmdsSkillDataKey.DmgRate); InitData(data, out buffTime, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out mirrorMonsterHP, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out trapCount, XmdsSkillData.XmdsSkillDataKey.ValueSet3); InitData(data, out summonUnitID, XmdsSkillData.XmdsSkillDataKey.ValueSet4); } } }