From c1c30dc9364012662f7be518403835a44fd92d56 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:09:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BA=E5=AE=9A=E8=AE=A2=E5=8D=95=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/game/mod/order/Order.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 7f59ab07..54176d20 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -171,22 +171,33 @@ func (o *OrderMod) CreatOrderPool(lv int, Emit []int, EnergyMul int) error { // 触发生成新的固定订单 func (o *OrderMod) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) error { TriggerOrderList := orderCfg.GetStartOrderList() + FixedOrder := 0 + for _, v := range o.OrderList { + if v.Type == Fixed_type { + FixedOrder++ + } + } + OrderList := make(map[int]Order, len(o.OrderList)) + for k, v := range o.OrderList { + OrderList[k] = v + } + // 触发生成新的固定订单 for _, v := range TriggerOrderList { if GoUtil.InArray(v.Id, o.FinishOrder) { continue } - orderInfo, exists := o.OrderList[v.Id] + orderInfo, exists := OrderList[v.Id] if exists && v.Preview == "" { continue } // 预览条件不为空且未存在且未完成 if v.Preview != "" && !exists && !GoUtil.InArray(v.Id, o.FinishOrder) { - if o.CheckCondition(lv, v.Preview, Type, Emit) { + if o.CheckCondition(lv, v.Preview, Type, Emit, FixedOrder, OrderList) { o.addFixOrder(v.Id, v.MergeList, Preview_type, v.Items) } } if v.Appear != "" { - if o.CheckCondition(lv, v.Appear, Type, Emit) { + if o.CheckCondition(lv, v.Appear, Type, Emit, FixedOrder, OrderList) { if exists { orderInfo.Type = Fixed_type o.OrderList[v.Id] = orderInfo @@ -210,7 +221,7 @@ func (o *OrderMod) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) return nil } -func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int) bool { +func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int, FixedOrder int, OrderList map[int]Order) bool { r1 := strings.Split(condition, "|") for _, v := range r1 { r2 := strings.Split(v, "=") @@ -230,18 +241,12 @@ func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int) bo } case "OrderNum": id := GoUtil.Int(r2[1]) - FixedOrder := 0 - for _, v := range o.OrderList { - if v.Type == Fixed_type { - FixedOrder++ - } - } if FixedOrder != id { return false } case "Order": id := GoUtil.Int(r2[1]) - _, ok := o.OrderList[id] + _, ok := OrderList[id] if !GoUtil.InArray(id, o.FinishOrder) && !ok { return false }