示例#1
0
        public bool processCmdEx(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            bool result;

            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Building, false))
            {
                GameManager.ClientMgr.NotifyImportantMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, StringUtil.substitute(GLang.GetLang(3, new object[0]), new object[0]), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 0);
                result = true;
            }
            else
            {
                switch (nID)
                {
                case 1080:
                    result = this.ProcessShenJiAddEffectCmd(client, nID, bytes, cmdParams);
                    break;

                case 1081:
                    result = this.ProcessShenJiAddExpCmd(client, nID, bytes, cmdParams);
                    break;

                case 1082:
                    result = this.ProcessShenJiWashCmd(client, nID, bytes, cmdParams);
                    break;

                default:
                    result = true;
                    break;
                }
            }
            return(result);
        }
示例#2
0
 public bool ProcessJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
         if (sceneType != SceneUIClasses.Normal)
         {
             client.sendCmd(nID, "-21".ToString(), false);
             return(true);
         }
         if (!this.IsGongNengOpened(client, true))
         {
             client.sendCmd(nID, "-2001".ToString(), false);
             return(true);
         }
         if (client.ClientData.SignUpGameType != 0)
         {
             client.sendCmd(nID, "-2002".ToString(), false);
             return(true);
         }
         if (KuaFuManager.getInstance().IsInCannotJoinKuaFuCopyTime(client))
         {
             client.sendCmd(nID, "-2004".ToString(), false);
             return(true);
         }
         SystemXmlItem systemFuBenItem = null;
         if (!GameManager.systemFuBenMgr.SystemXmlItemDict.TryGetValue(this._runtimeData.CopyID, out systemFuBenItem))
         {
             client.sendCmd(nID, "-3".ToString(), false);
             return(true);
         }
         int minLevel      = systemFuBenItem.GetIntValue("MinLevel", -1);
         int minZhuanSheng = systemFuBenItem.GetIntValue("MinZhuanSheng", -1);
         int levelLimit    = minZhuanSheng * 100 + minLevel;
         if (client.ClientData.ChangeLifeCount * 100 + client.ClientData.Level < levelLimit)
         {
             client.sendCmd(nID, "-19".ToString(), false);
             return(true);
         }
         int oldCount = this.GetElementWarCount(client);
         if (oldCount >= systemFuBenItem.GetIntValue("FinishNumber", -1))
         {
             client.sendCmd(nID, "-16".ToString(), false);
             return(true);
         }
         int result = 0;
         if (result > 0)
         {
             client.ClientData.SignUpGameType = 4;
             GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, 4);
         }
         client.sendCmd <int>(nID, result, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
示例#3
0
        /// <summary>
        /// 判断功能是否开启
        /// </summary>
        public static bool IsGongNengOpened(GameClient client, bool hint = false)
        {
            if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.Fund))
            {
                return(false);
            }

            return(GlobalNew.IsGongNengOpened(client, GongNengIDs.Fund, hint));
        }
示例#4
0
        public bool ProcessHuanYingSiYuanEnterRespondCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                if (!IsGongNengOpened(client))
                {
                    client.sendCmd(nID, StdErrorCode.Error_Success_No_Info);
                    return(true);
                }

                int result = StdErrorCode.Error_Success;
                int gropuIndex;
                int flag = Global.SafeConvertToInt32(cmdParams[1]);
                lock (RuntimeData.Mutex)
                {
                    if (!RuntimeData.Range2GroupIndexDict.TryGetValue(new RangeKey(Global.GetUnionLevel(client)), out gropuIndex))
                    {
                        result = StdErrorCode.Error_Operation_Denied;
                    }
                }

                client.ClientData.SignUpGameType = (int)GameTypes.None;
                if (result >= 0)
                {
                    if (flag > 0)
                    {
                        result = HuanYingSiYuanClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame);
                        if (result >= 0)
                        {
                            GlobalNew.RecordSwitchKuaFuServerLog(client);
                            client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client));
                        }
                        else
                        {
                            Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                            client.sendCmd(nID, result);
                            client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_DEQUEUE, StdErrorCode.Error_Success_No_Info);
                        }
                    }
                    else
                    {
                        HuanYingSiYuanClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.None);
                        Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                        client.sendCmd(nID, StdErrorCode.Error_Success_No_Info);
                        client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_DEQUEUE, StdErrorCode.Error_Success_No_Info);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
示例#5
0
        //登录时处理采集数据
        public static void InitRoleDailyCaiJiData(GameClient client, bool isLogin, bool isNewday)
        {
            //是否开启了水晶幻境采集
            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect))
            {
                return;
            }

            //登录时需要取得上次采集的日期和次数,在线跨天就不需要取
            if (isLogin)
            {
                client.ClientData.DailyCrystalCollectNum = Global.GetRoleParamsInt32FromDB(client, RoleParamName.CaiJiCrystalNum);
                client.ClientData.CrystalCollectDayID    = Global.GetRoleParamsInt32FromDB(client, RoleParamName.CaiJiCrystalDayID);
            }

            bool bClear = false;

            //是否跨天了(今天第一次登录或者在线跨天)
            if (isNewday)
            {
                //昨天或昨天之前是否开启了水晶幻境采集
                if (client.ClientData.DailyCrystalCollectNum >= 0 && client.ClientData.CrystalCollectDayID > 0)
                {
                    //这个数据是水晶幻境资源找回用的
                    client.ClientData.OldCrystalCollectData        = new OldCaiJiData();
                    client.ClientData.OldCrystalCollectData.OldDay = client.ClientData.CrystalCollectDayID;
                    client.ClientData.OldCrystalCollectData.OldNum = client.ClientData.DailyCrystalCollectNum;
                }

                //跨天清零次数
                bClear = true;
            }
            else if (0 == client.ClientData.CrystalCollectDayID)
            {
                //之前没保存过采集次数,现在需要保存一下
                bClear = true;
            }

            if (bClear)
            {
                //清次数,重设日期
                client.ClientData.DailyCrystalCollectNum = 0;
                client.ClientData.CrystalCollectDayID    = (int)DateTime.Now.DayOfYear;

                Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.CaiJiCrystalNum, 0, true);
                Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.CaiJiCrystalDayID, client.ClientData.CrystalCollectDayID, true);

                //通知玩家水晶幻境的采集次数清零
                if (Global.GetMapSceneType(client.ClientData.MapCode) == SceneUIClasses.ShuiJingHuanJing)
                {
                    NotifyCollectLastNum(client, 0, DailyNum);
                }
            }

            client._IconStateMgr.CheckCaiJiState(client);
        }
