Exemplo n.º 1
0
 public static bool InitConfig()
 {
     lock (EscapeBattle_K.Mutex)
     {
         EscapeBattle_K.Initialize = false;
         bool bOk = EscapeBattle_K._Config.Load(KuaFuServerManager.GetResourcePath("Config\\EscapeActivityRules.xml", KuaFuServerManager.ResourcePathTypes.GameRes));
         EscapeBattleMatchConfig config = EscapeBattle_K._Config.MatchConfigList[0];
         EscapeBattleConsts.MinZhanDuiNumPerGame = config.MatchTeamNum;
         EscapeBattleConsts.MinRoleNumPerGame    = config.EnterBattleNum;
         EscapeBattleConsts.BattleSignSecs       = config.BattleSignSecs;
         DateTime.TryParse(KuaFuServerManager.systemParamsList.GetParamValueByName("EscapeStartTime"), out EscapeBattleConsts.EscapeStartTime);
         if (!bOk)
         {
             LogManager.WriteLog(LogTypes.Error, "EscapeBattle_K.InitConfig failed!", null, true);
         }
         EscapeBattle_K.Initialize = bOk;
     }
     return(true);
 }
Exemplo n.º 2
0
 private static bool PrepareMatchList()
 {
     EscapeBattle_K.JoinList.Clear();
     foreach (EscapeBattle_K.JoinPkData item in EscapeBattle_K.JoinDict.Values.ToList <EscapeBattle_K.JoinPkData>())
     {
         if (item.ReadyState && item.ReadyNum >= EscapeBattleConsts.MinRoleNumPerGame && !item.InGame)
         {
             EscapeBattle_K.JoinList.Add(new EscapeBattle_K.JoinPkData
             {
                 ZhanDuiID    = item.ZhanDuiID,
                 ZoneId       = item.ZoneId,
                 ZhanDuiName  = item.ZhanDuiName,
                 ReadyNum     = item.ReadyNum,
                 DuanWeiJiFen = item.DuanWeiJiFen
             });
         }
     }
     if (EscapeBattle_K.JoinList.Count >= EscapeBattleConsts.MinZhanDuiNumPerGame)
     {
         EscapeBattleMatchConfig config = EscapeBattle_K._Config.MatchConfigList[0];
         EscapeBattle_K.JoinList.Sort((EscapeBattle_K.JoinPkData x, EscapeBattle_K.JoinPkData y) => x.DuanWeiJiFen - y.DuanWeiJiFen);
         List <int> notMatchList = new List <int>();
         int        needLeftNum  = EscapeBattle_K.JoinList.Count % config.MatchTeamNum;
         if (needLeftNum != 0)
         {
             int leftNum = 0;
             int rnd     = Global.GetRandomNumber(0, EscapeBattle_K.JoinList.Count);
             for (int i = rnd; i < EscapeBattle_K.JoinList.Count + rnd; i++)
             {
                 EscapeBattle_K.JoinPkData item = EscapeBattle_K.JoinList[i % EscapeBattle_K.JoinList.Count];
                 if (EscapeBattle_K.LastMatchList.Contains(item.ZhanDuiID) && !notMatchList.Contains(item.ZhanDuiID))
                 {
                     notMatchList.Add(item.ZhanDuiID);
                     leftNum++;
                     if (leftNum >= needLeftNum)
                     {
                         break;
                     }
                 }
             }
             if (leftNum < needLeftNum)
             {
                 for (int i = rnd; i < EscapeBattle_K.JoinList.Count + rnd; i++)
                 {
                     EscapeBattle_K.JoinPkData item = EscapeBattle_K.JoinList[i % EscapeBattle_K.JoinList.Count];
                     if (!EscapeBattle_K.NotMatchList.Contains(item.ZhanDuiID) && !notMatchList.Contains(item.ZhanDuiID))
                     {
                         notMatchList.Add(item.ZhanDuiID);
                         leftNum++;
                         if (leftNum >= needLeftNum)
                         {
                             break;
                         }
                     }
                 }
             }
             if (leftNum < needLeftNum)
             {
                 for (int i = rnd; i < EscapeBattle_K.JoinList.Count + rnd; i++)
                 {
                     EscapeBattle_K.JoinPkData item = EscapeBattle_K.JoinList[i % EscapeBattle_K.JoinList.Count];
                     if (!notMatchList.Contains(item.ZhanDuiID))
                     {
                         notMatchList.Add(item.ZhanDuiID);
                         leftNum++;
                         if (leftNum >= needLeftNum)
                         {
                             break;
                         }
                     }
                 }
             }
             EscapeBattle_K.JoinList.RemoveAll((EscapeBattle_K.JoinPkData x) => notMatchList.Contains(x.ZhanDuiID));
         }
         EscapeBattle_K.NotMatchList  = notMatchList;
         EscapeBattle_K.LastMatchList = EscapeBattle_K.JoinList.ConvertAll <int>((EscapeBattle_K.JoinPkData x) => x.ZhanDuiID);
         EscapeBattle_K.JoinList      = EscapeBattle_K.JoinList.RandomSortList <EscapeBattle_K.JoinPkData>();
     }
     return(true);
 }
Exemplo n.º 3
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);
        }