예제 #1
0
        public static int GameState(int gameId, int state)
        {
            int result;

            lock (EscapeBattle_K.Mutex)
            {
                EscapeBattlePkLogData log = null;
                if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(gameId, out log))
                {
                    result = -11003;
                }
                else
                {
                    log.State = state;
                    foreach (int zhanDuiID in log.ZhanDuiIDs)
                    {
                        EscapeBattle_K.JoinPkData pkData;
                        if (EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out pkData))
                        {
                            EscapeBattle_K.ZhanDuiChangeState(pkData, state);
                        }
                    }
                    result = 0;
                }
            }
            return(result);
        }
예제 #2
0
        public static int GameResult(int gameId, List <int> zhanDuiScoreList)
        {
            int result;

            lock (EscapeBattle_K.Mutex)
            {
                EscapeBattlePkLogData log = null;
                LogManager.WriteLog(LogTypes.Trace, string.Format("EscapeBattle::GameResult,gameid={0},scoreList={1}", gameId, string.Join <int>("_", zhanDuiScoreList)), null, true);
                if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(gameId, out log))
                {
                    result = 3;
                }
                else
                {
                    DateTime now = TimeUtil.NowDateTime();
                    for (int i = 0; i < zhanDuiScoreList.Count - 1; i += 2)
                    {
                        int zhanDuiID = zhanDuiScoreList[i];
                        int score     = zhanDuiScoreList[i + 1];
                        if (log.ZhanDuiIDs.Contains(zhanDuiID))
                        {
                            EscapeBattle_K.JoinPkData pkData;
                            if (EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out pkData))
                            {
                                if (pkData.InGame)
                                {
                                    pkData.InGame       = false;
                                    pkData.CurrGameID   = 0;
                                    pkData.DuanWeiJiFen = TianTi5v5Service.UpdateEscapeZhanDui(pkData.ZhanDuiID, score, now);
                                }
                            }
                            LogManager.WriteLog(LogTypes.Trace, string.Format("EscapeBattle::GameResult,gameid={0},zhanduiid={1},score={2}", gameId, zhanDuiID, score), null, true);
                            EscapeBattle_K.ZhanDuiChangeState(pkData, 5);
                        }
                    }
                    bool canRemove = true;
                    foreach (int zhanDuiID in log.ZhanDuiIDs)
                    {
                        EscapeBattle_K.JoinPkData pkData;
                        if (EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out pkData) && pkData.InGame)
                        {
                            canRemove = false;
                        }
                    }
                    if (canRemove)
                    {
                        EscapeBattle_K.ThisLoopPkLogs.Remove(gameId);
                        ClientAgentManager.Instance().RemoveKfFuben(EscapeBattle_K.GameType, log.ToServerID, (long)log.GameID);
                    }
                    result = 0;
                }
            }
            return(result);
        }
예제 #3
0
        public static int ZhengBaRequestEnter(int zhanDuiID, out int gameId, out int kuaFuServerID, out string[] ips, out int[] ports)
        {
            gameId        = 0;
            kuaFuServerID = 0;
            ips           = null;
            ports         = null;
            lock (EscapeBattle_K.Mutex)
            {
                EscapeBattle_K.JoinPkData roleData;
                if (!EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out roleData) || roleData.CurrGameID == 0)
                {
                    return(-4006);
                }
                EscapeBattlePkLogData logData = null;
                if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(roleData.CurrGameID, out logData))
                {
                    return(-4006);
                }
                if (logData.State >= 3)
                {
                    return(-2008);
                }
                gameId        = roleData.CurrGameID;
                kuaFuServerID = roleData.ToServerID;
            }
            KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(kuaFuServerID);
            int             result;

            if (null != serverInfo)
            {
                ips = new string[]
                {
                    serverInfo.Ip
                };
                ports = new int[]
                {
                    serverInfo.Port
                };
                result = 0;
            }
            else
            {
                result = -11001;
            }
            return(result);
        }