示例#6
0
        /// <summary>
        /// 罗兰城战攻防竞价申请指令处理
        /// </summary>
        /// <param name="client"></param>
        /// <param name="nID"></param>
        /// <param name="bytes"></param>
        /// <param name="cmdParams"></param>
        /// <returns></returns>
        public bool ProcessTianTiJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                SceneUIClasses sceneType = Global.GetMapSceneType(client.ClientData.MapCode);
                if (sceneType != SceneUIClasses.Normal)
                {
                    client.sendCmd(nID, StdErrorCode.Error_Denied_In_Current_Map);
                    return(true);
                }

                if (!IsGongNengOpened(client, true))
                {
                    client.sendCmd(nID, StdErrorCode.Error_Not_In_valid_Time);
                    return(true);
                }

                int      result     = StdErrorCode.Error_Not_In_valid_Time;
                int      gropuIndex = client.ClientData.TianTiData.DuanWeiId;
                TimeSpan time       = TimeUtil.NowDateTime().TimeOfDay;
                lock (RuntimeData.Mutex)
                {
                    for (int i = 0; i < RuntimeData.TimePoints.Count - 1; i += 2)
                    {
                        if (time >= RuntimeData.TimePoints[i] && time < RuntimeData.TimePoints[i + 1])
                        {
                            result = StdErrorCode.Error_Success;
                            break;
                        }
                    }
                }

                if (result >= 0)
                {
                    result = TianTiClient.getInstance().TianTiSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID,
                                                                     (int)GameTypes.TianTi, gropuIndex, client.ClientData.CombatForce);

                    if (result > 0)
                    {
                        client.ClientData.SignUpGameType = (int)GameTypes.TianTi;
                        GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 1, 0, 0, 0, (int)GameTypes.TianTi);
                    }
                }

                //发送结果给客户端
                client.sendCmd(nID, result);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
示例#7
0
        public void KuaFuSwitchServer(GameClient client)
        {
            long nowTicks = TimeUtil.NOW();

            if (nowTicks >= client.KuaFuSwitchServerTicks + 5000L)
            {
                client.KuaFuSwitchServerTicks = nowTicks;
                GlobalNew.RecordSwitchKuaFuServerLog(client);
                client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false);
            }
        }
示例#8
0
 public static bool HasLeftnum(GameClient client)
 {
     if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect))
     {
         return(false);
     }
     else
     {
         return(client.ClientData.DailyCrystalCollectNum < DailyNum);
     }
 }
示例#9
0
 public static void InitRoleShenQiData(GameClient client)
 {
     client.ClientData.ShenLiJingHuaPoints = Global.GetRoleParamsInt32FromDB(client, "10157");
     if (GlobalNew.IsGongNengOpened(client, GongNengIDs.ShenQi, false))
     {
         client.ClientData.shenQiData = ShenQiManager.GetShenQiData(client);
         ShenQiManager.getInstance().UpdateRoleShenQiProps(client);
         ShenQiManager.getInstance().UpdateRoleTouhgnessProps(client);
         ShenQiManager.getInstance().UpdateRoleGodProps(client);
     }
 }
示例#10
0
 public void AlchemyRollBack(GameClient client, string rollbackType)
 {
     if (GlobalNew.IsGongNengOpened(client, GongNengIDs.Alchemy, false))
     {
         if (!string.IsNullOrEmpty(rollbackType))
         {
             string[] valueFields = rollbackType.Split(new char[]
             {
                 ','
             });
             if (valueFields.Length == 2)
             {
                 int costType = Global.SafeConvertToInt32(valueFields[0]);
                 int useNum   = Global.SafeConvertToInt32(valueFields[1]);
                 Dictionary <int, AlchemyConfigData> tempAlchemyConfig = null;
                 lock (this.ConfigMutex)
                 {
                     tempAlchemyConfig = this.AlchemyConfig;
                 }
                 AlchemyConfigData alchemyConfig = null;
                 if (!tempAlchemyConfig.TryGetValue(costType, out alchemyConfig) || useNum < alchemyConfig.Unit)
                 {
                     LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true);
                     client.ClientData.AlchemyInfo.rollbackType = "";
                     this.AlchemyRollBackOffline(client.ClientData.RoleID, "");
                 }
                 else
                 {
                     useNum -= useNum % alchemyConfig.Unit;
                     int element  = useNum / alchemyConfig.Unit * alchemyConfig.Element;
                     int histCost = 0;
                     client.ClientData.AlchemyInfo.HistCost.TryGetValue(costType, out histCost);
                     if (histCost < useNum || client.ClientData.AlchemyInfo.BaseData.Element < element)
                     {
                         LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true);
                         client.ClientData.AlchemyInfo.rollbackType = "";
                         this.AlchemyRollBackOffline(client.ClientData.RoleID, "");
                     }
                     else
                     {
                         GameManager.ClientMgr.ModifyAlchemyElementValue(client, -element, "GM命令-alchemy", false, false);
                         this.ModifyAddElementCost(client, costType, useNum, true);
                         client.ClientData.AlchemyInfo.HistCost[costType] = histCost - useNum;
                         this.UpdateAlchemyDataDB(client);
                         client.ClientData.AlchemyInfo.rollbackType = "";
                         this.AlchemyRollBackOffline(client.ClientData.RoleID, "");
                         LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 成功!", client.ClientData.RoleID, rollbackType), null, true);
                     }
                 }
             }
         }
     }
 }
