no message

This commit is contained in:
sk 2024-09-26 10:22:56 +08:00
parent 557d4ff8ca
commit 91bb5820f9
8 changed files with 21 additions and 300 deletions

View File

@ -914,8 +914,6 @@ func (this *SceneStateChessInit) OnEnter(s *base.Scene) {
s.NotifySceneRoundStart(s.NumOfGames) s.NotifySceneRoundStart(s.NumOfGames)
this.BroadcastRoomState(s, this.GetState(), int64(s.NumOfGames)) this.BroadcastRoomState(s, this.GetState(), int64(s.NumOfGames))
//同步防伙牌数据
sceneEx.SyncScenePlayer()
//发牌 //发牌
sceneEx.ChessInit() sceneEx.ChessInit()

View File

@ -986,8 +986,6 @@ func (this *SceneHandCardStateTienLen) OnEnter(s *base.Scene) {
s.SyncSceneState(common.SceneStateStart) s.SyncSceneState(common.SceneStateStart)
} }
//同步防伙牌数据
sceneEx.SyncScenePlayer()
//发牌 //发牌
if rule.TestOpen { if rule.TestOpen {
sceneEx.SendHandCardTest() sceneEx.SendHandCardTest()

View File

@ -330,19 +330,6 @@ func init() {
return nil 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{} { netlib.RegisterFactory(int(serverproto.SSPacketID_PACKET_GW_PLAYERFORCELEAVE), netlib.PacketFactoryWrapper(func() interface{} {

View File

@ -137,9 +137,9 @@ func ChessMatchFunc(csp *CoinScenePool, p *Player, scenes map[int]*Scene, sameIp
return false return false
} }
// 同局限制 // 同局限制
if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) {
return false // return false
} //}
return true return true
} }

View File

@ -65,9 +65,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu
continue continue
} }
// 多少局只能禁止再配对 // 多少局只能禁止再配对
if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) {
continue // continue
} //}
// 牌局开始后禁止进入 // 牌局开始后禁止进入
if s.sp.CanEnter(s, p.SnId) != 0 { if s.sp.CanEnter(s, p.SnId) != 0 {
continue continue
@ -87,9 +87,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu
var loseScene *Scene var loseScene *Scene
for _, s := range scenes { for _, s := range scenes {
if s != nil { if s != nil {
if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) {
continue // continue
} //}
cnt := s.GetWhitePlayerCnt() cnt := s.GetWhitePlayerCnt()
if cnt > cntWhite { if cnt > cntWhite {
cntWhite = cnt cntWhite = cnt
@ -114,9 +114,9 @@ func (this *BaseCoinScenePool) PlayerEnter(pool *CoinScenePool, p *Player, exclu
var winScene *Scene var winScene *Scene
for _, s := range scenes { for _, s := range scenes {
if s != nil { if s != nil {
if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) {
continue // continue
} //}
cnt := s.GetBlackPlayerCnt() cnt := s.GetBlackPlayerCnt()
if cnt > cntBlack { if cnt > cntBlack {
cntBlack = cnt cntBlack = cnt

View File

@ -75,9 +75,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude
continue continue
} }
// 多少局只能禁止再配对 // 多少局只能禁止再配对
if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) { //if s.dbGameFree.GetSamePlaceLimit() > 0 && sceneLimitMgr.LimitSamePlace(p, s) {
continue // continue
} //}
// 牌局开始后禁止进入 // 牌局开始后禁止进入
if sp, ok := s.sp.(*ScenePolicyData); ok { if sp, ok := s.sp.(*ScenePolicyData); ok {
if s.starting && !sp.EnterAfterStart { if s.starting && !sp.EnterAfterStart {
@ -105,9 +105,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude
var loseScene *Scene var loseScene *Scene
for _, s := range scenes { for _, s := range scenes {
if s != nil { if s != nil {
if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) {
continue // continue
} //}
cnt := s.GetWhitePlayerCnt() cnt := s.GetWhitePlayerCnt()
if cnt > cntWhite { if cnt > cntWhite {
cntWhite = cnt cntWhite = cnt
@ -132,9 +132,9 @@ func (l *CoinScenePoolLocal) PlayerEnter(pool *CoinScenePool, p *Player, exclude
var winScene *Scene var winScene *Scene
for _, s := range scenes { for _, s := range scenes {
if s != nil { if s != nil {
if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) { //if sceneLimitMgr.LimitAvgPlayer(s, len(pool.players)) {
continue // continue
} //}
cnt := s.GetBlackPlayerCnt() cnt := s.GetBlackPlayerCnt()
if cnt > cntBlack { if cnt > cntBlack {
cntBlack = cnt cntBlack = cnt

View File

@ -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
}

View File

@ -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
// })
//}