예제 #1
0
        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);
        }