using Core.Utility; using Excel2Json; using Fort23.UTool; namespace GameLogic.Hero { public class SkillInfo { public CombatHeroInfo heroInfo; public SkillConfig skillConfig; /// /// 是否解锁 /// public bool isUnLock; public SkillUpConfig skillUpConfig; private SkillData _skillData; public void Init(SkillData skillData, SkillConfig skillConfig) { this._skillData = skillData; this.skillConfig = skillConfig; heroInfo = skillData.heroInfo; isUnLock = false; if (skillConfig.ID == GlobalParam.Normal_Attack_Skill_Group_ID) { isUnLock = true; } else { //整体可能有点绕,后面再看优化不 //取技能ID的后两位,后两位是技能解锁表SkillUpConfig的ID, 取这个ID来判断,这个技能是否解锁,以及还差多少差解锁 int skillUpID = skillConfig.ID % 100; skillUpConfig = ConfigComponent.Instance.Get(skillUpID); //取个位 int gw = skillUpID % 10; int skillUpID1 = -1; //当个位>1时,需要额外判断一下,技能的1级是否已经解锁(可能1级是星级解锁),比如 21,31,,41。 //避免出现,技能是5星解锁解锁1级,200级解锁2级,但玩家现在4星,201级,就不该解锁2级,因为星级不够 if (gw > 1) { //技能1级的解锁ID,例如: 33 - 3 + 1 = 31, 31就是技能1级的解锁条件id skillUpID1 = skillUpID - gw + 1; } //等级解锁 if (skillUpConfig.upType == 1) { SkillUpConfig skillUpConfig1 = new SkillUpConfig(); if (skillUpID1 > 0) { skillUpConfig1 = ConfigComponent.Instance.Get(skillUpID1); } //如果技能的第一级需要星级解锁,需额外判断一下星级是否达到 bool isStarOk = skillUpConfig1.upType != 2 || heroInfo.star.Value > skillUpConfig1.upValue; if (heroInfo.level.Value >= skillUpConfig.upValue && isStarOk) { isUnLock = true; } } //星级解锁 else if (skillUpConfig.upType == 2) { if (heroInfo.star.Value >= skillUpConfig.upValue) { isUnLock = true; } } } } } }