From e0f5d67ee607a89d4e47c8ed7e51238b5df2759f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:07:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mergeData/MergeDataCfg.go | 6 +- src/server/game/UnitTest.go | 6 +- src/server/game/mod/order/Order.go | 11 ++- src/server/game/mod/order/OrderFunc.go | 91 ++++++++++++----------- 4 files changed, 62 insertions(+), 52 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 13d88283..516c2db5 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -45,10 +45,10 @@ func GetEmitTypeByColor(Color string) string { if err != nil { return "" } - for _, v := range data { - ColorList := strings.Split(gamedata.GetStringValue(data, "Order_Type"), ",") + for k, v := range data { + ColorList := strings.Split(gamedata.GetStringValue(v, "Order_Type"), ",") if GoUtil.InStringArray(Color, ColorList) { - return gamedata.GetStringValue(v, "Type") + return k } } return "" diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 85d74ca2..4b492d16 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -44,10 +44,10 @@ func UnitOrder(p *Player) error { OrderMod := p.PlayMod.getOrderMod() ChessMod := p.PlayMod.getChessMod() BaseMod := p.PlayMod.getBaseMod() - OrderMod.OrderList = make(map[int]order.Order) + //OrderMod.OrderList = make(map[int]order.Order) for i := 0; i < 5000; i++ { - OrderMod.ChessPool = nil - OrderMod.EmitShuffle = nil + //OrderMod.ChessPool = nil + //OrderMod.EmitShuffle = nil err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul()) if err != nil { return err diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index e69c5b60..dcf8fb6d 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,6 +2,7 @@ package order import ( "fmt" + "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -22,6 +23,8 @@ type OrderMod struct { EimtOrder map[string]struct{} PreheatStep map[string]int // 预热订单步骤 EmitShuffle []string // 发射器乱序 + ColorShuffle []string // 棋子系列乱序 + LastColor string // 上次生成订单的棋子系列 ChessPool []int // 棋子池 OrderPool map[int]*Order // 订单池 FinishOrder []int // 已完成订单 @@ -430,7 +433,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { } break } - //log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) o.addOrder(mergeList, OrderDiff, Common_type) return nil } @@ -670,7 +673,7 @@ func (o *OrderMod) Retire(EmitId string) { ChessPool = append(ChessPool, v) } o.ChessPool = ChessPool - o.EmitShuffle = nil + o.ColorShuffle = nil } func (o *OrderMod) DelOrder(OrderId int) (*Order, error) { @@ -709,8 +712,8 @@ func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, Chess } func (o *OrderMod) ResetChessPool() { - o.ChessPool = make([]int, 0) - o.EmitShuffle = nil + // o.ChessPool = make([]int, 0) + // o.EmitShuffle = nil } func (o *OrderMod) SetIsCharge() { diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 9fdc7bd7..20553f7a 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -417,10 +417,38 @@ func filterPool(o *OrderMod) { o.ChessPool = NewPool } +func ShuffleColor(List []string, Last string) []string { + Break := 0 + for { + Break++ + if Break > 100 { + break + } + Same := false + List = GoUtil.ShuffleStringArray(List) + if List[0] == Last { + continue + } + for i := 1; i < len(List); i++ { + BeforeSries := mergeDataCfg.GetEmitTypeByColor(List[i-1]) + NowSries := mergeDataCfg.GetEmitTypeByColor(List[i]) + if BeforeSries == NowSries { + Same = true + break + } + + } + if !Same { + return List + } + } + return List +} + // 获取发射器系列 func getEmitSeries(o *OrderMod, Emit []int) string { - if o.EmitShuffle == nil { - o.EmitShuffle = make([]string, 0) + if o.ColorShuffle == nil { + ColorShuffle := make([]string, 0) for _, v := range Emit { EmitId := mergeDataCfg.GetEmitId(v) if GoUtil.InStringArray(EmitId, o.AutoEmit) { @@ -430,48 +458,28 @@ func getEmitSeries(o *OrderMod, Emit []int) string { if len(EmitProduct) == 0 || EmitProduct[0] == "" { continue } - EmitSerie := mergeDataCfg.GetEmitId(v) - if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) { + ColorShuffle = append(ColorShuffle, EmitProduct...) + } + o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) + } + PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle) + o.ColorShuffle = NewSlice + if len(o.ColorShuffle) == 0 { + ColorShuffle := make([]string, 0) + for _, v := range Emit { + EmitId := mergeDataCfg.GetEmitId(v) + if GoUtil.InStringArray(EmitId, o.AutoEmit) { continue } - for i := 0; i < len(EmitProduct); i++ { - o.EmitShuffle = append(o.EmitShuffle, EmitSerie) - } - } - o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle) - } - PopEmitId, NewSlice := GoUtil.PopStringArray(o.EmitShuffle) - o.EmitShuffle = NewSlice - if len(o.EmitShuffle) == 0 { - o.EmitShuffle = make([]string, 0) - for _, v := range Emit { EmitProduct := mergeDataCfg.GetEmitProduceType(v) if len(EmitProduct) == 0 || EmitProduct[0] == "" { continue } - EmitSerie := mergeDataCfg.GetEmitId(v) - if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) { - continue - } - for i := 0; i < len(EmitProduct); i++ { - o.EmitShuffle = append(o.EmitShuffle, EmitSerie) - } - } - Num := 1 - for { - if len(o.EmitShuffle) == 1 { - break - } - o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle) - if o.EmitShuffle[0] != PopEmitId { - break - } - Num++ - if Num > 100 { - break - } + ColorShuffle = append(ColorShuffle, EmitProduct...) } + o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) } + o.LastColor = PopEmitId return PopEmitId } @@ -500,9 +508,9 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { // 从棋子池中获取棋子 func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int { - EmitSeries := getEmitSeries(o, Emit) - EmitChessId := getEmitBySeries(Emit, EmitSeries) - ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId) + Color := getEmitSeries(o, Emit) + EmitChessId := getEmitBySeries(Emit, Color) + //ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId) // 从棋子池中获取棋子 MinChessId := 0 for i, chess := range o.ChessPool { @@ -510,7 +518,7 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in if reflectChess[chess] > Diff { MinChessId = chess } - if !GoUtil.InStringArray(chessColor, ColorRand) { + if Color != chessColor { continue } ChessLv := mergeDataCfg.GetLvById(chess) @@ -541,7 +549,6 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, MinChessColor) return Chess } - Color := GoUtil.RandStringSlice(ColorRand) ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff) NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color) @@ -624,7 +631,7 @@ func getEmitBySeries(EmitList []int, EmitId string) int { if len(ProduceColor) == 0 || ProduceColor[0] == "" { continue } - if mergeDataCfg.GetEmitId(v) == EmitId { + if GoUtil.InStringArray(EmitId, ProduceColor) { return v } }