印度包网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

106 lines
2.6 KiB

package crash
import (
"server/game"
"server/pb"
timewheel "github.com/liangdas/mqant/module/modules/timer"
)
type Player struct {
*game.Player
SetAutoCashoutOdd int64 // 客户端设置的值
AutoCashoutOdd int64 // 自动下车生效倍数
IsAutoSettle bool // 是否是自动下车触发的结算
AutoCashoutTimer string
}
func NewPlayer(player *game.Player) *Player {
p := &Player{Player: player}
player.MillionSubPlayer = game.NewMillionSubPlayer(player, p)
return p
}
func (p *Player) Reset() {
p.IsAutoSettle = false
p.AutoCashoutOdd = 0
p.AutoCashoutTimer = ""
}
func (p *Player) Enter() {
p.OnEnter()
}
func (p *Player) OnEnter() {
p.TableInfo()
}
func (p *Player) TableInfo() {
t := p.T.SubTable.(*Table)
resp := &pb.CrashMsgTableInfoResp{TableInfo: &pb.GameCommonTableInfo{}}
p.PackTableInfo(resp.TableInfo)
resp.AutoCashOut = p.SetAutoCashoutOdd
if t.Status == pb.GameStatus_GameStatusSettle {
resp.Multiple = t.Result
} else if t.Status == pb.GameStatus_GameStatusSpecial {
resp.Multiple = t.CalOdds() + 100
}
p.Send(int(pb.GameProtocol_TableInfoResp), resp)
}
func (p *Player) Settle() {
t := p.T.SubTable.(*Table)
odds := GetOdds(int64(t.FlyTime))
shouldSettleCashout := t.Status == pb.GameStatus_GameStatusSpecial // 是否应该结算退出获利
if t.Status == pb.GameStatus_GameStatusSpecial {
if p.IsAutoSettle {
odds = p.AutoCashoutOdd - 100
} else {
odds = t.CalOdds()
}
} else if p.AutoCashoutOdd-100 <= odds {
odds = p.AutoCashoutOdd - 100
shouldSettleCashout = true
}
if odds <= 0 {
shouldSettleCashout = false
}
if p.AutoCashoutTimer != "" {
timewheel.GetTimeWheel().RemoveTimer(p.AutoCashoutTimer)
}
p.Debug("settle,odds:%v", odds)
// 爆炸前结算或者开出jackpot时玩家还未退出,按最高倍数结算
if shouldSettleCashout {
p.FinalSettle = (odds + 100) * p.TotalBet / 100
if t.Status == pb.GameStatus_GameStatusSpecial {
t.Broadcast(int(pb.CrashProtocol_CrashCashOutResp), &pb.CrashMsgOtherCashOutResp{UID: uint32(p.UID), ODD: odds + 100, Nick: p.Nick}, p.UID)
p.Send(int(pb.CrashProtocol_CrashCashOutResp), &pb.CrashMsgOtherCashOutResp{UID: uint32(p.UID), ODD: odds + 100, Nick: p.Nick, Amount: p.FinalSettle})
}
}
p.Debug("set:%v", p.FinalSettle)
p.MillionSubPlayer.Settle()
}
func (p *Player) Leave() bool {
return p.MillionLeave()
}
func (p *Player) CashOut() {
t := p.T
if t.Status != pb.GameStatus_GameStatusSpecial {
return
}
p.Player.Settle()
}
func (p *Player) AutoCashOut() {
t := p.T
if t.Status != pb.GameStatus_GameStatusSpecial {
return
}
if p.AutoCashoutOdd == 0 {
return
}
p.IsAutoSettle = true
p.Player.Settle()
}