GameFramework.AiLogicUtility.NpcFindCanUseSkill C# (CSharp) Method

NpcFindCanUseSkill() static private method

static private NpcFindCanUseSkill ( EntityInfo npc, AiData_General aidata, bool includeManualSkill ) : SkillInfo
npc EntityInfo
aidata AiData_General
includeManualSkill bool
return SkillInfo
        internal static SkillInfo NpcFindCanUseSkill(EntityInfo npc, AiData_General aidata, bool includeManualSkill)
        {
            SkillInfo selectSkill = null;
            SkillStateInfo skStateInfo = npc.GetSkillStateInfo();
            int priority = -1;
            SkillInfo skInfo = null;
            long curTime = TimeUtility.GetLocalMilliseconds();
            if (includeManualSkill && npc.ManualSkillId > 0) {
                skInfo = skStateInfo.GetSkillInfoById(npc.ManualSkillId);
                if (null != skInfo && !skInfo.IsInCd(curTime)) {
                    selectSkill = skInfo;
                }
            }
            if (null == selectSkill) {
                if (npc.AutoSkillIds.Count <= 0)
                    return null;
                int randIndex = Helper.Random.Next(0, npc.AutoSkillIds.Count);
                skInfo = skStateInfo.GetSkillInfoById(npc.AutoSkillIds[randIndex]);
                if (null != skInfo && !skInfo.IsInCd(curTime)) {
                    selectSkill = skInfo;
                } else {
                    for (int i = 0; i < npc.AutoSkillIds.Count; i++) {
                        skInfo = skStateInfo.GetSkillInfoById(npc.AutoSkillIds[i]);
                        if (null != skInfo && !skInfo.IsInCd(curTime) && skInfo.InterruptPriority > priority) {
                            selectSkill = skInfo;
                            priority = skInfo.InterruptPriority;
                        }
                    }
                }
            }
            if (null != selectSkill) {
                aidata.LastUseSkillTime = TimeUtility.GetLocalMilliseconds();
            }
            return selectSkill;
        }

Usage Example

        private void IdleHandler(EntityInfo npc, long deltaTime)
        {
            AiData_Leader aiData = GetAiData(npc);
            SkillInfo     skInfo = AiLogicUtility.NpcFindCanUseSkill(npc, aiData, aiData.IsAutoOperate);

            if (skInfo == null)
            {
                return;
            }
            CharacterRelation relation =
                (skInfo.TargetType == SkillTargetType.Friend ||
                 skInfo.TargetType == SkillTargetType.RandFriend) ?
                CharacterRelation.RELATION_FRIEND :
                CharacterRelation.RELATION_ENEMY;

            EntityInfo attackTarget = AiLogicUtility.GetNearstTargetHelper(npc, aiData.IsAutoOperate ? npc.ViewRange : skInfo.Distance, relation);

            if (attackTarget != null)
            {
                ChangeToState(npc, (int)AiStateId.Combat);
            }
        }
All Usage Examples Of GameFramework.AiLogicUtility::NpcFindCanUseSkill