add slots heavy

This commit is contained in:
tomas 2025-03-08 11:04:59 +08:00
parent cd0a7f84da
commit 6d5664aba2
29 changed files with 176 additions and 50 deletions

View File

@ -32,6 +32,7 @@ type SpinReq struct {
BetSizeIndex int64 `json:"bsi"` //选中的单注下标 BetSizeIndex int64 `json:"bsi"` //选中的单注下标
BetLevelIndex int64 `json:"bli"` //选中的等级下标 BetLevelIndex int64 `json:"bli"` //选中的等级下标
BetLineIndex int64 `json:"bii"` //选中的线数下标 BetLineIndex int64 `json:"bii"` //选中的线数下标
Stay bool `json:"stay"`
Platform string `json:"plf"` Platform string `json:"plf"`
BetMode int64 `json:"bm,optional"` //0.常规 1.必中 BetMode int64 `json:"bm,optional"` //0.常规 1.必中
Ts int64 `json:"ts"` Ts int64 `json:"ts"`

View File

@ -3832,11 +3832,24 @@ func init() {
}, },
} }
MatrixMatchForm5X5TypeA = []*structs.MatrixMatchForm5X5TypeA{
{
Type: "MatchForm5X5",
LinkType: 4,
Direction: 4,
LineCount: 10,
Lines: [][]int64{
{4, 4, 4},
},
Form: []int64{5, 5, 5, 5, 5},
},
}
MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{ MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{
{ {
Type: "MatchForm7X7", Type: "MatchForm7X7",
LinkType: 4, LinkType: 4,
Direction: 0, Direction: 5,
LineCount: 20, LineCount: 20,
Lines: [][]int64{ Lines: [][]int64{
{0, 0, 0}, {0, 0, 0},
@ -3923,6 +3936,19 @@ func init() {
}, },
} }
MatrixWaysForm3X5TypeB = []*structs.MatrixWaysForm3X5TypeB{
{
Type: "WaysForm3X5TypeB",
LinkType: 1,
Direction: 0,
LineCount: 30,
Lines: [][]int64{
{0, 0, 0},
},
Form: []int64{3, 3, 3, 3, 3},
},
}
MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{ MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{
{ {
Type: "WaysForm44668", Type: "WaysForm44668",

View File

@ -7,20 +7,20 @@ package base
import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs" import "mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/structs"
func init() { func init() {
PrizeModelPrizeModelTypeA = map[int64]*structs.PrizeModelPrizeModelTypeA{ PrizeModelPrizeModelTypeA = []*structs.PrizeModelPrizeModelTypeA{
1: { {
ID: 1, ID: 1,
AniType: "big_win", AniType: "big_win",
MinMultiple: 10, MinMultiple: 10,
MaxMultiple: 25, MaxMultiple: 25,
}, },
2: { {
ID: 2, ID: 2,
AniType: "mega_win", AniType: "mega_win",
MinMultiple: 25, MinMultiple: 25,
MaxMultiple: 50, MaxMultiple: 50,
}, },
3: { {
ID: 3, ID: 3,
AniType: "epic_win", AniType: "epic_win",
MinMultiple: 50, MinMultiple: 50,
@ -28,26 +28,26 @@ func init() {
}, },
} }
PrizeModelPrizeModelTypeB = map[int64]*structs.PrizeModelPrizeModelTypeB{ PrizeModelPrizeModelTypeB = []*structs.PrizeModelPrizeModelTypeB{
1: { {
ID: 1, ID: 1,
AniType: "big_win", AniType: "big_win",
MinMultiple: 15, MinMultiple: 15,
MaxMultiple: 30, MaxMultiple: 30,
}, },
2: { {
ID: 2, ID: 2,
AniType: "mega_win", AniType: "mega_win",
MinMultiple: 30, MinMultiple: 30,
MaxMultiple: 45, MaxMultiple: 45,
}, },
3: { {
ID: 3, ID: 3,
AniType: "epic_win", AniType: "epic_win",
MinMultiple: 45, MinMultiple: 45,
MaxMultiple: 60, MaxMultiple: 60,
}, },
4: { {
ID: 4, ID: 4,
AniType: "epic_win", AniType: "epic_win",
MinMultiple: 60, MinMultiple: 60,
@ -55,4 +55,37 @@ func init() {
}, },
} }
PrizeModelPrizeModelTypeC = []*structs.PrizeModelPrizeModelTypeC{
{
ID: -1,
AniType: "small_win",
MinMultiple: 0,
MaxMultiple: 3,
},
{
ID: 1,
AniType: "middle_win",
MinMultiple: 3,
MaxMultiple: 5,
},
{
ID: 2,
AniType: "big_win",
MinMultiple: 5,
MaxMultiple: 15,
},
{
ID: 3,
AniType: "mega_win",
MinMultiple: 15,
MaxMultiple: 35,
},
{
ID: 4,
AniType: "supermega_win",
MinMultiple: 35,
MaxMultiple: -1,
},
}
} }

View File

@ -235,6 +235,7 @@ var (
MatrixLine80Form7X5TypeA = []*structs.MatrixLine80Form7X5TypeA{} MatrixLine80Form7X5TypeA = []*structs.MatrixLine80Form7X5TypeA{}
MatrixLine90Form11X5TypeA = []*structs.MatrixLine90Form11X5TypeA{} MatrixLine90Form11X5TypeA = []*structs.MatrixLine90Form11X5TypeA{}
MatrixLine95Form8X5TypeA = []*structs.MatrixLine95Form8X5TypeA{} MatrixLine95Form8X5TypeA = []*structs.MatrixLine95Form8X5TypeA{}
MatrixMatchForm5X5TypeA = []*structs.MatrixMatchForm5X5TypeA{}
MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{} MatrixMatchForm7X7TypeA = []*structs.MatrixMatchForm7X7TypeA{}
MatrixSameForm5X6TypeA = []*structs.MatrixSameForm5X6TypeA{} MatrixSameForm5X6TypeA = []*structs.MatrixSameForm5X6TypeA{}
MatrixSameForm5X6TypeB = []*structs.MatrixSameForm5X6TypeB{} MatrixSameForm5X6TypeB = []*structs.MatrixSameForm5X6TypeB{}
@ -242,12 +243,14 @@ var (
MatrixWaysForm33555 = []*structs.MatrixWaysForm33555{} MatrixWaysForm33555 = []*structs.MatrixWaysForm33555{}
MatrixWaysForm344444 = []*structs.MatrixWaysForm344444{} MatrixWaysForm344444 = []*structs.MatrixWaysForm344444{}
MatrixWaysForm3X5TypeA = []*structs.MatrixWaysForm3X5TypeA{} MatrixWaysForm3X5TypeA = []*structs.MatrixWaysForm3X5TypeA{}
MatrixWaysForm3X5TypeB = []*structs.MatrixWaysForm3X5TypeB{}
MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{} MatrixWaysForm44668 = []*structs.MatrixWaysForm44668{}
MatrixWaysForm4X5TypeA = []*structs.MatrixWaysForm4X5TypeA{} MatrixWaysForm4X5TypeA = []*structs.MatrixWaysForm4X5TypeA{}
MatrixWaysForm4X5TypeB = []*structs.MatrixWaysForm4X5TypeB{} MatrixWaysForm4X5TypeB = []*structs.MatrixWaysForm4X5TypeB{}
OptGroup = []*structs.OptGroup{} OptGroup = []*structs.OptGroup{}
PrizeModelPrizeModelTypeA = map[int64]*structs.PrizeModelPrizeModelTypeA{} PrizeModelPrizeModelTypeA = []*structs.PrizeModelPrizeModelTypeA{}
PrizeModelPrizeModelTypeB = map[int64]*structs.PrizeModelPrizeModelTypeB{} PrizeModelPrizeModelTypeB = []*structs.PrizeModelPrizeModelTypeB{}
PrizeModelPrizeModelTypeC = []*structs.PrizeModelPrizeModelTypeC{}
SimulatorFSMultiLevel = []*structs.SimulatorFSMultiLevel{} SimulatorFSMultiLevel = []*structs.SimulatorFSMultiLevel{}
SimulatorMultiLevel = []*structs.SimulatorMultiLevel{} SimulatorMultiLevel = []*structs.SimulatorMultiLevel{}
SugarRushBaseSymbolShowWeight = []*structs.SugarRushBaseSymbolShowWeight{} SugarRushBaseSymbolShowWeight = []*structs.SugarRushBaseSymbolShowWeight{}

View File

@ -294,6 +294,7 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.Matrix/Line80Form7X5TypeA.Default", &base.MatrixLine80Form7X5TypeA) Load(data, "Base.Matrix/Line80Form7X5TypeA.Default", &base.MatrixLine80Form7X5TypeA)
Load(data, "Base.Matrix/Line90Form11X5TypeA.Default", &base.MatrixLine90Form11X5TypeA) Load(data, "Base.Matrix/Line90Form11X5TypeA.Default", &base.MatrixLine90Form11X5TypeA)
Load(data, "Base.Matrix/Line95Form8X5TypeA.Default", &base.MatrixLine95Form8X5TypeA) Load(data, "Base.Matrix/Line95Form8X5TypeA.Default", &base.MatrixLine95Form8X5TypeA)
Load(data, "Base.Matrix/MatchForm5X5TypeA.Default", &base.MatrixMatchForm5X5TypeA)
Load(data, "Base.Matrix/MatchForm7X7TypeA.Default", &base.MatrixMatchForm7X7TypeA) Load(data, "Base.Matrix/MatchForm7X7TypeA.Default", &base.MatrixMatchForm7X7TypeA)
Load(data, "Base.Matrix/SameForm5X6TypeA.Default", &base.MatrixSameForm5X6TypeA) Load(data, "Base.Matrix/SameForm5X6TypeA.Default", &base.MatrixSameForm5X6TypeA)
Load(data, "Base.Matrix/SameForm5X6TypeB.Default", &base.MatrixSameForm5X6TypeB) Load(data, "Base.Matrix/SameForm5X6TypeB.Default", &base.MatrixSameForm5X6TypeB)
@ -301,12 +302,14 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.Matrix/WaysForm33555.Default", &base.MatrixWaysForm33555) Load(data, "Base.Matrix/WaysForm33555.Default", &base.MatrixWaysForm33555)
Load(data, "Base.Matrix/WaysForm344444.Default", &base.MatrixWaysForm344444) Load(data, "Base.Matrix/WaysForm344444.Default", &base.MatrixWaysForm344444)
Load(data, "Base.Matrix/WaysForm3X5TypeA.Default", &base.MatrixWaysForm3X5TypeA) Load(data, "Base.Matrix/WaysForm3X5TypeA.Default", &base.MatrixWaysForm3X5TypeA)
Load(data, "Base.Matrix/WaysForm3X5TypeB.Default", &base.MatrixWaysForm3X5TypeB)
Load(data, "Base.Matrix/WaysForm44668.Default", &base.MatrixWaysForm44668) Load(data, "Base.Matrix/WaysForm44668.Default", &base.MatrixWaysForm44668)
Load(data, "Base.Matrix/WaysForm4X5TypeA.Default", &base.MatrixWaysForm4X5TypeA) Load(data, "Base.Matrix/WaysForm4X5TypeA.Default", &base.MatrixWaysForm4X5TypeA)
Load(data, "Base.Matrix/WaysForm4X5TypeB.Default", &base.MatrixWaysForm4X5TypeB) Load(data, "Base.Matrix/WaysForm4X5TypeB.Default", &base.MatrixWaysForm4X5TypeB)
Load(data, "Base.OptGroup.Default", &base.OptGroup) Load(data, "Base.OptGroup.Default", &base.OptGroup)
Load(data, "Base.PrizeModel/PrizeModelTypeA.Default", &base.PrizeModelPrizeModelTypeA) Load(data, "Base.PrizeModel/PrizeModelTypeA.Default", &base.PrizeModelPrizeModelTypeA)
Load(data, "Base.PrizeModel/PrizeModelTypeB.Default", &base.PrizeModelPrizeModelTypeB) Load(data, "Base.PrizeModel/PrizeModelTypeB.Default", &base.PrizeModelPrizeModelTypeB)
Load(data, "Base.PrizeModel/PrizeModelTypeC.Default", &base.PrizeModelPrizeModelTypeC)
Load(data, "Base.Simulator.FSMultiLevel", &base.SimulatorFSMultiLevel) Load(data, "Base.Simulator.FSMultiLevel", &base.SimulatorFSMultiLevel)
Load(data, "Base.Simulator.MultiLevel", &base.SimulatorMultiLevel) Load(data, "Base.Simulator.MultiLevel", &base.SimulatorMultiLevel)
Load(data, "Base.SugarRush/BaseSymbolShow.Weight", &base.SugarRushBaseSymbolShowWeight) Load(data, "Base.SugarRush/BaseSymbolShow.Weight", &base.SugarRushBaseSymbolShowWeight)
@ -578,6 +581,7 @@ func StoragesMapping() {
Set("Base", "Matrix/Line80Form7X5TypeA", "Default", base.MatrixLine80Form7X5TypeA) Set("Base", "Matrix/Line80Form7X5TypeA", "Default", base.MatrixLine80Form7X5TypeA)
Set("Base", "Matrix/Line90Form11X5TypeA", "Default", base.MatrixLine90Form11X5TypeA) Set("Base", "Matrix/Line90Form11X5TypeA", "Default", base.MatrixLine90Form11X5TypeA)
Set("Base", "Matrix/Line95Form8X5TypeA", "Default", base.MatrixLine95Form8X5TypeA) Set("Base", "Matrix/Line95Form8X5TypeA", "Default", base.MatrixLine95Form8X5TypeA)
Set("Base", "Matrix/MatchForm5X5TypeA", "Default", base.MatrixMatchForm5X5TypeA)
Set("Base", "Matrix/MatchForm7X7TypeA", "Default", base.MatrixMatchForm7X7TypeA) Set("Base", "Matrix/MatchForm7X7TypeA", "Default", base.MatrixMatchForm7X7TypeA)
Set("Base", "Matrix/SameForm5X6TypeA", "Default", base.MatrixSameForm5X6TypeA) Set("Base", "Matrix/SameForm5X6TypeA", "Default", base.MatrixSameForm5X6TypeA)
Set("Base", "Matrix/SameForm5X6TypeB", "Default", base.MatrixSameForm5X6TypeB) Set("Base", "Matrix/SameForm5X6TypeB", "Default", base.MatrixSameForm5X6TypeB)
@ -585,12 +589,14 @@ func StoragesMapping() {
Set("Base", "Matrix/WaysForm33555", "Default", base.MatrixWaysForm33555) Set("Base", "Matrix/WaysForm33555", "Default", base.MatrixWaysForm33555)
Set("Base", "Matrix/WaysForm344444", "Default", base.MatrixWaysForm344444) Set("Base", "Matrix/WaysForm344444", "Default", base.MatrixWaysForm344444)
Set("Base", "Matrix/WaysForm3X5TypeA", "Default", base.MatrixWaysForm3X5TypeA) Set("Base", "Matrix/WaysForm3X5TypeA", "Default", base.MatrixWaysForm3X5TypeA)
Set("Base", "Matrix/WaysForm3X5TypeB", "Default", base.MatrixWaysForm3X5TypeB)
Set("Base", "Matrix/WaysForm44668", "Default", base.MatrixWaysForm44668) Set("Base", "Matrix/WaysForm44668", "Default", base.MatrixWaysForm44668)
Set("Base", "Matrix/WaysForm4X5TypeA", "Default", base.MatrixWaysForm4X5TypeA) Set("Base", "Matrix/WaysForm4X5TypeA", "Default", base.MatrixWaysForm4X5TypeA)
Set("Base", "Matrix/WaysForm4X5TypeB", "Default", base.MatrixWaysForm4X5TypeB) Set("Base", "Matrix/WaysForm4X5TypeB", "Default", base.MatrixWaysForm4X5TypeB)
Set("Base", "OptGroup", "Default", base.OptGroup) Set("Base", "OptGroup", "Default", base.OptGroup)
Set("Base", "PrizeModel/PrizeModelTypeA", "Default", base.PrizeModelPrizeModelTypeA) Set("Base", "PrizeModel/PrizeModelTypeA", "Default", base.PrizeModelPrizeModelTypeA)
Set("Base", "PrizeModel/PrizeModelTypeB", "Default", base.PrizeModelPrizeModelTypeB) Set("Base", "PrizeModel/PrizeModelTypeB", "Default", base.PrizeModelPrizeModelTypeB)
Set("Base", "PrizeModel/PrizeModelTypeC", "Default", base.PrizeModelPrizeModelTypeC)
Set("Base", "Simulator", "FSMultiLevel", base.SimulatorFSMultiLevel) Set("Base", "Simulator", "FSMultiLevel", base.SimulatorFSMultiLevel)
Set("Base", "Simulator", "MultiLevel", base.SimulatorMultiLevel) Set("Base", "Simulator", "MultiLevel", base.SimulatorMultiLevel)
Set("Base", "SugarRush/BaseSymbolShow", "Weight", base.SugarRushBaseSymbolShowWeight) Set("Base", "SugarRush/BaseSymbolShow", "Weight", base.SugarRushBaseSymbolShowWeight)

View File

@ -821,6 +821,9 @@ type (
// MatrixLine95Form8X5TypeA comment // MatrixLine95Form8X5TypeA comment
MatrixLine95Form8X5TypeA = Matrix MatrixLine95Form8X5TypeA = Matrix
// MatrixMatchForm5X5TypeA comment
MatrixMatchForm5X5TypeA = Matrix
// MatrixMatchForm7X7TypeA comment // MatrixMatchForm7X7TypeA comment
MatrixMatchForm7X7TypeA = Matrix MatrixMatchForm7X7TypeA = Matrix
@ -842,6 +845,9 @@ type (
// MatrixWaysForm3X5TypeA comment // MatrixWaysForm3X5TypeA comment
MatrixWaysForm3X5TypeA = Matrix MatrixWaysForm3X5TypeA = Matrix
// MatrixWaysForm3X5TypeB comment
MatrixWaysForm3X5TypeB = Matrix
// MatrixWaysForm44668 comment // MatrixWaysForm44668 comment
MatrixWaysForm44668 = Matrix MatrixWaysForm44668 = Matrix
@ -857,6 +863,9 @@ type (
// PrizeModelPrizeModelTypeB comment // PrizeModelPrizeModelTypeB comment
PrizeModelPrizeModelTypeB = PrizeModel PrizeModelPrizeModelTypeB = PrizeModel
// PrizeModelPrizeModelTypeC comment
PrizeModelPrizeModelTypeC = PrizeModel
// SimulatorMultiLevel comment // SimulatorMultiLevel comment
SimulatorMultiLevel = SimulatorFSMultiLevel SimulatorMultiLevel = SimulatorFSMultiLevel

View File

@ -1067,6 +1067,8 @@ type Formation struct {
ID int64 ID int64
NodeType string NodeType string
SeqID int64 SeqID int64
SymbolsAbove []int64
SymbolsBelow []int64
InitSymbols []int64 InitSymbols []int64
DisplaySymbols []int64 DisplaySymbols []int64
FinalSymbols []int64 FinalSymbols []int64
@ -1782,11 +1784,14 @@ type LiteFormation struct {
SpinType int64 SpinType int64
NodeType string NodeType string
NodeID int64 NodeID int64
SymbolsAbove []int64
SymbolsBelow []int64
InitSymbols []int64 InitSymbols []int64
DisplaySymbols []int64 DisplaySymbols []int64
FinalSymbols []int64 FinalSymbols []int64
LinkPositions []*LinkPositions LinkPositions []*LinkPositions
Win int64 Win int64
WinType int64
RandPositions []int64 RandPositions []int64
MatrixForm []int64 MatrixForm []int64
RewardInfo []*RewardInfo RewardInfo []*RewardInfo

View File

@ -65,7 +65,6 @@ func (n *MachineDesc) GetLineBet(betSizeIndex, betLevelIndex, betLineIndex int64
if !ok { if !ok {
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLine", betLineIndex)) panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLine", betLineIndex))
} }
return betSizeRow.BetSize * betLevelRow.BetLevel * betLineRow.BaseBet return betSizeRow.BetSize * betLevelRow.BetLevel * betLineRow.BaseBet
} }
func (n *MachineDesc) BetSizes() []int64 { func (n *MachineDesc) BetSizes() []int64 {
@ -221,9 +220,9 @@ func (n *MachineDesc) GetSpinType(typ string) int64 {
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "Formation", typ)) panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "Formation", typ))
} }
func (n *MachineDesc) GetPrizeModel() map[int64]*structs.PrizeModel { func (n *MachineDesc) GetPrizeModel() []*structs.PrizeModel {
v := n.DefaultSheet("PrizeModel") v := n.DefaultSheet("PrizeModel")
rows, ok := v.(map[int64]*structs.PrizeModel) rows, ok := v.([]*structs.PrizeModel)
if !ok { if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "PrizeModel")) panic(errors.ConfigTypeError.ErrorWith(n.Theme, "PrizeModel"))
} }

View File

@ -33,6 +33,11 @@ func (e *Entity) GetFeature(featureID int64) *shared.Feature {
return nil return nil
} }
// RemoveFeatures by node
func (e *Entity) RemoveFeatures(node *shared.Node) {
node.Features = make([]*shared.Feature, 0)
}
// GetTypeFeatures finds features by walking all nodes in node tree // GetTypeFeatures finds features by walking all nodes in node tree
func (e *Entity) GetTypeFeatures(node *shared.Node, typ string) []*shared.Feature { func (e *Entity) GetTypeFeatures(node *shared.Node, typ string) []*shared.Feature {
features := make([]*shared.Feature, 0) features := make([]*shared.Feature, 0)

View File

@ -49,6 +49,8 @@ func (e *Entity) ConvertFormations() {
cliFormation := e.CursorNode().Formations[idx] cliFormation := e.CursorNode().Formations[idx]
cliFormation.SeqID = originFormation.SeqID cliFormation.SeqID = originFormation.SeqID
cliFormation.SymbolsAbove = originFormation.SymbolsAbove
cliFormation.SymbolsBelow = originFormation.SymbolsBelow
cliFormation.DisplaySymbols = originFormation.DisplaySymbols cliFormation.DisplaySymbols = originFormation.DisplaySymbols
cliFormation.FinalSymbols = finalSymbols cliFormation.FinalSymbols = finalSymbols
cliFormation.LinkPositions = linkPositions cliFormation.LinkPositions = linkPositions

View File

@ -1,8 +1,10 @@
package entity package entity
// Init inits entity // Init inits entity
func (e *Entity) Init() { func (e *Entity) Init(init ...int) {
e.Deserialize() if len(init) == 0 {
e.Deserialize()
}
// In case of Revert, check empty every time when doing `Deserialize` // In case of Revert, check empty every time when doing `Deserialize`
if e.IsEmpty() { if e.IsEmpty() {

View File

@ -250,34 +250,19 @@ func (e *Entity) ActualWinType() int64 {
if e.NextNode().Type != key.BaseSpin { if e.NextNode().Type != key.BaseSpin {
return key.WinTypeNil return key.WinTypeNil
} }
actualWin := e.TotalWin() actualWin := e.TotalWin()
multi := mathx.SafeDiv(actualWin, e.CursorNode().Bet) multi := mathx.SafeDiv(actualWin, e.CursorNode().Bet)
return e.CalcWinType(multi) return e.CalcWinType(multi)
} }
func (e *Entity) CalcWinType(multi float64) int64 { func (e *Entity) CalcWinType(multi float64) int64 {
prizeModels := e.MachineDesc.GetPrizeModel() prizeModels := e.MachineDesc.GetPrizeModel()
for _, prizeModel := range prizeModels {
for winType, prizeModel := range prizeModels { if multi >= float64(prizeModel.MinMultiple) && multi < float64(prizeModel.MaxMultiple) {
if (prizeModel.MinMultiple < 0 || multi >= float64(prizeModel.MinMultiple)) && return prizeModel.ID
(prizeModel.MaxMultiple < 0 || multi < float64(prizeModel.MaxMultiple)) {
switch winType {
case 1:
return key.WinTypeBig
case 2:
return key.WinTypeMega
case 3:
return key.WinTypeEpic
}
} }
} }
if multi > 0 { return -1
return key.WinTypeNormal
}
return key.WinTypeNil
} }
func (e *Entity) GetLineBetByType(nodeType string) int64 { func (e *Entity) GetLineBetByType(nodeType string) int64 {
@ -297,7 +282,6 @@ func (e *Entity) GetBetCoin() player.DecCoin {
Coin: e.NodeTree.BetCoin.Coin, Coin: e.NodeTree.BetCoin.Coin,
} }
} }
func (e *Entity) SetWinCoin(winCoin player.IncCoin) { func (e *Entity) SetWinCoin(winCoin player.IncCoin) {
e.NodeTree.WinCoin.Coin = winCoin.Coin e.NodeTree.WinCoin.Coin = winCoin.Coin
} }

View File

@ -137,7 +137,7 @@ func (f *Formation) ResetRandSymbolsByIndex(r *randx.Randx) {
symbol := reelDesc.Reel[symbolIdx%length] symbol := reelDesc.Reel[symbolIdx%length]
f.Symbols = append(f.Symbols, symbol) f.Symbols = append(f.Symbols, symbol)
} }
f.SymbolsAbove = append(f.SymbolsAbove, reelDesc.Reel[(startIdx-1+length)%length]) f.SymbolsAbove = append(f.SymbolsAbove, reelDesc.Reel[(startIdx+length-1)%length])
f.SymbolsBelow = append(f.SymbolsBelow, reelDesc.Reel[(startIdx+reelDesc.Range)%length]) f.SymbolsBelow = append(f.SymbolsBelow, reelDesc.Reel[(startIdx+reelDesc.Range)%length])
} }
} }

View File

@ -2,7 +2,9 @@ package formation
import ( import (
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors" "mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors"
"mongo.games.com/game/gamesrv/slotspkg/internal/module/shared"
"mongo.games.com/game/gamesrv/slotspkg/slots/desc" "mongo.games.com/game/gamesrv/slotspkg/slots/desc"
"mongo.games.com/game/gamesrv/slotspkg/slots/types/cli"
) )
type SymbolMatch struct { type SymbolMatch struct {
@ -85,7 +87,6 @@ func symbolUpgrade(itemID int64, symbols [][]int64, rowSize int64, colSize int64
func calcWin(f *Formation, itemID int64, symbols [][]int64, records [][]int64, rowSize int64, colSize int64, count int64) { func calcWin(f *Formation, itemID int64, symbols [][]int64, records [][]int64, rowSize int64, colSize int64, count int64) {
positions := make([]int64, 0) positions := make([]int64, 0)
for i := int64(0); i < colSize; i++ { for i := int64(0); i < colSize; i++ {
for j := int64(0); j < rowSize; j++ { for j := int64(0); j < rowSize; j++ {
if symbols[i][j] == 1000+itemID && records[i][j] == 0 { if symbols[i][j] == 1000+itemID && records[i][j] == 0 {
@ -105,6 +106,13 @@ func calcWin(f *Formation, itemID int64, symbols [][]int64, records [][]int64, r
f.LinePays = append(f.LinePays, winPay) f.LinePays = append(f.LinePays, winPay)
link := int64(len(positions)) link := int64(len(positions))
f.addSymbolPay(itemID, link, winPay) f.addSymbolPay(itemID, link, winPay)
f.RewardInfo = append(f.RewardInfo, &shared.RewardInfo{
Type: 3,
Index: int(link),
Item: itemID,
Reward: winPay,
Pos: cli.ToPoss(f.MatrixForm, positions),
})
} }
func (f *Formation) IsWild(itemID int64) bool { func (f *Formation) IsWild(itemID int64) bool {
@ -156,14 +164,15 @@ func (f *Formation) GenerateSymbolMatch() {
f.searchSymbols(i, j, itemID, symbols, rowSize, colSize) f.searchSymbols(i, j, itemID, symbols, rowSize, colSize)
count := getSymbolMatch(symbols, rowSize, colSize) count := getSymbolMatch(symbols, rowSize, colSize)
if count >= 5 { //Direction在match中表示链接的个数
if count >= f.FormationDesc.MatrixDesc.Direction {
// 存在5个相同元素 // 存在5个相同元素
symbolUpgrade(itemID, symbols, rowSize, colSize, rawSymbols) symbolUpgrade(itemID, symbols, rowSize, colSize, rawSymbols)
calcWin(f, itemID, symbols, records, rowSize, colSize, count) calcWin(f, itemID, symbols, records, rowSize, colSize, count)
symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols) symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols)
f.Symbols = DeformatSymbols(symbols) f.Symbols = DeformatSymbols(symbols)
} else { } else {
// 不存在5个相同元素,恢复原始轴 // 不存在n个相同元素,恢复原始轴
symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols) symbolRevert(itemID, symbols, rowSize, colSize, rawSymbols)
} }
} }

View File

@ -100,6 +100,7 @@ func (sm *SlotsMgr) Play(s *base.SlotsSession, req *base.SpinReq) (*cli.SlotsPla
BetLevelIndex: req.BetLevelIndex, BetLevelIndex: req.BetLevelIndex,
BetLineIndex: req.BetLineIndex, BetLineIndex: req.BetLineIndex,
Ratio: 1, Ratio: 1,
Stay: req.Stay,
Mode: key.MachineModePlayer, Mode: key.MachineModePlayer,
Vector: recorderResult.Vector, Vector: recorderResult.Vector,
//ExpectedWinCoin: recorderResult.ExpectedWinCoin, //ExpectedWinCoin: recorderResult.ExpectedWinCoin,
@ -112,6 +113,7 @@ func (sm *SlotsMgr) Play(s *base.SlotsSession, req *base.SpinReq) (*cli.SlotsPla
BetLevelIndex: req.BetLevelIndex, BetLevelIndex: req.BetLevelIndex,
BetLineIndex: req.BetLineIndex, BetLineIndex: req.BetLineIndex,
Ratio: 1, Ratio: 1,
Stay: req.Stay,
Mode: key.MachineModePlayer, Mode: key.MachineModePlayer,
Choice: req.BetMode, Choice: req.BetMode,
}) })
@ -170,3 +172,9 @@ func (sm *SlotsMgr) PPGetBetIndex(s *base.SlotsSession, theme string, val float6
m := machine.NewMachine(s, theme, DataSet(s).Shell, false) m := machine.NewMachine(s, theme, DataSet(s).Shell, false)
return m.GetBetIndexByVal(val) return m.GetBetIndexByVal(val)
} }
// pg
func (sm *SlotsMgr) PGGetBetIndex(s *base.SlotsSession, theme string, betSizeVal float64, betLevelVal int64) []int64 {
m := machine.NewMachine(s, theme, DataSet(s).Shell, false)
return m.GetBetIndexByTwoVal(betSizeVal, betLevelVal)
}

View File

@ -13,8 +13,8 @@ type Master interface {
UID() int64 UID() int64
SetRatio(int64, float64) SetRatio(int64, float64)
SetSummary(s string) SetSummary(s string)
TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64) // 返回linkPositions, LineSymbols, LinePays TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64, []*shared.RewardInfo) // 返回linkPositions, LineSymbols, LinePays
TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64) // 返回linkPositions, LineSymbols, LinePays TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64, []*shared.RewardInfo) // 返回linkPositions, LineSymbols, LinePays
TryRand(nodeType string, seqID int64) []int64 TryRand(nodeType string, seqID int64) []int64
SkipBaseSpin(nodeID int64) SkipBaseSpin(nodeID int64)
SkipBaseSpinWithBet(nodeID int64) SkipBaseSpinWithBet(nodeID int64)
@ -110,6 +110,7 @@ type Master interface {
CursorFormationCustoms(seqID int64, v interface{}) []interface{} CursorFormationCustoms(seqID int64, v interface{}) []interface{}
RootCustom(v interface{}) interface{} RootCustom(v interface{}) interface{}
RootCustoms(v interface{}) []interface{} RootCustoms(v interface{}) []interface{}
RootRemoveCustoms()
NodeCustom(nodeID int64, v interface{}) interface{} NodeCustom(nodeID int64, v interface{}) interface{}
NodeCustoms(nodeID int64, v interface{}) []interface{} NodeCustoms(nodeID int64, v interface{}) []interface{}
NodeFormationCustom(nodeID int64, seqID int64, v interface{}) interface{} NodeFormationCustom(nodeID int64, seqID int64, v interface{}) interface{}

View File

@ -9,6 +9,7 @@ import (
// Spinner is the interface for dispatching entity // Spinner is the interface for dispatching entity
type Spinner interface { type Spinner interface {
Close() *shared.NodeTree Close() *shared.NodeTree
Delete()
PlayClose() *shared.NodeTree PlayClose() *shared.NodeTree
SyncLiteClose() *shared.LiteNodeTree SyncLiteClose() *shared.LiteNodeTree
PlayLiteClose() *shared.LiteNodeTree PlayLiteClose() *shared.LiteNodeTree
@ -45,6 +46,7 @@ type Spinner interface {
BaseBets() []int64 BaseBets() []int64
BetChangeList() []float64 BetChangeList() []float64
GetBetIndexByVal(val float64) []int64 GetBetIndexByVal(val float64) []int64
GetBetIndexByTwoVal(betSizeVal float64, betLevelVal int64) []int64
Choice() int64 Choice() int64
Stay() bool Stay() bool

View File

@ -71,6 +71,12 @@ func (m *Machine) RootCustoms(v interface{}) []interface{} {
return r return r
} }
// RootRemoveCustoms
// on root node
func (m *Machine) RootRemoveCustoms() {
m.RemoveFeatures(m.RootNode())
}
// NodeCustom gets the first feature's custom in specific type // NodeCustom gets the first feature's custom in specific type
// on specific node // on specific node
func (m *Machine) NodeCustom(nodeID int64, v interface{}) interface{} { func (m *Machine) NodeCustom(nodeID int64, v interface{}) interface{} {

View File

@ -48,6 +48,9 @@ func (m *Machine) BetChangeList() []float64 {
func (m *Machine) GetBetIndexByVal(val float64) []int64 { func (m *Machine) GetBetIndexByVal(val float64) []int64 {
return m.MachineDesc.GetBetIndexByVal(val) return m.MachineDesc.GetBetIndexByVal(val)
} }
func (m *Machine) GetBetIndexByTwoVal(betSizeVal float64, betLevelVal int64) []int64 {
return m.MachineDesc.GetBetIndexByTwoVal(betSizeVal, betLevelVal)
}
func (m *Machine) Choice() int64 { func (m *Machine) Choice() int64 {
if m.UserData().ForceChoice > 0 { if m.UserData().ForceChoice > 0 {
return m.UserData().ForceChoice return m.UserData().ForceChoice
@ -89,12 +92,12 @@ func (m *Machine) SetSummary(s string) {
m.Set("Summary", s) m.Set("Summary", s)
} }
func (m *Machine) TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64) { func (m *Machine) TryLinkMatrixSymbols(seqID int64, matSymbols [][]int64) ([]*shared.LinkPositions, [][]int64, []float64, []*shared.RewardInfo) {
symbols := formation.DeformatSymbols(matSymbols) symbols := formation.DeformatSymbols(matSymbols)
return m.TryLink(seqID, symbols) return m.TryLink(seqID, symbols)
} }
func (m *Machine) TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64) { func (m *Machine) TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions, [][]int64, []float64, []*shared.RewardInfo) {
f, err := formation.NewFormation(m.NodeDesc, seqID) f, err := formation.NewFormation(m.NodeDesc, seqID)
if err != nil { if err != nil {
panic(err) panic(err)
@ -109,7 +112,7 @@ func (m *Machine) TryLink(seqID int64, symbols []int64) ([]*shared.LinkPositions
}) })
} }
return linkPositions, f.LineSymbols, f.LinePays return linkPositions, f.LineSymbols, f.LinePays, f.RewardInfo
} }
func (m *Machine) TryRand(nodeType string, seqID int64) []int64 { func (m *Machine) TryRand(nodeType string, seqID int64) []int64 {

View File

@ -13,12 +13,20 @@ import (
// Close serialize the machine // Close serialize the machine
func (m *Machine) Close() *shared.NodeTree { func (m *Machine) Close() *shared.NodeTree {
m.Data = make(map[string]interface{})
m.RootRemoveCustoms()
m.Serialize() m.Serialize()
m.Session.Remove(key.SessionMachine) m.Session.Remove(key.SessionMachine)
return m.NodeTree return m.NodeTree
} }
// Close serialize the machine // Delete serialize the machine
func (m *Machine) Delete() {
m.Serialize()
m.Session.Remove(key.SessionMachine)
}
// PlayClose serialize the machine
func (m *Machine) PlayClose() *shared.NodeTree { func (m *Machine) PlayClose() *shared.NodeTree {
m.Serialize() m.Serialize()
m.Session.Remove(key.SessionMachine) m.Session.Remove(key.SessionMachine)
@ -68,10 +76,13 @@ func (m *Machine) SyncLiteClose() *shared.LiteNodeTree {
SpinType: formation.SpinType, SpinType: formation.SpinType,
NodeType: formation.NodeType, NodeType: formation.NodeType,
NodeID: formation.NodeID, NodeID: formation.NodeID,
SymbolsAbove: formation.SymbolsAbove,
SymbolsBelow: formation.SymbolsBelow,
InitSymbols: formation.InitSymbols, InitSymbols: formation.InitSymbols,
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
MatrixForm: formation.MatrixForm, MatrixForm: formation.MatrixForm,
NewNodeType: formation.NewNodeType, NewNodeType: formation.NewNodeType,
@ -87,9 +98,12 @@ func (m *Machine) SyncLiteClose() *shared.LiteNodeTree {
SpinType: formation.SpinType, SpinType: formation.SpinType,
NodeType: formation.NodeType, NodeType: formation.NodeType,
NodeID: formation.NodeID, NodeID: formation.NodeID,
SymbolsAbove: formation.SymbolsAbove,
SymbolsBelow: formation.SymbolsBelow,
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
MatrixForm: formation.MatrixForm, MatrixForm: formation.MatrixForm,
NewNodeType: formation.NewNodeType, NewNodeType: formation.NewNodeType,
@ -165,10 +179,13 @@ func (m *Machine) PlayLiteClose() *shared.LiteNodeTree {
SpinType: formation.SpinType, SpinType: formation.SpinType,
NodeType: formation.NodeType, NodeType: formation.NodeType,
NodeID: formation.NodeID, NodeID: formation.NodeID,
SymbolsAbove: formation.SymbolsAbove,
SymbolsBelow: formation.SymbolsBelow,
DisplaySymbols: formation.DisplaySymbols, DisplaySymbols: formation.DisplaySymbols,
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
MatrixForm: formation.MatrixForm, MatrixForm: formation.MatrixForm,
RewardInfo: formation.RewardInfo, RewardInfo: formation.RewardInfo,
@ -185,10 +202,13 @@ func (m *Machine) PlayLiteClose() *shared.LiteNodeTree {
SpinType: formation.SpinType, SpinType: formation.SpinType,
NodeType: formation.NodeType, NodeType: formation.NodeType,
NodeID: formation.NodeID, NodeID: formation.NodeID,
SymbolsAbove: formation.SymbolsAbove,
SymbolsBelow: formation.SymbolsBelow,
InitSymbols: formation.InitSymbols, InitSymbols: formation.InitSymbols,
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
MatrixForm: formation.MatrixForm, MatrixForm: formation.MatrixForm,
RewardInfo: formation.RewardInfo, RewardInfo: formation.RewardInfo,
@ -268,6 +288,7 @@ func (m *Machine) QuitLiteClose() *shared.LiteNodeTree {
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
NewNodeType: formation.NewNodeType, NewNodeType: formation.NewNodeType,
}) })
@ -285,6 +306,7 @@ func (m *Machine) QuitLiteClose() *shared.LiteNodeTree {
FinalSymbols: formation.FinalSymbols, FinalSymbols: formation.FinalSymbols,
LinkPositions: formation.LinkPositions, LinkPositions: formation.LinkPositions,
Win: formation.Win, Win: formation.Win,
WinType: m.CalcWinType(float64(formation.Win) / float64(m.NodeTree.BetCoin.Coin)),
RandPositions: formation.RandPositions, RandPositions: formation.RandPositions,
NewNodeType: formation.NewNodeType, NewNodeType: formation.NewNodeType,
}) })

View File

@ -99,7 +99,7 @@ func (p *PluginEliminate) AfterSpin(m intf.Master) {
customPay := m.CursorCustom(&CustomPay{}).(*CustomPay) customPay := m.CursorCustom(&CustomPay{}).(*CustomPay)
// 根据赔付计算multi type // 根据赔付计算multi type
linkPositions, _, linePays := m.TryLinkMatrixSymbols(1, formattedSymbols) linkPositions, _, linePays, _ := m.TryLinkMatrixSymbols(1, formattedSymbols)
var multiType int64 var multiType int64
if mathx.Sum(linePays) == 0 { if mathx.Sum(linePays) == 0 {
@ -191,7 +191,7 @@ func (p *PluginEliminate) AfterSpin(m intf.Master) {
customPay.Pay += mathx.Sum(linePays) customPay.Pay += mathx.Sum(linePays)
// 连线 // 连线
linkPositions, _, linePays = m.TryLinkMatrixSymbols(1, formattedSymbols) linkPositions, _, linePays, _ = m.TryLinkMatrixSymbols(1, formattedSymbols)
} }
// 增加multi // 增加multi

View File

@ -269,7 +269,7 @@ func (p *PluginBaseSpin) Eliminate(m intf.Master, customPay *CustomPay, multiTab
cursorFormation.SetWin(0) cursorFormation.SetWin(0)
// 根据赔付计算multi type // 根据赔付计算multi type
linkPositions, _, linePays := m.TryLinkMatrixSymbols(1, formattedSymbols) linkPositions, _, linePays, _ := m.TryLinkMatrixSymbols(1, formattedSymbols)
DumpReel(multiTable.Multi) DumpReel(multiTable.Multi)
lineMultis := make([]int64, len(linePays)) lineMultis := make([]int64, len(linePays))