示例#1
0
        /// <summary>
        /// 跨服初始化游戏
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        public bool KuaFuInitGame(GameClient client)
        {
            long gameId = Global.GetClientKuaFuServerLoginData(client).GameId;

            lock (Mutex)
            {
                CoupleArenaFuBenData fubenData = null;
                if (!GameId2FuBenData.TryGetValue(gameId, out fubenData))
                {
                    fubenData = TianTiClient.getInstance().GetFuBenData(gameId);
                    if (fubenData != null)
                    {
                        if (fubenData.FuBenSeq == 0)
                        {
                            fubenData.FuBenSeq = GameCoreInterface.getinstance().GetNewFuBenSeqId();
                        }
                        GameId2FuBenData.Add(gameId, fubenData);
                    }
                }

                if (fubenData == null)
                {
                    return(false);
                }
                if (fubenData.KfServerId != GameCoreInterface.getinstance().GetLocalServerId())
                {
                    return(false);
                }

                KuaFuFuBenRoleData roleData = null;
                if (fubenData.RoleList == null ||
                    (roleData = fubenData.RoleList.Find(_r => _r.RoleId == client.ClientData.RoleID)) == null)
                {
                    return(false);
                }

                client.ClientData.MapCode         = WarCfg.MapCode;
                client.ClientData.BattleWhichSide = roleData.Side;
                int _posx = 0, _posy = 0;
                if (!GetBirthPoint(client.ClientData.MapCode, client.ClientData.BattleWhichSide,
                                   out _posx, out _posy))
                {
                    LogManager.WriteLog(LogTypes.Error,
                                        string.Format("找不到出生点mapcode={0},side={1}", client.ClientData.MapCode, client.ClientData.BattleWhichSide));
                    return(false);
                }

                client.ClientData.PosX = _posx;
                client.ClientData.PosY = _posy;
                Global.GetClientKuaFuServerLoginData(client).FuBenSeqId = fubenData.FuBenSeq;
                client.ClientData.FuBenSeqID = fubenData.FuBenSeq;
            }

            return(true);
        }
