示例#1
0
        private static EPetSkillState PetSkillUp(GameClient client, int petID, int pit)
        {
            EPetSkillState result;

            if (!PetSkillManager.IsGongNengOpened(client))
            {
                result = EPetSkillState.EnoOpen;
            }
            else
            {
                GoodsData goodsData = DamonMgr.GetDamonGoodsDataByDbID(client, petID);
                if (goodsData == null || goodsData.GCount <= 0)
                {
                    result = EPetSkillState.EnoPet;
                }
                else if (goodsData.Site != 5000)
                {
                    result = EPetSkillState.EnoUsing;
                }
                else if (pit < 1 || pit > 4)
                {
                    result = EPetSkillState.EpitWrong;
                }
                else
                {
                    List <PetSkillInfo> petSkillList = PetSkillManager.GetPetSkillInfo(goodsData);
                    PetSkillInfo        skillInfo    = petSkillList.Find((PetSkillInfo _g) => _g.Pit == pit);
                    if (!skillInfo.PitIsOpen)
                    {
                        result = EPetSkillState.EpitNoOpen;
                    }
                    else if (skillInfo.SkillID <= 0)
                    {
                        result = EPetSkillState.EpitSkillNull;
                    }
                    else
                    {
                        int maxLevel = PetSkillManager.GetPsUpMaxLevel();
                        if (skillInfo.Level >= maxLevel)
                        {
                            result = EPetSkillState.ElevelMax;
                        }
                        else
                        {
                            int  oldLevel     = skillInfo.Level;
                            int  nextLevel    = skillInfo.Level + 1;
                            int  lingJingNeed = (int)PetSkillManager.GetPsUpCost(nextLevel);
                            long lingjingHave = (long)GameManager.ClientMgr.GetMUMoHeValue(client);
                            if (lingjingHave < (long)lingJingNeed)
                            {
                                result = EPetSkillState.EnoLingJing;
                            }
                            else
                            {
                                GameManager.ClientMgr.ModifyMUMoHeValue(client, -lingJingNeed, "精灵技能升级", true, true, false);
                                skillInfo.Level = nextLevel;
                                UpdateGoodsArgs updateGoodsArgs = new UpdateGoodsArgs
                                {
                                    RoleID    = client.ClientData.RoleID,
                                    DbID      = petID,
                                    WashProps = null
                                };
                                updateGoodsArgs.ElementhrtsProps = new List <int>();
                                foreach (PetSkillInfo info in petSkillList)
                                {
                                    updateGoodsArgs.ElementhrtsProps.Add(info.PitIsOpen ? 1 : 0);
                                    updateGoodsArgs.ElementhrtsProps.Add(info.Level);
                                    updateGoodsArgs.ElementhrtsProps.Add(info.SkillID);
                                }
                                Global.UpdateGoodsProp(client, goodsData, updateGoodsArgs, true);
                                PetSkillManager.UpdateRolePetSkill(client);
                                EventLogManager.AddPetSkillEvent(client, LogRecordType.PetSkill, EPetSkillLog.Up, new object[]
                                {
                                    petID,
                                    goodsData.GoodsID,
                                    pit,
                                    oldLevel,
                                    nextLevel
                                });
                                result = EPetSkillState.Success;
                            }
                        }
                    }
                }
            }
            return(result);
        }
示例#2
0
        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);
        }
