コード例 #1
0
        //获取技能,如果不是实例技能,返回模版技能
        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);
        }
コード例 #2
0
        //使用技能
        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);
        }