예제 #4
0
        public static int ZhengBaKuaFuLogin(AutoCSer.Net.TcpInternalServer.ServerSocketSender socket, int zhanDuiID, int gameId, int srcServerID, out EscapeBattleFuBenData copyData)
        {
            copyData = null;
            lock (EscapeBattle_K.Mutex)
            {
                EscapeBattle_K.JoinPkData roleData;
                if (!EscapeBattle_K.JoinDict.TryGetValue(zhanDuiID, out roleData) || roleData.CurrGameID == 0)
                {
                    return(-4006);
                }
                EscapeBattlePkLogData logData = null;
                if (!EscapeBattle_K.ThisLoopPkLogs.TryGetValue(roleData.CurrGameID, out logData))
                {
                    return(-4006);
                }
                copyData = roleData.CopyData;
            }
            KuaFuServerInfo serverInfo = KuaFuServerManager.GetKuaFuServerInfo(srcServerID);
            int             result;

            if (null != serverInfo)
            {
                copyData.IPs = new string[]
                {
                    serverInfo.DbIp,
                    serverInfo.DbIp
                };
                copyData.Ports = new int[]
                {
                    serverInfo.DbPort,
                    serverInfo.LogDbPort
                };
                result = 0;
            }
            else
            {
                result = -11000;
            }
            return(result);
        }
예제 #5
0
        private static bool CreateGameFuBen(DateTime now, params EscapeBattle_K.JoinPkData[] joinArr)
        {
            for (int side = 1; side <= joinArr.Length; side++)
            {
                joinArr[side - 1].Side = side;
                if (joinArr[side - 1].InGame)
                {
                    return(true);
                }
            }
            int toServerId = 0;
            int gameId     = TianTiPersistence.Instance.GetNextGameId();

            if (ClientAgentManager.Instance().AssginKfFuben(EscapeBattle_K.GameType, (long)gameId, 10, out toServerId))
            {
                EscapeBattleFuBenData copyData = new EscapeBattleFuBenData();
                copyData.GameID   = (long)gameId;
                copyData.ServerID = toServerId;
                EscapeBattleNtfEnterData data = new EscapeBattleNtfEnterData();
                data.ToServerId = toServerId;
                data.GameId     = gameId;
                EscapeBattlePkLogData log = new EscapeBattlePkLogData();
                log.Season     = EscapeBattle_K.SyncData.Season;
                log.StartTime  = now;
                log.GameID     = gameId;
                log.ToServerID = toServerId;
                EscapeBattleMatchConfig config = EscapeBattle_K._Config.MatchConfigList[0];
                log.EndTime = now.AddSeconds((double)config.TotalSecs);
                foreach (EscapeBattle_K.JoinPkData joinRole in joinArr)
                {
                    copyData.SideDict[(long)joinRole.ZhanDuiID] = joinRole.Side;
                    copyData.RoleDict.AddRange(TianTi5v5Service.GetZhanDuiMemberIDs(joinRole.ZhanDuiID));
                    joinRole.ToServerID = toServerId;
                    joinRole.CurrGameID = gameId;
                    joinRole.CopyData   = copyData;
                    joinRole.InGame     = true;
                    data.ZhanDuiIDList.Add(joinRole.ZhanDuiID);
                    log.ZhanDuiIDs.Add(joinRole.ZhanDuiID);
                    log.ZoneIDs.Add(joinRole.ZoneId);
                    log.ZhanDuiNames.Add(joinRole.ZhanDuiName);
                    EscapeBattle_K.JoinPkData zhandui;
                    if (EscapeBattle_K.JoinDict.TryGetValue(joinRole.ZhanDuiID, out zhandui))
                    {
                        zhandui.InGame     = true;
                        zhandui.CurrGameID = gameId;
                        zhandui.Side       = joinRole.Side;
                        zhandui.ToServerID = toServerId;
                        zhandui.CopyData   = copyData;
                        zhandui.State      = 3;
                        zhandui.ReadyState = false;
                        zhandui.ReadyNum   = 0;
                    }
                }
                EscapeBattle_K.AsyncEvQ.Enqueue(KFCallMsg.New <EscapeBattleNtfEnterData>(KuaFuEventTypes.EscapeBattle_NotifyEnter, data));
                EscapeBattle_K.ThisLoopPkLogs[gameId] = log;
                if (!EscapeBattle_K.NeedUpdateRank)
                {
                    EscapeBattle_K.NeedUpdateRank = true;
                }
                LogManager.WriteLog(LogTypes.Trace, string.Format("大逃杀第{0}赛季战队成员通知入场,GameID={1},zhanduiIDs={2}", EscapeBattle_K.SyncData.Season, data.GameId, string.Join <int>(",", log.ZhanDuiIDs)), null, true);
                return(true);
            }
            LogManager.WriteLog(LogTypes.Warning, string.Format("大逃杀第{0}赛季分配游戏服务器失败", EscapeBattle_K.SyncData.Season), null, true);
            return(false);
        }