Пример #1
0
        public void TimerProc(object sender, EventArgs e)
        {
            Dictionary <int, int> dict = new Dictionary <int, int>();

            if (KuaFuManager.getInstance().CanKuaFuLogin())
            {
                lock (this.RuntimeData.Mutex)
                {
                    foreach (int mapCode in this.RuntimeData.MapCode2KuaFuLineDataDict.Keys)
                    {
                        dict[mapCode] = 0;
                    }
                }
            }
            List <int> list = dict.Keys.ToList <int>();

            foreach (int mapCode in list)
            {
                dict[mapCode] = GameManager.ClientMgr.GetMapClientsCount(mapCode);
            }
            if (KuaFuManager.KuaFuWorldKuaFuGameServer)
            {
                KuaFuWorldClient.getInstance().UpdateKuaFuMapClientCount(dict);
            }
            else
            {
                YongZheZhanChangClient.getInstance().UpdateKuaFuMapClientCount(dict);
            }
        }
Пример #2
0
        public void TimerProc(object sender, EventArgs e)
        {
            //更新每个跨服地图的人数
            Dictionary <int, int> dict = new Dictionary <int, int>();

            lock (RuntimeData.Mutex)
            {
                if (YongZheZhanChangClient.getInstance().CanKuaFuLogin())
                {
                    foreach (var mapCode in RuntimeData.MapCode2KuaFuLineDataDict.Keys)
                    {
                        dict[mapCode] = 0;
                    }
                }
            }

            List <int> list = dict.Keys.ToList();

            foreach (var mapCode in list)
            {
                dict[mapCode] = GameManager.ClientMgr.GetMapClientsCount(mapCode);
            }

            lock (RuntimeData.Mutex)
            {
                YongZheZhanChangClient.getInstance().UpdateKuaFuMapClientCount(dict);
            }
        }
Пример #3
0
        /// <summary>
        /// 罗兰城战攻防竞价申请指令处理
        /// </summary>
        /// <param name="client"></param>
        /// <param name="nID"></param>
        /// <param name="bytes"></param>
        /// <param name="cmdParams"></param>
        /// <returns></returns>
        public bool ProcessYongZheZhanChangJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int result = StdErrorCode.Error_Success_No_Info;

                do
                {
                    // 如果1.7的功能没开放
                    if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7))
                    {
                        break;
                    }

                    YongZheZhanChangSceneInfo  sceneItem = null;
                    YongZheZhanChangGameStates state     = YongZheZhanChangGameStates.None;
                    if (!CheckMap(client))
                    {
                        result = StdErrorCode.Error_Denied_In_Current_Map;
                    }
                    else
                    {
                        result = CheckCondition(client, ref sceneItem, ref state);
                    }

                    if (state != YongZheZhanChangGameStates.SignUp)
                    {
                        result = StdErrorCode.Error_Not_In_valid_Time; //非报名时间
                    }
                    else if (RuntimeData.RoleId2JoinGroup.ContainsKey(client.ClientData.RoleID))
                    {
                        result = StdErrorCode.Error_Operation_Denied; // 已经报名了
                    }

                    if (result >= 0)
                    {
                        int gropuId = sceneItem.Id;
                        result = YongZheZhanChangClient.getInstance().YongZheZhanChangSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID,
                                                                                             (int)GameTypes.YongZheZhanChang, gropuId, client.ClientData.CombatForce);
                        if (result > 0)
                        {
                            RuntimeData.RoleId2JoinGroup[client.ClientData.RoleID] = gropuId;
                            client.ClientData.SignUpGameType = (int)GameTypes.YongZheZhanChang;
                        }
                    }
                } while (false);

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

            return(false);
        }
Пример #4
0
        public bool ProcessGetKuaFuBossStateCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                KuaFuBossSceneInfo  sceneItem = null;
                KuaFuBossGameStates timeState = KuaFuBossGameStates.None;
                int result  = (int)KuaFuBossGameStates.None;
                int groupId = 0;
                RuntimeData.RoleId2JoinGroup.TryGetValue(client.ClientData.RoleID, out groupId);

                CheckCondition(client, ref sceneItem, ref timeState);
                if (groupId > 0)
                {
                    if (timeState >= KuaFuBossGameStates.SignUp && timeState <= KuaFuBossGameStates.Wait)
                    {
                        int state = YongZheZhanChangClient.getInstance().GetKuaFuRoleState(client.ClientData.RoleID);
                        if (state >= (int)KuaFuRoleStates.SignUp)
                        {
                            result = (int)KuaFuBossGameStates.Wait;
                        }
                        else
                        {
                            result = (int)KuaFuBossGameStates.NotJoin;
                        }
                    }
                    else if (timeState == KuaFuBossGameStates.Start)
                    {
                        if (RuntimeData.RoleIdKuaFuLoginDataDict.ContainsKey(client.ClientData.RoleID))
                        {
                            result = (int)KuaFuBossGameStates.Start;
                        }
                    }
                }
                else
                {
                    if (timeState == KuaFuBossGameStates.SignUp)
                    {
                        result = (int)KuaFuBossGameStates.SignUp;
                    }
                    else if (timeState == KuaFuBossGameStates.Wait || timeState == KuaFuBossGameStates.Start)
                    {
                        // 未参加本次活动
                        result = (int)KuaFuBossGameStates.NotJoin;
                    }
                }

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

            return(false);
        }
Пример #5
0
        /// <summary>
        /// 给奖励
        /// </summary>
        public void GiveAwards(YongZheZhanChangScene scene)
        {
            try
            {
                YongZheZhanChangStatisticalData gameResultData = scene.GameStatisticalData;
                foreach (var contextData in scene.ClientContextDataDict.Values)
                {
                    gameResultData.AllRoleCount++;
                    int success;
                    if (contextData.BattleWhichSide == scene.SuccessSide)
                    {
                        success = 1;
                        gameResultData.WinRoleCount++;
                    }
                    else
                    {
                        success = 0;
                        gameResultData.LoseRoleCount++;
                    }

                    GameClient client     = GameManager.ClientMgr.FindClient(contextData.RoleId);
                    string     awardsInfo = string.Format("{0},{1},{2},{3},{4}", scene.SceneInfo.Id, success, contextData.TotalScore, scene.ScoreData.Score1, scene.ScoreData.Score2);
                    if (client != null) //确认角色仍然在线
                    {
                        int score = contextData.TotalScore;
                        contextData.TotalScore = 0;
                        if (score >= RuntimeData.WarriorBattleLowestJiFen)
                        {
                            Global.SaveRoleParamsStringToDB(client, RoleParamName.YongZheZhanChangAwards, awardsInfo, true);
                        }
                        else
                        {
                            Global.SaveRoleParamsStringToDB(client, RoleParamName.YongZheZhanChangAwards, RuntimeData.RoleParamsAwardsDefaultString, true);
                        }

                        NtfCanGetAward(client, success, score, scene.SceneInfo, scene.ScoreData.Score1, scene.ScoreData.Score2);
                    }
                    else if (contextData.TotalScore >= RuntimeData.WarriorBattleLowestJiFen)
                    {
                        Global.UpdateRoleParamByNameOffline(contextData.RoleId, RoleParamName.YongZheZhanChangAwards, awardsInfo, contextData.ServerId);
                    }
                    else
                    {
                        Global.UpdateRoleParamByNameOffline(contextData.RoleId, RoleParamName.YongZheZhanChangAwards, RuntimeData.RoleParamsAwardsDefaultString, contextData.ServerId);
                    }
                }

                YongZheZhanChangClient.getInstance().PushGameResultData(gameResultData);
            }
            catch (System.Exception ex)
            {
                DataHelper.WriteExceptionLogEx(ex, "天梯系统清场调度异常");
            }
        }
Пример #6
0
 public bool initialize(ICoreInterface coreInterface)
 {
     try
     {
         this.CoreInterface = coreInterface;
         if (!this.InitConfig())
         {
             return(false);
         }
         RemotingConfiguration.Configure(Process.GetCurrentProcess().MainModule.FileName + ".config", false);
         if (!HuanYingSiYuanClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!TianTiClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!YongZheZhanChangClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!KFCopyRpcClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!SpreadClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!AllyClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!IPStatisticsClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!JunTuanClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         if (!KuaFuWorldClient.getInstance().initialize(coreInterface))
         {
             return(false);
         }
         GlobalEventSource.getInstance().registerListener(12, KuaFuManager.getInstance());
     }
     catch (Exception ex)
     {
         return(false);
     }
     return(true);
 }
Пример #7
0
        public bool ProcessGetKuaFuLineDataListCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int mapCode = Global.SafeConvertToInt32(cmdParams[0]);
                List <KuaFuLineData> list = YongZheZhanChangClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>;
                client.sendCmd(nID, list);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false);
            }

            return(false);
        }
Пример #8
0
 public bool ProcessKuaFuBossJoinCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         KuaFuBossSceneInfo  sceneItem = null;
         KuaFuBossGameStates state     = KuaFuBossGameStates.None;
         int result;
         if (!this.CheckMap(client))
         {
             result = -21;
         }
         else
         {
             result = this.CheckCondition(client, ref sceneItem, ref state);
         }
         if (state != KuaFuBossGameStates.SignUp)
         {
             result = -2001;
         }
         else if (this.RuntimeData.RoleId2JoinGroup.ContainsKey(client.ClientData.RoleID))
         {
             result = -12;
         }
         if (result >= 0)
         {
             int gropuId = sceneItem.Id;
             result = YongZheZhanChangClient.getInstance().YongZheZhanChangSignUp(client.strUserID, client.ClientData.RoleID, client.ClientData.ZoneID, 6, gropuId, client.ClientData.CombatForce);
             if (result > 0)
             {
                 this.RuntimeData.RoleId2JoinGroup[client.ClientData.RoleID] = gropuId;
                 client.ClientData.SignUpGameType = 6;
             }
         }
         client.sendCmd <int>(nID, result, false);
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
Пример #9
0
 public bool ProcessGetKuaFuLineDataListCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
 {
     try
     {
         int mapCode = Global.SafeConvertToInt32(cmdParams[0]);
         if (Global.GetMapSceneType(mapCode) == SceneUIClasses.ChongShengMap)
         {
             List <KuaFuLineData> list = KuaFuWorldClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>;
             client.sendCmd <List <KuaFuLineData> >(nID, list, false);
         }
         else
         {
             List <KuaFuLineData> list = YongZheZhanChangClient.getInstance().GetKuaFuLineDataList(mapCode) as List <KuaFuLineData>;
             client.sendCmd <List <KuaFuLineData> >(nID, list, false);
         }
         return(true);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
     }
     return(false);
 }
