Compare commits

...

72 Commits

Author SHA1 Message Date
tomas bc81ecdfed Merge remote-tracking branch 'origin/develop' into dev_slots 2024-09-03 17:16:18 +08:00
tomas a2e34269fd add test v1 不要合并 2024-09-03 17:16:07 +08:00
sk 6c4e49ef44 Merge branch 'develop' of git.pogorockgames.com:mango-games/server/game into develop 2024-09-03 16:40:53 +08:00
by 89aefd480a Merge branch 'ma' into develop 2024-09-03 16:36:25 +08:00
sk c3f0f0d9fe Merge branch 'develop' of git.pogorockgames.com:mango-games/server/game into develop 2024-09-03 16:33:59 +08:00
by 36edf8ba7b Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-09-03 16:22:59 +08:00
by fe375fb15f 删除无用代码 2024-09-03 16:22:47 +08:00
kxdd 9ef1f9d896 娃娃机报错修改 2024-09-03 16:09:43 +08:00
by 429c5e0a31 Merge branch 'develop' of https://git.pogorockgames.com/mango-games/server/game into develop
# Conflicts:
#	public
2024-09-03 15:54:22 +08:00
by df04ede671 public 2024-09-03 15:53:09 +08:00
kxdd da83b674d2 public 提交 2024-09-03 15:48:23 +08:00
by 59535c2015 更新配置 2024-09-03 15:46:54 +08:00
by 981c3860d1 Merge remote-tracking branch 'origin/develop' into ma
# Conflicts:
#	data/DB_GameFree.dat
#	data/DB_PropExchange.dat
#	data/DB_Task.dat
#	etcd/keyconf.go
#	model/config.go
#	protocol/webapi/common.pb.go
#	protocol/webapi/common.proto
#	protocol/webapi/webapi.proto
#	public
#	xlsx/DB_GameFree.xlsx
2024-09-03 15:46:11 +08:00
by e7a6049341 娃娃机后台配置 增加StreamId字段 2024-09-03 15:12:24 +08:00
kxdd ddcaa62f13 娃娃机修改 2024-09-03 15:10:41 +08:00
sk 034abb64e2 牌局回放 2024-09-03 11:20:49 +08:00
sk 5c6dce2f4d 房卡场中途不能离开房间 2024-09-03 10:57:05 +08:00
sk d292cbc118 Merge branch 'develop' of git.pogorockgames.com:mango-games/server/game into develop 2024-09-03 10:04:13 +08:00
sk 05a54af2db 活动礼包 2024-09-03 10:02:26 +08:00
sk d2c5c4f159 活动礼包 2024-09-02 17:31:45 +08:00
sk 151a739dab 创建房间参数初始化 2024-09-02 16:26:05 +08:00
kxdd 6a9c6a988b 娃娃机获取token修改 2024-09-02 16:23:45 +08:00
sk 00dcc3199f 竞技馆房主付费 2024-09-02 16:13:23 +08:00
sk 26db8f4b21 竞技馆 2024-09-02 14:55:18 +08:00
sk 04a0772415 竞技馆 2024-09-02 14:35:10 +08:00
sk 9f490a7aca 竞技馆 2024-09-02 11:44:12 +08:00
kxdd fe26aa3d37 娃娃机获取视频流修改 2024-08-30 18:15:44 +08:00
by ece16ac947 获取token 2024-08-30 16:45:07 +08:00
by 3a6e420e98 token测试数据 2024-08-30 15:34:28 +08:00
kxdd 958a3b1ba4 娃娃机等待玩家添加 2024-08-30 11:56:15 +08:00
by ccc0e97635 娃娃机etcd配置 2024-08-29 11:55:57 +08:00
by 6bd95be413 娃娃机etcd配置 2024-08-29 11:33:52 +08:00
by 94d7e4f45f Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma
# Conflicts:
#	protocol/clawdoll/clawdoll.pb.go
2024-08-29 11:33:26 +08:00
by 46c68b9785 娃娃机etcd配置 2024-08-29 11:32:55 +08:00
kxdd ebe7b1c4c8 娃娃机协议修改 2024-08-28 17:00:31 +08:00
by 14b78495f6 Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-27 16:03:34 +08:00
by 0792e35863 开启甩抓 2024-08-27 16:03:07 +08:00
kxdd cbd00bf0f8 娃娃机状态修改 2024-08-27 15:13:32 +08:00
by dcc68130d2 log修改 2024-08-26 10:53:25 +08:00
by 377482ce6d 娃娃机log打印修改 2024-08-26 10:50:03 +08:00
by ba9dde2005 Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-24 16:11:03 +08:00
by 4580f69514 请求token注册协议修改 2024-08-24 16:10:28 +08:00
kxdd aed283b37e Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-24 15:17:17 +08:00
kxdd 87486f1a48 娃娃机状态流程修改 2024-08-24 15:13:22 +08:00
by c6ee48573b 电压设置 2024-08-24 12:03:54 +08:00
by b98b2246eb 娃娃机获取token 2024-08-23 16:35:58 +08:00
by 88db5712d8 娃娃机获取token 2024-08-22 15:43:28 +08:00
by b5e23404c0 设置音乐关闭 2024-08-16 18:24:05 +08:00
by 33e82b0095 娃娃机 2024-08-16 18:05:45 +08:00
by 3b2c207627 娃娃机基础配置 2024-08-16 10:58:45 +08:00
by 7a2c11d92e 娃娃机数据清理 2024-08-16 09:10:15 +08:00
by 37f6b4163e 娃娃机数据清理 2024-08-15 18:35:22 +08:00
by 6b8e24cba3 娃娃机投币消息加入消息队列 2024-08-15 16:07:50 +08:00
by 5e60434b60 娃娃机代码整理 2024-08-15 14:38:21 +08:00
by afe8d3f0b1 娃娃机使用消息队列处理消息 2024-08-15 14:37:08 +08:00
by 154a037e08 娃娃机监听消息 2024-08-15 11:31:45 +08:00
kxdd f23cfda629 Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-14 16:24:31 +08:00
by 4dc78ff468 娃娃机返回操作结果 2024-08-14 16:23:59 +08:00
kxdd a4b4a0b2a0 封装移动投币操作 2024-08-14 16:23:58 +08:00
by 8ff978db72 娃娃机返回操作结果 2024-08-14 16:22:57 +08:00
kxdd ae4ab17075 Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-14 15:54:38 +08:00
kxdd 2c8ce6a467 添加上分投币 2024-08-14 15:53:27 +08:00
by db82eabb7c 娃娃机 2024-08-14 14:48:28 +08:00
by 4a86c552f5 配置文件 2024-08-14 14:42:20 +08:00
kxdd ac608b4a44 Merge branch 'ma' of https://git.pogorockgames.com/mango-games/server/game into ma 2024-08-14 14:25:46 +08:00
kxdd 1fff8b2ebb 添加移动响应 2024-08-14 14:09:05 +08:00
by b9191e0538 娃娃机 2024-08-14 13:43:42 +08:00
by d2a8b0e618 娃娃机修改 2024-08-14 12:06:15 +08:00
by 6ea5fb3943 娃娃机投币 2024-08-14 11:37:03 +08:00
by 775280e03f 娃娃机 2024-08-14 11:33:03 +08:00
kxdd 49b0c6cc00 下抓通知添加 2024-08-13 15:33:44 +08:00
by d703046f63 娃娃机 2024-08-13 14:47:12 +08:00
453 changed files with 45537 additions and 1366 deletions

Binary file not shown.

Binary file not shown.

View File

