Esempio n. 1
0
        public bool AddUser(User user)
        {
            if (_memberMap.Count >= _nMatchingCount)
            {
                return false;
            }
            MatchMember mem;
            if (_memberMap.TryGetValue(user.RoleID,out mem))
            {
                return false;
            }

            mem = new MatchMember();
            mem.Create(user, this, _memberMap.Count);
            _memberMap.Add(user.RoleID, mem);

            return true;
        }
Esempio n. 2
0
        public async Task <IActionResult> ReplayInfoSave([FromBody] ReplayInfoSave.Request req)
        {
            // parse BattleServer-Package-version
            int[] pver = req.packageVersion.Split('.').Select(a => int.Parse(a)).ToArray();
            if (pver.Length < 4)
            {
                return(BuildErrorResponse(Error.LowCode.BadParameter));
            }
            UInt64 packageVersion = VersionChecker.Valued(VersionChecker.ReferenceSrc.PackageVersion, pver);

            //Console.WriteLine("ReplayInfoSave:packageVersion={0}", packageVersion);

            // parse BattleServer-MasterData-version
            int[] mver = req.masterDataVersion.Split('-').Select(a => int.Parse(a)).ToArray();
            if (mver.Length < 3)
            {
                return(BuildErrorResponse(Error.LowCode.BadParameter));
            }
            UInt64 masterDataVersion = VersionChecker.Valued(VersionChecker.ReferenceSrc.MasterDataVersion, mver);
            //Console.WriteLine("ReplayInfoSave:masterDataVersion={0}", masterDataVersion);

            var info = new ReplayInfoAllMatch();

            info.packageVersion    = packageVersion;
            info.masterDataVersion = masterDataVersion;
            info.date        = req.baseInfo.date;
            info.matchId     = req.baseInfo.matchId;
            info.matchType   = req.baseInfo.matchType;
            info.mapId       = req.baseInfo.mapId;
            info.gameMode    = req.baseInfo.gameMode;
            info.totalTime   = req.baseInfo.totalTime;
            info.result      = req.baseInfo.result;
            info.mvpUserName = req.baseInfo.mvpPlayer;
            info.mvpUnitId   = req.baseInfo.mvpUnit;

            await Common3DB.ReplayInfoAllMatch.AddAsync(info);

            // ランクマッチテーブル登録
            if (req.saveRank)
            {
                var rank = new ReplayInfoRankMatch();
                rank.packageVersion    = packageVersion;
                rank.masterDataVersion = masterDataVersion;
                rank.date          = req.baseInfo.date;
                rank.matchId       = req.baseInfo.matchId;
                rank.mapId         = req.baseInfo.mapId;
                rank.gameMode      = req.baseInfo.gameMode;
                rank.mvpUnitId     = req.baseInfo.mvpUnit;
                rank.ratingAverage = req.rateAverage;

                rank.isFeatured = req.isFeatured;

                // 使われた機体をbitで管理
                UInt64 spawn = 0;
                foreach (int bit_idx in req.spawnUnits)
                {
                    UInt64 mask = (UInt64)(1 << bit_idx);
                    spawn |= mask;
                }
                // 表彰機体をbitで管理
                UInt64 award = 0;
                foreach (int bit_idx in req.awardUnits)
                {
                    UInt64 mask = (UInt64)(1 << bit_idx);
                    award |= mask;
                }
                //Console.WriteLine("spawn = {0}", spawn);
                //Console.WriteLine("award = {0}", award);

                rank.spawnUnits = spawn;
                rank.awardUnits = award;

                await Common3DB.ReplayInfoRankMatch.AddAsync(rank);
            }

            // フィーチャードマッチ用データ登録
            if (req.isFeatured)
            {
                var member = new MatchMember();
                member.matchId     = req.baseInfo.matchId;
                member.playersInfo = req.members;

                await Common3DB.MatchMember.AddAsync(member);
            }

            // 更新適用
            await Common3DB.SaveChangesAsync();


            // ユーザ毎の保存
            foreach (var userresult in req.playerResult)
            {
                var personalDb = PDBSM.PersonalDBContext(userresult.playerId);

                var userdata = new ReplayUserHistory();
                userdata.playerId   = userresult.playerId;
                userdata.resultType = userresult.result;

                userdata.packageVersion    = packageVersion;
                userdata.masterDataVersion = masterDataVersion;
                userdata.date      = req.baseInfo.date;
                userdata.matchId   = req.baseInfo.matchId;
                userdata.matchType = req.baseInfo.matchType;

                await personalDb.ReplayUserHistory.AddAsync(userdata);

                await personalDb.SaveChangesAsync();
            }

            var res = new ReplayInfoSave.Response();

            return(Ok(res));
        }
