//获取技能,如果不是实例技能,返回模版技能 public DRSkillData GetSkillData(int nSkillID) { GSkillSpellLogic pSpellLogic = GetSkill(nSkillID); if (pSpellLogic != null) { return(pSpellLogic.m_pSkillData); } DRSkillData pSkillData = GameEntry.DataTable.GetDataTable <DRSkillData>().GetDataRow(nSkillID); if (pSkillData != null && pSkillData.IsTemplateSkill()) { return(pSkillData); } return(null); }
//使用技能 public bool SpellSkill(int nSkillID, GTargetInfo sTarInfo) { if (Owner == null) { return(false); } GSkillSpellLogic pSpellLogic = GetSkill(nSkillID); if (pSpellLogic == null) { DRSkillData skillData = GameEntry.DataTable.GetDataTable <DRSkillData>().GetDataRow(nSkillID); if (skillData != null && skillData.IsTemplateSkill()) { if (AddSkill(nSkillID)) { pSpellLogic = GetSkill(nSkillID); } } } if (pSpellLogic == null) { return(false); } DRSkillData pSkillData = pSpellLogic.m_pSkillData; if (pSkillData == null) { return(false); } if (!CanSpellSkill(pSkillData, sTarInfo)) { return(false); } if (m_pSpellLogic != null) { FinishSkill(); } if (!pSpellLogic.SetFSMState()) { return(false); } //初始化施法逻辑 m_pSpellLogic = pSpellLogic; m_pSpellLogic.Reset(); if (sTarInfo.m_vAimDir == default(Vector3)) { sTarInfo.m_vAimDir = Owner.GetDir(); } m_pSpellLogic.m_TargetInfo = sTarInfo; m_pSpellLogic.ResetSkillAValue(); if (!pSkillData.IsEffectStateCost()) { DoCost(pSkillData); StartCD(pSkillData, true); //todo 允许部分技能在生效时产生消耗 //m_pSpellLogic.SetCosted(); } m_pSpellLogic.ReInit(); sTarInfo = m_pSpellLogic.m_TargetInfo; Log.Debug("Avatar'{0}' Skill'{1}' Spell", Owner.Id, nSkillID); //产生技能事件 if (pSkillData.IsTriggerSkillNotify()) { PushTriggerNotify(nSkillID, sTarInfo.m_nTargetID, (int)eTriggerNotifyType.NotifyType_Skill, (int)eTriggerNotify.TriggerNotify_SkillStart, 0, sTarInfo.m_vSrcPos, sTarInfo.m_vTarPos, sTarInfo.m_vAimDir); } //执行瞬发效果 m_pSpellLogic.Tick(0); return(true); }