示例#11
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddHuanYingSiYuanCopyScenes(GameClient client, CopyMap copyMap)
        {
            if (copyMap.MapCode == RuntimeData.MapCode)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (Mutex)
                {
                    HuanYingSiYuanScene huanYingSiYuanScene = null;
                    if (!HuanYingSiYuanSceneDict.TryGetValue(fuBenSeqId, out huanYingSiYuanScene))
                    {
                        huanYingSiYuanScene         = new HuanYingSiYuanScene();
                        huanYingSiYuanScene.CopyMap = copyMap;
                        huanYingSiYuanScene.CleanAllInfo();
                        huanYingSiYuanScene.GameId         = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                        huanYingSiYuanScene.m_nMapCode     = mapCode;
                        huanYingSiYuanScene.CopyMapId      = copyMap.CopyMapID;
                        huanYingSiYuanScene.FuBenSeqId     = fuBenSeqId;
                        huanYingSiYuanScene.m_nPlarerCount = 1;

                        HuanYingSiYuanSceneDict[fuBenSeqId] = huanYingSiYuanScene;
                    }
                    else
                    {
                        huanYingSiYuanScene.m_nPlarerCount++;
                    }

                    if (client.ClientData.BattleWhichSide == 1)
                    {
                        huanYingSiYuanScene.ScoreInfoData.Count1++;
                    }
                    else
                    {
                        huanYingSiYuanScene.ScoreInfoData.Count2++;
                    }

                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + RuntimeData.TotalSecs * TimeUtil.SECOND);
                    GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_HYSY_SCORE_INFO, huanYingSiYuanScene.ScoreInfoData, huanYingSiYuanScene.CopyMap);
                }

                client.SceneContextData2 = new HuanYingSiYuanLianShaContextData();

                //更新状态
                HuanYingSiYuanClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame);
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.HuanYingSiYuan);

                return(true);
            }

            return(false);
        }
示例#12
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddTianTiCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.TianTi)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (RuntimeData.Mutex)
                {
                    TianTiScene tianTiScene = null;
                    if (!TianTiSceneDict.TryGetValue(fuBenSeqId, out tianTiScene))
                    {
                        tianTiScene         = new TianTiScene();
                        tianTiScene.CopyMap = copyMap;
                        tianTiScene.CleanAllInfo();
                        tianTiScene.GameId         = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                        tianTiScene.m_nMapCode     = mapCode;
                        tianTiScene.CopyMapId      = copyMap.CopyMapID;
                        tianTiScene.FuBenSeqId     = fuBenSeqId;
                        tianTiScene.m_nPlarerCount = 1;

                        TianTiSceneDict[fuBenSeqId] = tianTiScene;
                    }
                    else
                    {
                        tianTiScene.m_nPlarerCount++;
                    }

                    copyMap.IsKuaFuCopy = true;
                    SaveClientBattleSide(tianTiScene, client);
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + RuntimeData.TotalSecs * TimeUtil.SECOND);

                    if (tianTiScene.SuccessSide == -1)
                    {
                        client.sendCmd((int)TCPGameServerCmds.CMD_SPR_TIANTI_AWARD, new TianTiAwardsData()
                        {
                            Success = -1
                        });
                    }
                }

                //更新状态
                TianTiClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame);
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)GameTypes.TianTi);

                return(true);
            }

            return(false);
        }
示例#13
0
        /// <summary>
        /// 判断功能是否开启
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        public bool IsGongNengOpened(GameClient client, bool hint = false)
        {
            if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.TianTi))
            {
                return(false);
            }

            // 如果1.6的功能没开放
            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6))
            {
                return(false);
            }

            return(GlobalNew.IsGongNengOpened(client, GongNengIDs.TianTi, hint));
        }
示例#14
0
        /// <summary>
        /// 判断功能是否开启
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        public bool IsGongNengOpened(GameClient client, bool hint = false)
        {
            // 如果1.7的功能没开放
            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7))
            {
                return(false);
            }

            if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.YongZheZhanChang))
            {
                return(false);
            }

            return(GlobalNew.IsGongNengOpened(client, GongNengIDs.YongZheZhanChang, hint));
        }
示例#15
0
        /// <summary>
        /// 判断功能是否开启
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        public bool IsGongNengOpened(GameClient client, bool hint = false)
        {
            if (!GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.HuanYingSiYuan))
            {
                return(false);
            }

            // 如果1.4.1的功能没开放
            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1))
            {
                return(false);
            }

            return(GlobalNew.IsGongNengOpened(client, GongNengIDs.HuanYingSiYuan, hint));
        }