示例#2
0
        /// <summary>
        /// 夫妻匹配
        /// </summary>
        /// <param name="now"></param>
        private void CheckRoleMatch(DateTime now)
        {
            lock (Mutex)
            {
                var joinDatas = JoinDataUtil.GetJoinList();
                if (joinDatas == null || joinDatas.Count <= 0)
                {
                    return;
                }

                CoupleArenaJoinMatcher joinMatcher = new CoupleArenaJoinMatcher();
                foreach (var joinData in joinDatas)
                {
                    if ((now - joinData.StartTime).TotalSeconds >= 60 || joinData.ToKfServerId > 0)
                    {
                        JoinDataUtil.DelJoinData(joinData);
                    }
                    else if ((now - joinData.StartTime).TotalSeconds >= 30)
                    {
                        joinMatcher.AddGlobalJoinData(joinData);
                    }
                    else
                    {
                        joinMatcher.AddJoinData(joinData.DuanWeiType, joinData.DuanWeiLevel, joinData);
                    }
                }

                foreach (var list in joinMatcher.GetAllMatch())
                {
                    for (int i = 0; i < list.Count - 1;)
                    {
                        var one = list[i];
                        var two = list[i + 1];
                        if (MatchTimeLimiter.GetMatchTimes(one.RoleId1, one.RoleId2, two.RoleId1, two.RoleId2)
                            >= TianTiPersistence.Instance.MaxRolePairFightCount)
                        {
                            // 次数先知 第i个元素,让第i+1个元素和第i+2个元素进行匹配
                            i += 1;
                            continue;
                        }

                        CoupleArenaFuBenData fubenData = new CoupleArenaFuBenData();
                        fubenData.GameId    = Persistence.GetNextGameId();
                        fubenData.StartTime = now;
                        fubenData.RoleList  = new List <KuaFuFuBenRoleData>();
                        fubenData.RoleList.Add(new KuaFuFuBenRoleData()
                        {
                            ServerId = one.ServerId, RoleId = one.RoleId1, Side = 1
                        });
                        fubenData.RoleList.Add(new KuaFuFuBenRoleData()
                        {
                            ServerId = one.ServerId, RoleId = one.RoleId2, Side = 1
                        });
                        fubenData.RoleList.Add(new KuaFuFuBenRoleData()
                        {
                            ServerId = two.ServerId, RoleId = two.RoleId1, Side = 2
                        });
                        fubenData.RoleList.Add(new KuaFuFuBenRoleData()
                        {
                            ServerId = two.ServerId, RoleId = two.RoleId2, Side = 2
                        });
                        if (ClientAgentManager.Instance().AssginKfFuben(GameType, fubenData.GameId, 4, out fubenData.KfServerId))
                        {
                            MatchTimeLimiter.AddMatchTimes(one.RoleId1, one.RoleId2, two.RoleId1, two.RoleId2);
                            GameFuBenDict[fubenData.GameId] = fubenData;
                            i += 2;

                            one.ToKfServerId = fubenData.KfServerId;
                            two.ToKfServerId = fubenData.KfServerId;

                            CoupleArenaCanEnterData enterData1 = new CoupleArenaCanEnterData()
                            {
                                GameId     = fubenData.GameId,
                                KfServerId = fubenData.KfServerId,
                                RoleId1    = one.RoleId1,
                                RoleId2    = one.RoleId2
                            };
                            ClientAgentManager.Instance().PostAsyncEvent(one.ServerId, EvItemGameType,
                                                                         new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, enterData1));

                            CoupleArenaCanEnterData enterData2 = new CoupleArenaCanEnterData()
                            {
                                GameId     = fubenData.GameId,
                                KfServerId = fubenData.KfServerId,
                                RoleId1    = two.RoleId1,
                                RoleId2    = two.RoleId2
                            };
                            AsyncDataItem evItem2 = new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, fubenData.GameId, fubenData.KfServerId, two.RoleId1, two.RoleId2);
                            ClientAgentManager.Instance().PostAsyncEvent(two.ServerId, EvItemGameType,
                                                                         new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, enterData2));
                        }
                        else
                        {
                            LogManager.WriteLog(LogTypes.Error, "CoupleArena 没有跨服可以分配");
                            return;
                        }
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// 副本结算
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="now"></param>
        /// <param name="nowTicks"></param>
        private void ProcessEnd(CoupleArenaCopyScene scene, DateTime now, long nowTicks)
        {
            GameManager.CopyMapMgr.KillAllMonster(scene.CopyMap);

            //结算奖励
            scene.m_eStatus    = GameSceneStatuses.STATUS_AWARD;
            scene.m_lEndTime   = nowTicks;
            scene.m_lLeaveTime = scene.m_lEndTime + WarCfg.ClearSec * TimeUtil.SECOND;

            scene.StateTimeData.GameType = (int)GameTypes.CoupleArena;
            scene.StateTimeData.State    = (int)GameSceneStatuses.STATUS_END;
            scene.StateTimeData.EndTicks = scene.m_lLeaveTime;
            GameManager.ClientMgr.BroadSpecialCopyMapMessage((int)TCPGameServerCmds.CMD_SPR_NOTIFY_TIME_STATE, scene.StateTimeData, scene.CopyMap);

            CoupleArenaFuBenData fubenData = null;

            if (!GameId2FuBenData.TryGetValue(scene.GameId, out fubenData))
            {
                return;
            }

            List <RoleData4Selector> selectorList = new List <RoleData4Selector>();

            foreach (var roledata in fubenData.RoleList)
            {
                RoleData4Selector _roleInfo = Global.sendToDB <RoleData4Selector,
                                                               string>((int)TCPGameServerCmds.CMD_SPR_GETROLEUSINGGOODSDATALIST, string.Format("{0}", roledata.RoleId), roledata.ServerId);
                if (_roleInfo == null)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("加载RoleData4Selector失败, serverid={0}, roleid={1}", roledata.ServerId, roledata.RoleId));
                    return;
                }
                selectorList.Add(_roleInfo);
            }

            if (selectorList[0].RoleSex == (int)ERoleSex.Girl)
            {
                var tmp = selectorList[0];
                selectorList[0] = selectorList[1];
                selectorList[1] = tmp;
            }

            if (selectorList[2].RoleSex == (int)ERoleSex.Girl)
            {
                var tmp = selectorList[2];
                selectorList[2] = selectorList[3];
                selectorList[3] = tmp;
            }

            // selectorList 存储的分别为男1,女1,男2,女2
            CoupleArenaPkResultReq req = new CoupleArenaPkResultReq();

            req.GameId  = scene.GameId;
            req.winSide = scene.WinSide;

            req.ManRole1      = selectorList[0].RoleID;
            req.ManZoneId1    = selectorList[0].ZoneId;
            req.ManSelector1  = DataHelper.ObjectToBytes <RoleData4Selector>(selectorList[0]);
            req.WifeRole1     = selectorList[1].RoleID;
            req.WifeZoneId1   = selectorList[1].ZoneId;
            req.WifeSelector1 = DataHelper.ObjectToBytes <RoleData4Selector>(selectorList[1]);
            req.ManRole2      = selectorList[2].RoleID;
            req.ManZoneId2    = selectorList[2].ZoneId;
            req.ManSelector2  = DataHelper.ObjectToBytes <RoleData4Selector>(selectorList[2]);
            req.WifeRole2     = selectorList[3].RoleID;
            req.WifeZoneId2   = selectorList[3].ZoneId;
            req.WifeSelector2 = DataHelper.ObjectToBytes <RoleData4Selector>(selectorList[3]);
            CoupleArenaPkResultRsp rsp = TianTiClient.getInstance().CoupleArenaPkResult(req);

            if (rsp == null)
            {
                return;
            }

            if (rsp.Couple1RetData != null)
            {
                if (rsp.Couple1RetData.Result != (int)ECoupleArenaPkResult.Invalid)
                {
                    CoupleArenaZhanBaoSaveDbData saveData = new CoupleArenaZhanBaoSaveDbData();
                    saveData.FromMan      = req.ManRole1;
                    saveData.FromWife     = req.WifeRole1;
                    saveData.FirstWeekday = TimeUtil.MakeFirstWeekday(now);
                    saveData.ZhanBao      = new CoupleArenaZhanBaoItemData()
                    {
                        TargetManZoneId    = req.ManZoneId2,
                        TargetManRoleName  = selectorList[2].RoleName,
                        TargetWifeZoneId   = req.WifeZoneId2,
                        TargetWifeRoleName = selectorList[3].RoleName,
                        IsWin    = rsp.Couple1RetData.Result == (int)ECoupleArenaPkResult.Win,
                        GetJiFen = rsp.Couple1RetData.GetJiFen
                    };
                    Global.sendToDB <bool, CoupleArenaZhanBaoSaveDbData>((int)TCPGameServerCmds.CMD_COUPLE_ARENA_DB_SAVE_ZHAN_BAO, saveData, fubenData.RoleList[0].ServerId);
                }
                NtfAwardData(req.ManRole1, rsp.Couple1RetData);
                NtfAwardData(req.WifeRole1, rsp.Couple1RetData);
            }

            if (rsp.Couple2RetData != null)
            {
                if (rsp.Couple2RetData.Result != (int)ECoupleArenaPkResult.Invalid)
                {
                    CoupleArenaZhanBaoSaveDbData saveData = new CoupleArenaZhanBaoSaveDbData();
                    saveData.FirstWeekday = TimeUtil.MakeFirstWeekday(now);
                    saveData.FromMan      = req.ManRole2;
                    saveData.FromWife     = req.WifeRole2;
                    saveData.ZhanBao      = new CoupleArenaZhanBaoItemData()
                    {
                        TargetManZoneId    = req.ManZoneId1,
                        TargetManRoleName  = selectorList[0].RoleName,
                        TargetWifeZoneId   = req.WifeZoneId1,
                        TargetWifeRoleName = selectorList[1].RoleName,
                        IsWin    = rsp.Couple2RetData.Result == (int)ECoupleArenaPkResult.Win,
                        GetJiFen = rsp.Couple2RetData.GetJiFen
                    };
                    Global.sendToDB <bool, CoupleArenaZhanBaoSaveDbData>((int)TCPGameServerCmds.CMD_COUPLE_ARENA_DB_SAVE_ZHAN_BAO, saveData, fubenData.RoleList[2].ServerId);
                }
                NtfAwardData(req.ManRole2, rsp.Couple2RetData);
                NtfAwardData(req.WifeRole2, rsp.Couple2RetData);
            }
        }
