订单优化

This commit is contained in:
hahwu 2025-09-28 12:25:47 +08:00
parent bce5d809df
commit 6c62608929
2 changed files with 82 additions and 27 deletions

View File

@ -194,6 +194,21 @@ func GetEmitRetire(Id string) int {
return gamedata.GetIntValue(data, "Retire") return gamedata.GetIntValue(data, "Retire")
} }
func GetEmitProductNumByColor(Id string) int {
data, err := gamedata.GetData(CFG_MERGE_EMIT)
if err != nil {
log.Debug("GetEmitProductNumByColor GetOne Id:%v not found", Id)
return 0
}
for _, v := range data {
ColorList := strings.Split(gamedata.GetStringValue(v, "Product_Type"), ",")
if GoUtil.InStringArray(Id, ColorList) {
return len(strings.Split(gamedata.GetStringValue(v, "Product_Type"), ","))
}
}
return 0
}
// 根据Id获取棋子类型 // 根据Id获取棋子类型
func GetTypeById(Id int) string { func GetTypeById(Id int) string {
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id) data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)

View File

@ -486,12 +486,12 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) (
initReflectChess(Emit, EnergyMul) initReflectChess(Emit, EnergyMul)
filterPool(o) filterPool(o)
OrderN, err := userCfg.GetOrderNByLv(lv) OrderN, err := userCfg.GetOrderNByLv(lv)
RandChessNum := getChessNumRand(OrderN) //RandChessNum := getChessNumRand(OrderN)
if err != nil { if err != nil {
return nil, DIFF_LOW, err return nil, DIFF_LOW, err
} }
// 生成订单难度和棋子数量 // 生成订单难度和棋子数量
ChessNum := GoUtil.RandMap(RandChessNum) //ChessNum := GoUtil.RandMap(RandChessNum)
OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN) OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN)
OrderDiff := GoUtil.RandMap(OrderDiffRand) OrderDiff := GoUtil.RandMap(OrderDiffRand)
if o.NextDiff != 0 { if o.NextDiff != 0 {
@ -569,16 +569,23 @@ func filterPool(o *OrderMod) {
func ShuffleColor(List []string, Last string) []string { func ShuffleColor(List []string, Last string) []string {
Break := 0 Break := 0
List2 := make([]string, len(List))
List3 := make([]string, len(List))
for _, v := range List {
if mergeDataCfg.GetEmitProductNumByColor(v) == 1 {
List2 = append(List2, v)
} else {
List3 = append(List3, v)
}
}
for { for {
Break++ Break++
if Break > 1000 { if Break > 1000 {
break break
} }
Same := false Same := false
NewList := GoUtil.ShuffleStringArray(List) NewList := GoUtil.ShuffleStringArray(List2)
if NewList[0] == Last {
continue
}
for i := 1; i < len(NewList); i++ { for i := 1; i < len(NewList); i++ {
BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1]) BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1])
NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i]) NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i])
@ -586,8 +593,23 @@ func ShuffleColor(List []string, Last string) []string {
Same = true Same = true
break break
} }
} }
// 将 List3 随机插入 NewList 中
if len(List3) > 0 {
for _, v := range GoUtil.ShuffleStringArray(List3) {
idx := GoUtil.RandNum(0, len(NewList))
if idx >= len(NewList) {
NewList = append(NewList, v)
} else {
NewList = append(NewList[:idx+1], NewList[idx:]...)
NewList[idx] = v
}
}
}
if NewList[0] == Last {
continue
}
if !Same { if !Same {
return NewList return NewList
} }
@ -620,7 +642,44 @@ func ShuffleColor(List []string, Last string) []string {
// 获取发射器系列 // 获取发射器系列
func getEmitSeries(o *OrderMod, Emit []int) string { func getEmitSeries(o *OrderMod, Emit []int) string {
if o.ColorShuffle == nil { o.initColorShuffle(Emit)
PopEmitId := ""
NewSlice := make([]string, 0)
ChessColorNum := map[string]int{}
for _, v := range o.OrderList {
for _, c := range v.MergeId {
Color := mergeDataCfg.GetColorById(c)
ChessColorNum[Color]++
}
}
Break := 0
for {
if Break > 1000 {
break
}
Break++
PopEmitId, NewSlice = GoUtil.PopStringArray(o.ColorShuffle)
o.ColorShuffle = NewSlice
if PopEmitId == "" {
o.initColorShuffle(Emit)
continue
}
PopEmitIdProductNum := mergeDataCfg.GetEmitProductNumByColor(PopEmitId)
o.initColorShuffle(Emit)
if PopEmitIdProductNum == 1 && ChessColorNum[PopEmitId] >= 2 {
continue
} else {
break
}
}
o.ColorShuffle = NewSlice
o.LastColor = PopEmitId
o.initColorShuffle(Emit)
return PopEmitId
}
func (o *OrderMod) initColorShuffle(Emit []int) {
if len(o.ColorShuffle) == 0 {
ColorShuffle := make([]string, 0) ColorShuffle := make([]string, 0)
for _, v := range Emit { for _, v := range Emit {
EmitId := mergeDataCfg.GetEmitId(v) EmitId := mergeDataCfg.GetEmitId(v)
@ -641,25 +700,6 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
} }
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
} }
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 {
EmitId := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
continue
}
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
continue
}
ColorShuffle = append(ColorShuffle, EmitProduct...)
}
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
}
return PopEmitId
} }
// 订单能获取的宠物币 // 订单能获取的宠物币