@ -156,10 +156,12 @@ func upJybUser(cjybuse, cjyb *mongo.Collection, snId, codeType int32, plt, useCo
if jybuser.JybInfos == nil {
jybuser.JybInfos = make(map[string]int32)
} else if _, exist := jybuser.JybInfos[jybuseerid]; exist { // 该类型礼包玩家已经领取过
return model.ErrJYBPlCode
if ret.CodeType != 3 {
return model.ErrJYBPlCode
}
}
jybuser.JybInfos[jybuseerid] = 1
jybuser.JybInfos[jybuseerid]++
err = cjybuse.Update(bson.M{"_id": jybuser.JybUserId}, bson.D{{"$set", bson.D{{"jybinfos", jybuser.JybInfos}}}})
if err != nil {

View File

@ -39,6 +39,7 @@ const (
ETCDKEY_RANK_TYPE = "/game/RankType" // 排行榜奖励配置
ETCDKEY_AWARD_CONFIG = "/game/awardlog_config" //获奖记录
ETCDKEY_GUIDE = "/game/guide_config" //新手引导配置
ETCDKEY_MACHINE = "/game/machine_config" //娃娃机配置
ETCDKEY_MatchAudience = "/game/match_audience" //比赛观众
ETCDKEY_Spirit = "/game/spirit" // 小精灵配置
ETCDKEY_RoomType = "/game/room_type" // 房间类型配置

View File

@ -8,18 +8,53 @@ const (
ClawDollSceneStateStart //开始倒计时
ClawDollSceneStatePlayGame //游戏中
ClawDollSceneStateBilled //结算
ClawDollSceneWaitPayCoin //等待下一局投币
ClawDollSceneStateMax
)
// 玩家状态
const (
ClawDollSceneWaitTimeout = time.Second * 2 //等待倒计时
ClawDollSceneStartTimeout = time.Second * 6 //开始倒计时
ClawDollSceneBilledTimeout = time.Second * 2 //结算
ClawDollPlayerStateWait int32 = iota //等待状态
ClawDollPlayerStateStart //开始倒计时
ClawDollPlayerStatePlayGame //游戏中
ClawDollPlayerStateBilled //结算
ClawDollPlayerWaitPayCoin //等待下一局投币
ClawDollPlayerStateMax
)
const (
ClawDollSceneWaitTimeout = time.Second * 6 //等待倒计时
ClawDollSceneStartTimeout = time.Second * 1 //开始倒计时
ClawDollScenePlayTimeout = time.Second * 30 //娃娃机下抓倒计时
ClawDollSceneBilledTimeout = time.Second * 2 //结算
ClawDollSceneWaitPayCoinimeout = time.Second * 10 //等待下一局投币
)
// 玩家操作
const (
ClawDollPlayerOpScore = iota + 1 // 上分
ClawDollPlayerOpGo // 下抓
ClawDollPlayerOpMove // 移动方向
ClawDollPlayerOpPayCoin = iota + 1 // 上分 投币
ClawDollPlayerOpGo // 下抓
ClawDollPlayerOpMove // 玩家操控动作 // 1-前 2-后 3-左 4-右
ClawDollPlayerCancelPayCoin // 取消投币
)
// 1-前 2-后 3-左 4-右 5-投币
const (
ButtonFront = iota + 1 /*前*/
ButtonBack /*后*/
ButtonLeft /*左*/
ButtonRight /*右*/
ButtonPayCoin /*投币*/
)
const (
MoveStop = 0 /*移动停止*/
MoveStar = 1 /*移动开始*/
)
const (
ClawWeak = iota + 1 //弱力抓
ClawStrong //强力抓
ClawGain //必出抓
)

221
gamerule/clawdoll/queue.go Normal file
View File

@ -0,0 +1,221 @@
package clawdoll
// queue队列容器包
// 以动态数组的形式实现
// 该容器可以在尾部实现线性增加元素,在首部实现线性减少元素
// 队列的扩容和缩容同vector一样,即数组小采用翻倍扩缩容/折半缩容,数组大时采用固定扩/缩容
// 该容器满足FIFO的先进先出模式
// 可接纳不同类型的元素
// queue队列结构体
// 包含泛型切片和该切片的首尾位的下标
// 当删除节点时仅仅需要后移首位一位即可
// 当剩余长度较小时采用缩容策略进行缩容以释放空间
// 当添加节点时若未占满全部已分配空间则尾指针后移一位同时进行覆盖存放
// 当添加节点时尾指针大于已分配空间长度,则先去掉首部多出来的空间,如果还不足则进行扩容
// 首节点指针始终不能超过尾节点指针
type Queue struct {
data []interface{} //泛型切片
begin uint64 //首节点下标
end uint64 //尾节点下标
cap uint64 //容量
}
//queue队列容器接口
//存放了queue容器可使用的函数
//对应函数介绍见下方
type queuer interface {
Size() (size uint64) //返回该队列中元素的使用空间大小
Clear() //清空该队列
Empty() (b bool) //判断该队列是否为空
Push(e interface{}) //将元素e添加到该队列末尾
Pop() (e interface{}) //将该队列首元素弹出并返回
Front() (e interface{}) //获取该队列首元素
Back() (e interface{}) //获取该队列尾元素
}
// 新建一个queue队列容器并返回
// 初始queue的切片数组为空
// 初始queue的首尾指针均置零
//
// @receiver nil
// @param nil
// @return q *Queue 新建的queue指针
func New() (q *Queue) {
return &Queue{
data: make([]interface{}, 1, 1),
begin: 0,
end: 0,
cap: 1,
}
}
// 返回该容器当前含有元素的数量
// 该长度并非实际占用空间数量
// 若容器为空则返回0
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return size uint64 容器中实际使用元素所占空间大小
func (q *Queue) Size() (size uint64) {
if q == nil {
q = New()
}
return q.end - q.begin
}
// 以queue队列容器做接收者
// 将该容器中所承载的元素清空
// 将该容器的首尾指针均置0,容量设为1
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return nil
func (q *Queue) Clear() {
if q == nil {
q = New()
}
q.data = make([]interface{}, 1, 1)
q.begin = 0
q.end = 0
q.cap = 1
}
// 判断该queue队列容器是否含有元素
// 如果含有元素则不为空,返回false
// 如果不含有元素则说明为空,返回true
// 如果容器不存在,返回true
// 该判断过程通过首尾指针数值进行判断
// 当尾指针数值等于首指针时说明不含有元素
// 当尾指针数值大于首指针时说明含有元素
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return b bool 该容器是空的吗?
func (q *Queue) Empty() (b bool) {
if q == nil {
q = New()
}
return q.Size() <= 0
}
// 在容器尾部插入元素
// 若尾指针小于切片实际使用长度,则对当前指针位置进行覆盖,同时尾下标后移一位
// 若尾指针等于切片实际使用长度,则对实际使用量和实际占用量进行判断
// 当首部还有冗余时则删将实际使用整体前移到首部,否则对尾部进行扩容即可
//
// @receiver q *Queue 接受者queue的指针
// @param e interface{} 待插入元素
// @return nil
func (q *Queue) Push(e interface{}) {
if q == nil {
q = New()
}
if q.end < q.cap {
//不需要扩容
q.data[q.end] = e
} else {
//需要扩容
if q.begin > 0 {
//首部有冗余,整体前移
for i := uint64(0); i < q.end-q.begin; i++ {
q.data[i] = q.data[i+q.begin]
}
q.end -= q.begin
q.begin = 0
} else {
//冗余不足,需要扩容
if q.cap <= 65536 {
//容量翻倍
if q.cap == 0 {
q.cap = 1
}
q.cap *= 2
} else {
//容量增加2^16
q.cap += 2 ^ 16
}
//复制扩容前的元素
tmp := make([]interface{}, q.cap, q.cap)
copy(tmp, q.data)
q.data = tmp
}
q.data[q.end] = e
}
q.end++
}
// 弹出容器第一个元素,同时首下标后移一位
// 若容器为空,则不进行弹出
// 弹出结束后,进行缩容判断,考虑到queue的冗余会存在于前后两个方向
// 所以需要对前后两方分别做判断, 但由于首部主要是减少,并不会增加,所以不需要太多冗余量,而尾部只做添加,所以需要更多的冗余
// 所以可以对首部预留2^10的冗余,当超过时直接对首部冗余清除即可,释放首部空间时尾部空间仍然保留不变
// 当首部冗余不足2^10时,但冗余超过实际使用空间,也会对首部进行缩容,尾部不变
// 同时返回队首元素
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return e interface{} 队首元素
func (q *Queue) Pop() (e interface{}) {
if q == nil {
q = New()
return nil
}
if q.Empty() {
q.Clear()
return nil
}
e = q.data[q.begin]
q.begin++
if q.begin >= 1024 || q.begin*2 > q.end {
//首部冗余超过2^10或首部冗余超过实际使用
q.cap -= q.begin
q.end -= q.begin
tmp := make([]interface{}, q.cap, q.cap)
copy(tmp, q.data[q.begin:])
q.data = tmp
q.begin = 0
}
return e
}
// 返回该容器的第一个元素
// 若该容器当前为空,则返回nil
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return e interface{} 容器的第一个元素
func (q *Queue) Front() (e interface{}) {
if q == nil {
q = New()
return nil
}
if q.Empty() {
q.Clear()
return nil
}
return q.data[q.begin]
}
// 返回该容器的最后一个元素
// 若该容器当前为空,则返回nil
//
// @receiver q *Queue 接受者queue的指针
// @param nil
// @return e interface{} 容器的最后一个元素
func (q *Queue) Back() (e interface{}) {
if q == nil {
q = New()
return nil
}
if q.Empty() {
q.Clear()
return nil
}
return q.data[q.end-1]
}

View File

@ -0,0 +1,20 @@
package fortunedragon
// 房间类型
const (
RoomMode_Classic int = iota //经典
RoomMode_Max
)
// 场景状态
const (
FortuneDragonStateStart int = iota //默认状态
FortuneDragonStateMax
)
// 玩家操作
const (
FortuneDragonPlayerOpStart int = iota
FortuneDragonPlayerOpSwitch
)
const NowByte int64 = 10000

View File

@ -0,0 +1,359 @@
package fortunedragon
func (w *WinResult) Init() {
w.EleValue = make([]int32, 15)
w.WinLine = nil
}
// 玛丽游戏
func (w *WinResult) InitMary() {
w.MaryOutSide = -1
w.MaryMidArray = nil
w.MaryOutRate = 0
w.MaryMidRate = 0
w.MaryLianXu = 0
}
// 正常游戏 免费游戏
func (w *WinResult) CreateLine(ele [][]int32, free bool) {
w.Init()
w.result(ele, free)
//Print(w.EleValue)
}
func (w *WinResult) Win() {
w.getWinLine()
}
// 玛丽游戏
func (w *WinResult) CreateMary(maryGame [][]int32) {
w.InitMary()
w.MaryOutSide = RandSliceInt32IndexByWightN(maryGame[0])
for i := 0; i < 4; i++ {
ele := RandSliceInt32IndexByWightN(maryGame[1])
w.MaryMidArray = append(w.MaryMidArray, ele)
}
//fmt.Println("外圈元素", w.MaryOutSide)
//fmt.Println("内圈元素", w.MaryMidArray)
w.MaryWin()
}
func (w *WinResult) MaryWin() {
var outRate int64
switch w.MaryOutSide {
case Watermelon:
outRate += 200
case Grape:
outRate += 100
case Lemon:
outRate += 70
case Cherry:
outRate += 50
case Banana:
outRate += 20
case Apple:
outRate += 10
case Pineapple:
outRate += 5
}
var flag = w.MaryMidArray[0]
var n int32
for _, v := range w.MaryMidArray {
if flag != v {
break
}
n++
}
for _, v := range w.MaryMidArray {
if w.MaryOutSide == v {
w.MaryOutRate = outRate
break
}
}
if n >= 3 {
if n == 3 {
w.MaryMidRate = 20
} else if n == 4 {
w.MaryMidRate = 500
}
w.MaryLianXu = n
}
//fmt.Println("外圈倍率:", w.MaryOutRate)
//fmt.Println("内圈倍率", w.MaryMidRate)
}
func (w *WinResult) result(ele [][]int32, free bool) {
sl1 := make(map[int]bool)
sl2 := make(map[int]bool)
sl3 := make(map[int]bool)
n := 0
for i := 0; i < Column; i++ {
for j := 0; j < Row; j++ {
val := RandSliceInt32IndexByWightN(ele[j])
if val == Scatter {
if !sl1[j] {
sl1[j] = true
} else {
noScatter := make([]int32, len(ele[j]))
copy(noScatter, ele[j])
noScatter[Scatter] = 0
noScatter[Bonus] = 0
noScatter[Wild] = 0
val = RandSliceInt32IndexByWightN(noScatter)
}
} else if val == Bonus {
if !sl2[j] {
sl2[j] = true
} else {
noBonus := make([]int32, len(ele[j]))
copy(noBonus, ele[j])
noBonus[Scatter] = 0
noBonus[Bonus] = 0
noBonus[Wild] = 0
val = RandSliceInt32IndexByWightN(noBonus)
}
} else if val == Wild {
if !sl3[j] {
sl3[j] = true
} else {
noWild := make([]int32, len(ele[j]))
copy(noWild, ele[j])
noWild[Scatter] = 0
noWild[Bonus] = 0
noWild[Wild] = 0
val = RandSliceInt32IndexByWightN(noWild)
}
}
w.EleValue[n] = val
n++
}
}
if free {
//免费 不中 玛丽游戏和奖池
eleVal := make([]int32, len(w.EleValue))
copy(eleVal, w.EleValue)
var wls WinResult
wls.Init()
wls.EleValue = eleVal
wls.Win()
for _, v := range wls.WinLine {
flag := v.Lines[0]
if flag == Scatter {
noScatter := make([]int32, len(ele[2]))
copy(noScatter, ele[2])
noScatter[Wild] = 0
noScatter[Scatter] = 0
vv := RandSliceInt32IndexByWightN(noScatter)
w.EleValue[v.Poss[2]] = vv
} else {
wildNum := 0
for _, el := range v.Lines {
if el == Wild {
wildNum++
} else {
wildNum = 0
}
}
if wildNum >= 3 {
noWild := make([]int32, len(ele[2]))
copy(noWild, ele[2])
noWild[Wild] = 0
noWild[Scatter] = 0
w.EleValue[v.Poss[2]] = RandSliceInt32IndexByWightN(noWild)
}
}
}
}
}
func (w *WinResult) getWinLine() {
n := 0
var flag int32 = -1
for k, cols := range LineWinNum {
flag = w.EleValue[cols[0]]
//Bonus Scatter 不参与线数 Bonus下班单独计算
if flag == Bonus || flag == Scatter {
continue
}
var line []int32
var pos []int32
for _, key := range cols {
//不计算 Bonus
if (flag == w.EleValue[key] || Wild == w.EleValue[key] || flag == Wild) && w.EleValue[key] != Bonus &&
w.EleValue[key] != Scatter {
if Wild != w.EleValue[key] {
flag = w.EleValue[key]
}
n++
line = append(line, w.EleValue[key])
pos = append(pos, int32(key))
} else {
if n >= 3 || (flag == Banana && n >= 2) {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(flag, n),
})
}
n = 0
pos = nil
line = nil
break
}
if n == 5 {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(flag, n),
})
n = 0
pos = nil
line = nil
}
}
}
w.getBonusAndScatter()
//test code
//if len(w.WinLine) > 0 {
// fmt.Println("====== 赢的总线数 =======", len(w.WinLine))
// for k, v := range w.WinLine {
// fmt.Print(k+1, " ")
// PrintWin(v.Lines)
// fmt.Println(k+1, "位置 ", v.Poss, " 中奖线号:", v.LineId, " 线元素:", v.Lines, " 倍率:", v.Rate)
// }
//}
}
func (w *WinResult) getBonusAndScatter() {
//只计算Bonus和Scatter
for k, cols := range LineWinNum {
var n int
var line []int32
var pos []int32
for l, key := range cols {
if w.EleValue[key] == Bonus {
n++
line = append(line, w.EleValue[key])
pos = append(pos, int32(key))
} else {
if n >= 3 {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Bonus, n),
})
}
n = 0
pos = nil
line = nil
continue
}
if l == 4 {
if n >= 3 {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Bonus, n),
})
n = 0
pos = nil
line = nil
}
}
}
n = 0
pos = nil
line = nil
for l, key := range cols {
if w.EleValue[key] == Scatter {
n++
line = append(line, w.EleValue[key])
pos = append(pos, int32(key))
} else {
if n >= 3 {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Scatter, n),
})
}
n = 0
pos = nil
line = nil
continue
}
if l == 4 {
if n >= 3 {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Scatter, n),
})
n = 0
pos = nil
line = nil
}
}
}
n = 0
pos = nil
line = nil
for l, key := range cols {
if w.EleValue[key] == Wild {
n++
line = append(line, w.EleValue[key])
pos = append(pos, int32(key))
} else {
if n >= 3 {
isHave := false
for _, i2 := range w.WinLine {
if i2.LineId == k+1 {
isHave = true
break
}
}
if !isHave {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Wild, n),
})
}
}
n = 0
pos = nil
line = nil
continue
}
if l == 4 {
if n >= 3 {
isHave := false
for _, i2 := range w.WinLine {
if i2.LineId == k+1 {
isHave = true
break
}
}
if !isHave {
w.WinLine = append(w.WinLine, WinLine{
Lines: line,
Poss: pos,
LineId: k + 1,
Rate: GetRate(Wild, n),
})
}
n = 0
pos = nil
line = nil
}
}
}
}
}

View File

@ -0,0 +1,215 @@
package fortunedragon
import (
"fmt"
"math/rand"
"strconv"
)
func GetLineEleVal(gameState int, needRate int64, eleLineAppearRate [][]int32, isLow bool) (WinResult, []int, [][]int32) {
var preInt [][]int32
for i := 0; i < 1000; i++ {
var wls WinResult
wls.CreateLine(eleLineAppearRate, false)
wls.Win()
var rate int64
var bonusNum int
var wildNum int
for _, v := range wls.WinLine {
if len(v.Lines) == 0 {
continue
}
rate += v.Rate
if v.Lines[0] == Bonus {
bonusNum += len(v.Lines)
} else if v.Lines[0] == Wild {
wildNum += len(v.Lines)
}
NowWildNum := 0
for _, l := range v.Lines {
if l != Wild && NowWildNum > 0 {
if NowWildNum < 3 {
NowWildNum = 0
}
} else if l == Wild {
NowWildNum++
}
}
if NowWildNum >= 3 {
wildNum += NowWildNum
}
}
//fmt.Printf("%v || rate %v", wls.EleValue, rate)
//fmt.Println()
var n int64 = 5
if gameState == FreeGame {
n = 50
}
if wildNum >= 3 || bonusNum >= 3 {
continue
}
if isLow {
continue
}
if rate >= needRate-n && rate <= needRate+n {
var poss []int32
for _, v := range wls.WinLine {
poss = append(poss, v.Poss...)
}
var noPoss []int
for k := range wls.EleValue {
isF := false
for _, pn := range poss {
if k == int(pn) {
isF = true
break
}
}
if !isF {
noPoss = append(noPoss, k)
}
}
//fmt.Println("...........find rate: ", rate, " 第 ", i+1, " 次.")
return wls, noPoss, nil
}
if rate != 0 && rate < 50 && len(preInt) < 10 {
preInt = append(preInt, wls.EleValue)
}
}
return WinResult{}, nil, preInt
}
func GetLinePos(lineId int) []int {
if lineId <= 9 || lineId >= 1 {
return LineWinNum[lineId-1]
}
return nil
}
func GetRate(ele int32, num int) int64 {
if data, ok := EleNumRate[ele]; ok {
if r, ok2 := data[num]; ok2 {
return r
}
}
return 0
}
func RandSliceInt32IndexByWightN(s1 []int32) int32 {
total := 0
for _, v := range s1 {
total += int(v)
}
if total <= 0 {
return 0
}
random := rand.Intn(total)
total = 0
for i, v := range s1 {
total += int(v)
if random < total {
return int32(i)
}
}
return 0
}
func PrintFruit(idx int32) (str string) {
switch idx {
case Wild:
str += "Wild"
case Bonus:
str += "Bonus"
case Scatter:
str += "SCATTER"
case Bar:
str += "Bar"
case Cherry:
str += "樱桃"
case Bell:
str += "铃铛"
case Pineapple:
str += "菠萝"
case Grape:
str += "葡萄"
case Lemon:
str += "柠檬"
case Watermelon:
str += "西瓜"
case Banana:
str += "香蕉"
case Apple:
str += "苹果"
case Bomb:
str += "炸弹"
}
return str
}
func Print(res []int32) {
fmt.Println(res, len(res))
str := ""
for k, ele := range res {
switch ele {
case Wild:
str += "Wild,"
case Bonus:
str += "Bonus,"
case Scatter:
str += "Scatter,"
case Bar:
str += "Bar,"
case Cherry:
str += "樱桃,"
case Bell:
str += "铃铛,"
case Pineapple:
str += "菠萝,"
case Grape:
str += "葡萄,"
case Lemon:
str += "柠檬,"
case Watermelon:
str += "西瓜,"
case Apple:
str += "苹果,"
case Banana:
str += "香蕉,"
}
if (k+1)%5 == 0 {
fmt.Println("第", strconv.Itoa((k+1)/5), "行 ", str)
str = ""
}
}
}
func PrintWin(lines []int32) {
str := ""
for _, ele := range lines {
switch ele {
case Wild:
str += "Wild,"
case Bonus:
str += "Bonus,"
case Scatter:
str += "Scatter,"
case Bar:
str += "Bar,"
case Cherry:
str += "樱桃,"
case Bell:
str += "铃铛,"
case Pineapple:
str += "菠萝,"
case Grape:
str += "葡萄,"
case Lemon:
str += "柠檬,"
case Watermelon:
str += "西瓜,"
case Banana:
str += "香蕉,"
case Apple:
str += "苹果,"
case Bomb:
str += "炸弹,"
}
}
fmt.Println(str)
}

View File

@ -29,6 +29,7 @@ const (
TIenLenTianhuTimeout = time.Second * 2 // 天胡动画时长
TienLenHandNotExceedTimeLimit = time.Second * 3 //玩家没有牌可以接上家的牌,出牌时间上限
TienLenHandAutoStateTimeOut = time.Second * 1 //玩家托管出牌时间上限
TienLenCustomWaiteStatTimeout = time.Millisecond * 1500
)
// 场景状态