Пример #10
0
        /// <summary>
        /// 心跳处理
        /// </summary>
        public void TimerProc()
        {
            long nowTicks = TimeUtil.NOW();

            if (nowTicks < NextHeartBeatTicks)
            {
                return;
            }

            NextHeartBeatTicks = nowTicks + 1020; //1020毫秒执行一次

            foreach (var scene in SceneDict.Values)
            {
                lock (RuntimeData.Mutex)
                {
                    int nID = -1;
                    nID = scene.FuBenSeqId;

                    int nCopyID = -1;
                    nCopyID = scene.CopyMapId;

                    int nMapCodeID = -1;
                    nMapCodeID = scene.m_nMapCode;

                    if (nID < 0 || nCopyID < 0 || nMapCodeID < 0)
                    {
                        continue;
                    }

                    CopyMap copyMap = scene.CopyMap;

                    // 当前tick
                    DateTime now   = TimeUtil.NowDateTime();
                    long     ticks = TimeUtil.NOW();

                    if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL)             // 如果处于空状态 -- 是否要切换到准备状态
                    {
                        if (ticks >= scene.StartTimeTicks)
                        {
                            scene.m_lPrepareTime = scene.StartTimeTicks;
                            scene.m_lBeginTime   = scene.m_lPrepareTime + scene.SceneInfo.PrepareSecs * TimeUtil.SECOND;
                            scene.m_eStatus      = GameSceneStatuses.STATUS_PREPARE;

                            scene.StateTimeData.GameType = (int)GameTypes.YongZheZhanChang;
                            scene.StateTimeData.State    = (int)scene.m_eStatus;
                            scene.StateTimeData.EndTicks = scene.m_lBeginTime;
                            GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap);
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_PREPARE)     // 场景战斗状态切换
                    {
                        if (ticks >= scene.m_lBeginTime)
                        {
                            scene.m_eStatus  = GameSceneStatuses.STATUS_BEGIN;
                            scene.m_lEndTime = scene.m_lBeginTime + scene.SceneInfo.FightingSecs * TimeUtil.SECOND;

                            scene.StateTimeData.GameType = (int)GameTypes.YongZheZhanChang;
                            scene.StateTimeData.State    = (int)scene.m_eStatus;
                            scene.StateTimeData.EndTicks = scene.m_lEndTime;
                            GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap);

                            InitCreateDynamicMonster(scene);

                            copyMap.AddGuangMuEvent(1, 0);
                            GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 1, 0);
                            copyMap.AddGuangMuEvent(2, 0);
                            GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 2, 0);
                            copyMap.AddGuangMuEvent(3, 0);
                            GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 3, 0);
                            copyMap.AddGuangMuEvent(4, 0);
                            GameManager.ClientMgr.BroadSpecialMapAIEvent(copyMap.MapCode, copyMap.CopyMapID, 4, 0);
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN)       // 战斗开始
                    {
                        if (ticks >= scene.m_lEndTime)
                        {
                            int successSide = 0;
                            if (scene.ScoreData.Score1 > scene.ScoreData.Score2)
                            {
                                successSide = 1;
                            }
                            else if (scene.ScoreData.Score2 > scene.ScoreData.Score1)
                            {
                                successSide = 2;
                            }

                            CompleteScene(scene, successSide);
                            scene.m_eStatus    = GameSceneStatuses.STATUS_END;
                            scene.m_lLeaveTime = scene.m_lEndTime + scene.SceneInfo.ClearRolesSecs * TimeUtil.SECOND;

                            scene.StateTimeData.GameType = (int)GameTypes.YongZheZhanChang;
                            scene.StateTimeData.State    = (int)GameSceneStatuses.STATUS_CLEAR;
                            scene.StateTimeData.EndTicks = scene.m_lLeaveTime;
                            GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap);
                        }
                        else
                        {
                            CheckCreateDynamicMonster(scene, ticks);
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_END)         // 战斗结束
                    {
                        GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap);

                        //结算奖励
                        scene.m_eStatus = GameSceneStatuses.STATUS_AWARD;
                        YongZheZhanChangClient.getInstance().GameFuBenChangeState(scene.GameId, GameFuBenState.End, now);
                        GiveAwards(scene);

                        YongZheZhanChangFuBenData fuBenData;
                        if (RuntimeData.FuBenItemData.TryGetValue(scene.GameId, out fuBenData))
                        {
                            fuBenData.State = GameFuBenState.End;
                            LogManager.WriteLog(LogTypes.Error, string.Format("勇者战场跨服副本GameID={0},战斗结束", fuBenData.GameId));
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD)
                    {
                        if (ticks >= scene.m_lLeaveTime)
                        {
                            copyMap.SetRemoveTicks(scene.m_lLeaveTime);
                            scene.m_eStatus = GameSceneStatuses.STATUS_CLEAR;

                            try
                            {
                                List <GameClient> objsList = copyMap.GetClientsList();
                                if (objsList != null && objsList.Count > 0)
                                {
                                    for (int n = 0; n < objsList.Count; ++n)
                                    {
                                        GameClient c = objsList[n];
                                        if (c != null)
                                        {
                                            KuaFuManager.getInstance().GotoLastMap(c);
                                        }
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                DataHelper.WriteExceptionLogEx(ex, "勇者战场系统清场调度异常");
                            }
                        }
                    }
                }
            }

            return;
        }
Пример #11
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.YongZheZhanChang)
            {
                GameMap gameMap = null;
                if (!GameManager.MapMgr.DictMaps.TryGetValue(client.ClientData.MapCode, out gameMap))
                {
                    return(false);
                }

                int      fuBenSeqId = copyMap.FuBenSeqID;
                int      mapCode    = copyMap.MapCode;
                int      roleId     = client.ClientData.RoleID;
                int      gameId     = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                DateTime now        = TimeUtil.NowDateTime();
                lock (RuntimeData.Mutex)
                {
                    YongZheZhanChangScene scene = null;
                    if (!SceneDict.TryGetValue(fuBenSeqId, out scene))
                    {
                        YongZheZhanChangSceneInfo sceneInfo = null;
                        YongZheZhanChangFuBenData fuBenData;
                        if (!RuntimeData.FuBenItemData.TryGetValue(gameId, out fuBenData))
                        {
                            LogManager.WriteLog(LogTypes.Error, "勇者战场没有为副本找到对应的跨服副本数据,GameID:" + gameId);
                        }

                        if (!RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo))
                        {
                            LogManager.WriteLog(LogTypes.Error, "勇者战场没有为副本找到对应的档位数据,ID:" + fuBenData.GroupIndex);
                        }

                        scene         = new YongZheZhanChangScene();
                        scene.CopyMap = copyMap;
                        scene.CleanAllInfo();
                        scene.GameId         = gameId;
                        scene.m_nMapCode     = mapCode;
                        scene.CopyMapId      = copyMap.CopyMapID;
                        scene.FuBenSeqId     = fuBenSeqId;
                        scene.m_nPlarerCount = 1;
                        scene.SceneInfo      = sceneInfo;
                        scene.MapGridWidth   = gameMap.MapGridWidth;
                        scene.MapGridHeight  = gameMap.MapGridHeight;
                        DateTime startTime = now.Date.Add(GetStartTime(sceneInfo.Id));
                        scene.StartTimeTicks = startTime.Ticks / 10000;

                        scene.GameStatisticalData.GameId = gameId;

                        SceneDict[fuBenSeqId] = scene;
                    }
                    else
                    {
                        scene.m_nPlarerCount++;
                    }

                    YongZheZhanChangClientContextData clientContextData;
                    if (!scene.ClientContextDataDict.TryGetValue(roleId, out clientContextData))
                    {
                        clientContextData = new YongZheZhanChangClientContextData()
                        {
                            RoleId = roleId, ServerId = client.ServerId, BattleWhichSide = client.ClientData.BattleWhichSide
                        };
                        scene.ClientContextDataDict[roleId] = clientContextData;
                    }
                    else
                    {
                        clientContextData.KillNum = 0;
                    }

                    client.SceneContextData2 = clientContextData;

                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + scene.SceneInfo.TotalSecs * TimeUtil.SECOND);

                    // 非首次进来的人会有旧的积分信息需要通知
                    // 改为进入的时候,让客户端来主动查询
                    //NotifyTimeStateInfoAndScoreInfo(client, false, true, true);
                }

                //更新状态
                YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, (int)KuaFuRoleStates.StartGame);
                return(true);
            }

            return(false);
        }
Пример #12
0
        public bool ProcessYongZheZhanChangEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int result = StdErrorCode.Error_Success_No_Info;

                // 如果1.7的功能没开放
                if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot7))
                {
                    client.sendCmd(nID, result);
                    return(true);
                }

                YongZheZhanChangSceneInfo  sceneItem = null;
                YongZheZhanChangGameStates state     = YongZheZhanChangGameStates.None;

                if (!CheckMap(client))
                {
                    result = StdErrorCode.Error_Denied_In_Current_Map;
                }
                else
                {
                    result = CheckCondition(client, ref sceneItem, ref state);
                }

                if (state == YongZheZhanChangGameStates.Start)
                {
                    KuaFuServerLoginData kuaFuServerLoginData = null;
                    lock (RuntimeData.Mutex)
                    {
                        if (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 = StdErrorCode.Error_Server_Busy;
                        }
                    }

                    if (result >= 0)
                    {
                        result = YongZheZhanChangClient.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;
                        }
                    }
                }
                else
                {
                    result = StdErrorCode.Error_Not_In_valid_Time;
                }

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

            return(false);
        }
