public int preSkill = 0; //保存上次释放的技能id public int ChooseSkill() { int skillid = 0; int usepriority = 0; int level = PlayerData.Instance.BaseAttr.Level; bool ismor = CoreEntry.gMorphMgr.IsMorphing; //是否在变身中 int skillidReal = 0; //普攻技能可以重复释放 foreach (KeyValuePair <int, int> e in m_Actor.m_skillBindsDict) { //跳过冷却中的技能 if (m_Actor.IsInCoolDownTime(e.Value)) { continue; } //等级限制 LuaTable skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(e.Value); if (skillDesc == null || level < skillDesc.Get <int>("needLvl")) { continue; } //变身状态下要使用变身对应的技能 int showtype = skillDesc.Get <int>("showtype"); if ((ismor && showtype != MorphShowType) || (!ismor && showtype == MorphShowType)) { continue; } //配置是否使用特殊技能 if (showtype == SpecialSkillType && !CoreEntry.gAutoAIMgr.Config.UseSpecialSkill) { continue; } //选择优先级最高的技能 int priority = skillDesc.Get <int>("priority"); if (priority == -1) { continue; } if (usepriority == 0 || usepriority < priority) { skillidReal = e.Value; usepriority = priority; //当前技能被卡住强制释放下个技能 if ((preSkill > 0 && preSkill != e.Value) || preSkill <= 0) { skillid = e.Value; } } } if (skillid == 0) { skillid = skillidReal; } preSkill = skillid; return(skillid); }