From 4f24b30ba83b89ccd863434201f2d7b29ac06d93 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 19 Aug 2025 15:43:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A0=E7=89=A9=E6=80=AA=E7=9B=97=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../limitedTimeEvent/LimitedTimeEventCfg.go | 17 ++++ src/server/game/PlayerFunc.go | 79 ++++++++++--------- src/server/game/RegisterNetworkFunc.go | 9 ++- .../mod/limitedTimeEvent/LimitedTimeEvent.go | 1 - src/server/msg/Gameapi.pb.go | 8 +- 5 files changed, 69 insertions(+), 45 deletions(-) diff --git a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go b/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go index 42a61e38..6ed133ae 100644 --- a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go +++ b/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go @@ -6,6 +6,7 @@ import ( "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "sort" + "strings" ) const ( @@ -330,6 +331,22 @@ func GetHighRollerNeedEnergy() int { return gamedata.GetIntValue(data, "Value") } +func GetThiefProb() int { + data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "Thief_Prob") + if err != nil { + log.Debug("GetThiefProb err:%v", err) + return 0 + } + value := gamedata.GetStringValue(data, "Value") + a1 := strings.Split(value, "|") + prob := make(map[int]int) + for _, v := range a1 { + a2 := strings.Split(v, ":") + prob[GoUtil.Int(a2[0])] = GoUtil.Int(a2[1]) + } + return GoUtil.RandMap(prob) +} + // 招财猫 func GetMoneyCat(Id int) (float64, int) { diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 69a1342f..83e7e0cb 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -11,6 +11,7 @@ import ( cardCfg "server/conf/card" chargeCfg "server/conf/charge" decorateCfg "server/conf/decorate" + limitedTimeEventCfg "server/conf/limitedTimeEvent" mailCfg "server/conf/mail" mergeDataCfg "server/conf/mergeData" playroomCfg "server/conf/playroom" @@ -1078,45 +1079,6 @@ func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.It return player.GetPetOrderReward(Star, Items) } -func (p *Player) GetPetThiefReward(Target int) []*item.Item { - PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Target) - if PlayerSimpleData == nil { - log.Error("GetPetThiefReward Target %d not exist", Target) - return nil - } - CardMod := p.PlayMod.getCardMod() - CardList := ExcludeCardStar(CardMod.GetCardList()) - TargetCardList := ExcludeCardStar(PlayerSimpleData.CardInfo) - if len(TargetCardList) == 0 { - return []*item.Item{ - {Id: item.ITEM_STAR_ID, Num: 50}, - } - } - if GoUtil.IsContainSlice(CardList, TargetCardList) { - CardId := GoUtil.RandSliceNum(TargetCardList, 1)[0] - ItemId := cardCfg.GetItemIdByCardId(CardId) - return []*item.Item{ - {Id: ItemId, Num: 1}, - } - } else { - CardList2 := GoUtil.SubSlices(TargetCardList, CardList) - if len(CardList2) == 0 { - return []*item.Item{ - {Id: item.ITEM_STAR_ID, Num: 50}, - } - } - CardId := GoUtil.RandSliceNum(CardList2, 1)[0] - ItemId := cardCfg.GetItemIdByCardId(CardId) - if ItemId == 0 { - log.Error("GetPetThiefReward ItemId %d not exist", ItemId) - return nil - } - return []*item.Item{ - {Id: ItemId, Num: 1}, - } - } -} - func ExcludeCardStar(CardList []int) []int { StarList := make([]int, 0) for _, v := range CardList { @@ -1146,3 +1108,42 @@ func (p *Player) GetPlayroomGameReward(Type, SelectId int) []*item.Item { } return Items } + +func (p *Player) GetPetThiefReward(Target int) error { + PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Target) + if PlayerData == nil { + return fmt.Errorf("target %d not exist", Target) + } + CardStar := limitedTimeEventCfg.GetThiefProb() + starMap := make(map[int][]int, 0) + cardList := []int{} + for _, v := range PlayerData.CardInfo { + Star := cardCfg.GetStarById(v) + starMap[Star] = append(starMap[Star], v) + } + for { + if l, ok := starMap[CardStar]; ok { + cardList = l + break + } + if CardStar <= 1 { + break + } + CardStar-- + } + ItemId := 0 + if len(cardList) == 0 { + List := cardCfg.GetCardListByStar(0, 1, 0) + CardId := GoUtil.RandSlice(List) + ItemId = cardCfg.GetItemIdByCardId(CardId) + if ItemId == 0 { + log.Error("LimitEventPetTheif ItemId %d not exist", ItemId) + return fmt.Errorf("ItemId %d not exist", ItemId) + } + } else { + CardId := GoUtil.RandSlice(cardList) + ItemId = cardCfg.GetItemIdByCardId(CardId) + } + p.HandleItem([]*item.Item{{Id: ItemId, Num: 1}}, proto.ITEM_POP_LABEL_PetTheif.String()) + return nil +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 935b144f..3e56ce0b 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -3445,9 +3445,12 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { Emoji: int(req.EmojiId), }, }) + LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() + if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { + player.GetPetThiefReward(Target) + } G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) PlayroomMod.ResetGame() - player.PlayMod.save() player.TeLog("finish_mini_game", map[string]interface{}{ "mini_game_type": PlayroomMod.GetGameId(), "is_chip": true, @@ -3455,6 +3458,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { }) player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward") PlayroomBackData(player) + player.PlayMod.save() player.PushClientRes(&msg.ResPlayroomSelectReward{ Code: msg.RES_CODE_SUCCESS, }) @@ -3630,8 +3634,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { Items1 := Items LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { - ThiefItem := player.GetPetThiefReward(Target) - Items1 = item.Merge(Items1, ThiefItem) + player.GetPetThiefReward(Target) } err = player.HandleItem(Items1, msg.ITEM_POP_LABEL_PlayroomFlip.String()) if err != nil { diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index 7094ae48..cec1ef61 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -479,7 +479,6 @@ func initEventInfo(E *LTEInfo, EventType int) { MaxEarings: MaxEarning, } case EVENT_TYPE_PAYBACK_DAY: - E.D = &PaybackDay{ count: limitedTimeEventCfg.GetPaybackDay(), } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index aa0ffdbe..c63b251c 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -95,6 +95,7 @@ const ( ITEM_POP_LABEL_CatnipGrandReward ITEM_POP_LABEL = 68 // 猫草大作战大奖奖励 ITEM_POP_LABEL_CatnipPlay ITEM_POP_LABEL = 69 // 猫草大作战玩法奖励 ITEM_POP_LABEL_FriendTReward ITEM_POP_LABEL = 70 // 好友时间线奖励 + ITEM_POP_LABEL_PetTheif ITEM_POP_LABEL = 71 // 宠物小偷奖励 ) // Enum value maps for ITEM_POP_LABEL. @@ -171,6 +172,7 @@ var ( 68: "CatnipGrandReward", 69: "CatnipPlay", 70: "FriendTReward", + 71: "PetTheif", } ITEM_POP_LABEL_value = map[string]int32{ "Playroom": 0, @@ -244,6 +246,7 @@ var ( "CatnipGrandReward": 68, "CatnipPlay": 69, "FriendTReward": 70, + "PetTheif": 71, } ) @@ -27061,7 +27064,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\vReqAdminBan\x12\x10\n" + "\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x12\n" + "\x04Time\x18\x02 \x01(\x03R\x04Time\x12\x16\n" + - "\x06Reason\x18\x03 \x01(\tR\x06Reason*\xc8\n" + + "\x06Reason\x18\x03 \x01(\tR\x06Reason*\xd6\n" + "\n" + "\x0eITEM_POP_LABEL\x12\f\n" + "\bPlayroom\x10\x00\x12\r\n" + @@ -27142,7 +27145,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x11CatnipGrandReward\x10D\x12\x0e\n" + "\n" + "CatnipPlay\x10E\x12\x11\n" + - "\rFriendTReward\x10F*B\n" + + "\rFriendTReward\x10F\x12\f\n" + + "\bPetTheif\x10G*B\n" + "\vHANDLE_TYPE\x12\a\n" + "\x03ADD\x10\x00\x12\v\n" + "\aCOMPOSE\x10\x01\x12\a\n" +