106 lines
2.9 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"
)
func (rm *ColorRoom) checkEnterRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqEnterRoom) pb.ErrCode {
_ = user
_ = iMsg
_ = req
return pb.ErrCode_OK
}
2025-06-08 00:52:17 +08:00
func (rm *ColorRoom) onMatchRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqMatchRoom) {
_ = req
code := rm.checkEnterRoom(user, iMsg, &pb.ReqEnterRoom{})
if code != pb.ErrCode_OK {
rm.SendMsg(user, pb.MsgId_RspMatchRoomId, &pb.RspMatchRoom{Code: code})
return
}
rm.enterRoom(user)
2025-06-08 00:52:17 +08:00
return
}
func (rm *ColorRoom) enterRoom(user *ColorPlayer) {
2025-06-13 14:54:44 +08:00
_ = rm.AddPayer(user)
rm.notifyColorRoomInfo(user)
}
2025-06-08 00:52:17 +08:00
func (rm *ColorRoom) onEnterRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqEnterRoom) {
code := rm.checkEnterRoom(user, iMsg, req)
rm.SendMsg(user, pb.MsgId_RspEnterRoomId, &pb.RspEnterRoom{Code: code})
if code != pb.ErrCode_OK {
return
}
rm.enterRoom(user)
return
}
func (rm *ColorRoom) checkLeaveRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqLeaveRoom) pb.ErrCode {
_ = iMsg
_ = req
if rm.status >= pb.ColorGameStatus_CGS_Settle || rm.status < pb.ColorGameStatus_CGS_Betting {
return pb.ErrCode_OK
}
if user.totalBet == 0 {
return pb.ErrCode_NotLeaveRoom
}
return pb.ErrCode_OK
}
func (rm *ColorRoom) leaveRoom(user *ColorPlayer) {
2025-06-13 14:54:44 +08:00
rm.DelPlayer(user.Id())
rm.userMgr.Del(user.ID)
2025-06-15 00:00:24 +08:00
rm.bindService.DelUserService(user.ID, pb.ServiceTypeId_STI_ColorGame)
}
func (rm *ColorRoom) onLeaveRoom(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqLeaveRoom) {
code := rm.checkLeaveRoom(user, iMsg, req)
rm.SendMsg(user, pb.MsgId_RspEnterRoomId, &pb.RspEnterRoom{Code: code})
if code == pb.ErrCode_OK {
rm.leaveRoom(user)
return
}
2025-06-08 00:52:17 +08:00
return
}
func (rm *ColorRoom) checkBet(user *ColorPlayer, _ *ipb.InternalMsg, req *pb.ReqColorBetting) pb.ErrCode {
if req.Area < pb.ColorBetArea_CBA_Yellow || req.Area > pb.ColorBetArea_CBA_Green3 {
return pb.ErrCode_ParamErr
}
// 金币不足,无法下注
if rm.GetGold(user) < user.totalBet+req.Bet {
return pb.ErrCode_GoldNotEnough
}
if rm.roomCfg.TotalBetLimit < user.totalBet+req.Bet {
return pb.ErrCode_TotalBetExceedsLimit
}
if rm.roomCfg.AreaBetLimit < user.totalBets[req.Area]+req.Bet {
return pb.ErrCode_AreaBetExceedsLimit
}
return pb.ErrCode_OK
}
func (rm *ColorRoom) onBet(user *ColorPlayer, iMsg *ipb.InternalMsg, req *pb.ReqColorBetting) {
code := rm.checkBet(user, iMsg, req)
if code != pb.ErrCode_OK {
rm.SendMsg(user, pb.MsgId_RspColorBettingId, &pb.RspColorBetting{Code: code})
return
}
curBetAreaInfo := rm.betAreaInfo[req.Area]
_, _ = rm.AddGold(user, -req.Bet)
curBetAreaInfo.TotalBet += req.Bet
if user.totalBets[req.Area] == 0 {
curBetAreaInfo.PlayerNum++
}
user.totalBets[req.Area] += req.Bet
curBetAreaInfo.MyBet = user.totalBets[req.Area]
rm.SendMsg(user, pb.MsgId_RspColorBettingId, &pb.RspColorBetting{
Code: code,
AreaInfo: curBetAreaInfo,
})
return
}