From 9fddde1ec3ef43b749570883609d3c712e29e30d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:46:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/order/Order.go | 15 +++++++-- src/server/game/mod/order/OrderFunc.go | 43 +++++++++++++++++++------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index dcf8fb6d..8dbec507 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,7 +2,6 @@ package order import ( "fmt" - "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -30,6 +29,7 @@ type OrderMod struct { FinishOrder []int // 已完成订单 IsCharge bool // 是否充值 AutoEmit []string // 自动发射器 + LastChess int // 上次生成订单的棋子 } type Order struct { @@ -433,7 +433,18 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { } break } - log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + // if len(mergeList) == 2 { + // ColorMap := make(map[string]int) + // for _, v := range mergeList { + // Color := mergeDataCfg.GetColorById(v) + // ColorMap[Color]++ + // if ColorMap[Color] > 1 { + // log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + // return fmt.Errorf("订单生成失败,重复颜色") + // } + // } + + // } o.addOrder(mergeList, OrderDiff, Common_type) return nil } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 20553f7a..5b66f03b 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -421,17 +421,17 @@ func ShuffleColor(List []string, Last string) []string { Break := 0 for { Break++ - if Break > 100 { + if Break > 1000 { break } Same := false - List = GoUtil.ShuffleStringArray(List) - if List[0] == Last { + NewList := GoUtil.ShuffleStringArray(List) + if NewList[0] == Last { continue } - for i := 1; i < len(List); i++ { - BeforeSries := mergeDataCfg.GetEmitTypeByColor(List[i-1]) - NowSries := mergeDataCfg.GetEmitTypeByColor(List[i]) + for i := 1; i < len(NewList); i++ { + BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1]) + NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i]) if BeforeSries == NowSries { Same = true break @@ -439,7 +439,27 @@ func ShuffleColor(List []string, Last string) []string { } if !Same { - return List + return NewList + } + } + L1 := make(map[string][]string, 0) + for _, v := range List { + Sries := mergeDataCfg.GetEmitTypeByColor(v) + L1[Sries] = append(L1[Sries], v) + } + List = make([]string, 0) + for _, v := range L1 { + + List = append(List, v[0]) + } + for _, v := range L1 { + if len(v) > 1 { + List = append(List, v[1]) + } + } + for _, v := range L1 { + if len(v) > 2 { + List = append(List, v[2]) } } return List @@ -464,6 +484,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle) o.ColorShuffle = NewSlice + o.LastColor = PopEmitId if len(o.ColorShuffle) == 0 { ColorShuffle := make([]string, 0) for _, v := range Emit { @@ -479,7 +500,6 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) } - o.LastColor = PopEmitId return PopEmitId } @@ -515,12 +535,13 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in MinChessId := 0 for i, chess := range o.ChessPool { chessColor := mergeDataCfg.GetColorById(chess) - if reflectChess[chess] > Diff { - MinChessId = chess - } if Color != chessColor { continue } + if reflectChess[chess] > Diff { + MinChessId = chess + } + ChessLv := mergeDataCfg.GetLvById(chess) if reflectChess[chess] == Diff && ChessLv >= EnergyMul+1 && ChessLv <= EnergyMul+12 { o.ChessPool = append(o.ChessPool[:i], o.ChessPool[i+1:]...)