226 lines
6.2 KiB
Go
Raw Normal View History

2025-06-08 00:52:17 +08:00
package room
import (
"game/common/proto/pb"
"github.com/fox/fox/ipb"
"github.com/fox/fox/log"
)
func (rm *ColorRoom) checkEnterRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.C2SMatchRoom) {
return
}
func (rm *ColorRoom) OnEnterRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.C2SMatchRoom) {
return
}
func (rm *ColorRoom) ApplyLeave(buffer []byte, user inter.UserInetr) {
_ = buffer
resp := new(pb.ColorPinoyLiveLeaveResp)
u := rm.GetPlayer(user.GetId())
if u == nil {
rm.Table.KickOut(user)
return
}
// 有下注时不让玩家离开
if u.TotalBet != 0 {
resp.Code = 1
_ = user.SendMsg(int32(pb.ColorPinoyLiveReceiveFromClientMessageType_ColorPinoyLiveApplyLeave), resp)
return
}
rm.KickOutUser(u)
_ = user.SendMsg(int32(pb.ColorPinoyLiveReceiveFromClientMessageType_ColorPinoyLiveApplyLeave), resp)
return
}
func (rm *ColorRoom) checkNoBet() bool {
return rm.GetGameStatus() != pb.ColorPinoyLiveGameStatus_ColorPinoyLiveBetStatus ||
rm.LiveMgr.MaintenanceStatus == 1 ||
rm.LiveMgr.DiscardRestting
}
func (rm *ColorRoom) Bet(buffer []byte, user inter.UserInetr) {
u := rm.getUser(user)
u.MutexBet.Lock()
defer u.MutexBet.Unlock()
if rm.checkNoBet() {
log.Error(rm.Log("game bet status err:%v", rm.GetGameStatus()))
model.SendBetFailMessageInetr(model.StatusError, user)
return
}
// 用户下注
BetPb := &pb.ColorPinoyLiveBetReqs{}
err := proto.Unmarshal(buffer, BetPb)
if err != nil {
log.Error(rm.Log("proto.Unmarshal err:%v", err))
model.SendBetFailMessageInetr(model.DataErr, user)
return
}
log.Debug(rm.Log("Bet pb = ", BetPb))
var bets []*pb.ColorPinoyLiveBetReq
for _, bet := range BetPb.Info {
req := &pb.ColorPinoyLiveBetReq{
BetType: bet.BetType,
BetLevel: bet.BetLevel,
BetIndex: bet.BetIndex,
BetAmount: bet.BetAmount,
}
bets = append(bets, req)
}
// log.Debug("Bet bets =", bets)
rm.CheckAndBet(u, bets)
}
func (rm *ColorRoom) UserSitDown(buffer []byte, user inter.UserInetr) {
us := &pb.ColorPinoyLiveUserSitDown{}
_ = proto.Unmarshal(buffer, us)
// u, ok := rm.AllUserList[user.GetId()]
u := rm.GetPlayer(user.GetId())
if u != nil {
if rm.SceneInfo.SitScene(u, int(us.ChairNo)) {
u.SceneChairId = int(us.ChairNo)
rm.Traverse(func(v *model.User) bool {
// rm.SendSceneMsg(v)
return true
})
}
}
}
func (rm *ColorRoom) SendUserListInfo(user inter.UserInetr) {
msg := new(pb.ColorPinoyLiveUserList)
for _, u := range rm.OnlineUserList {
userinfo := new(pb.ColorPinoyLiveUserInfo)
userinfo.NikeName = u.UserInetr.GetNike()
userinfo.UserGlod = u.Balance
userinfo.Head = u.UserInetr.GetHead()
userinfo.UserID = u.UserID
msg.UserList = append(msg.UserList, userinfo)
}
// log.Debug("SendUserListInfo", msg)
_ = user.SendMsg(int32(pb.ColorPinoyLiveReceiveFromClientMessageType_ColorPinoyLiveApplyGetUserListInfo), msg)
}
func (rm *ColorRoom) SendTrend(u inter.UserInetr) {
// log.Debug("发送走势图")
msg := new(pb.ColorPinoyLiveTrend)
msg.ListTrendGroup = rm.GameTrend.ListTrendGroup
msg.LuckStarRate = rm.GetGameTrend()
_ = u.SendMsg(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticeGameTrendInfo), msg)
}
func (rm *ColorRoom) OnUserStanUp(user *model.User) {
rm.SceneInfo.UserStandUp(user.UserInetr)
user.Mn.Lock()
user.SceneChairId = 0
user.Mn.Unlock()
if rm.GetGameStatus() < pb.ColorPinoyLiveGameStatus_ColorPinoyLiveOpenThreeDice {
rm.SelectUserListBalanceTopSitDownChair()
} else {
// rm.Traverse(func(v *model.User) bool {
// rm.SendSceneMsg(v)
// return true
// })
}
}
func (rm *ColorRoom) AgainBet(user inter.UserInetr) {
u := rm.getUser(user)
u.MutexBet.Lock()
defer u.MutexBet.Unlock()
if rm.checkNoBet() {
log.Error(rm.Log("game bet status err ", rm.GetGameStatus()))
model.SendBetFailMessageInetr(model.StatusError, user)
return
}
// u := rm.getUser(user)
var bets []*pb.ColorPinoyLiveBetReq
if u.TempLastTimeBet != nil {
for _, bet := range u.TempLastTimeBet {
bets = append(bets, bet...)
}
}
rm.CheckAndBet(u, bets)
}
func (rm *ColorRoom) BetDouble(user inter.UserInetr) {
u := rm.getUser(user)
u.MutexBet.Lock()
defer u.MutexBet.Unlock()
if rm.checkNoBet() {
log.Error(rm.Log("game bet status err ", rm.GetGameStatus()))
model.SendBetFailMessageInetr(model.StatusError, user)
return
}
// u := rm.getUser(user)
var bets []*pb.ColorPinoyLiveBetReq
if u.LastTimeBet != nil {
for _, bet := range u.LastTimeBet {
bets = append(bets, bet...)
}
// log.Debug("BetDouble 上次下注:", u.LastTimeBet, "bets:", bets)
}
if len(bets) > 1000 {
log.Error(rm.Log("game bet status err ", rm.GetGameStatus()))
model.SendBetFailMessageInetr(12, user)
return
}
rm.CheckAndBet(u, bets)
}
func (rm *ColorRoom) OnUndoBet(buffer []byte, user inter.UserInetr) {
u := rm.getUser(user)
u.MutexBet.Lock()
defer u.MutexBet.Unlock()
if rm.checkNoBet() {
log.Error(rm.Log("game bet status err:%v", rm.GetGameStatus()))
model.SendBetFailMessageInetr(model.StatusError, user)
return
}
reqInfo := &pb.ColorPinoyLiveC2SUndoBet{}
err := proto.Unmarshal(buffer, reqInfo)
if err != nil {
log.Error(rm.Log("proto.Unmarshal err:%v", err))
model.SendBetFailMessageInetr(model.DataErr, user)
return
}
rm.UndoBet(u, reqInfo.UndoType)
}
// ApplyUseProps todo
func (rm *ColorRoom) ApplyUseProps(buffer []byte, userInter inter.UserInetr) {
applyInfo := new(pb.ColorPinoyLiveApplyPropsReq)
err := proto.Unmarshal(buffer, applyInfo)
user := rm.getUser(userInter)
if err != nil {
log.Error(rm.Log("proto.Unmarshal err:%v", err))
model.SendBetFailMessage(model.DataErr, user)
return
}
AcceptUser := rm.GetPlayer(applyInfo.AcceptUserId)
if AcceptUser == nil {
log.Error(rm.Log("AcceptUser is null"))
model.SendBetFailMessage(model.UserNull, user)
return
}
_, err = user.GetPropsReal(rm.RoomCfg.Prop, rm.Table, rm.RoomCfg)
if err != nil {
log.Error(rm.Log("GetPropsReal err", err))
model.SendBetFailMessage(model.ScoreLess, user)
return
}
leftCoins := user.Balance
propsResp := &pb.ColorPinoyLivePlayerPropsResp{
ApplyUserId: user.UserID,
AcceptUserId: AcceptUser.UserID,
PropsId: applyInfo.PropsId,
Chips: leftCoins,
}
rm.Table.Broadcast(int32(pb.ColorPinoyLiveSendToClientMessageType_ColorPinoyLiveNoticePlayerUseProps), propsResp)
}