示例#4
0
 private void CheckRoleMatch(DateTime now)
 {
     lock (this.Mutex)
     {
         List <CoupleArenaJoinData> joinDatas = this.JoinDataUtil.GetJoinList();
         if (joinDatas != null && joinDatas.Count > 0)
         {
             CoupleArenaJoinMatcher joinMatcher = new CoupleArenaJoinMatcher();
             foreach (CoupleArenaJoinData joinData in joinDatas)
             {
                 if ((now - joinData.StartTime).TotalSeconds >= 60.0 || joinData.ToKfServerId > 0)
                 {
                     this.JoinDataUtil.DelJoinData(joinData);
                 }
                 else if ((now - joinData.StartTime).TotalSeconds >= 30.0)
                 {
                     joinMatcher.AddGlobalJoinData(joinData);
                 }
                 else
                 {
                     joinMatcher.AddJoinData(joinData.DuanWeiType, joinData.DuanWeiLevel, joinData);
                 }
             }
             foreach (List <CoupleArenaJoinData> list in joinMatcher.GetAllMatch())
             {
                 int i = 0;
                 while (i < list.Count - 1)
                 {
                     CoupleArenaJoinData one = list[i];
                     CoupleArenaJoinData two = list[i + 1];
                     if (this.MatchTimeLimiter.GetMatchTimes(one.RoleId1, one.RoleId2, two.RoleId1, two.RoleId2) >= TianTiPersistence.Instance.MaxRolePairFightCount)
                     {
                         i++;
                     }
                     else
                     {
                         CoupleArenaFuBenData fubenData = new CoupleArenaFuBenData();
                         fubenData.GameId    = this.Persistence.GetNextGameId();
                         fubenData.StartTime = now;
                         fubenData.RoleList  = new List <KuaFuFuBenRoleData>();
                         fubenData.RoleList.Add(new KuaFuFuBenRoleData
                         {
                             ServerId = one.ServerId,
                             RoleId   = one.RoleId1,
                             Side     = 1
                         });
                         fubenData.RoleList.Add(new KuaFuFuBenRoleData
                         {
                             ServerId = one.ServerId,
                             RoleId   = one.RoleId2,
                             Side     = 1
                         });
                         fubenData.RoleList.Add(new KuaFuFuBenRoleData
                         {
                             ServerId = two.ServerId,
                             RoleId   = two.RoleId1,
                             Side     = 2
                         });
                         fubenData.RoleList.Add(new KuaFuFuBenRoleData
                         {
                             ServerId = two.ServerId,
                             RoleId   = two.RoleId2,
                             Side     = 2
                         });
                         if (!ClientAgentManager.Instance().AssginKfFuben(this.GameType, fubenData.GameId, 4, out fubenData.KfServerId))
                         {
                             LogManager.WriteLog(LogTypes.Error, "CoupleArena 没有跨服可以分配", null, true);
                             return;
                         }
                         this.MatchTimeLimiter.AddMatchTimes(one.RoleId1, one.RoleId2, two.RoleId1, two.RoleId2, 1);
                         this.GameFuBenDict[fubenData.GameId] = fubenData;
                         i += 2;
                         one.ToKfServerId = fubenData.KfServerId;
                         two.ToKfServerId = fubenData.KfServerId;
                         CoupleArenaCanEnterData enterData = new CoupleArenaCanEnterData
                         {
                             GameId     = fubenData.GameId,
                             KfServerId = fubenData.KfServerId,
                             RoleId1    = one.RoleId1,
                             RoleId2    = one.RoleId2
                         };
                         ClientAgentManager.Instance().PostAsyncEvent(one.ServerId, this.EvItemGameType, new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, new object[]
                         {
                             enterData
                         }));
                         CoupleArenaCanEnterData enterData2 = new CoupleArenaCanEnterData
                         {
                             GameId     = fubenData.GameId,
                             KfServerId = fubenData.KfServerId,
                             RoleId1    = two.RoleId1,
                             RoleId2    = two.RoleId2
                         };
                         AsyncDataItem evItem2 = new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, new object[]
                         {
                             fubenData.GameId,
                             fubenData.KfServerId,
                             two.RoleId1,
                             two.RoleId2
                         });
                         ClientAgentManager.Instance().PostAsyncEvent(two.ServerId, this.EvItemGameType, new AsyncDataItem(KuaFuEventTypes.CoupleArenaCanEnter, new object[]
                         {
                             enterData2
                         }));
                     }
                 }
             }
         }
     }
 }