private static EPetSkillState PetSkillAwake(GameClient client, int petID, List <int> lockPitList, out string result) { result = ""; EPetSkillState result2; if (!PetSkillManager.IsGongNengOpened(client)) { result2 = EPetSkillState.EnoOpen; } else { GoodsData goodsData = DamonMgr.GetDamonGoodsDataByDbID(client, petID); if (goodsData == null || goodsData.GCount <= 0) { result2 = EPetSkillState.EnoPet; } else if (goodsData.Site != 5000) { result2 = EPetSkillState.EnoUsing; } else { List <PetSkillInfo> petSkillList = PetSkillManager.GetPetSkillInfo(goodsData); int diamondNeed = 0; if (lockPitList.Count > 0) { foreach (int lockPit in lockPitList) { if (lockPit > 4) { return(EPetSkillState.EpitWrong); } if (!petSkillList[lockPit - 1].PitIsOpen) { return(EPetSkillState.EpitNoOpen); } } diamondNeed = PetSkillManager.GetPitLockCost(lockPitList.Count); if (diamondNeed > 0 && client.ClientData.UserMoney < diamondNeed) { return(EPetSkillState.EnoDiamond); } } int awakeCount = PetSkillManager.GetUpCount(client); int lingJingNeed = PetSkillManager.GetSkillAwakeCost(awakeCount); long lingjingHave = (long)GameManager.ClientMgr.GetMUMoHeValue(client); if (lingjingHave < (long)lingJingNeed) { result2 = EPetSkillState.EnoLingJing; } else { List <PetSkillInfo> openList = petSkillList.FindAll((PetSkillInfo _g) => _g.PitIsOpen); if (openList == null || openList.Count <= 0) { result2 = EPetSkillState.EpitNoOpen; } else { List <PetSkillInfo> canAwakeSkillList; if (lockPitList != null && lockPitList.Count > 0) { IEnumerable <PetSkillInfo> temp = from info in openList where info.PitIsOpen && lockPitList.IndexOf(info.Pit) < 0 select info; if (!temp.Any <PetSkillInfo>()) { return(EPetSkillState.EnoPitAwake); } canAwakeSkillList = temp.ToList <PetSkillInfo>(); } else { canAwakeSkillList = openList; } IEnumerable <PetSkillInfo> t = from info in canAwakeSkillList where info.PitIsOpen && info.SkillID <= 0 select info; if (t.Any <PetSkillInfo>()) { List <PetSkillInfo> list = t.ToList <PetSkillInfo>(); canAwakeSkillList = list; } int skRand = Global.GetRandomNumber(0, canAwakeSkillList.Count); PetSkillInfo nowAwakeInfo = canAwakeSkillList[skRand]; List <int> canAwakeSkillIDList = new List <int>(); IEnumerable <KeyValuePair <int, PetSkillAwakeInfo> > tt = from p in PetSkillManager._psDic where !(from g in petSkillList select g.SkillID).Contains(p.Value.SkillID) select p; if (!tt.Any <KeyValuePair <int, PetSkillAwakeInfo> >()) { result2 = EPetSkillState.EnoSkillAwake; } else { int nowAwakeSkillID = 0; int seed = tt.Sum((KeyValuePair <int, PetSkillAwakeInfo> _s) => _s.Value.Rate); int skillRand = Global.GetRandomNumber(0, seed); int sum = 0; foreach (KeyValuePair <int, PetSkillAwakeInfo> info3 in tt) { nowAwakeSkillID = info3.Key; int rate = info3.Value.Rate; sum += info3.Value.Rate; if (sum >= skillRand) { break; } } int oldSkillID = nowAwakeInfo.SkillID; nowAwakeInfo.SkillID = nowAwakeSkillID; if (diamondNeed > 0 && !GameManager.ClientMgr.SubUserMoney(client, diamondNeed, "精灵技能领悟", true, true, true, true, DaiBiSySType.None)) { result2 = EPetSkillState.EnoDiamond; } else { GameManager.ClientMgr.ModifyMUMoHeValue(client, -lingJingNeed, "精灵技能领悟", true, true, false); PetSkillManager.ModifyUpCount(client, awakeCount + 1); UpdateGoodsArgs updateGoodsArgs = new UpdateGoodsArgs { RoleID = client.ClientData.RoleID, DbID = petID, WashProps = null }; updateGoodsArgs.ElementhrtsProps = new List <int>(); foreach (PetSkillInfo info2 in petSkillList) { updateGoodsArgs.ElementhrtsProps.Add(info2.PitIsOpen ? 1 : 0); updateGoodsArgs.ElementhrtsProps.Add(info2.Level); updateGoodsArgs.ElementhrtsProps.Add(info2.SkillID); } Global.UpdateGoodsProp(client, goodsData, updateGoodsArgs, true); result = string.Join <int>(",", updateGoodsArgs.ElementhrtsProps.ToArray()); PetSkillManager.UpdateRolePetSkill(client); EventLogManager.AddPetSkillEvent(client, LogRecordType.PetSkill, EPetSkillLog.Awake, new object[] { petID, goodsData.GoodsID, nowAwakeInfo.Pit, oldSkillID, nowAwakeSkillID }); result2 = EPetSkillState.Success; } } } } } } return(result2); }