diff --git a/gamesrv/chess/scenepolicy.go b/gamesrv/chess/scenepolicy.go index b5fe410..9e24ec8 100644 --- a/gamesrv/chess/scenepolicy.go +++ b/gamesrv/chess/scenepolicy.go @@ -914,8 +914,6 @@ func (this *SceneStateChessInit) OnEnter(s *base.Scene) { s.NotifySceneRoundStart(s.NumOfGames) this.BroadcastRoomState(s, this.GetState(), int64(s.NumOfGames)) - //同步防伙牌数据 - sceneEx.SyncScenePlayer() //发牌 sceneEx.ChessInit() diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index 9511393..58a9bf6 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -986,8 +986,6 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) { s.SyncSceneState(common.SceneStateStart) } - //同步防伙牌数据 - sceneEx.SyncScenePlayer() //发牌 if rule.TestOpen { sceneEx.SendHandCardTest() diff --git a/worldsrv/action_server.go b/worldsrv/action_server.go index bcf07f0..00befb2 100644 --- a/worldsrv/action_server.go +++ b/worldsrv/action_server.go @@ -330,19 +330,6 @@ func init() { return nil })) - // 同步每局游戏那些玩家一起玩的 - netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.PacketFactoryWrapper(func() interface{} { - return &serverproto.GWScenePlayerLog{} - })) - netlib.RegisterHandler(int(serverproto.SSPacketID_PACKET_GW_SCENEPLAYERLOG), netlib.HandlerWrapper(func(s *netlib.Session, - packetid int, pack interface{}) error { - logger.Logger.Trace("receive GWScenePlayerLog:", pack) - if msg, ok := pack.(*serverproto.GWScenePlayerLog); ok { - sceneLimitMgr.ReceiveData(msg.GetGameId(), msg.GetSnids()) - } - return nil - })) - // 强制离开房间 // 返回房间失败 netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.PacketFactoryWrapper(func() interface{} { diff --git a/worldsrv/coinscenematch_chess.go b/worldsrv/coinscenematch_chess.go index 9cf2f1b..92fd72c 100644 --- a/worldsrv/coinscenematch_chess.go +++ b/worldsrv/coinscenematch_chess.go @@ -137,9 +137,9 @@ func ChessMatchFunc(csp *CoinScenePool, p *Player, scenes map[int]*Scene, sameIp return false } // 同局限制 - if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { - return false - } + //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { + // return false + //} return true } diff --git a/worldsrv/coinscenepool_base.go b/worldsrv/coinscenepool_base.go index e1df2c9..def0365 100644 --- a/worldsrv/coinscenepool_base.go +++ b/worldsrv/coinscenepool_base.go @@ -65,9 +65,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu continue } // 多少局只能禁止再配对 - if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { - continue - } + //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { + // continue + //} // 牌局开始后禁止进入 if s.sp.CanEnter(s, p.SnId) != 0 { continue @@ -87,9 +87,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu var loseScene *Scene for _, s := range scenes { if s != nil { - if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { - continue - } + //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { + // continue + //} cnt := s.GetWhitePlayerCnt() if cnt > cntWhite { cntWhite = cnt @@ -114,9 +114,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu var winScene *Scene for _, s := range scenes { if s != nil { - if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { - continue - } + //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { + // continue + //} cnt := s.GetBlackPlayerCnt() if cnt > cntBlack { cntBlack = cnt diff --git a/worldsrv/coinscenepool_local.go b/worldsrv/coinscenepool_local.go index 58c9017..5094717 100644 --- a/worldsrv/coinscenepool_local.go +++ b/worldsrv/coinscenepool_local.go @@ -75,9 +75,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude continue } // 多少局只能禁止再配对 - if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { - continue - } + //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { + // continue + //} // 牌局开始后禁止进入 if sp, ok := s.sp.(*ScenePolicyData); ok { if s.starting && !sp.EnterAfterStart { @@ -105,9 +105,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude var loseScene *Scene for _, s := range scenes { if s != nil { - if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { - continue - } + //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { + // continue + //} cnt := s.GetWhitePlayerCnt() if cnt > cntWhite { cntWhite = cnt @@ -132,9 +132,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude var winScene *Scene for _, s := range scenes { if s != nil { - if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { - continue - } + //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { + // continue + //} cnt := s.GetBlackPlayerCnt() if cnt > cntBlack { cntBlack = cnt diff --git a/worldsrv/scenelimit.go b/worldsrv/scenelimit.go deleted file mode 100644 index 59f48d4..0000000 --- a/worldsrv/scenelimit.go +++ /dev/null @@ -1,163 +0,0 @@ -package main - -import ( - "fmt" - - "mongo.games.com/game/common" -) - -var sceneLimitMgr = SceneLimitManager{ - SameRoomData: make(map[string][][]int32), -} - -type SceneLimitManager struct { - SameRoomData map[string][][]int32 //用户的同房数据,保存了用户一局游戏中,房间人员的SNID -} - -func (m *SceneLimitManager) Key(gameid, snid int32) string { - return fmt.Sprintf("%v-%v", snid, gameid) -} - -// LimitSamePlace 连续同局检测 -func (m *SceneLimitManager) LimitSamePlace(player *Player, s *Scene) bool { - if player.IsRob { - return false - } - key := m.Key(int32(s.gameId), player.SnId) - var logArr = m.SameRoomData[key] - var samePlaceLimit = int(s.dbGameFree.GetSamePlaceLimit()) - if len(logArr) > samePlaceLimit { - logArr = logArr[len(logArr)-samePlaceLimit:] - m.SameRoomData[key] = logArr - } - //新用户的防伙牌数据中,有没有场景中用户的检查 - for _, value := range s.players { - if value.IsRob { - continue - } - limitCount := 0 - for _, log := range logArr { - if common.InSliceInt32(log, value.SnId) { - limitCount++ - } - } - if limitCount >= samePlaceLimit { - return true - } - } - //场景中用户的防伙牌数据中,有没有新用户的检查 - for _, value := range s.players { - if value.IsRob { - continue - } - key := m.Key(int32(s.gameId), value.SnId) - var logArr = m.SameRoomData[key] - limitCount := 0 - for _, log := range logArr { - if common.InSliceInt32(log, player.SnId) { - limitCount++ - } - } - if limitCount >= samePlaceLimit { - return true - } - } - return false -} - -// LimitSamePlaceBySnid 连续同局检测 -// limit 最大同局数 -func (m *SceneLimitManager) LimitSamePlaceBySnid(member []*Player, player *Player, gameId, limit int32) bool { - if player.IsRob { - return false - } - key := m.Key(gameId, player.SnId) - var logArr = m.SameRoomData[key] - var samePlaceLimit = int(limit) - if len(logArr) > samePlaceLimit { - logArr = logArr[len(logArr)-samePlaceLimit:] - m.SameRoomData[key] = logArr - } - //新用户的防伙牌数据中,有没有场景中用户的检查 - for _, value := range member { - if value.IsRob { - continue - } - limitCount := 0 - for _, log := range logArr { - if common.InSliceInt32(log, value.SnId) { - limitCount++ - } - } - if limitCount >= samePlaceLimit { - return true - } - } - //场景中用户的防伙牌数据中,有没有新用户的检查 - for _, value := range member { - if value.IsRob { - continue - } - key := m.Key(gameId, value.SnId) - var logArr = m.SameRoomData[key] - limitCount := 0 - for _, log := range logArr { - if common.InSliceInt32(log, player.SnId) { - limitCount++ - } - } - if limitCount >= samePlaceLimit { - return true - } - } - return false -} - -// ReceiveData 同局记录 -func (m *SceneLimitManager) ReceiveData(gameid int32, data []int32) { - for _, value := range data { - key := m.Key(gameid, value) - m.SameRoomData[key] = append(m.SameRoomData[key], data) - } -} - -// LimitAvgPlayer 人数的平均分配问题 -func (m *SceneLimitManager) LimitAvgPlayer(s *Scene, totlePlayer int) bool { - scenePlayerCount := s.GetTruePlayerCnt() - switch { - case totlePlayer > 1 && totlePlayer < 15: - //4、如果游戏场的同时在线人数2-14人时,系统每2个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - // 如果有机器人,系统加入机器人,并且保证同桌机器人数量1-3个 - if scenePlayerCount > 2 { - return true - } - case totlePlayer >= 15 && totlePlayer < 22: - //5、如果游戏场的同时在线人数15-21人,系统每3个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - // 如果有机器人,系统加入机器人,并且保证同桌机器人数量1-3个; - if scenePlayerCount > 3 { - return true - } - case totlePlayer >= 22 && totlePlayer < 29: - //6、如果游戏场的同时在线人数22-28人,系统每4个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - // 如果有机器人,系统加入机器人,并且保证同桌机器人数量1-3个; - if scenePlayerCount > 4 { - return true - } - case totlePlayer >= 29 && totlePlayer < 35: - //7、如果游戏场的同时在线人数29-35人,系统每5个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - if scenePlayerCount > 5 { - return true - } - case totlePlayer >= 35 && totlePlayer < 42: - //8、如果游戏场的同时在线人数36-42人,系统每6个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - if scenePlayerCount > 6 { - return true - } - case totlePlayer >= 43: - //9、如果游戏场的同时在线人数43人以上时,系统每7个人分一个桌,如果有剩余的没有分桌,随机找一个桌子进行分配; - if scenePlayerCount > 7 { - return true - } - } - return false -} diff --git a/worldsrv/schedule.go b/worldsrv/schedule.go deleted file mode 100644 index 69d753e..0000000 --- a/worldsrv/schedule.go +++ /dev/null @@ -1,99 +0,0 @@ -package main - -//转移到schedulesrv中专门处理 -//import ( -// "time" - -// "mongo.games.com/game/model" - -// "mongo.games.com/goserver/core" -// "mongo.games.com/goserver/core/logger" -// "mongo.games.com/goserver/core/schedule" -//) - -//func init() { -// core.RegisteHook(core.HOOK_BEFORE_START, func() error { -// //每日凌晨4点执行清理任务 -// //0 0 4 * * * -// task := schedule.NewTask("定期清理cardlog", "0 0 4 * * *", func() error { -// logger.Logger.Info("@@@执行定期清理任务@@@") -// tNow := time.Now() -// m := model.GameParamData.LogHoldDuration -// if m <= 0 { -// m = 1 -// } -// tStart := tNow.AddDate(0, int(-m), 0) -// changeInfo, err := model.RemoveCoinLog(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理coinlog失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理coinlog成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } -// //1个月前的回放记录 -// changeInfo, err = model.RemoveGameRecs(tStart) -// if err != nil { -// logger.Logger.Warnf("定期清理gamerec失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理gamerec成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } -// //APIlog -// changeInfo, err = model.RemoveAPILog(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理APIlog失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理APIlog成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } - -// //10天前的数据 -// tStart = tNow.AddDate(0, 0, -10) -// changeInfo, err = model.RemoveAgentGameRecs(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理user_agentgamerec失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理user_agentgamerec成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } - -// //3天前的数据 -// tStart = tNow.AddDate(0, 0, -3) -// changeInfo, err = model.RemoveSceneCoinLog(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理scenecoinlog失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理scenecoinlog成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } - -// //7天前的数据 -// tStart = tNow.AddDate(0, 0, -7) -// changeInfo, err = model.RemoveGameCoinLog(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理gamecoinlog失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理gamecoinlog成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } -// //游戏记录 -// changeInfo, err = model.RemoveGameLog(tStart.Unix()) -// if err != nil { -// logger.Logger.Warnf("定期清理游戏记录失败: %v", err) -// } else { -// logger.Logger.Warnf("定期清理游戏记录成功: updated:%v removed:%v", changeInfo.Updated, changeInfo.Removed) -// } -// return nil -// }) -// if task != nil { -// logger.Logger.Info("@@@执行定期清理任务@@@加入调度") -// schedule.AddTask(task.Taskname, task) -// } - -// //每日凌晨执行汇总任务 -// //0 0 0 * * * -// taskDay := schedule.NewTask("定期汇总玩家金币总额", "0 0 0 * * *", func() error { -// logger.Logger.Info("@@@执行定期汇总任务@@@") -// return model.AggregatePlayerCoin() -// }) -// if taskDay != nil { -// logger.Logger.Info("@@@执行定期汇总任务@@@加入调度") -// schedule.AddTask(taskDay.Taskname, taskDay) -// } -// return nil -// }) -//}