订单逻辑优化

This commit is contained in:
hahwu 2025-09-16 17:07:06 +08:00
parent 169078a545
commit e0f5d67ee6
4 changed files with 62 additions and 52 deletions

View File

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

View File

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

View File

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

View File

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