示例#16
0
        public static ShenQiData GetShenQiData(GameClient client)
        {
            ShenQiData result;

            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.ShenQi, false))
            {
                result = new ShenQiData
                {
                    UpResultType = -1
                };
            }
            else
            {
                ShenQiData data = client.ClientData.shenQiData;
                try
                {
                    if (null == data)
                    {
                        data = new ShenQiData();
                        List <int> props = Global.GetRoleParamsIntListFromDB(client, "36");
                        if (props == null || props.Count < 5)
                        {
                            props = new List <int>();
                            for (int i = 0; i < 5; i++)
                            {
                                props.Add(0);
                            }
                            props[0] = 1;
                            Global.SaveRoleParamsIntListToDB(client, props, "36", true);
                        }
                        data.ShenQiID                = props[0];
                        data.LifeAdd                 = props[1];
                        data.AttackAdd               = props[2];
                        data.DefenseAdd              = props[3];
                        data.ToughnessAdd            = props[4];
                        client.ClientData.shenQiData = data;
                    }
                    data.ShenLiJingHuaLeft = client.ClientData.ShenLiJingHuaPoints;
                    data.UpResultType      = -100;
                }
                catch (Exception ex)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("ShenQi :: 获取角色神器数据错误 ex:{0}", ex.Message), null, true);
                }
                result = data;
            }
            return(result);
        }
 public GoodsData GetHuanLeDaiBi(int GCount = 0)
 {
     try
     {
         string    str  = GameManager.systemParamsList.GetParamValueByName("HuanLeDaiBi");
         GoodsData data = GlobalNew.ParseGoodsData(str);
         data.GCount = GCount;
         return(data);
     }
     catch (Exception ex)
     {
         LogManager.WriteLog(LogTypes.Fatal, "欢乐代币格式不对", null, true);
         LogManager.WriteLog(LogTypes.Exception, string.Format("[ljl_欢乐代币]{0}", ex.ToString()), null, true);
     }
     return(null);
 }
示例#18
0
        public bool ProcessTianTiEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                if (!IsGongNengOpened(client))
                {
                    client.sendCmd(nID, StdErrorCode.Error_Success_No_Info);
                    return(true);
                }

                int result = StdErrorCode.Error_Success;
                int flag   = Global.SafeConvertToInt32(cmdParams[1]);
                if (flag > 0)
                {
                    result = TianTiClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame);
                    if (result >= 0)
                    {
                        GlobalNew.RecordSwitchKuaFuServerLog(client);
                        client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client));
                    }
                    else
                    {
                        flag = 0;
                    }
                }
                else
                {
                    //TianTiClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.None);
                }

                client.ClientData.SignUpGameType = (int)GameTypes.None;
                if (flag <= 0)
                {
                    Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                    client.sendCmd((int)TCPGameServerCmds.CMD_SPR_TIANTI_QUIT, StdErrorCode.Error_Success_No_Info);
                }

                //client.sendCmd(nID, result);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
示例#19
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddCopyScene(GameClient client, CopyMap copyMap)
        {
            if (copyMap.MapCode == _runtimeData.MapID)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (_mutex)
                {
                    CopyWolfSceneInfo newScene = null;
                    if (!_runtimeData.SceneDict.TryGetValue(fuBenSeqId, out newScene))
                    {
                        newScene             = new CopyWolfSceneInfo();
                        newScene.CopyMapInfo = copyMap;
                        newScene.CleanAllInfo();
                        newScene.GameId      = Global.GetClientKuaFuServerLoginData(client).GameId;
                        newScene.MapID       = mapCode;
                        newScene.CopyID      = copyMap.CopyMapID;
                        newScene.FuBenSeqId  = fuBenSeqId;
                        newScene.PlayerCount = 1;

                        _runtimeData.SceneDict[fuBenSeqId] = newScene;
                    }
                    else
                    {
                        newScene.PlayerCount++;
                    }

                    client.ClientData.BattleWhichSide = _runtimeData.CampID;
                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + _runtimeData.TotalSecs * TimeUtil.SECOND);
                    GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_COPY_WOLF_SCORE_INFO, newScene.ScoreData, newScene.CopyMapInfo);
                }

                //更新状态
                // ElementWarClient.getInstance().GameFuBenRoleChangeState(client.ClientData.RoleID, (int)KuaFuRoleStates.StartGame);
                // 开始游戏统计
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, (int)_gameType);

                return(true);
            }

            return(false);
        }
示例#20
0
        public bool AddCopyScene(GameClient client, CopyMap copyMap)
        {
            bool result;

            if (copyMap.MapCode == this._runtimeData.MapID)
            {
                int fuBenSeqId = copyMap.FuBenSeqID;
                int mapCode    = copyMap.MapCode;
                lock (CopyWolfManager._mutex)
                {
                    CopyWolfSceneInfo newScene = null;
                    if (!this._runtimeData.SceneDict.TryGetValue(fuBenSeqId, out newScene))
                    {
                        newScene             = new CopyWolfSceneInfo();
                        newScene.CopyMapInfo = copyMap;
                        newScene.CleanAllInfo();
                        newScene.GameId      = Global.GetClientKuaFuServerLoginData(client).GameId;
                        newScene.MapID       = mapCode;
                        newScene.CopyID      = copyMap.CopyMapID;
                        newScene.FuBenSeqId  = fuBenSeqId;
                        newScene.PlayerCount = 1;
                        this._runtimeData.SceneDict[fuBenSeqId] = newScene;
                    }
                    else
                    {
                        newScene.PlayerCount++;
                    }
                    client.ClientData.BattleWhichSide = this._runtimeData.CampID;
                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(this._runtimeData.TotalSecs * 1000));
                    GameManager.ClientMgr.BroadSpecialCopyMapMessage <CopyWolfScoreData>(1025, newScene.ScoreData, newScene.CopyMapInfo);
                }
                GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 1, 0, 0, 11);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