Пример #13
0
        public bool OnInitGame(GameClient client)
        {
            int posX;
            int posY;
            int side;

            KuaFuServerLoginData      kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client);
            YongZheZhanChangFuBenData fuBenData;

            lock (RuntimeData.Mutex)
            {
                if (!RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData))
                {
                    fuBenData = null;
                }
                else if (fuBenData.State >= GameFuBenState.End)
                {
                    return(false);
                }
            }

            if (null == fuBenData)
            {
                //从中心查询副本信息
                YongZheZhanChangFuBenData newFuBenData = YongZheZhanChangClient.getInstance().GetKuaFuFuBenData((int)kuaFuServerLoginData.GameId);
                if (newFuBenData == null || newFuBenData.State == GameFuBenState.End)
                {
                    LogManager.WriteLog(LogTypes.Error, "获取不到有效的副本数据," + newFuBenData == null ? "fuBenData == null" : "fuBenData.State == GameFuBenState.End");
                    return(false);
                }

                lock (RuntimeData.Mutex)
                {
                    if (!RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData))
                    {
                        fuBenData            = newFuBenData;
                        fuBenData.SequenceId = GameCoreInterface.getinstance().GetNewFuBenSeqId();
                        RuntimeData.FuBenItemData[fuBenData.GameId] = fuBenData;
                    }
                }
            }

            KuaFuFuBenRoleData kuaFuFuBenRoleData;

            if (!fuBenData.RoleDict.TryGetValue(client.ClientData.RoleID, out kuaFuFuBenRoleData))
            {
                return(false);
            }

            client.ClientData.BattleWhichSide = kuaFuFuBenRoleData.Side;
            side = GetBirthPoint(client, out posX, out posY);
            if (side <= 0)
            {
                LogManager.WriteLog(LogTypes.Error, "无法获取有效的阵营和出生点,进入跨服失败,side=" + side);
                return(false);
            }

            YongZheZhanChangSceneInfo sceneInfo;

            lock (RuntimeData.Mutex)
            {
                kuaFuServerLoginData.FuBenSeqId = fuBenData.SequenceId;
                if (!RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo))
                {
                    return(false);
                }

                client.ClientData.MapCode = sceneInfo.MapCode;
            }

            client.ClientData.PosX       = posX;
            client.ClientData.PosY       = posY;
            client.ClientData.FuBenSeqID = kuaFuServerLoginData.FuBenSeqId;

            return(true);
        }
Пример #14
0
        public bool initialize(ICoreInterface coreInterface)
        {
            try
            {
                CoreInterface = coreInterface;
                if (!InitConfig())
                {
                    return(false);
                }

                System.Runtime.Remoting.RemotingConfiguration.Configure(Process.GetCurrentProcess().MainModule.FileName + ".config", false);
                if (!HuanYingSiYuanClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                if (!TianTiClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                if (!YongZheZhanChangClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                if (!KFCopyRpcClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                /*
                 * if (!MoRiJudgeClient.getInstance().initialize(coreInterface))
                 * {
                 *  return false;
                 * }
                 *
                 * if (!ElementWarClient.getInstance().initialize(coreInterface))
                 * {
                 *  return false;
                 * }*/

                if (!SpreadClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                if (!AllyClient.getInstance().initialize(coreInterface))
                {
                    return(false);
                }

                GlobalEventSource.getInstance().registerListener((int)EventTypes.PlayerLogout, getInstance());
            }
            catch (System.Exception ex)
            {
                return(false);
            }

            return(true);
        }
Пример #15
0
        public bool ProcessGetYongZheZhanChangStateCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                // 根据策划需求,任何时候来查询状态,领奖状态具有最高优先级
                string awardsInfo = Global.GetRoleParamByName(client, RoleParamName.YongZheZhanChangAwards);
                if (!string.IsNullOrEmpty(awardsInfo))
                {
                    int lastGroupId = 0;
                    int score       = 0;
                    int success     = 0;
                    ConfigParser.ParseStrInt3(awardsInfo, ref lastGroupId, ref success, ref score);
                    if (lastGroupId > 0)
                    {
                        YongZheZhanChangSceneInfo lastSceneItem = null;
                        if (RuntimeData.SceneDataDict.TryGetValue(lastGroupId, out lastSceneItem))
                        {
                            // 通知有奖励可以领取
                            client.sendCmd(nID, (int)YongZheZhanChangGameStates.Awards);
                            return(true);
                        }
                    }
                }

                YongZheZhanChangSceneInfo  sceneItem = null;
                YongZheZhanChangGameStates timeState = YongZheZhanChangGameStates.None;
                int result  = (int)YongZheZhanChangGameStates.None;
                int groupId = 0;
                RuntimeData.RoleId2JoinGroup.TryGetValue(client.ClientData.RoleID, out groupId);

                CheckCondition(client, ref sceneItem, ref timeState);
                if (groupId > 0)
                {
                    if (timeState >= YongZheZhanChangGameStates.SignUp && timeState <= YongZheZhanChangGameStates.Wait)
                    {
                        int state = YongZheZhanChangClient.getInstance().GetKuaFuRoleState(client.ClientData.RoleID);
                        if (state >= (int)KuaFuRoleStates.SignUp)
                        {
                            result = (int)YongZheZhanChangGameStates.Wait;
                        }
                        else
                        {
                            result = (int)KuaFuBossGameStates.NotJoin;
                        }
                    }
                    else if (timeState == YongZheZhanChangGameStates.Start)
                    {
                        if (RuntimeData.RoleIdKuaFuLoginDataDict.ContainsKey(client.ClientData.RoleID))
                        {
                            result = (int)YongZheZhanChangGameStates.Start;
                        }
                    }
                }
                else
                {
                    if (timeState == YongZheZhanChangGameStates.SignUp)
                    {
                        result = (int)YongZheZhanChangGameStates.SignUp;
                    }
                    else if (timeState == YongZheZhanChangGameStates.Wait || timeState == YongZheZhanChangGameStates.Start)
                    {
                        // 未参加本次活动
                        result = (int)YongZheZhanChangGameStates.NotJoin;
                    }
                }

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

            return(false);
        }
Пример #16
0
        public bool ProcessKuaFuMapEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int result     = StdErrorCode.Error_Success_No_Info;
                int toMapCode  = Global.SafeConvertToInt32(cmdParams[0]);
                int line       = Global.SafeConvertToInt32(cmdParams[1]);
                int toBoss     = 0;
                int teleportId = 0;
                if (cmdParams.Length >= 3)
                {
                    toBoss = Global.SafeConvertToInt32(cmdParams[2]);
                }
                if (cmdParams.Length >= 4)
                {
                    teleportId = Global.SafeConvertToInt32(cmdParams[3]);
                }

                do
                {
                    if (!KuaFuMapManager.getInstance().IsKuaFuMap(toMapCode))
                    {
                        result = StdErrorCode.Error_Operation_Denied;
                        break;
                    }

                    if (!Global.CanEnterMap(client, toMapCode) ||
                        toMapCode == client.ClientData.MapCode)
                    {
                        result = StdErrorCode.Error_Operation_Denied;
                        break;
                    }

                    // 新增需求,跨服主线地图能够直接进入另一个跨服主线地图
                    if (!KuaFuMapManager.getInstance().IsKuaFuMap(client.ClientData.MapCode) &&
                        !CheckMap(client))
                    {
                        result = StdErrorCode.Error_Denied_In_Current_Map;
                        break;
                    }

                    if (!IsGongNengOpened(client))
                    {
                        result = StdErrorCode.Error_Operation_Denied;
                        break;
                    }

                    KuaFuLineData kuaFuLineData;
                    if (!RuntimeData.LineMap2KuaFuLineDataDict.TryGetValue(new IntPairKey(line, toMapCode), out kuaFuLineData))
                    {
                        result = StdErrorCode.Error_Operation_Denied;
                        break;
                    }

                    if (kuaFuLineData.OnlineCount >= kuaFuLineData.MaxOnlineCount)
                    {
                        result = StdErrorCode.Error_Server_Connections_Limit;
                        break;
                    }

                    int fromMapCode = client.ClientData.MapCode;
                    if (teleportId > 0)
                    {
                        // 要通过传送点进入跨服主线,必须检测是否能真正使用这个传送点
                        GameMap fromGameMap = null;
                        if (!GameManager.MapMgr.DictMaps.TryGetValue(fromMapCode, out fromGameMap))
                        {
                            result = StdErrorCode.Error_Config_Fault;
                            break;
                        }

                        MapTeleport mapTeleport = null;
                        if (!fromGameMap.MapTeleportDict.TryGetValue(teleportId, out mapTeleport) || mapTeleport.ToMapID != toMapCode)
                        {
                            result = StdErrorCode.Error_Operation_Denied;
                            break;
                        }

                        // 这里要增加一个位置判断,玩家是否在传送点附近, CMD_SPR_MAPCHANGE 里面没有判断,这里先放宽松一点
                        if (Global.GetTwoPointDistance(client.CurrentPos, new Point(mapTeleport.X, mapTeleport.Y)) > 800)
                        {
                            result = StdErrorCode.Error_Too_Far;
                            break;
                        }
                    }

                    int kuaFuServerId = YongZheZhanChangClient.getInstance().EnterKuaFuMap(client.ClientData.RoleID, kuaFuLineData.MapCode, kuaFuLineData.Line, client.ServerId, Global.GetClientKuaFuServerLoginData(client));
                    if (kuaFuServerId > 0)
                    {
                        // 废弃这个判断,两个跨服主线地图配在同一台服务器上,仍然统一短线重连<客户端并不需要知道没有跨到另一个服务器>
                        if (false && kuaFuServerId == GameManager.ServerId)
                        {
                            Global.GotoMap(client, toMapCode);
                        }
                        else
                        {
                            // 使用传送点,不扣金币
                            int needMoney = teleportId > 0 ? 0 : Global.GetMapTransNeedMoney(toMapCode);
                            if (Global.GetTotalBindTongQianAndTongQianVal(client) < needMoney)
                            {
                                GameManager.ClientMgr.NotifyImportantMsg(client, StringUtil.substitute(Global.GetLang("金币不足【{0}】,无法传送到【{1}】!"), needMoney, Global.GetMapName(toMapCode)), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, (int)HintErrCodeTypes.NoTongQian);
                                result = StdErrorCode.Error_JinBi_Not_Enough;
                            }
                            else
                            {
                                int[] enterFlags = new int[(int)EKuaFuMapEnterFlag.Max];
                                enterFlags[(int)EKuaFuMapEnterFlag.FromMapCode]  = fromMapCode;
                                enterFlags[(int)EKuaFuMapEnterFlag.FromTeleport] = teleportId;
                                enterFlags[(int)EKuaFuMapEnterFlag.TargetBossId] = toBoss;
                                Global.SaveRoleParamsIntListToDB(client, new List <int>(enterFlags), RoleParamName.EnterKuaFuMapFlag, true);

                                GlobalNew.RecordSwitchKuaFuServerLog(client);
                                client.sendCmd((int)TCPGameServerCmds.CMD_SPR_KF_SWITCH_SERVER, Global.GetClientKuaFuServerLoginData(client));
                            }
                        }
                    }
                    else
                    {
                        Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                        result = kuaFuServerId;
                    }
                } while (false);

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

            return(false);
        }
Пример #17
0
        private void TimerProc(object sender, EventArgs e)
        {
            bool     notifyPrepareGame = false;
            bool     notifyEnterGame   = false;
            DateTime now = TimeUtil.NowDateTime();

            lock (RuntimeData.Mutex)
            {
                bool bInActiveTime = false;

                YongZheZhanChangSceneInfo sceneItem = RuntimeData.SceneDataDict.Values.FirstOrDefault();
                for (int i = 0; i < sceneItem.TimePoints.Count - 1; i += 2)
                {
                    if ((int)now.DayOfWeek == sceneItem.TimePoints[i].Days &&
                        now.TimeOfDay.TotalSeconds >= sceneItem.SecondsOfDay[i] - sceneItem.SignUpStartSecs &&
                        now.TimeOfDay.TotalSeconds <= sceneItem.SecondsOfDay[i + 1])
                    {
                        double secs = sceneItem.SecondsOfDay[i] - now.TimeOfDay.TotalSeconds;
                        bInActiveTime = true;

                        if (!RuntimeData.PrepareGame)
                        {
                            if (secs > 0 && secs < sceneItem.SignUpEndSecs / 2)
                            {
                                LogManager.WriteLog(LogTypes.Error, "报名截止5分钟时间过半,通知跨服中心开始分配所有报名玩家的活动场次");

                                // 通知跨服中心开始准备副本
                                RuntimeData.PrepareGame = true;
                                notifyPrepareGame       = true;
                                break;
                            }
                        }
                        else
                        {
                            if (secs < 0)
                            {
                                LogManager.WriteLog(LogTypes.Error, "报名截止状态结束,可以通知已分配到场次的玩家进入游戏了");

                                // 首次到达进入时间,通知进入,并重置PrepareGame状态,然后以后的循环走上面的if
                                // 但是上面的if在本次活动期间就相当于空转
                                notifyEnterGame         = true;
                                RuntimeData.PrepareGame = false;
                                break;
                            }
                        }
                    }
                }

                if (!bInActiveTime)
                {
                    if (RuntimeData.RoleIdKuaFuLoginDataDict.Count > 0)
                    {
                        RuntimeData.RoleIdKuaFuLoginDataDict.Clear();
                    }

                    if (RuntimeData.RoleId2JoinGroup.Count > 0)
                    {
                        RuntimeData.RoleId2JoinGroup.Clear();
                    }
                }
            }

            if (notifyPrepareGame)
            {
                LogManager.WriteLog(LogTypes.Error, "通知跨服中心开始分配所有报名玩家的活动场次");

                // GameServer和KF-GameServer都会通知准备游戏,所以中心要防止状态回滚
                string cmd = string.Format("{0} {1} {2}", GameStates.CommandName, GameStates.PrepareGame, (int)GameTypes.YongZheZhanChang);
                YongZheZhanChangClient.getInstance().ExecuteCommand(cmd);
            }

            if (notifyEnterGame)
            {
                lock (RuntimeData.Mutex)
                {
                    foreach (var kuaFuServerLoginData in RuntimeData.RoleIdKuaFuLoginDataDict.Values)
                    {
                        RuntimeData.NotifyRoleEnterDict.Add(kuaFuServerLoginData.RoleId, kuaFuServerLoginData);
                    }
                }
            }

            //通知报名的玩家进入活动,每次只通知一部分(按RoleID除以15的余数),防止所有玩家一起进入给服务器造成压力.
            List <KuaFuServerLoginData> list = null;

            lock (RuntimeData.Mutex)
            {
                int count = RuntimeData.NotifyRoleEnterDict.Count;
                if (count > 0)
                {
                    list = new List <KuaFuServerLoginData>();
                    KuaFuServerLoginData kuaFuServerLoginData = RuntimeData.NotifyRoleEnterDict.First().Value;
                    foreach (var kv in RuntimeData.NotifyRoleEnterDict)
                    {
                        if ((kv.Key % 15) == (kuaFuServerLoginData.RoleId % 15))
                        {
                            list.Add(kv.Value);
                        }
                    }

                    foreach (var data in list)
                    {
                        RuntimeData.NotifyRoleEnterDict.Remove(data.RoleId);
                    }
                }
            }

            if (null != list)
            {
                foreach (var kuaFuServerLoginData in list)
                {
                    GameClient client = GameManager.ClientMgr.FindClient(kuaFuServerLoginData.RoleId);
                    if (null != client)
                    {
                        client.sendCmd((int)TCPGameServerCmds.CMD_SPR_YONGZHEZHANCHANG_ENTER, 1);
                    }
                }
            }
        }
Пример #18
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);
 }
Пример #19
0
        public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            bool result;

            if (sceneType == SceneUIClasses.KuaFuBoss)
            {
                int            fuBenSeqId = copyMap.FuBenSeqID;
                int            mapCode    = copyMap.MapCode;
                int            roleId     = client.ClientData.RoleID;
                int            gameId     = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                DateTime       now        = TimeUtil.NowDateTime();
                KuaFuBossScene scene      = null;
                lock (this.RuntimeData.Mutex)
                {
                    if (!this.SceneDict.TryGetValue(fuBenSeqId, out scene))
                    {
                        KuaFuBossSceneInfo        sceneInfo = null;
                        YongZheZhanChangFuBenData fuBenData;
                        if (!this.RuntimeData.FuBenItemData.TryGetValue(gameId, out fuBenData))
                        {
                            LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的跨服副本数据,GameID:" + gameId, null, true);
                        }
                        if (!this.RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo))
                        {
                            LogManager.WriteLog(LogTypes.Error, "跨服Boss没有为副本找到对应的档位数据,ID:" + fuBenData.GroupIndex, null, true);
                        }
                        scene         = new KuaFuBossScene();
                        scene.CopyMap = copyMap;
                        scene.CleanAllInfo();
                        scene.GameId         = gameId;
                        scene.m_nMapCode     = mapCode;
                        scene.CopyMapId      = copyMap.CopyMapID;
                        scene.FuBenSeqId     = fuBenSeqId;
                        scene.m_nPlarerCount = 1;
                        scene.SceneInfo      = sceneInfo;
                        DateTime startTime = now.Date.Add(this.GetStartTime(sceneInfo.Id));
                        scene.StartTimeTicks             = startTime.Ticks / 10000L;
                        scene.GameStatisticalData.GameId = gameId;
                        this.SceneDict[fuBenSeqId]       = scene;
                        List <BattleDynamicMonsterItem> dynMonsterList;
                        if (this.RuntimeData.SceneDynMonsterDict.TryGetValue(mapCode, out dynMonsterList))
                        {
                            scene.DynMonsterList = dynMonsterList;
                        }
                    }
                    else
                    {
                        scene.m_nPlarerCount++;
                    }
                    copyMap.IsKuaFuCopy = true;
                    copyMap.SetRemoveTicks(TimeUtil.NOW() + (long)(scene.SceneInfo.TotalSecs * 1000));
                }
                GameMap gameMap = null;
                if (GameManager.MapMgr.DictMaps.TryGetValue(copyMap.MapCode, out gameMap))
                {
                    scene.MapGridWidth  = gameMap.MapGridWidth;
                    scene.MapGridHeight = gameMap.MapGridHeight;
                }
                YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, 5, 0, 0);
                result = true;
            }
            else
            {
                result = false;
            }
            return(result);
        }
