From 9fec847b366063ec99b887d52628c788a660255f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:11:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/order/orderCfg.go | 20 ++++++ src/server/game/ChargeFunc.go | 2 + src/server/game/Gm.go | 5 +- src/server/game/PlayerChessMod.go | 17 ++++- src/server/game/PlayerFunc.go | 68 ++++++++++---------- src/server/game/Trigger.go | 2 +- src/server/game/UnitTest.go | 1 + src/server/game/mod/chess/Chess.go | 8 +++ src/server/game/mod/decorate/Decorate.go | 10 +++ src/server/game/mod/item/Item.go | 1 + src/server/game/mod/order/Order.go | 45 +++++++++---- src/server/game/mod/order/OrderFunc.go | 81 +++++++++++++----------- 12 files changed, 173 insertions(+), 87 deletions(-) diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index 1bfa56fa..33e17d71 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -11,6 +11,8 @@ const ( CFG_ORDER_CHESS_DATA = "OrderChessData" CFG_ORDER_NUM_DATA = "OrderNumData" CFG_START_ORDER = "StartOrder" + CFG_CONST = "OrderConst" + CFG_ORDER_SCENE = "OrderScene" ) func init() { @@ -18,6 +20,24 @@ func init() { gamedata.InitCfg(CFG_ORDER_CHESS_DATA) gamedata.InitCfg(CFG_ORDER_NUM_DATA) gamedata.InitCfg(CFG_START_ORDER) + gamedata.InitCfg(CFG_CONST) + gamedata.InitCfg(CFG_ORDER_SCENE) +} + +func GetOrderFactor(Scene int) int { + data, err := gamedata.GetDataByIntKey(CFG_ORDER_SCENE, Scene) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "Factor") +} + +func GetEmitExtraOrder() string { + data, err := gamedata.GetDataByKey(CFG_CONST, "EmitId_Extra_Order") + if err != nil { + return "" + } + return gamedata.GetStringValue(data, "Value") } func GetLvMin(EnergyMul int) int { diff --git a/src/server/game/ChargeFunc.go b/src/server/game/ChargeFunc.go index 80c7dad4..b01e2912 100644 --- a/src/server/game/ChargeFunc.go +++ b/src/server/game/ChargeFunc.go @@ -17,6 +17,8 @@ func Charge(p *Player, ChargeId int) { PiggyBankFire(p, ChargeId) // 猪猪银行 PlayroomFire(p, ChargeId) // 游乐场 ActivityFire(p, ChargeId) // 活动礼包 + OrderMod := p.PlayMod.getOrderMod() + OrderMod.SetIsCharge() // 设置订单模块为充值状态 p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PURCHASE, A: []interface{}{}}) } diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index c1a49eff..82ec0460 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -453,7 +453,10 @@ func ReqGmCommand_(player *Player, Command string) error { BaseMod.Uid = Uid case "copyUser": p1 := new(Player) - p1.InitPlayer(arg[1]) + err := p1.InitPlayer(arg[1]) + if err != nil { + return err + } BaseMod := p1.PlayMod.getBaseMod() BaseMod.Uid = player.M_DwUin BaseMod.NickName = player.PlayMod.getBaseMod().NickName diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 9a502e5e..73fb0ddf 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -156,6 +156,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa itemList := make([]*item.Item, 0) AddChessList := make([]int, 0) AddNewEmit := make([]int, 0) + EmitList := ChessMod.GetEmitList() for _, v := range handle_list { ChessId := int(v.ChessId) EmitId := int(v.Emit) @@ -233,7 +234,6 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa } } - //扣除体力 EnergyPow := BaseMod.GetEnergyMul() ReduceEneny := 0 @@ -245,7 +245,22 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa if err != nil { return err } + NewEmitList := ChessMod.GetEmitList() + EmitProductList := make([]string, 0) + for _, v := range EmitList { + ColorList := mergeDataCfg.GetEmitProduceType(v) + EmitProductList = append(EmitProductList, ColorList...) + } + NewEmitProductList := make([]string, 0) + for _, v := range NewEmitList { + ColorList := mergeDataCfg.GetEmitProduceType(v) + NewEmitProductList = append(NewEmitProductList, ColorList...) + } OrderMod := player.PlayMod.getOrderMod() + if !GoUtil.SlicesEqualString(EmitProductList, NewEmitProductList) { + // 发射器系列变化,重新洗牌 + OrderMod.ResetChessPool() + } Update := OrderMod.CreateExtraOrder(AddChessList, AddNewEmit, ChessMod.GetUnlockChessList(), EnergyPow) if Update { player.PushClientRes(OrderMod.BackData()) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 94430ffc..3ab03891 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -10,12 +10,11 @@ import ( "server/conf" cardCfg "server/conf/card" chargeCfg "server/conf/charge" - decorateCfg "server/conf/decorate" limitedTimeEventCfg "server/conf/limitedTimeEvent" mailCfg "server/conf/mail" mergeDataCfg "server/conf/mergeData" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" - userCfg "server/conf/user" "server/db" "server/game/mod/activity" "server/game/mod/card" @@ -983,30 +982,10 @@ func (player *Player) GetPetOrderItemExp() int { // 弃用 func (player *Player) FormatOrderReward() { - return - Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) - BaseMod := player.PlayMod.getBaseMod() - DecorateMod := player.PlayMod.getDecorateMod() - ExpCoin := (Exp-BaseMod.GetExp())*decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) - BaseMod.GetStar() - PExpCoin := (PExp-BaseMod.GetPExp())*50 - player.GetPetOrderItemExp() OrderMod := player.PlayMod.getOrderMod() - if ExpCoin > PExpCoin || BaseMod.GetLevel() < 6 { - for k, v := range OrderMod.GetOrderList() { - if len(v.Items) != 0 { - continue - } - if v.Type != order.Common_type { - continue - } - Star := order.GetOrderStar(v.MergeId) - v.Items = append(v.Items, &item.Item{ - Id: item.ITEM_STAR_ID, - Num: Star, - }) - OrderMod.OrderList[k] = v - } - return - } + DecorateMod := player.PlayMod.getDecorateMod() + ChessMod := player.PlayMod.getChessMod() + OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) for k, v := range OrderMod.GetOrderList() { if len(v.Items) != 0 { continue @@ -1014,17 +993,40 @@ func (player *Player) FormatOrderReward() { if v.Type != order.Common_type { continue } - Items := make([]*item.Item, 0) Star := order.GetOrderStar(v.MergeId) - Items = player.GetPetOrderReward(Star, Items) - if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { - v.Type = order.Common_type - } else { - v.Type = order.Pet_type - } - v.Items = Items + Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + v.Items = append(v.Items, item.NewItem(item.ITEM_STAR_ID, Star)) OrderMod.OrderList[k] = v } + // 触发式订单 满足条件生成零件订单 + PartCost := DecorateMod.GetPartCost() + PartBag := ChessMod.GetPartBag() + Trigger := true + for _, v := range OrderMod.GetOrderList() { + if v.Type == order.Trigger_type { + Trigger = false + } + } + Trigger2 := false + for k, v := range PartCost { + if v > PartBag[k] { + Trigger2 = true + } + } + if Trigger && Trigger2 { + for k, v := range OrderMod.GetOrderList() { + if v.Type != order.Common_type { + continue + } + if v.Diff == order.DIFF_LOW { + continue + } + v.Items = append(v.Items, item.NewItem(item.ITEM_LAUNCHER_ID, 2)) + v.Type = order.Trigger_type + OrderMod.OrderList[k] = v + break + } + } } func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 4f4ee302..c03d78cc 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -154,7 +154,7 @@ func TriggerComfortOrder(p *Player) { Now := GoUtil.Now() Lv := BaseMod.GetLevel() - if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 6 { + if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 17 { return } OrderMod := p.PlayMod.getOrderMod() diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 089163fe..d9a9b263 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -49,6 +49,7 @@ func UnitOrder(p *Player) error { return err } } + p.FormatOrderReward() return nil } diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 9cdcf102..7b1e360a 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -620,3 +620,11 @@ func (cb *ChessBorad) UpgradeChess(ChessId int) (int, error) { cb.AddChess(NewChess) return NewChess, nil } + +func (cb *ChessBorad) GetPartBag() map[int]int { + res := make(map[int]int) + for k, v := range cb.PartBag.List { + res[k] = v.Num + } + return res +} diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index d9bbf901..b1285430 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -279,3 +279,13 @@ func (d *Decorate) initPartCost(AreaId int) { } } } + +func (d *Decorate) GetPartCost() map[int]int { + res := make(map[int]int) + for _, v := range d.PartCost { + for _, v1 := range v.Items { + res[v1.Id] += v1.Num + } + } + return res +} diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index b79a2763..dea85763 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -21,6 +21,7 @@ const ( ITEM_DIAMOND_ID = 100003 ITEM_FIVE_STAR_CARD_PACK = 100008 ITEM_RACING_BATTERY_ID = 100027 + ITEM_LAUNCHER_ID = 1601 ) const ( diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 54176d20..08f557dc 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -25,6 +25,7 @@ type OrderMod struct { ChessPool []int // 棋子池 OrderPool map[int]*Order // 订单池 FinishOrder []int // 已完成订单 + IsCharge bool // 是否充值 } type Order struct { @@ -207,16 +208,8 @@ func (o *OrderMod) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) } } } - if lv >= 12 { - normalOrder := 0 - for _, v := range o.OrderList { - if v.Type == Common_type { - normalOrder++ - } - } - for i := normalOrder; i < 3; i++ { - o.CreateNormalOrder(lv, Emit, EnergyMul) - } + if lv >= 17 { + o.CreateOrder(lv, Emit, EnergyMul) } return nil } @@ -258,6 +251,19 @@ func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int, Fi if !GoUtil.InStringArray(r2[1], Class) { return false } + case "EmitMax": + Class := []string{} + for _, v := range Emit { + EmitLv := mergeDataCfg.GetLvById(v) + MaxLv := mergeDataCfg.GetMaxLvById(v) + if EmitLv < MaxLv { + continue + } + Class = append(Class, mergeDataCfg.GetColorById(v)) + } + if GoUtil.InStringArray(r2[1], Class) { + return false + } } } return true @@ -486,13 +492,13 @@ func (o *OrderMod) CreateCleanOrder2(ChessList []int) bool { } func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, EnergyMul int) bool { - GetExtraEmitId := mergeDataCfg.GetExtraEmitId() + BeginExtraEmitId := orderCfg.GetEmitExtraOrder() // 从发射器F系列开始 b1 := false OrderEmit := 0 MaxLvChess := make(map[int]int) for _, v := range AddNewEmit { Emit_Id := mergeDataCfg.GetEmitId(v) - _, ok := GetExtraEmitId[Emit_Id] + ok := Emit_Id >= BeginExtraEmitId _, ok1 := o.EimtOrder[Emit_Id] ChessColor := mergeDataCfg.GetEmitProduceChessType(v) if ok && !ok1 && len(ChessColor) > 0 { @@ -589,7 +595,7 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList Lv := mergeDataCfg.GetLvById(vv) Color := mergeDataCfg.GetColorById(vv) EmitId := GetEmitByColor(Emit, Color) - _, Max := getChesslvRange(EmitId, EnergyMul) + _, Max := getChesslvRange(EmitId, EnergyMul, o.IsCharge) Adjust := mergeDataCfg.GetAdjust(EmitId, Color) if Lv >= EnergyMul+1 && Lv <= Max-Adjust { continue @@ -661,3 +667,16 @@ func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, Chess o.addOrder(mergeList, Diff, COMFORT_TYPE) return nil } + +func (o *OrderMod) ResetChessPool() { + o.ChessPool = make([]int, 0) + o.EmitShuffle = nil +} + +func (o *OrderMod) SetIsCharge() { + o.IsCharge = true +} + +func (o *OrderMod) GetIsCharge() bool { + return o.IsCharge +} diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 4c8b3040..38359867 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -12,9 +12,9 @@ var reflectChess = map[int]int{} // 棋子难度映射表 // 订单棋子数量 func getChessNumRand(OrderN int) map[int]int { return map[int]int{ - 1: int(15 - 3*OrderN), - 2: int(50 + OrderN), - 3: int(35 + 2*OrderN), + 1: int(70 - 2*OrderN), + 2: int(25 + OrderN), + 3: int(5 + OrderN), } } @@ -24,21 +24,21 @@ func getOrderDiffRand(Diff, OrderN int) map[int]int { switch Diff { case DIFF_MID: d = map[int]int{ - DIFF_LOW: int(21 - 3*OrderN), - DIFF_MID: int(49 + 1.5*float64(OrderN)), - DIFF_HIGH: int(30 + 1.5*float64(OrderN)), + DIFF_LOW: 21, + DIFF_MID: 49, + DIFF_HIGH: 30, } case DIFF_HIGH: d = map[int]int{ - DIFF_LOW: int(60 - 5*OrderN), - DIFF_MID: int(30 + 3*float64(OrderN)), - DIFF_HIGH: int(10 + 2*float64(OrderN)), + DIFF_LOW: 60, + DIFF_MID: 30, + DIFF_HIGH: 10, } default: d = map[int]int{ - DIFF_LOW: int(10 - OrderN), - DIFF_MID: int(30), - DIFF_HIGH: int(60 + OrderN), + DIFF_LOW: 10, + DIFF_MID: 30, + DIFF_HIGH: 60, } } return d @@ -56,8 +56,8 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { switch OrderDiff { case DIFF_LOW: rand := map[int]int{ - DIFF_LOW: 99 - OrderN, - DIFF_MID: 1 + OrderN, + DIFF_LOW: 99, + DIFF_MID: 1, } secondDiff := GoUtil.RandMap(rand) rs = map[int]int{ @@ -66,8 +66,8 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { } case DIFF_MID: rand := map[int]int{ - DIFF_LOW: 5 + OrderN, - DIFF_MID: 95 - OrderN, + DIFF_LOW: 50, + DIFF_MID: 50, } secondDiff := GoUtil.RandMap(rand) rs = map[int]int{ @@ -76,9 +76,9 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { } case DIFF_HIGH: rand := map[int]int{ - DIFF_LOW: int(95 - 10*OrderN), - DIFF_MID: int(4 + 6*OrderN), - DIFF_HIGH: int(1 + 4*OrderN), + DIFF_LOW: 95, + DIFF_MID: 4, + DIFF_HIGH: 1, } secondDiff := GoUtil.RandMap(rand) rs = map[int]int{ @@ -90,13 +90,13 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { switch OrderDiff { case DIFF_LOW: rand := map[int]int{ - DIFF_LOW: 95 - OrderN, - DIFF_MID: 5 + OrderN, + DIFF_LOW: 95, + DIFF_MID: 5, } secondDiff := GoUtil.RandMap(rand) rand = map[int]int{ - DIFF_LOW: 60 - 4*OrderN, - DIFF_MID: 40 + 4*OrderN, + DIFF_LOW: 70, + DIFF_MID: 30, } thirdDiff := GoUtil.RandMap(rand) rs = map[int]int{ @@ -106,33 +106,33 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { } case DIFF_MID: rand := map[int]int{ - DIFF_LOW: 50 - 3*OrderN, - DIFF_MID: 50 + 3*OrderN, + DIFF_LOW: 95, + DIFF_MID: 5, } secondDiff := GoUtil.RandMap(rand) rand = map[int]int{ - DIFF_MID: 95 - 4*OrderN, - DIFF_HIGH: 5 + 4*OrderN, + DIFF_LOW: 60, + DIFF_MID: 40, } thirdDiff := GoUtil.RandMap(rand) rs = map[int]int{ - 1: DIFF_LOW, + 1: DIFF_MID, 2: secondDiff, 3: thirdDiff, } case DIFF_HIGH: rand := map[int]int{ - DIFF_LOW: int(95 - 10*OrderN), - DIFF_MID: int(5 + 10*OrderN), + DIFF_LOW: 95, + DIFF_MID: 5, } secondDiff := GoUtil.RandMap(rand) rand = map[int]int{ - DIFF_MID: int(95 - 8*OrderN), - DIFF_HIGH: int(5 + 8*OrderN), + DIFF_LOW: 50, + DIFF_MID: 50, } thirdDiff := GoUtil.RandMap(rand) rs = map[int]int{ - 1: DIFF_LOW, + 1: DIFF_HIGH, 2: secondDiff, 3: thirdDiff, } @@ -204,7 +204,7 @@ func RandChessColor(Emit []int) string { } // 获取棋子等级范围 -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) @@ -213,6 +213,11 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) { m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) ChessMinLev := orderCfg.GetLvMin(EnergyMul) ChessMaxLev := orderCfg.GetLvMax(EnergyMul, m) + ProductList := mergeDataCfg.GetEmitProduceType(Emit) + ChessMaxLev = ChessMaxLev - len(ProductList) + 2 + if IsCharge { + ChessMaxLev += 1 + } return ChessMinLev, ChessMaxLev } @@ -445,7 +450,7 @@ func GetOrderStar(ChessList []int) int { } func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { - ChessMinLv, ChessMaxLv := getChesslvRange(EmitId, EnergyMul) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitId, EnergyMul, false) LvRange := getChessLvRange(ChessMinLv, ChessMaxLv, Diff) ChessIds := []int{} for _, v := range LvRange { @@ -486,7 +491,7 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in MinChessColor := mergeDataCfg.GetColorById(MinChessId) NewEmitChessId := GetEmitByColor(Emit, MinChessColor) ColorRand := mergeDataCfg.GetEmitProduceType(NewEmitChessId) - ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul) + ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul, o.IsCharge) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff) MinChessLv := mergeDataCfg.GetLvById(MinChessId) NewLev2 := mergeDataCfg.DynamicLev2(NewLev, NewEmitChessId, ColorRand[0], MinChessColor) @@ -502,7 +507,7 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in return Chess } Color := GoUtil.RandStringSlice(ColorRand) - ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff) NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color) MaxLev := mergeDataCfg.GetMaxLvByColor(Color) @@ -538,7 +543,7 @@ func initReflectChess(Emits []int, EnergyMul int) { if len(ProduceColor) == 0 || ProduceColor[0] == "" { continue } - ChessMinLv, ChessMaxLv := getChesslvRange(Emit, EnergyMul) + ChessMinLv, ChessMaxLv := getChesslvRange(Emit, EnergyMul, false) Product := mergeDataCfg.GetEmitProduceChessType(Emit) Start = ChessMinLv End = ChessMinLv + (ChessMaxLv-ChessMinLv+1)/3 - 1