示例#21
0
 public static void InitRoleDailyCaiJiData(GameClient client, bool isLogin, bool isNewday)
 {
     if (GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect, false))
     {
         if (isLogin)
         {
             client.ClientData.DailyCrystalCollectNum = Global.GetRoleParamsInt32FromDB(client, "CaiJiCrystalNum");
             client.ClientData.CrystalCollectDayID    = Global.GetRoleParamsInt32FromDB(client, "CaiJiCrystalDayID");
         }
         bool bClear = false;
         if (isNewday)
         {
             if (client.ClientData.DailyCrystalCollectNum >= 0 && client.ClientData.CrystalCollectDayID > 0)
             {
                 client.ClientData.OldCrystalCollectData        = new OldCaiJiData();
                 client.ClientData.OldCrystalCollectData.OldDay = client.ClientData.CrystalCollectDayID;
                 client.ClientData.OldCrystalCollectData.OldNum = client.ClientData.DailyCrystalCollectNum;
             }
             bClear = true;
         }
         else if (0 == client.ClientData.CrystalCollectDayID)
         {
             bClear = true;
         }
         if (bClear)
         {
             client.ClientData.DailyCrystalCollectNum = 0;
             client.ClientData.CrystalCollectDayID    = TimeUtil.NowDateTime().DayOfYear;
             Global.SaveRoleParamsInt32ValueToDB(client, "CaiJiCrystalNum", 0, true);
             Global.SaveRoleParamsInt32ValueToDB(client, "CaiJiCrystalDayID", client.ClientData.CrystalCollectDayID, true);
             if (Global.GetMapSceneType(client.ClientData.MapCode) == SceneUIClasses.ShuiJingHuanJing)
             {
                 CaiJiLogic.NotifyCollectLastNum(client, 0, CaiJiLogic.DailyNum);
             }
         }
         client._IconStateMgr.CheckCaiJiState(client);
     }
 }
示例#22
0
        /// <summary>
        /// 配置的功能是否开启
        /// </summary>
        /// <param name="client"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool IsGongNengOpened(GameClient client, GongNengIDs id, bool hint = false)
        {
            SystemXmlItem xmlItem = null;

            if (GameManager.SystemSystemOpen.SystemXmlItemDict.TryGetValue((int)id, out xmlItem))
            {
                int trigger = xmlItem.GetIntValue("TriggerCondition");
                // 等级
                if (trigger == 1)
                {
                    int[] paramArray = xmlItem.GetIntArrayValue("TimeParameters");
                    if (paramArray.Length == 2)
                    {
                        if (Global.GetUnionLevel(paramArray[0], paramArray[1]) > Global.GetUnionLevel(client))
                        {
                            if (hint)
                            {
                                string msg = string.Format(Global.GetLang("开启此功能需要达到【{0}】转【{1}】级"), paramArray[0], paramArray[1]);
                                GameManager.ClientMgr.NotifyHintMsg(client, msg);
                            }

                            return(false);
                        }
                    }
                    return(true);
                }
                // 完成指定任务
                else if (trigger == 7)
                {
                    int taskId = xmlItem.GetIntValue("TimeParameters");
                    if (client.ClientData.MainTaskID < taskId)
                    {
                        if (hint)
                        {
                            string msg = string.Format(Global.GetLang("开启此功能需要完成主线任务【{0}】"), GlobalNew.GetTaskName(taskId));
                            GameManager.ClientMgr.NotifyHintMsg(client, msg);
                        }

                        return(false);
                    }
                    return(true);
                }
                // 羽毛阶数
                else if (trigger == 14)
                {
                    string str = xmlItem.GetStringValue("TimeParameters");
                    if (string.IsNullOrEmpty(str))
                    {
                        return(true);
                    }
                    string[] fields = str.Split(',');
                    if (fields.Length != 2)
                    {
                        return(true);
                    }

                    int suit = Convert.ToInt32(fields[0]);
                    int star = Convert.ToInt32(fields[1]);

                    return((client.ClientData.MyWingData.WingID > suit) ||
                           (client.ClientData.MyWingData.WingID == suit && client.ClientData.MyWingData.ForgeLevel >= star));
                }
                // 成就阶数
                else if (trigger == 15)
                {
                    if (client.ClientData.ChengJiuLevel < xmlItem.GetIntValue("TimeParameters"))
                    {
                        return(false);
                    }
                }
                // 军衔阶数
                else if (trigger == 16)
                {
                    int junxian = GameManager.ClientMgr.GetShengWangLevelValue(client);
                    if (junxian < xmlItem.GetIntValue("TimeParameters"))
                    {
                        return(false);
                    }
                }
                else if (trigger == 20)
                {
                    int bangHuiLevel = Global.GetBangHuiLevel(client);
                    if (bangHuiLevel < xmlItem.GetIntValue("TimeParameters"))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#23
0
 public bool IsGongNengOpened(GameClient client, bool hint = false)
 {
     return(!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot8) && GameManager.VersionSystemOpenMgr.IsVersionSystemOpen("KuaFuBoss") && GlobalNew.IsGongNengOpened(client, GongNengIDs.KuaFuBoss, hint));
 }
示例#24
0
 public bool ProcessKuaFuBossEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         KuaFuBossSceneInfo  sceneItem = null;
         KuaFuBossGameStates state     = KuaFuBossGameStates.None;
         int result = 0;
         if (!this.CheckMap(client))
         {
             result = -21;
         }
         else
         {
             result = this.CheckCondition(client, ref sceneItem, ref state);
         }
         if (state == KuaFuBossGameStates.Start)
         {
             KuaFuServerLoginData kuaFuServerLoginData = null;
             lock (this.RuntimeData.Mutex)
             {
                 if (this.RuntimeData.RoleIdKuaFuLoginDataDict.TryGetValue(client.ClientData.RoleID, out kuaFuServerLoginData))
                 {
                     KuaFuServerLoginData clientKuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client);
                     if (null != clientKuaFuServerLoginData)
                     {
                         clientKuaFuServerLoginData.RoleId     = kuaFuServerLoginData.RoleId;
                         clientKuaFuServerLoginData.GameId     = kuaFuServerLoginData.GameId;
                         clientKuaFuServerLoginData.GameType   = kuaFuServerLoginData.GameType;
                         clientKuaFuServerLoginData.EndTicks   = kuaFuServerLoginData.EndTicks;
                         clientKuaFuServerLoginData.ServerId   = kuaFuServerLoginData.ServerId;
                         clientKuaFuServerLoginData.ServerIp   = kuaFuServerLoginData.ServerIp;
                         clientKuaFuServerLoginData.ServerPort = kuaFuServerLoginData.ServerPort;
                         clientKuaFuServerLoginData.FuBenSeqId = kuaFuServerLoginData.FuBenSeqId;
                     }
                 }
                 else
                 {
                     result = -11000;
                 }
             }
             if (result >= 0)
             {
                 result = YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.EnterGame, false);
                 if (result >= 0)
                 {
                     GlobalNew.RecordSwitchKuaFuServerLog(client);
                     client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false);
                 }
                 else
                 {
                     Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                 }
             }
         }
         else
         {
             result = -2001;
         }
         client.sendCmd <int>(nID, result, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
示例#25
0
 private bool IsGongNengOpened(GameClient client)
 {
     return(this.RuntimeData.IsGongNengOpend && GlobalNew.IsGongNengOpened(client, GongNengIDs.BianShen, false));
 }
 public bool IsGongNengOpen(GameClient client, bool hint = false)
 {
     return(!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System2Dot7) && GlobalNew.IsGongNengOpened(client, GongNengIDs.JingLingJueXing, hint));
 }
