123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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
- {
- /// <summary>
- /// 隐藏BOSS-道君分身, 捆仙索
- /// 随机对N名玩家释放捆仙锁,被捆仙锁命中会被定身在原地无法移动和攻击,每秒对玩家造成最大血量的<$1>的伤害持续<$2>秒。
- /// 同时场景中出现对应玩家名称的小怪,击杀小怪后玩家解除定身。怪物血量为boss血量<$3>
- /// Monster_10490403
- /// </summary>
- 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<InstanceUnit>.AllocAutoRelease())
- {
- launcher.mUnit.Parent.getObjectsRoundRange<InstanceUnit>((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);
- }
- }
- }
|