From 6c95148a63df72a68b3a0b0bdf9b04f4012c74c9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 30 May 2025 15:03:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A0=E7=89=A9=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/decorate/DecorateCfg.go | 11 +++ src/server/conf/playroom/playroomCfg.go | 31 ++++++++ src/server/conf/server.json | 2 +- src/server/game/PlayerFunc.go | 97 ++++++++++++++++++++++++- src/server/game/RegisterNetworkFunc.go | 2 + src/server/game/UnitTest.go | 5 ++ src/server/game/mod/base/Base.go | 3 + src/server/game/mod/order/Order.go | 31 +++----- src/server/game/mod/order/OrderFunc.go | 2 +- src/server/gamedata/type.go | 6 ++ 10 files changed, 168 insertions(+), 22 deletions(-) diff --git a/src/server/conf/decorate/DecorateCfg.go b/src/server/conf/decorate/DecorateCfg.go index 355840d3..8ffa8626 100644 --- a/src/server/conf/decorate/DecorateCfg.go +++ b/src/server/conf/decorate/DecorateCfg.go @@ -11,12 +11,14 @@ const ( DECORATE_COST = "DecorateCost" INDOOR_PROGRESS = "IndoorProgress" DECORATE_CONST = "DecorateConst" + DECORATE_AREA = "DecorateArea" // 装饰区域 ) func init() { gamedata.InitCfg(DECORATE_COST) gamedata.InitCfg(INDOOR_PROGRESS) gamedata.InitCfg(DECORATE_CONST) + gamedata.InitCfg(DECORATE_AREA) } func GetStarCost(AreaId, SortId int) int { @@ -105,3 +107,12 @@ func GetOneKeyDecorateUnlockLv() int { } return gamedata.GetIntValue(data, "Value") } + +func GetAreaPerPExp(AreaId int) int { + data, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId) + if err != nil { + log.Debug("DecorateArea GetAreaPerPExp not found AreaId:%v", AreaId) + return 0 + } + return gamedata.ParseInt(data["PerPExp"]) +} diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroomCfg.go index a216cea7..85bf809f 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroomCfg.go @@ -21,6 +21,7 @@ const ( CFG_PLAYROOM_DAILYTASK = "PlayroomDailyTask" CFG_PLAYROOM_DAILYTASKREWARD = "PlayroomDailyTaskReward" CFG_PLAYROOM_TASKJACKPOT = "PlayroomTaskJackpot" + CFG_PLAYROOM_ORDERITEM = "PlayroomOrderItem" // 订单物品 ) func init() { @@ -36,6 +37,7 @@ func init() { gamedata.InitCfg(CFG_PLAYROOM_DAILYTASK) gamedata.InitCfg(CFG_PLAYROOM_DAILYTASKREWARD) gamedata.InitCfg(CFG_PLAYROOM_TASKJACKPOT) + gamedata.InitCfg(CFG_PLAYROOM_ORDERITEM) } func GetShopItem(Id int) (int, []*item.Item) { @@ -517,3 +519,32 @@ func GetPhysiologyList(MoodType int) []int { func GetInteractIdBath() []int { return []int{11, 12, 13} } + +func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem { + data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM) + if err != nil { + log.Debug("GetOrderItem err:%v", err) + return nil + } + r := make(map[int][]gamedata.PetOrderItem) + for k, v := range data { + ItemStar := gamedata.GetIntValue(v, "Star") + if ItemStar > 0 && ItemStar > Star { + continue + } + Id := GoUtil.Int(k) + Type := gamedata.GetIntValue(v, "Type") + if _, ok := r[Type]; !ok { + r[Type] = make([]gamedata.PetOrderItem, 0) + } + if Id == 0 { + log.Debug("GetOrderItem Id is 0, Type:%v", Type) + continue + } + r[Type] = append(r[Type], gamedata.PetOrderItem{ + Id: Id, + Star: ItemStar, + }) + } + return r +} diff --git a/src/server/conf/server.json b/src/server/conf/server.json index 9b59f21f..c563e4ec 100644 --- a/src/server/conf/server.json +++ b/src/server/conf/server.json @@ -14,7 +14,7 @@ "AppPath": "./app", "TELOGDIR" : "./teLog/", - "GameName": "pet_home_local", + "GameName": "Merge_Pet_Local", "ServerType":"node", diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 052c2ccf..d3607e55 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -10,8 +10,11 @@ import ( "server/conf" cardCfg "server/conf/card" chargeCfg "server/conf/charge" + decorateCfg "server/conf/decorate" mailCfg "server/conf/mail" mergeDataCfg "server/conf/mergeData" + playroomCfg "server/conf/playroom" + userCfg "server/conf/user" "server/db" "server/game/mod/card" "server/game/mod/friend" @@ -838,5 +841,97 @@ func NotifyChampshipResult(Uid, Rank int) { } FriendMgrSend(Msg) } - +} + +func (player *Player) FormatOrderReward() { + Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) + BaseMod := player.PlayMod.getBaseMod() + DecorateMod := player.PlayMod.getDecorateMod() + ExpCoin := (Exp - BaseMod.GetExp()) * decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) + PExpCoin := (PExp - BaseMod.GetPExp()) * 50 + OrderMod := player.PlayMod.getOrderMod() + if ExpCoin > PExpCoin { + for k, v := range OrderMod.GetOrderList() { + if v.Type != order.Common_type { + continue + } + Star := order.GetOrderStar(v.MergeId) + v.Items = append(v.Items, &item.Item{ + Id: item.ITEM_STAR_ID, + Num: Star, + }) + OrderMod.OrderList[k] = v + } + return + } + for k, v := range OrderMod.GetOrderList() { + if v.Type != order.Common_type { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId) + Items = player.GetPetOrderReward(Star, Items) + if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { + v.Type = order.Common_type + } else { + v.Type = order.Pet_type + } + v.Items = Items + OrderMod.OrderList[k] = v + } +} + +func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { + OrderItem := playroomCfg.GetOrderItem(Star) + type sortData struct { + Type int + Num int + } + 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, + }) + } + if len(sortList) == 0 && Star > 0 { + 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 + } + + for k, v := range ItemsId { + ItemNum := ItemMod.GetItem(v.Id) + v.Num = ItemNum + ItemsId[k] = v + } + 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) } diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index a22f0f2e..dbd2549d 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -136,6 +136,7 @@ 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 @@ -345,6 +346,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { } else { OrderMod.CreateOrderSeed(NewOrder) } + player.FormatOrderReward() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() PiggyBankMod.Trigger() diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 5b8193fe..32b4cfb5 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -230,3 +230,8 @@ func UnitPlayroomOrder(p *Player) error { PlayroomMod.CreateOrderReward(100, p.PlayMod.getItemMod()) return nil } + +func UnitPetOrder(p *Player) error { + p.FormatOrderReward() + return nil +} diff --git a/src/server/game/mod/base/Base.go b/src/server/game/mod/base/Base.go index 5ba292ee..117bb898 100644 --- a/src/server/game/mod/base/Base.go +++ b/src/server/game/mod/base/Base.go @@ -121,6 +121,9 @@ func (b *Base) GetLevel() int { func (b *Base) GetExp() int { return b.Exp } +func (b *Base) GetPExp() int { + return b.PExp +} func (b *Base) GetStar() int { return b.Star diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 7fe65b21..95eb9a05 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -32,6 +32,7 @@ type Order struct { Timestamp int64 // 时间戳 Q int S int + Items []*item.Item // 奖励物品 } const ( @@ -45,6 +46,7 @@ const ( Clean_type2 = 8 // 棋盘空格不足清理棋子的订单 COMFORT_TYPE = 9 // 安慰订单 Guide_type = 10 // 引导订单 + Pet_type = 11 // 宠物订单 DIFF_LOW = 1 // 低难度 DIFF_MID = 2 // 中难度 @@ -101,7 +103,7 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) { Items := limitedTimeEventCfg.GetSuperOrderReward(Star) ItemList = append(ItemList, Items...) } else { - ItemList = append(ItemList, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + ItemList = v.Items } if v.Type == Guide_type { return nil, v.MergeId, v.Type, 0, nil @@ -379,19 +381,26 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { return nil } -func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) { +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 { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} + } Order := Order{ MergeId: ChessList, Diff: Diff, Type: Type, Timestamp: time.Now().Unix(), + Items: Items, } o.OrderList[o.Auto_id] = Order if Type == Common_type { o.LastNormalOrder = Order } o.LastDiff = Diff + return o.Auto_id } func (o *OrderMod) CreateCleanOrder(ChessList []int) bool { @@ -441,23 +450,6 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ o.addOrder([]int{ChessId}, DIFF_LOW, Preheat_type) } } - // //额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单; - // for k := range MaxLvChess { - // ChessNum := GoUtil.GetElemNum(ChessList, k) - // OrderChess := 0 - // for _, order := range o.OrderList { - // for _, v := range order.MergeId { - // if v == k { - // OrderChess++ - // } - // } - // } - // OrderNum := (ChessNum - OrderChess) / 3 - // for i := 0; i < OrderNum; i++ { - // b1 = true - // o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type) - // } - // } return b1 } @@ -470,6 +462,7 @@ func (o *OrderMod) BackData() *msg.ResOrderList { Id: int32(k), ChessId: mergeList, Type: int32(v.Type), + Items: item.ItemToMsg(v.Items), } OrderList = append(OrderList, Order) } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index c028e1a2..b6532180 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -411,7 +411,7 @@ func getEmitSeries(o *OrderMod, Emit []int) string { } // 订单能获取的宠物币 -func getOrderStar(ChessList []int) int { +func GetOrderStar(ChessList []int) int { Star := 0 for _, v := range ChessList { Star += mergeDataCfg.GetStarById(v) diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index 458661e5..83eccbad 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -56,3 +56,9 @@ type LimitedTimeEventData struct { EventId int Duration int64 } + +type PetOrderItem struct { + Id int + Star int + Num int +}