private bool ProcessCmdPetSkillAwakeCost(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         if (!CheckHelper.CheckCmdLength(client, nID, cmdParams, 1))
         {
             return(false);
         }
         int result = PetSkillManager.GetSkillAwakeCost(PetSkillManager.GetUpCount(client));
         client.sendCmd <int>(1039, result, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
        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);
        }