Esempio n. 3
0
 public bool BreakMatchbyMember(MatchMember matchMember)
 {
     if (matchMember == null || matchMember._user == null)
     {
         return false;
     }
     matchMember.ExitMatch();
     return true;
 }
Esempio n. 4
0
        private bool SendMatchResInfo(MatchMember member,int nOrder)
        {
            User user = member._user;
            if (user == null)
            {
                return false;
            }
            RoleData roleData = user.GetCurRoleData();
            if (roleData == null)
            {
                return false;
            }
            MatchResultInfo resInfo = new MatchResultInfo();
            resInfo.lnRoleID = roleData.lnRoleID;
            resInfo.szRoleName = roleData.szName;
            resInfo.nMatchOrder = nOrder;
            resInfo.nMatchTime = member._nCompleteTime;
            resInfo.nGold = roleData.nGold;
            resInfo.lnExp = roleData.lnExp;
            resInfo.nLevel = roleData.nLevel;

            object[] pars = { resInfo };
            SendMsgToAllUser(new APIMessage { Type = (int)enMessageType.EMT_SC_MatchResultInfo, Parameters = pars });
            return true;
        }
Esempio n. 5
0
        public bool SetReadFinishMember(MatchMember matchMember)
        {
            matchMember._bIsReady = true;
            bool bAllReady = true;
            foreach (var mem in _memberMap)
            {
                if (!mem.Value._bIsReady)
                {
                    bAllReady = false;
                    break;
                }
            }
            if (bAllReady)
            {

                object[] pars = { };
                SendMsgToAllUser(new APIMessage { Type = (int)enMessageType.EMT_SC_StartGame, Parameters = pars });
            }
            return true;
        }
Esempio n. 6
0
 public void DelMember(MatchMember matchMember)
 {
     if (matchMember == null ||  matchMember._user == null)
     {
         return;
     }
     User user = matchMember._user;
     MatchMember mem;
     if (!_memberMap.TryGetValue(user.RoleID, out mem))
     {
         return;
     }
     _memberMap.Remove(user.RoleID);
     if (_memberMap.Count <= 0)
     {
         _MatchMgr.StopMatch(this);
     }
 }
Esempio n. 7
0
 public bool CompleteMatchByMember(MatchMember matchMember)
 {
     if (matchMember == null || matchMember._user == null)
     {
         return false;
     }
     if (_nStartMatchTime <= 0)
     {
         return false;
     }
     matchMember._nCompleteTime = (int)(DelayEvent.GetCurUtcMSTime() - _nStartMatchTime);
     _CompleteMemberList.Add(matchMember);
     if (_CompleteMemberList.Count == 1)
     {
         int nCountdownTime = 10000;
         _CompleteTimeout = new MyTimeOut(nCountdownTime);
         object[] pars = { nCountdownTime };
         APIMessage message = new APIMessage { Type = (int)enMessageType.EMT_SC_CompleteStartCountdown, Parameters = pars };
         SendMsgToAllUser(message);
     }
     if (_CompleteMemberList.Count == _memberMap.Count)
     {
         CompleteMatch(true);
     }
     return true;
 }