diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 9e8af34..663985b 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -1632,6 +1632,8 @@ func (this *Scene) NewBigCoinNotice(player *Player, num int64, msgType int64) { type GameDetailedParam struct { Trend20Lately string //最近20局开奖结果 + CtrlType int + PlayerPool map[int]int } // 保存详细游戏日志 @@ -1651,7 +1653,8 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately) + gamedetailednote, p.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { log.MatchId = this.MatchId @@ -1664,7 +1667,8 @@ func (this *Scene) SaveGameDetailedLog(logid string, gamedetailednote string, ga log := model.NewGameDetailedLogEx(logid, int32(this.GameId), int32(this.SceneId), this.DbGameFree.GetGameMode(), this.DbGameFree.Id, int32(len(this.Players)), int32(time.Now().Unix()-this.GameNowTime.Unix()), baseScore, - gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately) + gamedetailednote, this.Platform, this.ClubId, this.RoomId, this.CpCtx, GameDetailedVer[this.GameId], trend20Lately, + gameDetailedParam.CtrlType, gameDetailedParam.PlayerPool) if log != nil { if this.IsMatchScene() { log.MatchId = this.MatchId diff --git a/gamesrv/tienlen/playerdata_tienlen.go b/gamesrv/tienlen/playerdata_tienlen.go index 3b1654a..d955599 100644 --- a/gamesrv/tienlen/playerdata_tienlen.go +++ b/gamesrv/tienlen/playerdata_tienlen.go @@ -29,6 +29,7 @@ type TienLenPlayerData struct { curHandLimitTimeOut time.Duration // 出牌时间上限 isNotOverLastHand bool //手牌不能压过上家出牌标志 cardScore int // 手牌评分 + playerPool int // 个人水池分 } func (this *TienLenPlayerData) init() { @@ -49,6 +50,7 @@ func (this *TienLenPlayerData) init() { this.curHandLimitTimeOut = rule.TienLenPlayerOpTimeout this.isNotOverLastHand = false this.cardScore = 0 + this.playerPool = 0 } func (this *TienLenPlayerData) Clear() { @@ -67,6 +69,7 @@ func (this *TienLenPlayerData) Clear() { this.ThinkLongCnt = 0 this.curHandLimitTimeOut = rule.TienLenPlayerOpTimeout this.isNotOverLastHand = false + this.playerPool = 0 this.MarkFlag(base.PlayerState_WaitNext) this.TestLog = this.TestLog[:0] diff --git a/gamesrv/tienlen/scenedata_tienlen.go b/gamesrv/tienlen/scenedata_tienlen.go index 59ffaae..3f0852b 100644 --- a/gamesrv/tienlen/scenedata_tienlen.go +++ b/gamesrv/tienlen/scenedata_tienlen.go @@ -55,6 +55,7 @@ type TienLenSceneData struct { cHintCards []int32 //客户端提示出牌记录 isCardsKu bool //是否是牌库 cardsKuId int32 //牌库ID + ctrlType int // 1控赢 2控输 0不控 } func NewTienLenSceneData(s *base.Scene) *TienLenSceneData { @@ -85,6 +86,7 @@ func (this *TienLenSceneData) init() bool { this.card_play_action_seq_int32 = [][]int32{} this.bombToEnd = 0 this.allPlayerCards = [][]int32{} + this.ctrlType = 0 this.recordId, _ = model.AutoIncGameLogId() if this.GetPlayerNum() == 0 { this.SetPlayerNum(rule.MaxNumOfPlayer) @@ -114,6 +116,7 @@ func (this *TienLenSceneData) Clear() { this.isAllRob = false this.robotGamingNum = 0 this.allPlayerCards = [][]int32{} + this.ctrlType = 0 this.recordId, _ = model.AutoIncGameLogId() for _, player := range this.players { if player != nil { @@ -1053,6 +1056,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { robotPlayers = append(robotPlayers, seat) } else { seat.odds = this.GetPlayerOdds(seat.Player, this.GameId, this.robotGamingNum > 0) + seat.playerPool = int(this.PlayerPoolOdds(seat.Player)) if seat.odds > 0 { realPlayersGood = append(realPlayersGood, seat) G += seat.odds @@ -1233,6 +1237,7 @@ func (this *TienLenSceneData) SendHandCardOdds() { logger.Logger.Tracef("TienLen SendHandCardOdds Good:%v G:%v Bad:%v B:%v", isGood, G, isBad, B) if isBad && !isTestPoker && len(robotPlayers) > 0 && !noviceCtrl && !noviceTianHu { + this.ctrlType = 2 gf := base.ConfigMgrInst.GetConfig(this.Platform).GameConfig items := []int32{gf.GetTianHu(), gf.GetPaiKu(), gf.GetFenCha()} score := this.RandInt(int(gf.GetTianHu() + gf.GetPaiKu() + gf.GetFenCha())) @@ -1495,7 +1500,8 @@ func (this *TienLenSceneData) SendHandCardOdds() { } if !isBad && !isTestPoker && !noviceCtrl && !noviceTianHu { // 天胡调控没有生效 - if isGood || isBad { + if isGood { + this.ctrlType = 1 // 牌平分,按从大到小排序 // 使用分差配置,最好牌和最差牌的牌型分差大于分差配置 for i := 0; i < 20; i++ { // 尝试20次,如果还不能满足分差配置,则直接发牌 diff --git a/gamesrv/tienlen/scenepolicy_tienlen.go b/gamesrv/tienlen/scenepolicy_tienlen.go index aff23b5..77d3fe3 100644 --- a/gamesrv/tienlen/scenepolicy_tienlen.go +++ b/gamesrv/tienlen/scenepolicy_tienlen.go @@ -1606,6 +1606,13 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { BaseScore: s.GetBaseScore(), TaxRate: s.DbGameFree.GetTaxRate(), RoomMode: s.GetSceneMode(), + PlayerPool: make(map[int]int), + } + for _, v := range sceneEx.seats { + if v == nil || !v.IsGameing() { + continue + } + tienlenType.PlayerPool[int(v.SnId)] = v.playerPool } nGamingPlayerCount := sceneEx.GetGameingPlayerCnt() @@ -2499,7 +2506,11 @@ func (this *SceneBilledStateTienLen) OnEnter(s *base.Scene) { } if isSave { // 牌局记录 - sceneEx.SaveGameDetailedLog(sceneEx.recordId, info, &base.GameDetailedParam{}) + sceneEx.SaveGameDetailedLog(sceneEx.recordId, info, &base.GameDetailedParam{ + Trend20Lately: "", + CtrlType: sceneEx.ctrlType, + PlayerPool: tienlenType.PlayerPool, + }) } } diff --git a/model/gamedetailedlog.go b/model/gamedetailedlog.go index 27c3f80..2796720 100644 --- a/model/gamedetailedlog.go +++ b/model/gamedetailedlog.go @@ -55,6 +55,8 @@ type GameDetailedLog struct { Time time.Time //记录时间 Trend20Lately string //最近游戏走势 Ts int64 //时间戳 + CtrlType int // 1控赢 2控输 0不控 + PlayerPool map[int]int // 个人水池分 } func NewGameDetailedLog() *GameDetailedLog { @@ -63,7 +65,7 @@ func NewGameDetailedLog() *GameDetailedLog { } func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, playercount, gametiming, gamebasebet int32, - gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, trend20Lately string) *GameDetailedLog { + gamedetailednote string, platform string, clubId int32, clubRoom string, cpCtx CoinPoolCtx, ver int32, trend20Lately string, ctrlType int, playerPool map[int]int) *GameDetailedLog { cl := NewGameDetailedLog() cl.LogId = logid cl.GameId = gameid @@ -83,6 +85,8 @@ func NewGameDetailedLogEx(logid string, gameid, sceneid, gamemode, gamefreeid, p cl.GameDetailVer = ver cl.Trend20Lately = trend20Lately cl.Ts = time.Now().Unix() + cl.CtrlType = ctrlType + cl.PlayerPool = playerPool return cl } diff --git a/model/gamelogtype.go b/model/gamelogtype.go index 83a6ecf..d24b8cc 100644 --- a/model/gamelogtype.go +++ b/model/gamelogtype.go @@ -1521,6 +1521,8 @@ type TienLenType struct { TaxRate int32 //税率(万分比) PlayerData []TienLenPerson //玩家信息 RoomMode int + CtrlType int `json:"-"` // 1控赢 2控输 0不控 + PlayerPool map[int]int `json:"-"` } type TienLenAddItem struct {