View File

@ -4,22 +4,77 @@ import (
"mongo.games.com/game/protocol/machine"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"sync"
)
var MachineMap = make(map[int]string)
var MachineMap = make(map[int]*DollMachine)
var MachineMapLock = sync.Mutex{}
func MSDollMachineList(session *netlib.Session, packetId int, data interface{}) error {
type DollMachine struct {
Id int
MachineStatus int32 //娃娃机链接状态 0:离线 1:在线
Status bool //标记是否被占用
VideoAddr string
}
func MSDollMachineListHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("TestHandler %v", data)
MachineMap = make(map[int]string)
MachineMap = make(map[int]*DollMachine)
if msg, ok := data.(*machine.MSDollMachineList); ok {
for i, info := range msg.Data {
MachineMap[i+1] = info.VideoAddr
MachineMap[i+1] = &DollMachine{
Id: i + 1,
Status: false,
VideoAddr: info.VideoAddr,
MachineStatus: 1,
}
logger.Logger.Tracef("MachineMap[%v] = %v", i, info.VideoAddr)
}
}
return nil
}
func init() {
netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineList)
// 获取空闲娃娃机标识
func GetFreeDollMachineId() int {
// 获取互斥锁
MachineMapLock.Lock()
defer MachineMapLock.Unlock()
for i, v := range MachineMap {
if v.Status == false {
v.Status = true
return i
}
}
return 0
}
// 获取指定娃娃机链接状态
func GetDollMachineStatus(id int) int32 {
if MachineMap[id] == nil {
return 0
}
return MachineMap[id].MachineStatus
}
func MSUpdateDollMachineStatusHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("MSUpdateDollMachineStatusHandler %v", data)
if msg, ok := data.(*machine.MSUpdateDollMachineStatus); ok {
if MachineMap[int(msg.Id)] == nil {
MachineMap[int(msg.Id)] = &DollMachine{
Id: int(msg.Id),
Status: false,
VideoAddr: msg.VideoAddr,
MachineStatus: msg.Status,
}
} else {
MachineMap[int(msg.Id)].MachineStatus = msg.Status
}
logger.Logger.Tracef("更新娃娃机连接状态 id = %d,status= %d", msg.Id, msg.GetStatus())
}
return nil
}
func init() {
netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineList), &machine.MSDollMachineList{}, MSDollMachineListHandler)
//更新娃娃机链接状态
netlib.Register(int(machine.DollMachinePacketID_PACKET_MSUpdateDollMachineStatus), &machine.MSUpdateDollMachineStatus{}, MSUpdateDollMachineStatusHandler)
}

View File

@ -24,6 +24,8 @@ func init() {
etcd.Register(etcd.ETCDKEY_ChannelSwitch, webapi.ChannelSwitchConfig{}, platformConfigEtcd)
// 皮肤配置
etcd.Register(etcd.ETCDKEY_SKin, webapi.SkinConfig{}, platformConfigEtcd)
// 娃娃机配置
etcd.Register(etcd.ETCDKEY_MACHINE, webapi.MachineConfig{}, platformConfigEtcd)
}
func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) {
@ -41,6 +43,8 @@ func platformConfigEtcd(ctx context.Context, completeKey string, isInit bool, ev
ConfigMgrInst.GetConfig(d.Platform).ChannelSwitch[d.GetTp()] = d
case *webapi.SkinConfig:
ConfigMgrInst.GetConfig(d.Platform).SkinConfig = d
case *webapi.MachineConfig:
ConfigMgrInst.GetConfig(d.Platform).MachineConfig = d
default:
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
}

View File

@ -3,6 +3,8 @@ package base
import (
"reflect"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/model"
"mongo.games.com/game/mq"
)
@ -38,6 +40,7 @@ func (c *LogChannel) WriteLog(log interface{}) {
if cname == "" {
cname = "_null_"
}
logger.Logger.Tracef("LogChannel ==> %#v", log)
mq.Send(cname, log)
}

View File

@ -117,6 +117,8 @@ func NewScene(args *CreateSceneParam) *Scene {
KeyGameDif: args.GetDBGameFree().GetGameDif(),
}
s.CycleID, _ = model.AutoIncGameLogId()
s.rrVer = ReplayRecorderVer[gameId]
s.RecordReplayStart()
s.init()
return s
}
@ -2551,3 +2553,15 @@ func (this *Scene) TryRelease() {
this.Destroy(true)
}
}
func (this *Scene) GetMachineServerSecret(MachineId int32, platform string) (AppId int64, ServerSecret string) {
config := ConfigMgrInst.GetConfig(platform).MachineConfig
if config == nil {
return 0, ""
}
for _, info := range config.Info {
if info.MachineId == MachineId {
return info.AppId, info.ServerSecret
}
}
return 0, ""
}

View File

@ -2,8 +2,10 @@ package clawdoll
import (
"mongo.games.com/game/common"
rule "mongo.games.com/game/gamerule/clawdoll"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/game/protocol/machine"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
@ -48,8 +50,129 @@ func (h *CSPlayerOpHandler) Process(s *netlib.Session, packetid int, data interf
}
return nil
}
func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("收到返回上分结果!!!!!!!!!!")
if msg, ok := data.(*machine.MSDollMachineoPerateResult); ok {
func init() {
common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpHandler{})
netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_CLAWDOLL_PLAYEROP), &CSPlayerOpPacketFactory{})
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid())
if p == nil {
logger.Logger.Warn("CSGetTokenHandler p == nil")
return nil
}
scene := p.GetScene()
if scene == nil {
return nil
}
sceneEx, ok := scene.ExtraData.(*SceneEx)
if !ok {
return nil
}
switch msg.TypeId {
case 1:
if msg.Result == 1 {
logger.Logger.Tracef("上分成功snid = ", msg.Snid)
} else {
logger.Logger.Tracef("上分失败snid = ", msg.Snid)
}
case 2:
if msg.Result == 1 {
} else {
logger.Logger.Tracef("下抓失败snid = ", msg.Snid)
}
scene.ChangeSceneState(rule.ClawDollSceneStateBilled)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled))
ClawdollBroadcastRoomState(scene)
ClawdollSendPlayerInfo(scene)
}
}
return nil
}
type CSGetTokenPacketFactory struct {
}
type CSGetTokenHandler struct {
}
func (f *CSGetTokenPacketFactory) CreatePacket() interface{} {
pack := &clawdoll.CSCLAWDOLLGetToken{}
return pack
}
func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
//转发到娃娃机主机
logger.Logger.Tracef("CSGetTokenHandler")
if _, ok := data.(*clawdoll.CSCLAWDOLLGetToken); ok {
p := base.PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetTokenHandler p == nil")
return nil
}
pack := &machine.SMGetToken{}
pack.Snid = p.SnId
scene := p.GetScene()
if scene == nil {
return nil
}
sceneEx, ok := scene.ExtraData.(*SceneEx)
if !ok {
return nil
}
machineId := scene.GetDBGameFree().GetId() % 6080000
appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform)
logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret)
if serverSecret == "" || appId == 0 {
return nil
}
pack.ServerSecret = serverSecret
pack.AppId = appId
sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack)
}
return nil
}
// 娃娃机返回token 通知客户端
func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) error {
logger.Logger.Tracef("MSSendTokenHandler")
if msg, ok := data.(*machine.MSSendToken); ok {
//给客户端返回token
token := msg.Token
p := base.PlayerMgrSington.GetPlayerBySnId(msg.GetSnid())
if p == nil {
logger.Logger.Warn("MSSendTokenHandler p == nil")
return nil
}
scene := p.GetScene()
if scene == nil {
return nil
}
pack := &clawdoll.SCCLAWDOLLSendToken{
LogicId: scene.DBGameFree.GetId(),
Appid: msg.Appid,
Token: token,
}
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack)
}
return nil
}
func init() {
common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpHandler{})
netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_PLAYEROP), &CSPlayerOpPacketFactory{})
netlib.Register(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{}, MSDollMachineoCoinResultHandler)
//客户端请求token
common.RegisterHandler(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenHandler{})
netlib.RegisterFactory(int(clawdoll.CLAWDOLLPacketID_PACKET_CS_GETTOKEN), &CSGetTokenPacketFactory{})
//获取token返回
netlib.Register(int(machine.DollMachinePacketID_PACKET_MSSendToken), &machine.MSSendToken{}, MSSendTokenHandler)
}

View File

@ -8,9 +8,13 @@ import (
type PlayerEx struct {
*base.Player //玩家信息
gainCoin int64 // 本局赢的金币
taxCoin int64 // 本局税收
odds int32
clawDollState int32 // 抓娃娃状态
dollCardsCnt int32 // 娃娃卡数量
winDollCardType int32 // 本局赢取娃娃的类型
gainCoin int64 // 本局赢的金币
taxCoin int64 // 本局税收
odds int32
}
func (this *PlayerEx) Clear(baseScore int32) {
@ -31,14 +35,37 @@ func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool {
return true
}
func (this *PlayerEx) CanPayCoinByPos() bool {
// 能否投币
func (this *PlayerEx) CanPayCoin() bool {
return true
}
return false
// 投币消耗
func (this *PlayerEx) CostPlayCoin() bool {
return true
}
// 能否移动
func (this *PlayerEx) CanMove() bool {
return true
}
// 能否下抓
func (this *PlayerEx) CanGrab() bool {
return true
}
// 游戏新一局 设置数据
func (this *PlayerEx) ReStartGame() {
this.ReDataStartGame()
this.UnmarkFlag(base.PlayerState_WaitNext)
this.UnmarkFlag(base.PlayerState_GameBreak)
this.MarkFlag(base.PlayerState_Ready)
this.gainCoin = 0
this.taxCoin = 0
this.odds = 0
@ -49,7 +76,7 @@ func (this *PlayerEx) InitData(baseScore int32) {
}
// 重置下注数据
// 重置数据
func (this *PlayerEx) ResetData() {
}
@ -69,3 +96,13 @@ func (this *PlayerEx) CanLeaveScene(sceneState int) bool {
return true
}
// 获取状态
func (this *PlayerEx) GetClawState() int32 {
return this.clawDollState
}
// 设置状态
func (this *PlayerEx) SetClawState(state int32) {
this.clawDollState = state
}

View File

@ -1,13 +1,16 @@
package clawdoll
import (
"mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/goserver/core/logger"
"container/list"
"mongo.games.com/game/common"
rule "mongo.games.com/game/gamerule/clawdoll"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/proto"
"mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/game/protocol/machine"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/goserver/srvlib"
)
type PlayerData struct {
@ -41,15 +44,21 @@ type SceneEx struct {
PlayerBackup map[int32]*PlayerData // 本局离场玩家数据备份
seats []*PlayerEx // 本局游戏中的玩家状态数据
RoundId int // 局数,第几局
robotNum int // 参与游戏的机器人数量
logid string
waitPlayers *list.List
playingSnid int32 // 正在玩的玩家snid
RoundId int // 局数,第几局
robotNum int // 参与游戏的机器人数量
logid string
machineId int //娃娃机ID
machineConn *netlib.Session //娃娃机链接
machineStatus int32 //娃娃机链接状态 0:离线 1:在线
}
// 游戏是否能开始
func (this *SceneEx) CanStart() bool {
//人数>=1自动开始
if len(this.players) >= 0 && (this.GetRealPlayerNum() >= 0 || this.IsPreCreateScene()) {
if len(this.players) >= 1 && (this.GetRealPlayerNum() >= 1 || this.IsPreCreateScene() || this.IsHasPlaying()) {
return true
}
return false
@ -58,19 +67,41 @@ func (this *SceneEx) CanStart() bool {
// 从房间删除玩家
func (this *SceneEx) delPlayer(p *base.Player) {
if p, exist := this.players[p.SnId]; exist {
this.seats[p.GetPos()] = nil
//this.seats[p.GetPos()] = nil
delete(this.players, p.SnId)
this.RemoveWaitPlayer(p.SnId)
}
}
// 广播玩家进入
func (this *SceneEx) BroadcastPlayerEnter(p *base.Player, reason int) {
pack := &clawdoll.SCCLAWDOLLPlayerEnter{}
pack.Data = &clawdoll.CLAWDOLLPlayerDigestInfo{}
pack.Data.SnId = p.GetSnId()
pack.Data.Head = p.Head
pack.Data.HeadUrl = p.HeadUrl
pack.Data.Name = p.Name
proto.SetDefaults(pack)
this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerEnter), pack, p.GetSid())
}
// 广播玩家离开
func (this *SceneEx) BroadcastPlayerLeave(p *base.Player, reason int) {
scLeavePack := &clawdoll.SCCLAWDOLLPlayerLeave{
Pos: proto.Int(p.GetPos()),
SnId: proto.Int32(p.SnId),
}
proto.SetDefaults(scLeavePack)
this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PlayerLeave), scLeavePack, p.GetSid())
this.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PlayerLeave), scLeavePack, p.GetSid())
}
// 玩家进入事件
func (this *SceneEx) OnPlayerEnter(p *base.Player, reason int) {
this.BroadcastPlayerEnter(p, reason)
}
// 玩家离开事件
@ -88,7 +119,7 @@ func (e *SceneEx) playerOpPack(snId int32, opcode int, opRetCode clawdoll.OpResu
SnId: proto.Int32(snId),
OpCode: proto.Int32(int32(opcode)),
Params: params,
OpRetCode: clawdoll.OpResultCode_OPRC_Success,
OpRetCode: opRetCode,
}
proto.SetDefaults(pack)
@ -98,7 +129,7 @@ func (e *SceneEx) playerOpPack(snId int32, opcode int, opRetCode clawdoll.OpResu
// OnPlayerSCOp 发送玩家操作情况
func (e *SceneEx) OnPlayerSCOp(p *base.Player, opcode int, opRetCode clawdoll.OpResultCode, params []int64) {
pack := e.playerOpPack(p.SnId, opcode, opRetCode, params)
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_PLAYEROP), pack)
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYEROP), pack)
logger.Logger.Tracef("OnPlayerSCOp %s", pack)
}
@ -132,7 +163,8 @@ func (this *SceneEx) ClawdollCreateRoomInfoPacket(s *base.Scene, p *base.Player)
HeadOutLine: proto.Int32(playerEx.HeadOutLine),
VIP: proto.Int32(playerEx.VIP),
WinCoin: proto.Int64(playerEx.gainCoin),
WinCoin: proto.Int64(playerEx.gainCoin),
ClawDollState: proto.Int32(playerEx.clawDollState),
}
pack.Players = append(pack.Players, pd)
@ -152,8 +184,8 @@ func NewClawdollSceneData(s *base.Scene) *SceneEx {
Scene: s,
logic: new(rule.Logic),
players: make(map[int32]*PlayerEx),
seats: make([]*PlayerEx, s.GetPlayerNum()),
PlayerBackup: make(map[int32]*PlayerData),
waitPlayers: list.New(),
}
return sceneEx
@ -164,9 +196,40 @@ func (this *SceneEx) init() bool {
return true
}
// 检查上分是否合法
func (this *SceneEx) CheckPayOp(betVal int64, takeMul int64) bool { //游戏底分
return true
// 检查上分投币是否合法
func (this *SceneEx) CheckPayCoinOp(p *PlayerEx) bool {
if p == nil {
return false
}
if p.SnId == this.playingSnid {
return true
}
return false
}
// 检查移动是否合法
func (this *SceneEx) CheckMoveOp(p *PlayerEx) bool {
if p == nil {
return false
}
if p.SnId == this.playingSnid {
return true
}
return false
}
// 下抓是否合法
func (this *SceneEx) CheckGrapOp(p *PlayerEx) bool {
if p == nil {
return false
}
if p.SnId == this.playingSnid {
return true
}
return false
}
func (this *SceneEx) Clear() {
@ -174,13 +237,29 @@ func (this *SceneEx) Clear() {
this.PlayerBackup = make(map[int32]*PlayerData)
this.RoundId = 0
for i := 0; i < this.GetPlayerNum(); i++ {
if this.seats[i] != nil {
this.seats[i].Clear(this.GetBaseScore())
for e := this.waitPlayers.Front(); e != nil; e = e.Next() {
if e != nil {
p := e.Value.(*PlayerEx)
p.Clear(0)
}
}
}
// 是否有玩家正在玩
func (this *SceneEx) IsHasPlaying() bool {
if this.playingSnid == 0 {
return false
}
return true
}
// 等待下一个玩家
func (this *SceneEx) ReStartGame() {
this.playingSnid = 0
}
func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) {
this.PlayerBackup[p.SnId] = &PlayerData{
SnId: p.SnId,
@ -203,3 +282,107 @@ func (this *SceneEx) BackupPlayer(p *PlayerEx, isBilled bool) {
BeUnderAgentCode: p.BeUnderAgentCode,
}
}
func (this *SceneEx) GetPlayGrabType(player *PlayerEx) int32 {
if player == nil {
return rule.ClawWeak
}
if this.RoundId%100 == 0 && this.RoundId != 0 {
return rule.ClawStrong
}
return rule.ClawWeak
}
func (this *SceneEx) AddWaitPlayer(player *PlayerEx) {
if player == nil {
return
}
this.waitPlayers.PushBack(player)
}
func (this *SceneEx) RemoveWaitPlayer(SnId int32) bool {
l := this.waitPlayers
for e := l.Front(); e != nil; e = e.Next() {
if p := e.Value.(*PlayerEx); p.SnId == SnId {
this.waitPlayers.Remove(e)
return true
}
}
return false
}
func (this *SceneEx) GetPlayingEx() *PlayerEx {
if this.playingSnid == 0 {
return nil
}
return this.players[this.playingSnid]
}
func (this *SceneEx) SetPlayingState(state int32) {
if this.playingSnid == 0 {
return
}
playerEx := this.players[this.playingSnid]
if playerEx != nil {
oldState := playerEx.GetClawState()
if oldState != state {
if oldState == rule.ClawDollPlayerStateWait && (state >= rule.ClawDollPlayerStateStart && state <= rule.ClawDollPlayerWaitPayCoin) {
ClawdollBroadcastPlayingInfo(this.Scene)
}
if state == rule.ClawDollPlayerStateWait && (oldState >= rule.ClawDollPlayerStateStart && oldState <= rule.ClawDollPlayerWaitPayCoin) {
ClawdollBroadcastPlayingInfo(this.Scene)
}
}
playerEx.SetClawState(state)
}
}
// 时间到 系统开始下抓
func (this *SceneEx) TimeOutPlayGrab() bool {
this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), rule.ClawWeak)
return true
}
// OnPlayerSMGrabOp 下抓 //1-弱力抓 2 -强力抓 3-必出抓
func (this *SceneEx) OnPlayerSMGrabOp(SnId, Id, GrabType int32) {
pack := &machine.SMDollMachineGrab{
Snid: proto.Int32(SnId),
Id: proto.Int32(Id),
TypeId: proto.Int32(GrabType),
}
this.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachineGrab), pack)
}
// OnPlayerSCOp 发送玩家操作情况 1-前 2-后 3-左 4-右 5-投币
func (this *SceneEx) OnPlayerSMPerateOp(SnId, Id, Perate int32) {
pack := &machine.SMDollMachineoPerate{
Snid: proto.Int32(SnId),
Id: proto.Int32(Id),
Perate: proto.Int32(Perate),
}
this.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMDollMachinePerate), pack)
}
// 向娃娃机主机发送消息
func (this *SceneEx) SendToMachine(pid int, msg interface{}) {
this.machineConn = srvlib.ServerSessionMgrSington.GetSession(1, 10, 1001)
if this.machineConn != nil {
this.machineConn.Send(pid, msg)
} else {
logger.Logger.Error("MachineConn is nil !")
}
}

