This commit is contained in:
tomas 2024-11-11 11:30:51 +08:00
parent a9d67662b3
commit b7b38d53ae
52 changed files with 470 additions and 1416 deletions

View File

@ -18,16 +18,19 @@ func DataToCli(response any) interface{} {
}
sort.Slice(Response.BetChangeList, func(i, j int) bool { return Response.BetChangeList[i] < Response.BetChangeList[j] })
sort.Slice(Response.BetLevels, func(i, j int) bool { return Response.BetLevels[i] < Response.BetLevels[j] })
sort.Slice(Response.BaseBets, func(i, j int) bool { return Response.BaseBets[i] < Response.BaseBets[j] })
sort.Slice(BetSizes, func(i, j int) bool { return BetSizes[i] < BetSizes[j] })
tableInfo.BetConfig = BetConfig{
BetChangeList: Response.BetChangeList,
BetSize: BetSizes,
BaseBet: Response.BaseBets,
BetLevel: Response.BetLevels,
BetLines: Response.BetLines,
BetType: 1,
BetSizeIndex: Response.BetSizeIndex,
BetLevelIndex: Response.BetLevelIndex,
BetLineIndex: Response.BetLineIndex,
BaseBetIndex: Response.BaseBetIndex,
}
tableInfo.Coin = float64(Response.Coin) / CoinRate
//////////////////////////////////////////////////////////////

View File

