2025/6/14
This commit is contained in:
parent
f6f3a041b9
commit
886c3d88b6
12
server/.idea/workspace.xml
generated
12
server/.idea/workspace.xml
generated
@ -8,21 +8,15 @@
|
||||
<change beforePath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/snap/db" beforeDir="false" afterPath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/snap/db" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0000000000000000-0000000000000000.wal" beforeDir="false" afterPath="$PROJECT_DIR$/../doc/etcd-v3.5.17-windows-amd64/default.etcd/member/wal/0000000000000000-0000000000000000.wal" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/baseserver/router/route_table.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/baseserver/router/route_table.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/config/csv/FruitAwardCfg.csv" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/config/csv/FruitAwardCfg.csv" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/config/csv/FruitSlotTypeCfg.csv" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/config/csv/FruitSlotTypeCfg.csv" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/fruit/model/fruit_manager.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/model/fruit_manager.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/fruit/model/fruit_player.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/model/fruit_player.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/fruit/model/fruit_room.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/model/fruit_room.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/fruit/msg/fruit_msg.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/fruit/msg/fruit_msg.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/game/msg/fruit_msg.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/game/msg/fruit_msg.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/pprof/guildmem.pprof/mem.pprof" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/pprof/guildmem.pprof/mem.pprof" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/buildproto.bat" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/buildproto.bat" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/login.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/login.pb.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/login.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/login.proto" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/messagedef.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/messagedef.pb.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/messagedef.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/messagedef.proto" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/messagedefclient.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/messagedefclient.proto" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/pbbind_gen.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/pbbind_gen.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/user.pb.go" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/user.pb.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/roserver/serverproto/user.proto" beforeDir="false" afterPath="$PROJECT_DIR$/roserver/serverproto/user.proto" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
||||
@ -1,25 +1,26 @@
|
||||
Slot Id,Slot类型,基础权重,坐庄权重,动态权重,提示
|
||||
Id,SlotTypes,Rate,Z_Rate,D_Rate,Tips
|
||||
int,list,int,int,int,string
|
||||
1,1,2400,500,30,small apple
|
||||
2,2,2400,500,30,small orange
|
||||
3,3,2400,500,30,small papaya
|
||||
4,4,2400,500,30,small bell
|
||||
5,5,2400,500,30,small watermelon
|
||||
6,6,2400,500,30,small star
|
||||
7,7,2400,500,30,small 77
|
||||
8,8,200,45,8,small BAR
|
||||
9,9,2000,350,30,big apple
|
||||
10,10,1000,200,15,big orange
|
||||
11,11,700,150,10,big papaya
|
||||
12,12,500,110,10,big bell
|
||||
13,13,500,110,10,big watermelon
|
||||
14,14,330,80,6,big star
|
||||
15,15,270,60,5,big 77
|
||||
16,16,100,25,5,big BAR
|
||||
100,9;10;11;12;13;14;15;8;16,400,80,10,bonus
|
||||
101,1;2;3;4;5;6;7,6000,6000,100,small ManGuan
|
||||
102,9;9;9;9,1300,1300,30,big SiXi
|
||||
103,10;11;12,1000,1600,30,small SanYuan
|
||||
104,13;14;15,600,800,20,big SanYuan
|
||||
105,9;10;11;12;13;14;15,400,500,20,big ManGuan
|
||||
1,1,180,0,0,small apple
|
||||
2,2,180,0,0,small orange
|
||||
3,3,180,0,0,small papaya
|
||||
4,4,180,0,0,small bell
|
||||
5,5,180,0,0,small watermelon
|
||||
6,6,180,0,0,small star
|
||||
7,7,180,0,0,small 77
|
||||
8,8,20,0,10,small BAR
|
||||
9,9,240,0,60,big apple
|
||||
10,10,120,0,30,big orange
|
||||
11,11,80,0,20,big papaya
|
||||
12,12,60,0,15,big bell
|
||||
13,13,60,0,15,big watermelon
|
||||
14,14,40,0,10,big star
|
||||
15,15,30,0,7,big 77
|
||||
16,16,10,0,3,big BAR
|
||||
100,9;10;11;12;13;14;15;8;16,30,0,10,left bonus
|
||||
101,9;10;11;12;13;14;15;8;16,30,0,10,right bonus
|
||||
102,1;2;3;4;5;6;7,30,0,50,small ManGuan
|
||||
103,9;9;9;9,30,0,40,big SiXi
|
||||
104,10;11;12,30,0,30,small SanYuan
|
||||
105,13;14;15,30,0,10,big SanYuan
|
||||
106,9;10;11;12;13;14;15,30,0,5,big ManGuan
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
package model
|
||||
|
||||
import "roserver/serverproto"
|
||||
|
||||
type FruitPlayer struct {
|
||||
Uid uint64
|
||||
Name string
|
||||
@ -8,7 +10,8 @@ type FruitPlayer struct {
|
||||
ChipNum int32
|
||||
CurrBetInfo map[int32]int32
|
||||
|
||||
CurrAwardChipNum int32
|
||||
CurrAwardChipNum int32
|
||||
CurrAwardChipInfo []*serverproto.FruitSlotInfo
|
||||
}
|
||||
|
||||
func newFruitPlayer(uid uint64, name string) *FruitPlayer {
|
||||
|
||||
@ -95,14 +95,14 @@ func (self *FruitRoom) Leave(uid uint64) {
|
||||
self.uidList = sliceRemoveValueFast(self.uidList, uid)
|
||||
}
|
||||
|
||||
func (self *FruitRoom) Bet(uid uint64, betInfo []*serverproto.FruitSlotBetInfo) serverproto.ErrorCode {
|
||||
func (self *FruitRoom) Bet(uid uint64, betInfo []*serverproto.FruitSlotInfo) serverproto.ErrorCode {
|
||||
if self.Stage != ROOM_STAGE_BET {
|
||||
return serverproto.ErrorCode_ERROR_FRUIT_CURR_STAGE_CANNOT_BET
|
||||
}
|
||||
player := FruitMgr.GetPlayer(uid)
|
||||
for _, v := range betInfo {
|
||||
slot := v.Slot
|
||||
betNum := v.BetNum
|
||||
betNum := v.Num
|
||||
if player.ChipNum >= betNum {
|
||||
player.ChipNum -= betNum
|
||||
player.CurrBetInfo[slot] += betNum
|
||||
@ -155,19 +155,28 @@ func (self *FruitRoom) Roll(rateItems []*FruitRateInfo) *FruitRateInfo {
|
||||
return rateItems[0]
|
||||
}
|
||||
|
||||
func (self *FruitRoom) CheckPlayerAward(playerBetInfo map[int32]int32, slotTypes []string) int32 {
|
||||
func (self *FruitRoom) CheckPlayerAward(playerBetInfo map[int32]int32, awardType_2_awardSlot map[int32]string, slotTypes []string) (int32, []*serverproto.FruitSlotInfo) {
|
||||
awardInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
var sumAwardChip int32 = 0
|
||||
for _, v := range slotTypes {
|
||||
slotType, _ := strconv.Atoi(v)
|
||||
slotTypeCfg := serverproto.FruitSlotTypeCfgLoader[int32(slotType)]
|
||||
idx := slotType
|
||||
betSlotId := slotType
|
||||
if slotType > 8 {
|
||||
idx = slotType - 8
|
||||
betSlotId = slotType - 8
|
||||
}
|
||||
betChipNum := playerBetInfo[int32(betSlotId)]
|
||||
if betChipNum > 0 {
|
||||
awardChip := betChipNum * slotTypeCfg.Times
|
||||
slot, _ := strconv.Atoi(awardType_2_awardSlot[int32(slotType)])
|
||||
awardInfo = append(awardInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: int32(slot),
|
||||
Num: awardChip,
|
||||
})
|
||||
sumAwardChip += awardChip
|
||||
}
|
||||
betChipNum := playerBetInfo[int32(idx)]
|
||||
sumAwardChip = betChipNum * slotTypeCfg.Times
|
||||
}
|
||||
return sumAwardChip
|
||||
return sumAwardChip, awardInfo
|
||||
}
|
||||
|
||||
func (self *FruitRoom) GetPlayerRank(rank []*serverproto.FruitPlayerAwardInfo) []*serverproto.FruitPlayerAwardInfo {
|
||||
@ -190,7 +199,8 @@ func (self *FruitRoom) Settle() {
|
||||
rollResult := self.Roll(rateItems)
|
||||
self.RecordSettleHistory(rollResult.AwardType)
|
||||
self.CurrAwardType = rollResult.AwardType
|
||||
if rollResult.AwardType == 100 {
|
||||
awardSlotType_2_awardSlotId := make(map[int32]string, 0)
|
||||
if rollResult.AwardType == 100 || rollResult.AwardType == 101 {
|
||||
slotTypeStr := rollResult.SlotTypes[rand.Intn(len(rollResult.SlotTypes))]
|
||||
slotType, _ := strconv.Atoi(slotTypeStr)
|
||||
awardSlots := make([]string, 0)
|
||||
@ -202,15 +212,17 @@ func (self *FruitRoom) Settle() {
|
||||
slot, _ := strconv.Atoi(v)
|
||||
tempAwardSlots = append(tempAwardSlots, int32(slot))
|
||||
}
|
||||
awardSlotType_2_awardSlotId[int32(slotType)] = awardSlot
|
||||
self.CurrAwardSlots = tempAwardSlots
|
||||
self.CurrStartSlot = self.CurrTargetSlot
|
||||
} else if rollResult.AwardType >= 101 {
|
||||
} else {
|
||||
awardSlots := make([]string, 0)
|
||||
for _, v := range rollResult.SlotTypes {
|
||||
slotType, _ := strconv.Atoi(v)
|
||||
slotTypeCfg := serverproto.FruitSlotTypeCfgLoader[int32(slotType)]
|
||||
awardSlot := self.RandomSlot(slotTypeCfg.Slots, awardSlots)
|
||||
awardSlots = append(awardSlots, awardSlot)
|
||||
awardSlotType_2_awardSlotId[int32(slotType)] = awardSlot
|
||||
}
|
||||
tempAwardSlots := make([]int32, 0)
|
||||
for _, v := range awardSlots {
|
||||
@ -224,6 +236,10 @@ func (self *FruitRoom) Settle() {
|
||||
if self.CurrAwardType >= 1 && self.CurrAwardType <= 16 {
|
||||
// normal award
|
||||
self.CurrTargetSlot = self.CurrAwardSlots[0]
|
||||
} else if self.CurrAwardType == 100 {
|
||||
self.CurrTargetSlot = 10
|
||||
} else if self.CurrAwardType == 101 {
|
||||
self.CurrTargetSlot = 22
|
||||
} else {
|
||||
// special award
|
||||
if rand.Intn(2) == 0 {
|
||||
@ -237,7 +253,9 @@ func (self *FruitRoom) Settle() {
|
||||
for i := 0; i < len(self.uidList); i++ {
|
||||
uid := self.uidList[i]
|
||||
player := FruitMgr.GetPlayer(uid)
|
||||
player.CurrAwardChipNum = self.CheckPlayerAward(player.CurrBetInfo, rollResult.SlotTypes)
|
||||
sumAwardChipNum, awardChipInfo := self.CheckPlayerAward(player.CurrBetInfo, awardSlotType_2_awardSlotId, rollResult.SlotTypes)
|
||||
player.CurrAwardChipNum = sumAwardChipNum
|
||||
player.CurrAwardChipInfo = awardChipInfo
|
||||
player.ChipNum += player.CurrAwardChipNum
|
||||
self.PoolChipNum = self.PoolChipNum - player.CurrAwardChipNum
|
||||
if self.PoolChipNum < 0 {
|
||||
@ -264,6 +282,7 @@ func (self *FruitRoom) Settle() {
|
||||
AwardType: self.CurrAwardType,
|
||||
AwardChipNum: player.CurrAwardChipNum,
|
||||
AwardSlots: self.CurrAwardSlots,
|
||||
AwardChipInfo: player.CurrAwardChipInfo,
|
||||
SettleHistory: self.SettleHistory,
|
||||
StartSlot: self.CurrStartSlot,
|
||||
TargetSlot: self.CurrTargetSlot,
|
||||
@ -316,13 +335,13 @@ func (self *FruitRoom) RandomSlot(slots []string, excludeSlots []string) string
|
||||
}
|
||||
|
||||
func (self *FruitRoom) SecTick() {
|
||||
totalBetInfo := make([]*serverproto.FruitSlotBetInfo, 0)
|
||||
totalBetInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
var i int32
|
||||
for i = 1; i <= 8; i++ {
|
||||
slotTotalBetNum := self.TotalBetInfo[i]
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotBetInfo{
|
||||
Slot: i,
|
||||
BetNum: slotTotalBetNum,
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: i,
|
||||
Num: slotTotalBetNum,
|
||||
})
|
||||
}
|
||||
for i := 0; i < len(self.uidList); i++ {
|
||||
|
||||
@ -30,20 +30,20 @@ func init() {
|
||||
model2.FruitMgr.Room.Join(msg.Uid)
|
||||
player := model2.FruitMgr.GetPlayer(msg.Uid)
|
||||
player.ChipNum = 10000
|
||||
totalBetInfo := make([]*serverproto.FruitSlotBetInfo, 0)
|
||||
totalBetInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
for slot := 1; slot <= 8; slot++ {
|
||||
betNum := model2.FruitMgr.Room.TotalBetInfo[int32(slot)]
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotBetInfo{
|
||||
Slot: int32(slot),
|
||||
BetNum: betNum,
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: int32(slot),
|
||||
Num: betNum,
|
||||
})
|
||||
}
|
||||
myBetInfo := make([]*serverproto.FruitSlotBetInfo, 0)
|
||||
myBetInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
for slot := 1; slot <= 8; slot++ {
|
||||
betNum := player.CurrBetInfo[int32(slot)]
|
||||
myBetInfo = append(myBetInfo, &serverproto.FruitSlotBetInfo{
|
||||
Slot: int32(slot),
|
||||
BetNum: betNum,
|
||||
myBetInfo = append(myBetInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: int32(slot),
|
||||
Num: betNum,
|
||||
})
|
||||
}
|
||||
ackMsg := &serverproto.SCFruitJoinAck{
|
||||
@ -57,6 +57,7 @@ func init() {
|
||||
MyBetInfo: myBetInfo,
|
||||
SettleHistory: model2.FruitMgr.Room.SettleHistory,
|
||||
CurrAwardSlots: model2.FruitMgr.Room.CurrAwardSlots,
|
||||
CurrTargetSlot: model2.FruitMgr.Room.CurrTargetSlot,
|
||||
PlayerAwardRank: model2.FruitMgr.Room.CurrPlayerAwardRank,
|
||||
}
|
||||
model.ServiceReplay(ev, ackMsg)
|
||||
@ -79,19 +80,19 @@ func init() {
|
||||
uid := msg.Uid
|
||||
errCode := model2.FruitMgr.Room.Bet(msg.Uid, msg.GetBetInfo())
|
||||
player := model2.FruitMgr.GetPlayer(uid)
|
||||
totalBetInfo := make([]*serverproto.FruitSlotBetInfo, 0)
|
||||
myBetInfo := make([]*serverproto.FruitSlotBetInfo, 0)
|
||||
totalBetInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
myBetInfo := make([]*serverproto.FruitSlotInfo, 0)
|
||||
var i int32
|
||||
for i = 1; i <= 8; i++ {
|
||||
slotTotalBetNum := model2.FruitMgr.Room.TotalBetInfo[i]
|
||||
myBetNum := player.CurrBetInfo[i]
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotBetInfo{
|
||||
Slot: i,
|
||||
BetNum: slotTotalBetNum,
|
||||
totalBetInfo = append(totalBetInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: i,
|
||||
Num: slotTotalBetNum,
|
||||
})
|
||||
myBetInfo = append(myBetInfo, &serverproto.FruitSlotBetInfo{
|
||||
Slot: i,
|
||||
BetNum: myBetNum,
|
||||
myBetInfo = append(myBetInfo, &serverproto.FruitSlotInfo{
|
||||
Slot: i,
|
||||
Num: myBetNum,
|
||||
})
|
||||
}
|
||||
ackMsg := &serverproto.SCFruitBetAck{
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -3779,11 +3779,12 @@ message SCFruitJoinAck { //project game|fruit //RouteRule game
|
||||
int32 sec = 4; //时间秒
|
||||
int32 my_chip_num = 5; //玩家筹码
|
||||
int32 pool_chip_num = 6; //奖池
|
||||
repeated FruitSlotBetInfo total_bet_info = 7; //总的押注信息
|
||||
repeated FruitSlotBetInfo my_bet_info = 8; //当前玩家的押注信息
|
||||
repeated FruitSlotInfo total_bet_info = 7; //总的押注信息
|
||||
repeated FruitSlotInfo my_bet_info = 8; //当前玩家的押注信息
|
||||
repeated int32 settle_history = 9; //开奖历史记录
|
||||
repeated int32 curr_award_slots = 10; //上次开奖结果
|
||||
repeated FruitPlayerAwardInfo player_award_rank = 11;
|
||||
int32 curr_target_slot = 11; // 上次开奖slot
|
||||
repeated FruitPlayerAwardInfo player_award_rank = 12;
|
||||
}
|
||||
message CSFruitLeaveReq { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
@ -3795,15 +3796,15 @@ message SCFruitLeaveAck { //project game|fruit //RouteRule game
|
||||
}
|
||||
message CSFruitBetReq { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
repeated FruitSlotBetInfo bet_info = 2;
|
||||
repeated FruitSlotInfo bet_info = 2;
|
||||
}
|
||||
message SCFruitBetAck { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
int32 error = 2;
|
||||
int32 my_chip_num = 3; //玩家筹码
|
||||
uint32 pool_chip_num = 4; //奖池
|
||||
repeated FruitSlotBetInfo total_bet_info = 5; //总的押注信息
|
||||
repeated FruitSlotBetInfo my_bet_info = 6; //当前玩家的押注信息
|
||||
repeated FruitSlotInfo total_bet_info = 5; //总的押注信息
|
||||
repeated FruitSlotInfo my_bet_info = 6; //当前玩家的押注信息
|
||||
}
|
||||
message SCFruitSettleNtf { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
@ -3811,16 +3812,17 @@ message SCFruitSettleNtf { //project game|fruit //RouteRule game
|
||||
int32 award_type = 3;
|
||||
int32 award_chip_num = 4;
|
||||
repeated int32 award_slots = 5;
|
||||
repeated int32 settle_history = 6; //开奖历史记录
|
||||
int32 start_slot = 7;
|
||||
int32 target_slot = 8;
|
||||
repeated int32 award_items = 9;
|
||||
repeated FruitSlotInfo award_chip_info = 6;
|
||||
repeated int32 settle_history = 7; //开奖历史记录
|
||||
int32 start_slot = 8;
|
||||
int32 target_slot = 9;
|
||||
repeated int32 award_items = 10; // 奖励游戏物品
|
||||
}
|
||||
message SCFruitSecTickNtf { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
int32 sec = 2;
|
||||
uint32 pool_chip_num = 3;
|
||||
repeated FruitSlotBetInfo total_bet_info = 4;
|
||||
repeated FruitSlotInfo total_bet_info = 4;
|
||||
}
|
||||
message SCFruitPlayerAwardRankNtf { //project game|fruit //RouteRule game
|
||||
uint64 uid = 1;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2031,9 +2031,9 @@ message LevelupSummonInfo{
|
||||
int32 exp = 3;
|
||||
}
|
||||
|
||||
message FruitSlotBetInfo {
|
||||
message FruitSlotInfo {
|
||||
int32 slot = 1;
|
||||
int32 bet_num = 2;
|
||||
int32 num = 2;
|
||||
}
|
||||
message FruitPlayerAwardInfo {
|
||||
uint64 uid = 1;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user