View File

@ -1,7 +1,9 @@
package clawdoll
import (
"mongo.games.com/game/gamesrv/action"
"mongo.games.com/game/protocol/clawdoll"
"mongo.games.com/game/protocol/machine"
"time"
"mongo.games.com/goserver/core"
@ -61,6 +63,31 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) {
if s.SceneState != nil {
s.SceneState.OnTick(s)
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if ok {
if sceneEx.machineId == 0 {
sceneEx.machineId = action.GetFreeDollMachineId()
}
if sceneEx.machineId != 0 {
machineStatus := action.GetDollMachineStatus(sceneEx.machineId)
if machineStatus == 0 {
//链接状态不可用 踢出所有玩家
for _, p := range sceneEx.players {
sceneEx.delPlayer(p.Player)
}
sceneEx.machineStatus = 0
logger.Logger.Trace("娃娃机离线,当前场景暂停服务!")
//通知客户单房间不可用
} else {
if sceneEx.machineStatus == 0 {
sceneEx.machineStatus = machineStatus
//通知客户端房间可用
}
}
}
}
}
func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) {
@ -69,35 +96,31 @@ func (this *PolicyClawdoll) OnPlayerEnter(s *base.Scene, p *base.Player) {
}
logger.Logger.Trace("(this *PolicyClawdoll) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.SnId)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
pos := -1
for i := 0; i < sceneEx.GetPlayerNum(); i++ {
if sceneEx.seats[i] == nil {
pos = i
break
}
playerEx := &PlayerEx{Player: p}
sceneEx.players[p.SnId] = playerEx
baseScore := sceneEx.GetBaseScore()
p.ExtraData = playerEx
playerEx.Clear(baseScore)
if sceneEx.playingSnid == 0 {
//sceneEx.playingSnid = p.GetSnId()
}
if pos != -1 {
playerEx := &PlayerEx{Player: p}
sceneEx.seats[pos] = playerEx
sceneEx.players[p.SnId] = playerEx
baseScore := sceneEx.GetBaseScore()
p.MarkFlag(base.PlayerState_WaitNext)
p.UnmarkFlag(base.PlayerState_Ready)
p.Pos = pos
p.ExtraData = playerEx
playerEx.Clear(baseScore)
//给自己发送房间信息
this.SendRoomInfo(s, p, sceneEx)
if sceneEx.Gaming {
p.MarkFlag(base.PlayerState_WaitNext)
p.UnmarkFlag(base.PlayerState_Ready)
}
ClawdollBroadcastRoomWaitPlayers(s)
ClawdollBroadcastPlayingInfo(s)
//给自己发送房间信息
this.SendRoomInfo(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventEnter, nil)
}
// 玩家数据发送
sceneEx.OnPlayerEnter(p, 0)
this.SendGetVideoToken(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventEnter, nil)
}
}
@ -151,6 +174,10 @@ func (this *PolicyClawdoll) OnPlayerRehold(s *base.Scene, p *base.Player) {
p.MarkFlag(base.PlayerState_Ready)
}
this.SendRoomInfo(s, p, sceneEx)
ClawdollBroadcastRoomWaitPlayers(s)
ClawdollBroadcastPlayingInfo(s)
this.SendGetVideoToken(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventRehold, nil)
}
}
@ -168,6 +195,10 @@ func (this *PolicyClawdoll) OnPlayerReturn(s *base.Scene, p *base.Player) {
p.MarkFlag(base.PlayerState_Ready)
}
this.SendRoomInfo(s, p, sceneEx)
ClawdollBroadcastRoomWaitPlayers(s)
ClawdollBroadcastPlayingInfo(s)
this.SendGetVideoToken(s, p, sceneEx)
s.FirePlayerEvent(p, base.PlayerEventReturn, nil)
}
}
@ -207,9 +238,6 @@ func (this *PolicyClawdoll) IsCompleted(s *base.Scene) bool {
}
func (this *PolicyClawdoll) IsCanForceStart(s *base.Scene) bool {
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
return len(s.Players) >= 2 && !sceneEx.Gaming
}
return false
}
@ -234,8 +262,38 @@ func (this *PolicyClawdoll) CanChangeCoinScene(s *base.Scene, p *base.Player) bo
}
func (this *PolicyClawdoll) SendRoomInfo(s *base.Scene, p *base.Player, sceneEx *SceneEx) {
if s == nil || p == nil || sceneEx == nil {
return
}
pack := sceneEx.ClawdollCreateRoomInfoPacket(s, p)
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMINFO), pack)
p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_ROOMINFO), pack)
}
func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sceneEx *SceneEx) {
//转发到娃娃机主机
if s == nil || p == nil || sceneEx == nil {
return
}
logger.Logger.Tracef("ClawdollGetVideoToken")
if p == nil {
logger.Logger.Warn("ClawdollGetVideoToken p == nil")
return
}
pack := &machine.SMGetToken{}
pack.Snid = p.SnId
machineId := s.DBGameFree.GetId() % 6080000
appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform)
logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret)
if serverSecret == "" || appId == 0 {
return
}
pack.ServerSecret = serverSecret
pack.AppId = appId
sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack)
}
// 广播房间状态
@ -244,7 +302,79 @@ func ClawdollBroadcastRoomState(s *base.Scene, params ...float32) {
State: proto.Int(s.SceneState.GetState()),
Params: params,
}
s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_CLAWDOLL_ROOMSTATE), pack, 0)
s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_ROOMSTATE), pack, 0)
}
// 玩家状态信息变化
func ClawdollSendPlayerInfo(s *base.Scene) {
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
playerEx := sceneEx.GetPlayingEx()
if playerEx != nil && playerEx.SnId == sceneEx.playingSnid {
pack := &clawdoll.SCCLAWDOLLPlayerInfo{
SnId: proto.Int32(playerEx.SnId),
ClawDollState: proto.Int32(playerEx.GetClawState()),
Coin: proto.Int64(playerEx.Coin),
GainCoin: proto.Int64(playerEx.gainCoin),
}
proto.SetDefaults(pack)
playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYERINFO), pack)
}
}
}
// 广播房间里所有等待玩家信息
func ClawdollBroadcastRoomWaitPlayers(s *base.Scene) {
pack := &clawdoll.CLAWDOLLWaitPlayers{}
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
for _, playerEx := range sceneEx.players {
// 玩家信息
if playerEx.SnId != sceneEx.playingSnid {
pd := &clawdoll.CLAWDOLLPlayerDigestInfo{
SnId: proto.Int32(playerEx.SnId),
Head: proto.Int32(playerEx.Head),
HeadUrl: proto.String(playerEx.HeadUrl),
Name: proto.String(playerEx.Name),
}
pack.WaitPlayersInfo = append(pack.WaitPlayersInfo, pd)
}
}
s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_WAITPLAYERS), pack, 0)
}
}
// 广播房间正在控制娃娃机的玩家信息
func ClawdollBroadcastPlayingInfo(s *base.Scene) {
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if !sceneEx.IsHasPlaying() {
pack := &clawdoll.CLAWDOLLPlayerDigestInfo{
SnId: proto.Int32(0),
Head: proto.Int32(0),
}
s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYINGINFO), pack, 0)
return
}
playerEx := sceneEx.GetPlayingEx()
if playerEx != nil && playerEx.SnId == sceneEx.playingSnid {
pack := &clawdoll.CLAWDOLLPlayerDigestInfo{
SnId: proto.Int32(playerEx.SnId),
Head: proto.Int32(playerEx.Head),
HeadUrl: proto.String(playerEx.HeadUrl),
Name: proto.String(playerEx.Name),
}
s.Broadcast(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYINGINFO), pack, 0)
//playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_PLAYERINFO), pack)
}
}
}
//=====================================
@ -267,14 +397,14 @@ func (this *BaseState) CanChangeTo(s base.SceneState) bool {
func (this *BaseState) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
//playerEx, ok := p.ExtraData.(*PlayerEx)
//if !ok {
// return false
//}
//
//if !playerEx.CanLeaveScene(s.GetSceneState().GetState()) {
// return false
//}
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return false
}
if !playerEx.CanLeaveScene(s.GetSceneState().GetState()) {
return false
}
return true
}
@ -288,6 +418,7 @@ func (this *BaseState) OnEnter(s *base.Scene) {
func (this *BaseState) OnLeave(s *base.Scene) {}
func (this *BaseState) OnTick(s *base.Scene) {
}
func (this *BaseState) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
@ -318,23 +449,19 @@ func (this *StateWait) CanChangeTo(s base.SceneState) bool {
}
func (this *StateWait) GetTimeout(s *base.Scene) int {
return this.BaseState.GetTimeout(s)
}
func (this *StateWait) OnEnter(s *base.Scene) {
this.BaseState.OnEnter(s)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if _, ok := s.ExtraData.(*SceneEx); ok {
if s.Gaming {
s.NotifySceneRoundPause()
}
s.Gaming = false
ClawdollBroadcastRoomState(s, float32(0), float32(0))
if sceneEx.CanStart() {
s.ChangeSceneState(rule.ClawDollSceneStateStart)
}
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
}
}
@ -361,13 +488,51 @@ func (this *StateWait) OnTick(s *base.Scene) {
sceneEx.SceneDestroy(true)
return
}
if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitTimeout {
//切换到准备开局状态
if sceneEx.CanStart() {
s.ChangeSceneState(rule.ClawDollSceneStateStart)
}
}
}
func (this *StateWait) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
if this.BaseState.OnPlayerOp(s, p, opcode, params) {
return true
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return false
}
switch opcode {
case rule.ClawDollPlayerOpPayCoin:
if sceneEx.IsHasPlaying() {
return false
}
if !playerEx.CanPayCoin() {
return false
}
// 1-前 2-后 3-左 4-右 5-投币
sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin)
if sceneEx.CanStart() {
sceneEx.playingSnid = playerEx.SnId
s.ChangeSceneState(rule.ClawDollSceneStateStart)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
ClawdollBroadcastPlayingInfo(s)
sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params)
}
}
return false
}
//=====================================
@ -386,6 +551,8 @@ func (this *StateStart) CanChangeTo(s base.SceneState) bool {
switch s.GetState() {
case rule.ClawDollSceneStatePlayGame:
return true
case rule.ClawDollSceneStateWait:
return true
}
return false
}
@ -393,11 +560,12 @@ func (this *StateStart) CanChangeTo(s base.SceneState) bool {
func (this *StateStart) OnEnter(s *base.Scene) {
this.BaseState.OnEnter(s)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
ClawdollBroadcastRoomState(s, float32(0), float32(0))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
s.Gaming = false
sceneEx.GameNowTime = time.Now()
sceneEx.NumOfGames++
}
}
@ -406,32 +574,24 @@ func (this *StateStart) OnTick(s *base.Scene) {
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneStartTimeout {
//切换到等待操作状态
if sceneEx.CanStart() {
s.ChangeSceneState(rule.ClawDollSceneStatePlayGame)
} else {
s.ChangeSceneState(rule.ClawDollSceneStateWait)
}
s.ChangeSceneState(rule.ClawDollSceneStatePlayGame)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStatePlayGame))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
}
}
}
func (this *StateStart) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
if this.BaseState.OnPlayerOp(s, p, opcode, params) {
return true
}
return false
}
func (this *StateStart) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
logger.Logger.Trace("(this *StateStart) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " evtcode=", evtcode)
this.BaseState.OnPlayerEvent(s, p, evtcode, params)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if _, ok := s.ExtraData.(*SceneEx); ok {
switch evtcode {
case base.PlayerEventLeave:
if !sceneEx.CanStart() {
s.ChangeSceneState(rule.ClawDollSceneStateWait)
}
case base.PlayerEventEnter:
if !p.IsReady() {
p.MarkFlag(base.PlayerState_Ready)
@ -467,7 +627,8 @@ func (this *PlayGame) OnEnter(s *base.Scene) {
s.Gaming = true
ClawdollBroadcastRoomState(s, float32(0), float32(0))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
}
@ -479,11 +640,65 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para
return true
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return false
}
switch opcode {
case rule.ClawDollPlayerOpGo:
if !sceneEx.CheckGrapOp(playerEx) {
return false
}
if !playerEx.CanGrab() {
return false
}
grapType := sceneEx.GetPlayGrabType(playerEx)
logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " grapType: ", grapType)
//1-弱力抓 2 -强力抓
sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType)
case rule.ClawDollPlayerOpMove:
if !sceneEx.CheckMoveOp(playerEx) {
return false
}
if !playerEx.CanMove() {
return false
}
if params[0] < rule.ButtonFront || params[0] > rule.ButtonRight {
logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " opcode: ", opcode, " params:", params)
return false
}
// 1-前 2-后 3-左 4-右 5-投币
sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), int32(params[0]))
}
return false
}
func (this *PlayGame) OnTick(s *base.Scene) {
this.BaseState.OnTick(s)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout {
if sceneEx.TimeOutPlayGrab() {
logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId)
}
return
}
}
}
//=====================================
@ -500,7 +715,7 @@ func (this *StateBilled) GetState() int {
func (this *StateBilled) CanChangeTo(s base.SceneState) bool {
switch s.GetState() {
case rule.ClawDollSceneStateStart:
case rule.ClawDollSceneWaitPayCoin:
return true
}
return false
@ -513,6 +728,26 @@ func (this *StateBilled) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, p
func (this *StateBilled) OnEnter(s *base.Scene) {
logger.Logger.Trace("(this *StateBilled) OnEnter, sceneid=", s.GetSceneId())
this.BaseState.OnEnter(s)
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return
}
playerEx := sceneEx.GetPlayingEx()
if playerEx != nil {
pack := &clawdoll.SCCLAWDOLLRoundGameBilled{
RoundId: proto.Int32(int32(sceneEx.RoundId)),
ClowResult: proto.Int32(0),
Award: proto.Int64(playerEx.gainCoin),
Balance: proto.Int64(playerEx.Coin),
}
// logger.Logger.Trace("SCSmallRocketRoundGameBilled is pack: ", pack)
proto.SetDefaults(pack)
playerEx.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_GAMEBILLED), pack)
}
}
func (this *StateBilled) OnLeave(s *base.Scene) {
@ -532,11 +767,138 @@ func (this *StateBilled) OnTick(s *base.Scene) {
this.BaseState.OnTick(s)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneBilledTimeout {
if sceneEx.CanStart() {
s.ChangeSceneState(rule.ClawDollSceneStateStart)
} else {
s.ChangeSceneState(rule.ClawDollSceneStateWait)
s.ChangeSceneState(rule.ClawDollSceneWaitPayCoin)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneWaitPayCoin))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
return
}
}
}
//=====================================
// StateWaitPayCoin 等待下一局投币
//=====================================
type StateWaitPayCoin struct {
BaseState
}
func (this *StateWaitPayCoin) GetState() int {
return rule.ClawDollSceneWaitPayCoin
}
func (this *StateWaitPayCoin) CanChangeTo(s base.SceneState) bool {
switch s.GetState() {
case rule.ClawDollSceneStateStart:
return true
case rule.ClawDollSceneStateWait:
return true
}
return false
}
func (this *StateWaitPayCoin) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
logger.Logger.Trace("StatePlayGame OnPlayerOp-----SnId:", p.SnId, " opcode: ", opcode, " params:", params)
if this.BaseState.OnPlayerOp(s, p, opcode, params) {
return true
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
playerEx, ok := p.ExtraData.(*PlayerEx)
if !ok {
return false
}
switch opcode {
case rule.ClawDollPlayerOpPayCoin:
if sceneEx.playingSnid != playerEx.SnId {
logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----sceneEx.playingSnid:", sceneEx.playingSnid, " playerEx.SnId: ", playerEx.SnId)
return false
}
// 投币检测
if !playerEx.CanPayCoin() {
logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----CanPayCoin: false")
return false
}
sceneEx.OnPlayerSMPerateOp(p.SnId, int32(sceneEx.machineId), rule.ButtonPayCoin)
playerEx.ReStartGame()
s.ChangeSceneState(rule.ClawDollSceneStateStart)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateStart))
ClawdollBroadcastRoomState(s)
ClawdollSendPlayerInfo(s)
sceneEx.OnPlayerSCOp(p, opcode, clawdoll.OpResultCode_OPRC_Success, params)
case rule.ClawDollPlayerCancelPayCoin:
if sceneEx.playingSnid != playerEx.SnId {
logger.Logger.Trace("StateWaitPayCoin OnPlayerOp-----sceneEx.playingSnid:", sceneEx.playingSnid, " playerEx.SnId: ", playerEx.SnId)
return false
}
// 先设置时间
playingEx := sceneEx.GetPlayingEx()
if playingEx != nil {
playingEx.ReStartGame()
ClawdollSendPlayerInfo(s)
}
// 再重置scene数据
sceneEx.ReStartGame()
s.ChangeSceneState(rule.ClawDollSceneStateWait)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateWait))
ClawdollBroadcastRoomState(s)
ClawdollBroadcastPlayingInfo(s)
}
return false
}
func (this *StateWaitPayCoin) OnEnter(s *base.Scene) {
logger.Logger.Trace("(this *StateWaitPayCoin) OnEnter, sceneid=", s.GetSceneId())
this.BaseState.OnEnter(s)
}
func (this *StateWaitPayCoin) OnLeave(s *base.Scene) {
logger.Logger.Trace("(this *StateWaitPayCoin) OnLeave, sceneid=", s.GetSceneId())
this.BaseState.OnLeave(s)
}
func (this *StateWaitPayCoin) OnTick(s *base.Scene) {
this.BaseState.OnTick(s)
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollSceneWaitPayCoinimeout {
// 先设置时间
playingEx := sceneEx.GetPlayingEx()
if playingEx != nil {
playingEx.ReStartGame()
ClawdollSendPlayerInfo(s)
}
// 再重置scene数据
sceneEx.ReStartGame()
s.ChangeSceneState(rule.ClawDollSceneStateWait)
sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateWait))
ClawdollBroadcastRoomState(s)
ClawdollBroadcastPlayingInfo(s)
return
}
}
@ -567,6 +929,7 @@ func init() {
PolicyClawdollSingleton.RegisteSceneState(&StateStart{})
PolicyClawdollSingleton.RegisteSceneState(&PlayGame{})
PolicyClawdollSingleton.RegisteSceneState(&StateBilled{})
PolicyClawdollSingleton.RegisteSceneState(&StateWaitPayCoin{})
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
base.RegisteScenePolicy(common.GameId_Clawdoll, 0, PolicyClawdollSingleton)

View File

@ -0,0 +1,48 @@
package fortunedragon
import (
"mongo.games.com/game/protocol/fortunedragon"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/game/common"
"mongo.games.com/game/gamesrv/base"
)
type CSFortuneDragonOpPacketFactory struct {
}
type CSFortuneDragonOpHandler struct {
}
func (this *CSFortuneDragonOpPacketFactory) CreatePacket() interface{} {
pack := &fortunedragon.CSFortuneDragonOp{}
return pack
}
func (this *CSFortuneDragonOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if op, ok := data.(*fortunedragon.CSFortuneDragonOp); ok {
p := base.PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warn("CSFortuneDragonOpHandler p == nil")
return nil
}
scene := p.GetScene()
if scene == nil {
logger.Logger.Warn("CSFortuneDragonOpHandler p.scene == nil")
return nil
}
if !scene.HasPlayer(p) {
return nil
}
if scene.GetScenePolicy() != nil {
scene.GetScenePolicy().OnPlayerOp(scene, p, int(op.GetOpCode()), op.GetParams())
}
return nil
}
return nil
}
func init() {
//fortunedragon
common.RegisterHandler(int(fortunedragon.FortuneDragonPID_PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP), &CSFortuneDragonOpHandler{})
netlib.RegisterFactory(int(fortunedragon.FortuneDragonPID_PACKET_FORTUNEDRAGON_CSFORTUNEDRAGONOP), &CSFortuneDragonOpPacketFactory{})
}

