/// /// 释放技能, pos的第几个技能 /// public void Cast(ServerNPC caster, short pos, Action <MsgParam> Report) { #if DEBUG Utils.Assert(caster == null, "Caster is null when cast skill."); #endif ServerLifeNpc src = caster as ServerLifeNpc; if (src.IsAlive == false) { return; } RtSkData rtSk = src.runSkMd.getRuntimeSkill(pos); /// /// 冷却时间好了吗, 死亡了吗 /// if (rtSk != null && rtSk.canCast) { //进入Skill释放的状态 src.curStatus = src.curStatus.set(NpcStatus.InSkill); IEnumerable <ServerNPC> targets = SelectS.Select(caster, rtSk, Sight.NearSight); EfCastor.Cast(caster, targets, rtSk, Report); } }
void castBuff_Skill(RtBufData rtbf, BuffPhase phase) { container.Clear(); RtSkData skill = null; switch (phase) { case BuffPhase.Start: skill = rtbf.OnStartSkill; break; case BuffPhase.End: skill = rtbf.OnEndSkill; break; case BuffPhase.Cycle: skill = rtbf.onCycleskill; break; } if (skill != null) { ServerNPC castor = BFSelector.locateCastor(rtbf); ServerNPC target = BFSelector.locateTarget(rtbf); List <ServerNPC> Targets = new List <ServerNPC>(); Targets.Add(target); IEnumerable <ServerNPC> itor = Targets.AsEnumerable <ServerNPC>(); EfCastor.Cast(castor, itor, skill, container, false); dispatchMsg(container, skill); } }
public void cast(ServerNPC castor, IEnumerable <ServerNPC> targets, TriggerConfigData triCfg) { #if DEBUG Utils.Assert(castor == null, "TriggerCastor can't cask if castor is null."); Utils.Assert(targets == null, "TriggerCastor can't cask if target is null."); Utils.Assert(triCfg == null, "TriggerCastor can't cask if TriggerConfigData is null."); #endif RtSkData skill = new RtSkData(triCfg.SkillID, -1); targets = filtor(targets, triCfg); container.Clear(); EfCastor.Cast(castor, targets, skill, container, false); dispatchMsg(container, skill); }