Пример #20
0
 public bool startup()
 {
     try
     {
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("HuanYingSiYuanClient.TimerProc", new EventHandler(HuanYingSiYuanClient.getInstance().TimerProc)), 2000, 2857);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("TianTiClient.TimerProc", new EventHandler(TianTiClient.getInstance().TimerProc)), 2000, 2857);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("YongZheZhanChangClient.TimerProc", new EventHandler(YongZheZhanChangClient.getInstance().TimerProc)), 2000, 3389);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KFCopyRpcClient.TimerProc", new EventHandler(KFCopyRpcClient.getInstance().TimerProc)), 2000, 2732);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("SpreadClient.TimerProc", new EventHandler(SpreadClient.getInstance().TimerProc)), 2000, 4285);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("AllyClient.TimerProc", new EventHandler(AllyClient.getInstance().TimerProc)), 2000, 5714);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("IPStatisticsClient.TimerProc", new EventHandler(IPStatisticsClient.getInstance().TimerProc)), 2000, 5000);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("JunTuanClient.TimerProc", new EventHandler(JunTuanClient.getInstance().TimerProc)), 2000, 2500);
         ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KuaFuWorldClient.TimerProc", new EventHandler(KuaFuWorldClient.getInstance().TimerProc)), 2000, 3389);
         lock (this.RuntimeData.Mutex)
         {
             if (null == this.RuntimeData.BackGroundThread)
             {
                 this.RuntimeData.BackGroundThread = new Thread(new ThreadStart(this.BackGroudThreadProc));
                 this.RuntimeData.BackGroundThread.IsBackground = true;
                 this.RuntimeData.BackGroundThread.Start();
             }
         }
     }
     catch (Exception ex)
     {
         return(false);
     }
     return(true);
 }
Пример #21
0
        public bool startup()
        {
            try
            {
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("HuanYingSiYuanClient.TimerProc", HuanYingSiYuanClient.getInstance().TimerProc), 2000, 2857);
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("TianTiClient.TimerProc", TianTiClient.getInstance().TimerProc), 2000, 1357);
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("YongZheZhanChangClient.TimerProc", YongZheZhanChangClient.getInstance().TimerProc), 2000, 3389);
                //ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("MoRiJudgeClient.TimerProc", MoRiJudgeClient.getInstance().TimerProc), 2000, 1732);
                //ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("ElementWarClient.TimerProc", ElementWarClient.getInstance().TimerProc), 2000, 1732);
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("KFCopyRpcClient.TimerProc", KFCopyRpcClient.getInstance().TimerProc), 2000, 1732);
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("SpreadClient.TimerProc", SpreadClient.getInstance().TimerProc), 2000, 1732);
                ScheduleExecutor2.Instance.scheduleExecute(new NormalScheduleTask("AllyClient.TimerProc", AllyClient.getInstance().TimerProc), 2000, 1732);

                lock (RuntimeData.Mutex)
                {
                    if (null == RuntimeData.BackGroundThread)
                    {
                        RuntimeData.BackGroundThread = new Thread(BackGroudThreadProc);
                        RuntimeData.BackGroundThread.IsBackground = true;
                        RuntimeData.BackGroundThread.Start();
                    }
                }
            }
            catch (System.Exception ex)
            {
                return(false);
            }

            return(true);
        }
