十三张开牌前允许加入游戏
This commit is contained in:
parent
72ffbf9da3
commit
3840ec99a2
|
@ -26,6 +26,7 @@ func (sm *SlotsMgr) Update() {
|
||||||
|
|
||||||
func (sm *SlotsMgr) Shutdown() {
|
func (sm *SlotsMgr) Shutdown() {
|
||||||
plugin.Close()
|
plugin.Close()
|
||||||
|
module.UnregisteModule(sm)
|
||||||
}
|
}
|
||||||
func init() {
|
func init() {
|
||||||
module.RegisteModule(SlotsMgrSington, time.Hour, 0)
|
module.RegisteModule(SlotsMgrSington, time.Hour, 0)
|
||||||
|
|
|
@ -84,6 +84,8 @@ type SceneEx struct {
|
||||||
testPokers []int64 // 测试牌堆
|
testPokers []int64 // 测试牌堆
|
||||||
logid string
|
logid string
|
||||||
ctrlType int // 1控赢 2控输 0不控
|
ctrlType int // 1控赢 2控输 0不控
|
||||||
|
cardsArr [][13]int
|
||||||
|
cardsGroup []map[int]*rule.Group
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewThirteenWaterSceneData(s *base.Scene) *SceneEx {
|
func NewThirteenWaterSceneData(s *base.Scene) *SceneEx {
|
||||||
|
@ -125,6 +127,8 @@ func (this *SceneEx) Clear() {
|
||||||
this.PlayerBackup = make(map[int32]*PlayerData)
|
this.PlayerBackup = make(map[int32]*PlayerData)
|
||||||
this.LeaveNum = 0
|
this.LeaveNum = 0
|
||||||
this.ctrlType = 0
|
this.ctrlType = 0
|
||||||
|
this.cardsArr = nil
|
||||||
|
this.cardsGroup = nil
|
||||||
|
|
||||||
for i := 0; i < this.GetPlayerNum(); i++ {
|
for i := 0; i < this.GetPlayerNum(); i++ {
|
||||||
if this.seats[i] != nil {
|
if this.seats[i] != nil {
|
||||||
|
@ -520,10 +524,9 @@ func (this *SceneEx) GetScore(player *PlayerEx) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送玩家的所有牌和所有牌型
|
func (this *SceneEx) SendToPlayerCardsBySnid(snid int32) {
|
||||||
func (this *SceneEx) SendToPlayerCards(s *base.Scene) {
|
|
||||||
for _, player := range this.players {
|
for _, player := range this.players {
|
||||||
if player != nil && player.IsGameing() {
|
if player != nil && player.IsGameing() && (snid == 0 || player.SnId == snid) {
|
||||||
all, k := AllGroupToProto(player.allGroup)
|
all, k := AllGroupToProto(player.allGroup)
|
||||||
pack := &thirteen.SCThirteenPlayerCards{
|
pack := &thirteen.SCThirteenPlayerCards{
|
||||||
Cards: common.CopySliceIntToInt32(player.cards[:]),
|
Cards: common.CopySliceIntToInt32(player.cards[:]),
|
||||||
|
@ -554,7 +557,7 @@ func (this *SceneEx) SendToPlayerCards(s *base.Scene) {
|
||||||
}
|
}
|
||||||
proto.SetDefaults(Send)
|
proto.SetDefaults(Send)
|
||||||
logger.Logger.Trace("SCThirteenWaterPlayerCards:", Send)
|
logger.Logger.Trace("SCThirteenWaterPlayerCards:", Send)
|
||||||
s.Broadcast(int(thirteen.TWMmoPacketID_PACKET_SCThirteenPlayerCards), Send, player.GetSid())
|
this.Broadcast(int(thirteen.TWMmoPacketID_PACKET_SCThirteenPlayerCards), Send, player.GetSid())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1351,11 +1354,11 @@ func (this *SceneEx) SendHandCardOdds() {
|
||||||
|
|
||||||
this.poker.Init()
|
this.poker.Init()
|
||||||
|
|
||||||
cardsArr := make([][13]int, this.poker.N*4)
|
this.cardsArr = make([][13]int, this.poker.N*4)
|
||||||
cardsGroup := make([]map[int]*rule.Group, this.poker.N*4)
|
this.cardsGroup = make([]map[int]*rule.Group, this.poker.N*4)
|
||||||
for k := range cardsArr {
|
for k := range this.cardsArr {
|
||||||
cardsArr[k] = this.poker.Get13Crads()
|
this.cardsArr[k] = this.poker.Get13Crads()
|
||||||
cardsGroup[k] = this.logic.Suggest(cardsArr[k])
|
this.cardsGroup[k] = this.logic.Suggest(this.cardsArr[k])
|
||||||
}
|
}
|
||||||
|
|
||||||
f := func(players *[]*PlayerEx) {
|
f := func(players *[]*PlayerEx) {
|
||||||
|
@ -1382,16 +1385,16 @@ func (this *SceneEx) SendHandCardOdds() {
|
||||||
var group map[int]*rule.Group
|
var group map[int]*rule.Group
|
||||||
if p.odds > 0 {
|
if p.odds > 0 {
|
||||||
// 拿好牌
|
// 拿好牌
|
||||||
cards = cardsArr[0]
|
cards = this.cardsArr[0]
|
||||||
cardsArr = cardsArr[1:]
|
this.cardsArr = this.cardsArr[1:]
|
||||||
group = cardsGroup[0]
|
group = this.cardsGroup[0]
|
||||||
cardsGroup = cardsGroup[1:]
|
this.cardsGroup = this.cardsGroup[1:]
|
||||||
} else {
|
} else {
|
||||||
// 拿坏牌
|
// 拿坏牌
|
||||||
cards = cardsArr[len(cardsArr)-1]
|
cards = this.cardsArr[len(this.cardsArr)-1]
|
||||||
cardsArr = cardsArr[:len(cardsArr)-1]
|
this.cardsArr = this.cardsArr[:len(this.cardsArr)-1]
|
||||||
group = cardsGroup[len(cardsGroup)-1]
|
group = this.cardsGroup[len(this.cardsGroup)-1]
|
||||||
cardsGroup = cardsGroup[:len(cardsGroup)-1]
|
this.cardsGroup = this.cardsGroup[:len(this.cardsGroup)-1]
|
||||||
}
|
}
|
||||||
p.cards = cards
|
p.cards = cards
|
||||||
p.allGroup = group
|
p.allGroup = group
|
||||||
|
@ -1409,7 +1412,7 @@ func (this *SceneEx) SendHandCardOdds() {
|
||||||
}
|
}
|
||||||
if isGood || isBad {
|
if isGood || isBad {
|
||||||
// 按从大到小排序
|
// 按从大到小排序
|
||||||
this.cardsSort(cardsArr, cardsGroup)
|
this.cardsSort(this.cardsArr, this.cardsGroup)
|
||||||
|
|
||||||
// 发好牌
|
// 发好牌
|
||||||
if isGood {
|
if isGood {
|
||||||
|
@ -1431,10 +1434,10 @@ func (this *SceneEx) SendHandCardOdds() {
|
||||||
if v == nil || !v.IsGameing() || v.cards[0] != -1 {
|
if v == nil || !v.IsGameing() || v.cards[0] != -1 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
v.cards = cardsArr[0]
|
v.cards = this.cardsArr[0]
|
||||||
v.allGroup = cardsGroup[0]
|
v.allGroup = this.cardsGroup[0]
|
||||||
cardsArr = cardsArr[1:]
|
this.cardsArr = this.cardsArr[1:]
|
||||||
cardsGroup = cardsGroup[1:]
|
this.cardsGroup = this.cardsGroup[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, player := range this.players {
|
for _, player := range this.players {
|
||||||
|
|
|
@ -85,7 +85,13 @@ func (this *PolicyThirteen) OnPlayerEnter(s *base.Scene, p *base.Player) {
|
||||||
p.Pos = pos
|
p.Pos = pos
|
||||||
p.ExtraData = playerEx
|
p.ExtraData = playerEx
|
||||||
playerEx.Clear()
|
playerEx.Clear()
|
||||||
if sceneEx.Gaming {
|
if sceneEx.Gaming && sceneEx.GetSceneState().GetState() != rule.ThirteenWaterSceneStateSendCards &&
|
||||||
|
sceneEx.GetSceneState().GetState() != rule.ThirteenWaterSceneStateOptCard { // 发牌,理牌阶段也可以加入本局游戏
|
||||||
|
p.MarkFlag(base.PlayerState_WaitNext)
|
||||||
|
p.UnmarkFlag(base.PlayerState_Ready)
|
||||||
|
}
|
||||||
|
if sceneEx.Gaming && sceneEx.GetSceneState().GetState() == rule.ThirteenWaterSceneStateOptCard &&
|
||||||
|
int(rule.ThirteenWaterOptCardTimeout.Seconds())-s.GetSceneState().GetTimeout(s) < 15 {
|
||||||
p.MarkFlag(base.PlayerState_WaitNext)
|
p.MarkFlag(base.PlayerState_WaitNext)
|
||||||
p.UnmarkFlag(base.PlayerState_Ready)
|
p.UnmarkFlag(base.PlayerState_Ready)
|
||||||
}
|
}
|
||||||
|
@ -495,6 +501,27 @@ func (this *BaseState) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, par
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *BaseState) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
|
func (this *BaseState) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
|
||||||
|
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
|
||||||
|
switch evtcode {
|
||||||
|
case base.PlayerEventLeave:
|
||||||
|
case base.PlayerEventEnter:
|
||||||
|
// 发牌和选牌阶段,给玩家发牌
|
||||||
|
if s.GetSceneState().GetState() == rule.ThirteenWaterSceneStateSendCards ||
|
||||||
|
s.GetSceneState().GetState() == rule.ThirteenWaterSceneStateOptCard {
|
||||||
|
if p.IsGameing() {
|
||||||
|
playerEx, ok := p.ExtraData.(*PlayerEx)
|
||||||
|
if ok && len(sceneEx.cardsArr) > 0 && playerEx.cards[0] == -1 {
|
||||||
|
playerEx.cards = sceneEx.cardsArr[0]
|
||||||
|
playerEx.allGroup = sceneEx.cardsGroup[0]
|
||||||
|
sceneEx.cardsArr = sceneEx.cardsArr[1:]
|
||||||
|
sceneEx.cardsGroup = sceneEx.cardsGroup[1:]
|
||||||
|
sceneEx.SendToPlayerCardsBySnid(p.SnId)
|
||||||
|
logger.Logger.Tracef("游戏开始后给玩家发牌, sceneId=%v, player=%v, cards=%v", s.GetSceneId(), p.SnId, playerEx.cards)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=====================================
|
//=====================================
|
||||||
|
@ -731,7 +758,7 @@ func (this *StateSendCard) OnEnter(s *base.Scene) {
|
||||||
//}
|
//}
|
||||||
sceneEx.SendHandCardOdds()
|
sceneEx.SendHandCardOdds()
|
||||||
}
|
}
|
||||||
sceneEx.SendToPlayerCards(s)
|
sceneEx.SendToPlayerCardsBySnid(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1085,8 +1112,35 @@ func (this *StateShow) OnEnter(s *base.Scene) {
|
||||||
logger.Logger.Tracef("(this *StateShow) OnEnter, sceneid=%v currpos:%v", s.GetSceneId(), sceneEx.currOpPos)
|
logger.Logger.Tracef("(this *StateShow) OnEnter, sceneid=%v currpos:%v", s.GetSceneId(), sceneEx.currOpPos)
|
||||||
sceneEx.ShowCards()
|
sceneEx.ShowCards()
|
||||||
// 每人看牌5秒,特殊牌型不算;
|
// 每人看牌5秒,特殊牌型不算;
|
||||||
var n int
|
//var n int
|
||||||
var has bool
|
//var has bool
|
||||||
|
//for _, v := range sceneEx.players {
|
||||||
|
// if v != nil && v.IsGameing() && v.cardsO != nil {
|
||||||
|
// n++
|
||||||
|
// if v.cardsO.PokerType == 1 { // 有青龙
|
||||||
|
// has = true
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//n -= sceneEx.specialTypeNum
|
||||||
|
//sceneEx.specialTime = time.Second * time.Duration(n*5)
|
||||||
|
//// pk动画 2秒
|
||||||
|
//sceneEx.specialTime += time.Second * 2
|
||||||
|
//// 特殊牌型 4.5秒;至尊青龙5.5秒
|
||||||
|
//if sceneEx.specialTypeNum > 0 {
|
||||||
|
// if has {
|
||||||
|
// sceneEx.specialTime += time.Millisecond * 5500
|
||||||
|
// } else {
|
||||||
|
// sceneEx.specialTime += time.Millisecond * 4500
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
sceneEx.specialTime = 0
|
||||||
|
// pk动画 2秒
|
||||||
|
sceneEx.specialTime += time.Second * 2
|
||||||
|
// 2人且有特殊牌型,直接播放特殊牌型动画'
|
||||||
|
var n int // 玩家数量
|
||||||
|
var has bool // 是否有青龙
|
||||||
for _, v := range sceneEx.players {
|
for _, v := range sceneEx.players {
|
||||||
if v != nil && v.IsGameing() && v.cardsO != nil {
|
if v != nil && v.IsGameing() && v.cardsO != nil {
|
||||||
n++
|
n++
|
||||||
|
@ -1095,18 +1149,16 @@ func (this *StateShow) OnEnter(s *base.Scene) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n -= sceneEx.specialTypeNum
|
if n == 2 && sceneEx.specialTypeNum > 0 {
|
||||||
sceneEx.specialTime = time.Second * time.Duration(n*5)
|
|
||||||
// pk动画 2秒
|
|
||||||
sceneEx.specialTime += time.Second * 2
|
|
||||||
// 特殊牌型 4.5秒;至尊青龙5.5秒
|
|
||||||
if sceneEx.specialTypeNum > 0 {
|
|
||||||
if has {
|
if has {
|
||||||
sceneEx.specialTime += time.Millisecond * 5500
|
sceneEx.specialTime += time.Millisecond * 5500
|
||||||
} else {
|
} else {
|
||||||
sceneEx.specialTime += time.Millisecond * 4500
|
sceneEx.specialTime += time.Millisecond * 4500
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
sceneEx.specialTime = time.Second * time.Duration(5)
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Logger.Tracef("show cards: %v %v", n, sceneEx.specialTime)
|
logger.Logger.Tracef("show cards: %v %v", n, sceneEx.specialTime)
|
||||||
if sceneEx.specialTime <= 0 {
|
if sceneEx.specialTime <= 0 {
|
||||||
sceneEx.specialTime = time.Second
|
sceneEx.specialTime = time.Second
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -31,7 +31,6 @@ require (
|
||||||
go.etcd.io/etcd/client/v3 v3.5.16
|
go.etcd.io/etcd/client/v3 v3.5.16
|
||||||
go.mongodb.org/mongo-driver v1.17.1
|
go.mongodb.org/mongo-driver v1.17.1
|
||||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
|
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c
|
||||||
google.golang.org/grpc v1.67.1
|
|
||||||
google.golang.org/protobuf v1.35.1
|
google.golang.org/protobuf v1.35.1
|
||||||
gorm.io/driver/mysql v1.5.7
|
gorm.io/driver/mysql v1.5.7
|
||||||
gorm.io/gorm v1.25.12
|
gorm.io/gorm v1.25.12
|
||||||
|
@ -112,6 +111,7 @@ require (
|
||||||
golang.org/x/time v0.7.0 // indirect
|
golang.org/x/time v0.7.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
|
||||||
|
google.golang.org/grpc v1.67.1 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
|
Loading…
Reference in New Issue