示例#27
0
        /// <summary>
        /// 给奖励
        /// </summary>
        public void GiveAwards(ElementWarScene scene)
        {
            try
            {
                FuBenMapItem fuBenMapItem = FuBenManager.FindMapCodeByFuBenID(scene.CopyMapInfo.FubenMapID, scene.MapID);
                if (fuBenMapItem == null)
                {
                    return;
                }

                //FuBenInfoItem fuBenInfoItem = FuBenManager.FindFuBenInfoBySeqID(scene.FuBenSeqId);
                //if (null == fuBenInfoItem) return;

                //fuBenInfoItem.EndTicks = TimeUtil.NOW();
                //int addFuBenNum = 1;
                //if (fuBenInfoItem.nDayOfYear != TimeUtil.NowDateTime().DayOfYear)
                //    addFuBenNum = 0;

                //int usedSecs = (int)(scene.EndTime - scene.BeginTime);

                int zhanLi = 0;
                List <GameClient> objsList = scene.CopyMapInfo.GetClientsList();
                if (objsList != null && objsList.Count > 0)
                {
                    for (int n = 0; n < objsList.Count; ++n)
                    {
                        GameClient client = objsList[n];
                        if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线
                        {
                            // 公式
                            long nExp  = fuBenMapItem.Experience;
                            int  money = fuBenMapItem.Money1;

                            int wave = scene.MonsterWaveOld;
                            if (wave > 0)
                            {
                                wave -= 1;
                            }
                            int light = fuBenMapItem.LightAward + _runtimeData.AwardLight[wave];

                            if (nExp > 0)
                            {
                                GameManager.ClientMgr.ProcessRoleExperience(client, nExp, false);
                            }

                            if (money > 0)
                            {
                                GameManager.ClientMgr.AddMoney1(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, money, string.Format(/**/ "副本{0}通关奖励", scene.CopyID), false);
                            }

                            if (light > 0)
                            {
                                GameManager.FluorescentGemMgr.AddFluorescentPoint(client, light, "元素试炼");
                            }


                            ElementWarAwardsData awardsData = new ElementWarAwardsData()
                            {
                                Wave  = scene.MonsterWaveOld,
                                Exp   = nExp,
                                Money = money,
                                Light = light
                            };

                            AddElementWarCount(client);
                            GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)_gameType);

                            client.sendCmd((int)TCPGameServerCmds.CMD_SPR_ELEMENT_WAR_AWARD, awardsData);


                            zhanLi += client.ClientData.CombatForce;

                            Global.UpdateFuBenDataForQuickPassTimer(client, scene.CopyMapInfo.FubenMapID, 0, 1);
                        }
                    }
                }

                int roleCount = 0;
                if (objsList != null && objsList.Count > 0)
                {
                    roleCount = objsList.Count;
                    zhanLi    = zhanLi / roleCount;
                }

                // ElementWarClient.getInstance().UpdateCopyPassEvent(scene.FuBenSeqId, roleCount, scene.MonsterWaveOld, zhanLi);
            }
            catch (System.Exception ex)
            {
                DataHelper.WriteExceptionLogEx(ex, "【元素试炼】清场调度异常");
            }
        }