Пример #22
0
        public bool OnUserLogin(TMSKSocket socket, int verSign, string userID, string userName, string lastTime, string userToken, string isadult, string signCode, int serverId = 0, string ip = null, int port = 0, int roleId = 0, int gameType = 0, long gameId = 0L)
        {
            KuaFuServerLoginData kuaFuServerLoginData = socket.ClientKuaFuServerLoginData;

            if (serverId > 0 && ip != null)
            {
                kuaFuServerLoginData.ServerId   = serverId;
                kuaFuServerLoginData.ServerIp   = ip;
                kuaFuServerLoginData.ServerPort = port;
                kuaFuServerLoginData.RoleId     = roleId;
                kuaFuServerLoginData.GameType   = gameType;
                kuaFuServerLoginData.GameId     = gameId;
            }
            if (kuaFuServerLoginData.WebLoginToken == null)
            {
                kuaFuServerLoginData.WebLoginToken = new WebLoginToken
                {
                    VerSign  = verSign,
                    UserID   = userID,
                    UserName = userName,
                    LastTime = lastTime,
                    Isadult  = isadult,
                    SignCode = signCode
                };
            }
            if (roleId > 0 && serverId > 0 && gameType > 0)
            {
                if (GameManager.ServerLineID != GameManager.ServerId)
                {
                    LogManager.WriteLog(LogTypes.Error, "GameManager.ServerLineID未配置,禁止跨服登录", null, true);
                    return(false);
                }
                if (string.IsNullOrEmpty(ip) || port <= 0 || gameType <= 0 || gameId <= 0L)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色{0}未能在服务器列表中找本服务器,作为跨服服务器", kuaFuServerLoginData.RoleId), null, true);
                    return(false);
                }
                if (!KuaFuManager.getInstance().CanKuaFuLogin())
                {
                    return(false);
                }
                socket.ServerId = serverId;
                switch (gameType)
                {
                case 1:
                    socket.IsKuaFuLogin = HuanYingSiYuanClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 2:
                    socket.IsKuaFuLogin = TianTiClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 5:
                case 6:
                case 15:
                    socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 7:
                    socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData);
                    goto IL_399;

                case 8:
                    socket.IsKuaFuLogin = SingletonTemplate <CopyTeamManager> .Instance().HandleKuaFuLogin(kuaFuServerLoginData);

                    goto IL_399;

                case 10:
                    socket.IsKuaFuLogin = LangHunLingYuManager.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData);
                    goto IL_399;

                case 12:
                    socket.IsKuaFuLogin = SingletonTemplate <ZhengBaManager> .Instance().CanKuaFuLogin(kuaFuServerLoginData);

                    goto IL_399;

                case 13:
                    socket.IsKuaFuLogin = SingletonTemplate <CoupleArenaManager> .Instance().CanKuaFuLogin(kuaFuServerLoginData);

                    goto IL_399;

                case 17:
                    socket.IsKuaFuLogin = true;
                    goto IL_399;

                case 19:
                case 20:
                    socket.IsKuaFuLogin = KarenBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 22:
                    socket.IsKuaFuLogin = true;
                    goto IL_399;

                case 24:
                    socket.IsKuaFuLogin = BangHuiMatchManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 25:
                    socket.IsKuaFuLogin = KuaFuLueDuoManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 27:
                case 28:
                case 29:
                    socket.IsKuaFuLogin = true;
                    goto IL_399;

                case 30:
                    socket.IsKuaFuLogin = CompBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 31:
                    socket.IsKuaFuLogin = CompMineManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 32:
                    socket.IsKuaFuLogin = true;
                    goto IL_399;

                case 34:
                    socket.IsKuaFuLogin = TianTi5v5Manager.getInstance().CanKuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;

                case 36:
                    socket.IsKuaFuLogin = ZorkBattleManager.getInstance().KuaFuLogin(kuaFuServerLoginData);
                    goto IL_399;
                }
                EventObjectEx_I1 eventObject = new EventObjectEx_I1(kuaFuServerLoginData, 61, gameType);
                if (GlobalEventSource4Scene.getInstance().fireEvent(eventObject, 10007))
                {
                    socket.IsKuaFuLogin = eventObject.Result;
                }
IL_399:
                string dbIp = "";
                int    dbPort    = 0;
                string logDbIp   = "";
                int    logDbPort = 0;
                if (kuaFuServerLoginData.ips != null && kuaFuServerLoginData.ports != null)
                {
                    dbIp      = kuaFuServerLoginData.ips[0];
                    logDbIp   = kuaFuServerLoginData.ips[1];
                    dbPort    = kuaFuServerLoginData.ports[0];
                    logDbPort = kuaFuServerLoginData.ports[1];
                }
                else if (!KuaFuManager.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("GameType{0}未能找到角色{1}的原服务器的服务器IP和端口", gameType, kuaFuServerLoginData.RoleId), null, true);
                    return(false);
                }
                if (socket.IsKuaFuLogin && serverId != 0)
                {
                    if (serverId != 0)
                    {
                        if (!this.InitGameDbConnection(serverId, dbIp, dbPort, logDbIp, logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("连接角色{0}的原服务器的GameDBServer和LogDBServer失败", kuaFuServerLoginData.RoleId), null, true);
                            return(false);
                        }
                    }
                    return(socket.IsKuaFuLogin);
                }
            }
            else
            {
                if (GameManager.IsKuaFuServer)
                {
                    LogManager.WriteLog(LogTypes.Error, "跨服服务器禁止非跨服登录,请检查是否将LineID配置,原服应当为1", null, true);
                    return(false);
                }
                if (KuaFuManager.getInstance().LocalLogin(userID))
                {
                    kuaFuServerLoginData.RoleId   = 0;
                    kuaFuServerLoginData.GameId   = 0L;
                    kuaFuServerLoginData.GameType = 0;
                    kuaFuServerLoginData.ServerId = 0;
                    socket.ServerId     = 0;
                    socket.IsKuaFuLogin = false;
                    return(true);
                }
            }
            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的跨服活动或副本信息", kuaFuServerLoginData.RoleId), null, true);
            return(false);
        }
Пример #23
0
        private void TimerProc(object sender, EventArgs e)
        {
            bool     notifyPrepareGame = false;
            bool     notifyEnterGame   = false;
            DateTime now = TimeUtil.NowDateTime();

            lock (this.RuntimeData.Mutex)
            {
                bool bInActiveTime           = false;
                KuaFuBossSceneInfo sceneItem = this.RuntimeData.SceneDataDict.Values.FirstOrDefault <KuaFuBossSceneInfo>();
                for (int i = 0; i < sceneItem.TimePoints.Count - 1; i += 2)
                {
                    if (now.DayOfWeek == (DayOfWeek)sceneItem.TimePoints[i].Days && now.TimeOfDay.TotalSeconds >= sceneItem.SecondsOfDay[i] - (double)sceneItem.SignUpStartSecs && now.TimeOfDay.TotalSeconds <= sceneItem.SecondsOfDay[i + 1])
                    {
                        double secs = sceneItem.SecondsOfDay[i] - now.TimeOfDay.TotalSeconds;
                        bInActiveTime = true;
                        if (!this.RuntimeData.PrepareGame)
                        {
                            if (secs > 0.0 && secs < (double)(sceneItem.SignUpEndSecs / 2))
                            {
                                LogManager.WriteLog(LogTypes.Error, "报名截止5分钟时间过半,通知跨服中心开始分配所有报名玩家的活动场次", null, true);
                                this.RuntimeData.PrepareGame = true;
                                notifyPrepareGame            = true;
                                break;
                            }
                        }
                        else if (secs < 0.0)
                        {
                            LogManager.WriteLog(LogTypes.Error, "报名截止状态结束,可以通知已分配到场次的玩家进入游戏了", null, true);
                            notifyEnterGame = true;
                            this.RuntimeData.PrepareGame = false;
                            break;
                        }
                    }
                }
                if (!bInActiveTime)
                {
                    if (this.RuntimeData.RoleIdKuaFuLoginDataDict.Count > 0)
                    {
                        this.RuntimeData.RoleIdKuaFuLoginDataDict.Clear();
                    }
                    if (this.RuntimeData.RoleId2JoinGroup.Count > 0)
                    {
                        this.RuntimeData.RoleId2JoinGroup.Clear();
                    }
                }
            }
            if (notifyPrepareGame)
            {
                LogManager.WriteLog(LogTypes.Error, "通知跨服中心开始分配所有报名玩家的活动场次", null, true);
                string cmd = string.Format("{0} {1} {2}", "GameState", 2, 6);
                YongZheZhanChangClient.getInstance().ExecuteCommand(cmd);
            }
            if (notifyEnterGame)
            {
                lock (this.RuntimeData.Mutex)
                {
                    foreach (KuaFuServerLoginData kuaFuServerLoginData in this.RuntimeData.RoleIdKuaFuLoginDataDict.Values)
                    {
                        this.RuntimeData.NotifyRoleEnterDict.Add(kuaFuServerLoginData.RoleId, kuaFuServerLoginData);
                    }
                }
            }
            List <KuaFuServerLoginData> list = null;

            lock (this.RuntimeData.Mutex)
            {
                int count = this.RuntimeData.NotifyRoleEnterDict.Count;
                if (count > 0)
                {
                    list = new List <KuaFuServerLoginData>();
                    KuaFuServerLoginData kuaFuServerLoginData = this.RuntimeData.NotifyRoleEnterDict.First <KeyValuePair <int, KuaFuServerLoginData> >().Value;
                    foreach (KeyValuePair <int, KuaFuServerLoginData> kv in this.RuntimeData.NotifyRoleEnterDict)
                    {
                        if (kv.Key % 15 == kuaFuServerLoginData.RoleId % 15)
                        {
                            list.Add(kv.Value);
                        }
                    }
                    foreach (KuaFuServerLoginData data in list)
                    {
                        this.RuntimeData.NotifyRoleEnterDict.Remove(data.RoleId);
                    }
                }
            }
            if (null != list)
            {
                foreach (KuaFuServerLoginData kuaFuServerLoginData in list)
                {
                    GameClient client = GameManager.ClientMgr.FindClient(kuaFuServerLoginData.RoleId);
                    if (null != client)
                    {
                        client.sendCmd <int>(1121, 1, false);
                    }
                }
            }
        }
