From 2149ee404b1278f435d8feb1f60688fec08bdad3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 14 Oct 2025 10:46:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E8=80=97=E5=93=81=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/conf/playroom/playroomCfg.go | 49 ++++++++++- src/server/game/PlayerFunc.go | 110 +++++++++++++----------- src/server/game/RegisterNetworkFunc.go | 3 + src/server/game/mod/item/Item.go | 22 +++-- src/server/gamedata/type.go | 7 +- 5 files changed, 126 insertions(+), 65 deletions(-) diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroomCfg.go index a2bd6ae8..04f77c2b 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroomCfg.go @@ -568,14 +568,59 @@ func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem { log.Debug("GetOrderItem Id is 0, Type:%v", Type) continue } + GradeStr := gamedata.GetStringValue(v, "Grade") + Grade := make([]int, 0) + for _, v1 := range strings.Split(GradeStr, ",") { + v2 := GoUtil.Int(v1) + if v2 > 0 { + Grade = append(Grade, v2) + } + } r[Type] = append(r[Type], gamedata.PetOrderItem{ - Id: Id, - Star: ItemStar, + Id: Id, + Star: ItemStar, + Grade: Grade, }) } return r } +func GetOrderItemByGrade(Grade int) map[int][]int { + data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM) + if err != nil { + log.Debug("GetOrderItemByGrade err:%v", err) + return nil + } + r := make(map[int][]int) + for k, v := range data { + GradeStr := gamedata.GetStringValue(v, "Grade") + GradeList := make([]int, 0) + for _, v1 := range strings.Split(GradeStr, ",") { + v2 := GoUtil.Int(v1) + if v2 > 0 { + GradeList = append(GradeList, v2) + } + } + if !GoUtil.InArray(Grade, GradeList) { + continue + } + Id := GoUtil.Int(k) + Type := gamedata.GetIntValue(v, "Type") + if Type == 0 { + continue + } + if _, ok := r[Type]; !ok { + r[Type] = make([]int, 0) + } + if Id == 0 { + log.Debug("GetOrderItemByGrade Id is 0, Type:%v", Type) + continue + } + r[Type] = append(r[Type], Id) + } + return r +} + func GetOrderItemList() []int { data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM) if err != nil { diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index c6e95e59..7c8ea637 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -1169,7 +1169,7 @@ func (player *Player) CreateNormalOrder() { } 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) * 10 Items = player.GetPetOrderReward(Star, Items) if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { v.Type = order.Common_type @@ -1267,63 +1267,33 @@ func (player *Player) InitOrderItem() { } } func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { - OrderItem := playroomCfg.GetOrderItem(Star) - type sortData struct { - Type int - Num int + HighNum := Star / 225 + if HighNum > 0 { + HighNum = min(HighNum, 3) + Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_HIGH_ID, HighNum)) + Star -= HighNum * 225 } - ItemMod := player.PlayMod.getItemMod() - sortList := make([]sortData, 0) - for k, v := range OrderItem { - ids := make([]int, 0) - for _, v1 := range v { - if v1.Id == 0 { - continue - } - ids = append(ids, v1.Id) - } - Num := ItemMod.GetItemNumByList(ids) - sortList = append(sortList, sortData{ - Type: k, - Num: Num, - }) + + MidNum := Star / 150 + if MidNum > 0 { + MidNum = min(MidNum, 3) + Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_MID_ID, MidNum)) + Star -= MidNum * 150 } - if len(sortList) == 0 && Star > 0 { + if len(Items) >= 2 { Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Star)) return Items } - - sort.Slice(sortList, func(i, j int) bool { - return sortList[i].Num < sortList[j].Num - }) - - ItemsId := OrderItem[sortList[0].Type] - if len(ItemsId) == 0 { - return Items + LowNum := Star / 75 + if LowNum > 0 { + LowNum = min(LowNum, 3) + Items = append(Items, item.NewItem(item.ITEM_PLAYROOM_BOX_LOW_ID, LowNum)) + Star -= LowNum * 75 } - - for k, v := range ItemsId { - ItemNum := ItemMod.GetItem(v.Id) - for _, v1 := range Items { - if v1.Id == v.Id { - ItemNum += v1.Num - } - } - v.Num = ItemNum - ItemsId[k] = v + if Star > 0 { + Items = append(Items, item.NewItem(item.ITEM_STAR_ID, Star)) } - sort.Slice(ItemsId, func(i, j int) bool { - return ItemsId[i].Num < ItemsId[j].Num - }) - Items = append(Items, item.NewItem(ItemsId[0].Id, 1)) - Star -= ItemsId[0].Star - if Star <= 0 { - return Items - } - if len(Items) >= 2 { - return Items - } - return player.GetPetOrderReward(Star, Items) + return Items } func ExcludeCardStar(CardList []int) []int { @@ -1489,3 +1459,41 @@ func (p *Player) AddHighOrder2() { } } } + +func (p *Player) FormatPetOrderItem(Items []*item.Item) []*item.Item { + NewItems := make([]*item.Item, 0) + PlayroomMod := p.PlayMod.getPlayroomMod() + for _, v := range Items { + if v.Id != item.ITEM_PLAYROOM_BOX_LOW_ID && v.Id != item.ITEM_PLAYROOM_BOX_MID_ID && v.Id != item.ITEM_PLAYROOM_BOX_HIGH_ID { + NewItems = append(NewItems, v) + continue + } + var OrderItem map[int][]int + switch v.Id { + case item.ITEM_PLAYROOM_BOX_LOW_ID: + OrderItem = playroomCfg.GetOrderItemByGrade(1) + case item.ITEM_PLAYROOM_BOX_MID_ID: + OrderItem = playroomCfg.GetOrderItemByGrade(2) + default: + OrderItem = playroomCfg.GetOrderItemByGrade(3) + } + feed := PlayroomMod.GetPhysiology(playroom.PHYSIOLOGY_TYPE_FEED) + if feed.Num <= 1 { + RandList := OrderItem[1] + NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1)) + continue + } + clean := PlayroomMod.GetPhysiology(playroom.PHYSIOLOGY_TYPE_CLEAN) + if clean.Num <= 5 { + RandList := OrderItem[2] + NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1)) + continue + } + RandList := make([]int, 0) + for _, v1 := range OrderItem { + RandList = append(RandList, v1...) + } + NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1)) + } + return NewItems +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index f58f07bd..e72934f4 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -235,6 +235,9 @@ func ReqRewardOrder(player *Player, buf []byte) error { ChessMod := player.PlayMod.getChessMod() LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId)) + if OrderType == order.Pet_type { + Item = player.FormatPetOrderItem(Item) + } ActItem := GetActivityItem(player, GoUtil.Int32ToInt(req.ActType)) Item = item.Merge(Item, ActItem) if !OrderMod.CheckSuperOrder() { diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 583584a5..f878440c 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -16,15 +16,18 @@ type ItemMod struct { } const ( - ITEM_ENERGY_ID = 100001 - ITEM_STAR_ID = 100002 - ITEM_DIAMOND_ID = 100003 - 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 + ITEM_ENERGY_ID = 100001 + ITEM_STAR_ID = 100002 + ITEM_DIAMOND_ID = 100003 + 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 + ITEM_PLAYROOM_BOX_LOW_ID = 101445 + ITEM_PLAYROOM_BOX_MID_ID = 101446 + ITEM_PLAYROOM_BOX_HIGH_ID = 101447 ) const ( @@ -52,6 +55,7 @@ const ( ITEM_TYPE_PLAYROOM_DRESS = 112 // playroom服饰 ITEM_TYPE_PLAYROOM_DECORATION_SET = 113 // playroom装饰套装 ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装 + ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱 ) func (i *ItemMod) InitData() { diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index 17400eac..487d8c85 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -62,7 +62,8 @@ type LimitedTimeEventData struct { } type PetOrderItem struct { - Id int - Star int - Num int + Id int + Star int + Num int + Grade []int }