示例#28
0
 public static bool HasLeftnum(GameClient client)
 {
     return(GlobalNew.IsGongNengOpened(client, GongNengIDs.CrystalCollect, false) && client.ClientData.DailyCrystalCollectNum < CaiJiLogic.DailyNum);
 }
示例#29
0
        /// <summary>
        /// 给奖励
        /// </summary>
        public void GiveAwards(HuanYingSiYuanScene huanYingSiYuanScene)
        {
            try
            {
                List <GameClient> objsList = huanYingSiYuanScene.CopyMap.GetClientsList();
                if (objsList != null && objsList.Count > 0)
                {
                    int nowDayId = Global.GetOffsetDayNow();
                    for (int n = 0; n < objsList.Count; ++n)
                    {
                        GameClient client = objsList[n];
                        if (client != null && client == GameManager.ClientMgr.FindClient(client.ClientData.RoleID)) //确认角色仍然在线
                        {
                            bool   success    = false;
                            double nMultiple  = 0.5;
                            int    awardsRate = 1;
                            int    count      = 0;

                            HuanYingSiYuanLianShaContextData clientLianShaContextData = client.SceneContextData2 as HuanYingSiYuanLianShaContextData;
                            if (null != clientLianShaContextData && clientLianShaContextData.TotalScore >= RuntimeData.TempleMirageMinJiFen)
                            {
                                if (client.ClientData.BattleWhichSide == huanYingSiYuanScene.SuccessSide)
                                {
                                    success   = true;
                                    nMultiple = 1;

                                    //每日前3次享受10倍奖励
                                    int dayid = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessDayId);
                                    if (dayid == nowDayId)
                                    {
                                        count = Global.GetRoleParamsInt32FromDB(client, RoleParamName.HysySuccessCount);
                                        if (count < RuntimeData.TempleMirageWinExtraNum)
                                        {
                                            awardsRate = RuntimeData.TempleMirageWinExtraRate;
                                        }
                                    }
                                    else
                                    {
                                        awardsRate = RuntimeData.TempleMirageWinExtraRate;
                                    }
                                }
                            }
                            else
                            {
                                //达不到最低分数,无奖励,不计次
                                nMultiple  = 0;
                                awardsRate = 0;
                            }

                            // 公式
                            long nExp           = (long)(RuntimeData.TempleMirageEXPAward * nMultiple * client.ClientData.ChangeLifeCount);
                            int  chengJiuaward  = (int)(RuntimeData.TempleMirageAwardChengJiu * nMultiple);
                            int  shengWangaward = (int)(RuntimeData.TempleMirageAwardShengWang * nMultiple);

                            if (nExp > 0)
                            {
                                GameManager.ClientMgr.ProcessRoleExperience(client, nExp * awardsRate, false);
                                //GameManager.ClientMgr.NotifyAddExpMsg(client, nExp); //客户端自己提示,有显示"X10"的需求
                            }

                            if (chengJiuaward > 0)
                            {
                                ChengJiuManager.AddChengJiuPoints(client, "幻影寺院获得成就", chengJiuaward * awardsRate, true, true);
                            }

                            if (shengWangaward > 0)
                            {
                                GameManager.ClientMgr.ModifyShengWangValue(client, shengWangaward * awardsRate, "幻影寺院获得声望");
                            }

                            HuanYingSiYuanAwardsData awardsData = new HuanYingSiYuanAwardsData()
                            {
                                SuccessSide   = huanYingSiYuanScene.SuccessSide,
                                Exp           = nExp,
                                ShengWang     = shengWangaward,
                                ChengJiuAward = chengJiuaward,
                                AwardsRate    = awardsRate,
                            };

                            if (success)
                            {
                                if (nMultiple > 0)
                                {
                                    Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessDayId, nowDayId, true);
                                    Global.SaveRoleParamsInt32ValueToDB(client, RoleParamName.HysySuccessCount, count + 1, true);

                                    GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 1, 0, (int)GameTypes.HuanYingSiYuan);
                                    if (huanYingSiYuanScene.ScoreInfoData.Score1 >= 1000 || huanYingSiYuanScene.ScoreInfoData.Score2 >= 1000)
                                    {
                                        //FaildCount记录为获得够1000分而获胜的人次
                                        GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1, (int)GameTypes.HuanYingSiYuan);
                                    }
                                }
                            }
                            else
                            {
                                //FaildCount记录为失败人次
                                //GlobalNew.UpdateKuaFuRoleDayLogData(client.ServerId, client.ClientData.RoleID, TimeUtil.NowDateTime(), client.ClientData.ZoneID, 0, 0, 0, 1);
                            }

                            client.sendCmd((int)TCPGameServerCmds.CMD_SPR_HYSY_AWARD, awardsData);
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                DataHelper.WriteExceptionLogEx(ex, "幻影寺院清场调度异常");
            }
        }