示例#3
0
        private static EPetSkillState PetSkillInherit(GameClient client, int srcPetID, int tarPetID, int userMoney, out string outProps)
        {
            outProps = "";
            EPetSkillState result;

            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System2Dot6))
            {
                result = EPetSkillState.EnoOpen;
            }
            else if (!PetSkillManager.IsGongNengOpened(client))
            {
                result = EPetSkillState.EnoOpen;
            }
            else
            {
                GoodsData srcGoodsData = DamonMgr.GetDamonGoodsDataByDbID(client, srcPetID);
                GoodsData tarGoodsData = DamonMgr.GetDamonGoodsDataByDbID(client, tarPetID);
                if (null == srcGoodsData)
                {
                    srcGoodsData = Global.GetGoodsByDbID(client, srcPetID);
                }
                else if (srcGoodsData.Site != 5000)
                {
                    return(EPetSkillState.EnoUsing);
                }
                if (null == tarGoodsData)
                {
                    tarGoodsData = Global.GetGoodsByDbID(client, tarPetID);
                }
                else if (tarGoodsData.Site != 5000)
                {
                    return(EPetSkillState.EnoUsing);
                }
                if (srcGoodsData == null || srcGoodsData.GCount <= 0 || tarGoodsData == null || tarGoodsData.GCount <= 0)
                {
                    result = EPetSkillState.EnoPet;
                }
                else
                {
                    if (1 == userMoney)
                    {
                        if (client.ClientData.UserMoney < PetSkillManager.JingLingChuanChengXiaoHaoZhuanShi && !HuanLeDaiBiManager.GetInstance().HuanledaibiEnough(client, PetSkillManager.JingLingChuanChengXiaoHaoZhuanShi))
                        {
                            return(EPetSkillState.EnoDiamond);
                        }
                    }
                    else if (Global.GetTotalBindTongQianAndTongQianVal(client) < PetSkillManager.JingLingChuanChengXiaoHaoJinBi)
                    {
                        return(EPetSkillState.EnoGold);
                    }
                    List <PetSkillInfo> srcSkillList = PetSkillManager.GetPetSkillInfo(srcGoodsData);
                    List <PetSkillInfo> tarSkillList = PetSkillManager.GetPetSkillInfo(tarGoodsData);
                    int pitLoop;
                    for (pitLoop = 1; pitLoop < 4; pitLoop++)
                    {
                        PetSkillInfo srcSkill = srcSkillList.Find((PetSkillInfo _g) => _g.Pit == pitLoop);
                        PetSkillInfo tarSkill = tarSkillList.Find((PetSkillInfo _g) => _g.Pit == pitLoop);
                        if (srcSkill == null || null == tarSkill)
                        {
                            return(EPetSkillState.EpitWrong);
                        }
                        if (srcSkill.PitIsOpen && !tarSkill.PitIsOpen)
                        {
                            return(EPetSkillState.EpitWrong);
                        }
                    }
                    if (1 == userMoney)
                    {
                        if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, PetSkillManager.JingLingChuanChengXiaoHaoZhuanShi, "精灵技能传承", true, true, false, DaiBiSySType.JingLingJiNengChuanCheng))
                        {
                            return(EPetSkillState.EnoDiamond);
                        }
                    }
                    else if (!Global.SubBindTongQianAndTongQian(client, PetSkillManager.JingLingChuanChengXiaoHaoJinBi, "精灵技能传承"))
                    {
                        return(EPetSkillState.EnoGold);
                    }
                    int random = Global.GetRandomNumber(1, 101);
                    if (random > PetSkillManager.JingLingChuanChengGoodsRate)
                    {
                        result = EPetSkillState.EnoInheritFail;
                    }
                    else
                    {
                        long            returnMoHe   = PetSkillManager.DelGoodsReturnLingJing(tarGoodsData);
                        UpdateGoodsArgs tarGoodsArgs = new UpdateGoodsArgs
                        {
                            RoleID    = client.ClientData.RoleID,
                            DbID      = tarPetID,
                            WashProps = null
                        };
                        tarGoodsArgs.ElementhrtsProps = new List <int>();
                        for (int loop = 0; loop < tarSkillList.Count; loop++)
                        {
                            PetSkillInfo info = (loop < srcSkillList.Count) ? srcSkillList[loop] : tarSkillList[loop];
                            tarGoodsArgs.ElementhrtsProps.Add(info.PitIsOpen ? 1 : 0);
                            tarGoodsArgs.ElementhrtsProps.Add(info.Level);
                            tarGoodsArgs.ElementhrtsProps.Add((loop < srcSkillList.Count) ? info.SkillID : 0);
                        }
                        Global.UpdateGoodsProp(client, tarGoodsData, tarGoodsArgs, true);
                        UpdateGoodsArgs srcGoodsArgs = new UpdateGoodsArgs
                        {
                            RoleID    = client.ClientData.RoleID,
                            DbID      = srcPetID,
                            WashProps = null
                        };
                        srcGoodsArgs.ElementhrtsProps = new List <int>();
                        foreach (PetSkillInfo info in srcSkillList)
                        {
                            srcGoodsArgs.ElementhrtsProps.Add(info.PitIsOpen ? 1 : 0);
                            srcGoodsArgs.ElementhrtsProps.Add(1);
                            srcGoodsArgs.ElementhrtsProps.Add(0);
                        }
                        Global.UpdateGoodsProp(client, srcGoodsData, srcGoodsArgs, true);
                        GameManager.ClientMgr.ModifyMUMoHeValue(client, (int)returnMoHe, "精灵技能传承", true, true, false);
                        if (srcGoodsData.Using > 0 || tarGoodsData.Using > 0)
                        {
                            PetSkillManager.UpdateRolePetSkill(client);
                        }
                        outProps = string.Format("{0}:{1}", string.Join <int>(",", srcGoodsArgs.ElementhrtsProps.ToArray()), string.Join <int>(",", tarGoodsArgs.ElementhrtsProps.ToArray()));
                        result   = EPetSkillState.Success;
                    }
                }
            }
            return(result);
        }