226 lines
6.2 KiB
Go
226 lines
6.2 KiB
Go
|
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)
|
||
|
}
|