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) }