View File

@ -0,0 +1,16 @@
package fortunedragon
import (
"mongo.games.com/game/gamesrv/base"
)
type FortuneDragonPlayerData struct {
*base.Player
leaveTime int32 //离开时间
}
func (p *FortuneDragonPlayerData) init() {
}
func (p *FortuneDragonPlayerData) Clear() {
}

View File

@ -0,0 +1,43 @@
package fortunedragon
import (
"mongo.games.com/game/gamesrv/base"
)
type FortuneDragonSceneData struct {
*base.Scene //场景
players map[int32]*FortuneDragonPlayerData //玩家信息
}
func NewFortuneDragonSceneData(s *base.Scene) *FortuneDragonSceneData {
sceneEx := &FortuneDragonSceneData{
Scene: s,
players: make(map[int32]*FortuneDragonPlayerData),
}
sceneEx.Init()
return sceneEx
}
func (s *FortuneDragonSceneData) Init() {
}
func (s *FortuneDragonSceneData) Clear() {
//应该是水池变一次就判断修改一次
//s.slotRateWeight = s.slotRateWeightTotal[0]
}
func (s *FortuneDragonSceneData) SceneDestroy(force bool) {
//销毁房间
s.Scene.Destroy(force)
}
func (s *FortuneDragonSceneData) delPlayer(SnId int32) {
if _, exist := s.players[SnId]; exist {
delete(s.players, SnId)
}
}
func (s *FortuneDragonSceneData) OnPlayerLeave(p *base.Player, reason int) {
if /*playerEx*/ _, ok := p.ExtraData.(*FortuneDragonPlayerData); ok {
}
s.delPlayer(p.SnId)
}

View File

