Browse Source

打散手动进房间的用户

Your Name 1 year ago
parent
commit
96f8fffc70
4 changed files with 37 additions and 10 deletions
  1. BIN
      dist/qznn/dist/qznn
  2. 1 1
      dist/qznn/version.txt
  3. 31 8
      game/qznn/qznn.go
  4. 5 1
      game/qznn/wait.go

BIN
dist/qznn/dist/qznn


+ 1 - 1
dist/qznn/version.txt

@@ -1 +1 @@
-1.0.2211.f1098
+1.0.2211.baf1f

+ 31 - 8
game/qznn/qznn.go

@@ -74,14 +74,15 @@ type Room struct {
 }
 
 type Player struct {
-	ID       int32
-	Name     string
-	HeadImg  string
-	Balance  decimal.Decimal //余额
-	Credits  decimal.Decimal //游戏积分
-	RoomID   int32           //当前所在房间ID
-	JoinTime time.Time       //加入时间
-	Status   PlayerStatus
+	ID             int32
+	Name           string
+	HeadImg        string
+	Balance        decimal.Decimal //余额
+	Credits        decimal.Decimal //游戏积分
+	RoomID         int32           //当前所在房间ID
+	JoinTime       time.Time       //加入时间
+	LastPayoutTime *time.Time      //之前结算时间,没结算过,则为0
+	Status         PlayerStatus
 
 	IsMaster  bool       //是否为庄家
 	MasterMul int        //抢庄的倍数
@@ -518,6 +519,28 @@ func (p *Game) ChooseRndChair(playerID int32, roomType int32) error {
 					continue
 				}
 			}
+
+			//新进入的玩家,不匹配在一起
+			timeNow := time_utils.TimeNowInCN()
+			player := p.PlayerMap[playerID]
+			if player.LastPayoutTime == nil || player.LastPayoutTime.Before(timeNow.Add(-5*time.Second)) {
+				found := false
+				for _, chairItem := range roomItem.ChairList {
+					if chairItem.PlayerID == 0 {
+						continue
+					}
+
+					chairPlayer := p.PlayerMap[chairItem.PlayerID]
+					if chairPlayer.LastPayoutTime == nil || chairPlayer.LastPayoutTime.Before(timeNow.Add(-5*time.Second)) {
+						found = true
+						break
+					}
+				}
+
+				if found {
+					continue
+				}
+			}
 		}
 
 		userCount := 0

+ 5 - 1
game/qznn/wait.go

@@ -13,6 +13,7 @@ import (
 	"github.com/sirupsen/logrus"
 	"gogs.daxia.dev/huanan/pkg.daxia.dev/db"
 	"gogs.daxia.dev/huanan/pkg.daxia.dev/rdb"
+	"gogs.daxia.dev/huanan/pkg.daxia.dev/time_utils"
 	"gorm.io/gorm"
 	"nn.daxia.dev/gameproto"
 	"nn.daxia.dev/model"
@@ -313,7 +314,7 @@ func (p *Game) WaitOpen(room Room) error {
 		})
 	}
 
-	timeNow := time.Now()
+	timeNow := time_utils.TimeNowInCN()
 	msg := &gameproto.OpenFinish{
 		RoomID:         uint32(room.ID),
 		PayoutInfoList: []*gameproto.PayoutInfo{},
@@ -518,6 +519,8 @@ func (p *Game) WaitOpen(room Room) error {
 	}
 
 	for _, userModel := range userModelList {
+		timeNow := timeNow
+
 		userID := int32(userModel.ID)
 		userItem := p.PlayerMap[userID]
 
@@ -527,6 +530,7 @@ func (p *Game) WaitOpen(room Room) error {
 		userItem.Name = userModel.Nickname
 		userItem.IsMaster = false
 		userItem.Status = PlayerStatusWaitReady
+		userItem.LastPayoutTime = &timeNow
 
 		p.EventInfo(userID, "开牌", "更新用户状态为等待开牌")