Пример #24
0
        public bool ProcessKuaFuMapEnterCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams)
        {
            try
            {
                int result     = 0;
                int toMapCode  = Global.SafeConvertToInt32(cmdParams[0]);
                int line       = Global.SafeConvertToInt32(cmdParams[1]);
                int toBoss     = 0;
                int teleportId = 0;
                if (cmdParams.Length >= 3)
                {
                    toBoss = Global.SafeConvertToInt32(cmdParams[2]);
                }
                if (cmdParams.Length >= 4)
                {
                    teleportId = Global.SafeConvertToInt32(cmdParams[3]);
                }
                KuaFuLineData kuaFuLineData;
                if (!KuaFuMapManager.getInstance().IsKuaFuMap(toMapCode))
                {
                    result = -12;
                }
                else if (!this.RuntimeData.LineMap2KuaFuLineDataDict.TryGetValue(new IntPairKey(line, toMapCode), out kuaFuLineData))
                {
                    result = -12;
                }
                else if (!Global.CanEnterMap(client, toMapCode) || (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType != 1))
                {
                    result = -12;
                }
                else
                {
                    if (toMapCode == client.ClientData.MapCode && kuaFuLineData.MapType == 1)
                    {
                        List <KuaFuLineData> list = KuaFuWorldClient.getInstance().GetKuaFuLineDataList(toMapCode) as List <KuaFuLineData>;
                        if (null == list)
                        {
                            result = -12;
                            goto IL_67F;
                        }
                        KuaFuLineData currentLineData = list.Find((KuaFuLineData x) => x.ServerId == GameManager.KuaFuServerId);
                        if (currentLineData != null && currentLineData.Line == kuaFuLineData.Line)
                        {
                            result = -4011;
                            goto IL_67F;
                        }
                    }
                    if (!KuaFuMapManager.getInstance().IsKuaFuMap(client.ClientData.MapCode) && !this.CheckMap(client))
                    {
                        result = -21;
                    }
                    else if (!this.IsGongNengOpened(client, false))
                    {
                        result = -12;
                    }
                    else if (kuaFuLineData.OnlineCount >= kuaFuLineData.MaxOnlineCount)
                    {
                        result = -100;
                    }
                    else
                    {
                        int fromMapCode = client.ClientData.MapCode;
                        if (teleportId > 0)
                        {
                            GameMap fromGameMap = null;
                            if (!GameManager.MapMgr.DictMaps.TryGetValue(fromMapCode, out fromGameMap))
                            {
                                result = -3;
                                goto IL_67F;
                            }
                            MapTeleport mapTeleport = null;
                            if (!fromGameMap.MapTeleportDict.TryGetValue(teleportId, out mapTeleport) || mapTeleport.ToMapID != toMapCode)
                            {
                                result = -12;
                                goto IL_67F;
                            }
                            if (Global.GetTwoPointDistance(client.CurrentPos, new Point((double)mapTeleport.X, (double)mapTeleport.Y)) > 800.0)
                            {
                                result = -301;
                                goto IL_67F;
                            }
                        }
                        KuaFuServerLoginData kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client);
                        int kuaFuServerId;
                        if (kuaFuLineData.MapType == 1)
                        {
                            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Reborn, true))
                            {
                                result = -400;
                                goto IL_67F;
                            }
                            string signToken;
                            string signKey;
                            int    rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey);
                            if (rt == -4010)
                            {
                                KuaFuWorldRoleData kuaFuWorldRoleData = new KuaFuWorldRoleData
                                {
                                    LocalRoleID = client.ClientData.LocalRoleID,
                                    UserID      = client.strUserID,
                                    WorldRoleID = client.ClientData.WorldRoleID,
                                    Channel     = client.ClientData.Channel,
                                    PTID        = client.ClientData.ServerPTID,
                                    ServerID    = client.ServerId,
                                    ZoneID      = client.ClientData.ZoneID
                                };
                                rt = KuaFuWorldClient.getInstance().RegPTKuaFuRoleData(ref kuaFuWorldRoleData);
                                rt = KuaFuWorldClient.getInstance().EnterPTKuaFuMap(client.ServerId, client.ClientData.LocalRoleID, client.ClientData.ServerPTID, kuaFuLineData.MapCode, kuaFuLineData.Line, kuaFuServerLoginData, out signToken, out signKey);
                            }
                            if (rt < 0)
                            {
                                result = rt;
                                goto IL_67F;
                            }
                            KFRebornRoleData rebornRoleData = KuaFuWorldClient.getInstance().Reborn_GetRebornRoleData(client.ClientData.ServerPTID, client.ClientData.LocalRoleID);
                            if (null == rebornRoleData)
                            {
                                result = KuaFuWorldClient.getInstance().Reborn_RoleReborn(client.ClientData.ServerPTID, client.ClientData.LocalRoleID, client.ClientData.RoleName, client.ClientData.RebornLevel);
                                if (result < 0)
                                {
                                    goto IL_67F;
                                }
                                LogManager.WriteLog(LogTypes.Analysis, string.Format("Reborn_RoleReborn ptId={0} roleId={1} roleName={2} rebornLevel={3}", new object[]
                                {
                                    client.ClientData.ServerPTID,
                                    client.ClientData.LocalRoleID,
                                    client.ClientData.RoleName,
                                    client.ClientData.RebornLevel
                                }), null, true);
                            }
                            kuaFuServerLoginData.PTID       = client.ClientData.ServerPTID;
                            kuaFuServerLoginData.RoleId     = client.ClientData.LocalRoleID;
                            kuaFuServerLoginData.SignToken  = signToken;
                            kuaFuServerLoginData.TempRoleID = rt;
                            kuaFuServerLoginData.SignCode   = MD5Helper.get_md5_string(kuaFuServerLoginData.SignDataString() + signKey).ToLower();
                            kuaFuServerId = kuaFuServerLoginData.TargetServerID;
                        }
                        else
                        {
                            kuaFuServerLoginData.SignCode = null;
                            kuaFuServerId = YongZheZhanChangClient.getInstance().EnterKuaFuMap(client.ClientData.LocalRoleID, kuaFuLineData.MapCode, kuaFuLineData.Line, client.ServerId, Global.GetClientKuaFuServerLoginData(client));
                        }
                        kuaFuServerLoginData.Line = line;
                        if (kuaFuServerId > 0)
                        {
                            bool flag      = 0 == 0;
                            int  needMoney = (teleportId > 0) ? 0 : Global.GetMapTransNeedMoney(toMapCode);
                            if (Global.GetTotalBindTongQianAndTongQianVal(client) < needMoney)
                            {
                                GameManager.ClientMgr.NotifyImportantMsg(client, StringUtil.substitute(GLang.GetLang(171, new object[0]), new object[]
                                {
                                    needMoney,
                                    Global.GetMapName(toMapCode)
                                }), GameInfoTypeIndexes.Error, ShowGameInfoTypes.ErrAndBox, 27);
                                result = -9;
                                Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                            }
                            else
                            {
                                int[] enterFlags = new int[5];
                                enterFlags[0] = fromMapCode;
                                enterFlags[1] = teleportId;
                                enterFlags[2] = toBoss;
                                Global.SaveRoleParamsIntListToDB(client, new List <int>(enterFlags), "EnterKuaFuMapFlag", true);
                                GlobalNew.RecordSwitchKuaFuServerLog(client);
                                client.sendCmd <KuaFuServerLoginData>(14000, Global.GetClientKuaFuServerLoginData(client), false);
                            }
                        }
                        else
                        {
                            Global.GetClientKuaFuServerLoginData(client).RoleId = 0;
                            result = kuaFuServerId;
                        }
                    }
                }
IL_67F:
                client.sendCmd <int>(nID, result, false);
                return(true);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false);
            }
            return(false);
        }
Пример #25
0
 /// <summary>
 /// 玩家离开血色堡垒
 /// </summary>
 public void OnLogout(GameClient client)
 {
     YongZheZhanChangClient.getInstance().ChangeRoleState(client.ClientData.RoleID, KuaFuRoleStates.StartGame);
 }