示例#30
0
        //圣物进阶
        private EHolyResult HolyItem_Suit_Up(GameClient client, sbyte sShengWu_slot, sbyte sBuJian_slot)
        {
            // 如果1.7的功能没开放
            if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7))
            {
                return(EHolyResult.NotOpen);
            }

            //增加系统开启判断
            if (false == GameManager.VersionSystemOpenMgr.IsVersionSystemOpen(VersionSystemOpenKey.HolyItem))
            {
                return(EHolyResult.NotOpen);
            }

            //不满足任务条件
            if (GlobalNew.IsGongNengOpened(client, GongNengIDs.HolyItem, true) == false)
            {
                return(EHolyResult.NotOpen);
            }

            if (null == client.ClientData.MyHolyItemDataDic)
            {
                return(EHolyResult.Error);
            }

            Dictionary <sbyte, HolyItemData> holyitemdata = client.ClientData.MyHolyItemDataDic;
            HolyItemData     tmpdata     = null;
            HolyItemPartData tmppartdata = null;
            HolyPartInfo     xmlData     = null;

            //先取得当前圣物部件等级
            if (false == holyitemdata.TryGetValue(sShengWu_slot, out tmpdata))
            {
                return(EHolyResult.Error);
            }

            if (false == tmpdata.m_PartArray.TryGetValue(sBuJian_slot, out tmppartdata))
            {
                return(EHolyResult.Error);
            }

            //0 看看要升级的部件阶级是不是已经满级了
            if (tmppartdata.m_sSuit >= MAX_HOLY_PART_LEVEL)
            {
                return(EHolyResult.PartSuitIsMax);
            }

            int nDataID = HolyPartInfo.GetBujianID(sShengWu_slot, sBuJian_slot, (sbyte)tmppartdata.m_sSuit);

            if (false == _partDataDic.TryGetValue(nDataID, out xmlData))
            {
                return(EHolyResult.Error);
            }

            //1 绑金+金币是否足够
            if (-1 != xmlData.m_nCostBandJinBi &&
                xmlData.m_nCostBandJinBi > Global.GetTotalBindTongQianAndTongQianVal(client))
            {
                return(EHolyResult.NeedGold);
            }

            //2 部件碎片是否足够
            if (-1 != xmlData.m_nNeedGoodsCount &&
                xmlData.m_nNeedGoodsCount > tmppartdata.m_nSlice)
            {
                return(EHolyResult.NeedHolyItemPart);
            }

            //3 以上均满足,判断成功率
            bool bSuccess = false;
            int  nRank    = Global.GetRandomNumber(0, 100);

            if (-1 == xmlData.m_sSuccessProbability ||
                tmppartdata.m_nFailCount >= xmlData.m_nMaxFailCount ||      //[bing] 2015,8,12 达到连续失败最大次数必成功
                nRank < (int)(xmlData.m_sSuccessProbability))
            {
                //4 合成成功:消耗金币、消耗部件碎片,阶数+1
                bSuccess = true;

                //扣除金币
                if (-1 != xmlData.m_nCostBandJinBi)
                {
                    if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗"))
                    {
                        return(EHolyResult.Error);
                    }
                }

                //扣除部件碎片
                if (-1 != xmlData.m_nNeedGoodsCount)
                {
                    tmppartdata.m_nSlice -= xmlData.m_nNeedGoodsCount;
                }
                if (tmppartdata.m_nSlice < 0)
                {
                    tmppartdata.m_nSlice = 0;
                    return(EHolyResult.Error);
                }

                //部件阶级提升
                tmppartdata.m_sSuit += 1;

                //重置失败次数
                tmppartdata.m_nFailCount = 0;
            }
            else
            {
                //5 合成失败:消耗金币、消耗部分部件碎片

                //扣除金币
                if (-1 != xmlData.m_nCostBandJinBi)
                {
                    if (!Global.SubBindTongQianAndTongQian(client, xmlData.m_nCostBandJinBi, "圣物部件升级消耗"))
                    {
                        return(EHolyResult.Error);
                    }
                }

                //扣除失败时的部件碎片
                if (-1 != xmlData.m_nFailCostGoodsCount)
                {
                    tmppartdata.m_nSlice -= xmlData.m_nFailCostGoodsCount;
                }
                if (tmppartdata.m_nSlice < 0)
                {
                    tmppartdata.m_nSlice = 0;
                    return(EHolyResult.Error);
                }

                //失败次数增加1
                tmppartdata.m_nFailCount += 1;
            }

            if (true == bSuccess)
            {
                //计算部件属性
                UpdateHolyItemBuJianAttr(client, sShengWu_slot, sBuJian_slot);

                //计算圣物额外属性
                UpdataHolyItemExAttr(client, sShengWu_slot);

                // 通知客户端属性变化
                GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client);
                // 总生命值和魔法值变化通知(同一个地图才需要通知)
                GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client);
            }

            //更新db
            UpdateHolyItemData2DB(client, sShengWu_slot, sBuJian_slot, tmppartdata);

            //发送给客户端更新数据
            HolyItemSendToClient(client, sShengWu_slot, sBuJian_slot);

            //写log做进阶统计
            GameManager.logDBCmdMgr.AddDBLogInfo(
                -1
                , SliceNameSet[sShengWu_slot, sBuJian_slot]
                , /**/ "圣物进阶"
                , /**/ "系统"
                , client.ClientData.RoleName
                , bSuccess == true ? /**/ "成功" : /**/ "失败"
                , xmlData.m_nCostBandJinBi != -1 ? xmlData.m_nCostBandJinBi : 0     //消耗的金币数
                , client.ClientData.ZoneID
                , client.strUserID
                , tmppartdata.m_nSlice
                , client.ServerId);

            if (client._IconStateMgr.CheckSpecialActivity(client))
            {
                client._IconStateMgr.SendIconStateToClient(client);
            }

            return(bSuccess == true ? EHolyResult.Success : EHolyResult.Fail);
        }