/// <summary> /// 释放技能效果 /// </summary> /// <param name="src">效果发起者</param> /// <param name="skTarget">技能选择的目标,忽略</param> /// <param name="target">技能先选择目标后,再次Effect选择后的目标</param> /// <param name="skDirectHurt">是否是技能的直接伤害</param> /// <param name="container">所有数据展现的容器,本次Effect施法的效果会依次加入</param> public void Cast(ServerNPC src, IEnumerable <ServerNPC> skTarget, IEnumerable <ServerNPC> target, bool skDirectHurt, List <MsgParam> container) { /// /// 实际上该效果分为两部分的逻辑 /// 1. 消除某些类型的buff /// 2. 消除特定ID的buff /// #if DEBUG Utils.Assert(src == null, "DisperseEffect can't find src."); Utils.Assert(target == null, "DisperseEffect can't find target."); #endif BuffMgr bufMgr = WarServerManager.Instance.bufMgr; //TODO: 1. 消除某些类型的buff /// 2. 消除特定ID的buff List <int> bufIds = new List <int>(); if (cfg.Param4 > 0) { bufIds.Add(cfg.Param4); } if (cfg.Param5 > 0) { bufIds.Add(cfg.Param5); } if (cfg.Param6 > 0) { bufIds.Add(cfg.Param6); } int count = bufIds.Count; if (count > 0) { if (target.Any()) { foreach (ServerNPC npc in target) { for (int i = 0; i < count; ++i) { List <RtBufData> bufList = bufMgr.findBuff(bufIds[i], npc.UniqueID); int foundBufCnt = bufList.Count; if (foundBufCnt > 0) { for (int j = 0; j < foundBufCnt; ++j) { bufMgr.rmBuff(bufList[j].ID, npc.UniqueID); } } } } } } }
/// <summary> /// 释放技能效果 /// </summary> /// <param name="src">效果发起者</param> /// <param name="skTarget">技能选择的目标,本参数在这里无意义</param> /// <param name="target">技能先选择目标后,再次Effect选择后的目标。本参数数量 >= 0 </param></param> /// <param name="skDirectHurt">是否是技能的直接伤害, 这个没有伤害</param> /// <param name="container">所有数据展现的容器,本次Effect施法的效果会依次加入</param> public void Cast(ServerNPC src, IEnumerable <ServerNPC> skTarget, IEnumerable <ServerNPC> target, bool skDirectHurt, List <MsgParam> container) { #if DEBUG Utils.Assert(cfg == null, "Effect configure is null in DotHotEffect."); Utils.Assert(skCfg == null, "skill configure is null in DotHotEffect."); #endif foreach (ServerNPC bnpc in target) { WarTarAnimParam param = new WarTarAnimParam() { OP = EffectOp.DotHot, HitAction = cfg.HitAction, }; BuffMgr bufMgr = WarServerManager.Instance.bufMgr; BuffCtorParamEx ctor = new BuffCtorParamEx() { fromNpcId = src.UniqueID, toNpcId = bnpc.UniqueID, cfg = base.cfg, }; //创建BUff RtBufData maybe = bufMgr.createBuff(ctor); //statistics SelfDescribed des = statistics(maybe, src, bnpc); param.described = des; container.Add(param); } //通知给技能释放者的目标 WarSrcAnimParam SrcParam = new WarSrcAnimParam() { OP = EffectOp.DotHot, ShootAction = skCfg.ShootAction, ShootTime = skCfg.ShootTime, ShootEventTime = skCfg.ShootEventTime, described = toSelf(src.UniqueID), }; container.Add(SrcParam); }
void Awake() { Instance = this; npcMgr = new ServerNpcMgrFactory().getNpcMgr(); npcMgr.Init(); creator = new ServerCreator(this); sufMgr = EffectSufferMgr.instance; npcSkill = SkillCastor.Instance; npcSkill.init(npcMgr); triMgr = TriggerMgr.Instance; triMgr.Init(npcMgr); bufMgr = BuffMgr.Instance; bufMgr.init(npcMgr, triMgr); StartCoroutine(checkClientUIReady()); }