Пример #26
0
        public bool OnUserLogin(TMSKSocket socket, int verSign, string userID, string userName, string lastTime, string userToken, string isadult, string signCode, int serverId, string ip, int port, int roleId, int gameType, long gameId)
        {
            KuaFuServerLoginData kuaFuServerLoginData = socket.ClientKuaFuServerLoginData;

            kuaFuServerLoginData.ServerId   = serverId;
            kuaFuServerLoginData.ServerIp   = ip;
            kuaFuServerLoginData.ServerPort = port;
            kuaFuServerLoginData.RoleId     = roleId;
            kuaFuServerLoginData.GameType   = gameType;
            kuaFuServerLoginData.GameId     = gameId;

            if (kuaFuServerLoginData.WebLoginToken == null)
            {
                kuaFuServerLoginData.WebLoginToken = new WebLoginToken()
                {
                    VerSign  = verSign,
                    UserID   = userID,
                    UserName = userName,
                    LastTime = lastTime,
                    Isadult  = isadult,
                    SignCode = signCode,
                };
            }

            if (roleId > 0)
            {
                // 跨服服务器的两个ID相等,如果不想等,则配置错误;
                // 如果想要去掉这个限制,允许区游戏服务器兼作跨服活动服务器(混合使用),必须先修改GameManager.ServerLineID相关的逻辑,使其可以兼容
                // 完成修改前,这个限制不可取消.
                if (GameManager.ServerLineID != GameManager.ServerId)
                {
                    LogManager.WriteLog(LogTypes.Error, "GameManager.ServerLineID未配置,禁止跨服登录");
                    return(false);
                }

                //跨服登录,限制rid
                if (!string.IsNullOrEmpty(ip) && port > 0 && gameType > 0 && gameId > 0 /* && HuanYingSiYuanClient.getInstance().CanKuaFuLogin()*/)
                {
                    string dbIp      = "";
                    int    dbPort    = 0;
                    string logDbIp   = "";
                    int    logDbPort = 0;
                    socket.ServerId = serverId;
                    switch (gameType)
                    {
                    case (int)GameTypes.HuanYingSiYuan:
                    {
                        if (!HuanYingSiYuanClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = HuanYingSiYuanClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                        if (!HuanYingSiYuanClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.TianTi:
                    {
                        if (!TianTiClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = TianTiClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                        if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.KingOfBattle:
                    case (int)GameTypes.YongZheZhanChang:
                    case (int)GameTypes.KuaFuBoss:
                    {
                        if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().KuaFuLogin(kuaFuServerLoginData);
                        if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.KuaFuMap:
                    {
                        if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = YongZheZhanChangClient.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData);
                        if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.LangHunLingYu:
                    {
                        if (!YongZheZhanChangClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = LangHunLingYuManager.getInstance().CanEnterKuaFuMap(kuaFuServerLoginData);
                        if (!YongZheZhanChangClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.KuaFuCopy:
                    {
                        if (!KFCopyRpcClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = CopyTeamManager.Instance().HandleKuaFuLogin(kuaFuServerLoginData);
                        if (!KFCopyRpcClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.ZhengBa:
                    {
                        if (!TianTiClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = ZhengBaManager.Instance().CanKuaFuLogin(kuaFuServerLoginData);
                        if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;

                    case (int)GameTypes.CoupleArena:
                    {
                        if (!TianTiClient.getInstance().CanKuaFuLogin())
                        {
                            return(false);
                        }

                        socket.IsKuaFuLogin = CoupleArenaManager.Instance().CanKuaFuLogin(kuaFuServerLoginData);
                        if (!TianTiClient.getInstance().GetKuaFuDbServerInfo(serverId, out dbIp, out dbPort, out logDbIp, out logDbPort))
                        {
                            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的原服务器的服务器IP和端口", kuaFuServerLoginData.RoleId));
                            return(false);
                        }
                    }
                    break;
                    }

                    if (socket.IsKuaFuLogin && serverId != 0)
                    {
                        if (serverId != 0)
                        {
                            if (!InitGameDbConnection(serverId, dbIp, dbPort, logDbIp, logDbPort))
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("连接角色{0}的原服务器的GameDBServer和LogDBServer失败", kuaFuServerLoginData.RoleId));
                                return(false);
                            }
                        }

                        return(socket.IsKuaFuLogin);
                    }
                }
                else
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色{0}未能在服务器列表中找本服务器,作为跨服服务器", kuaFuServerLoginData.RoleId));
                    return(false);
                }
            }
            else
            {
                //非跨服登录
                if (HuanYingSiYuanClient.getInstance().LocalLogin(userID))
                {
                    kuaFuServerLoginData.RoleId   = 0;
                    kuaFuServerLoginData.GameId   = 0;
                    kuaFuServerLoginData.GameType = 0;
                    kuaFuServerLoginData.ServerId = 0;
                    socket.ServerId     = 0;
                    socket.IsKuaFuLogin = false;
                    return(true);
                }
            }

            LogManager.WriteLog(LogTypes.Error, string.Format("未能找到角色{0}的跨服活动或副本信息", kuaFuServerLoginData.RoleId));
            return(false);
        }
Пример #27
0
        public bool OnInitGame(GameClient client)
        {
            KuaFuServerLoginData      kuaFuServerLoginData = Global.GetClientKuaFuServerLoginData(client);
            YongZheZhanChangFuBenData fuBenData;

            lock (this.RuntimeData.Mutex)
            {
                if (!this.RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData))
                {
                    fuBenData = null;
                }
                else if (fuBenData.State >= GameFuBenState.End)
                {
                    return(false);
                }
            }
            if (null == fuBenData)
            {
                YongZheZhanChangFuBenData newFuBenData = YongZheZhanChangClient.getInstance().GetKuaFuFuBenData((int)kuaFuServerLoginData.GameId);
                if (newFuBenData == null || newFuBenData.State == GameFuBenState.End)
                {
                    LogManager.WriteLog(LogTypes.Error, ("获取不到有效的副本数据," + newFuBenData == null) ? "fuBenData == null" : "fuBenData.State == GameFuBenState.End", null, true);
                    return(false);
                }
                lock (this.RuntimeData.Mutex)
                {
                    if (!this.RuntimeData.FuBenItemData.TryGetValue((int)kuaFuServerLoginData.GameId, out fuBenData))
                    {
                        fuBenData            = newFuBenData;
                        fuBenData.SequenceId = GameCoreInterface.getinstance().GetNewFuBenSeqId();
                        this.RuntimeData.FuBenItemData[fuBenData.GameId] = fuBenData;
                    }
                }
            }
            KuaFuFuBenRoleData kuaFuFuBenRoleData;
            bool result;

            if (!fuBenData.RoleDict.TryGetValue(client.ClientData.RoleID, out kuaFuFuBenRoleData))
            {
                result = false;
            }
            else
            {
                int posX;
                int posY;
                this.GetBirthPoint(client, out posX, out posY);
                lock (this.RuntimeData.Mutex)
                {
                    kuaFuServerLoginData.FuBenSeqId = fuBenData.SequenceId;
                    KuaFuBossSceneInfo sceneInfo;
                    if (!this.RuntimeData.SceneDataDict.TryGetValue(fuBenData.GroupIndex, out sceneInfo))
                    {
                        return(false);
                    }
                    client.ClientData.MapCode = sceneInfo.MapCode;
                }
                client.ClientData.PosX       = posX;
                client.ClientData.PosY       = posY;
                client.ClientData.FuBenSeqID = kuaFuServerLoginData.FuBenSeqId;
                result = true;
            }
            return(result);
        }
Пример #28
0
        /// <summary>
        /// 心跳处理
        /// </summary>
        public void TimerProc(object sender, EventArgs e)
        {
            lock (RuntimeData.Mutex)
            {
                if (RuntimeData.StatisticalDataQueue.Count > 0)
                {
                    LangHunLingYuStatisticalData data = RuntimeData.StatisticalDataQueue.Peek();
                    int result = YongZheZhanChangClient.getInstance().GameFuBenComplete(data);
                    if (result >= 0)
                    {
                        RuntimeData.StatisticalDataQueue.Dequeue();
                    }
                }
            }

            foreach (var scene in RuntimeData.SceneDict.Values)
            {
                lock (RuntimeData.Mutex)
                {
                    // 当前tick
                    DateTime now   = TimeUtil.NowDateTime();
                    long     ticks = TimeUtil.NOW();

                    if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL)             // 如果处于空状态 -- 是否要切换到准备状态
                    {
                        if (ticks >= scene.StartTimeTicks)
                        {
                            LangHunLingYuFuBenData fuBenData;
                            if (RuntimeData.FuBenDataDict.TryGetValue(scene.GameId, out fuBenData) && fuBenData.State == GameFuBenState.End)
                            {
                                scene.m_eStatus    = GameSceneStatuses.STATUS_AWARD;
                                scene.m_lLeaveTime = TimeUtil.NOW();
                            }

                            scene.m_lPrepareTime = scene.StartTimeTicks;
                            scene.m_lBeginTime   = scene.m_lPrepareTime + scene.SceneInfo.PrepareSecs * TimeUtil.SECOND;
                            scene.m_eStatus      = GameSceneStatuses.STATUS_PREPARE;

                            scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu;
                            scene.StateTimeData.State    = (int)scene.m_eStatus;
                            scene.StateTimeData.EndTicks = scene.m_lBeginTime;
                            foreach (var copy in scene.CopyMapDict.Values)
                            {
                                GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy);
                            }
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_PREPARE)     // 场景战斗状态切换
                    {
                        if (ticks >= scene.m_lBeginTime)
                        {
                            scene.m_eStatus  = GameSceneStatuses.STATUS_BEGIN;
                            scene.m_lEndTime = scene.m_lBeginTime + scene.SceneInfo.FightingSecs * TimeUtil.SECOND;

                            scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu;
                            scene.StateTimeData.State    = (int)scene.m_eStatus;
                            scene.StateTimeData.EndTicks = scene.m_lEndTime;
                            foreach (var copy in scene.CopyMapDict.Values)
                            {
                                GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy);
                            }
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN)       // 战斗开始
                    {
                        if (ticks >= scene.m_lEndTime)
                        {
                            scene.m_eStatus    = GameSceneStatuses.STATUS_END;
                            scene.m_lLeaveTime = scene.m_lEndTime + scene.SceneInfo.ClearRolesSecs * TimeUtil.SECOND;

                            scene.StateTimeData.GameType = (int)GameTypes.LangHunLingYu;
                            scene.StateTimeData.State    = (int)GameSceneStatuses.STATUS_CLEAR;
                            scene.StateTimeData.EndTicks = scene.m_lLeaveTime;
                            foreach (var copy in scene.CopyMapDict.Values)
                            {
                                GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, copy);
                            }

                            ProcessWangChengZhanResult(scene, true);
                        }
                        else
                        {
                            ProcessWangChengZhanResult(scene, false);
                        }
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_END)         // 战斗结束
                    {
                        //结算奖励
                        scene.m_eStatus = GameSceneStatuses.STATUS_AWARD;

                        LangHunLingYuStatisticalData statisticalData = new LangHunLingYuStatisticalData();
                        statisticalData.CompliteTime = TimeUtil.NowDateTime();
                        statisticalData.CityId       = scene.CityData.CityId;
                        statisticalData.GameId       = scene.GameId;
                        statisticalData.SiteBhids[0] = scene.LongTaOwnerData.OwnerBHid;
                        LangHunLingYuBuildMaxCityOwnerInfo(statisticalData, scene.LongTaOwnerData.OwnerBHServerId);
                        RuntimeData.StatisticalDataQueue.Enqueue(statisticalData);
                        LangHunLingYuFuBenData fuBenData;
                        if (RuntimeData.FuBenDataDict.TryGetValue(scene.GameId, out fuBenData))
                        {
                            fuBenData.State = GameFuBenState.End;
                        }

                        EventLogManager.AddGameEvent(LogRecordType.LangHunLingYuResult, statisticalData.GameId, statisticalData.CityId, statisticalData.SiteBhids[0]);
                    }
                    else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD)
                    {
                        if (ticks >= scene.m_lLeaveTime)
                        {
                            foreach (var copy in scene.CopyMapDict.Values)
                            {
                                copy.SetRemoveTicks(scene.m_lLeaveTime);
                                try
                                {
                                    List <GameClient> objsList = copy.GetClientsList();
                                    if (objsList != null && objsList.Count > 0)
                                    {
                                        for (int n = 0; n < objsList.Count; ++n)
                                        {
                                            GameClient c = objsList[n];
                                            if (c != null)
                                            {
                                                KuaFuManager.getInstance().GotoLastMap(c);
                                            }
                                        }
                                    }
                                }
                                catch (System.Exception ex)
                                {
                                    DataHelper.WriteExceptionLogEx(ex, "圣域争霸系统清场调度异常");
                                }
                            }

                            scene.m_eStatus = GameSceneStatuses.STATUS_CLEAR;
                        }
                    }
                }
            }

            return;
        }
Пример #29
0
        public void TimerProc()
        {
            long nowTicks = TimeUtil.NOW();

            if (nowTicks >= KuaFuBossManager.NextHeartBeatTicks)
            {
                KuaFuBossManager.NextHeartBeatTicks = nowTicks + 1020L;
                foreach (KuaFuBossScene scene in this.SceneDict.Values)
                {
                    lock (this.RuntimeData.Mutex)
                    {
                        int nID        = scene.FuBenSeqId;
                        int nCopyID    = scene.CopyMapId;
                        int nMapCodeID = scene.m_nMapCode;
                        if (nID >= 0 && nCopyID >= 0 && nMapCodeID >= 0)
                        {
                            CopyMap  copyMap = scene.CopyMap;
                            DateTime now     = TimeUtil.NowDateTime();
                            long     ticks   = TimeUtil.NOW();
                            if (scene.m_eStatus == GameSceneStatuses.STATUS_NULL)
                            {
                                if (ticks >= scene.StartTimeTicks)
                                {
                                    scene.m_lPrepareTime         = scene.StartTimeTicks;
                                    scene.m_lBeginTime           = scene.m_lPrepareTime + (long)(scene.SceneInfo.PrepareSecs * 1000);
                                    scene.m_eStatus              = GameSceneStatuses.STATUS_PREPARE;
                                    scene.StateTimeData.GameType = 6;
                                    scene.StateTimeData.State    = (int)scene.m_eStatus;
                                    scene.StateTimeData.EndTicks = scene.m_lBeginTime;
                                    GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap);
                                }
                            }
                            else if (scene.m_eStatus == GameSceneStatuses.STATUS_PREPARE)
                            {
                                if (ticks >= scene.m_lBeginTime)
                                {
                                    scene.m_eStatus              = GameSceneStatuses.STATUS_BEGIN;
                                    scene.m_lEndTime             = scene.m_lBeginTime + (long)(scene.SceneInfo.FightingSecs * 1000);
                                    scene.StateTimeData.GameType = 6;
                                    scene.StateTimeData.State    = (int)scene.m_eStatus;
                                    scene.StateTimeData.EndTicks = scene.m_lEndTime;
                                    GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap);
                                }
                            }
                            else if (scene.m_eStatus == GameSceneStatuses.STATUS_BEGIN)
                            {
                                if (ticks >= scene.m_lEndTime)
                                {
                                    scene.m_eStatus              = GameSceneStatuses.STATUS_END;
                                    scene.m_lLeaveTime           = scene.m_lEndTime + (long)(scene.SceneInfo.ClearRolesSecs * 1000);
                                    scene.StateTimeData.GameType = 6;
                                    scene.StateTimeData.State    = 5;
                                    scene.StateTimeData.EndTicks = scene.m_lLeaveTime;
                                    GameManager.ClientMgr.BroadSpecialCopyMapMessage <GameSceneStateTimeData>(827, scene.StateTimeData, scene.CopyMap);
                                    this.NotifySceneData(scene);
                                }
                                else
                                {
                                    scene.ElapsedSeconds = (int)Math.Min((nowTicks - scene.m_lBeginTime) / 1000L, (long)scene.SceneInfo.TotalSecs);
                                    this.CheckCreateDynamicMonster(scene, ticks);
                                    if (nowTicks > scene.NextNotifySceneStateDataTicks)
                                    {
                                        scene.NextNotifySceneStateDataTicks = nowTicks + 3000L;
                                        this.NotifySceneData(scene);
                                    }
                                }
                            }
                            else if (scene.m_eStatus == GameSceneStatuses.STATUS_END)
                            {
                                GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap);
                                scene.m_eStatus = GameSceneStatuses.STATUS_AWARD;
                                YongZheZhanChangClient.getInstance().PushGameResultData(scene.GameStatisticalData);
                                YongZheZhanChangClient.getInstance().GameFuBenChangeState(scene.GameId, GameFuBenState.End, now);
                                YongZheZhanChangFuBenData fuBenData;
                                if (this.RuntimeData.FuBenItemData.TryGetValue(scene.GameId, out fuBenData))
                                {
                                    fuBenData.State = GameFuBenState.End;
                                    LogManager.WriteLog(LogTypes.Error, string.Format("跨服Boss跨服副本GameID={0},战斗结束", fuBenData.GameId), null, true);
                                }
                            }
                            else if (scene.m_eStatus == GameSceneStatuses.STATUS_AWARD)
                            {
                                if (ticks >= scene.m_lLeaveTime)
                                {
                                    copyMap.SetRemoveTicks(scene.m_lLeaveTime);
                                    scene.m_eStatus = GameSceneStatuses.STATUS_CLEAR;
                                    try
                                    {
                                        List <GameClient> objsList = copyMap.GetClientsList();
                                        if (objsList != null && objsList.Count > 0)
                                        {
                                            for (int i = 0; i < objsList.Count; i++)
                                            {
                                                GameClient c = objsList[i];
                                                if (c != null)
                                                {
                                                    KuaFuManager.getInstance().GotoLastMap(c);
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        DataHelper.WriteExceptionLogEx(ex, "跨服Boss系统清场调度异常");
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #30
0
        /// <summary>
        /// 添加一个场景
        /// </summary>
        public bool AddCopyScenes(GameClient client, CopyMap copyMap, SceneUIClasses sceneType)
        {
            if (sceneType == SceneUIClasses.LangHunLingYu)
            {
                GameMap gameMap = null;
                if (!GameManager.MapMgr.DictMaps.TryGetValue(client.ClientData.MapCode, out gameMap))
                {
                    return(false);
                }

                int      fuBenSeqId = copyMap.FuBenSeqID;
                int      mapCode    = copyMap.MapCode;
                int      roleId     = client.ClientData.RoleID;
                int      gameId     = (int)Global.GetClientKuaFuServerLoginData(client).GameId;
                DateTime now        = TimeUtil.NowDateTime();
                lock (RuntimeData.Mutex)
                {
                    LangHunLingYuScene scene = null;
                    if (!RuntimeData.SceneDict.TryGetValue(fuBenSeqId, out scene))
                    {
                        LangHunLingYuFuBenData fuBenData;
                        if (!RuntimeData.FuBenDataDict.TryGetValue(gameId, out fuBenData))
                        {
                            LogManager.WriteLog(LogTypes.Error, "圣域争霸没有为副本找到对应的跨服副本数据,GameID:" + gameId);
                        }

                        scene = new LangHunLingYuScene();
                        scene.CleanAllInfo();
                        scene.GameId              = gameId;
                        RuntimeData.MapGridWidth  = gameMap.MapGridWidth;
                        RuntimeData.MapGridHeight = gameMap.MapGridHeight;
                        int cityLevel = GetCityLevelById(fuBenData.CityId);
                        if (!RuntimeData.CityLevelInfoDict.TryGetValue(cityLevel, out scene.LevelInfo))
                        {
                            LogManager.WriteLog(LogTypes.Error, "圣域争霸没有为副本找到对应的城池等级配置:CityId=" + fuBenData.CityId);
                        }

                        scene.SceneInfo = client.SceneInfoObject as LangHunLingYuSceneInfo;

                        DateTime startTime = now.Date.Add(GetStartTime(scene.LevelInfo.ID));
                        scene.StartTimeTicks = startTime.Ticks / 10000;
                        scene.m_lEndTime     = scene.StartTimeTicks + (scene.SceneInfo.PrepareSecs + scene.SceneInfo.FightingSecs) * TimeUtil.SECOND;
                        InitScene(scene, client);

                        RuntimeData.SceneDict[fuBenSeqId] = scene;
                        scene.CityData.CityId             = fuBenData.CityDataEx.CityId;
                        scene.CityData.CityLevel          = fuBenData.CityDataEx.CityLevel;
                        LangHunLingYuBangHuiDataEx bangHuiDataEx;
                        if (RuntimeData.BangHuiDataExDict.TryGetValue(fuBenData.CityDataEx.Site[0], out bangHuiDataEx))
                        {
                            scene.LongTaOwnerData.OwnerBHid     = bangHuiDataEx.Bhid;
                            scene.LongTaOwnerData.OwnerBHName   = bangHuiDataEx.BhName;
                            scene.LongTaOwnerData.OwnerBHZoneId = bangHuiDataEx.ZoneId;
                        }
                    }

                    scene.CopyMapDict[mapCode] = copyMap;

                    int bhid = client.ClientData.Faction;
                    if (!RuntimeData.BangHuiMiniDataCacheDict.ContainsKey(bhid))
                    {
                        RuntimeData.BangHuiMiniDataCacheDict[bhid] = Global.GetBangHuiMiniData(bhid, client.ServerId);
                    }

                    LangHunLingYuClientContextData clientContextData;
                    if (!scene.ClientContextDataDict.TryGetValue(roleId, out clientContextData))
                    {
                        clientContextData = new LangHunLingYuClientContextData()
                        {
                            RoleId = roleId, ServerId = client.ServerId, BattleWhichSide = client.ClientData.BattleWhichSide
                        };
                        scene.ClientContextDataDict[roleId] = clientContextData;
                    }

                    client.SceneObject       = scene;
                    client.SceneGameId       = scene.GameId;
                    client.SceneContextData2 = clientContextData;

                    copyMap.SetRemoveTicks(scene.StartTimeTicks + scene.SceneInfo.TotalSecs * TimeUtil.SECOND);
                    copyMap.IsKuaFuCopy = true;
                }

                //更新状态
                YongZheZhanChangClient.getInstance().GameFuBenRoleChangeState(roleId, (int)KuaFuRoleStates.StartGame);
                return(true);
            }

            return(false);
        }