From 7c43add304bf203f5898e4e1001cb877edf04475 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:07:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerChessMod.go | 10 ++++-- src/server/game/PlayerFunc.go | 48 ++++++++++++++++++++++++++ src/server/game/mod/order/Order.go | 3 ++ src/server/game/mod/order/OrderFunc.go | 3 ++ 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 11a4eb6a..45ba81a7 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -312,18 +312,22 @@ func checkChess(ChessId, EnergyMul int, Emit []int) bool { break } } - _, Max := getChesslvRange(EmitId, EnergyMul) + _, Max := getChesslvRange(EmitId, EnergyMul, false) Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor) return ChessIdLv > Max-Adjust } - -func getChesslvRange(Emit int, EnergyMul int) (int, int) { +func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { RandEmitLv := mergeDataCfg.GetLvById(Emit) EmitId := mergeDataCfg.GetEmitId(Emit) RandMaxLv := mergeDataCfg.GetMaxLvById(Emit) RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId) Ratio := mergeDataCfg.GetEmitRatio(EmitId) m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) + if IsCharge { + m += 10 + } + m = max(1, m) + m = min(100, m) ChessMinLev := orderCfg.GetLvMin(EnergyMul) ChessMaxLev := orderCfg.GetLvMax(EnergyMul, m) return ChessMinLev, ChessMaxLev diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 7599bdae..a132a3d5 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1257,3 +1257,51 @@ func (p *Player) GetPetThiefReward(Target int) error { p.HandleItem([]*item.Item{{Id: ItemId, Num: 1}}, proto.ITEM_POP_LABEL_PetTheif.String()) return nil } + +func (p *Player) AddHighOrder() { + OrderMod := p.PlayMod.getOrderMod() + BaseMod := p.PlayMod.getBaseMod() + ChessMod := p.PlayMod.getChessMod() + LastChess := OrderMod.LastOrder.MergeId[len(OrderMod.LastOrder.MergeId)-1] + maxId := 0 + for k := range OrderMod.GetOrderList() { + maxId = max(maxId, k) + } + NewChess := OrderMod.GetOrderList()[maxId].MergeId[0] + LastColor := mergeDataCfg.GetColorById(LastChess) + NewColor := mergeDataCfg.GetColorById(NewChess) + LastEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), LastColor) + AddNewEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), NewColor) + Product := []string{} + Product = append(Product, mergeDataCfg.GetEmitProduceType(LastEmitId)...) + Product = append(Product, mergeDataCfg.GetEmitProduceType(AddNewEmitId)...) + ChessMap := make(map[string]int, 0) + ChessList := ChessMod.GetUnlockChessList() + for _, v := range ChessList { + ChessType := mergeDataCfg.GetTypeById(v) + if ChessType != "Product" { + continue + } + Color := mergeDataCfg.GetColorById(v) + if GoUtil.InStringArray(Color, Product) { + continue + } + if v > ChessMap[Color] { + ChessMap[Color] = v + } + } + + for Color, ChessId := range ChessMap { + EmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), Color) + _, ChessMaxLv := getChesslvRange(EmitId, BaseMod.GetEnergyMul(), OrderMod.IsCharge) + NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color) + NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul()) + ChessLv := mergeDataCfg.GetLvById(ChessId) + if NewLev3 <= ChessLv { + continue + } + OrderMod.AddExtraOrder([]int{ChessId}) + return + } + +} diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 4360b65d..88b5f7a8 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -497,6 +497,9 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.LastDiff = Diff return o.Auto_id } +func (o *OrderMod) AddExtraOrder(ChessList []int) { + o.addOrder(ChessList, DIFF_LOW, Extra_type) +} func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { Order := Order{ MergeId: ChessList, diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 456ad931..a4e73c5f 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -843,6 +843,9 @@ func initReflectChess2(Color string, Start, End, Diff, adjust int) { reflectChess[ChessId] = Diff } } +func AdjustLev(Lev, EnergyMul int) int { + return adjustLev(Lev, EnergyMul) +} // 调整棋子等级 func adjustLev(Lev, EnergyMul int) int {