746 lines
27 KiB
Go
746 lines
27 KiB
Go
package room
|
||
|
||
import "game/common/proto/pb"
|
||
|
||
func (rm *ColorRoom) notifyGameStart() {
|
||
ntf := &pb.NtfColorGameStart{
|
||
EndTime: rm.endTimeStatus(),
|
||
Jackpot: rm.jackpotValue,
|
||
}
|
||
rm.Broadcast(pb.MsgId_NtfColorGameStartId, ntf)
|
||
}
|
||
|
||
func (rm *ColorRoom) notifyBetting() {
|
||
ntf := &pb.NtfColorBetting{EndTime: rm.endTimeStatus()}
|
||
rm.Broadcast(pb.MsgId_NtfColorBettingId, ntf)
|
||
}
|
||
|
||
func (rm *ColorRoom) notifyEndBetting() {
|
||
ntf := &pb.NtfColorEndBetting{
|
||
EndTime: rm.endTimeStatus(),
|
||
AreaMul: rm.endBetAreaMul,
|
||
Jackpot: rm.jackpotValue,
|
||
}
|
||
rm.Broadcast(pb.MsgId_NtfColorEndBettingId, ntf)
|
||
}
|
||
|
||
func (rm *ColorRoom) notifyOpenThreeDice() {
|
||
ntf := &pb.NtfColorEndBetting{
|
||
// EndTime: rm.statusTime + rm.timingCfg.Start,
|
||
// Jackpot: 0,
|
||
}
|
||
rm.Broadcast(pb.MsgId_NtfColorOpenThreeDiceId, ntf)
|
||
}
|
||
|
||
func (rm *ColorRoom) notifySettle() {
|
||
ntf := &pb.NtfColorEndBetting{
|
||
// EndTime: rm.statusTime + rm.timingCfg.Start,
|
||
// Jackpot: 0,
|
||
}
|
||
rm.Broadcast(pb.MsgId_NtfColorOpenThreeDiceId, ntf)
|
||
}
|
||
|
||
//
|
||
// import (
|
||
// "encoding/json"
|
||
// "fmt"
|
||
// "game/common/config/game"
|
||
// "game/common/proto/pb"
|
||
// "github.com/fox/fox/ipb"
|
||
// "github.com/fox/fox/log"
|
||
// "math"
|
||
// "sort"
|
||
// "time"
|
||
// )
|
||
//
|
||
// // 发送场景消息
|
||
// func (rm *ColorRoom) SendSceneMsg(u *model.User) {
|
||
//
|
||
// rm.MutexUserList.RLock()
|
||
// defer rm.MutexUserList.RUnlock()
|
||
//
|
||
// msg := new(pb.SceneMessage)
|
||
//
|
||
// msg.RoomID = int32(rm.Table.GetId())
|
||
// // 游戏状态信息
|
||
// msg.GameStatus = new(pb.ColorPinoyLiveStatusMessage)
|
||
// msg.GameStatus.Status = int32(rm.GetGameStatus())
|
||
// msg.GameStatus.StatusTime = int32(rm.StatusTime / 1000) // 转成秒
|
||
// msg.GameStatus.StatusRemainTime = int32(math.Floor(float64(rm.TimerJob.GetTimeDifference() / 1000))) // 转成秒
|
||
// msg.GameStatus.Jackpot = rm.jackpotMgr.GetJackpot()
|
||
// msg.Jackpot = msg.GameStatus.Jackpot
|
||
//
|
||
// // 玩家信息 和下注信息
|
||
// var betAreaInfo []*pb.ColorPinoyLiveGameBetAreaInfo
|
||
// for _, betArea := range rm.betEndBetAreasOdds {
|
||
// areaInfo := new(pb.ColorPinoyLiveGameBetAreaInfo)
|
||
// areaInfo.BetType = betArea.BetType
|
||
// areaInfo.Odd = betArea.Odd
|
||
// areaInfo.IsBigOdd = betArea.IsBigOdd
|
||
// areaInfo.IsJackpot = betArea.IsJackpot
|
||
// areaInfo.BigSingleColorOddPos = betArea.BigSingleColorOddPos
|
||
//
|
||
// areaInfo.BetChipsInfo = []*pb.ColorPinoyLiveGameBetAreaUserInfo{}
|
||
// betAreaInfo = append(betAreaInfo, areaInfo)
|
||
// }
|
||
// rm.Traverse(func(u *model.User) bool {
|
||
// if u.totalBet > 0 {
|
||
// // 下注玩家下注区域信息
|
||
// for _, info := range betAreaInfo {
|
||
// for betType, betChips := range u.totalBets {
|
||
// if pb.ColorPinoyLiveBetTypeJP(betType) == info.BetType && betChips != 0 {
|
||
// var betAearUser = new(pb.ColorPinoyLiveGameBetAreaUserInfo)
|
||
// betAearUser.UserID = u.UserID
|
||
// betAearUser.BetChips = betChips
|
||
// info.BetChipsInfo = append(info.BetChipsInfo, betAearUser)
|
||
// }
|
||
// }
|
||
// }
|
||
// }
|
||
// return true
|
||
// })
|
||
// msg.BetAreaInfo = betAreaInfo
|
||
// msg.MulRangeConfig = rm.MulRangeConfig()
|
||
//
|
||
// if u != nil {
|
||
// // 后台配置的下注档位信息
|
||
// roomBetRule := new(pb.ColorPinoyLiveRoomBetRuleMsg)
|
||
// for _, v := range rm.RoomCfg.ColorPinoyLiveConfig.BetList {
|
||
// betArr := new(pb.ColorPinoyLiveBetArr)
|
||
// betArr.BetArr = v
|
||
// roomBetRule.BetLevels = append(roomBetRule.BetLevels, betArr)
|
||
// }
|
||
// roomBetRule.BetMinLimit = rm.RoomCfg.BaseBet
|
||
// roomBetRule.Level = rm.RoomCfg.ColorPinoyLiveConfig.BetLevel
|
||
// msg.BetRule = roomBetRule
|
||
// // 上局下注数据
|
||
// if u.TempLastTimeBet != nil {
|
||
// msg.LastTimeBet = make([]*pb.ColorPinoyLiveBetReqs, 0)
|
||
// for _, reqs := range u.TempLastTimeBet {
|
||
// betreq := &pb.ColorPinoyLiveBetReqs{}
|
||
// for _, req := range reqs {
|
||
// betreq.Info = append(betreq.Info, req)
|
||
// }
|
||
// msg.LastTimeBet = append(msg.LastTimeBet, betreq)
|
||
// }
|
||
// }
|
||
// }
|
||
//
|
||
// if rm.Status == pb.ColorPinoyLiveGameStatus_ColorPinoyLiveOpenThreeDice || rm.Status == pb.ColorPinoyLiveGameStatus_ColorPinoyLiveSettleStatus {
|
||
// // 3个骰子
|
||
// // log.Debug("同步房间信息发送场景信息 rm.NormalDices:", rm.NormalDices)
|
||
// msg.LuckyDice = pb.ColorPinoyLiveDiceColorType(model.GetColor(rm.LuckyDice))
|
||
// msg.ThreeDice = []pb.ColorPinoyLiveDiceColorType{}
|
||
// for _, dice := range rm.NormalDices {
|
||
// msg.ThreeDice = append(msg.ThreeDice, pb.ColorPinoyLiveDiceColorType(model.GetColor(dice)))
|
||
// // log.Debug("同步房间信息发送场景信息 i:", i, "dice:", dice, "color:", pb.DiceColorType(model.GetColor(dice)), "msg.ThreeDice:", msg.ThreeDice)
|
||
// }
|
||
// msg.AniThreeDiceRouteIndex = rm._aniThreeDiceRouteIndex
|
||
// }
|
||
// // 走势图
|
||
// msg.TrendList = rm.GameTrend
|
||
// if msg.TrendList != nil {
|
||
// msg.TrendList.LuckStarRate = rm.GetGameTrend()
|
||
// }
|
||
//
|
||
// // 在线人数
|
||
// msg.OnlineNums = int32(len(rm.OnlineUserList))
|
||
// if rm.LiveMgr.RankList != nil {
|
||
// msg.RankList = rm.LiveMgr.RankList.PlayerData
|
||
// }
|
||
// // msg.Bonus = int32(rm.RoomCfg.ColorPinoyLiveConfig.Bonus)
|
||
//
|
||
// liveAuthDuration := time.Hour * 24
|
||
// //goland:noinspection GoDfaNilDereference
|
||
// msg.ArtcUrl, _ = artc.GetAuthedUrl(
|
||
// gconfig.LiveRtcConfig.Uri,
|
||
// gconfig.LiveRtcConfig.Key,
|
||
// u.UserInetr.GetId(),
|
||
// liveAuthDuration,
|
||
// )
|
||
// roomArgs, _ := trtc.GetRoomArgs(
|
||
// gconfig.LiveTrtcConfig.AppId,
|
||
// gconfig.LiveTrtcConfig.SecretKey,
|
||
// int64(gconfig.LiveTrtcConfig.GameId),
|
||
// u.UserInetr.GetId(),
|
||
// liveAuthDuration,
|
||
// gconfig.GConfig.GDataConfig.VersionMode,
|
||
// )
|
||
// msg.TrtcRoomArgs = &pb.TRTCRoomArgs{
|
||
// AppId: roomArgs.AppId,
|
||
// StrRoomId: roomArgs.StrRoomId,
|
||
// UserId: roomArgs.UserId,
|
||
// UserSig: roomArgs.UserSig,
|
||
// }
|
||
// msg.Balance = u.Balance
|
||
// msg.BigWinner = rm.BigWinner
|
||
// if rm.GetGameStatus() < pb.ColorPinoyLiveGameStatus_ColorPinoyLiveEndBetMovie {
|
||
// msg.BigWinner = nil
|
||
// }
|
||
// msg.DealerName = rm.dealerName
|
||
// // log.Debug("同步房间信息发送场景信息 msg:", msg)
|
||
// // log.Debug(msg)
|
||
// u.SendMsg(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeGameSync), msg)
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) SendUserBet(u *model.User) {
|
||
// msg := new(pb.ColorPinoyLiveSceneBetInfo)
|
||
// msg.UserBets = u.totalBets[:]
|
||
// msg.totalBets = rm.totalBets[:]
|
||
// msg.UserBetTotal = u.totalBet
|
||
// // msg.MasterBetType = rm.LastMasterBetType
|
||
// msg.UserInfo = new(pb.ColorPinoyLiveUserInfo)
|
||
// msg.UserInfo.UserID = u.UserID
|
||
// msg.UserInfo.UserGlod = u.Balance
|
||
// msg.UserInfo.NikeName = u.UserInetr.GetNike()
|
||
// msg.UserInfo.Head = u.UserInetr.GetHead()
|
||
// _ = u.UserInetr.SendMsg(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeGameUserBet), msg)
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) SendRuleInfo() {
|
||
// // 后台配置的下注档位信息
|
||
// msg := new(pb.ColorPinoyLiveRoomBetRuleMsg)
|
||
// for _, v := range rm.RoomCfg.ColorPinoyLiveConfig.BetList {
|
||
// betArr := new(pb.ColorPinoyLiveBetArr)
|
||
// betArr.BetArr = v
|
||
// msg.BetLevels = append(msg.BetLevels, betArr)
|
||
// }
|
||
// msg.BetMinLimit = rm.RoomCfg.BaseBet
|
||
// msg.Level = rm.RoomCfg.ColorPinoyLiveConfig.BetLevel
|
||
// msg.MulRangeConfig = rm.MulRangeConfig()
|
||
// // log.Debug("发送规则 2222 BroadcastRuleInfo:", msg)
|
||
// rm.Table.Broadcast(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeRoomBetRuleMsg), msg)
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) SendScene(user inter.UserInetr) bool {
|
||
// _ = user
|
||
// return true
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) copyBetAreaOdds() []*pb.ColorPinoyLiveBetAreaOdd {
|
||
// var betAreaMul []*pb.ColorPinoyLiveBetAreaOdd
|
||
// // 游戏下注区域倍率
|
||
// for _, areaOdds := range rm.afterBetAreaOdds {
|
||
// area := &pb.ColorPinoyLiveBetAreaOdd{
|
||
// BetArea: areaOdds.BetArea,
|
||
// Odd: areaOdds.Odd,
|
||
// ViewOdd: areaOdds.ViewOdd,
|
||
// IsBigOdd: areaOdds.IsBigOdd,
|
||
// BigSingleColorOddPos: areaOdds.BigSingleColorOddPos,
|
||
// IsWin: areaOdds.IsWin,
|
||
// IsJackpot: areaOdds.IsJackpot,
|
||
// }
|
||
// betAreaMul = append(betAreaMul, area)
|
||
// }
|
||
// return betAreaMul
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) GameSync(user inter.UserInetr) {
|
||
// // 玩家加入 牌桌
|
||
// u := rm.getUser(user)
|
||
// rm.SendSceneMsg(u)
|
||
// rm.Table.AddTimer(100, func() {
|
||
// if rm.LiveMgr.MaintenanceStatus == 1 {
|
||
// rm.sendUserMainte(u, int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeGameMainte))
|
||
// }
|
||
// })
|
||
// }
|
||
//
|
||
// // 向客户端发送结算消息
|
||
// func (rm *ColorRoom) sendSettleMsg2Client() {
|
||
//
|
||
// MaxWinGold := int64(0)
|
||
// MaxWinUserID := int64(0)
|
||
// var RealSystemWins [config.BET_TYPE_NUM]int64
|
||
// var RealSystemWin int64
|
||
// var SystemTax int64
|
||
// var PlayerData []*pb.ColorPinoyLivePlayerData
|
||
// betTypePlayerCount := [config.BET_TYPE_NUM]int64{}
|
||
// wins := rm.PokerMsg.WinBetArea
|
||
//
|
||
// // 玩家各个下注区域的输赢情况
|
||
// var betAreaInfo []*pb.ColorPinoyLiveGameBetAreaInfo
|
||
// for i := 0; i < config.BET_TYPE_NUM; i++ {
|
||
// areaInfo := new(pb.ColorPinoyLiveGameBetAreaInfo)
|
||
// areaInfo.BetType = pb.ColorPinoyLiveBetTypeJP(i)
|
||
// for _, win := range wins {
|
||
// if win.BetArea == areaInfo.BetType {
|
||
// areaInfo.IsWin = 1
|
||
// }
|
||
// }
|
||
// areaInfo.BetChipsInfo = []*pb.ColorPinoyLiveGameBetAreaUserInfo{}
|
||
// betAreaInfo = append(betAreaInfo, areaInfo)
|
||
// }
|
||
//
|
||
// // 获取有座玩家下注情况 暂时没有有座玩家下注
|
||
// var betUserInfo []*pb.ColorPinoyLiveSceneUserInfo
|
||
// noChairTotalWin := int64(0)
|
||
// rm.Traverse(func(u *model.User) bool {
|
||
// if u.totalBet > 0 && u.SettleMsg != nil {
|
||
// user := new(pb.ColorPinoyLiveSceneUserInfo)
|
||
// user.UserID = u.UserID
|
||
// user.TotalWin = u.SettleMsg.TotalWin
|
||
// user.UserScore = u.SettleMsg.UserScore
|
||
//
|
||
// for _, info := range betAreaInfo {
|
||
// for betType, betChips := range u.SettleMsg.UserBets {
|
||
// if pb.ColorPinoyLiveBetTypeJP(betType) == info.BetType && betChips != 0 {
|
||
// var betAearUser = new(pb.ColorPinoyLiveGameBetAreaUserInfo)
|
||
// betAearUser.UserID = u.UserID
|
||
// betAearUser.BetChips = betChips
|
||
// info.BetChipsInfo = append(info.BetChipsInfo, betAearUser)
|
||
// }
|
||
// }
|
||
// }
|
||
// betUserInfo = append(betUserInfo, user)
|
||
// noChairTotalWin += u.SettleMsg.TotalWin
|
||
//
|
||
// }
|
||
// return true
|
||
// })
|
||
//
|
||
// // 单播每个玩家的结算信息
|
||
// copyBetAreaMul := rm.copyBetAreaOdds()
|
||
// betCount := int64(0)
|
||
// GameTotalBets := [config.BET_TYPE_NUM]int64{}
|
||
// rm.Traverse(func(u *model.User) bool {
|
||
//
|
||
// SceneUserInfo := new(pb.ColorPinoyLiveSceneSettleMsg)
|
||
// // 下注区域投注信息
|
||
// SceneUserInfo.BetAreaInfo = betAreaInfo
|
||
// // 本局走势图数据
|
||
// trendGroup := new(pb.ColorPinoyLiveTrendGroup)
|
||
// trendGroup.LuckyDice = pb.ColorPinoyLiveDiceColorType(model.GetColor(rm.LuckyDice))
|
||
// for _, dice := range rm.NormalDices {
|
||
// trendGroup.ThreeDice = append(trendGroup.ThreeDice, pb.ColorPinoyLiveDiceColorType(model.GetColor(dice)))
|
||
// }
|
||
// SceneUserInfo.TrendGroup = trendGroup
|
||
// // 有座玩家下注信息 暂时没有有座玩家
|
||
// // SceneUserInfo.UserList = betUserInfo
|
||
// // 幸运骰子
|
||
// SceneUserInfo.LuckyDice = pb.ColorPinoyLiveDiceColorType(model.GetColor(rm.LuckyDice))
|
||
// // 3个骰子
|
||
// SceneUserInfo.ThreeDice = []pb.ColorPinoyLiveDiceColorType{}
|
||
// for _, dice := range rm.NormalDices {
|
||
// SceneUserInfo.ThreeDice = append(SceneUserInfo.ThreeDice, pb.ColorPinoyLiveDiceColorType(model.GetColor(dice)))
|
||
// }
|
||
// // 自己的投注信息
|
||
// if u.SettleMsg != nil {
|
||
// SceneUserInfo.SelfWinInfo = new(pb.ColorPinoyLiveSceneUserInfo)
|
||
// SceneUserInfo.SelfWinInfo.UserID = int64(u.UserInetr.GetId())
|
||
// SceneUserInfo.SelfWinInfo.SceneSeatID = int32(u.SceneChairId)
|
||
// SceneUserInfo.SelfWinInfo.TotalWin = u.SettleMsg.TotalWin // 净利 + 投注本金
|
||
// SceneUserInfo.SelfWinInfo.UserScore = u.SettleMsg.UserScore
|
||
// SceneUserInfo.SelfWinInfo.JackpotWin = u.SettleMsg.JackpotWin
|
||
// SceneUserInfo.SelfWinInfo.NormalWin = u.SettleMsg.TotalWin - u.SettleMsg.JackpotWin
|
||
// }
|
||
// // 上局投注信息
|
||
// SceneUserInfo.LastTimeBet = make([]*pb.ColorPinoyLiveBetReqs, 0)
|
||
// for _, reqs := range u.LastTimeBet {
|
||
// betreq := &pb.ColorPinoyLiveBetReqs{}
|
||
// for _, req := range reqs {
|
||
// betreq.Info = append(betreq.Info, req)
|
||
// }
|
||
// SceneUserInfo.LastTimeBet = append(SceneUserInfo.LastTimeBet, betreq)
|
||
// }
|
||
// SceneUserInfo.TrendGroupEx = &pb.ColorPinoyLiveTrend{}
|
||
// SceneUserInfo.TrendGroupEx.ListTrendGroup = rm.GameTrend.ListTrendGroup
|
||
// SceneUserInfo.TrendGroupEx.LuckStarRate = rm.GetGameTrend()
|
||
// SceneUserInfo.BigWinner = rm.BigWinner
|
||
// SceneUserInfo.Jackpot = rm.jackpotMgr.GetJackpot()
|
||
// SceneUserInfo.JackpotUserName = u.SettleMsg.JackpotUserName
|
||
// // 单播玩家结算信息
|
||
// // log.Debug("发送结算信息 SceneUserInfo BetAreaInfo:", SceneUserInfo.BetAreaInfo)
|
||
// // log.Debug("发送结算信息 SceneUserInfo UserList:", SceneUserInfo.UserList)
|
||
// // log.Debug("发送结算信息 SceneUserInfo SelfWinInfo:", SceneUserInfo.SelfWinInfo)
|
||
// u.SendMsg(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeGameUserSettle), SceneUserInfo)
|
||
//
|
||
// if !u.IsRobot && u.SettleMsg != nil {
|
||
// RealSystemWin += u.totalBet
|
||
// RealSystemWin -= u.SettleMsg.TotalWin
|
||
// betCount += u.totalBet
|
||
// SystemTax += u.SettleMsg.Tax
|
||
// if MaxWinGold < u.SettleMsg.TotalWin-u.totalBet {
|
||
// MaxWinGold = u.SettleMsg.TotalWin - u.totalBet
|
||
// MaxWinUserID = u.UserInetr.GetId()
|
||
// }
|
||
// for i, bet := range u.totalBets {
|
||
// if bet > 0 {
|
||
// RealSystemWins[i] += bet
|
||
// betTypePlayerCount[i] += 1
|
||
// RealSystemWins[i] -= u.SettleMsg.UserRealWins[i]
|
||
// GameTotalBets[i] += bet
|
||
// }
|
||
// }
|
||
// // 写入数据库统计信息
|
||
// if u.totalBet > 0 {
|
||
// // 玩家下注区域统计
|
||
// u.SettleMsg.UserBetsCount = make([]int64, config.BET_TYPE_NUM)
|
||
// for i, count := range u.TotalBetsCount {
|
||
// u.SettleMsg.UserBetsCount[i] = count
|
||
// }
|
||
// PlayerData = append(PlayerData, &pb.ColorPinoyLivePlayerData{
|
||
// Uid: u.UserID,
|
||
// totalBets: u.SettleMsg.UserBets, // 玩家各个区域的总下注额
|
||
// totalBet: u.totalBet,
|
||
// Profit: u.SettleMsg.TotalWin,
|
||
// Tax: u.SettleMsg.Tax,
|
||
// Balance: u.Balance,
|
||
// PreBalance: u.PreBalance,
|
||
// UserWins: u.SettleMsg.UserWins, // 玩家赢取的下注区域总下注额
|
||
// UserRealWins: u.SettleMsg.UserRealWins, // 玩家赢取的下注区域总下注额 扣税后
|
||
// AreaOdds: copyBetAreaMul, // 投注区域赔率
|
||
// StartTime: u.StartAt,
|
||
// TransBet: u.TransBet,
|
||
// TransWin: u.TransWin,
|
||
// DevMode: u.UserInetr.GetDevMode(),
|
||
// UserBetsCount: u.SettleMsg.UserBetsCount,
|
||
// Nickname: u.UserInetr.GetNike(),
|
||
// Avatar: u.UserInetr.GetHead(),
|
||
// })
|
||
// }
|
||
// // log.Debug("开奖倍率:", u.SettleMsg.OddsWins)
|
||
// }
|
||
//
|
||
// // u.ResetUserData()
|
||
// return true
|
||
// })
|
||
// // rm.Table.GameBetInfo(gameBetInfos)
|
||
// cou := model.Usercount{}
|
||
// cou = rm.OnlineUserList
|
||
// sort.Sort(cou)
|
||
//
|
||
// for key, v := range pb.ColorPinoyLiveBetTypeJP_value {
|
||
// if rm.totalBets[v] > 0 || betTypePlayerCount[v] > 0 || RealSystemWins[v] > 0 {
|
||
// log.Debug(rm.Log("%v 区域:总:%v 真:%v 真人数量:%v 真输赢:%v", key, score.GetScoreStr(rm.totalBets[v]), score.GetScoreStr(GameTotalBets[v]), betTypePlayerCount[v], score.GetScoreStr(rm.totalBets[v]-RealSystemWins[v])))
|
||
// }
|
||
// }
|
||
//
|
||
// str := fmt.Sprintf("开局结果 幸运骰子:%v :普通骰子:%v ,%v ,%v ,",
|
||
// model.GetColorString(rm.LuckyDice), model.GetColorString(rm.NormalDices[0]), model.GetColorString(rm.NormalDices[1]), model.GetColorString(rm.NormalDices[2]))
|
||
//
|
||
// str += fmt.Sprintf("总押注:%v ", score.GetScoreStr(rm.totalBet))
|
||
//
|
||
// str += fmt.Sprintf("真人 总押注:%v , 系统输赢额度:%v ",
|
||
// score.GetScoreStr(betCount),
|
||
// score.GetScoreStr(RealSystemWin),
|
||
// )
|
||
//
|
||
// str += fmt.Sprintf("最高获利用户ID:%v 获得:%v",
|
||
// MaxWinUserID, score.GetScoreStr(MaxWinGold))
|
||
//
|
||
// log.Debug(rm.Log(str))
|
||
// log.Debug(rm.Log("各区域投注:%v", rm.totalBets))
|
||
// log.Debug(rm.Log("真人各区域投注:%v", GameTotalBets))
|
||
// log.Debug(rm.Log("真人各区域中奖:%v", RealSystemWins))
|
||
// log.Debug(rm.Log("中奖区域:%v", wins))
|
||
//
|
||
// // SceneSettleMsg.NoChairTotalWin = noChairTotalWin
|
||
// // rm.Table.Broadcast(int32(pb.SendToClientMessageType_NoticeGameSettle), SceneSettleMsg)
|
||
// rm.LiveMgr.RankList = &pb.ColorPinoyLiveRankList{
|
||
// PlayerData: nil,
|
||
// GameNo: rm.Table.GetGameRoundId(),
|
||
// StartTime: rm.startAt,
|
||
// EndTime: rm.endAt,
|
||
// }
|
||
//
|
||
// // 发布事件
|
||
// if PlayerData == nil || len(PlayerData) == 0 {
|
||
// return
|
||
// }
|
||
// // 开奖结果
|
||
// var threeDice []pb.ColorPinoyLiveDiceColorType
|
||
// for _, dice := range rm.NormalDices {
|
||
// threeDice = append(threeDice, pb.ColorPinoyLiveDiceColorType(model.GetColor(dice)))
|
||
// }
|
||
//
|
||
// var startDice []pb.ColorPinoyLiveDiceColorType
|
||
// for _, dice := range rm.StartDices {
|
||
// startDice = append(startDice, pb.ColorPinoyLiveDiceColorType(model.GetColor(dice)))
|
||
// }
|
||
//
|
||
// gameDetail := &pb.ColorPinoyLiveDetail{
|
||
// // LuckyDice: pb.ColorPinoyLiveDiceColorType(model.GetColor(rm.LuckyDice)),
|
||
// ThreeDice: threeDice,
|
||
// // Bonus: rm.RoomCfg.ColorPinoyLiveConfig.Bonus,
|
||
// StartDice: startDice,
|
||
// ResultImg: rm.ResultImgs,
|
||
// DealerName: rm.dealerName,
|
||
// BetAreaMul: copyBetAreaMul,
|
||
// JackpotFunding: rm.jackpotFunding,
|
||
// JackpotX: rm.jackpotX,
|
||
// JackpotY: rm.jackpotY,
|
||
// }
|
||
//
|
||
// gameRecordData := &pb.ColorPinoyLiveEnd{
|
||
// GameNo: rm.Table.GetGameRoundId(),
|
||
// StartTime: rm.startAt,
|
||
// EndTime: rm.endAt,
|
||
// Level: gconfig.GConfig.GRoomConfig.Level,
|
||
// BaseBet: rm.RoomCfg.BaseBet,
|
||
// PlayerData: PlayerData,
|
||
// TaxRate: rm.RoomCfg.Rate,
|
||
// totalBet: betCount,
|
||
// totalBets: GameTotalBets[:],
|
||
// RealSystemWin: RealSystemWin,
|
||
// RealSystemWins: RealSystemWins[:],
|
||
// Tax: SystemTax,
|
||
// Wins: nil,
|
||
// OpToken: gconfig.GConfig.GServConfig.ChannelId,
|
||
// Detail: gameDetail,
|
||
// }
|
||
// for _, winArea := range rm.PokerMsg.WinBetArea {
|
||
// gameRecordData.Wins = append(gameRecordData.Wins, winArea.BetArea)
|
||
// }
|
||
//
|
||
// sort.Slice(PlayerData, func(i, j int) bool {
|
||
// return PlayerData[i].Profit > PlayerData[j].Profit
|
||
// })
|
||
//
|
||
// for i := 0; i < 6 && i < len(PlayerData); i++ {
|
||
// if PlayerData[i].TransWin == 0 {
|
||
// continue
|
||
// }
|
||
// rm.LiveMgr.RankList.PlayerData = append(rm.LiveMgr.RankList.PlayerData, PlayerData[i])
|
||
// }
|
||
// log.Debug(rm.Log("玩家数量:%v 赢家数量:%v", len(PlayerData), len(rm.LiveMgr.RankList.PlayerData)))
|
||
// go func() {
|
||
// // log.Debug("color game 游戏记录:", gameDetail)
|
||
// // log.Debug("color game 游戏记录 Tax:", gameRecordData.Tax)
|
||
// // log.Debug("color game 游戏记录 Wins:", gameRecordData.Wins)
|
||
// // log.Debug("color game 游戏记录 PlayerData:", gameRecordData.PlayerData)
|
||
// s, _ := json.Marshal(gameRecordData)
|
||
// log.Debug(rm.Log("记录区域数据:%v", string(s)))
|
||
// err := gconfig.Produce(context.Background(), define.TopicColoLiveGameGameEnd, gameRecordData)
|
||
// if err != nil {
|
||
// log.Error(rm.Log("[%s] fail to Produce TongitsGameEndEvent(%+v), err: %v", gameRecordData.GameNo, gameRecordData, err))
|
||
// }
|
||
// }()
|
||
//
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) SendOnlinePlayerNum() {
|
||
// msg := new(pb.ColorPinoyLiveS2COnlinePlayerNum)
|
||
// msg.Num = int64(len(rm.OnlineUserList))
|
||
// rm.Table.Broadcast(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeOnlinePlayerNum), msg)
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) SendRoomInfo() {
|
||
// // if rm.GetGameStatus() == 0 {
|
||
// // return
|
||
// // }
|
||
// // msg := new(pb.UpdateRoomInfoMsg)
|
||
// // msg.OnlineNum = int64(len(rm.OnlineUserList))
|
||
// // rm.Table.Broadcast(int32(pb.SendToClientMessageType_NoticeUpdateRoomInfo), msg)
|
||
// }
|
||
//
|
||
// // 广播主播名字
|
||
// func (rm *ColorRoom) NotifyDealerName() {
|
||
// msg := new(pb.ColorPinoyLiveDealerName)
|
||
// msg.DealerName = rm.dealerName
|
||
// rm.Table.Broadcast(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeDealerName), msg)
|
||
// log.Debug(rm.Log("NotifyDealerName:%v", msg))
|
||
// }
|
||
//
|
||
// type MulRangeW struct {
|
||
// *game.ColorMulRate
|
||
// MinW int // 权重转换成数值区间
|
||
// MaxW int // 权重转换成数值区间
|
||
// ColorPos pb.ColorPinoyLiveBigBetAreaPos // 0:单色区域基础倍率 1:单色区域双色倍率 2:单色区域开三色倍率 3:双色区域 4:三色区域
|
||
// }
|
||
//
|
||
// // 带有权重信息的五行倍率数组(单色单,单色双,单色三,双色,三色倍率数组)
|
||
// func (rm *ColorRoom) initMulRangeW() (mulRangeW [][]*MulRangeW) {
|
||
// mulRangeW = make([][]*MulRangeW, 0, 5)
|
||
//
|
||
// for pos, mulWs := range rm.Cfg.WinSingleColorMul {
|
||
// var single []*MulRangeW
|
||
// for _, mul := range mulWs {
|
||
// single = append(single, &MulRangeW{MulRate: mul, ColorPos: pb.ColorPinoyLiveBigBetAreaPos(pos)})
|
||
// }
|
||
// mulRangeW = append(mulRangeW, single)
|
||
// }
|
||
//
|
||
// var double []*MulRangeW
|
||
// for _, mul := range rm.Cfg.WinDoubleColorMul {
|
||
// double = append(double, &MulRangeW{MulRate: mul, ColorPos: pb.ColorPinoyLiveBigBetAreaPos_BBA_Double})
|
||
// }
|
||
// mulRangeW = append(mulRangeW, double)
|
||
//
|
||
// var three []*MulRangeW
|
||
// for _, mul := range rm.Cfg.WinThreeColorMul {
|
||
// three = append(three, &MulRangeW{MulRate: mul, ColorPos: pb.ColorPinoyLiveBigBetAreaPos_BBA_Three})
|
||
// }
|
||
// mulRangeW = append(mulRangeW, three)
|
||
//
|
||
// for _, mulRws := range mulRangeW {
|
||
// begin := 0
|
||
// for _, v := range mulRws {
|
||
// v.MinW = begin
|
||
// v.MaxW = begin + v.Rate
|
||
// begin += v.Rate
|
||
// }
|
||
// }
|
||
//
|
||
// return mulRangeW
|
||
// }
|
||
//
|
||
// // 返回单色投注区爆奖的权重数组及是爆在双色还是三色位置
|
||
// func (rm *ColorRoom) randSingle(cfg *config.ColorPinoyLiveConfig) (singleMul []*MulRangeW, singlePos int) {
|
||
// maxWeight := 0
|
||
// for _, w := range cfg.WinSingleColorWeight {
|
||
// maxWeight += w
|
||
// }
|
||
// weight := rand.RandInt(0, maxWeight)
|
||
// log.Debug(rm.Log("单色投注区获取爆奖在双色还是三色,随机值为:%v 最大值:%v", weight, maxWeight))
|
||
// for pos, w := range cfg.WinSingleColorWeight {
|
||
// if weight > w {
|
||
// weight -= w
|
||
// continue
|
||
// }
|
||
// log.Debug(rm.Log("单色投注区获取爆奖根据权重随机出来的爆奖位置为:%v", pos))
|
||
// // 爆奖只会提高开出双色或三色的赔率,基础赔率区不会爆奖
|
||
// if pos == 0 {
|
||
// log.Debug(rm.Log("单色投注区的基础赔率区不会爆奖"))
|
||
// return nil, pos
|
||
// }
|
||
// for _, mul := range cfg.WinSingleColorMul[pos] {
|
||
// singleMul = append(singleMul, &MulRangeW{MulRate: mul, ColorPos: pb.ColorPinoyLiveBigBetAreaPos(pos)})
|
||
// }
|
||
// begin := 0
|
||
// for _, v := range singleMul {
|
||
// v.MinW = begin
|
||
// v.MaxW = begin + v.Rate
|
||
// begin += v.Rate
|
||
// }
|
||
// return singleMul, pos
|
||
// }
|
||
// return nil, 0
|
||
// }
|
||
//
|
||
// // 更新
|
||
// func (rm *ColorRoom) updateBetEndBetAreasOdds(mulRangeWs [][]*MulRangeW) {
|
||
// for pos, betArea := range rm.betEndBetAreasOdds {
|
||
// log.Debug(rm.Log("区域:%v 随机前 爆奖状态:%v", pb.ColorPinoyLiveBetTypeJP(pos), betArea.IsBigOdd))
|
||
// betArea.IsBigOdd = false
|
||
// // 区域位置 0-2分别为单色、双色、三色投注区域,
|
||
// index := pos / 6
|
||
// singlePos := 0
|
||
// var mulRangeW []*MulRangeW
|
||
// if index == 0 {
|
||
// mulRangeW, singlePos = rm.randSingle(rm.Cfg)
|
||
// } else {
|
||
// mulRangeW = mulRangeWs[index+2]
|
||
// }
|
||
// if mulRangeW == nil {
|
||
// log.Error(rm.Log("投注区域:%v 获取爆奖权重数组为nil", pos))
|
||
// continue
|
||
// }
|
||
// rdv := rand.RandInt(mulRangeW[0].MinW, mulRangeW[len(mulRangeW)-1].MaxW)
|
||
// for mulPos, mul := range mulRangeW {
|
||
// if rdv < mul.MinW || rdv >= mul.MaxW {
|
||
// continue
|
||
// }
|
||
// if index == 0 {
|
||
// betArea.Odd[singlePos] = mul.Mul
|
||
// if singlePos != 0 && mulPos != 0 {
|
||
// log.Debug(rm.Log("区域:%v 爆奖位置:%v", pb.ColorPinoyLiveBetTypeJP(pos), mul.ColorPos))
|
||
// betArea.IsBigOdd = true
|
||
// }
|
||
// } else {
|
||
// betArea.Odd[0] = mul.Mul
|
||
// if mulPos != 0 {
|
||
// log.Debug(rm.Log("区域:%v 爆奖位置:%v", pb.ColorPinoyLiveBetTypeJP(pos), mul.ColorPos))
|
||
// betArea.IsBigOdd = true
|
||
// }
|
||
// }
|
||
// betArea.BigSingleColorOddPos = mul.ColorPos
|
||
// break
|
||
// }
|
||
// log.Debug(rm.Log("区域:%v 爆奖权重区间:[%v,%v],随机数:%v betArea:%+v", pb.ColorPinoyLiveBetTypeJP(pos),
|
||
// mulRangeW[0].MinW, mulRangeW[len(mulRangeW)-1].MaxW, rdv, betArea))
|
||
// }
|
||
// // 更新jackpot标记
|
||
// _ = rm.randJackpotArea()
|
||
// return
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) randJackpotArea() []pb.ColorPinoyLiveBetTypeJP {
|
||
// betAreaInfo := make(map[int]*pb.ColorPinoyLiveGameBetAreaInfo)
|
||
// for pos, betArea := range rm.betEndBetAreasOdds {
|
||
// betAreaInfo[pos] = betArea
|
||
// }
|
||
// // 利用map的随机特性
|
||
// for pos, betArea := range betAreaInfo {
|
||
// // 区域位置 0-2分别为单色、双色、三色投注区域,
|
||
// index := pos / 6
|
||
// if index > 0 {
|
||
// continue
|
||
// }
|
||
// _, singlePos := rm.randSingle(rm.Cfg)
|
||
// // 在单色区域 命中三同色爆奖之后 再随jackpot概率
|
||
// // 只会有一个区域有jackpot标签
|
||
// if singlePos == 2 {
|
||
// if rand.RandInt(0, 10000) < rm.Cfg.JackpotRate {
|
||
// betArea.IsJackpot = true
|
||
// return []pb.ColorPinoyLiveBetTypeJP{betArea.BetType}
|
||
// }
|
||
// }
|
||
// }
|
||
// return nil
|
||
// }
|
||
//
|
||
// // 区域爆奖
|
||
// func (rm *ColorRoom) NotifyBigBetAreaMul() {
|
||
// mulRangeW := rm.initMulRangeW()
|
||
// rm.updateBetEndBetAreasOdds(mulRangeW)
|
||
//
|
||
// for _, betArea := range rm.betEndBetAreasOdds {
|
||
// log.Debug(rm.Log("投注区域:%v 倍率:%v 是否爆奖:%v 是否jackpot:%v 倍率位置:%v", betArea.BetType, betArea.Odd, betArea.IsBigOdd, betArea.IsJackpot, betArea.BigSingleColorOddPos))
|
||
// }
|
||
//
|
||
// msg := new(pb.ColorPinoyLiveNtfBigOddBetArea)
|
||
// msg.BetAreas = rm.betEndBetAreasOdds
|
||
// rm.Table.Broadcast(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeBigOddBetArea), msg)
|
||
// log.Debug(rm.Log("ColorPinoyLiveNtfBigOddBetArea:%v", msg))
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) formatScore(score int64) string {
|
||
// s := float64(score / 100.0)
|
||
// numStr := fmt.Sprintf("%.2f", s)
|
||
//
|
||
// // result := ""
|
||
// // for i := len(numStr) - 1; i >= 0; i-- {
|
||
// // result = string(numStr[i]) + result
|
||
// // if (len(numStr)-i)%3 == 0 && i != 0 {
|
||
// // result = "," + result
|
||
// // }
|
||
// // }
|
||
// return numStr
|
||
// // return result
|
||
// }
|
||
//
|
||
// func (rm *ColorRoom) BroadHitJackpot(user *model.User, jpScore int64) {
|
||
// go func() {
|
||
// req := &fmsg.ChatReq{
|
||
// Uid: user.UserID,
|
||
// GameId: rm.RoomCfg.GameId,
|
||
// Content: fmt.Sprintf("%v WIN ₱ %v FROM JACKPOT", user.UserInetr.GetNike(), rm.formatScore(jpScore)),
|
||
// Type: 0,
|
||
// }
|
||
// bReq, err := proto.Marshal(req)
|
||
// if err != nil {
|
||
// log.Error(rm.Log(err.Error()))
|
||
// return
|
||
// }
|
||
// lobbyMsg := &events.SingleMsgToLobbyEvent{
|
||
// Module: events.SingleMsgToLobbyEvent_mtl_chat,
|
||
// Data: bReq,
|
||
// }
|
||
// err = gconfig.Produce(context.Background(), define.TopicSingleMsgToLobby, lobbyMsg)
|
||
// if err != nil {
|
||
// log.Error(rm.Log("fail to Produce SingleMsgToLobbyEvent_mtl_chat, err: %v", err))
|
||
// }
|
||
// }()
|
||
// }
|