@ -0,0 +1,363 @@
package fortunedragon
import (
"mongo.games.com/game/gamerule/fortunedragon"
"time"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/game/common"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/proto"
protocol "mongo.games.com/game/protocol/fortunedragon"
)
// ////////////////////////////////////////////////////////////
var ScenePolicyFortuneDragonSington = &ScenePolicyFortuneDragon{}
type ScenePolicyFortuneDragon struct {
base.BaseScenePolicy
states [fortunedragon.FortuneDragonStateMax]base.SceneState
}
// 创建场景扩展数据
func (this *ScenePolicyFortuneDragon) CreateSceneExData(s *base.Scene) interface{} {
sceneEx := NewFortuneDragonSceneData(s)
if sceneEx != nil {
if sceneEx.GetInit() {
s.SetExtraData(sceneEx)
}
}
return sceneEx
}
// 创建玩家扩展数据
func (this *ScenePolicyFortuneDragon) CreatePlayerExData(s *base.Scene, p *base.Player) interface{} {
playerEx := &FortuneDragonPlayerData{Player: p}
p.SetExtraData(playerEx)
return playerEx
}
// 场景开启事件
func (this *ScenePolicyFortuneDragon) OnStart(s *base.Scene) {
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnStart, sceneId=", s.GetSceneId())
sceneEx := NewFortuneDragonSceneData(s)
if sceneEx != nil {
if sceneEx.GetInit() {
s.SetExtraData(sceneEx)
s.ChangeSceneState(fortunedragon.FortuneDragonStateStart)
}
}
}
// 场景关闭事件
func (this *ScenePolicyFortuneDragon) OnStop(s *base.Scene) {
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnStop , sceneId=", s.GetSceneId())
}
// 场景心跳事件
func (this *ScenePolicyFortuneDragon) OnTick(s *base.Scene) {
if s == nil {
return
}
if s.GetSceneState() != nil {
s.GetSceneState().OnTick(s)
}
}
// 玩家进入事件
func (this *ScenePolicyFortuneDragon) OnPlayerEnter(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerEnter, sceneId=", s.GetSceneId(), " player=", p.Name)
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
playerEx := &FortuneDragonPlayerData{Player: p}
playerEx.init()
playerEx.Clear()
sceneEx.players[p.SnId] = playerEx
p.SetExtraData(playerEx)
FortuneDragonSendRoomInfo(s, sceneEx, playerEx)
s.FirePlayerEvent(p, base.PlayerEventEnter, nil)
}
}
// 玩家离开事件
func (this *ScenePolicyFortuneDragon) OnPlayerLeave(s *base.Scene, p *base.Player, reason int) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerLeave, sceneId=", s.GetSceneId(), " player=", p.SnId)
if sceneEx, ok := s.ExtraData.(*FortuneDragonSceneData); ok {
s.FirePlayerEvent(p, base.PlayerEventLeave, nil)
sceneEx.OnPlayerLeave(p, reason)
}
}
// 玩家掉线
func (this *ScenePolicyFortuneDragon) OnPlayerDropLine(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerDropLine, sceneId=", s.GetSceneId(), " player=", p.SnId)
s.FirePlayerEvent(p, base.PlayerEventDropLine, nil)
}
// 玩家重连
func (this *ScenePolicyFortuneDragon) OnPlayerRehold(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerRehold, sceneId=", s.GetSceneId(), " player=", p.SnId)
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok {
FortuneDragonSendRoomInfo(s, sceneEx, playerEx)
}
}
}
// 返回房间
func (this *ScenePolicyFortuneDragon) OnPlayerReturn(s *base.Scene, p *base.Player) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerReturn, GetSceneId()=", s.GetSceneId(), " player=", p.Name)
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok {
//if p.IsMarkFlag(base.PlayerState_Auto) {
// p.UnmarkFlag(base.PlayerState_Auto)
// p.SyncFlag()
//}
//发送房间信息给自己
FortuneDragonSendRoomInfo(s, sceneEx, playerEx)
s.FirePlayerEvent(p, base.PlayerEventReturn, nil)
}
}
}
func FortuneDragonSendRoomInfo(s *base.Scene, sceneEx *FortuneDragonSceneData, playerEx *FortuneDragonPlayerData) {
pack := FortuneDragonCreateRoomInfoPacket(s, sceneEx, playerEx)
logger.Logger.Trace("RoomInfo: ", pack)
playerEx.SendToClient(int(protocol.FortuneDragonPID_PACKET_FORTUNEDRAGON_SCFORTUNEDRAGONROOMINFO), pack)
}
func FortuneDragonCreateRoomInfoPacket(s *base.Scene, sceneEx *FortuneDragonSceneData, playerEx *FortuneDragonPlayerData) interface{} {
//房间信息
pack := &protocol.SCFortuneDragonRoomInfo{
RoomId: s.SceneId,
GameId: s.GameId,
RoomMode: s.SceneMode,
SceneType: s.GetSceneType(),
Params: common.CopySliceInt64ToInt32(s.Params),
NumOfGames: proto.Int(sceneEx.NumOfGames),
State: proto.Int(s.SceneState.GetState()),
ParamsEx: s.GetDBGameFree().OtherIntParams,
GameFreeId: proto.Int32(s.GetDBGameFree().Id),
//BetLimit: s.GetDBGameFree().BetLimit,
}
//自己的信息
if playerEx != nil {
pd := &protocol.FortuneDragonPlayerData{
SnId: proto.Int32(playerEx.SnId),
Name: proto.String(playerEx.Name),
Head: proto.Int32(playerEx.Head),
Sex: proto.Int32(playerEx.Sex),
Coin: proto.Int64(playerEx.Coin),
Pos: proto.Int(playerEx.Pos),
Flag: proto.Int(playerEx.GetFlag()),
City: proto.String(playerEx.City),
HeadOutLine: proto.Int32(playerEx.HeadOutLine),
VIP: proto.Int32(playerEx.VIP),
}
pack.Player = pd
}
proto.SetDefaults(pack)
return pack
}
func (this *ScenePolicyFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
if s == nil || p == nil {
return false
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerOp, sceneId=", s.GetSceneId(), " player=", p.SnId, " opcode=", opcode, " params=", params)
if s.GetSceneState() != nil {
if s.GetSceneState().OnPlayerOp(s, p, opcode, params) {
p.SetLastOPTimer(time.Now())
return true
}
return false
}
return true
}
func (this *ScenePolicyFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
if s == nil || p == nil {
return
}
logger.Logger.Trace("(this *ScenePolicyFortuneDragon) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " eventcode=", evtcode, " params=", params)
if s.GetSceneState() != nil {
s.GetSceneState().OnPlayerEvent(s, p, evtcode, params)
}
}
// 当前状态能否换桌
func (this *ScenePolicyFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
if s == nil || p == nil {
return false
}
if s.GetSceneState() != nil {
return s.GetSceneState().CanChangeCoinScene(s, p)
}
return false
}
// 状态基类
type SceneBaseStateFortuneDragon struct {
}
func (this *SceneBaseStateFortuneDragon) GetTimeout(s *base.Scene) int {
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
return int(time.Now().Sub(sceneEx.GetStateStartTime()) / time.Second)
}
return 0
}
func (this *SceneBaseStateFortuneDragon) CanChangeTo(s base.SceneState) bool {
return true
}
// 当前状态能否换桌
func (this *SceneBaseStateFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
return true
}
func (this *SceneBaseStateFortuneDragon) OnEnter(s *base.Scene) {
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
sceneEx.SetStateStartTime(time.Now())
}
}
func (this *SceneBaseStateFortuneDragon) OnLeave(s *base.Scene) {}
func (this *SceneBaseStateFortuneDragon) OnTick(s *base.Scene) {
if time.Now().Sub(s.GameStartTime) > time.Second*3 {
if sceneEx, ok := s.ExtraData.(*FortuneDragonSceneData); ok {
for _, p := range sceneEx.players {
if p.IsOnLine() {
p.leaveTime = 0
continue
}
p.leaveTime++
if p.leaveTime < 60*2 {
continue
}
//踢出玩家
sceneEx.PlayerLeave(p.Player, common.PlayerLeaveReason_LongTimeNoOp, true)
}
}
s.GameStartTime = time.Now()
}
}
func (this *SceneBaseStateFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
return false
}
func (this *SceneBaseStateFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
}
// ////////////////////////////////////////////////////////////
// 开始状态
// ////////////////////////////////////////////////////////////
type SceneStateStartFortuneDragon struct {
SceneBaseStateFortuneDragon
}
func (this *SceneStateStartFortuneDragon) GetState() int {
return fortunedragon.FortuneDragonStateStart
}
func (this *SceneStateStartFortuneDragon) CanChangeTo(s base.SceneState) bool {
return false
}
// 当前状态能否换桌
func (this *SceneStateStartFortuneDragon) CanChangeCoinScene(s *base.Scene, p *base.Player) bool {
if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok {
if playerEx.IsOnLine() {
return false
}
}
return true
}
func (this *SceneStateStartFortuneDragon) GetTimeout(s *base.Scene) int {
return 0
}
func (this *SceneStateStartFortuneDragon) OnEnter(s *base.Scene) {
this.SceneBaseStateFortuneDragon.OnEnter(s)
if sceneEx, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
sceneEx.SetGameNowTime(time.Now())
}
}
// 状态离开时
func (this *SceneStateStartFortuneDragon) OnLeave(s *base.Scene) {
this.SceneBaseStateFortuneDragon.OnLeave(s)
logger.Logger.Tracef("(this *SceneStateStartFortuneDragon) OnLeave, sceneid=%v", s.GetSceneId())
}
// 玩家操作
func (this *SceneStateStartFortuneDragon) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, params []int64) bool {
logger.Logger.Tracef("(this *SceneStateStartFortuneDragon) OnPlayerOp, sceneid=%v params=%v", s.GetSceneId(), params)
if this.SceneBaseStateFortuneDragon.OnPlayerOp(s, p, opcode, params) {
return true
}
if _, ok := s.GetExtraData().(*FortuneDragonSceneData); ok {
if playerEx, ok := p.GetExtraData().(*FortuneDragonPlayerData); ok {
switch opcode {
case fortunedragon.FortuneDragonPlayerOpStart:
playerEx.Clear()
}
}
}
return true
}
// 玩家事件
func (this *SceneStateStartFortuneDragon) OnPlayerEvent(s *base.Scene, p *base.Player, evtcode int, params []int64) {
logger.Logger.Trace("(this *SceneStateStartFortuneDragon) OnPlayerEvent, sceneId=", s.GetSceneId(), " player=", p.SnId, " evtcode=", evtcode)
this.SceneBaseStateFortuneDragon.OnPlayerEvent(s, p, evtcode, params)
}
func (this *SceneStateStartFortuneDragon) OnTick(s *base.Scene) {
this.SceneBaseStateFortuneDragon.OnTick(s)
}
// //////////////////////////////////////////////////////////////////////////////
func (this *ScenePolicyFortuneDragon) RegisteSceneState(state base.SceneState) {
if state == nil {
return
}
stateid := state.GetState()
if stateid < 0 || stateid >= fortunedragon.FortuneDragonStateMax {
return
}
this.states[stateid] = state
}
func (this *ScenePolicyFortuneDragon) GetSceneState(s *base.Scene, stateid int) base.SceneState {
if stateid >= 0 && stateid < fortunedragon.FortuneDragonStateMax {
return this.states[stateid]
}
return nil
}
func init() {
//主状态
ScenePolicyFortuneDragonSington.RegisteSceneState(&SceneStateStartFortuneDragon{})
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
base.RegisteScenePolicy(common.GameId_FortuneDragon, fortunedragon.RoomMode_Classic, ScenePolicyFortuneDragonSington)
return nil
})
}

View File

