From c869bfbec2b9888b77f67f31a985d8ad49643041 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:33:45 +0800 Subject: [PATCH 01/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Trigger.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 6e642aa0..ce1b3183 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -2,6 +2,7 @@ package game import ( "encoding/json" + "fmt" "math" "server/GoUtil" "server/MergeConst" @@ -97,6 +98,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token) if err != nil { log.Debug("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token) + GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("GoogleVerify err:%v", err) time.Sleep(1 * time.Second) continue From 9ca619c75cf997dc3595ba20c43cde40e1095b3d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:13:04 +0800 Subject: [PATCH 02/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Trigger.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index ce1b3183..891b89fc 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -98,7 +98,6 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token) if err != nil { log.Debug("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token) - GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("GoogleVerify err:%v", err) time.Sleep(1 * time.Second) continue @@ -112,6 +111,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { } } if OrderData == nil { + GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId) return } From 169078a54551e124eefcbfd9fd33c1c8f858be6f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:17:24 +0800 Subject: [PATCH 03/58] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E7=BA=BF=EF=BC=9A=E5=8F=82=E4=B8=8E=E5=A5=BD=E5=8F=8B=E5=AF=BB?= =?UTF-8?q?=E5=AE=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 1 + src/server/game/RegisterNetworkFunc.go | 7 ++++--- src/server/game/mod/friend/Friend.go | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index be51738c..c815750e 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -264,6 +264,7 @@ func handle(p *Player, m *msg.Msg) error { if m.Extra != nil { Items = m.Extra.([]*item.Item) } + p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT) p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String()) case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励 data := m.Extra.(msg.HandbookMsg) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 7fabdaff..def24724 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -4169,15 +4169,16 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { return err } for _, v := range FriendTreasureMod.List { - if v.Status != 1 { - continue + ItemNum := 0 + if v.Status == 1 { + ItemNum = FriendItemNum } G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: int(v.Uid), Type: MsqMod.FRIEND_TREASURE_HANDLE, SendT: GoUtil.Now(), - Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, FriendItemNum)}, + Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)}, }) } err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendtreasureEnd.String()) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index fe50f5bf..6706c619 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -82,6 +82,7 @@ const ( LOG_TYPE_PLAYROOM_CAT_LOSE = 27 // 小猫游戏,装箱小猫未成功 LOG_TYPE_CARD_GIVE_ACCEPT = 28 // 接受卡牌请求 LOG_TYPE_FRIEND_INVITE = 29 // 邀请注册 + LOG_TYPE_TREASURE_HELP = 30 // 好友宝藏帮助 ) const ( From e0f5d67ee607a89d4e47c8ed7e51238b5df2759f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:07:06 +0800 Subject: [PATCH 04/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mergeData/MergeDataCfg.go | 6 +- src/server/game/UnitTest.go | 6 +- src/server/game/mod/order/Order.go | 11 ++- src/server/game/mod/order/OrderFunc.go | 91 ++++++++++++----------- 4 files changed, 62 insertions(+), 52 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 13d88283..516c2db5 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -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 "" diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 85d74ca2..4b492d16 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -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 diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index e69c5b60..dcf8fb6d 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -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() { diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 9fdc7bd7..20553f7a 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -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 } } From 17bd48f9fd4f4ed6b07bb6c6d7f9dc0e780f970c Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:09:33 +0800 Subject: [PATCH 05/58] =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=BA=BF=E6=B0=94?= =?UTF-8?q?=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/friend/Friend.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 6706c619..730fd0ce 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -275,6 +275,8 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int { f.AddBubble(f.AutoId, Type) case LOG_TYPE_PLAYROOM_UPVOTE: f.AddBubble(f.AutoId, Type) + case LOG_TYPE_TREASURE_HELP: + f.AddBubble(f.AutoId, Type) } if len(f.Log) > 30 { f.Log = f.Log[len(f.Log)-30:] From 9fddde1ec3ef43b749570883609d3c712e29e30d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:46:17 +0800 Subject: [PATCH 06/58] =?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/mod/order/Order.go | 15 +++++++-- src/server/game/mod/order/OrderFunc.go | 43 +++++++++++++++++++------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index dcf8fb6d..8dbec507 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,7 +2,6 @@ package order import ( "fmt" - "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -30,6 +29,7 @@ type OrderMod struct { FinishOrder []int // 已完成订单 IsCharge bool // 是否充值 AutoEmit []string // 自动发射器 + LastChess int // 上次生成订单的棋子 } type Order struct { @@ -433,7 +433,18 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { } break } - log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + // if len(mergeList) == 2 { + // ColorMap := make(map[string]int) + // for _, v := range mergeList { + // Color := mergeDataCfg.GetColorById(v) + // ColorMap[Color]++ + // if ColorMap[Color] > 1 { + // log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + // return fmt.Errorf("订单生成失败,重复颜色") + // } + // } + + // } o.addOrder(mergeList, OrderDiff, Common_type) return nil } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 20553f7a..5b66f03b 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -421,17 +421,17 @@ func ShuffleColor(List []string, Last string) []string { Break := 0 for { Break++ - if Break > 100 { + if Break > 1000 { break } Same := false - List = GoUtil.ShuffleStringArray(List) - if List[0] == Last { + NewList := GoUtil.ShuffleStringArray(List) + if NewList[0] == Last { continue } - for i := 1; i < len(List); i++ { - BeforeSries := mergeDataCfg.GetEmitTypeByColor(List[i-1]) - NowSries := mergeDataCfg.GetEmitTypeByColor(List[i]) + for i := 1; i < len(NewList); i++ { + BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1]) + NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i]) if BeforeSries == NowSries { Same = true break @@ -439,7 +439,27 @@ func ShuffleColor(List []string, Last string) []string { } if !Same { - return List + return NewList + } + } + L1 := make(map[string][]string, 0) + for _, v := range List { + Sries := mergeDataCfg.GetEmitTypeByColor(v) + L1[Sries] = append(L1[Sries], v) + } + List = make([]string, 0) + for _, v := range L1 { + + List = append(List, v[0]) + } + for _, v := range L1 { + if len(v) > 1 { + List = append(List, v[1]) + } + } + for _, v := range L1 { + if len(v) > 2 { + List = append(List, v[2]) } } return List @@ -464,6 +484,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } 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 { @@ -479,7 +500,6 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) } - o.LastColor = PopEmitId return PopEmitId } @@ -515,12 +535,13 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in MinChessId := 0 for i, chess := range o.ChessPool { chessColor := mergeDataCfg.GetColorById(chess) - if reflectChess[chess] > Diff { - MinChessId = chess - } if Color != chessColor { continue } + if reflectChess[chess] > Diff { + MinChessId = chess + } + ChessLv := mergeDataCfg.GetLvById(chess) if reflectChess[chess] == Diff && ChessLv >= EnergyMul+1 && ChessLv <= EnergyMul+12 { o.ChessPool = append(o.ChessPool[:i], o.ChessPool[i+1:]...) From 1d0a1f17b4d8179252cc16fd17287a8151124102 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:51:13 +0800 Subject: [PATCH 07/58] =?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/mod/order/OrderFunc.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 5b66f03b..4572f948 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -552,22 +552,20 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in * 1. 选取最接近的棋子 */ if MinChessId != 0 { - MinChessColor := mergeDataCfg.GetColorById(MinChessId) - NewEmitChessId := GetEmitByColor(Emit, MinChessColor) - ColorRand := mergeDataCfg.GetEmitProduceType(NewEmitChessId) - ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul, o.IsCharge) + ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff) MinChessLv := mergeDataCfg.GetLvById(MinChessId) - NewLev2 := mergeDataCfg.DynamicLev2(NewLev, NewEmitChessId, ColorRand[0], MinChessColor) + NewLev2 := mergeDataCfg.DynamicLev2(NewLev, EmitChessId, ColorRand[0], Color) NewLev3 := adjustLev(NewLev2, EnergyMul) o.ChessPool = GoUtil.DeleteEleByValue(o.ChessPool, MinChessId) for i := NewLev3; i < MinChessLv; i++ { - ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, MinChessColor) + ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, Color) if ChessId2 != 0 { o.ChessPool = append(o.ChessPool, ChessId2) } } - Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, MinChessColor) + Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color) return Chess } ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) From 5b2813d8751aae2229fc14f6a51830fed797c4e7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:55:42 +0800 Subject: [PATCH 08/58] =?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/mod/order/OrderFunc.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 4572f948..f85e8fad 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -462,6 +462,9 @@ func ShuffleColor(List []string, Last string) []string { List = append(List, v[2]) } } + if List[0] == Last { + List[0], List[1] = List[1], List[0] + } return List } From ae5a2e5732c2b7686454d124cd393c3d491fcc03 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 10:50:43 +0800 Subject: [PATCH 09/58] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index c815750e..d4967979 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -846,6 +846,9 @@ func EmitRetireTrigger1(p *Player) { }) OrderMod := p.PlayMod.getOrderMod() OrderMod.Retire(EmitId1[0]) + p.TeLog("launcher_retire", map[string]interface{}{ + "launcher_type": EmitId1[0], + }) ChessMod.BeginRetire(EmitId1[0]) } From d80567c7b78bba67871ed9a7577c63f53121e2a4 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 10:58:16 +0800 Subject: [PATCH 10/58] =?UTF-8?q?=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/friend/Friend.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 730fd0ce..68e4f2bf 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -351,6 +351,9 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) { reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5)) case LOG_TYPE_PLAYROOM_UPVOTE: reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5)) + case LOG_TYPE_TREASURE_HELP: + ItemNum := GoUtil.RandNum(2, 5) + reward = append(reward, item.NewItem(item.ITEM_STAR_ID, ItemNum)) default: return nil, fmt.Errorf("log type not support") } From 119b26b3d923477a7fc0217acdfc5876d01fe6e8 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 11:02:14 +0800 Subject: [PATCH 11/58] =?UTF-8?q?=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/friend/Friend.go | 32 +-- src/server/msg/Gameapi.pb.go | 362 ++++++++++++++------------- 2 files changed, 208 insertions(+), 186 deletions(-) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 68e4f2bf..d9644258 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -24,9 +24,10 @@ type FriendMod struct { } type BubbleInfo struct { - Id int // 气泡ID - Time int64 // 气泡时间 - Type int + Id int // 气泡ID + Time int64 // 气泡时间 + Type int + ItemList []*item.Item // 奖励物品 } type FriendInfo struct { @@ -272,30 +273,34 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int { }) switch Type { case LOG_TYPE_HANDBOOK_UPVOTE: - f.AddBubble(f.AutoId, Type) + f.AddBubble(f.AutoId, Type, nil) case LOG_TYPE_PLAYROOM_UPVOTE: - f.AddBubble(f.AutoId, Type) + f.AddBubble(f.AutoId, Type, nil) case LOG_TYPE_TREASURE_HELP: - f.AddBubble(f.AutoId, Type) + ItemNum := GoUtil.RandNum(2, 5) + ItemList := []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)} + f.AddBubble(f.AutoId, Type, ItemList) } if len(f.Log) > 30 { f.Log = f.Log[len(f.Log)-30:] } return f.AutoId } -func (f *FriendMod) AddBubble(Id, Type int) { +func (f *FriendMod) AddBubble(Id, Type int, ItemList []*item.Item) { f.Bubble[Id] = &BubbleInfo{ - Id: Id, - Time: GoUtil.Now(), - Type: Type, + Id: Id, + Time: GoUtil.Now(), + Type: Type, + ItemList: ItemList, } } func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo { if v, ok := f.Bubble[Id]; ok { return &msg.FriendBubbleInfo{ - Id: int32(v.Id), - Type: int32(v.Type), + Id: int32(v.Id), + Type: int32(v.Type), + Items: item.ItemToMsg(v.ItemList), } } return nil @@ -352,8 +357,7 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) { case LOG_TYPE_PLAYROOM_UPVOTE: reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5)) case LOG_TYPE_TREASURE_HELP: - ItemNum := GoUtil.RandNum(2, 5) - reward = append(reward, item.NewItem(item.ITEM_STAR_ID, ItemNum)) + reward = append(reward, info.ItemList...) default: return nil, fmt.Errorf("log type not support") } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index b714dc98..8c1ec525 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -536,6 +536,7 @@ const ( ORDER_TYPE_Pet_type ORDER_TYPE = 11 // 宠物订单 ORDER_TYPE_Preview_type ORDER_TYPE = 12 // 预览订单 ORDER_TYPE_Fixed_type ORDER_TYPE = 13 // 修复订单 + ORDER_TYPE_Playroom_type ORDER_TYPE = 14 // playroom订单 ) // Enum value maps for ORDER_TYPE. @@ -555,6 +556,7 @@ var ( 11: "Pet_type", 12: "Preview_type", 13: "Fixed_type", + 14: "Playroom_type", } ORDER_TYPE_value = map[string]int32{ "ORDER_TYPE_DEFAULT": 0, @@ -571,6 +573,7 @@ var ( "Pet_type": 11, "Preview_type": 12, "Fixed_type": 13, + "Playroom_type": 14, } ) @@ -682,6 +685,7 @@ const ( TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_LOSE TIME_LINE_TYPE = 27 // 小猫游戏,装箱小猫未成功 TIME_LINE_TYPE_LOG_TYPE_CARD_GIVE_ACCEPT TIME_LINE_TYPE = 28 // 接受卡牌请求 TIME_LINE_TYPE_LOG_TYPE_FRIEND_INVITE TIME_LINE_TYPE = 29 // 邀请注册 + TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 30 // 宠物宝藏帮助 ) // Enum value maps for TIME_LINE_TYPE. @@ -715,6 +719,7 @@ var ( 27: "LOG_TYPE_PLAYROOM_CAT_LOSE", 28: "LOG_TYPE_CARD_GIVE_ACCEPT", 29: "LOG_TYPE_FRIEND_INVITE", + 30: "LOG_TYPE_TREASURE_HELP", } TIME_LINE_TYPE_value = map[string]int32{ "DEFAULT": 0, @@ -745,6 +750,7 @@ var ( "LOG_TYPE_PLAYROOM_CAT_LOSE": 27, "LOG_TYPE_CARD_GIVE_ACCEPT": 28, "LOG_TYPE_FRIEND_INVITE": 29, + "LOG_TYPE_TREASURE_HELP": 30, } ) @@ -3199,7 +3205,7 @@ type ResPlayerChessInfo struct { ChessBag *ChessBag `protobuf:"bytes,3,opt,name=ChessBag,proto3" json:"ChessBag,omitempty"` RetireEmit []string `protobuf:"bytes,4,rep,name=RetireEmit,proto3" json:"RetireEmit,omitempty"` Honor []int32 `protobuf:"varint,5,rep,packed,name=Honor,proto3" json:"Honor,omitempty"` - PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` + PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` // 满级零件 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13189,8 +13195,9 @@ func (x *NotifyFriendLog) GetBubble() *FriendBubbleInfo { type FriendBubbleInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2: + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2: + Items []*ItemInfo `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13239,6 +13246,13 @@ func (x *FriendBubbleInfo) GetType() int32 { return 0 } +func (x *FriendBubbleInfo) GetItems() []*ItemInfo { + if x != nil { + return x.Items + } + return nil +} + type NotifyFriendCard struct { state protoimpl.MessageState `protogen:"open.v1"` Info *ResFriendCard `protobuf:"bytes,1,opt,name=Info,proto3" json:"Info,omitempty"` @@ -26825,10 +26839,11 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x06Upvote\x18\x06 \x01(\bR\x06Upvote\"q\n" + "\x0fNotifyFriendLog\x12*\n" + "\x04info\x18\x01 \x01(\v2\x16.tutorial.ResFriendLogR\x04info\x122\n" + - "\x06Bubble\x18\x02 \x01(\v2\x1a.tutorial.FriendBubbleInfoR\x06Bubble\"6\n" + + "\x06Bubble\x18\x02 \x01(\v2\x1a.tutorial.FriendBubbleInfoR\x06Bubble\"`\n" + "\x10FriendBubbleInfo\x12\x0e\n" + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x12\n" + - "\x04Type\x18\x02 \x01(\x05R\x04Type\"?\n" + + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12(\n" + + "\x05Items\x18\x03 \x03(\v2\x12.tutorial.ItemInfoR\x05Items\"?\n" + "\x10NotifyFriendCard\x12+\n" + "\x04Info\x18\x01 \x01(\v2\x17.tutorial.ResFriendCardR\x04Info\"\x91\x02\n" + "\rResFriendCard\x12\x10\n" + @@ -27843,7 +27858,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x14ACT_TYPE_GUESS_COLOR\x10\x02\x12\x11\n" + "\rACT_TYPE_RACE\x10\x03\x12\x1a\n" + "\x16ACT_TYPE_DISCOUNT_GIFT\x10\x04\x12\x15\n" + - "\x11ACT_TYPE_ADD_GIFT\x10\x05*\x82\x02\n" + + "\x11ACT_TYPE_ADD_GIFT\x10\x05*\x95\x02\n" + "\n" + "ORDER_TYPE\x12\x16\n" + "\x12ORDER_TYPE_DEFAULT\x10\x00\x12\x0f\n" + @@ -27865,13 +27880,14 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\bPet_type\x10\v\x12\x10\n" + "\fPreview_type\x10\f\x12\x0e\n" + "\n" + - "Fixed_type\x10\r*A\n" + + "Fixed_type\x10\r\x12\x11\n" + + "\rPlayroom_type\x10\x0e*A\n" + "\n" + "LOGIN_TYPE\x12\x11\n" + "\rACCOUNT_LOGIN\x10\x00\x12\x0e\n" + "\n" + "CODE_LOGIN\x10\x01\x12\x10\n" + - "\fDEVICE_LOGIN\x10\x02*\x9d\x06\n" + + "\fDEVICE_LOGIN\x10\x02*\xb9\x06\n" + "\x0eTIME_LINE_TYPE\x12\v\n" + "\aDEFAULT\x10\x00\x12\x19\n" + "\x15LOG_TYPE_FRIEND_APPLY\x10\x01\x12\x1a\n" + @@ -27901,7 +27917,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x19LOG_TYPE_PLAYROOM_CAT_WIN\x10\x1a\x12\x1e\n" + "\x1aLOG_TYPE_PLAYROOM_CAT_LOSE\x10\x1b\x12\x1d\n" + "\x19LOG_TYPE_CARD_GIVE_ACCEPT\x10\x1c\x12\x1a\n" + - "\x16LOG_TYPE_FRIEND_INVITE\x10\x1d*\x9b\x01\n" + + "\x16LOG_TYPE_FRIEND_INVITE\x10\x1d\x12\x1a\n" + + "\x16LOG_TYPE_TREASURE_HELP\x10\x1e*\x9b\x01\n" + "\rCHESS_EX_TYPE\x12\x11\n" + "\rCHESS_EX_NONE\x10\x00\x12\x13\n" + "\x0fCHESS_EX_BUBBLE\x10\x01\x12\x10\n" + @@ -28592,169 +28609,170 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 225, // 123: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple 227, // 124: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog 229, // 125: tutorial.NotifyFriendLog.Bubble:type_name -> tutorial.FriendBubbleInfo - 231, // 126: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard - 494, // 127: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry - 2, // 128: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE - 225, // 129: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple - 225, // 130: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple - 2, // 131: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE - 225, // 132: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple - 2, // 133: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE - 246, // 134: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 225, // 135: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple - 231, // 136: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard - 246, // 137: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 2, // 138: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE - 227, // 139: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog - 229, // 140: tutorial.ResFriendBubble.Bubble:type_name -> tutorial.FriendBubbleInfo - 2, // 141: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE - 2, // 142: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE - 225, // 143: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple - 2, // 144: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE - 2, // 145: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE - 225, // 146: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple - 2, // 147: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE - 2, // 148: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE - 495, // 149: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry - 496, // 150: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry - 164, // 151: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo - 273, // 152: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo - 2, // 153: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE - 2, // 154: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE - 2, // 155: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE - 497, // 156: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry - 498, // 157: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry - 499, // 158: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry - 282, // 159: tutorial.ResCharge.Wish:type_name -> tutorial.WishList - 2, // 160: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE - 2, // 161: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE - 2, // 162: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE - 2, // 163: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE - 2, // 164: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE - 500, // 165: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry - 2, // 166: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE - 2, // 167: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE - 501, // 168: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry - 164, // 169: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo - 2, // 170: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE - 2, // 171: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE - 2, // 172: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE - 2, // 173: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE - 2, // 174: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE - 2, // 175: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE - 502, // 176: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry - 503, // 177: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry - 504, // 178: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry - 505, // 179: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry - 506, // 180: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry - 2, // 181: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE - 507, // 182: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry - 508, // 183: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry - 2, // 184: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE - 2, // 185: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE - 509, // 186: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry - 200, // 187: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo - 510, // 188: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry - 511, // 189: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry - 352, // 190: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo - 512, // 191: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry - 350, // 192: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent - 352, // 193: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo - 513, // 194: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry - 514, // 195: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry - 2, // 196: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE - 2, // 197: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE - 358, // 198: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent - 2, // 199: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE - 2, // 200: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE - 164, // 201: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo - 392, // 202: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent - 391, // 203: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom - 515, // 204: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry - 377, // 205: tutorial.ResPlayroom.collect:type_name -> tutorial.PlayroomCollectInfo - 516, // 206: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry - 164, // 207: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo - 387, // 208: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo - 517, // 209: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry - 518, // 210: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry - 519, // 211: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry - 376, // 212: tutorial.ResPlayroom.PetAir:type_name -> tutorial.PlayroomAirInfo - 174, // 213: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask - 389, // 214: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem - 391, // 215: tutorial.ResPlayroom.Target:type_name -> tutorial.FriendRoom - 174, // 216: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask - 2, // 217: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE - 2, // 218: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE - 2, // 219: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE - 2, // 220: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE - 375, // 221: tutorial.PlayroomDress.List:type_name -> tutorial.PlayroomDressInfo - 520, // 222: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry - 2, // 223: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE - 2, // 224: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE - 2, // 225: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE - 164, // 226: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo - 387, // 227: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo - 521, // 228: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry - 522, // 229: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry - 389, // 230: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem - 523, // 231: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry - 524, // 232: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry - 525, // 233: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry - 526, // 234: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry - 527, // 235: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry - 2, // 236: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE - 2, // 237: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE - 2, // 238: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE - 2, // 239: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE - 528, // 240: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry - 164, // 241: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo - 2, // 242: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE - 529, // 243: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry - 2, // 244: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE - 2, // 245: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE - 2, // 246: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE - 2, // 247: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE - 2, // 248: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE - 2, // 249: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE - 2, // 250: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE - 2, // 251: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE - 2, // 252: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE - 427, // 253: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo - 427, // 254: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo - 2, // 255: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE - 2, // 256: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE - 2, // 257: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE - 438, // 258: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem - 164, // 259: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo - 2, // 260: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE - 443, // 261: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame - 225, // 262: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple - 2, // 263: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE - 2, // 264: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE - 2, // 265: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE - 2, // 266: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE - 2, // 267: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE - 2, // 268: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE - 2, // 269: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE - 167, // 270: tutorial.ResGuideTask.TaskEntry.value:type_name -> tutorial.GuideTask - 173, // 271: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek - 174, // 272: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask - 210, // 273: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent - 225, // 274: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple - 273, // 275: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo - 289, // 276: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop - 290, // 277: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop - 301, // 278: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo - 226, // 279: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 226, // 280: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 374, // 281: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress - 164, // 282: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo - 164, // 283: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo - 284, // [284:284] is the sub-list for method output_type - 284, // [284:284] is the sub-list for method input_type - 284, // [284:284] is the sub-list for extension type_name - 284, // [284:284] is the sub-list for extension extendee - 0, // [0:284] is the sub-list for field type_name + 164, // 126: tutorial.FriendBubbleInfo.Items:type_name -> tutorial.ItemInfo + 231, // 127: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard + 494, // 128: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry + 2, // 129: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE + 225, // 130: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple + 225, // 131: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple + 2, // 132: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE + 225, // 133: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple + 2, // 134: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE + 246, // 135: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 225, // 136: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple + 231, // 137: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard + 246, // 138: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 2, // 139: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE + 227, // 140: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog + 229, // 141: tutorial.ResFriendBubble.Bubble:type_name -> tutorial.FriendBubbleInfo + 2, // 142: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE + 2, // 143: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE + 225, // 144: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple + 2, // 145: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE + 2, // 146: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE + 225, // 147: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple + 2, // 148: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE + 2, // 149: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE + 495, // 150: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry + 496, // 151: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry + 164, // 152: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo + 273, // 153: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo + 2, // 154: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE + 2, // 155: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE + 2, // 156: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE + 497, // 157: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry + 498, // 158: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry + 499, // 159: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry + 282, // 160: tutorial.ResCharge.Wish:type_name -> tutorial.WishList + 2, // 161: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE + 2, // 162: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE + 2, // 163: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE + 2, // 164: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE + 2, // 165: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE + 500, // 166: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry + 2, // 167: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE + 2, // 168: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE + 501, // 169: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry + 164, // 170: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo + 2, // 171: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE + 2, // 172: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE + 2, // 173: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE + 2, // 174: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE + 2, // 175: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE + 2, // 176: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE + 502, // 177: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry + 503, // 178: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry + 504, // 179: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry + 505, // 180: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry + 506, // 181: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry + 2, // 182: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE + 507, // 183: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry + 508, // 184: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry + 2, // 185: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE + 2, // 186: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE + 509, // 187: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry + 200, // 188: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo + 510, // 189: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry + 511, // 190: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry + 352, // 191: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo + 512, // 192: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry + 350, // 193: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent + 352, // 194: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo + 513, // 195: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry + 514, // 196: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry + 2, // 197: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE + 2, // 198: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE + 358, // 199: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent + 2, // 200: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE + 2, // 201: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE + 164, // 202: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo + 392, // 203: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent + 391, // 204: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom + 515, // 205: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry + 377, // 206: tutorial.ResPlayroom.collect:type_name -> tutorial.PlayroomCollectInfo + 516, // 207: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry + 164, // 208: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo + 387, // 209: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo + 517, // 210: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry + 518, // 211: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry + 519, // 212: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry + 376, // 213: tutorial.ResPlayroom.PetAir:type_name -> tutorial.PlayroomAirInfo + 174, // 214: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask + 389, // 215: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem + 391, // 216: tutorial.ResPlayroom.Target:type_name -> tutorial.FriendRoom + 174, // 217: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask + 2, // 218: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE + 2, // 219: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE + 2, // 220: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE + 2, // 221: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE + 375, // 222: tutorial.PlayroomDress.List:type_name -> tutorial.PlayroomDressInfo + 520, // 223: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry + 2, // 224: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE + 2, // 225: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE + 2, // 226: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE + 164, // 227: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo + 387, // 228: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo + 521, // 229: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry + 522, // 230: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry + 389, // 231: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem + 523, // 232: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry + 524, // 233: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry + 525, // 234: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry + 526, // 235: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry + 527, // 236: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry + 2, // 237: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE + 2, // 238: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE + 2, // 239: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE + 2, // 240: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE + 528, // 241: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry + 164, // 242: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo + 2, // 243: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE + 529, // 244: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry + 2, // 245: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE + 2, // 246: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE + 2, // 247: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE + 2, // 248: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE + 2, // 249: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE + 2, // 250: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE + 2, // 251: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE + 2, // 252: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE + 2, // 253: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE + 427, // 254: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo + 427, // 255: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo + 2, // 256: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE + 2, // 257: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE + 2, // 258: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE + 438, // 259: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem + 164, // 260: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo + 2, // 261: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE + 443, // 262: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame + 225, // 263: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple + 2, // 264: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE + 2, // 265: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE + 2, // 266: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE + 2, // 267: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE + 2, // 268: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE + 2, // 269: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE + 2, // 270: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE + 167, // 271: tutorial.ResGuideTask.TaskEntry.value:type_name -> tutorial.GuideTask + 173, // 272: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek + 174, // 273: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask + 210, // 274: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent + 225, // 275: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple + 273, // 276: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo + 289, // 277: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop + 290, // 278: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop + 301, // 279: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo + 226, // 280: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 226, // 281: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 374, // 282: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress + 164, // 283: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo + 164, // 284: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo + 285, // [285:285] is the sub-list for method output_type + 285, // [285:285] is the sub-list for method input_type + 285, // [285:285] is the sub-list for extension type_name + 285, // [285:285] is the sub-list for extension extendee + 0, // [0:285] is the sub-list for field type_name } func init() { file_proto_Gameapi_proto_init() } From 3aa1c3543e9e67129495d582497a38217980cdac Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 11:53:18 +0800 Subject: [PATCH 12/58] =?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/conf/mergeData/MergeDataCfg.go | 9 +++++++++ src/server/game/UnitTest.go | 2 +- src/server/game/mod/order/Order.go | 2 ++ src/server/game/mod/order/OrderFunc.go | 14 +++++++++----- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 516c2db5..c8fff722 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -279,6 +279,15 @@ func GetEmitType(Id int) string { return gamedata.ParseString(data["Emit_Type"]) } +func GetEmitN(EmitSeries string) int { + data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, EmitSeries) + if err != nil { + log.Debug("GetEmitN GetOne EmitSeries:%v not found", EmitSeries) + return 0 + } + return gamedata.GetIntValue(data, "N") +} + // 获取常量 func GetConst(Key string) string { data, err := gamedata.GetDataByKey(CONST_NAME, Key) diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 4b492d16..907fc394 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -45,7 +45,7 @@ func UnitOrder(p *Player) error { ChessMod := p.PlayMod.getChessMod() BaseMod := p.PlayMod.getBaseMod() //OrderMod.OrderList = make(map[int]order.Order) - for i := 0; i < 5000; i++ { + for i := 0; i < 100; i++ { //OrderMod.ChessPool = nil //OrderMod.EmitShuffle = nil err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul()) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 8dbec507..0c742af5 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,6 +2,7 @@ package order import ( "fmt" + "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -445,6 +446,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { // } // } + log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) o.addOrder(mergeList, OrderDiff, Common_type) return nil } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index f85e8fad..4a9a53cd 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -242,13 +242,17 @@ func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId) Ratio := mergeDataCfg.GetEmitRatio(EmitId) m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) + EmitN := mergeDataCfg.GetEmitN(EmitId) + ProductList := mergeDataCfg.GetEmitProduceType(Emit) + m = m - (len(ProductList)-2)*10 + m = m - EmitN*10 + if IsCharge { + m += 10 + } + m = max(1, m) + m = min(100, m) 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 } From 0108996dd418bcae287178468d0f48f875467447 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 14:27:38 +0800 Subject: [PATCH 13/58] =?UTF-8?q?=E6=B0=94=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/friend/Friend.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index d9644258..c59119d5 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -310,8 +310,9 @@ func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble { rs := make([]*msg.FriendBubbleInfo, 0, len(f.Bubble)) for _, v := range f.Bubble { rs = append(rs, &msg.FriendBubbleInfo{ - Id: int32(v.Id), - Type: int32(v.Type), + Id: int32(v.Id), + Type: int32(v.Type), + Items: item.ItemToMsg(v.ItemList), }) } return &msg.ResFriendBubble{ From b189bd633c4f323d3a304f76974fea7b46cfeef8 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:02:00 +0800 Subject: [PATCH 14/58] =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index d4967979..8449b092 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -209,7 +209,7 @@ func handle(p *Player, m *msg.Msg) error { Extra := m.Extra.([]int) p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1]), m.SendT) case msg.HANDLE_TYPE_TREASURE_RESULT: // # 好友宝藏结果 - p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT) + //p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT) case msg.HANDLE_TYPE_MAIL: // 邮件操作 SyncMailMsg(p) case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了 From 21cbfd6d8225303b18b06184b9fed36653c288fe Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:37:20 +0800 Subject: [PATCH 15/58] =?UTF-8?q?playroom=E8=A3=85=E9=A5=B0=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/playroom/playroom.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 4f197312..6136dbbf 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -959,7 +959,7 @@ func (p *PlayroomMod) PlayroomDressSet(DressSet map[int]int) ([]int, map[int]int if Id == 0 { continue } - dressInfo, ok := p.NewDress[Type] + dressInfo, ok := p.NewDress[Id] if !ok { return nil, nil, fmt.Errorf("dress type not found") } From e65861c49fa2fa15137960fe8c4041776afd1848 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:29:08 +0800 Subject: [PATCH 16/58] =?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/GoUtil/randUtil.go | 4 +- src/server/game/Gm.go | 2 +- src/server/game/PlayerFunc.go | 121 ++++++++--- src/server/game/RegisterNetworkFunc.go | 3 +- src/server/game/Trigger.go | 25 +-- src/server/game/UnitTest.go | 8 +- src/server/game/mod/item/Item.go | 3 + src/server/game/mod/order/Order.go | 80 ++++---- src/server/game/mod/order/OrderFunc.go | 271 ++++++++++++++++++++++--- 9 files changed, 395 insertions(+), 122 deletions(-) diff --git a/src/server/GoUtil/randUtil.go b/src/server/GoUtil/randUtil.go index a2dcf220..80e5ec4d 100644 --- a/src/server/GoUtil/randUtil.go +++ b/src/server/GoUtil/randUtil.go @@ -7,7 +7,7 @@ import ( func RandMap(d map[int]int) int { if len(d) == 0 { - return -1 + return 0 } total := 0 for _, v := range d { @@ -26,7 +26,7 @@ func RandMap(d map[int]int) int { } // 如果没有找到,返回一个默认值 - return -1 + return 0 } func RandStringMap(d map[string]int) string { diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index c0aeb852..94c861aa 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -196,7 +196,7 @@ func ReqGmCommand_(player *Player, Command string) error { EnergyMul := player.PlayMod.getBaseMod().GetEnergyMul() OrderMod := player.PlayMod.getOrderMod() OrderMod.LastOrder.Type = 1 - OrderMod.CreateOrder(Lv, EmitList, EnergyMul) + OrderMod.CreateOrder(Lv, EmitList, EnergyMul, order.Common_type) player.PushClientRes(player.PlayMod.getOrderMod().BackData()) case "resetCardReq": CardMod := player.PlayMod.getCardMod() diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 8449b092..7599bdae 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -985,8 +985,21 @@ func (player *Player) GetPetOrderItemExp() int { } return playroomCfg.GetPetOrderItemExpByList(itemList) } - -func (player *Player) FormatOrderReward() { +func (player *Player) ClearOrder() { + BaseMod := player.PlayMod.getBaseMod() + OrderMod := player.PlayMod.getOrderMod() + MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) + n := 0 + for _, v := range OrderMod.OrderList { + if v.Type == order.Common_type || v.Type == order.Pet_type || v.Type == order.Part_type { + n++ + } + } + for i := n; i < MaxOrderNum; i++ { + player.CreateNormalOrder() + } +} +func (player *Player) CreateNormalOrder() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) BaseMod := player.PlayMod.getBaseMod() DecorateMod := player.PlayMod.getDecorateMod() @@ -995,28 +1008,45 @@ func (player *Player) FormatOrderReward() { 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() < 17 { - for k, v := range OrderMod.GetOrderList() { - if len(v.Items) != 0 { - continue + + // 预热订单 + if OrderMod.LastOrder.Type == order.Preheat_type { + ChessId := OrderMod.LastOrder.MergeId[0] + ChessColor := mergeDataCfg.GetColorById(ChessId) + PreheatStep := OrderMod.PreheatStep[ChessColor] + if PreheatStep < 4 { + NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) + Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}))} } - if v.Type != order.Common_type { - continue - } - Star := order.GetOrderStar(v.MergeId) - Star = int(float64(Star)*float64(OrderFactor)/10) * 10 - v.Items = append(v.Items, &item.Item{ - Id: item.ITEM_STAR_ID, - Num: Star, - }) - OrderMod.OrderList[k] = v + OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) + OrderMod.PreheatStep[ChessColor]++ + return } - } else { + } + + // 安慰订单 + Now := GoUtil.Now() + if OrderMod.LastOrder.Type == order.COMFORT_TYPE && Now < int64(OrderMod.ComfortEndTime) { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.COMFORT_TYPE) + return + } + + PetTrigger := true + for _, v := range OrderMod.GetOrderList() { + if v.Type == order.Pet_type { + PetTrigger = false + break + } + } + if PExpCoin > ExpCoin && PetTrigger && BaseMod.GetLevel() >= 17 { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Pet_type) for k, v := range OrderMod.GetOrderList() { if len(v.Items) != 0 { continue } - if v.Type != order.Common_type { + if v.Type != order.Pet_type { continue } Items := make([]*item.Item, 0) @@ -1031,7 +1061,45 @@ func (player *Player) FormatOrderReward() { v.Items = Items OrderMod.OrderList[k] = v } + return } + // if ExpCoin > PExpCoin || BaseMod.GetLevel() < 17 { + // for k, v := range OrderMod.GetOrderList() { + // if len(v.Items) != 0 { + // continue + // } + // if v.Type != order.Common_type { + // continue + // } + // Star := order.GetOrderStar(v.MergeId) + // Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + // v.Items = append(v.Items, &item.Item{ + // Id: item.ITEM_STAR_ID, + // Num: Star, + // }) + // OrderMod.OrderList[k] = v + // } + // } else { + // for k, v := range OrderMod.GetOrderList() { + // if len(v.Items) != 0 { + // continue + // } + // if v.Type != order.Common_type { + // continue + // } + // Items := make([]*item.Item, 0) + // Star := order.GetOrderStar(v.MergeId) + // Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + // 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 + // OrderMod.OrderList[k] = v + // } + // } // 触发式订单 满足条件生成零件订单 PartCost := DecorateMod.GetPartCost() @@ -1048,20 +1116,17 @@ func (player *Player) FormatOrderReward() { Trigger2 = true } } - if Trigger && Trigger2 { + if Trigger && Trigger2 && BaseMod.GetLevel() >= 12 { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Part_type) for k, v := range OrderMod.GetOrderList() { - if v.Type != order.Common_type { - continue + if v.Type == order.Part_type { + v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)} + OrderMod.OrderList[k] = v } - if v.Diff == order.DIFF_LOW { - continue - } - v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)} - v.Type = order.Part_type - OrderMod.OrderList[k] = v - break } + return } + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) } func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index def24724..f648f8fb 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -144,7 +144,6 @@ func RegSetEneryFunc(player *Player, buf []byte) error { Emit := player.PlayMod.getChessMod().GetOrderEmit() ChessList := player.PlayMod.getChessMod().GetUnlockChessList() OrderMod.ChangeEnergyMul(Lv, Emit, int(req.EnergyMul), ChessList) - player.FormatOrderReward() player.PushClientRes(OrderMod.BackData()) player.PushClientRes(player.PlayMod.getBaseMod().BackData()) return nil @@ -344,7 +343,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { // OrderMod.CreateOrderSeed(NewOrder) // } OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) - player.FormatOrderReward() + player.CreateNormalOrder() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() PiggyBankMod.Trigger() diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 891b89fc..73797bde 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -157,34 +157,15 @@ func TriggerComfortOrder(p *Player) { Now := GoUtil.Now() Lv := BaseMod.GetLevel() - if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 17 { + if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 23 { return } OrderMod := p.PlayMod.getOrderMod() ChessMod := p.PlayMod.getChessMod() - ChessList := ChessMod.GetUnlockChessList() - TriggerType := 1 - for _, Order := range OrderMod.GetOrderList() { - if GoUtil.IsContain(ChessList, Order.MergeId) { - continue - } - if Order.Diff == order.DIFF_LOW { - return - } - if Order.Diff == order.DIFF_MID { - TriggerType = 2 - } - } + OrderMod.ComfortEndTime = int(Now + 86400) EmitList := ChessMod.GetEmitList() EnergyMul := BaseMod.GetEnergyMul() - if TriggerType == 1 { - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 2) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 3) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_MID, 2) - } else { - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 2) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 3) - } + OrderMod.CreateNormalOrder(BaseMod.GetLevel(), EmitList, EnergyMul, order.COMFORT_TYPE) } func TriggerSeed(player *Player) { diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 907fc394..bd0f2ff1 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -48,12 +48,12 @@ func UnitOrder(p *Player) error { for i := 0; i < 100; i++ { //OrderMod.ChessPool = nil //OrderMod.EmitShuffle = nil - err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul()) + err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) if err != nil { return err } } - p.FormatOrderReward() + p.CreateNormalOrder() NumMap := make(map[int]int) for _, v := range OrderMod.OrderList { NumMap[len(v.MergeId)]++ @@ -235,7 +235,7 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 { // fmt.Println(EmitList) // OrderMod.Debug = make(map[int]int) for i := 0; i < 5000; i++ { - err := OrderMod.CreateNormalOrder(Lv, Emit, EnergyMul) + err := OrderMod.CreateNormalOrder(Lv, Emit, EnergyMul, order.Common_type) log.Debug("OrderMod.CreateNormalOrder %d", i) if err != nil { return 0 @@ -289,7 +289,7 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - p.FormatOrderReward() + p.CreateNormalOrder() return nil } diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 6c6aba66..583584a5 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -22,6 +22,9 @@ const ( ITEM_FIVE_STAR_CARD_PACK = 100008 ITEM_RACING_BATTERY_ID = 100027 ITEM_LAUNCHER_ID = 1602 + ITEM_LAUNCHER_lOW_ID = 1601 + ITEM_ENERGY_GIFT_ID = 562 + ITEM_DIAMOND_LV2_ID = 502 ) const ( diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 0c742af5..4360b65d 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,7 +2,6 @@ package order import ( "fmt" - "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -31,6 +30,8 @@ type OrderMod struct { IsCharge bool // 是否充值 AutoEmit []string // 自动发射器 LastChess int // 上次生成订单的棋子 + NextDiff int // 下次订单难度 + ComfortEndTime int } type Order struct { @@ -43,6 +44,12 @@ type Order struct { Items []*item.Item // 奖励物品 } +var PreheatItems = map[int][]*item.Item{ + 1: {item.NewItem(item.ITEM_ENERGY_GIFT_ID, 1)}, + 2: {item.NewItem(item.ITEM_DIAMOND_LV2_ID, 1)}, + 3: {item.NewItem(item.ITEM_LAUNCHER_lOW_ID, 1)}, +} + const ( Common_type = 1 // 普通订单 Extra_type = 2 // 额外订单 弃用 @@ -228,9 +235,6 @@ func (o *OrderMod) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) } } } - if lv >= 12 { - o.CreateOrder(lv, Emit, EnergyMul) - } return nil } @@ -290,7 +294,7 @@ func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int, Fi } // 生成新订单 -func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error { +func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul, OrderType int) error { if len(Emit) == 0 { return nil } @@ -298,20 +302,8 @@ func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error { if o.CreatePriorityOrder(lv, Emit) { return nil } - MaxOrderNum := orderCfg.GetOrderNum(lv) - n := 0 - for _, v := range o.OrderList { - if v.Type == Common_type || v.Type == Clean_type || v.Type == Pet_type || v.Type == Part_type || v.Type == Fixed_type || v.Type == Preview_type { - n++ - } - } - for i := n; i < MaxOrderNum; i++ { - err := o.CreateNormalOrder(lv, Emit, EnergyMul) - if err != nil { - return err - } - } - return nil + err := o.CreateNormalOrder(lv, Emit, EnergyMul, OrderType) + return err } func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool { @@ -404,7 +396,7 @@ func (o *OrderMod) CreateNormalOrderSeed(lv int, Emit []int, EnergyMul int, Diff } // 生成新订单 -func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { +func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul, OrderType int) error { if len(Emit) == 0 { return nil } @@ -417,7 +409,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { break } randNum++ - mergeList, OrderDiff, err = randOrderChess(o, lv, Emit, EnergyMul) + mergeList, OrderDiff, err = randOrderChess(o, lv, Emit, EnergyMul, OrderType) if err != nil { continue } @@ -446,7 +438,6 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { // } // } - log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) o.addOrder(mergeList, OrderDiff, Common_type) return nil } @@ -485,15 +476,6 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { o.addOrder(mergeList, OrderDiff, Super_type) return nil } -func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { - Order := Order{ - MergeId: ChessList, - Type: Type, - Timestamp: time.Now().Unix(), - Items: Items, - } - o.OrderList[Id] = Order -} func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.Auto_id++ Star := GetOrderStar(ChessList) @@ -515,6 +497,30 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.LastDiff = Diff return o.Auto_id } +func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { + Order := Order{ + MergeId: ChessList, + Type: Type, + Timestamp: time.Now().Unix(), + Items: Items, + } + o.OrderList[Id] = Order +} +func (o *OrderMod) AddPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int { + return o.addPreheatOrder(ChessList, Diff, Type, Items) +} +func (o *OrderMod) addPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int { + o.Auto_id++ + Order := Order{ + MergeId: ChessList, + Diff: Diff, + Type: Type, + Timestamp: time.Now().Unix(), + Items: Items, + } + o.OrderList[o.Auto_id] = Order + return o.Auto_id +} func (o *OrderMod) CreateCleanOrder(ChessList []int) bool { o.addOrder(ChessList, DIFF_LOW, Clean_type) @@ -581,7 +587,8 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ ChessId := mergeDataCfg.GetChessIdByLvAndColor(EnergyMul+1, ChessColor[0]) if ChessId != 0 { o.PreheatStep[ChessColor[0]] = 1 - o.addOrder([]int{ChessId}, DIFF_LOW, Preheat_type) + Items := PreheatItems[1] + o.addPreheatOrder([]int{ChessId}, DIFF_LOW, Preheat_type, Items) } } return b1 || b3 @@ -626,7 +633,6 @@ func (o *OrderMod) CheckSuperOrder() bool { * 根据能量倍数 调整订单 */ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList []int) { - for k, v := range o.OrderList { if v.Type == Preheat_type { // 预热订单 修改倍数时修改棋子等级 ChessId := v.MergeId[0] @@ -637,7 +643,11 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList continue } delete(o.OrderList, k) - o.addOrder([]int{NewChessId}, DIFF_LOW, Preheat_type) + Items, ok := PreheatItems[PreheatStep] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar(ChessList))} + } + o.addPreheatOrder([]int{NewChessId}, DIFF_LOW, Preheat_type, Items) } } @@ -670,7 +680,7 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList */ if NeedTrigger { delete(o.OrderList, k) - o.CreateNormalOrder(lv, Emit, EnergyMul) + o.CreateNormalOrder(lv, Emit, EnergyMul, v.Type) } } } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 4a9a53cd..456ad931 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -1,6 +1,8 @@ package order import ( + "log" + "math" "server/GoUtil" mergeDataCfg "server/conf/mergeData" orderCfg "server/conf/order" @@ -9,6 +11,84 @@ import ( var reflectChess = map[int]int{} // 棋子难度映射表 +var orderCfgMap = map[int]orderConfig{ + 1: { + Min: 15, + Max: 150, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 1}, + 2: {lv: 6, energy: 32, t: 1}, + 3: {lv: 7, energy: 64, t: 1}, + 4: {lv: 8, energy: 128, t: 1}, + }, + }, + 2: { + Min: 20, + Max: 300, + Pool: map[int]orderConfigInfo{ + 2: {lv: 6, energy: 32, t: 1}, + 3: {lv: 7, energy: 64, t: 1}, + 4: {lv: 8, energy: 128, t: 1}, + }, + }, + 3: { + Min: 40, + Max: 400, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 1}, + 2: {lv: 6, energy: 32, t: 1}, + 3: {lv: 7, energy: 64, t: 1}, + 4: {lv: 8, energy: 128, t: 1}, + 5: {lv: 9, energy: 256, t: 1}, + }, + }, + 4: { + Min: 40, + Max: 200, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 0}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 1}, + 4: {lv: 8, energy: 128, t: 1}, + }, + }, + 5: { + Min: 100, + Max: 600, + Pool: map[int]orderConfigInfo{ + 1: {lv: 6, energy: 32, t: 0}, + 2: {lv: 7, energy: 64, t: 0}, + 3: {lv: 8, energy: 128, t: 1}, + 4: {lv: 9, energy: 256, t: 1}, + 5: {lv: 10, energy: 512, t: 1}, + }, + }, + 6: { + Min: 500, + Max: 1200, + Pool: map[int]orderConfigInfo{ + 1: {lv: 6, energy: 32, t: 0}, + 2: {lv: 7, energy: 64, t: 0}, + 3: {lv: 8, energy: 128, t: 1}, + 4: {lv: 9, energy: 256, t: 1}, + 5: {lv: 10, energy: 512, t: 1}, + 6: {lv: 11, energy: 1024, t: 1}, + }, + }, +} + +type orderConfig struct { + Min int + Max int + Pool map[int]orderConfigInfo +} + +type orderConfigInfo struct { + lv int + energy int + t int +} + // 订单棋子数量 func getChessNumRand(OrderN int) map[int]int { return map[int]int{ @@ -19,8 +99,23 @@ func getChessNumRand(OrderN int) map[int]int { } // 根据上一个订单难度和系数 生成订单难度 -func getOrderDiffRand(Diff, OrderN int) map[int]int { +func getOrderDiffRand(Lv, Diff, OrderN int) map[int]int { var d map[int]int + if Lv < 24 { + switch Diff { + case DIFF_MID: + d = map[int]int{ + DIFF_LOW: 50, + DIFF_MID: 50, + } + default: + d = map[int]int{ + DIFF_LOW: 30, + DIFF_MID: 70, + } + } + return d + } switch Diff { case DIFF_MID: d = map[int]int{ @@ -44,6 +139,32 @@ func getOrderDiffRand(Diff, OrderN int) map[int]int { return d } +func getChessByDiff(Lv, Diff, Type int) (int, int, int) { + if Type == Common_type { + switch Diff { + case DIFF_MID: + return 100, 600, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + case DIFF_HIGH: + return 500, 1200, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) + default: + if Lv < 23 { + return 15, 150, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + } + return 30, 200, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + } + } + if Type == Pet_type { + return 40, 200, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + } + if Type == Part_type { + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + } + if Type == COMFORT_TYPE { + return 15, 150, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + } + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) +} + // 根据订单难度生成棋子难度 func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { var rs map[int]int @@ -242,10 +363,6 @@ func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId) Ratio := mergeDataCfg.GetEmitRatio(EmitId) m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) - EmitN := mergeDataCfg.GetEmitN(EmitId) - ProductList := mergeDataCfg.GetEmitProduceType(Emit) - m = m - (len(ProductList)-2)*10 - m = m - EmitN*10 if IsCharge { m += 10 } @@ -341,7 +458,7 @@ func randOrderChessWithDiff(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDif } // 随机生成订单棋子 -func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) { +func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) ([]int, int, error) { initReflectChess(Emit, EnergyMul) filterPool(o) OrderN, err := userCfg.GetOrderNByLv(lv) @@ -351,29 +468,34 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, } // 生成订单难度和棋子数量 ChessNum := GoUtil.RandMap(RandChessNum) - OrderDiffRand := getOrderDiffRand(o.LastDiff, OrderN) + OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN) OrderDiff := GoUtil.RandMap(OrderDiffRand) - ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN) - mergeList := make([]int, 0, len(ChessDiff)) - // 根据订单棋子难度生成棋子 - for _, v := range ChessDiff { - ChessId := 0 - Num := 0 - for { - Num++ - if Num > 50 { - break - } - ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul) - if ChessId == 0 { - continue - } - if !GoUtil.InArray(ChessId, mergeList) { - break - } - } - mergeList = append(mergeList, ChessId) + if o.NextDiff != 0 { + OrderDiff = o.NextDiff + o.NextDiff = 0 } + //获取订单体力范围和棋子数量 + MinEnergy, MaxEnergy, ChessNum := getChessByDiff(lv, OrderDiff, OrderType) + mergeList := getChessFromPoolByEnergy(o, MinEnergy, MaxEnergy, ChessNum, Emit, EnergyMul, OrderDiff) + // // 根据订单棋子难度生成棋子 + // for _, v := range ChessDiff { + // ChessId := 0 + // Num := 0 + // for { + // Num++ + // if Num > 50 { + // break + // } + // ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul) + // if ChessId == 0 { + // continue + // } + // if !GoUtil.InArray(ChessId, mergeList) { + // break + // } + // } + // mergeList = append(mergeList, ChessId) + // } return mergeList, OrderDiff, nil } @@ -532,6 +654,83 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { } return GoUtil.UniqueInts(ChessIds) } +func getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { + rand := []int{} + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy && info.t == 1 { + rand = append(rand, info.lv) + } + } + if len(rand) > 0 { + return GoUtil.RandSlice(rand), true + } + return 6, false + } + } + return 6, false +} + +func getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { + rand := []int{} + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy { + rand = append(rand, info.lv) + } + } + if len(rand) > 0 { + return GoUtil.RandSlice(rand), true + } + return 0, false + } + } + return 0, false +} +func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, Emit []int, EnergyMul, OrderDiff int) []int { + ColorArr := make([]string, 0) + for i := 0; i < ChessNum; i++ { + ColorArr = append(ColorArr, getEmitSeries(o, Emit)) + } + Break := 0 + for { + LastEnergy := 0 + ChessArr := make([]int, 0) + for k, Color := range ColorArr { + EmitChessId := getEmitBySeries(Emit, Color) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) + ChessLv := 0 + ok := false + if len(ColorArr) == 1 { + ChessLv, ok = getChessLvFromConfig1(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + } else { + ChessLv, ok = getChessLvFromConfig2(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + } + LastEnergy += int(math.Pow(2, float64(ChessLv-1))) + if !ok && k == 0 && len(ColorArr) == 1 { + o.NextDiff = OrderDiff + } + NewLev := mergeDataCfg.DynamicLev(ChessLv, EmitChessId, Color) + MaxLev := mergeDataCfg.GetMaxLvByColor(Color) + NewLev = adjustLev(NewLev, EnergyMul) + NewLev = min(NewLev, MaxLev) + Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev, Color) + ChessArr = append(ChessArr, Chess) + } + if Break++; Break > 1000 { + return ChessArr + } + if LastEnergy < MinEnergy || LastEnergy > MaxEnergy { + continue + } + if len(ChessArr) > 0 { + log.Printf("订单棋子能量:%d,范围:%d-%d,棋子:%v", LastEnergy, MinEnergy, MaxEnergy, ChessArr) + return ChessArr + } + } +} // 从棋子池中获取棋子 func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int { @@ -647,7 +846,23 @@ func initReflectChess2(Color string, Start, End, Diff, adjust int) { // 调整棋子等级 func adjustLev(Lev, EnergyMul int) int { - return max(min(Lev, EnergyMul+12), EnergyMul+1) + randMapList := map[int]map[int]int{ + 1: {}, + 2: {0: 30, 1: 70}, + 3: {1: 90, 2: 10}, + 4: {1: 30, 2: 70}, + 5: {2: 40, 3: 60}, + 6: {2: 10, 3: 50, 4: 40}, + 7: {3: 20, 4: 40, 5: 40}, + 8: {4: 40, 5: 60}, + 9: {4: 20, 5: 40, 6: 40}, + 10: {5: 40, 6: 60}, + 11: {5: 20, 6: 70, 7: 10}, + } + if v, ok := randMapList[EnergyMul]; ok { + Lev += GoUtil.RandMap(v) + } + return Lev } // 获取发射器系列 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 17/58] =?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 { From af7afadf295cdb2c6843411bb20d2bf5c499f815 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:10:04 +0800 Subject: [PATCH 18/58] =?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/PlayerFunc.go | 13 +++++++++++-- src/server/game/RegisterNetworkFunc.go | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index a132a3d5..77b39a7e 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1258,6 +1258,7 @@ func (p *Player) GetPetThiefReward(Target int) error { return nil } +// 高级产物订单 func (p *Player) AddHighOrder() { OrderMod := p.PlayMod.getOrderMod() BaseMod := p.PlayMod.getBaseMod() @@ -1300,8 +1301,16 @@ func (p *Player) AddHighOrder() { if NewLev3 <= ChessLv { continue } - OrderMod.AddExtraOrder([]int{ChessId}) - return + Add := true + for _, v := range OrderMod.GetOrderList() { + if GoUtil.InArray(ChessId, v.MergeId) { + Add = false + } + } + if Add { + OrderMod.AddExtraOrder([]int{ChessId}) + return + } } } diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index f648f8fb..8087c6fd 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -344,6 +344,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { // } OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) player.CreateNormalOrder() + player.AddHighOrder() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() PiggyBankMod.Trigger() From 103b70d5e85e9afbb2d83f244b440ea96af32cae Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 16:23:44 +0800 Subject: [PATCH 19/58] =?UTF-8?q?playroom=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/RegisterNetworkFunc.go | 4 ++-- src/server/game/mod/playroom/playroom.go | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 8087c6fd..67bcf149 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -3364,9 +3364,9 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { } RandList = GoUtil.UniqueInts(RandList) if len(RandList) == 0 { - PlayroomMod.SetGameReward(Star, Star, Star) + PlayroomMod.SetGameReward2(Star) } else if len(RandList) == 1 { - PlayroomMod.SetGameReward(RandList[0], Star, Star) + PlayroomMod.SetGameReward1(RandList[0], Star) } else { ChessList := GoUtil.RandSliceNum(RandList, 2) PlayroomMod.SetGameReward(ChessList[0], ChessList[1], Star) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 6136dbbf..7c010c36 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -627,6 +627,16 @@ func (p *PlayroomMod) SetGameReward(Chess1, Chess2, Star int) { p.GameReward[2] = &item.Item{Id: Chess2, Num: 1} p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} } +func (p *PlayroomMod) SetGameReward1(Chess1, Star int) { + p.GameReward[1] = &item.Item{Id: Chess1, Num: 1} + p.GameReward[2] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} + p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} +} +func (p *PlayroomMod) SetGameReward2(Star int) { + p.GameReward[1] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} + p.GameReward[2] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} + p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} +} func (p *PlayroomMod) SetGameRewardFlip(N1, N2, N3 int) { p.GameReward[1] = &item.Item{Id: item.ITEM_STAR_ID, Num: N1} From c87b55d74b9a80e5d5699538d15fe6bf68dcbd3d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 11 Sep 2025 23:21:48 +0800 Subject: [PATCH 20/58] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/RegisterNetworkFunc.go | 4 ++-- src/server/game/mod/playroom/playroom.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 67bcf149..3135a770 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -3364,9 +3364,9 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { } RandList = GoUtil.UniqueInts(RandList) if len(RandList) == 0 { - PlayroomMod.SetGameReward2(Star) + PlayroomMod.SetGameReward3(Star) } else if len(RandList) == 1 { - PlayroomMod.SetGameReward1(RandList[0], Star) + PlayroomMod.SetGameReward2(RandList[0], Star) } else { ChessList := GoUtil.RandSliceNum(RandList, 2) PlayroomMod.SetGameReward(ChessList[0], ChessList[1], Star) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 7c010c36..3847c890 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -627,12 +627,12 @@ func (p *PlayroomMod) SetGameReward(Chess1, Chess2, Star int) { p.GameReward[2] = &item.Item{Id: Chess2, Num: 1} p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} } -func (p *PlayroomMod) SetGameReward1(Chess1, Star int) { +func (p *PlayroomMod) SetGameReward2(Chess1, Star int) { p.GameReward[1] = &item.Item{Id: Chess1, Num: 1} p.GameReward[2] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} } -func (p *PlayroomMod) SetGameReward2(Star int) { +func (p *PlayroomMod) SetGameReward3(Star int) { p.GameReward[1] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} p.GameReward[2] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star} From e5cd774cc8b040d7ddab4395d9e5157fb8a21881 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:06:33 +0800 Subject: [PATCH 21/58] =?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/PlayerFunc.go | 4 ++-- src/server/game/RegisterNetworkFunc.go | 2 +- src/server/game/mod/order/Order.go | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 77b39a7e..b15ac84a 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -985,7 +985,7 @@ func (player *Player) GetPetOrderItemExp() int { } return playroomCfg.GetPetOrderItemExpByList(itemList) } -func (player *Player) ClearOrder() { +func (player *Player) AddOrder() { BaseMod := player.PlayMod.getBaseMod() OrderMod := player.PlayMod.getOrderMod() MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) @@ -1298,7 +1298,7 @@ func (p *Player) AddHighOrder() { NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color) NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul()) ChessLv := mergeDataCfg.GetLvById(ChessId) - if NewLev3 <= ChessLv { + if NewLev3 >= ChessLv { continue } Add := true diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 3135a770..043c0b79 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -343,7 +343,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { // OrderMod.CreateOrderSeed(NewOrder) // } OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) - player.CreateNormalOrder() + player.AddOrder() player.AddHighOrder() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 88b5f7a8..6e70af50 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -438,7 +438,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul, OrderType in // } // } - o.addOrder(mergeList, OrderDiff, Common_type) + o.addOrder(mergeList, OrderDiff, OrderType) return nil } @@ -480,7 +480,7 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.Auto_id++ Star := GetOrderStar(ChessList) Items := make([]*item.Item, 0) - if Type != Common_type && Type != Super_type { + if Type != Super_type { Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} } Order := Order{ From fef69f6edbdcc5d7b90a6960cc4578c70800c02a Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:23:01 +0800 Subject: [PATCH 22/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index b15ac84a..17d22635 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1268,6 +1268,9 @@ func (p *Player) AddHighOrder() { for k := range OrderMod.GetOrderList() { maxId = max(maxId, k) } + if maxId == 0 || BaseMod.GetLevel() < 17 { + return + } NewChess := OrderMod.GetOrderList()[maxId].MergeId[0] LastColor := mergeDataCfg.GetColorById(LastChess) NewColor := mergeDataCfg.GetColorById(NewChess) From d4a7447ae90386d83e85ae3a087b1e8a0477deba Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 19:00:21 +0800 Subject: [PATCH 23/58] =?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/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 17d22635..790a5fbc 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -991,7 +991,7 @@ func (player *Player) AddOrder() { MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) n := 0 for _, v := range OrderMod.OrderList { - if v.Type == order.Common_type || v.Type == order.Pet_type || v.Type == order.Part_type { + if v.Type == order.Common_type || v.Type == order.Pet_type || v.Type == order.Part_type || v.Type == order.Fixed_type || v.Type == order.Preview_type { n++ } } From f064cda204eec9516ddf1b8c4625a21ede2cae63 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 19:09:14 +0800 Subject: [PATCH 24/58] =?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/PlayerFunc.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 790a5fbc..5185449f 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1051,7 +1051,7 @@ func (player *Player) CreateNormalOrder() { } Items := make([]*item.Item, 0) Star := order.GetOrderStar(v.MergeId) - Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 Items = player.GetPetOrderReward(Star, Items) if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { v.Type = order.Common_type @@ -1127,6 +1127,18 @@ func (player *Player) CreateNormalOrder() { return } OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) + for k, v := range OrderMod.GetOrderList() { + if k == OrderMod.Auto_id { + if v.Type != order.Common_type { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId) + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 + v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + OrderMod.OrderList[k] = v + } + } } func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { From 30a9d6c6eb9d58e082cdc30bff8c3de93e8ddfb9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 18 Sep 2025 19:19:32 +0800 Subject: [PATCH 25/58] =?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/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 5185449f..22bb8893 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1116,7 +1116,7 @@ func (player *Player) CreateNormalOrder() { Trigger2 = true } } - if Trigger && Trigger2 && BaseMod.GetLevel() >= 12 { + if Trigger && Trigger2 && BaseMod.GetLevel() >= 17 { OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Part_type) for k, v := range OrderMod.GetOrderList() { if v.Type == order.Part_type { From 687437dcb4f1b7b1d13853cdabdb5a5f6941e745 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:46:37 +0800 Subject: [PATCH 26/58] =?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/PlayerFunc.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 22bb8893..2f9b63c1 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1116,7 +1116,7 @@ func (player *Player) CreateNormalOrder() { Trigger2 = true } } - if Trigger && Trigger2 && BaseMod.GetLevel() >= 17 { + if Trigger && Trigger2 && BaseMod.GetLevel() >= 12 { OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Part_type) for k, v := range OrderMod.GetOrderList() { if v.Type == order.Part_type { @@ -1280,7 +1280,7 @@ func (p *Player) AddHighOrder() { for k := range OrderMod.GetOrderList() { maxId = max(maxId, k) } - if maxId == 0 || BaseMod.GetLevel() < 17 { + if maxId == 0 || BaseMod.GetLevel() < 12 { return } NewChess := OrderMod.GetOrderList()[maxId].MergeId[0] From c1137f6a72e03d51180f5a33d9edb24618e42e7d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:53:58 +0800 Subject: [PATCH 27/58] =?UTF-8?q?=E6=89=93=E7=82=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mergeData/MergeDataCfg.go | 2 +- src/server/game/Player.go | 1 + src/server/game/PlayerBaseMod.go | 2 +- src/server/game/PlayerChessMod.go | 1 + src/server/game/PlayerLog.go | 6 +- src/server/game/RegisterNetworkFunc.go | 68 +++++++++++++------ src/server/game/UnitTest.go | 2 +- src/server/game/mod/decorate/Decorate.go | 4 +- .../mod/friendTreasure.go/friendTreasure.go | 28 +++++--- 9 files changed, 75 insertions(+), 39 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index c8fff722..dc33ca16 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -110,7 +110,7 @@ func GetNameById(Id int) string { log.Debug("MergeDataCfg GetOne Id:%v not found", Id) return "" } - return gamedata.GetStringValue(data, "Icon") + return gamedata.GetStringValue(data, "Title") } // 根据等级和颜色获取棋子id diff --git a/src/server/game/Player.go b/src/server/game/Player.go index e13edcba..fb1653ff 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -796,6 +796,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { PlayroomBackData(p) } } + p.PetItemUseLog(itemList) CardMod := p.PlayMod.getCardMod() p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(ItemMod.NotifyItem()) diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index d43c9625..df922074 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -265,7 +265,7 @@ func (p *PlayerBaseData) ReqUnBindFacebook(player *Player, buf []byte) { G_getGameLogic().PackResInfo(agent, "ResUnBindFacebook", data) p.SaveDataFromDB("") player.TeLog("platform_disconnect", map[string]interface{}{ - "platform_type": "facebook", + "platform_type": "Facebook", "platform_id": req.BindAccountId, }) } diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 45ba81a7..9cee41c3 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -235,6 +235,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa } player.TeLog("sell_item", map[string]interface{}{ "merge_item_id": ChessId, + "product_name": mergeDataCfg.GetNameById(ChessId), "get_star_num": items[0].Num, }) itemList = item.Merge(itemList, items) diff --git a/src/server/game/PlayerLog.go b/src/server/game/PlayerLog.go index f666249e..288a6723 100644 --- a/src/server/game/PlayerLog.go +++ b/src/server/game/PlayerLog.go @@ -27,7 +27,7 @@ func (p *Player) PetItemGetLog(Item []*item.Item, Cost []*item.Item, Label strin CostNum := 0 if len(Cost) > 0 { switch Cost[0].Id { - case item.ITEM_TYPE_DIAMOND: + case item.ITEM_DIAMOND_ID: CostType = "diamond" case item.ITEM_STAR_ID: CostType = "star" @@ -36,7 +36,7 @@ func (p *Player) PetItemGetLog(Item []*item.Item, Cost []*item.Item, Label strin default: CostType = "unknown" } - CostNum = Cost[0].Num + CostNum = -Cost[0].Num } for _, v := range Item { Type := itemCfg.GetItemType(v.Id) @@ -61,7 +61,7 @@ func (p *Player) PetItemGetLog_(Type int, Name string, Label string, CostType st func (p *Player) PetItemUseLog(Item []*item.Item) { for _, v := range Item { Type := itemCfg.GetItemType(v.Id) - if Type == item.ITEM_TYPE_PLAYROOM_PET { + if Type == item.ITEM_TYPE_PLAYROOM_PET && v.Num < 0 { Name, _ := itemCfg.GetItemName(v.Id) Effect := itemCfg.GetItemEffect(v.Id) p.TeLog("pet_item_use", map[string]interface{}{ diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 043c0b79..5e094d6e 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -324,11 +324,27 @@ func ReqRewardOrder(player *Player, buf []byte) error { // 每日任务 player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_FINISHORDER}) + order_star_reward := 0 + order_item_reward := []int{} + for _, v := range Item { + if v.Id == item.ITEM_STAR_ID { + order_star_reward += v.Num + } else { + order_item_reward = append(order_item_reward, v.Id) + } + } + preset_order_group := 0 + if OrderType != order.Preview_type && OrderType != order.Fixed_type { + preset_order_group = -1 + } player.TeLog("order_finish", map[string]interface{}{ - "order_id": int(req.OrderId), - "order_item_id": mergeList, - "order_type": OrderType, - "order_star_reward": Star, + "order_id": int(req.OrderId), + "order_item_id": mergeList, + "order_type": OrderType, + "order_star_reward": order_star_reward, + "order_item_reward": order_item_reward, + "order_star_value": Star, + "preset_order_group": preset_order_group, }) player.PetItemGetLog(Item, nil, "Order") EmitRetireTrigger2(player) @@ -403,7 +419,7 @@ func ReqDecorate(player *Player, buf []byte) error { DecorateMod := player.PlayMod.getDecorateMod() DecorateId := int(req.DecorateId) AreaId := int(req.AreaId) - CostItem, PetExp := DecorateMod.GetDecorateCostItem(AreaId, DecorateId) + CostItem, PetExp, PartItem := DecorateMod.GetDecorateCostItem(AreaId, DecorateId) err := player.HandleLoseItem(CostItem, msg.ITEM_POP_LABEL_DecorateCost.String()) // 扣除道具 if err != nil { player.SendErrClienRes(&msg.ResDecorate{ @@ -451,7 +467,8 @@ func ReqDecorate(player *Player, buf []byte) error { }) } player.TeLog("finish_deco", map[string]interface{}{ - "deco_step_id": fmt.Sprintf("%d_%d", AreaId, DecorateId), + "deco_step_id": fmt.Sprintf("%d_%d", AreaId, DecorateId), + "material_cost": PartItem, }) player.PlayMod.save() @@ -831,9 +848,9 @@ func ReqUpgradeChess(player *Player, buf []byte) error { }) return err } - player.TeLog("ReqUpgradeChess", map[string]interface{}{ - "chess_id": req.ChessId, - "new_chess": NewChess, + player.TeLog("wand_use", map[string]interface{}{ + "wand_item_id": req.ChessId, + "new_chess": NewChess, }) Handbook := player.PlayMod.getHandbookMod() Handbook.SetHandbook(NewChess) @@ -1364,8 +1381,13 @@ func ReqSetFace(player *Player, buf []byte) error { player.PushClientRes(&msg.ResSetFace{ Code: msg.RES_CODE_SUCCESS, }) + is_platform := false + if req.Face == 0 { + is_platform = true + } player.TeLog("face_set", map[string]interface{}{ - "face_id": int(req.Face), + "face_id": int(req.Face), + "is_platform": is_platform, }) player.PlayerDecoSetLog("face", int(req.Face), "") BackUserInfo(player) @@ -2453,7 +2475,7 @@ func ReqBuyChessShop(player *Player, buf []byte) error { "item_id": int(req.Id), "change_num": 1, "cost_type": "diamond", - "cost_num": LostItem[0].Num, + "cost_num": -LostItem[0].Num, }) player.PlayMod.save() player.PushClientRes(ChargeMod.BackData()) @@ -2461,7 +2483,7 @@ func ReqBuyChessShop(player *Player, buf []byte) error { Code: msg.RES_CODE_SUCCESS, }) player.TeLog("buy_product_diamond", map[string]interface{}{ - "diamond_cost": LostItem[0].Num, + "diamond_cost": -LostItem[0].Num, "product_id": int(req.Id), "product_name": mergeDataCfg.GetNameById(int(req.Id)), }) @@ -3435,7 +3457,7 @@ func ReqPlayroomSetRoom(player *Player, buf []byte) error { req := &msg.ReqPlayroomSetRoom{} proto.Unmarshal(buf, req) PlayroomMod := player.PlayMod.getPlayroomMod() - Diff, err := PlayroomMod.SetRoom(GoUtil.MapInt32ToInt(req.Playroom)) + _, err := PlayroomMod.SetRoom(GoUtil.MapInt32ToInt(req.Playroom)) if err != nil { player.SendErrClienRes(&msg.ResPlayroomSetRoom{ Code: msg.RES_CODE_FAIL, @@ -3445,7 +3467,7 @@ func ReqPlayroomSetRoom(player *Player, buf []byte) error { } player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ROOMDEC}) player.PlayMod.save() - player.RoomDecoSetLog(Diff) + //player.RoomDecoSetLog(Diff) player.PushClientRes(&msg.ResPlayroomSetRoom{ Code: msg.RES_CODE_SUCCESS, }) @@ -3466,7 +3488,6 @@ func ReqPlayroomGame(player *Player, buf []byte) error { return fmt.Errorf("no target") } Items := player.GetPlayroomGameReward(int(req.Type), 0) - PlayroomMod.ResetGame() err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String()) if err != nil { player.SendErrClienRes(&msg.ResPlayroomGame{ @@ -3497,6 +3518,7 @@ func ReqPlayroomGame(player *Player, buf []byte) error { "is_chip": false, "item_list": Items, }) + PlayroomMod.ResetGame() PlayroomBackData(player) player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_game") player.PushClientRes(&msg.ResPlayroomGame{ @@ -3547,12 +3569,13 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { player.GetPetThiefReward(Target) } G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) - PlayroomMod.ResetGame() player.TeLog("finish_mini_game", map[string]interface{}{ "mini_game_type": PlayroomMod.GetGameId(), "is_chip": true, "item_list": Items, }) + PlayroomMod.ResetGame() + player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward") PlayroomBackData(player) player.PlayMod.save() @@ -3753,7 +3776,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { }, }) player.TeLog("finish_mini_game", map[string]interface{}{ - "mini_game_type": PlayroomMod.GetGameId(), + "mini_game_type": playroom.GAME_TYPE_FILP, "is_chip": false, "item_list": Items, }) @@ -4191,9 +4214,10 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { ) return err } - player.TeLog("friend_treasure_end", map[string]interface{}{ - "items": Items, - "num": FriendItemNum, + player.TeLog("pet_treasure_open", map[string]interface{}{ + "pet_treasure_step": FriendTreasureMod.Shift, + "pet_treasure_box": FriendTreasureMod.BoxItems, + "pet_treasure_reward": append(Items, FriendTreasureMod.BoxItems...), }) player.PlayMod.save() player.PushClientRes(&msg.ResFriendTreasureEnd{ @@ -4345,7 +4369,7 @@ func ReqPlayroomDressSet(player *Player, buf []byte) error { req := &msg.ReqPlayroomDressSet{} proto.Unmarshal(buf, req) PlayroomMod := player.PlayMod.getPlayroomMod() - Parts, Diff, error := PlayroomMod.PlayroomDressSet(GoUtil.MapInt32ToInt(req.DressSet)) + Parts, _, error := PlayroomMod.PlayroomDressSet(GoUtil.MapInt32ToInt(req.DressSet)) if error != nil { player.SendErrClienRes(&msg.ResPlayroomDressSet{ Code: msg.RES_CODE_FAIL, @@ -4355,7 +4379,7 @@ func ReqPlayroomDressSet(player *Player, buf []byte) error { } player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETDRESS, A: []interface{}{Parts}}) player.PlayMod.save() - player.PetDecoSetLog(Diff) + //player.PetDecoSetLog(Diff) PlayroomBackData(player) player.PushClientRes(&msg.ResPlayroomDressSet{ Code: msg.RES_CODE_SUCCESS, diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index bd0f2ff1..28fba05a 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -301,7 +301,7 @@ func UnitDecoratePartCost(p *Player) error { DecorateMod.PartClassPool = []int{} DecorateMod.PartPool = make(map[int]int) DecorateMod.InitData() - Items, _ := DecorateMod.GetDecorateCostItem(1, 33) + Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33) err := p.HandleLoseItem(Items, "") if err != nil { fmt.Print(err) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 7e99b766..5262ce67 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -75,7 +75,7 @@ func (d *Decorate) GetDecorateAddEnergy(cnt int) []*item.Item { } // 获取装饰消耗 -func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int) { +func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int, []*item.Item) { Item := decorateCfg.GetStarCost(AreaId, DecorateId) PetExp := decorateCfg.GetDecoratePExp(AreaId, DecorateId) Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId) @@ -88,7 +88,7 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, in if len(d.PartCost) == 0 { d.initPartCost(d.AreaId + 1) } - return Items, PetExp + return Items, PetExp, PartItem.Items } func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { diff --git a/src/server/game/mod/friendTreasure.go/friendTreasure.go b/src/server/game/mod/friendTreasure.go/friendTreasure.go index 8fe8f1f4..20aa23cb 100644 --- a/src/server/game/mod/friendTreasure.go/friendTreasure.go +++ b/src/server/game/mod/friendTreasure.go/friendTreasure.go @@ -10,13 +10,14 @@ import ( ) type FriendTreasureMod struct { - Star int // 星级 - Shift int // 挡位 - Pos []int - List map[int]*msg.TreasureInfo - List2 []int32 // 选择的好友 - Uids []int64 - Status int + Star int // 星级 + Shift int // 挡位 + Pos []int + List map[int]*msg.TreasureInfo + List2 []int32 // 选择的好友 + Uids []int64 + Status int + BoxItems []*item.Item } const ( @@ -70,7 +71,11 @@ func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) { ProbMap := friendTreasureCfg.GetChestProb() Prob := GoUtil.RandMap(ProbMap) Info.Status = GAME_STATUS_START - return friendTreasureCfg.GetChestItems(Prob), Info.Uid, nil + Items := friendTreasureCfg.GetChestItems(Prob) + if Items == nil { + f.BoxItems = append(f.BoxItems, Items...) + } + return Items, Info.Uid, nil } Info.Status = GAME_STATUS_START return nil, 0, nil @@ -91,10 +96,15 @@ func (f *FriendTreasureMod) EndGame() ([]*item.Item, int, error) { BigReward := friendTreasureCfg.GetBigReward() Reward = append(Reward, BigReward...) } + + return Reward, FriendItemNum, nil +} + +func (f *FriendTreasureMod) ResetGame() { f.Star = 0 f.Shift = 0 f.Status = GAME_STATUS_END - return Reward, FriendItemNum, nil + f.BoxItems = []*item.Item{} } func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar { From 95a4c869ffe4380efde1c45144b31213dc7d260a Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:09:39 +0800 Subject: [PATCH 28/58] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/guideTask/GuideTaskCfg.go | 25 +++++++ src/server/conf/order/orderCfg.go | 10 +++ src/server/conf/user/UserData.go | 32 +++++++++ src/server/game/PlayerBaseMod.go | 3 + src/server/game/PlayerFunc.go | 66 ++++++++++++++++++- src/server/game/RegisterNetworkFunc.go | 35 +++++----- src/server/game/mod/dailyTask/DailyTask.go | 20 ++++++ .../mod/limitedTimeEvent/LimitedTimeEvent.go | 9 +-- src/server/game/mod/order/Order.go | 3 + src/server/gamedata/type.go | 1 + 10 files changed, 182 insertions(+), 22 deletions(-) diff --git a/src/server/conf/guideTask/GuideTaskCfg.go b/src/server/conf/guideTask/GuideTaskCfg.go index afe2cd18..19a4255a 100644 --- a/src/server/conf/guideTask/GuideTaskCfg.go +++ b/src/server/conf/guideTask/GuideTaskCfg.go @@ -1,6 +1,7 @@ package GuideTaskCfg import ( + "server/GoUtil" "server/game/mod/item" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" @@ -42,6 +43,13 @@ func GetTaskActive(Id int) int { } return gamedata.GetIntValue(data, "Active") } +func GetUnlock(Id int) int { + data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "Unlock") +} func GetActiveReward(Id int) ([]*item.Item, int) { data, err := gamedata.GetDataByIntKey(GUIDE_TASK_ACTIVE, Id) @@ -50,6 +58,23 @@ func GetActiveReward(Id int) ([]*item.Item, int) { } return gamedata.GetItemList(data, "Items"), gamedata.GetIntValue(data, "Active") } +func GetActiveReward2(reward []int, Active int) []*item.Item { + data, err := gamedata.GetData(GUIDE_TASK_ACTIVE) + if err != nil { + return nil + } + for k, v := range data { + active := gamedata.GetIntValue(v, "Active") + if active < Active { + continue + } + if GoUtil.InArray(GoUtil.Int(k), reward) { + continue + } + return gamedata.GetItemList(v, "Items") + } + return nil +} func GetUnlockLv() int { data, err := gamedata.GetDataByKey(GUIDE_TASK_CONST, "UnlockLv") diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index 3cf90b24..bcbfe680 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -81,6 +81,14 @@ func GetOrderNum(Level int) int { return 0 } +func GetStartOrderInfo(Id int) (int, int) { + data, err := gamedata.GetDataByIntKey(CFG_START_ORDER, Id) + if err != nil { + return -1, -1 + } + return gamedata.GetIntValue(data, "group"), gamedata.GetIntValue(data, "step") +} + func GetStartOrderList() []*gamedata.StartOrderData { ret := make([]*gamedata.StartOrderData, 0) data, err := gamedata.GetData(CFG_START_ORDER) @@ -95,6 +103,8 @@ func GetStartOrderList() []*gamedata.StartOrderData { Appear: gamedata.GetStringValue(v, "appear"), Preview: gamedata.GetStringValue(v, "preview"), Items: gamedata.GetItemList(v, "reward"), + Group: gamedata.GetIntValue(v, "group"), + Step: gamedata.GetIntValue(v, "step"), }) } sort.Slice(ret, func(i, j int) bool { diff --git a/src/server/conf/user/UserData.go b/src/server/conf/user/UserData.go index 1c4f6985..465681a9 100644 --- a/src/server/conf/user/UserData.go +++ b/src/server/conf/user/UserData.go @@ -65,6 +65,38 @@ func GetLevUpExp(lv int) (int, int) { return gamedata.GetIntValue(data, "Exp"), gamedata.GetIntValue(data, "PExp") } +func GetNewLevUpExp(lv int, Exp int, PetExt int) (int, int) { + ExpLv := lv + PetLv := lv + for { + data1, err := gamedata.GetDataByIntKey(CFG_NAME, ExpLv) + if err != nil { + break + } + ExpNeed := gamedata.GetIntValue(data1, "Exp") + if Exp >= ExpNeed { + Exp -= ExpNeed + ExpLv++ + } else { + break + } + } + for { + data2, err := gamedata.GetDataByIntKey(CFG_NAME, PetLv) + if err != nil { + break + } + PetNeed := gamedata.GetIntValue(data2, "PExp") + if PetExt >= PetNeed { + PetExt -= PetNeed + PetLv++ + } else { + break + } + } + return ExpLv, PetLv +} + // 获取能量回复时间 func GetRecover(lv int) int { data, err := gamedata.GetDataByIntKey(CFG_NAME, lv) diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index df922074..f6556fd3 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -537,9 +537,12 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.TeLog("level_up", map[string]interface{}{ "after_level": BaseMod.Level, }) + NewExpLv, NewPetLv := userCfg.GetNewLevUpExp(BaseMod.Level, BaseMod.Exp, BaseMod.PExp) player.TeLog("property_level_up", map[string]interface{}{ "property_level": BaseMod.Level, "property_level_reward": userCfg.GetUnlock(int(BaseMod.Level)), + "story_level": NewExpLv, + "pet_level": NewPetLv, }) player.HandleInUserRank() } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 2f9b63c1..ab81cef9 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -75,7 +75,7 @@ func handle(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "invite add friend", + "add_type": "发起申请", }) p.PlayMod.save() case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友 @@ -403,7 +403,7 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "agree", + "add_type": "接受申请", }) p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT) case msg.HANDLE_TYPE_DEL: // 删除好友 @@ -985,6 +985,68 @@ func (player *Player) GetPetOrderItemExp() int { } return playroomCfg.GetPetOrderItemExpByList(itemList) } + +// 触发生成新的固定订单 +func (player *Player) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) error { + OrderMod := player.PlayMod.getOrderMod() + TriggerOrderList := orderCfg.GetStartOrderList() + FixedOrder := 0 + for _, v := range OrderMod.OrderList { + if v.Type == order.Fixed_type { + FixedOrder++ + } + } + OrderList := make(map[int]order.Order, len(OrderMod.OrderList)) + for k, v := range OrderMod.OrderList { + OrderList[k] = v + } + // 触发生成新的固定订单 + for _, v := range TriggerOrderList { + if GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + continue + } + orderInfo, exists := OrderList[v.Id] + if exists && v.Preview == "" { + continue + } + // 预览条件不为空且未存在且未完成 + if v.Preview != "" && !exists && !GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + if OrderMod.CheckCondition(lv, v.Preview, Type, Emit, FixedOrder, OrderList) { + OrderMod.AddFixOrder(v.Id, v.MergeList, order.Preview_type, v.Items) + player.TeLog("preset_order_birth", map[string]interface{}{ + "order_id": v.Id, + "order_item_id": v.MergeList, + "preset_order_group": v.Group, + "preset_order_step": v.Step, + }) + } + } + if v.Appear != "" { + if OrderMod.CheckCondition(lv, v.Appear, Type, Emit, FixedOrder, OrderList) { + Type := order.Fixed_type + OrderType := orderCfg.GetOrderType(v.Id) + if OrderType != 0 { + Type = OrderType + } + if exists { + orderInfo.Type = order.Fixed_type + OrderMod.OrderList[v.Id] = orderInfo + } else { + OrderMod.AddFixOrder(v.Id, v.MergeList, Type, v.Items) + if v.Id == 78 { + OrderMod.Retire("D") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "D") + } + if v.Id == 79 { + OrderMod.Retire("I") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "I") + } + } + } + } + } + return nil +} func (player *Player) AddOrder() { BaseMod := player.PlayMod.getBaseMod() OrderMod := player.PlayMod.getOrderMod() diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 5e094d6e..3fdcf481 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -10,10 +10,12 @@ import ( collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" + GuideTaskCfg "server/conf/guideTask" handbookCfg "server/conf/handbook" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" miningCfg "server/conf/mining" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" "server/db" "server/game/internal" @@ -337,6 +339,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { if OrderType != order.Preview_type && OrderType != order.Fixed_type { preset_order_group = -1 } + preset_order_group, preset_order_step := orderCfg.GetStartOrderInfo(int(req.OrderId)) player.TeLog("order_finish", map[string]interface{}{ "order_id": int(req.OrderId), "order_item_id": mergeList, @@ -345,6 +348,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { "order_item_reward": order_item_reward, "order_star_value": Star, "preset_order_group": preset_order_group, + "preset_order_step": preset_order_step, }) player.PetItemGetLog(Item, nil, "Order") EmitRetireTrigger2(player) @@ -1212,7 +1216,7 @@ func ReqGetDailyTaskReward(player *Player, buf []byte) error { "task_id": int(req.Id), "item_list": itemList, "task_type": "daily", - "task_score_reward": 0, + "task_score_reward": DailyTaskMod.GetWeekReward2(), }) return nil } @@ -1286,9 +1290,11 @@ func ReqGetGuideTaskReward(player *Player, buf []byte) error { }) return err } - player.TeLog("ReqGetGuideTaskReward", map[string]interface{}{ - "task_id": int(req.Id), - "item_list": itemList, + player.TeLog("new_player_task", map[string]interface{}{ + "task_id": int(req.Id), + "item_list": itemList, + "task_gruop": GuideTaskCfg.GetUnlock(int(req.Id)), + "task_score_reward": GuideTaskCfg.GetActiveReward2(GuideTaskMod.Reward, GuideTaskMod.Active), }) player.PlayMod.save() player.PushClientRes(GuideTaskMod.BackData()) @@ -1701,10 +1707,6 @@ func ReqApplyFriend(player *Player, buf []byte) error { BaseMod := player.PlayMod.getBaseMod() PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel()) PlayroomBackData(player) - player.TeLog("friend_add", map[string]interface{}{ - "player_id": Uid, - "add_type": "apply", - }) return nil } @@ -1736,7 +1738,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error { }) player.TeLog("friend_add", map[string]interface{}{ "player_id": Uid, - "add_type": "agree", + "add_type": "接受申请", }) player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) FriendApplyBackData(player) @@ -3026,7 +3028,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3067,7 +3069,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3077,7 +3079,7 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { proto.Unmarshal(buf, req) LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() BaseMod := player.PlayMod.getBaseMod() - Items, EventName, slot_order_number, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) + Items, EventType, OrderNum, RewardList, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) if err != nil { player.SendErrClienRes(&msg.ResSelectLimitEvent{ Code: msg.RES_CODE_FAIL, @@ -3094,9 +3096,9 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { return err } player.TeLog("time_limited_slot", map[string]interface{}{ - "slot_order_number": slot_order_number, - "slot_reward_list": EventName, - "slot_reward": EventName, + "slot_order_number": OrderNum, + "slot_reward_list": RewardList, + "slot_reward": limitedTimeEventCfg.GetEventName(EventType), }) player.PlayMod.save() player.PushClientRes(LimitedTimeEventMod.BackData()) @@ -3916,9 +3918,10 @@ func ReqPlayroomTask(player *Player, buf []byte) error { }) return err } + Type := playroomCfg.GetDailyTaskType(int(req.Id)) player.TeLog("room_daily_task", map[string]interface{}{ "task_id": req.Id, - "is_reward": PlayroomMod.DailyTaskCanReward(int(req.Id)), + "is_reward": PlayroomMod.DailyTaskCanReward(Type), }) player.PlayMod.save() player.PushClientRes(&msg.ResPlayroomTask{ diff --git a/src/server/game/mod/dailyTask/DailyTask.go b/src/server/game/mod/dailyTask/DailyTask.go index 3d3695fa..f4d99c5c 100644 --- a/src/server/game/mod/dailyTask/DailyTask.go +++ b/src/server/game/mod/dailyTask/DailyTask.go @@ -192,3 +192,23 @@ func (dt *DailyTaskMod) GetWeekReward(id int) ([]*item.Item, error) { } return nil, fmt.Errorf("task not finish") } + +func (dt *DailyTaskMod) GetWeekReward2() []*item.Item { + max := 0 + for id := range dt.WeekReward { + if id > max { + max = id + } + } + max++ + if v, ok := dt.WeekReward[max]; ok { + NeedActive := dailyTaskCfg.GetTaskActiveById(max) + if dt.Active < NeedActive { + return nil + } + if !v.Status { + return v.Items + } + } + return nil +} diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index cec1ef61..e53c9efa 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -350,13 +350,14 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) { } // 选择进度奖励 -func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, error) { +func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, map[int]int, error) { RewardId, ok := l.ProgressReward[Id] + RewardList := l.ProgressReward if !ok { - return nil, 0, 0, fmt.Errorf("RewardId not exist") + return nil, 0, 0, nil, fmt.Errorf("RewardId not exist") } - r2 := l.ProgressMax Item := limitedTimeEventCfg.GetProgressReward(RewardId) + OrderNum := l.ProgressMax l.LastSelect = RewardId l.ProgressReward = make(map[int]int) l.Progress = 0 @@ -389,7 +390,7 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item. } l.LastOption = r l.FirstReward = true - return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), r2, nil + return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), OrderNum, RewardList, nil } func (l *LimitedTimeEventMod) RemoveSuperOrder() bool { diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 6e70af50..6df55534 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -500,6 +500,9 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { 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) { + o.addFixOrder(Id, ChessList, Type, Items) +} func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { Order := Order{ MergeId: ChessList, diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index ad0d2338..17400eac 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -24,6 +24,7 @@ type StartOrderData struct { Step int `json:"step"` Appear string `json:"appear"` Preview string `json:"preview"` + Group int `json:"group"` Items []*item.Item } From 2b427c7f2394a32a253a7491c4d1c865df5d4c10 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:04:32 +0800 Subject: [PATCH 29/58] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/decorate/Decorate.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 5262ce67..54867726 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -81,14 +81,16 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, in Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId) Items := []*item.Item{item.NewItem(item.ITEM_STAR_ID, Item)} PartItem := d.PartCost[Id] + PartItemList := make([]*item.Item, 0) if PartItem != nil { Items = append(Items, PartItem.Items...) + PartItemList = PartItem.Items delete(d.PartCost, Id) } if len(d.PartCost) == 0 { d.initPartCost(d.AreaId + 1) } - return Items, PetExp, PartItem.Items + return Items, PetExp, PartItemList } func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { From 237a4c8d61d5d68ba5114e6f330f62db956805d2 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:04:32 +0800 Subject: [PATCH 30/58] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/decorate/Decorate.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 5262ce67..54867726 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -81,14 +81,16 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, in Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId) Items := []*item.Item{item.NewItem(item.ITEM_STAR_ID, Item)} PartItem := d.PartCost[Id] + PartItemList := make([]*item.Item, 0) if PartItem != nil { Items = append(Items, PartItem.Items...) + PartItemList = PartItem.Items delete(d.PartCost, Id) } if len(d.PartCost) == 0 { d.initPartCost(d.AreaId + 1) } - return Items, PetExp, PartItem.Items + return Items, PetExp, PartItemList } func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { From 849a75709c4b6eeb4de2da0b13e44153b46cd560 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 16:23:18 +0800 Subject: [PATCH 31/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index ab81cef9..8c90b754 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1052,6 +1052,20 @@ func (player *Player) AddOrder() { OrderMod := player.PlayMod.getOrderMod() MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) n := 0 + if OrderMod.LastOrder.Type == order.Preheat_type { + ChessId := OrderMod.LastOrder.MergeId[0] + ChessColor := mergeDataCfg.GetColorById(ChessId) + PreheatStep := OrderMod.PreheatStep[ChessColor] + if PreheatStep < 4 { + NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) + Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}))} + } + OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) + OrderMod.PreheatStep[ChessColor]++ + } + } for _, v := range OrderMod.OrderList { if v.Type == order.Common_type || v.Type == order.Pet_type || v.Type == order.Part_type || v.Type == order.Fixed_type || v.Type == order.Preview_type { n++ @@ -1072,21 +1086,6 @@ func (player *Player) CreateNormalOrder() { OrderMod := player.PlayMod.getOrderMod() // 预热订单 - if OrderMod.LastOrder.Type == order.Preheat_type { - ChessId := OrderMod.LastOrder.MergeId[0] - ChessColor := mergeDataCfg.GetColorById(ChessId) - PreheatStep := OrderMod.PreheatStep[ChessColor] - if PreheatStep < 4 { - NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) - Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] - if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}))} - } - OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) - OrderMod.PreheatStep[ChessColor]++ - return - } - } // 安慰订单 Now := GoUtil.Now() From f14a49e072ac9c42ca5ae59dd11fc5606fcfdaac Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:32:16 +0800 Subject: [PATCH 32/58] =?UTF-8?q?=E6=A3=8B=E5=AD=90=E5=95=86=E5=BA=97bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Player.go | 7 ++++- src/server/game/UnitTest.go | 4 ++- src/server/game/mod/charge/Charge.go | 6 ++++ src/server/game/mod/order/OrderFunc.go | 40 ++++++++++++++++++++------ 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index fb1653ff..b8d580f3 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -275,6 +275,10 @@ func (p *Player) InitPlayer(UserName string) error { // GoUtil.RegisterEvent(MergeConst.Notify_Midday_Renew, p.ZeroUpdate, p) SyncFriendMsg(p) p.UpdateUserInfo() + // fix bug + ChargeMod := p.PlayMod.getChargeMod() + ChessMod := p.PlayMod.getChessMod() + ChargeMod.FixBug(ChessMod.GetEmitList()) return nil } @@ -310,7 +314,8 @@ func (p *Player) ZeroUpdate(a []interface{}) { // 礼包充值 ChessMod := p.PlayMod.getChessMod() - p.PlayMod.getChargeMod().ZeroUpdate(ChessMod.GetEmitList()) + ChargeMod := p.PlayMod.getChargeMod() + ChargeMod.ZeroUpdate(ChessMod.GetEmitList()) p.PushClientRes(p.PlayMod.getChargeMod().BackData()) // 无尽礼包 diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 28fba05a..dfe3c02d 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -289,7 +289,9 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - p.CreateNormalOrder() + VarMod := p.PlayMod.getVarMod() + VarMod.DailyResetTime = 0 + p.ZeroUpdate(nil) return nil } diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 0f7b41dd..ccf279f2 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -132,6 +132,12 @@ func (c *ChargeMod) NoonUpdate(Emit []int) { c.InitChessShop(Emit) } +func (c *ChargeMod) FixBug(Emit []int) { + if len(c.ChessShop) < 6 { + c.InitChessShop(Emit) + } +} + // 充值 func (c *ChargeMod) Fire(ChargeId int) (Item []*item.Item) { Money := chargeCfg.GetMoneyCharge(ChargeId) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index a4e73c5f..26a4367f 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -315,14 +315,38 @@ func getChessLv(Min, Max, Diff int) int { func getChessLvRange(Min, Max, Diff int) []int { Start := Min End := Max - switch Diff { - case DIFF_LOW: - End = Min + (Max-Min+1)/3 - 1 - case DIFF_MID: - Start = Min + (Max-Min+1)/3 - End = Min + (Max-Min+1)/3*2 - 1 - case DIFF_HIGH: - Start = Min + (Max-Min+1)/3*2 + if Max-Min >= 5 { + switch Diff { + case DIFF_LOW: + End = Min + (Max-Min+1)/3 - 1 + case DIFF_MID: + Start = Min + (Max-Min+1)/3 + End = Min + (Max-Min+1)/3*2 - 1 + case DIFF_HIGH: + Start = Min + (Max-Min+1)/3*2 + } + } + if Max-Min == 4 { + switch Diff { + case DIFF_LOW: + End = Min + 1 + case DIFF_MID: + Start = Min + 2 + End = Min + 3 + case DIFF_HIGH: + Start = Min + 4 + } + } + if Max-Min == 3 { + switch Diff { + case DIFF_LOW: + End = Min + 1 + case DIFF_MID: + Start = Min + 2 + End = Min + 2 + case DIFF_HIGH: + Start = Min + 3 + } } Start = max(Min, Start) End = max(Start, End) From 1dcc9e2154b08fbc3bc71549b083ab6f92d0b6ea Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 17:32:16 +0800 Subject: [PATCH 33/58] =?UTF-8?q?=E6=A3=8B=E5=AD=90=E5=95=86=E5=BA=97bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Player.go | 7 ++++- src/server/game/UnitTest.go | 4 ++- src/server/game/mod/charge/Charge.go | 6 ++++ src/server/game/mod/order/OrderFunc.go | 40 ++++++++++++++++++++------ 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index fb1653ff..b8d580f3 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -275,6 +275,10 @@ func (p *Player) InitPlayer(UserName string) error { // GoUtil.RegisterEvent(MergeConst.Notify_Midday_Renew, p.ZeroUpdate, p) SyncFriendMsg(p) p.UpdateUserInfo() + // fix bug + ChargeMod := p.PlayMod.getChargeMod() + ChessMod := p.PlayMod.getChessMod() + ChargeMod.FixBug(ChessMod.GetEmitList()) return nil } @@ -310,7 +314,8 @@ func (p *Player) ZeroUpdate(a []interface{}) { // 礼包充值 ChessMod := p.PlayMod.getChessMod() - p.PlayMod.getChargeMod().ZeroUpdate(ChessMod.GetEmitList()) + ChargeMod := p.PlayMod.getChargeMod() + ChargeMod.ZeroUpdate(ChessMod.GetEmitList()) p.PushClientRes(p.PlayMod.getChargeMod().BackData()) // 无尽礼包 diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 073036a1..4a3773be 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -289,7 +289,9 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - p.FormatOrderReward() + VarMod := p.PlayMod.getVarMod() + VarMod.DailyResetTime = 0 + p.ZeroUpdate(nil) return nil } diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 0f7b41dd..ccf279f2 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -132,6 +132,12 @@ func (c *ChargeMod) NoonUpdate(Emit []int) { c.InitChessShop(Emit) } +func (c *ChargeMod) FixBug(Emit []int) { + if len(c.ChessShop) < 6 { + c.InitChessShop(Emit) + } +} + // 充值 func (c *ChargeMod) Fire(ChargeId int) (Item []*item.Item) { Money := chargeCfg.GetMoneyCharge(ChargeId) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 4a9a53cd..207ac673 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -194,14 +194,38 @@ func getChessLv(Min, Max, Diff int) int { func getChessLvRange(Min, Max, Diff int) []int { Start := Min End := Max - switch Diff { - case DIFF_LOW: - End = Min + (Max-Min+1)/3 - 1 - case DIFF_MID: - Start = Min + (Max-Min+1)/3 - End = Min + (Max-Min+1)/3*2 - 1 - case DIFF_HIGH: - Start = Min + (Max-Min+1)/3*2 + if Max-Min >= 5 { + switch Diff { + case DIFF_LOW: + End = Min + (Max-Min+1)/3 - 1 + case DIFF_MID: + Start = Min + (Max-Min+1)/3 + End = Min + (Max-Min+1)/3*2 - 1 + case DIFF_HIGH: + Start = Min + (Max-Min+1)/3*2 + } + } + if Max-Min == 4 { + switch Diff { + case DIFF_LOW: + End = Min + 1 + case DIFF_MID: + Start = Min + 2 + End = Min + 3 + case DIFF_HIGH: + Start = Min + 4 + } + } + if Max-Min == 3 { + switch Diff { + case DIFF_LOW: + End = Min + 1 + case DIFF_MID: + Start = Min + 2 + End = Min + 2 + case DIFF_HIGH: + Start = Min + 3 + } } Start = max(Min, Start) End = max(Start, End) From e11c24cc3437083b1c01e8edb0b5644cbad96586 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 19 Sep 2025 18:21:34 +0800 Subject: [PATCH 34/58] =?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/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 8c90b754..99e26c8e 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1058,12 +1058,12 @@ func (player *Player) AddOrder() { PreheatStep := OrderMod.PreheatStep[ChessColor] if PreheatStep < 4 { NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) + OrderMod.PreheatStep[ChessColor]++ Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] if !ok { Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}))} } OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) - OrderMod.PreheatStep[ChessColor]++ } } for _, v := range OrderMod.OrderList { From dddf7d39533b074ce9224d25f5e5ad917c01a810 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:56:35 +0800 Subject: [PATCH 35/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mergeData/MergeDataCfg.go | 24 +++++++++++++++++- src/server/conf/order/orderCfg.go | 12 +++++++++ src/server/game/PlayerFunc.go | 31 +++++++++++++++++++---- src/server/game/UnitTest.go | 6 ++--- src/server/game/mod/order/Order.go | 9 ++----- src/server/game/mod/order/OrderFunc.go | 11 ++++++-- 6 files changed, 75 insertions(+), 18 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index dc33ca16..8f2f34cf 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -377,7 +377,29 @@ func GetHighSourceChestItem() []*item.Item { r = append(r, item.NewItem(item.ITEM_ENERGY_ID, B4)) return r } - +func DynamicLevRev(Lv int, EmitId int, Color string) int { + data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId) + if err != nil { + log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId) + return Lv + } + DynamicLv := gamedata.GetStringValue(data, "Dynamic") + if DynamicLv == "" { + return Lv + } + Arr := strings.Split(DynamicLv, ",") + for _, v := range Arr { + Arr2 := strings.Split(v, "=") + if len(Arr2) != 2 { + continue + } + if Color == Arr2[0] { + NewLv, _ := strconv.Atoi(Arr2[1]) + return Lv + NewLv + } + } + return Lv +} func DynamicLev(Lv int, EmitId int, Color string) int { data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId) if err != nil { diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index bcbfe680..b786ee05 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -13,6 +13,7 @@ const ( CFG_START_ORDER = "StartOrder" CFG_CONST = "OrderConst" CFG_ORDER_SCENE = "OrderScene" + CFG_ORDER_K = "OrderK" ) func init() { @@ -22,6 +23,17 @@ func init() { gamedata.InitCfg(CFG_START_ORDER) gamedata.InitCfg(CFG_CONST) gamedata.InitCfg(CFG_ORDER_SCENE) + gamedata.InitCfg(CFG_ORDER_K) +} + +func GetOrderK(Lv int) int { + data, err := gamedata.GetDataByIntKey(CFG_ORDER_K, Lv) + if err != nil { + return 0 + } + Energy := gamedata.GetIntValue(data, "Energy") + K := gamedata.GetFloatValue(data, "K") + return int(float64((Energy/10)*10) * K) } func GetOrderFactor(Scene int) int { diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 99e26c8e..e86bc0e9 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -103,7 +103,10 @@ func handle(p *Player, m *msg.Msg) error { p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(CardMod.NotifyTimes()) case msg.HANDLE_TYPE_EX_CARD_TIMEOUT: // B收到A同意置换卡牌超时 - CardInfo := m.Extra.(card.CardInfo) + CardInfo, ok := m.Extra.(card.CardInfo) + if !ok { + return nil + } CardMod := p.PlayMod.getCardMod() p.AddCard(CardInfo.ExId) p.PushClientRes(CardMod.NotifyCard()) @@ -267,7 +270,13 @@ func handle(p *Player, m *msg.Msg) error { p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT) p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String()) case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励 - data := m.Extra.(msg.HandbookMsg) + if m.Extra != nil { + return nil + } + data, ok := m.Extra.(msg.HandbookMsg) + if !ok { + return nil + } p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type, m.SendT) case msg.HANDLE_TYPE_HANDBOOK_UPVOTE: // 图鉴点赞 FriendMod := p.PlayMod.getFriendMod() @@ -1050,6 +1059,7 @@ func (player *Player) TriggerOrder(lv int, Type string, Emit []int, EnergyMul in func (player *Player) AddOrder() { BaseMod := player.PlayMod.getBaseMod() OrderMod := player.PlayMod.getOrderMod() + ChessMod := player.PlayMod.getChessMod() MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) n := 0 if OrderMod.LastOrder.Type == order.Preheat_type { @@ -1061,7 +1071,7 @@ func (player *Player) AddOrder() { OrderMod.PreheatStep[ChessColor]++ Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}))} + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} } OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) } @@ -1074,6 +1084,17 @@ func (player *Player) AddOrder() { for i := n; i < MaxOrderNum; i++ { player.CreateNormalOrder() } + for k, v := range OrderMod.OrderList { + if v.Type == order.Super_type { + continue + } + if len(v.Items) > 0 { + continue + } + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + v.Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} + OrderMod.OrderList[k] = v + } } func (player *Player) CreateNormalOrder() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) @@ -1111,7 +1132,7 @@ func (player *Player) CreateNormalOrder() { continue } Items := make([]*item.Item, 0) - Star := order.GetOrderStar(v.MergeId) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 Items = player.GetPetOrderReward(Star, Items) if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { @@ -1194,7 +1215,7 @@ func (player *Player) CreateNormalOrder() { continue } Items := make([]*item.Item, 0) - Star := order.GetOrderStar(v.MergeId) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) OrderMod.OrderList[k] = v diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index dfe3c02d..bd84afb1 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -289,9 +289,9 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - VarMod := p.PlayMod.getVarMod() - VarMod.DailyResetTime = 0 - p.ZeroUpdate(nil) + ChessMod := p.PlayMod.getChessMod() + a := order.GetOrderStar([]int{246, 15}, ChessMod.GetOrderEmit()) + fmt.Print(a) return nil } diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 6df55534..5581041a 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -478,17 +478,12 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { } func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { o.Auto_id++ - Star := GetOrderStar(ChessList) - Items := make([]*item.Item, 0) - if Type != Super_type { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} - } Order := Order{ MergeId: ChessList, Diff: Diff, Type: Type, Timestamp: time.Now().Unix(), - Items: Items, + Items: nil, } o.OrderList[o.Auto_id] = Order if Type == Common_type { @@ -651,7 +646,7 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList delete(o.OrderList, k) Items, ok := PreheatItems[PreheatStep] if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar(ChessList))} + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar(ChessList, Emit))} } o.addPreheatOrder([]int{NewChessId}, DIFF_LOW, Preheat_type, Items) } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 26a4367f..b8dfb1e2 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -657,10 +657,17 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } // 订单能获取的宠物币 -func GetOrderStar(ChessList []int) int { +func GetOrderStar(ChessList []int, EmitList []int) int { Star := 0 for _, v := range ChessList { - Star += mergeDataCfg.GetStarById(v) + ChessLv := mergeDataCfg.GetLvById(v) + Color := mergeDataCfg.GetColorById(v) + EmitId := GetEmitByColor(EmitList, Color) + if EmitId == 0 { + continue + } + NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color) + Star += orderCfg.GetOrderK(NewChessLv) } return Star } From 6c78877c6a7b4870c08aaf016ea9350edda0bb57 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Sep 2025 14:12:48 +0800 Subject: [PATCH 36/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 12 +++++++++ src/server/game/UnitTest.go | 18 ++++++++++++- src/server/game/mod/order/OrderFunc.go | 35 +++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index e86bc0e9..ab3828cc 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1112,6 +1112,18 @@ func (player *Player) CreateNormalOrder() { Now := GoUtil.Now() if OrderMod.LastOrder.Type == order.COMFORT_TYPE && Now < int64(OrderMod.ComfortEndTime) { OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.COMFORT_TYPE) + for k, v := range OrderMod.GetOrderList() { + if k == OrderMod.Auto_id { + if v.Type != order.COMFORT_TYPE { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 + v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + OrderMod.OrderList[k] = v + } + } return } diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index bd84afb1..e6b8d615 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -5,6 +5,7 @@ import ( "math" mergeDataCfg "server/conf/mergeData" "server/game/mod/decorate" + "server/game/mod/item" "server/game/mod/order" "server/game/mod/quest" "server/msg" @@ -52,8 +53,22 @@ func UnitOrder(p *Player) error { if err != nil { return err } + for k, v := range OrderMod.OrderList { + if v.Type == order.Super_type { + continue + } + if len(v.Items) > 0 { + continue + } + if v.Diff == 0 { + continue + } + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + v.Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} + OrderMod.OrderList[k] = v + fmt.Printf("OrderId %d, Diff %d, MergeId %v, Star %d\n", k, v.Diff, v.MergeId, Star) + } } - p.CreateNormalOrder() NumMap := make(map[int]int) for _, v := range OrderMod.OrderList { NumMap[len(v.MergeId)]++ @@ -289,6 +304,7 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { + p.AddOrder() ChessMod := p.PlayMod.getChessMod() a := order.GetOrderStar([]int{246, 15}, ChessMod.GetOrderEmit()) fmt.Print(a) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index b8dfb1e2..d1ee9a69 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -704,6 +704,23 @@ func getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) ( } func getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { + rand := []int{} + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv { + rand = append(rand, info.lv) + } + } + if len(rand) > 0 { + return GoUtil.RandSlice(rand), true + } + return 0, false + } + } + return 0, false +} +func getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { rand := []int{} for _, v := range orderCfgMap { if MinEnergy >= v.Min && MaxEnergy <= v.Max { @@ -737,7 +754,11 @@ func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, E if len(ColorArr) == 1 { ChessLv, ok = getChessLvFromConfig1(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) } else { - ChessLv, ok = getChessLvFromConfig2(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + if k == 0 { + ChessLv, ok = getChessLvFromConfig2(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + } else { + ChessLv, ok = getChessLvFromConfig3(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + } } LastEnergy += int(math.Pow(2, float64(ChessLv-1))) if !ok && k == 0 && len(ColorArr) == 1 { @@ -745,11 +766,17 @@ func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, E } NewLev := mergeDataCfg.DynamicLev(ChessLv, EmitChessId, Color) MaxLev := mergeDataCfg.GetMaxLvByColor(Color) - NewLev = adjustLev(NewLev, EnergyMul) - NewLev = min(NewLev, MaxLev) - Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev, Color) + NewLev1 := adjustLev(NewLev, EnergyMul) + NewLev2 := min(NewLev1, MaxLev) + Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color) + if Chess == 0 { + break + } ChessArr = append(ChessArr, Chess) } + if GoUtil.InArray(0, ChessArr) { + continue + } if Break++; Break > 1000 { return ChessArr } From 0c4104de414e8141ec0d2d7337a20809114a4696 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Sep 2025 15:54:12 +0800 Subject: [PATCH 37/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/order/orderCfg.go | 3 ++- src/server/game/PlayerBaseMod.go | 1 + src/server/game/PlayerChessMod.go | 2 ++ src/server/game/PlayerFunc.go | 27 ++++++++++++++++---------- src/server/game/RegisterNetworkFunc.go | 5 +++++ src/server/game/UnitTest.go | 6 +++++- src/server/game/mod/chess/Chess.go | 26 ++++++++++++++++++++++++- src/server/game/mod/order/OrderFunc.go | 11 ++++++----- 8 files changed, 63 insertions(+), 18 deletions(-) diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index b786ee05..85f90e49 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -33,7 +33,8 @@ func GetOrderK(Lv int) int { } Energy := gamedata.GetIntValue(data, "Energy") K := gamedata.GetFloatValue(data, "K") - return int(float64((Energy/10)*10) * K) + a := float64(Energy)*K/10 + 0.5 + return int(a) * 10 } func GetOrderFactor(Scene int) int { diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index f6556fd3..04e0c630 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -553,6 +553,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) } } EmitRetireTrigger2(player) + player.InitOrderItem() player.PushClientRes(p.BackAsset()) return upLv, nil } diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 9cee41c3..7e07467a 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -105,6 +105,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(player *Player, buf []byte) erro ChessMod.ChessMap = update.MChessData Update := OrderMod.CreateExtraOrder(AddChessList, AddNewEmit, ChessMod.GetUnlockChessList(), BaseMod.GetEnergyMul(), BaseMod.GetLevel()) if Update { + player.InitOrderItem() player.PushClientRes(OrderMod.BackData()) } return nil @@ -283,6 +284,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa } player.QuestTriggerList(TriggerList) EmitRetireTrigger1(player) + player.InitOrderItem() player.PushClientRes(ChessMod.BackData()) player.PlayMod.save() return AddChessList, AddNewEmit, nil diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index ab3828cc..a79a04b8 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1221,20 +1221,27 @@ func (player *Player) CreateNormalOrder() { return } OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) + +} +func (player *Player) InitOrderItem() { + OrderMod := player.PlayMod.getOrderMod() + DecorateMod := player.PlayMod.getDecorateMod() + ChessMod := player.PlayMod.getChessMod() + OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) for k, v := range OrderMod.GetOrderList() { - if k == OrderMod.Auto_id { - if v.Type != order.Common_type { - continue - } - Items := make([]*item.Item, 0) - Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) - Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 - v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) - OrderMod.OrderList[k] = v + if v.Type == order.Super_type { + continue } + if len(v.Items) != 0 { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 + v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + OrderMod.OrderList[k] = v } } - func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { OrderItem := playroomCfg.GetOrderItem(Star) type sortData struct { diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 3fdcf481..3d544a87 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -146,6 +146,8 @@ func RegSetEneryFunc(player *Player, buf []byte) error { Emit := player.PlayMod.getChessMod().GetOrderEmit() ChessList := player.PlayMod.getChessMod().GetUnlockChessList() OrderMod.ChangeEnergyMul(Lv, Emit, int(req.EnergyMul), ChessList) + player.InitOrderItem() + player.PlayMod.save() player.PushClientRes(OrderMod.BackData()) player.PushClientRes(player.PlayMod.getBaseMod().BackData()) return nil @@ -365,6 +367,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) player.AddOrder() player.AddHighOrder() + player.InitOrderItem() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() PiggyBankMod.Trigger() @@ -637,6 +640,7 @@ func ReqGetChessFromBuff(player *Player, buf []byte) error { } triggerComposeChess(player, ChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) EmitRetireTrigger1(player) + player.InitOrderItem() player.PlayMod.save() player.PushClientRes(ChessMod.BackData()) player.PushClientRes(&msg.ResGetChessFromBuff{ @@ -747,6 +751,7 @@ func ReqTakeChessOutBag(player *Player, buf []byte) error { "bag_id": req.BagId, "chess_id": ChessId, }) + player.InitOrderItem() player.PlayMod.save() player.PushClientRes(ChessMod.BackData()) player.PushClientRes(&msg.ResTakeChessOutBag{ diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index e6b8d615..f8ad36ec 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -4,6 +4,7 @@ import ( "fmt" "math" mergeDataCfg "server/conf/mergeData" + orderCfg "server/conf/order" "server/game/mod/decorate" "server/game/mod/item" "server/game/mod/order" @@ -306,7 +307,10 @@ func UnitPlayroomOrder(p *Player) error { func UnitPetOrder(p *Player) error { p.AddOrder() ChessMod := p.PlayMod.getChessMod() - a := order.GetOrderStar([]int{246, 15}, ChessMod.GetOrderEmit()) + DecorateMod := p.PlayMod.getDecorateMod() + OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + Star := order.GetOrderStar([]int{307, 1026}, ChessMod.GetStarEmitList()) + a := int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 fmt.Print(a) return nil } diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 6ef3ebd7..2e294cad 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -261,7 +261,31 @@ func (cb *ChessBorad) RemoveChess(Id int) error { } return nil } - +func (cb *ChessBorad) GetStarEmitList() []int { + result := make([]int, 0, len(cb.EmitList)) + EM := make(map[string]int) + for k, v := range cb.EmitList { + if v <= 0 { + delete(cb.EmitList, k) + continue + } + EmitID := mergeDataCfg.GetEmitId(k) + if EmitID == "" { + continue + } + EmitType := mergeDataCfg.GetEmitType(k) + if EmitType == "sub" { + continue + } + if v > 0 { + EM[EmitID] = max(EM[EmitID], k) + } + } + for _, v := range EM { + result = append(result, v) + } + return result +} func (cb *ChessBorad) GetEmitList() []int { result := make([]int, 0, len(cb.EmitList)) EM := make(map[string]int) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index d1ee9a69..0a5d04cd 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -143,14 +143,14 @@ func getChessByDiff(Lv, Diff, Type int) (int, int, int) { if Type == Common_type { switch Diff { case DIFF_MID: - return 100, 600, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) case DIFF_HIGH: - return 500, 1200, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) + return 500, 1200, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) default: if Lv < 23 { - return 15, 150, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + return 15, 150, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) } - return 30, 200, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + return 30, 200, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) } } if Type == Pet_type { @@ -667,7 +667,8 @@ func GetOrderStar(ChessList []int, EmitList []int) int { continue } NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color) - Star += orderCfg.GetOrderK(NewChessLv) + n := orderCfg.GetOrderK(NewChessLv) + Star += n } return Star } From 153493bd409df0225bfc3a03fac6ed5256e126c3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:35:09 +0800 Subject: [PATCH 38/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 13 +------------ src/server/game/UnitTest.go | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index a79a04b8..2c4e1eb4 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1084,17 +1084,6 @@ func (player *Player) AddOrder() { for i := n; i < MaxOrderNum; i++ { player.CreateNormalOrder() } - for k, v := range OrderMod.OrderList { - if v.Type == order.Super_type { - continue - } - if len(v.Items) > 0 { - continue - } - Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) - v.Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} - OrderMod.OrderList[k] = v - } } func (player *Player) CreateNormalOrder() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) @@ -1237,7 +1226,7 @@ func (player *Player) InitOrderItem() { } Items := make([]*item.Item, 0) Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) - Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 + Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) OrderMod.OrderList[k] = v } diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index f8ad36ec..0d5b7ac3 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -309,7 +309,7 @@ func UnitPetOrder(p *Player) error { ChessMod := p.PlayMod.getChessMod() DecorateMod := p.PlayMod.getDecorateMod() OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) - Star := order.GetOrderStar([]int{307, 1026}, ChessMod.GetStarEmitList()) + Star := order.GetOrderStar([]int{305}, ChessMod.GetStarEmitList()) a := int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 fmt.Print(a) return nil From 3b9eba9a4874350396a39567fad85a1088bcd2e1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:50:08 +0800 Subject: [PATCH 39/58] =?UTF-8?q?=E5=BD=93=E8=A3=85=E9=A5=B0=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=8C=E6=88=90=E4=B9=8B=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E8=87=AA=E5=8A=A8=E5=8F=91=E5=B0=84=E5=99=A8=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E9=87=8D=E6=96=B0=E7=BA=B3=E5=85=A5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/GoUtil/sliceUtil.go | 11 +++++++++++ src/server/game/mod/order/Order.go | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index a84132aa..194db286 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -160,6 +160,17 @@ func PopElemSlice(s []int, Id int) ([]int, bool) { return s, false } +func PopStringElemSlice(s0 []string, Id string) ([]string, bool) { + s := make([]string, len(s0)) + copy(s, s0) + for k, v := range s { + if v == Id { + return append(s[0:k], s[k+1:]...), true + } + } + return s, false +} + func ElemInSlice(s []int, Id int) bool { for _, v := range s { if v == Id { diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 5581041a..67e274ec 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -124,6 +124,12 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) { return nil, v.MergeId, v.Type, 0, nil } if v.Type == Fixed_type || v.Type == Playroom_type { + if id == 78 { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "D") + } + if id == 79 { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "I") + } o.FinishOrder = append(o.FinishOrder, id) } return ItemList, v.MergeId, v.Type, Star, nil From ddc051eebc262bb96771a13f100d41bff480c6e4 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:09:02 +0800 Subject: [PATCH 40/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Trigger.go | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 73797bde..75902e48 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -133,7 +133,6 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { SendCharge(player, OrderExtraData) } OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP - OrderData.PayChannelOrderId = req.Token db.UpdatePlayerChargeData(OrderData) player.PlayMod.save() orderDataMap := map[string]interface{}{ From 1da1ddf48ac2df083a90848364037bf8e40d5d4d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:57:51 +0800 Subject: [PATCH 41/58] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=BC=98=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 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 67e274ec..23591303 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -124,14 +124,14 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) { return nil, v.MergeId, v.Type, 0, nil } if v.Type == Fixed_type || v.Type == Playroom_type { - if id == 78 { - o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "D") - } - if id == 79 { - o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "I") - } o.FinishOrder = append(o.FinishOrder, id) } + if GoUtil.InArray(78, o.FinishOrder) { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "D") + } + if GoUtil.InArray(79, o.FinishOrder) { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "I") + } return ItemList, v.MergeId, v.Type, Star, nil } return ItemList, MergeList, 0, 0, fmt.Errorf("订单不存在, 订单id%d", id) From 66a40023e6c8c28cb85f5d129ebe7f5b280d03dc Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:31:32 +0800 Subject: [PATCH 42/58] =?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/PlayerFunc.go | 2 +- src/server/game/RegisterNetworkFunc.go | 12 +++++++++++- src/server/game/mod/chess/Chess.go | 4 ++-- src/server/game/mod/order/Order.go | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 2c4e1eb4..527aaa7d 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -888,7 +888,7 @@ func EmitRetireTrigger2(p *Player) { } NeedFinishOrder := false - Produce := mergeDataCfg.GetEmitProduce(k) + Produce := mergeDataCfg.GetEmitOrderProduce(k) for _, v1 := range Produce { if _, ok := AllChess[v1]; ok { NeedFinishOrder = true diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 3d544a87..c1f556bf 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -374,8 +374,18 @@ func ReqRewardOrder(player *Player, buf []byte) error { // 锦标赛增加积分 if player.GetPlayerBaseMod().GetLevel() >= 17 { + ChessList := make([]int, 0) + for _, v := range mergeList { + color := mergeDataCfg.GetColorById(v) + Emit := order.GetEmitByColor(ChessMod.GetStarEmitList(), color) + EmitType := mergeDataCfg.GetEmitType(Emit) + if EmitType == "auto" { + continue + } + ChessList = append(ChessList, v) + } ChampshipMod := player.PlayMod.getChampshipMod() - ChampshipMod.AddScore(mergeList) + ChampshipMod.AddScore(ChessList) player.HandleInChampshipRank() } FriendTreasureMod := player.PlayMod.getFriendTreasureMod() diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 2e294cad..4b36ad20 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -410,7 +410,7 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo { } Re := make([]string, 0) for k, v := range cb.Retire { - if v == 3 { + if v == EMIT_RETIRE_END { Re = append(Re, k) } } @@ -578,7 +578,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error { return errors.New("chess has not been retired") } chess := make([]int, 0) - EmitProduct := mergeDataCfg.GetEmitProduce(EmitType) + EmitProduct := mergeDataCfg.GetEmitOrderProduce(EmitType) for k, v := range cb.ChessMap { arr := strings.Split(k, "@") Color := mergeDataCfg.GetColorById(int(v)) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 23591303..fdb6e8fa 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -694,7 +694,7 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList func (o *OrderMod) Retire(EmitId string) { ChessPool := make([]int, 0) - Product := mergeDataCfg.GetEmitProduce(EmitId) + Product := mergeDataCfg.GetEmitOrderProduce(EmitId) for _, v := range o.ChessPool { Color := mergeDataCfg.GetColorById(v) if GoUtil.InStringArray(Color, Product) { From 1b259919f744859beeb98c72c2fb7f150cfd4823 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:56:18 +0800 Subject: [PATCH 43/58] =?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/UnitTest.go | 2 +- src/server/game/mod/chess/Chess.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 0d5b7ac3..f8dd834b 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -305,7 +305,7 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - p.AddOrder() + p.CreateNormalOrder() ChessMod := p.PlayMod.getChessMod() DecorateMod := p.PlayMod.getDecorateMod() OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 4b36ad20..082e2ec4 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -298,7 +298,7 @@ func (cb *ChessBorad) GetEmitList() []int { if EmitID == "" { continue } - if cb.Retire[EmitID] == EMIT_RETIRE_START { + if cb.Retire[EmitID] >= EMIT_RETIRE_START { continue } EmitType := mergeDataCfg.GetEmitType(k) From 1886d56013688fe18e583fb26ef63d2f9483f5a0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 23 Sep 2025 18:13:53 +0800 Subject: [PATCH 44/58] =?UTF-8?q?=E5=AE=A0=E7=89=A9=E5=AE=9D=E8=97=8Fbug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/RegisterNetworkFunc.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index c1f556bf..ed96fae4 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -4237,7 +4237,9 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { "pet_treasure_box": FriendTreasureMod.BoxItems, "pet_treasure_reward": append(Items, FriendTreasureMod.BoxItems...), }) + FriendTreasureMod.ResetGame() player.PlayMod.save() + player.PushClientRes(FriendTreasureMod.BackData()) player.PushClientRes(&msg.ResFriendTreasureEnd{ Code: msg.RES_CODE_SUCCESS, }) From 4566a4fa4b8dbf654b3de2ff27192add3570d439 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Sep 2025 14:46:55 +0800 Subject: [PATCH 45/58] =?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/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 527aaa7d..146394cd 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1133,7 +1133,7 @@ func (player *Player) CreateNormalOrder() { continue } Items := make([]*item.Item, 0) - Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 Items = player.GetPetOrderReward(Star, Items) if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { From f07499aa6cc4541eb30ea704c6fdd3fd0deac6ad Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 24 Sep 2025 19:08:23 +0800 Subject: [PATCH 46/58] =?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/mod/order/Order.go | 26 +-- src/server/game/mod/order/OrderFunc.go | 227 +++++++++++++++---------- 2 files changed, 151 insertions(+), 102 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index fdb6e8fa..26a49442 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -20,17 +20,18 @@ type OrderMod struct { LastOrder Order // 上一个订单 LastNormalOrder Order // 上一个普通订单 EimtOrder map[string]struct{} - PreheatStep map[string]int // 预热订单步骤 - EmitShuffle []string // 发射器乱序 - ColorShuffle []string // 棋子系列乱序 - LastColor string // 上次生成订单的棋子系列 - ChessPool []int // 棋子池 - OrderPool map[int]*Order // 订单池 - FinishOrder []int // 已完成订单 - IsCharge bool // 是否充值 - AutoEmit []string // 自动发射器 - LastChess int // 上次生成订单的棋子 - NextDiff int // 下次订单难度 + PreheatStep map[string]int // 预热订单步骤 + EmitShuffle []string // 发射器乱序 + ColorShuffle []string // 棋子系列乱序 + LastColor string // 上次生成订单的棋子系列 + ChessPool []int // 棋子池 + ChessPool2 map[string][]int // 按系列分类的棋子池 + OrderPool map[int]*Order // 订单池 + FinishOrder []int // 已完成订单 + IsCharge bool // 是否充值 + AutoEmit []string // 自动发射器 + LastChess int // 上次生成订单的棋子 + NextDiff int // 下次订单难度 ComfortEndTime int } @@ -94,6 +95,9 @@ func (o *OrderMod) InitData() { delete(o.OrderList, k) } } + if o.ChessPool2 == nil { + o.ChessPool2 = make(map[string][]int) + } if o.Auto_id == 0 { o.Auto_id = 10000 } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 0a5d04cd..11d3262f 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -1,12 +1,12 @@ package order import ( - "log" "math" "server/GoUtil" mergeDataCfg "server/conf/mergeData" orderCfg "server/conf/order" userCfg "server/conf/user" + "sort" ) var reflectChess = map[int]int{} // 棋子难度映射表 @@ -16,63 +16,63 @@ var orderCfgMap = map[int]orderConfig{ Min: 15, Max: 150, Pool: map[int]orderConfigInfo{ - 1: {lv: 5, energy: 16, t: 1}, - 2: {lv: 6, energy: 32, t: 1}, - 3: {lv: 7, energy: 64, t: 1}, - 4: {lv: 8, energy: 128, t: 1}, + 1: {lv: 5, energy: 16, t: 0}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, }, }, 2: { Min: 20, Max: 300, Pool: map[int]orderConfigInfo{ - 2: {lv: 6, energy: 32, t: 1}, - 3: {lv: 7, energy: 64, t: 1}, - 4: {lv: 8, energy: 128, t: 1}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, }, }, 3: { Min: 40, Max: 400, Pool: map[int]orderConfigInfo{ - 1: {lv: 5, energy: 16, t: 1}, - 2: {lv: 6, energy: 32, t: 1}, - 3: {lv: 7, energy: 64, t: 1}, - 4: {lv: 8, energy: 128, t: 1}, - 5: {lv: 9, energy: 256, t: 1}, + 1: {lv: 5, energy: 16, t: 0}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, + 5: {lv: 9, energy: 256, t: 0}, }, }, 4: { Min: 40, Max: 200, Pool: map[int]orderConfigInfo{ - 1: {lv: 5, energy: 16, t: 0}, - 2: {lv: 6, energy: 32, t: 0}, - 3: {lv: 7, energy: 64, t: 1}, - 4: {lv: 8, energy: 128, t: 1}, + 1: {lv: 5, energy: 16, t: 1}, + 2: {lv: 6, energy: 32, t: 1}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, }, }, 5: { Min: 100, Max: 600, Pool: map[int]orderConfigInfo{ - 1: {lv: 6, energy: 32, t: 0}, - 2: {lv: 7, energy: 64, t: 0}, - 3: {lv: 8, energy: 128, t: 1}, - 4: {lv: 9, energy: 256, t: 1}, - 5: {lv: 10, energy: 512, t: 1}, + 1: {lv: 6, energy: 32, t: 1}, + 2: {lv: 7, energy: 64, t: 1}, + 3: {lv: 8, energy: 128, t: 0}, + 4: {lv: 9, energy: 256, t: 0}, + 5: {lv: 10, energy: 512, t: 0}, }, }, 6: { Min: 500, Max: 1200, Pool: map[int]orderConfigInfo{ - 1: {lv: 6, energy: 32, t: 0}, - 2: {lv: 7, energy: 64, t: 0}, - 3: {lv: 8, energy: 128, t: 1}, - 4: {lv: 9, energy: 256, t: 1}, - 5: {lv: 10, energy: 512, t: 1}, - 6: {lv: 11, energy: 1024, t: 1}, + 1: {lv: 6, energy: 32, t: 1}, + 2: {lv: 7, energy: 64, t: 1}, + 3: {lv: 8, energy: 128, t: 0}, + 4: {lv: 9, energy: 256, t: 0}, + 5: {lv: 10, energy: 512, t: 0}, + 6: {lv: 11, energy: 1024, t: 0}, }, }, } @@ -686,25 +686,28 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { } return GoUtil.UniqueInts(ChessIds) } -func getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { +func (o *OrderMod) getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { rand := []int{} + t := 0 + if LastEnergy > 0 { + t = 1 + } for _, v := range orderCfgMap { if MinEnergy >= v.Min && MaxEnergy <= v.Max { for _, info := range v.Pool { - if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy && info.t == 1 { + if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy && t >= info.t { rand = append(rand, info.lv) } } - if len(rand) > 0 { - return GoUtil.RandSlice(rand), true - } - return 6, false } } - return 6, false + if len(rand) == 0 { + return rand + } + return rand } -func getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { +func (o *OrderMod) getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { rand := []int{} for _, v := range orderCfgMap { if MinEnergy >= v.Min && MaxEnergy <= v.Max { @@ -713,15 +716,12 @@ func getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) ( rand = append(rand, info.lv) } } - if len(rand) > 0 { - return GoUtil.RandSlice(rand), true - } - return 0, false + } } - return 0, false + return rand } -func getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) (int, bool) { +func (o *OrderMod) getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { rand := []int{} for _, v := range orderCfgMap { if MinEnergy >= v.Min && MaxEnergy <= v.Max { @@ -730,65 +730,110 @@ func getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) ( rand = append(rand, info.lv) } } - if len(rand) > 0 { - return GoUtil.RandSlice(rand), true - } - return 0, false + } } - return 0, false + return rand +} + +func (o *OrderMod) ChessPoolChess(Color string, Lv int) bool { + for _, v := range o.ChessPool2[Color] { + if v > Lv { + return true + } + } + return false +} + +func (o *OrderMod) getFromPool(Emit int, Color string, Lv int) { + for i, v := range o.ChessPool2[Color] { + if v == Lv { + o.ChessPool2[Color] = append(o.ChessPool2[Color][:i], o.ChessPool2[Color][i+1:]...) + return + } + } + for i, v := range o.ChessPool { + if v > Lv { + o.ChessPool2[Color] = append(o.ChessPool2[Color][:i], o.ChessPool2[Color][i+1:]...) + for k := Lv; k < v; k++ { + o.ChessPool2[Color] = append(o.ChessPool2[Color], k) + } + return + } + } + Product := mergeDataCfg.GetEmitProduceType(Emit) + if len(Product) < 2 { + return + } + for _, v := range Product { + if Color == v { + continue + } + o.ChessPool2[Color] = append(o.ChessPool2[Color], Lv) + } +} + +func (o *OrderMod) getChessIdPool(Emit []int, Color string, EnergyMul, Lv, MinEnergy, MaxEnergy, OrderDiff, LastEnergy int) (int, int) { + ChessLv := 0 + EmitChessId := getEmitBySeries(Emit, Color) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) + ChessLvRand := o.getChessLvFromConfig1(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + Pool := o.ChessPool2[Color] + ChessLvRand2 := make([]int, 0) + for _, v := range ChessLvRand { + if GoUtil.InArray(v, Pool) { + ChessLvRand2 = append(ChessLvRand2, v) + } + } + if len(ChessLvRand2) > 0 { + ChessLv = GoUtil.RandSlice(ChessLvRand2) + } + sort.Ints(ChessLvRand) + if len(ChessLvRand) > 0 && len(ChessLvRand2) == 0 && o.ChessPoolChess(Color, ChessLvRand[len(ChessLvRand)-1]) { + ChessLv = ChessLvRand[len(ChessLvRand)-1] + } + if len(ChessLvRand) > 0 && len(ChessLvRand2) == 0 && !o.ChessPoolChess(Color, ChessLvRand[len(ChessLvRand)-1]) && len(ChessLvRand) > 0 { + ChessLv = GoUtil.RandSlice(ChessLvRand) + } + if ChessLv == 0 { + ChessLv = 6 + o.NextDiff = OrderDiff + } + o.getFromPool(EmitChessId, Color, ChessLv) + NewLev := mergeDataCfg.DynamicLev(ChessLv, EmitChessId, Color) + MaxLev := mergeDataCfg.GetMaxLvByColor(Color) + NewLev1 := adjustLev(NewLev, EnergyMul) + NewLev2 := min(NewLev1, MaxLev) + Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color) + if Chess == 0 { + Chess = mergeDataCfg.GetChessIdByLvAndColor(6, Color) + } + return Chess, ChessLv } func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, Emit []int, EnergyMul, OrderDiff int) []int { ColorArr := make([]string, 0) for i := 0; i < ChessNum; i++ { ColorArr = append(ColorArr, getEmitSeries(o, Emit)) } - Break := 0 - for { - LastEnergy := 0 - ChessArr := make([]int, 0) - for k, Color := range ColorArr { - EmitChessId := getEmitBySeries(Emit, Color) - ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) - ChessLv := 0 - ok := false - if len(ColorArr) == 1 { - ChessLv, ok = getChessLvFromConfig1(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) - } else { - if k == 0 { - ChessLv, ok = getChessLvFromConfig2(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) - } else { - ChessLv, ok = getChessLvFromConfig3(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) - } - } - LastEnergy += int(math.Pow(2, float64(ChessLv-1))) - if !ok && k == 0 && len(ColorArr) == 1 { - o.NextDiff = OrderDiff - } - NewLev := mergeDataCfg.DynamicLev(ChessLv, EmitChessId, Color) - MaxLev := mergeDataCfg.GetMaxLvByColor(Color) - NewLev1 := adjustLev(NewLev, EnergyMul) - NewLev2 := min(NewLev1, MaxLev) - Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color) - if Chess == 0 { - break - } - ChessArr = append(ChessArr, Chess) - } - if GoUtil.InArray(0, ChessArr) { - continue - } - if Break++; Break > 1000 { - return ChessArr - } - if LastEnergy < MinEnergy || LastEnergy > MaxEnergy { - continue - } - if len(ChessArr) > 0 { - log.Printf("订单棋子能量:%d,范围:%d-%d,棋子:%v", LastEnergy, MinEnergy, MaxEnergy, ChessArr) - return ChessArr + ChessArr := make([]int, 0) + if len(ColorArr) == 1 { + Chess, _ := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0) + if Chess == 0 { + Chess = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0]) } + return []int{Chess} } + if len(ColorArr) == 2 { + Chess1, Chess1Lv := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0) + if Chess1 == 0 { + Chess1 = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0]) + } + Energy := int(math.Pow(2, float64(Chess1Lv-1))) + Chess2, _ := o.getChessIdPool(Emit, ColorArr[1], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, Energy) + return []int{Chess1, Chess2} + } + + return ChessArr } // 从棋子池中获取棋子 From e7e59cf739e2dff4b81b88c99f93a07eb9c30c5a Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 25 Sep 2025 11:36:31 +0800 Subject: [PATCH 47/58] =?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/UnitTest.go | 2 +- src/server/game/mod/order/OrderFunc.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index f8dd834b..72c035b8 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -47,7 +47,7 @@ func UnitOrder(p *Player) error { ChessMod := p.PlayMod.getChessMod() BaseMod := p.PlayMod.getBaseMod() //OrderMod.OrderList = make(map[int]order.Order) - for i := 0; i < 100; i++ { + for i := 0; i < 1000; i++ { //OrderMod.ChessPool = nil //OrderMod.EmitShuffle = nil err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 11d3262f..ddcf4b7c 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -752,7 +752,7 @@ func (o *OrderMod) getFromPool(Emit int, Color string, Lv int) { return } } - for i, v := range o.ChessPool { + for i, v := range o.ChessPool2[Color] { if v > Lv { o.ChessPool2[Color] = append(o.ChessPool2[Color][:i], o.ChessPool2[Color][i+1:]...) for k := Lv; k < v; k++ { From 30314bc979d3c990f4fd80177a49d97f2907594f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 10:25:36 +0800 Subject: [PATCH 48/58] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/charge/Charge.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index ccf279f2..629a10b3 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -133,7 +133,7 @@ func (c *ChargeMod) NoonUpdate(Emit []int) { } func (c *ChargeMod) FixBug(Emit []int) { - if len(c.ChessShop) < 6 { + if len(c.ChessShop) < 5 { c.InitChessShop(Emit) } } From e8d0c38d590a843ba690480adc8b1658f98ee8c9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 12:30:27 +0800 Subject: [PATCH 49/58] =?UTF-8?q?=E9=A2=84=E7=83=AD=E8=AE=A2=E5=8D=95bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Player.go | 2 ++ src/server/game/PlayerFunc.go | 34 ++++++++++++++++++++++++++ src/server/game/mod/order/OrderFunc.go | 6 +++++ 3 files changed, 42 insertions(+) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index b8d580f3..09cd8732 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -279,6 +279,8 @@ func (p *Player) InitPlayer(UserName string) error { ChargeMod := p.PlayMod.getChargeMod() ChessMod := p.PlayMod.getChessMod() ChargeMod.FixBug(ChessMod.GetEmitList()) + p.FixOrderBug() + return nil } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 146394cd..9b07ee81 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1085,6 +1085,40 @@ func (player *Player) AddOrder() { player.CreateNormalOrder() } } + +func (player *Player) FixOrderBug() { + OrderMod := player.PlayMod.getOrderMod() + BaseMod := player.PlayMod.getBaseMod() + ChessMod := player.PlayMod.getChessMod() + for k, v := range OrderMod.PreheatStep { + if v > 4 { + continue + } + Exit := false + for _, o := range OrderMod.OrderList { + if o.Type != order.Preheat_type { + continue + } + Color := mergeDataCfg.GetColorById(o.MergeId[0]) + if Color == k { + Exit = true + break + } + + } + if Exit { + continue + } + NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+v+1, k) + OrderMod.PreheatStep[k]++ + Items, ok := order.PreheatItems[OrderMod.PreheatStep[k]] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} + } + OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) + } +} + func (player *Player) CreateNormalOrder() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) BaseMod := player.PlayMod.getBaseMod() diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index ddcf4b7c..19e9ceb2 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -628,9 +628,15 @@ func getEmitSeries(o *OrderMod, Emit []int) string { continue } EmitProduct := mergeDataCfg.GetEmitProduceType(v) + if len(EmitProduct) == 0 || EmitProduct[0] == "" { continue } + Preheat, ok := o.PreheatStep[EmitProduct[0]] + // 预热订单未全部完成 排除 + if ok && Preheat < 5 { + continue + } ColorShuffle = append(ColorShuffle, EmitProduct...) } o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) From bf485f132c813cbbcfd5cc1bf89d94ffce3453a1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:50:06 +0800 Subject: [PATCH 50/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 4 ++-- src/server/game/mod/order/Order.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 9b07ee81..cb89a267 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1066,9 +1066,9 @@ func (player *Player) AddOrder() { ChessId := OrderMod.LastOrder.MergeId[0] ChessColor := mergeDataCfg.GetColorById(ChessId) PreheatStep := OrderMod.PreheatStep[ChessColor] + OrderMod.PreheatStep[ChessColor]++ if PreheatStep < 4 { NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) - OrderMod.PreheatStep[ChessColor]++ Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] if !ok { Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} @@ -1107,7 +1107,7 @@ func (player *Player) FixOrderBug() { } if Exit { - continue + //continue } NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+v+1, k) OrderMod.PreheatStep[k]++ diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 26a49442..fdc7e595 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -656,7 +656,7 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList delete(o.OrderList, k) Items, ok := PreheatItems[PreheatStep] if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar(ChessList, Emit))} + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar([]int{NewChessId}, Emit))} } o.addPreheatOrder([]int{NewChessId}, DIFF_LOW, Preheat_type, Items) } From d3823bd9ca451bd6b1d2c0d7d4b7eadc876925b8 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:17:59 +0800 Subject: [PATCH 51/58] =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/GoUtil/feishu.go | 41 +++++++++++++++++++++++++++++++++++++ src/server/game/Trigger.go | 2 ++ src/server/game/UnitTest.go | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/server/GoUtil/feishu.go b/src/server/GoUtil/feishu.go index e6f65480..32aecfe2 100644 --- a/src/server/GoUtil/feishu.go +++ b/src/server/GoUtil/feishu.go @@ -12,6 +12,7 @@ import ( const ( FEISHU_WEBHOOK = "https://gadmin.bywaystudios.com/api/feishu/notify" + FEISHU_ORDER = "https://gadmin.bywaystudios.com/api/feishu/notify/order" ) // AAqFpbuPhFSEx @@ -55,6 +56,46 @@ func SendFeishuFatal(PlayerId int, FuncName string, msg string) error { return nil } +func SendFeishuOrder(PlayerId int, OrderId string, Price float64, ProductName string, PayTime, VerityTime int64) error { + // 创建请求体 + + payload := map[string]interface{}{ + "UID": PlayerId, + "OrderId": OrderId, + "Product": String(Price), + "ProductName": ProductName, + "EventRecovery": time.Unix(PayTime, 0).Format("2006-01-02 15:04:05"), + "EventAge": time.Unix(VerityTime, 0).Format("2006-01-02 15:04:05"), + } + + payloadBytes, err := json.Marshal(payload) + if err != nil { + return err + } + + // 创建HTTP请求 + req, err := http.NewRequest("POST", FEISHU_ORDER, bytes.NewBuffer(payloadBytes)) + if err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") + + // 发送请求 + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + // 检查响应状态码 + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode) + } + + return nil +} + func SendFeishuMsg2(msg string) error { // 创建请求体 payload := map[string]interface{}{ diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 75902e48..e77a7b33 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -114,6 +114,8 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId) return + }else{ + GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.OrderId, OrderData.Price, OrderData.ProductName, OrderData.PayTime, GoUtil.Now()) } log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;Token:%s", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId, req.Token) player.lock.Lock() diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 72c035b8..6f46332e 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -341,7 +341,7 @@ func UnitOrderTrigger(p *Player) error { Emit := ChessMod.GetEmitList() EnergyMul := BaseMod.GetEnergyMul() OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) - + order.GetOrderStar([]int{1146}, ChessMod.GetOrderEmit()) return nil } From ba33d77e1e6632ce8858b48665a14226b2cd0449 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:47:34 +0800 Subject: [PATCH 52/58] =?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/Trigger.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index e77a7b33..52bdd1e2 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -114,8 +114,8 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId) return - }else{ - GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.OrderId, OrderData.Price, OrderData.ProductName, OrderData.PayTime, GoUtil.Now()) + } else { + GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now()) } log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;Token:%s", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId, req.Token) player.lock.Lock() @@ -135,6 +135,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { SendCharge(player, OrderExtraData) } OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP + OrderData.ProductName = req.ProduceId db.UpdatePlayerChargeData(OrderData) player.PlayMod.save() orderDataMap := map[string]interface{}{ From c883fb185e0b075c7f10992d96cbf8b3d7b53ac4 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:53:29 +0800 Subject: [PATCH 53/58] =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Trigger.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 52bdd1e2..30e71db5 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -115,7 +115,9 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId) return } else { - GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now()) + if conf.Server.GameName == "Merge_Pet_online" { + GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now()) + } } log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;Token:%s", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId, req.Token) player.lock.Lock() From 61e69019b1fb3620829604b617e27fbc719e54b0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 26 Sep 2025 18:24:50 +0800 Subject: [PATCH 54/58] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/PlayerFunc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index cb89a267..4a557016 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1107,7 +1107,7 @@ func (player *Player) FixOrderBug() { } if Exit { - //continue + continue } NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+v+1, k) OrderMod.PreheatStep[k]++ From ae342334e8a463d3b61c0695f1cf84ed0860f2b6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sun, 28 Sep 2025 09:59:09 +0800 Subject: [PATCH 55/58] =?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/PlayerFunc.go | 33 +++++++++++++++++++++++++++++- src/server/game/mod/order/Order.go | 2 +- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 4a557016..450377c5 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1451,5 +1451,36 @@ func (p *Player) AddHighOrder() { return } } - +} + +// 高级产物订单 +func (p *Player) AddHighOrder2() { + OrderMod := p.PlayMod.getOrderMod() + ChessMod := p.PlayMod.getChessMod() + ChessList := ChessMod.GetUnlockChessList() + ChessMap := make(map[int]int, 0) + for _, v := range ChessList { + Lv := mergeDataCfg.GetLvById(v) + MaxLv := mergeDataCfg.GetMaxLvById(v) + if Lv != MaxLv { + continue + } + ChessMap[v]++ + } + for ChessId, Num := range ChessMap { + if Num < 3 { + continue + } + add := true + for _, v := range OrderMod.GetOrderList() { + if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) { + add = false + break + } + } + if add { + OrderMod.AddExtraOrder([]int{ChessId, ChessId, ChessId}) + return + } + } } diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index fdc7e595..fbe4ed05 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -575,7 +575,7 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ //额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单; for k := range MaxLvChess { ChessNum := GoUtil.GetElemNum(ChessList, k) - if ChessNum == 3 && Level >= 12 { + if ChessNum >= 3 && Level >= 12 { b2 := true for _, v := range o.OrderList { if GoUtil.SliceEqual(v.MergeId, []int{k, k, k}) { From 9510ea96bc505a12318b5f72a5d6a47b39d1f38c Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:05:15 +0800 Subject: [PATCH 56/58] =?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/RegisterNetworkFunc.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index ed96fae4..9b27574b 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -367,6 +367,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) player.AddOrder() player.AddHighOrder() + player.AddHighOrder2() player.InitOrderItem() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() From bce5d809dfbf602ef8aa84cd7be192f14dd273a9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sun, 28 Sep 2025 10:19:18 +0800 Subject: [PATCH 57/58] =?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/PlayerFunc.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 450377c5..1f1f076d 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1465,6 +1465,10 @@ func (p *Player) AddHighOrder2() { if Lv != MaxLv { continue } + Type := mergeDataCfg.GetTypeById(v) + if Type != "Product" { + continue + } ChessMap[v]++ } for ChessId, Num := range ChessMap { From 6c62608929a85b684bb6b5c47d7c1710f64f7169 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sun, 28 Sep 2025 12:25:47 +0800 Subject: [PATCH 58/58] =?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/conf/mergeData/MergeDataCfg.go | 15 ++++ src/server/game/mod/order/OrderFunc.go | 94 ++++++++++++++++------- 2 files changed, 82 insertions(+), 27 deletions(-) diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 8f2f34cf..5f2d79cf 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -194,6 +194,21 @@ func GetEmitRetire(Id string) int { 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获取棋子类型 func GetTypeById(Id int) string { data, err := gamedata.GetDataByIntKey(CFG_NAME, Id) diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 19e9ceb2..45100746 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -486,12 +486,12 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) ( initReflectChess(Emit, EnergyMul) filterPool(o) OrderN, err := userCfg.GetOrderNByLv(lv) - RandChessNum := getChessNumRand(OrderN) + //RandChessNum := getChessNumRand(OrderN) if err != nil { return nil, DIFF_LOW, err } // 生成订单难度和棋子数量 - ChessNum := GoUtil.RandMap(RandChessNum) + //ChessNum := GoUtil.RandMap(RandChessNum) OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN) OrderDiff := GoUtil.RandMap(OrderDiffRand) if o.NextDiff != 0 { @@ -569,16 +569,23 @@ func filterPool(o *OrderMod) { func ShuffleColor(List []string, Last string) []string { 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 { Break++ if Break > 1000 { break } Same := false - NewList := GoUtil.ShuffleStringArray(List) - if NewList[0] == Last { - continue - } + NewList := GoUtil.ShuffleStringArray(List2) for i := 1; i < len(NewList); i++ { BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1]) NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i]) @@ -586,8 +593,23 @@ func ShuffleColor(List []string, Last string) []string { Same = true 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 { return NewList } @@ -620,7 +642,44 @@ func ShuffleColor(List []string, Last string) []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) for _, v := range Emit { EmitId := mergeDataCfg.GetEmitId(v) @@ -641,25 +700,6 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } 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 } // 订单能获取的宠物币