@ -47,10 +47,12 @@ type BetConfig struct {
BetSize []float64 `json:"bet_size"` //单注
BetLevel []int64 `json:"bet_level"` //下注线数
BetLines []int64 `json:"bet_lines"` //可选线数
BaseBet []int64 `json:"base_bet"` //下注基数
BetType int `json:"bet_type"` //total计算方式 1.显示成Lines betSize*betLevel*lines lines
BetSizeIndex int64 `json:"bet_size_index"` //选中的单注下标
BetLevelIndex int64 `json:"bet_level_index"` //选中的等级下标
BetLineIndex int64 `json:"bet_line_index"` //选中的线数下标
BaseBetIndex int64 `json:"base_bet_index"` //选中的下注基数下标
}
type TableInfo struct {
SpinResult GameEnd `json:"spin_result"`

View File

@ -134,7 +134,8 @@ func init() {
CashManiaBetBetLine = map[int64]*structs.CashManiaBetBetLine{
0: {
Index: 0,
BetLine: 10,
BetLine: 1,
BaseBet: 10,
},
}
@ -194,6 +195,129 @@ func init() {
},
}
CashManiaItemInfo = map[int64]*structs.CashManiaItemInfo{
1: {
Index: 1,
ItemID: 1,
Value: 10,
IsMid: false,
},
2: {
Index: 2,
ItemID: 2,
Value: 5,
IsMid: false,
},
3: {
Index: 3,
ItemID: 3,
Value: 1,
IsMid: false,
},
4: {
Index: 4,
ItemID: 4,
Value: 0.5,
IsMid: false,
},
5: {
Index: 5,
ItemID: 5,
Value: 0.1,
IsMid: false,
},
6: {
Index: 6,
ItemID: 6,
Value: 1,
IsMid: true,
},
7: {
Index: 7,
ItemID: 7,
Value: 1,
IsMid: true,
},
8: {
Index: 8,
ItemID: 8,
Value: 1,
IsMid: true,
},
9: {
Index: 9,
ItemID: 9,
Value: 1,
IsMid: true,
},
10: {
Index: 10,
ItemID: 10,
Value: 2,
IsMid: true,
},
11: {
Index: 11,
ItemID: 11,
Value: 3,
IsMid: true,
},
12: {
Index: 12,
ItemID: 12,
Value: 5,
IsMid: true,
},
13: {
Index: 13,
ItemID: 13,
Value: 10,
IsMid: true,
},
14: {
Index: 14,
ItemID: 14,
Value: 15,
IsMid: true,
},
15: {
Index: 15,
ItemID: 15,
Value: 20,
IsMid: true,
},
16: {
Index: 16,
ItemID: 16,
Value: 30,
IsMid: true,
},
17: {
Index: 17,
ItemID: 17,
Value: 40,
IsMid: true,
},
18: {
Index: 18,
ItemID: 18,
Value: 50,
IsMid: true,
},
19: {
Index: 19,
ItemID: 19,
Value: 100,
IsMid: true,
},
200: {
Index: 200,
ItemID: 200,
Value: 0,
IsMid: true,
},
}
CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{
1: {
ID: 1,
@ -468,7 +592,7 @@ func init() {
CashManiaSymbol = map[int64]*structs.CashManiaSymbol{
1: {
ID: 1,
Name: "100倍",
Name: "10倍",
IsWild: false,
Group: []int64{1},
PayRate: []int64{0, 0, 100},

View File

@ -174,6 +174,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -10,79 +10,79 @@ func init() {
FortuneOxBetBetChangeList = map[int64]*structs.FortuneOxBetBetChangeList{
0: {
Index: 0,
BetChangeList: 0.3,
BetChangeList: 300000,
BetSizeIndex: 0,
BetLevelIndex: 0,
},
1: {
Index: 1,
BetChangeList: 0.6,
BetChangeList: 600000,
BetSizeIndex: 0,
BetLevelIndex: 1,
},
2: {
Index: 2,
BetChangeList: 0.9,
BetChangeList: 900000,
BetSizeIndex: 0,
BetLevelIndex: 2,
},
3: {
Index: 3,
BetChangeList: 1,
BetChangeList: 1000000,
BetSizeIndex: 1,
BetLevelIndex: 0,
},
4: {
Index: 4,
BetChangeList: 1.5,
BetChangeList: 1500000,
BetSizeIndex: 0,
BetLevelIndex: 4,
},
5: {
Index: 5,
BetChangeList: 3,
BetChangeList: 3000000,
BetSizeIndex: 0,
BetLevelIndex: 9,
},
6: {
Index: 6,
BetChangeList: 5,
BetChangeList: 5000000,
BetSizeIndex: 1,
BetLevelIndex: 4,
},
7: {
Index: 7,
BetChangeList: 9,
BetChangeList: 9000000,
BetSizeIndex: 3,
BetLevelIndex: 0,
},
8: {
Index: 8,
BetChangeList: 10,
BetChangeList: 10000000,
BetSizeIndex: 1,
BetLevelIndex: 9,
},
9: {
Index: 9,
BetChangeList: 15,
BetChangeList: 15000000,
BetSizeIndex: 2,
BetLevelIndex: 4,
},
10: {
Index: 10,
BetChangeList: 30,
BetChangeList: 30000000,
BetSizeIndex: 2,
BetLevelIndex: 9,
},
11: {
Index: 11,
BetChangeList: 45,
BetChangeList: 45000000,
BetSizeIndex: 3,
BetLevelIndex: 4,
},
12: {
Index: 12,
BetChangeList: 90,
BetChangeList: 90000000,
BetSizeIndex: 3,
BetLevelIndex: 9,
},
@ -135,25 +135,26 @@ func init() {
0: {
Index: 0,
BetLine: 10,
BaseBet: 1,
},
}
FortuneOxBetBetSize = map[int64]*structs.FortuneOxBetBetSize{
0: {
Index: 0,
BetSize: 300,
BetSize: 300000000,
},
1: {
Index: 1,
BetSize: 1000,
BetSize: 1000000000,
},
2: {
Index: 2,
BetSize: 3000,
BetSize: 3000000000,
},
3: {
Index: 3,
BetSize: 9000,
BetSize: 9000000000,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 10,
BaseBet: 1,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -10,6 +10,7 @@ var (
CashManiaBetBetSize = map[int64]*structs.CashManiaBetBetSize{}
CashManiaBetFirstBet = map[int64]*structs.CashManiaBetFirstBet{}
CashManiaFormation = []*structs.CashManiaFormation{}
CashManiaItemInfo = map[int64]*structs.CashManiaItemInfo{}
CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{}
CashManiaMidItemInfo = map[int64]*structs.CashManiaMidItemInfo{}
CashManiaOthers = []*structs.CashManiaOthers{}
@ -119,46 +120,6 @@ var (
FortuneTigerSuperStackWeight = []*structs.FortuneTigerSuperStackWeight{}
FortuneTigerSymbolBetRatio = []*structs.FortuneTigerSymbolBetRatio{}
FortuneTigerSymbol = map[int64]*structs.FortuneTigerSymbol{}
GateofOlympusBetBetChangeList = map[int64]*structs.GateofOlympusBetBetChangeList{}
GateofOlympusBetBetLevel = map[int64]*structs.GateofOlympusBetBetLevel{}
GateofOlympusBetBetLine = map[int64]*structs.GateofOlympusBetBetLine{}
GateofOlympusBetBetSize = map[int64]*structs.GateofOlympusBetBetSize{}
GateofOlympusBetFirstBet = map[int64]*structs.GateofOlympusBetFirstBet{}
GateofOlympusFormation = []*structs.GateofOlympusFormation{}
GateofOlympusMapRTPMode = map[int64]*structs.GateofOlympusMapRTPMode{}
GateofOlympusMultiplier = []*structs.GateofOlympusMultiplier{}
GateofOlympusMultiplierKeyID = map[int64]*structs.GateofOlympusMultiplierKeyID{}
GateofOlympusReelBaseSpin1Range = [][]int64{}
GateofOlympusReelBaseSpin1Reel = [][]int64{}
GateofOlympusReelBaseSpin1Weight = [][]float64{}
GateofOlympusReelBaseSpin2Range = [][]int64{}
GateofOlympusReelBaseSpin2Reel = [][]int64{}
GateofOlympusReelBaseSpin2Weight = [][]float64{}
GateofOlympusReelBaseSpin3Range = [][]int64{}
GateofOlympusReelBaseSpin3Reel = [][]int64{}
GateofOlympusReelBaseSpin3Weight = [][]float64{}
GateofOlympusReelBaseSpin7Range = [][]int64{}
GateofOlympusReelBaseSpin7Reel = [][]int64{}
GateofOlympusReelBaseSpin7Weight = [][]float64{}
GateofOlympusReelBaseSpin8Range = [][]int64{}
GateofOlympusReelBaseSpin8Reel = [][]int64{}
GateofOlympusReelBaseSpin8Weight = [][]float64{}
GateofOlympusReelBaseSpinRange = [][]int64{}
GateofOlympusReelBaseSpinReel = [][]int64{}
GateofOlympusReelBaseSpinWeight = [][]float64{}
GateofOlympusReelChoose = []*structs.GateofOlympusReelChoose{}
GateofOlympusReelFreeSpin4Range = [][]int64{}
GateofOlympusReelFreeSpin4Reel = [][]int64{}
GateofOlympusReelFreeSpin4Weight = [][]float64{}
GateofOlympusReelFreeSpin5Range = [][]int64{}
GateofOlympusReelFreeSpin5Reel = [][]int64{}
GateofOlympusReelFreeSpin5Weight = [][]float64{}
GateofOlympusReelFreeSpinRange = [][]int64{}
GateofOlympusReelFreeSpinReel = [][]int64{}
GateofOlympusReelFreeSpinWeight = [][]float64{}
GateofOlympusScatter = map[int64]*structs.GateofOlympusScatter{}
GateofOlympusSymbolBetRatio = []*structs.GateofOlympusSymbolBetRatio{}
GateofOlympusSymbol = map[int64]*structs.GateofOlympusSymbol{}
MatrixFeaturesForm15X1TypeA = []*structs.MatrixFeaturesForm15X1TypeA{}
MatrixFeaturesForm19X1TypeA = []*structs.MatrixFeaturesForm19X1TypeA{}
MatrixFeaturesForm20X1TypeA = []*structs.MatrixFeaturesForm20X1TypeA{}

View File

@ -3,7 +3,7 @@ package storage
import (
"encoding/json"
"mongo.games.com/game/gamesrv/slotspkg/internal/exported/excel2go/base"
"slotspkg/internal/exported/excel2go/base"
"strings"
)
@ -69,6 +69,7 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.CashMania/Bet.BetSize", &base.CashManiaBetBetSize)
Load(data, "Base.CashMania/Bet.FirstBet", &base.CashManiaBetFirstBet)
Load(data, "Base.CashMania/Formation.Default", &base.CashManiaFormation)
Load(data, "Base.CashMania/ItemInfo.Default", &base.CashManiaItemInfo)
Load(data, "Base.CashMania/Map.RTPMode", &base.CashManiaMapRTPMode)
Load(data, "Base.CashMania/MidItemInfo.Default", &base.CashManiaMidItemInfo)
Load(data, "Base.CashMania/Others.Default", &base.CashManiaOthers)
@ -178,46 +179,6 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.FortuneTiger/SuperStack.Weight", &base.FortuneTigerSuperStackWeight)
Load(data, "Base.FortuneTiger/Symbol.BetRatio", &base.FortuneTigerSymbolBetRatio)
Load(data, "Base.FortuneTiger/Symbol.Default", &base.FortuneTigerSymbol)
Load(data, "Base.GateofOlympus/Bet.BetChangeList", &base.GateofOlympusBetBetChangeList)
Load(data, "Base.GateofOlympus/Bet.BetLevel", &base.GateofOlympusBetBetLevel)
Load(data, "Base.GateofOlympus/Bet.BetLine", &base.GateofOlympusBetBetLine)
Load(data, "Base.GateofOlympus/Bet.BetSize", &base.GateofOlympusBetBetSize)
Load(data, "Base.GateofOlympus/Bet.FirstBet", &base.GateofOlympusBetFirstBet)
Load(data, "Base.GateofOlympus/Formation.Default", &base.GateofOlympusFormation)
Load(data, "Base.GateofOlympus/Map.RTPMode", &base.GateofOlympusMapRTPMode)
Load(data, "Base.GateofOlympus/Multiplier.Default", &base.GateofOlympusMultiplier)
Load(data, "Base.GateofOlympus/Multiplier.Default/ID", &base.GateofOlympusMultiplierKeyID)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Range", &base.GateofOlympusReelBaseSpin1Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Reel", &base.GateofOlympusReelBaseSpin1Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Weight", &base.GateofOlympusReelBaseSpin1Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Range", &base.GateofOlympusReelBaseSpin2Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Reel", &base.GateofOlympusReelBaseSpin2Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Weight", &base.GateofOlympusReelBaseSpin2Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Range", &base.GateofOlympusReelBaseSpin3Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Reel", &base.GateofOlympusReelBaseSpin3Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Weight", &base.GateofOlympusReelBaseSpin3Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Range", &base.GateofOlympusReelBaseSpin7Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Reel", &base.GateofOlympusReelBaseSpin7Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Weight", &base.GateofOlympusReelBaseSpin7Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Range", &base.GateofOlympusReelBaseSpin8Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Reel", &base.GateofOlympusReelBaseSpin8Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Weight", &base.GateofOlympusReelBaseSpin8Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Range", &base.GateofOlympusReelBaseSpinRange)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Reel", &base.GateofOlympusReelBaseSpinReel)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Weight", &base.GateofOlympusReelBaseSpinWeight)
Load(data, "Base.GateofOlympus/ReelChoose.Default", &base.GateofOlympusReelChoose)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Range", &base.GateofOlympusReelFreeSpin4Range)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Reel", &base.GateofOlympusReelFreeSpin4Reel)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Weight", &base.GateofOlympusReelFreeSpin4Weight)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Range", &base.GateofOlympusReelFreeSpin5Range)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Reel", &base.GateofOlympusReelFreeSpin5Reel)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Weight", &base.GateofOlympusReelFreeSpin5Weight)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Range", &base.GateofOlympusReelFreeSpinRange)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Reel", &base.GateofOlympusReelFreeSpinReel)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Weight", &base.GateofOlympusReelFreeSpinWeight)
Load(data, "Base.GateofOlympus/Scatter.Default", &base.GateofOlympusScatter)
Load(data, "Base.GateofOlympus/Symbol.BetRatio", &base.GateofOlympusSymbolBetRatio)
Load(data, "Base.GateofOlympus/Symbol.Default", &base.GateofOlympusSymbol)
Load(data, "Base.Matrix/FeaturesForm15X1TypeA.Default", &base.MatrixFeaturesForm15X1TypeA)
Load(data, "Base.Matrix/FeaturesForm19X1TypeA.Default", &base.MatrixFeaturesForm19X1TypeA)
Load(data, "Base.Matrix/FeaturesForm20X1TypeA.Default", &base.MatrixFeaturesForm20X1TypeA)
@ -330,6 +291,7 @@ func StoragesMapping() {
Set("Base", "CashMania/Bet", "BetSize", base.CashManiaBetBetSize)
Set("Base", "CashMania/Bet", "FirstBet", base.CashManiaBetFirstBet)
Set("Base", "CashMania/Formation", "Default", base.CashManiaFormation)
Set("Base", "CashMania/ItemInfo", "Default", base.CashManiaItemInfo)
Set("Base", "CashMania/Map", "RTPMode", base.CashManiaMapRTPMode)
Set("Base", "CashMania/MidItemInfo", "Default", base.CashManiaMidItemInfo)
Set("Base", "CashMania/Others", "Default", base.CashManiaOthers)
@ -439,46 +401,6 @@ func StoragesMapping() {
Set("Base", "FortuneTiger/SuperStack", "Weight", base.FortuneTigerSuperStackWeight)
Set("Base", "FortuneTiger/Symbol", "BetRatio", base.FortuneTigerSymbolBetRatio)
Set("Base", "FortuneTiger/Symbol", "Default", base.FortuneTigerSymbol)
Set("Base", "GateofOlympus/Bet", "BetChangeList", base.GateofOlympusBetBetChangeList)
Set("Base", "GateofOlympus/Bet", "BetLevel", base.GateofOlympusBetBetLevel)
Set("Base", "GateofOlympus/Bet", "BetLine", base.GateofOlympusBetBetLine)
Set("Base", "GateofOlympus/Bet", "BetSize", base.GateofOlympusBetBetSize)
Set("Base", "GateofOlympus/Bet", "FirstBet", base.GateofOlympusBetFirstBet)
Set("Base", "GateofOlympus/Formation", "Default", base.GateofOlympusFormation)
Set("Base", "GateofOlympus/Map", "RTPMode", base.GateofOlympusMapRTPMode)
Set("Base", "GateofOlympus/Multiplier", "Default", base.GateofOlympusMultiplier)
Set("Base", "GateofOlympus/Multiplier", "Default/ID", base.GateofOlympusMultiplierKeyID)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Range", base.GateofOlympusReelBaseSpin1Range)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Reel", base.GateofOlympusReelBaseSpin1Reel)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Weight", base.GateofOlympusReelBaseSpin1Weight)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Range", base.GateofOlympusReelBaseSpin2Range)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Reel", base.GateofOlympusReelBaseSpin2Reel)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Weight", base.GateofOlympusReelBaseSpin2Weight)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Range", base.GateofOlympusReelBaseSpin3Range)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Reel", base.GateofOlympusReelBaseSpin3Reel)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Weight", base.GateofOlympusReelBaseSpin3Weight)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Range", base.GateofOlympusReelBaseSpin7Range)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Reel", base.GateofOlympusReelBaseSpin7Reel)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Weight", base.GateofOlympusReelBaseSpin7Weight)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Range", base.GateofOlympusReelBaseSpin8Range)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Reel", base.GateofOlympusReelBaseSpin8Reel)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Weight", base.GateofOlympusReelBaseSpin8Weight)
Set("Base", "GateofOlympus/ReelBaseSpin", "Range", base.GateofOlympusReelBaseSpinRange)
Set("Base", "GateofOlympus/ReelBaseSpin", "Reel", base.GateofOlympusReelBaseSpinReel)
Set("Base", "GateofOlympus/ReelBaseSpin", "Weight", base.GateofOlympusReelBaseSpinWeight)
Set("Base", "GateofOlympus/ReelChoose", "Default", base.GateofOlympusReelChoose)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Range", base.GateofOlympusReelFreeSpin4Range)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Reel", base.GateofOlympusReelFreeSpin4Reel)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Weight", base.GateofOlympusReelFreeSpin4Weight)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Range", base.GateofOlympusReelFreeSpin5Range)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Reel", base.GateofOlympusReelFreeSpin5Reel)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Weight", base.GateofOlympusReelFreeSpin5Weight)
Set("Base", "GateofOlympus/ReelFreeSpin", "Range", base.GateofOlympusReelFreeSpinRange)
Set("Base", "GateofOlympus/ReelFreeSpin", "Reel", base.GateofOlympusReelFreeSpinReel)
Set("Base", "GateofOlympus/ReelFreeSpin", "Weight", base.GateofOlympusReelFreeSpinWeight)
Set("Base", "GateofOlympus/Scatter", "Default", base.GateofOlympusScatter)
Set("Base", "GateofOlympus/Symbol", "BetRatio", base.GateofOlympusSymbolBetRatio)
Set("Base", "GateofOlympus/Symbol", "Default", base.GateofOlympusSymbol)
Set("Base", "Matrix/FeaturesForm15X1TypeA", "Default", base.MatrixFeaturesForm15X1TypeA)
Set("Base", "Matrix/FeaturesForm19X1TypeA", "Default", base.MatrixFeaturesForm19X1TypeA)
Set("Base", "Matrix/FeaturesForm20X1TypeA", "Default", base.MatrixFeaturesForm20X1TypeA)
@ -618,12 +540,6 @@ func LinksMapping() {
Link("FortuneTiger/ReelBaseSpin", "Weight/1", "FortuneTiger/ReelBaseSpin", "Weight")
Link("FortuneTiger/ReelBaseSpin", "Weight/2", "FortuneTiger/ReelBaseSpin", "Weight")
Link("FortuneTiger/ReelBaseSpin", "Weight/3", "FortuneTiger/ReelBaseSpin", "Weight")
Link("GatesOfOlympus/MatrixSameForm5X6TypeA", "Default", "Matrix/SameForm5X6TypeA", "Default")
Link("GatesOfOlympus/MatrixSameForm5X6TypeB", "Default", "Matrix/SameForm5X6TypeB", "Default")
Link("GatesOfOlympus/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/1", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/2", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/3", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("Test/MatrixLine1Form3X3TypeA", "Default", "Matrix/Line1Form3X3TypeA", "Default")
Link("Test/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default")
Link("Test/ReelBaseSpin", "Weight/1", "Test/ReelBaseSpin", "Weight")
@ -720,3 +636,4 @@ func Load(dataMap map[string]string, name string, v interface{}) {
panic(err)
}
}

View File

@ -44,75 +44,88 @@ func NewBigRat(s string) *big.Rat {
type (
// BetChangeList comment
BetChangeList struct {
Index int64
Index int64
BetChangeList float64
BetSizeIndex int64
BetSizeIndex int64
BetLevelIndex int64
}
// BetLevel comment
BetLevel struct {
Index int64
Index int64
BetLevel int64
}
// BetLine comment
BetLine struct {
Index int64
Index int64
BetLine int64
}
// BetSize comment
BetSize struct {
Index int64
Index int64
BetSize int64
}
// CashManiaBetBetLine comment
CashManiaBetBetLine struct {
Index int64
BetLine int64
BaseBet int64
}
// CashManiaItemInfo comment
CashManiaItemInfo struct {
Index int64
ItemID int64
Value float64
IsMid bool
}
// CashManiaMidItemInfo comment
CashManiaMidItemInfo struct {
Index int64
ItemID int64
Multi int64
Index int64
ItemID int64
Multi int64
FreeSpinCount int64
}
// CashManiaOthers comment
CashManiaOthers struct {
BaseWinPro float64
FreeWinPro float64
MaxWin int64
WinNudgePro float64
WinRespinPro float64
NoWinNudgePro float64
BaseWinPro float64
FreeWinPro float64
MaxWin int64
WinNudgePro float64
WinRespinPro float64
NoWinNudgePro float64
NoWinRespinPro float64
}
// CashManiaRandomItemWeight comment
CashManiaRandomItemWeight struct {
ID int64
ItemID int64
ID int64
ItemID int64
BaseWeight float64
FreeWeight float64
}
// FirstBet comment
FirstBet struct {
Index int64
BetSizeIndex int64
Index int64
BetSizeIndex int64
BetLevelIndex int64
}
// Formation comment
Formation struct {
SpinType int64
NodeType string
ID int64
SeqID int64
Reel string
Matrix string
Symbol string
FirstInitMethod int64
OtherInitMethod int64
SpinType int64
NodeType string
ID int64
SeqID int64
Reel string
Matrix string
Symbol string
FirstInitMethod int64
OtherInitMethod int64
FirstInitSymbols []int64
OtherInitSymbols []int64
}
// FortuneDragonBaseMultiplier comment
FortuneDragonBaseMultiplier struct {
WinRateMin float64
WinRateMax float64
ItemIds []int64
WinRateMin float64
WinRateMax float64
ItemIds []int64
MultiplierWeights []int64
}
// FortuneDragonFreeMultiplier comment
@ -123,126 +136,113 @@ type (
// FortuneDragonFreeMultiplierCount comment
FortuneDragonFreeMultiplierCount struct {
MultiplierCount int64
Weight int64
Weight int64
}
// FortuneDragonOthers comment
FortuneDragonOthers struct {
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
SureWinFreespinTriggerPro float64
SureWinBetMultiplier int64
SureWinBetMultiplier int64
}
// FortuneMouseOthers comment
FortuneMouseOthers struct {
RespinTriggerPro float64
MaxWin int64
ExtraWin int64
MaxWin int64
ExtraWin int64
}
// FortuneOxOthers comment
FortuneOxOthers struct {
RespinTriggerPro float64
Multiplier int64
MaxWin int64
Multiplier int64
MaxWin int64
}
// FortuneRabbitCashPrizeWeight comment
FortuneRabbitCashPrizeWeight struct {
ID int64
PrizeValue float64
Weight float64
ID int64
PrizeValue float64
Weight float64
NoWinWeight float64
}
// FortuneRabbitForceCashCountWeight comment
FortuneRabbitForceCashCountWeight struct {
ID int64
Count int64
ID int64
Count int64
Weight float64
}
// FortuneRabbitOthers comment
FortuneRabbitOthers struct {
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
}
// GateofOlympusMultiplier comment
GateofOlympusMultiplier struct {
Multiple int64
ID int64
Weights []int64
}
// GateofOlympusReelChoose comment
GateofOlympusReelChoose struct {
ID int64
IsFreeSpin bool
NodeType string
Weights []int64
FreeSpinCount int64
MaxWin int64
}
// JackpotPrize comment
JackpotPrize struct {
PrizeType int64
PipeIn int64
StartPoint int64
IsRolling bool
RollingTime int64
ReducePercent int64
PrizeType int64
PipeIn int64
StartPoint int64
IsRolling bool
RollingTime int64
ReducePercent int64
JackpotLimitByTotalBet int64
}
// MapRTPMode comment
MapRTPMode struct {
ID int64
ID int64
TypeWeight map[int64]*MapRTPModeTypeWeight
Desc string
Rtp float64
Desc string
Rtp float64
}
// MapRTPModeTypeWeight comment
MapRTPModeTypeWeight struct {
ID int64
ID int64
Weight int64
}
// Matrix comment
Matrix struct {
Type string
LinkType int64
Type string
LinkType int64
Direction int64
LineCount int64
Lines [][]int64
Form []int64
Lines [][]int64
Form []int64
}
// OptAuthenticate comment
OptAuthenticate struct {
Flag string
Order int64
ValidValues []string
Flag string
Order int64
ValidValues []string
InvalidValues []string
}
// OptGroup comment
OptGroup struct {
ID int64
Batch int64
ID int64
Batch int64
IsNewPlayer bool
StartTime string
EndTime string
Affect []int64
Weight []int64
StartTime string
EndTime string
Affect []int64
Weight []int64
}
// PrizeModel comment
PrizeModel struct {
ID int64
AniType string
ID int64
AniType string
MinMultiple int64
MaxMultiple int64
}
// Scatter comment
Scatter struct {
ScatterCount int64
FreeSpinBouts int64
ScatterCount int64
FreeSpinBouts int64
FreeSpinExtraBouts int64
BasePayrate int64
FreePayrate int64
BasePayrate int64
FreePayrate int64
}
// ScatterFreeChoose comment
ScatterFreeChoose struct {
ID int64
ID int64
FreeSpinTimes int64
TouchTimesMin int64
TouchTimesMax int64
@ -250,24 +250,24 @@ type (
// SimulatorFSMultiLevel comment
SimulatorFSMultiLevel struct {
Level int64
Min int64
Max int64
Min int64
Max int64
}
// SuperStackWeight comment
SuperStackWeight struct {
ID int64
ID int64
ItemID int64
Weight float64
}
// Symbol comment
Symbol struct {
ID int64
Name string
IsWild bool
Group []int64
PayRate []int64
ID int64
Name string
IsWild bool
Group []int64
PayRate []int64
ClientOrder int64
ClientDsc string
ClientDsc string
}
// SymbolBetRatio comment
SymbolBetRatio struct {
@ -275,13 +275,13 @@ type (
}
// TestRandomWeight comment
TestRandomWeight struct {
ID int64
Time float64
ID int64
Time float64
Weight float64
}
// Text comment
Text struct {
Type string
Type string
Texts []*TextTexts
}
// TextTexts comment
@ -291,25 +291,25 @@ type (
}
// Vector comment
Vector struct {
Choice int64
Ratio float64
Vector []int64
Choice int64
Ratio float64
Vector []int64
Procedure string
}
// VectorDemand comment
VectorDemand struct {
Choice int64
MinRatio float64
MaxRatio float64
Choice int64
MinRatio float64
MaxRatio float64
Procedure string
Count int64
Count int64
}
// VectorForceWin comment
VectorForceWin struct {
Choice int64
Choice int64
MinRatio float64
MaxRatio float64
Weight float64
Weight float64
}
// CashManiaBetBetChangeList comment
CashManiaBetBetChangeList = BetChangeList
@ -317,9 +317,6 @@ type (
// CashManiaBetBetLevel comment
CashManiaBetBetLevel = BetLevel
// CashManiaBetBetLine comment
CashManiaBetBetLine = BetLine
// CashManiaBetBetSize comment
CashManiaBetBetSize = BetSize
@ -357,7 +354,7 @@ type (
FortuneDragonBetBetLevel = BetLevel
// FortuneDragonBetBetLine comment
FortuneDragonBetBetLine = BetLine
FortuneDragonBetBetLine = CashManiaBetBetLine
// FortuneDragonBetBetSize comment
FortuneDragonBetBetSize = BetSize
@ -387,7 +384,7 @@ type (
FortuneMouseBetBetLevel = BetLevel
// FortuneMouseBetBetLine comment
FortuneMouseBetBetLine = BetLine
FortuneMouseBetBetLine = CashManiaBetBetLine
// FortuneMouseBetBetSize comment
FortuneMouseBetBetSize = BetSize
@ -420,7 +417,7 @@ type (
FortuneOxBetBetLevel = BetLevel
// FortuneOxBetBetLine comment
FortuneOxBetBetLine = BetLine
FortuneOxBetBetLine = CashManiaBetBetLine
// FortuneOxBetBetSize comment
FortuneOxBetBetSize = BetSize
@ -456,7 +453,7 @@ type (
FortuneRabbitBetBetLevel = BetLevel
// FortuneRabbitBetBetLine comment
FortuneRabbitBetBetLine = BetLine
FortuneRabbitBetBetLine = CashManiaBetBetLine
// FortuneRabbitBetBetSize comment
FortuneRabbitBetBetSize = BetSize
@ -492,7 +489,7 @@ type (
FortuneTigerBetBetLevel = BetLevel
// FortuneTigerBetBetLine comment
FortuneTigerBetBetLine = BetLine
FortuneTigerBetBetLine = CashManiaBetBetLine
// FortuneTigerBetBetSize comment
FortuneTigerBetBetSize = BetSize
@ -521,42 +518,6 @@ type (
// FortuneTigerSymbolBetRatio comment
FortuneTigerSymbolBetRatio = SymbolBetRatio
// GateofOlympusBetBetChangeList comment
GateofOlympusBetBetChangeList = BetChangeList
// GateofOlympusBetBetLevel comment
GateofOlympusBetBetLevel = BetLevel
// GateofOlympusBetBetLine comment
GateofOlympusBetBetLine = BetLine
// GateofOlympusBetBetSize comment
GateofOlympusBetBetSize = BetSize
// GateofOlympusBetFirstBet comment
GateofOlympusBetFirstBet = FirstBet
// GateofOlympusFormation comment
GateofOlympusFormation = Formation
// GateofOlympusMapRTPMode comment
GateofOlympusMapRTPMode = MapRTPMode
// GateofOlympusMapRTPModeTypeWeight comment
GateofOlympusMapRTPModeTypeWeight = MapRTPModeTypeWeight
// GateofOlympusMultiplierKeyID comment
GateofOlympusMultiplierKeyID = GateofOlympusMultiplier
// GateofOlympusScatter comment
GateofOlympusScatter = Scatter
// GateofOlympusSymbol comment
GateofOlympusSymbol = Symbol
// GateofOlympusSymbolBetRatio comment
GateofOlympusSymbolBetRatio = SymbolBetRatio
// MatrixFeaturesForm15X1TypeA comment
MatrixFeaturesForm15X1TypeA = Matrix
@ -850,4 +811,5 @@ type (
// TestSymbolBetRatio comment
TestSymbolBetRatio = SymbolBetRatio
)
)

View File

@ -73,4 +73,12 @@ type SpinLock struct {
Prize [][]float64 `json:"pe,omitempty"`
//OXSpecial
NewSuperStack []int64 `json:"nss,omitempty"`
//CashMania
FeatureType int `json:"feature_type,omitempty"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction,omitempty"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id,omitempty"`
Multiple int64 `json:"multiple,omitempty"` //倍乘倍数
Irv [][]float64 `json:"irv,omitempty"`
Frv [][]float64 `json:"frv,omitempty"`
}

View File

@ -34,7 +34,7 @@ func (n *MachineDesc) Sheet(excel string, sheet string) interface{} {
return n.DataSet.GetMachineSheet(n.Theme, excel, sheet, 0)
}
func (n *MachineDesc) GetLineBet(betSizeIndex int64, betLevelIndex int64) int64 {
func (n *MachineDesc) GetLineBet(betSizeIndex, betLevelIndex, betLineIndex int64) int64 {
betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetSize"))
@ -55,7 +55,17 @@ func (n *MachineDesc) GetLineBet(betSizeIndex int64, betLevelIndex int64) int64
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLevel", betLevelIndex))
}
return betSizeRow.BetSize * betLevelRow.BetLevel
betLineRows, ok := n.Sheet("Bet", "BetLine").(map[int64]*structs.BetLine)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetLine"))
}
betLineRow, ok := betLineRows[betLineIndex]
if !ok {
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLine", betLineIndex))
}
return betSizeRow.BetSize * betLevelRow.BetLevel * betLineRow.BaseBet
}
func (n *MachineDesc) BetSizes() []int64 {
betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize)
@ -90,6 +100,17 @@ func (n *MachineDesc) BetLines() []int64 {
}
return lists
}
func (n *MachineDesc) BaseBets() []int64 {
baseBetRows, ok := n.Sheet("Bet", "BetLine").(map[int64]*structs.BetLine)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BaseBet"))
}
var lists []int64
for _, list := range baseBetRows {
lists = append(lists, list.BaseBet)
}
return lists
}
func (n *MachineDesc) BetChangeList() []float64 {
betChangeListRows, ok := n.Sheet("Bet", "BetChangeList").(map[int64]*structs.BetChangeList)
if !ok {

View File

@ -281,11 +281,11 @@ func (e *Entity) CalcWinType(multi float64) int64 {
}
func (e *Entity) GetLineBetByType(nodeType string) int64 {
return e.MachineDesc.GetLineBet(e.NodeTree.Act.BetSizeIndex, e.NodeTree.Act.BetLevelIndex)
return e.MachineDesc.GetLineBet(e.NodeTree.Act.BetSizeIndex, e.NodeTree.Act.BetLevelIndex, e.NodeTree.Act.BetLineIndex)
}
func (e *Entity) GetMinLineBet(nodeType string) int64 {
return e.MachineDesc.GetLineBet(1, 1)
return e.MachineDesc.GetLineBet(1, 1, 1)
}
func (e *Entity) SetBetCoin(betCoin player.DecCoin) {

View File

@ -46,6 +46,7 @@ func (sm *SlotsMgr) Enter(s *base.SlotsSession, gameId int64) (*cli.SlotsEnterRe
BetSizes: m.BetSizes(),
BetLevels: m.BetLevels(),
BetLines: m.BetLines(),
BaseBets: m.BaseBets(),
BetChangeList: m.BetChangeList(),
}

View File

@ -42,6 +42,7 @@ type Spinner interface {
BetSizes() []int64
BetLevels() []int64
BetLines() []int64
BaseBets() []int64
BetChangeList() []float64
Choice() int64

View File

@ -39,6 +39,9 @@ func (m *Machine) BetLevels() []int64 {
func (m *Machine) BetLines() []int64 {
return m.MachineDesc.BetLines()
}
func (m *Machine) BaseBets() []int64 {
return m.MachineDesc.BaseBets()
}
func (m *Machine) BetChangeList() []float64 {
return m.MachineDesc.BetChangeList()
}

View File

@ -29,8 +29,21 @@ type CustomRespin struct {
// 本次的symbol
ItemId int64
}
type CustomFortune struct {
ForceRound int64 `json:"fr"` //第n次
FeatureType int `json:"feature_type"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id"`
Multiple int64 `json:"multiple"` //倍乘倍数
FreeStatus int `json:"fs"`
FreeSpinNum int64 `json:"fsn"` //剩余freespin
FreeNumMax int64 `json:"fnm"` //总次数
FreeNumTrigger int64 `json:"fnt"` //新增freespin
}
// Theme is called to get feature theme
@ -44,8 +57,8 @@ func (p *PluginBase) Customs() []interface{} {
&CustomMidInfo{},
&CustomNudge{},
&CustomRespin{},
&Special{},
&CustomFortune{})
&CustomFortune{},
&Special{})
}
// OnStepBegin is called on initializing a step
@ -58,6 +71,9 @@ func (p *PluginBase) BeforeDisplay(m intf.Master) {
case key.BaseSpin:
p.changeItem(m, false)
case key.FreeSpin:
Fortune := getCustomFortune(m)
Fortune.FreeStatus = 0
Fortune.FreeNumTrigger = 0
p.changeItem(m, true)
}
@ -67,9 +83,15 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
isFreeSpin := m.Cursor().GetType() == key.FreeSpin
cursorFormation := m.CursorFormation()
symbols := cursorFormation.GetSymbols()
Fortune := getCustomFortune(m)
Fortune.FeatureType = WU
if m.Bool("Nudge") {
Fortune.FeatureType = Nudge
//todo 如果当前是nudge
if m.Bool("NudgeDown") {
Fortune.NudgeDirection = Nudge_Down
symbols[9] = symbols[8]
symbols[8] = symbols[7]
symbols[7] = symbols[6]
@ -77,6 +99,7 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
symbols[5] = Descx(m).RandomMidItems(isFreeSpin, 1)[0]
m.Remove("NudgeDown")
} else if m.Bool("NudgeUp") {
Fortune.NudgeDirection = Nudge_Up
symbols[5] = symbols[6]
symbols[6] = symbols[7]
symbols[7] = symbols[8]
@ -86,6 +109,7 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
}
m.Remove("Nudge")
} else if m.Bool("Respin") {
Fortune.FeatureType = Respin
//todo 如果当前是respin
if m.Int64("respinsymbols") > 0 {
symbols[2] = m.Int64("respinsymbols")
@ -109,6 +133,14 @@ func (p *PluginBase) AfterSpin(m intf.Master) {
p.checkMid(m, false)
case key.FreeSpin:
p.checkMid(m, true)
Fortune := getCustomFortune(m)
if Fortune.FreeSpinNum > 0 {
if Fortune.FreeSpinNum == 1 {
Fortune.FreeStatus = 3
}
Fortune.FreeSpinNum--
//logx.Errorf("这里是哇哇哇 Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", Fortune.FreeNumTrigger, Fortune.FreeNumMax, Fortune.FreeSpinNum)
}
}
}
@ -133,26 +165,24 @@ func (p *PluginBase) Nudge(m intf.Master, symbols []int64) {
}
}
// 获取特性数据
func (p *PluginBase) getCustomFortune(m intf.Master) *CustomFortune {
customFortune := new(CustomFortune)
if len(m.CursorCustoms(customFortune)) == 0 {
m.AddCursorFeature(customFortune)
}
return m.CursorCustom(customFortune).(*CustomFortune)
}
func (p *PluginBase) changeItem(m intf.Master, isFreeSpin bool) {
curFormation := m.CursorFormation()
symbols := curFormation.GetSymbols()
isWin := Descx(m).CheckWin(isFreeSpin)
//todo ceshi
//isWin = true
if isFreeSpin {
Fortune := p.getCustomFortune(m)
Fortune := getCustomFortune(m)
if Fortune.ForceRound == m.GetProgressValue() {
isWin = true
}
}
isNudge, isReSpin := Descx(m).GetNudgeAndReSpin(isWin)
//todo ceshi
//isNudge = true
//isReSpin = true
if isWin {
itemId := Descx(m).GetWinItem(isFreeSpin)
symbols[2] = itemId
@ -267,13 +297,35 @@ func (p *PluginBase) checkMid(m intf.Master, isFreeSpin bool) {
FreeSpinCount: freeSpinCount,
}).SetWin(win * (multi - 1))
Fortune := getCustomFortune(m)
Fortune.Multiple = multi
//Fortune.MultipleWin = win * (multi - 1)
Fortune.FreeSpinItemId = symbols[7]
if freeSpinCount > 0 {
customFortune := getCustomFortune(m)
if isFreeSpin {
//logx.Errorf("----ReTrigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
customFortune.FreeStatus = 2
customFortune.FreeNumTrigger = freeSpinCount
customFortune.FreeNumMax += freeSpinCount
customFortune.FreeSpinNum += freeSpinCount
//logx.Errorf("----2ReTrigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
m.AddProgress(freeSpinCount)
m.AddCursorFeature(&generic.CustomExtraFreeSpin{ExtraTimes: freeSpinCount}).SetLifetime(1)
//m.AddCursorFeature(customFortune).SetLifetime(customFortune.FreeSpinNum)
m.CursorFeature(customFortune).SetLifetime(customFortune.FreeSpinNum)
} else {
//logx.Errorf("11Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
customFortune.FreeStatus = 1
customFortune.FreeNumTrigger = freeSpinCount
customFortune.FreeNumMax += freeSpinCount
customFortune.FreeSpinNum = freeSpinCount
ForceRound := m.Randx().Int63n(freeSpinCount)
m.AddNodeFeature(m.AddNodeOnCursor(key.FreeSpin, freeSpinCount).GetID(), &CustomFortune{ForceRound: ForceRound})
customFortune.ForceRound = ForceRound
//logx.Errorf("1111111Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
m.AddNodeFeature(m.AddNodeOnCursor(key.FreeSpin, freeSpinCount).GetID(), customFortune).SetLifetime(freeSpinCount)
}
}
}

View File

@ -2,6 +2,25 @@ package cashmania
import "mongo.games.com/game/gamesrv/slotspkg/slots/intf"
const (
WU int = iota
Nudge
Respin
)
const (
Nudge_WU int = iota
Nudge_Up
Nudge_Down
)
// 获取特性数据
func getCustomFortune(m intf.Master) *CustomFortune {
customFortune := new(CustomFortune)
if len(m.CursorCustoms(customFortune)) == 0 {
m.AddCursorFeature(customFortune)
}
return m.CursorCustom(customFortune).(*CustomFortune)
}
func (p *PluginBase) RandomItemsByMid(m intf.Master, isFreeSpin bool, symbols []int64, poss ...int) {
items := Descx(m).RandomMidItems(isFreeSpin, len(poss))
for i, pos := range poss {

View File

@ -19,6 +19,14 @@ func Descx(m intf.Master) *descx {
NodeDesc: m.Desc(),
}
}
func (n descx) GetItemInfo() map[int64]*structs.CashManiaItemInfo {
sheet := n.DefaultSheet("ItemInfo")
rows, ok := sheet.(map[int64]*structs.CashManiaItemInfo)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "S_ItemInfo"))
}
return rows
}
// 判断是否触发respin
func (n descx) CheckWin(isFreeSpin bool) bool {

View File

@ -2,6 +2,7 @@ package cashmania
var Plugins = []interface{}{
&PluginBase{},
&PluginSpecial{},
}
var SimulatorPlugins = []interface{}{

View File

@ -17,6 +17,17 @@ func (p *PluginSpecial) Theme() string {
// Special
type Special struct {
FreeStatus int `json:"fs"`
FreeSpinNum int64 `json:"fsn"` //剩余freespin
FreeNumMax int64 `json:"fnm"` //总次数
FreeNumTrigger int64 `json:"fnt"` //新增freespin
FeatureType int `json:"feature_type"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id"`
Multiple int64 `json:"multiple"` //倍乘倍数
Irv [][]float64 `json:"irv"`
Frv [][]float64 `json:"frv"`
}
// 获取特性数据
@ -28,5 +39,56 @@ func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special {
return m.CursorCustom(customSpecial).(*Special)
}
func (p *PluginSpecial) AfterSpin(m intf.Master) {
Fortune := getCustomFortune(m)
sp := p.getCustomSpecial(m)
sp.FeatureType = Fortune.FeatureType
sp.NudgeDirection = Fortune.NudgeDirection
sp.FreeStatus = Fortune.FreeStatus
sp.FreeSpinNum = Fortune.FreeSpinNum
sp.FreeNumMax = Fortune.FreeNumMax
sp.FreeNumTrigger = Fortune.FreeNumTrigger
sp.FreeSpinItemId = Fortune.FreeSpinItemId
sp.Multiple = Fortune.Multiple
itemInfo := Descx(m).GetItemInfo()
displaySymbols := m.CursorFormation().GetReelFormattedDisplaySymbols()
var irv = copyMatrix(displaySymbols)
for i, symbol := range displaySymbols {
for i2, i3 := range symbol {
if itemInfo[i3].IsMid {
irv[i][i2] = itemInfo[i3].Value
} else {
irv[i][i2] = itemInfo[i3].Value * float64(m.Bet()) / 10000
}
}
}
sp.Irv = irv
finalSymbols := m.CursorFormation().GetMatrixFormattedFinalSymbols()
var frv = copyMatrix(finalSymbols)
for i, symbol := range finalSymbols {
for i2, i3 := range symbol {
if itemInfo[i3].IsMid {
frv[i][i2] = itemInfo[i3].Value
} else {
frv[i][i2] = itemInfo[i3].Value * float64(m.Bet()) / 10000
}
}
}
sp.Frv = frv
}
func copyMatrix(mat [][]int64) [][]float64 {
if mat == nil {
return nil
}
var newMat [][]float64
for _, row := range mat {
var r []float64
for _, val := range row {
r = append(r, 0*float64(val))
}
newMat = append(newMat, r)
}
return newMat
}

View File

@ -12,10 +12,12 @@ type SlotsEnterResponse struct {
BetSizeIndex int64
BetLevelIndex int64
BetLineIndex int64
BaseBetIndex int64
BetChangeList []float64
BetSizes []int64
BetLevels []int64
BetLines []int64
BaseBets []int64
}
type SlotsPlayRequest struct {
Theme string