订单逻辑优化
This commit is contained in:
parent
169078a545
commit
e0f5d67ee6
@ -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 ""
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user