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); }
static public int GetSkillInfoById(IntPtr l) { try { GameFramework.SkillStateInfo self = (GameFramework.SkillStateInfo)checkSelf(l); System.Int32 a1; checkType(l, 2, out a1); var ret = self.GetSkillInfoById(a1); pushValue(l, true); pushValue(l, ret); return(2); } catch (Exception e) { return(error(l, e)); } }