no message
This commit is contained in:
parent
557d4ff8ca
commit
91bb5820f9
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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{} {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
// })
|
|
||||||
//}
|
|
Loading…
Reference in New Issue