2025/6/14

This commit is contained in:
fatiao 2025-06-14 22:49:29 +08:00
parent f6f3a041b9
commit 886c3d88b6
10 changed files with 2250 additions and 2212 deletions

View File

@ -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" />

View File

@ -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 Slot Id Slot类型 基础权重 坐庄权重 动态权重 提示
2 Id SlotTypes Rate Z_Rate D_Rate Tips
3 int list int int int string
4 1 1 2400 180 500 0 30 0 small apple
5 2 2 2400 180 500 0 30 0 small orange
6 3 3 2400 180 500 0 30 0 small papaya
7 4 4 2400 180 500 0 30 0 small bell
8 5 5 2400 180 500 0 30 0 small watermelon
9 6 6 2400 180 500 0 30 0 small star
10 7 7 2400 180 500 0 30 0 small 77
11 8 8 200 20 45 0 8 10 small BAR
12 9 9 2000 240 350 0 30 60 big apple
13 10 10 1000 120 200 0 15 30 big orange
14 11 11 700 80 150 0 10 20 big papaya
15 12 12 500 60 110 0 10 15 big bell
16 13 13 500 60 110 0 10 15 big watermelon
17 14 14 330 40 80 0 6 10 big star
18 15 15 270 30 60 0 5 7 big 77
19 16 16 100 10 25 0 5 3 big BAR
20 100 9;10;11;12;13;14;15;8;16 400 30 80 0 10 bonus left bonus
21 101 1;2;3;4;5;6;7 9;10;11;12;13;14;15;8;16 6000 30 6000 0 100 10 small ManGuan right bonus
22 102 9;9;9;9 1;2;3;4;5;6;7 1300 30 1300 0 30 50 big SiXi small ManGuan
23 103 10;11;12 9;9;9;9 1000 30 1600 0 30 40 small SanYuan big SiXi
24 104 13;14;15 10;11;12 600 30 800 0 20 30 big SanYuan small SanYuan
25 105 9;10;11;12;13;14;15 13;14;15 400 30 500 0 20 10 big ManGuan big SanYuan
26 106 9;10;11;12;13;14;15 30 0 5 big ManGuan

View File

@ -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 {

View File

@ -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++ {

View File

@ -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{

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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;