@ -19,6 +19,7 @@ import (
// game
_ "mongo.games.com/game/gamesrv/chess"
_ "mongo.games.com/game/gamesrv/clawdoll"
_ "mongo.games.com/game/gamesrv/fishing"
_ "mongo.games.com/game/gamesrv/smallrocket"
_ "mongo.games.com/game/gamesrv/thirteen"

View File

@ -0,0 +1,382 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.CashManiaBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.6,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.9,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 1,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 3,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 9,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 10,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 30,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 90,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.CashManiaBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.CashManiaBetBetLine = {
[0] = {
index = 0,
bet_line = 10,
},
}
_.CashManiaBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.CashManiaFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line1Form5X5TypeA",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 2,
node_type = "FreeSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line1Form5X5TypeA",
symbol = "Default",
first_init_method = 3,
other_init_method = 3,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.CashManiaReelBaseSpinRange = {
{5, 5, 5},
}
_.CashManiaReelBaseSpinReel = {
{1, 200, 2, 200, 3, 200, 4, 200, 5, 200},
{6, 200, 7, 200, 8, 200, 9, 200, 10, 200, 11, 200, 12, 200, 13, 200, 14, 200, 15, 200, 16, 200, 17, 200, 18, 200, 19, 200},
{1, 200, 2, 200, 3, 200, 4, 200, 5, 200},
}
_.CashManiaSymbol = {
[1] = {
id = 1,
name = "100倍",
is_wild = false,
group = {1},
pay_rate = {0, 0, 100},
client_order = 1,
client_dsc = "",
},
[2] = {
id = 2,
name = "5倍",
is_wild = false,
group = {2},
pay_rate = {0, 0, 50},
client_order = 2,
client_dsc = "",
},
[3] = {
id = 3,
name = "1倍",
is_wild = false,
group = {3},
pay_rate = {0, 0, 10},
client_order = 3,
client_dsc = "",
},
[4] = {
id = 4,
name = "0.5倍",
is_wild = false,
group = {4},
pay_rate = {0, 0, 5},
client_order = 4,
client_dsc = "",
},
[5] = {
id = 5,
name = "0.1倍",
is_wild = false,
group = {5},
pay_rate = {0, 0, 1},
client_order = 5,
client_dsc = "",
},
[6] = {
id = 6,
name = "5FreeSpin",
is_wild = true,
group = {6},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[7] = {
id = 7,
name = "10FreeSpin",
is_wild = true,
group = {7},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[8] = {
id = 8,
name = "20FreeSpin",
is_wild = true,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[9] = {
id = 9,
name = "wildx1",
is_wild = true,
group = {9},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[10] = {
id = 10,
name = "wildx2",
is_wild = true,
group = {10},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[11] = {
id = 11,
name = "wildx3",
is_wild = true,
group = {11},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[12] = {
id = 12,
name = "wildx5",
is_wild = true,
group = {12},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[13] = {
id = 13,
name = "wildx10",
is_wild = true,
group = {13},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[14] = {
id = 14,
name = "wildx15",
is_wild = true,
group = {14},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[15] = {
id = 15,
name = "wildx20",
is_wild = true,
group = {15},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[16] = {
id = 16,
name = "wildx30",
is_wild = true,
group = {16},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[17] = {
id = 17,
name = "wildx40",
is_wild = true,
group = {17},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[18] = {
id = 18,
name = "wildx50",
is_wild = true,
group = {18},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[19] = {
id = 19,
name = "wildx100",
is_wild = true,
group = {19},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[200] = {
id = 200,
name = "empty",
is_wild = false,
group = {200},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.CashManiaSymbolBetRatio = {
{
bet_ratio = 0.1,
},
}
return _

View File

@ -0,0 +1,334 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.FortuneDragonBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.15,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.45,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 0.5,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 0.75,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 2.5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 4.5,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 7.5,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 22.5,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.FortuneDragonBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.FortuneDragonBetBetLine = {
[0] = {
index = 0,
bet_line = 5,
},
}
_.FortuneDragonBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.FortuneDragonFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 3,
node_type = "FreeSpin",
id = 1,
seq_id = 1,
reel = "FreeSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 2,
other_init_method = 2,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 1,
node_type = "SureWinBaseSpin",
id = 1,
seq_id = 1,
reel = "SureWinBaseSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.FortuneDragonReelBaseSpinRange = {
{3, 3, 3},
}
_.FortuneDragonReelBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2},
{7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2},
}
_.FortuneDragonReelFreeSpinRange = {
{3, 3, 3},
}
_.FortuneDragonReelFreeSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 3, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 2, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 1, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 3, 5, 3, 5, 6, 7, 2, 5, 6, 5, 3, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 1, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 2, 4, 6, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 1, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 2, 6, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 3, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 3, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 3, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 3, 4, 7, 3, 6, 3, 4, 7, 7, 6, 2, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 1, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 1, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 1, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2},
{7, 5, 5, 4, 7, 3, 7, 6, 4, 2, 4, 3, 3, 3, 6, 1, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 3, 5, 5, 7, 2, 3, 4, 7, 6, 3, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 3, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 1, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 1, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 2, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2},
}
_.FortuneDragonReelSureWinBaseSpinRange = {
{3, 3, 3},
}
_.FortuneDragonReelSureWinBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 1, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 2, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 1, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 1, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 3, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 4, 2, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 2, 7, 7, 6, 7, 4, 6, 1, 1, 1, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 2, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 3, 4, 5, 7, 7, 2, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 6, 6, 5, 7, 6, 4, 5, 4, 6, 1, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 3, 2, 6, 5, 2, 6, 6, 3, 4, 6, 4, 2, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 5, 3, 6, 4, 7, 6, 1, 3, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 1, 7, 2, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 2, 5, 5, 7, 2, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 2, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 2, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 3, 7, 6, 5, 4, 5, 4, 2, 7, 7, 6, 2, 7, 3, 7, 5, 2, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 3, 6, 7, 7, 3, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 1, 3, 7, 2, 6, 7, 3, 5, 7, 1, 5, 7, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 2, 7, 6, 3, 3, 2, 4, 4, 7, 2},
{7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 1, 3, 3, 3, 6, 1, 7, 6, 3, 5, 4, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 2, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 2, 7, 3, 4, 5, 5, 5, 6, 3, 1, 7, 7, 2, 6, 5, 4, 6, 6, 3, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 4, 3, 2, 7, 5, 6, 6, 6, 5, 3, 5, 2, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 1, 4, 5, 7, 7, 7, 3, 6, 1, 5, 3, 7, 4, 3, 7, 5, 2, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 1, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 3, 7, 5, 2, 6, 6, 5, 2, 7, 4, 4, 4, 7, 2, 6, 6, 3, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 2, 7, 6, 5, 5, 5, 2, 2, 5, 7, 2, 7, 3, 4, 5, 3, 7, 7, 2, 5, 5, 5, 1, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 3, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 3, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 3, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2},
}
_.FortuneDragonSymbol = {
[1] = {
id = 1,
name = "Wild",
is_wild = true,
group = {1},
pay_rate = {0, 0, 100},
client_order = 0,
client_dsc = "",
},
[2] = {
id = 2,
name = "元宝",
is_wild = false,
group = {2},
pay_rate = {0, 0, 50},
client_order = 0,
client_dsc = "",
},
[3] = {
id = 3,
name = "红包",
is_wild = false,
group = {3},
pay_rate = {0, 0, 25},
client_order = 0,
client_dsc = "",
},
[4] = {
id = 4,
name = "灯笼",
is_wild = false,
group = {4},
pay_rate = {0, 0, 10},
client_order = 0,
client_dsc = "",
},
[5] = {
id = 5,
name = "福炮",
is_wild = false,
group = {5},
pay_rate = {0, 0, 5},
client_order = 0,
client_dsc = "",
},
[6] = {
id = 6,
name = "花结",
is_wild = false,
group = {6},
pay_rate = {0, 0, 3},
client_order = 0,
client_dsc = "",
},
[7] = {
id = 7,
name = "铜钱",
is_wild = false,
group = {7},
pay_rate = {0, 0, 2},
client_order = 0,
client_dsc = "",
},
[8] = {
id = 8,
name = "X2",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[9] = {
id = 9,
name = "X5",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[10] = {
id = 10,
name = "X10",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[200] = {
id = 200,
name = "Empty",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.FortuneDragonSymbolBetRatio = {
{
bet_ratio = 1,
},
}
return _

View File

@ -0,0 +1,284 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.FortuneMouseBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.15,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.45,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 0.5,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 0.75,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 2.5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 4.5,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 7.5,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 22.5,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.FortuneMouseBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.FortuneMouseBetBetLine = {
[0] = {
index = 0,
bet_line = 5,
},
}
_.FortuneMouseBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.FortuneMouseFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 3,
node_type = "ReSpin",
id = 1,
seq_id = 1,
reel = "ReSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 3,
other_init_method = 3,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.FortuneMouseReelBaseSpinRange = {
{3, 3, 3},
}
_.FortuneMouseReelBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 5, 3, 4, 2, 7, 7, 7, 6, 5, 5, 5, 4, 6, 5, 5, 5, 4, 7, 7, 7, 4, 7, 6, 5, 3, 3, 3, 5, 7, 6, 5, 7, 6, 5, 7, 7, 7, 6, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 1, 7, 7, 3, 6, 4, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 1, 5, 7, 6, 6, 7, 7, 6, 3, 5, 1, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 1, 3, 7, 7, 7, 4, 5, 7, 6, 4, 5, 4, 6, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 1, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 1, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 5, 4, 1, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 7, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 4, 4, 6, 6, 6, 3, 4, 7, 1, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 5, 7, 6, 6, 2, 7, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 6, 6, 7, 4, 6, 6, 6, 5, 4, 7, 6, 4, 7, 3, 6, 7, 6, 7, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 1, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 6, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 2, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 6, 6, 6, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 7, 7, 7, 6, 5, 7, 3, 6, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 1, 6, 5, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 5, 7, 6, 1, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2},
{7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 6, 6, 7, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 1, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 1, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 1, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 1, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 7, 4, 5, 7, 7, 7, 3, 6, 7, 5, 6, 7, 4, 3, 7, 5, 6, 6, 6, 7, 1, 5, 6, 7, 4, 6, 5, 6, 5, 7, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 1, 5, 4, 3, 7, 3, 7, 5, 6, 5, 4, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 1, 7, 2, 1, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2},
}
_.FortuneMouseReelReSpinRange = {
{3, 3, 3},
}
_.FortuneMouseReelReSpinReel = {
{1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8},
{1, 1, 1},
{1, 1, 1, 2, 2, 2, 2, 7, 7, 7, 7, 8, 8, 8, 6, 6, 6, 6, 3, 3, 3, 3, 8, 8, 8, 5, 5, 5, 5, 4, 4, 4, 4, 8, 8, 8},
}
_.FortuneMouseSymbol = {
[1] = {
id = 1,
name = "wild",
is_wild = true,
group = {1},
pay_rate = {0, 0, 300},
client_order = 1,
client_dsc = "",
},
[2] = {
id = 2,
name = "倒福",
is_wild = false,
group = {2},
pay_rate = {0, 0, 100},
client_order = 2,
client_dsc = "",
},
[3] = {
id = 3,
name = "红包",
is_wild = false,
group = {3},
pay_rate = {0, 0, 50},
client_order = 3,
client_dsc = "",
},
[4] = {
id = 4,
name = "钱袋",
is_wild = false,
group = {4},
pay_rate = {0, 0, 30},
client_order = 4,
client_dsc = "",
},
[5] = {
id = 5,
name = "爆竹",
is_wild = false,
group = {5},
pay_rate = {0, 0, 15},
client_order = 5,
client_dsc = "",
},
[6] = {
id = 6,
name = "橘子",
is_wild = false,
group = {6},
pay_rate = {0, 0, 5},
client_order = 6,
client_dsc = "",
},
[7] = {
id = 7,
name = "花生",
is_wild = false,
group = {7},
pay_rate = {0, 0, 3},
client_order = 7,
client_dsc = "",
},
[8] = {
id = 8,
name = "SuperStack",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.FortuneMouseSymbolBetRatio = {
{
bet_ratio = 1,
},
}
return _

View File

@ -0,0 +1,293 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.FortuneOxBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.6,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.9,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 1,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 3,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 9,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 10,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 30,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 90,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.FortuneOxBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.FortuneOxBetBetLine = {
[0] = {
index = 0,
bet_line = 10,
},
}
_.FortuneOxBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.FortuneOxFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line10Form343TypeA",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 3,
node_type = "ReSpin",
id = 1,
seq_id = 1,
reel = "ReSpin",
matrix = "Line10Form343TypeA",
symbol = "Default",
first_init_method = 3,
other_init_method = 3,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.FortuneOxReelBaseSpinRange = {
{3, 4, 3},
}
_.FortuneOxReelBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 1, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 6, 6, 6, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 2, 5, 7, 6, 6, 7, 7, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 7, 7, 7, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 7, 7, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 7, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 6, 6, 6, 6, 6, 7, 7, 7, 7, 5, 4, 7, 5, 7, 2, 6, 7, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 7, 7, 7, 7, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 1, 2, 3, 4, 4, 7, 5, 5, 5, 5, 6, 6, 6, 6, 4, 7, 6, 1, 1, 7, 4, 5, 7, 6, 5, 4, 6, 7, 4, 7, 3, 5, 6, 7, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 7, 7, 6, 6, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 6, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 1, 1, 1, 5, 3, 7, 7, 7, 7, 7, 6, 4, 7, 6, 4, 1, 7, 5, 3, 5, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 1, 1, 1, 6, 5, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 7, 7, 7, 7, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 1, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 7, 7, 7, 7, 7},
{5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 1, 7, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 7, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 2, 2, 6, 6, 6, 3, 7, 5, 6, 6, 6, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 7, 7, 7, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 6, 6, 6, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 7, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 6, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7},
}
_.FortuneOxReelReSpinRange = {
{3, 4, 3},
}
_.FortuneOxReelReSpinReel = {
{9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8},
{9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8},
{9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8},
}
_.FortuneOxSymbol = {
[1] = {
id = 1,
name = "wild",
is_wild = true,
group = {1},
pay_rate = {0, 0, 200},
client_order = 1,
client_dsc = "",
},
[2] = {
id = 2,
name = "元宝",
is_wild = false,
group = {2},
pay_rate = {0, 0, 100},
client_order = 2,
client_dsc = "",
},
[3] = {
id = 3,
name = "金锦盒",
is_wild = false,
group = {3},
pay_rate = {0, 0, 50},
client_order = 3,
client_dsc = "",
},
[4] = {
id = 4,
name = "钱袋",
is_wild = false,
group = {4},
pay_rate = {0, 0, 20},
client_order = 4,
client_dsc = "",
},
[5] = {
id = 5,
name = "红包",
is_wild = false,
group = {5},
pay_rate = {0, 0, 10},
client_order = 5,
client_dsc = "",
},
[6] = {
id = 6,
name = "橘子",
is_wild = false,
group = {6},
pay_rate = {0, 0, 5},
client_order = 6,
client_dsc = "",
},
[7] = {
id = 7,
name = "炮竹",
is_wild = false,
group = {7},
pay_rate = {0, 0, 3},
client_order = 7,
client_dsc = "",
},
[8] = {
id = 8,
name = "SuperStack1",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[9] = {
id = 9,
name = "SuperStack2",
is_wild = false,
group = {9},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.FortuneOxSymbolBetRatio = {
{
bet_ratio = 1,
},
}
return _

View File

@ -0,0 +1,346 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.FortuneRabbitBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.6,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.9,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 1,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 3,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 9,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 10,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 30,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 90,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.FortuneRabbitBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.FortuneRabbitBetBetLine = {
[0] = {
index = 0,
bet_line = 10,
},
}
_.FortuneRabbitBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.FortuneRabbitCashPrizeWeight = {
{
id = 1,
prize_value = 0.5,
weight = 144,
},
{
id = 2,
prize_value = 1,
weight = 25,
},
{
id = 3,
prize_value = 2,
weight = 25,
},
{
id = 4,
prize_value = 5,
weight = 100,
},
{
id = 5,
prize_value = 10,
weight = 50,
},
{
id = 6,
prize_value = 20,
weight = 25,
},
{
id = 7,
prize_value = 30,
weight = 15,
},
{
id = 8,
prize_value = 50,
weight = 10,
},
{
id = 9,
prize_value = 100,
weight = 5,
},
{
id = 10,
prize_value = 500,
weight = 1,
},
}
_.FortuneRabbitFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line10Form343TypeA",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 3,
node_type = "FreeSpin",
id = 1,
seq_id = 1,
reel = "FreeSpin",
matrix = "Line10Form343TypeA",
symbol = "Default",
first_init_method = 3,
other_init_method = 3,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.FortuneRabbitReelBaseSpinRange = {
{3, 4, 3},
}
_.FortuneRabbitReelBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 8, 8, 8, 6, 2, 4, 5, 6, 7, 6, 6, 6, 2, 2, 2, 1, 5, 4, 4, 4, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 5, 6, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 2, 6, 5, 7, 8, 8, 8, 2, 2, 2, 5, 6, 2, 2, 2, 5, 7, 6, 6, 4, 2, 7, 7, 7, 6, 5, 7, 6, 1, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 1, 6, 6, 6, 5, 7, 5, 6, 7, 2, 5, 6, 5, 3, 3, 3, 6, 2, 5, 7, 6, 8, 8, 8, 6, 7, 5, 2, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 2, 2, 2, 7, 8, 8, 8, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 7, 7, 5, 5, 5, 7, 6, 1, 2, 4, 6, 5, 7, 2, 2, 2, 7, 4, 7, 5, 6, 8, 8, 8, 5, 6, 7, 4, 6, 1, 5, 5, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 4, 4, 4, 7, 7, 7, 3, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 6, 5, 7, 6, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 2, 5, 5, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 8, 8, 8, 2, 7, 7, 2, 2, 6, 5, 2, 6, 4, 7, 6, 3, 5, 4, 6, 6, 6, 3, 4, 7, 2, 5, 6, 7, 2, 4, 5, 6, 6, 6, 8, 8, 8, 7, 5, 4, 1, 5, 7, 2, 6, 7, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 6, 5, 7, 4, 6, 2, 7, 5, 6, 4, 4, 4, 4, 3, 5, 2, 3, 4, 4, 7, 5, 5, 5, 5, 8, 8, 8, 8, 4, 7, 6, 5, 1, 7, 4, 5, 7, 6, 5, 4, 8, 8, 8, 8, 3, 5, 6, 4, 1, 5, 7, 3, 4, 6, 7, 2, 2, 2, 2, 6, 7, 6, 7, 3, 4, 6, 5, 1, 7, 6, 6, 4, 5, 8, 8, 5, 7, 6, 4, 4, 4, 4, 3, 6, 1, 3, 5, 4, 6, 7, 2, 3, 4, 5, 5, 5, 5, 3, 6, 7, 2, 3, 7, 6, 5, 4, 7, 6, 4, 3, 3, 3, 3, 4, 7, 7, 5, 1, 6, 5, 7, 4, 6, 3, 2, 5, 5, 4, 7, 7, 5, 3, 4, 8, 8, 5, 6, 4, 7, 5, 5, 5, 5, 8, 8, 7, 6, 3, 1, 1, 1, 5, 3, 4, 6, 7, 5, 3, 6, 4, 7, 6, 4, 1, 7, 5, 8, 8, 5, 5, 5, 1, 7, 4, 6, 7, 4, 6, 7, 4, 6, 3, 7, 5, 6, 3, 5, 6, 4, 7, 5, 6, 4, 5, 7, 7, 7, 7, 1, 2, 2, 3, 3, 7, 8, 8, 8, 8, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 1, 3, 4, 7, 6, 6, 6, 6, 7, 1, 6, 5, 7, 3, 5, 6, 7, 7, 3, 6, 7, 5, 5, 8, 8, 8, 8, 7, 6, 5, 5, 5, 5, 1, 1, 1, 1, 2, 4, 6, 3, 5, 8, 8, 8, 8, 6, 5, 3, 4, 2, 6, 6, 6, 6, 5, 1, 7, 7, 7, 7, 6, 3, 7, 5, 4, 4, 7, 6, 5, 5, 5, 5, 7},
{5, 5, 5, 6, 7, 3, 6, 4, 4, 4, 3, 3, 3, 4, 7, 1, 6, 5, 5, 5, 6, 7, 5, 4, 3, 6, 7, 5, 4, 3, 8, 8, 8, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 1, 1, 1, 3, 7, 5, 3, 7, 6, 4, 7, 6, 3, 4, 6, 5, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 6, 6, 6, 8, 8, 8, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 7, 3, 6, 4, 7, 2, 4, 3, 6, 6, 6, 3, 7, 5, 8, 8, 8, 3, 7, 5, 3, 7, 6, 4, 3, 6, 7, 4, 6, 7, 3, 2, 7, 7, 7, 6, 3, 3, 3, 5, 8, 8, 8, 3, 6, 3, 1, 1, 7, 6, 3, 7, 5, 2, 2, 2, 7, 3, 5, 6, 7, 4, 6, 6, 6, 5, 3, 2, 7, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 3, 7, 4, 4, 4, 7, 6, 6, 6, 8, 8, 8, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 8, 8, 8, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 8, 8, 8, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 4, 4, 4, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 3, 3, 3, 5, 7, 3, 5, 7, 6, 5, 7, 7, 7, 7, 6, 6, 3, 7, 4, 6, 2, 3, 5, 7, 2, 1, 5, 7, 6, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 7, 4, 2, 7, 7, 7, 6, 6, 6, 7, 7, 7},
}
_.FortuneRabbitReelFreeSpinRange = {
{3, 4, 3},
}
_.FortuneRabbitReelFreeSpinReel = {
{200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200},
{200, 200, 200, 8, 8, 8, 8, 200, 200, 200, 200, 200},
{200, 200, 200, 200, 8, 8, 8, 200, 200, 200, 200, 200},
}
_.FortuneRabbitSymbol = {
[1] = {
id = 1,
name = "wild",
is_wild = true,
group = {1},
pay_rate = {0, 0, 200},
client_order = 1,
client_dsc = "",
},
[2] = {
id = 2,
name = "元宝",
is_wild = false,
group = {2},
pay_rate = {0, 0, 100},
client_order = 2,
client_dsc = "",
},
[3] = {
id = 3,
name = "钱袋",
is_wild = false,
group = {3},
pay_rate = {0, 0, 50},
client_order = 3,
client_dsc = "",
},
[4] = {
id = 4,
name = "红包",
is_wild = false,
group = {4},
pay_rate = {0, 0, 10},
client_order = 4,
client_dsc = "",
},
[5] = {
id = 5,
name = "铜币",
is_wild = false,
group = {5},
pay_rate = {0, 0, 5},
client_order = 5,
client_dsc = "",
},
[6] = {
id = 6,
name = "爆竹",
is_wild = false,
group = {6},
pay_rate = {0, 0, 3},
client_order = 6,
client_dsc = "",
},
[7] = {
id = 7,
name = "胡萝卜",
is_wild = false,
group = {7},
pay_rate = {0, 0, 2},
client_order = 7,
client_dsc = "",
},
[8] = {
id = 8,
name = "Cash",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[200] = {
id = 200,
name = "Empty",
is_wild = false,
group = {200},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.FortuneRabbitSymbolBetRatio = {
{
bet_ratio = 1,
},
}
return _

View File

@ -0,0 +1,293 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.FortuneTigerBetBetChangeList = {
[0] = {
index = 0,
bet_change_list = 0.15,
bet_size_index = 0,
bet_level_index = 0,
},
[1] = {
index = 1,
bet_change_list = 0.3,
bet_size_index = 0,
bet_level_index = 1,
},
[2] = {
index = 2,
bet_change_list = 0.45,
bet_size_index = 0,
bet_level_index = 2,
},
[3] = {
index = 3,
bet_change_list = 0.5,
bet_size_index = 1,
bet_level_index = 0,
},
[4] = {
index = 4,
bet_change_list = 0.75,
bet_size_index = 0,
bet_level_index = 4,
},
[5] = {
index = 5,
bet_change_list = 1.5,
bet_size_index = 0,
bet_level_index = 9,
},
[6] = {
index = 6,
bet_change_list = 2.5,
bet_size_index = 1,
bet_level_index = 4,
},
[7] = {
index = 7,
bet_change_list = 4.5,
bet_size_index = 3,
bet_level_index = 0,
},
[8] = {
index = 8,
bet_change_list = 5,
bet_size_index = 1,
bet_level_index = 9,
},
[9] = {
index = 9,
bet_change_list = 7.5,
bet_size_index = 2,
bet_level_index = 4,
},
[10] = {
index = 10,
bet_change_list = 15,
bet_size_index = 2,
bet_level_index = 9,
},
[11] = {
index = 11,
bet_change_list = 22.5,
bet_size_index = 3,
bet_level_index = 4,
},
[12] = {
index = 12,
bet_change_list = 45,
bet_size_index = 3,
bet_level_index = 9,
},
}
_.FortuneTigerBetBetLevel = {
[0] = {
index = 0,
bet_level = 1,
},
[1] = {
index = 1,
bet_level = 2,
},
[2] = {
index = 2,
bet_level = 3,
},
[3] = {
index = 3,
bet_level = 4,
},
[4] = {
index = 4,
bet_level = 5,
},
[5] = {
index = 5,
bet_level = 6,
},
[6] = {
index = 6,
bet_level = 7,
},
[7] = {
index = 7,
bet_level = 8,
},
[8] = {
index = 8,
bet_level = 9,
},
[9] = {
index = 9,
bet_level = 10,
},
}
_.FortuneTigerBetBetLine = {
[0] = {
index = 0,
bet_line = 5,
},
}
_.FortuneTigerBetBetSize = {
[0] = {
index = 0,
bet_size = 300,
},
[1] = {
index = 1,
bet_size = 1000,
},
[2] = {
index = 2,
bet_size = 3000,
},
[3] = {
index = 3,
bet_size = 9000,
},
}
_.FortuneTigerFormation = {
{
spin_type = 1,
node_type = "BaseSpin",
id = 1,
seq_id = 1,
reel = "BaseSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 2,
other_init_method = 4,
first_init_symbols = {},
other_init_symbols = {},
},
{
spin_type = 3,
node_type = "ReSpin",
id = 1,
seq_id = 1,
reel = "ReSpin",
matrix = "Line5Form3X3TypeB",
symbol = "Default",
first_init_method = 3,
other_init_method = 3,
first_init_symbols = {},
other_init_symbols = {},
},
}
_.FortuneTigerReelBaseSpinRange = {
{3, 3, 3},
}
_.FortuneTigerReelBaseSpinReel = {
{3, 7, 2, 2, 2, 3, 5, 4, 7, 5, 5, 5, 6, 2, 4, 7, 6, 6, 6, 4, 3, 4, 0, 3, 7, 7, 6, 5, 7, 5, 4, 6, 4, 4, 3, 4, 7, 7, 7, 4, 7, 4, 7, 3, 3, 3, 5, 2, 6, 4, 4, 4, 5, 7, 7, 7, 2, 5, 7, 4, 3, 6, 5, 7, 6, 3, 6, 6, 2, 3, 5, 6, 3, 2, 2, 5, 7, 6, 6, 4, 0, 7, 7, 3, 6, 4, 7, 6, 0, 5, 5, 2, 6, 6, 2, 5, 5, 7, 7, 0, 4, 4, 4, 5, 3, 5, 6, 7, 2, 5, 6, 5, 7, 7, 7, 6, 0, 5, 7, 6, 6, 7, 7, 6, 3, 5, 0, 6, 7, 7, 5, 3, 6, 7, 7, 6, 5, 5, 0, 3, 7, 7, 7, 4, 5, 4, 4, 4, 6, 4, 4, 7, 4, 2, 6, 3, 5, 7, 5, 5, 5, 6, 0, 2, 4, 6, 5, 3, 3, 3, 2, 7, 4, 7, 6, 7, 7, 7, 6, 7, 4, 6, 0, 5, 6, 6, 6, 7, 4, 5, 2, 3, 7, 5, 7, 6, 7, 7, 3, 3, 7, 5, 7, 4, 5, 5, 5, 2, 7, 7, 7, 4, 5, 7, 7, 5, 5, 7, 4, 5, 6, 7, 6, 4, 4, 0, 6, 6, 5, 7, 6, 4, 5, 4, 6, 7, 4, 7, 3, 6, 5, 7, 7, 6, 2, 7, 3, 2, 2, 6, 5, 2, 6, 6, 6, 4, 6, 4, 6, 6, 6, 3, 4, 7, 0, 5, 6, 7, 2, 6, 7, 6, 6, 3, 6, 7, 6, 3, 5, 4, 7, 5, 7, 2, 6, 3, 5, 5, 5, 6},
{5, 6, 3, 4, 6, 4, 5, 7, 5, 6, 2, 2, 5, 4, 6, 5, 4, 4, 4, 3, 5, 2, 6, 4, 5, 7, 4, 5, 5, 5, 7, 6, 6, 6, 4, 7, 6, 0, 0, 7, 4, 5, 6, 6, 5, 4, 2, 2, 4, 7, 3, 6, 7, 6, 0, 7, 7, 3, 7, 6, 7, 7, 2, 2, 2, 7, 7, 6, 6, 3, 6, 4, 5, 7, 6, 6, 4, 5, 7, 2, 5, 7, 6, 4, 4, 4, 3, 6, 0, 3, 5, 4, 6, 7, 2, 3, 4, 6, 6, 6, 7, 3, 6, 7, 2, 3, 7, 6, 5, 4, 6, 6, 4, 7, 3, 3, 3, 4, 7, 7, 6, 0, 5, 5, 7, 7, 6, 6, 2, 5, 5, 4, 7, 7, 5, 3, 4, 2, 6, 5, 6, 4, 7, 5, 5, 5, 7, 7, 6, 7, 6, 3, 0, 0, 0, 5, 3, 7, 4, 7, 7, 7, 6, 4, 7, 6, 4, 0, 7, 5, 3, 5, 5, 5, 4, 7, 5, 6, 7, 4, 6, 7, 4, 6, 3, 2, 5, 6, 3, 5, 0, 0, 0, 6, 5, 4, 5, 4, 7, 7, 7, 6, 2, 7, 3, 7, 5, 5, 7, 3, 4, 7, 6, 5, 2, 4, 3, 5, 7, 6, 5, 7, 0, 3, 4, 7, 6, 6, 6, 7, 7, 0, 6, 5, 7, 3, 5, 2, 7, 7, 3, 6, 7, 7, 5, 5, 7, 7, 7, 2, 6, 7, 3, 5, 7, 0, 0, 0, 6, 4, 6, 3, 5, 7, 5, 2, 7, 6, 5, 3, 4, 0, 6, 6, 5, 7, 6, 0, 7, 6, 7, 7, 6, 3, 3, 2, 4, 4, 7, 2},
{7, 5, 5, 5, 7, 7, 7, 6, 4, 4, 4, 3, 3, 3, 6, 0, 7, 6, 3, 5, 5, 6, 7, 5, 4, 4, 4, 7, 5, 4, 0, 7, 7, 7, 6, 6, 3, 7, 7, 7, 2, 4, 4, 4, 6, 0, 0, 0, 7, 5, 2, 5, 6, 4, 7, 6, 3, 7, 6, 7, 7, 3, 4, 5, 5, 5, 6, 3, 7, 7, 7, 2, 6, 5, 4, 6, 6, 0, 7, 7, 4, 5, 5, 5, 7, 2, 3, 4, 7, 6, 4, 4, 4, 6, 4, 7, 2, 2, 2, 6, 6, 6, 2, 7, 5, 6, 6, 6, 5, 3, 5, 0, 7, 6, 4, 3, 6, 7, 6, 7, 4, 3, 2, 4, 7, 5, 6, 3, 0, 4, 5, 7, 7, 7, 3, 6, 0, 0, 0, 7, 4, 3, 7, 5, 6, 6, 6, 7, 0, 5, 6, 7, 4, 6, 5, 6, 5, 0, 2, 4, 3, 6, 7, 3, 5, 2, 6, 7, 4, 6, 7, 5, 2, 7, 7, 7, 5, 6, 6, 6, 5, 2, 7, 4, 4, 4, 7, 6, 6, 6, 7, 7, 7, 4, 5, 2, 3, 5, 4, 6, 7, 3, 2, 6, 7, 4, 3, 7, 4, 7, 3, 6, 6, 7, 6, 5, 5, 5, 2, 2, 5, 7, 7, 7, 3, 4, 5, 3, 7, 7, 7, 5, 5, 5, 6, 6, 5, 6, 2, 6, 3, 6, 5, 3, 7, 6, 2, 2, 4, 0, 5, 4, 3, 7, 3, 7, 5, 6, 5, 7, 7, 7, 7, 6, 6, 3, 4, 6, 2, 3, 0, 7, 2, 0, 5, 7, 5, 5, 5, 6, 3, 5, 6, 4, 6, 7, 6, 5, 4, 2},
}
_.FortuneTigerReelReSpinRange = {
{3, 3, 3},
}
_.FortuneTigerReelReSpinReel = {
{8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200},
{8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200},
{8, 8, 0, 200, 200, 8, 8, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 200, 200, 8, 200, 200, 0, 8, 8, 200, 200, 8, 0, 0, 200, 200, 8, 200, 200, 0, 200, 200, 8, 8, 200, 200, 0, 0, 0, 200, 200, 8, 200, 200, 0, 0, 8, 200, 200, 8, 200, 200},
}
_.FortuneTigerSymbol = {
[1] = {
id = 1,
name = "wild",
is_wild = true,
group = {1},
pay_rate = {0, 0, 250},
client_order = 1,
client_dsc = "",
},
[2] = {
id = 2,
name = "元宝",
is_wild = false,
group = {2},
pay_rate = {0, 0, 100},
client_order = 2,
client_dsc = "",
},
[3] = {
id = 3,
name = "玉饰",
is_wild = false,
group = {3},
pay_rate = {0, 0, 25},
client_order = 3,
client_dsc = "",
},
[4] = {
id = 4,
name = "福袋",
is_wild = false,
group = {4},
pay_rate = {0, 0, 10},
client_order = 4,
client_dsc = "",
},
[5] = {
id = 5,
name = "红包",
is_wild = false,
group = {5},
pay_rate = {0, 0, 8},
client_order = 5,
client_dsc = "",
},
[6] = {
id = 6,
name = "爆竹",
is_wild = false,
group = {6},
pay_rate = {0, 0, 5},
client_order = 6,
client_dsc = "",
},
[7] = {
id = 7,
name = "橘子",
is_wild = false,
group = {7},
pay_rate = {0, 0, 3},
client_order = 7,
client_dsc = "",
},
[8] = {
id = 8,
name = "SuperStack",
is_wild = false,
group = {8},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
[200] = {
id = 200,
name = "Empty",
is_wild = false,
group = {200},
pay_rate = {0, 0, 0},
client_order = 0,
client_dsc = "",
},
}
_.FortuneTigerSymbolBetRatio = {
{
bet_ratio = 1,
},
}
return _

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,52 @@
-- <important: auto generate by excel-to-lua converter, do not modify>
local _ = {}
_.PrizeModelPrizeModelTypeA = {
[1] = {
id = 1,
ani_type = "big_win",
min_multiple = 10,
max_multiple = 25,
},
[2] = {
id = 2,
ani_type = "mega_win",
min_multiple = 25,
max_multiple = 50,
},
[3] = {
id = 3,
ani_type = "epic_win",
min_multiple = 50,
max_multiple = -1,
},
}
_.PrizeModelPrizeModelTypeB = {
[1] = {
id = 1,
ani_type = "big_win",
min_multiple = 15,
max_multiple = 30,
},
[2] = {
id = 2,
ani_type = "mega_win",
min_multiple = 30,
max_multiple = 45,
},
[3] = {
id = 3,
ani_type = "epic_win",
min_multiple = 45,
max_multiple = 60,
},
[4] = {
id = 4,
ani_type = "epic_win",
min_multiple = 60,
max_multiple = -1,
},
}
return _

View File

@ -0,0 +1,14 @@
@echo off
if exist "external" (cd external)
if not exist converter.exe (
echo Building converter...
go build -o converter.exe ../tools/converter
) else (
echo converter.exe already exists.
)
converter.exe go /excel ../internal/exported/excel2go ..
echo Done.
pause
exit

3
gamesrv/slotspkg/external/README.md vendored Normal file
View File

@ -0,0 +1,3 @@
# external
### 后续需要移植出去,暂时放这里

Some files were not shown because too many files have changed in this diff Show More