宠物怪盗优化

This commit is contained in:
hahwu 2025-08-19 15:43:37 +08:00
parent c65ba4d019
commit 4f24b30ba8
5 changed files with 69 additions and 45 deletions

View File

@ -6,6 +6,7 @@ import (
"server/gamedata" "server/gamedata"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"sort" "sort"
"strings"
) )
const ( const (
@ -330,6 +331,22 @@ func GetHighRollerNeedEnergy() int {
return gamedata.GetIntValue(data, "Value") 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) { func GetMoneyCat(Id int) (float64, int) {

View File

@ -11,6 +11,7 @@ import (
cardCfg "server/conf/card" cardCfg "server/conf/card"
chargeCfg "server/conf/charge" chargeCfg "server/conf/charge"
decorateCfg "server/conf/decorate" decorateCfg "server/conf/decorate"
limitedTimeEventCfg "server/conf/limitedTimeEvent"
mailCfg "server/conf/mail" mailCfg "server/conf/mail"
mergeDataCfg "server/conf/mergeData" mergeDataCfg "server/conf/mergeData"
playroomCfg "server/conf/playroom" playroomCfg "server/conf/playroom"
@ -1078,45 +1079,6 @@ func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.It
return player.GetPetOrderReward(Star, Items) 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 { func ExcludeCardStar(CardList []int) []int {
StarList := make([]int, 0) StarList := make([]int, 0)
for _, v := range CardList { for _, v := range CardList {
@ -1146,3 +1108,42 @@ func (p *Player) GetPlayroomGameReward(Type, SelectId int) []*item.Item {
} }
return Items 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
}

View File

@ -3445,9 +3445,12 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
Emoji: int(req.EmojiId), 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) G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
PlayroomMod.ResetGame() PlayroomMod.ResetGame()
player.PlayMod.save()
player.TeLog("finish_mini_game", map[string]interface{}{ player.TeLog("finish_mini_game", map[string]interface{}{
"mini_game_type": PlayroomMod.GetGameId(), "mini_game_type": PlayroomMod.GetGameId(),
"is_chip": true, "is_chip": true,
@ -3455,6 +3458,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
}) })
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward") player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward")
PlayroomBackData(player) PlayroomBackData(player)
player.PlayMod.save()
player.PushClientRes(&msg.ResPlayroomSelectReward{ player.PushClientRes(&msg.ResPlayroomSelectReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,
}) })
@ -3630,8 +3634,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
Items1 := Items Items1 := Items
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) {
ThiefItem := player.GetPetThiefReward(Target) player.GetPetThiefReward(Target)
Items1 = item.Merge(Items1, ThiefItem)
} }
err = player.HandleItem(Items1, msg.ITEM_POP_LABEL_PlayroomFlip.String()) err = player.HandleItem(Items1, msg.ITEM_POP_LABEL_PlayroomFlip.String())
if err != nil { if err != nil {

View File

@ -479,7 +479,6 @@ func initEventInfo(E *LTEInfo, EventType int) {
MaxEarings: MaxEarning, MaxEarings: MaxEarning,
} }
case EVENT_TYPE_PAYBACK_DAY: case EVENT_TYPE_PAYBACK_DAY:
E.D = &PaybackDay{ E.D = &PaybackDay{
count: limitedTimeEventCfg.GetPaybackDay(), count: limitedTimeEventCfg.GetPaybackDay(),
} }

View File

@ -95,6 +95,7 @@ const (
ITEM_POP_LABEL_CatnipGrandReward ITEM_POP_LABEL = 68 // 猫草大作战大奖奖励 ITEM_POP_LABEL_CatnipGrandReward ITEM_POP_LABEL = 68 // 猫草大作战大奖奖励
ITEM_POP_LABEL_CatnipPlay ITEM_POP_LABEL = 69 // 猫草大作战玩法奖励 ITEM_POP_LABEL_CatnipPlay ITEM_POP_LABEL = 69 // 猫草大作战玩法奖励
ITEM_POP_LABEL_FriendTReward ITEM_POP_LABEL = 70 // 好友时间线奖励 ITEM_POP_LABEL_FriendTReward ITEM_POP_LABEL = 70 // 好友时间线奖励
ITEM_POP_LABEL_PetTheif ITEM_POP_LABEL = 71 // 宠物小偷奖励
) )
// Enum value maps for ITEM_POP_LABEL. // Enum value maps for ITEM_POP_LABEL.
@ -171,6 +172,7 @@ var (
68: "CatnipGrandReward", 68: "CatnipGrandReward",
69: "CatnipPlay", 69: "CatnipPlay",
70: "FriendTReward", 70: "FriendTReward",
71: "PetTheif",
} }
ITEM_POP_LABEL_value = map[string]int32{ ITEM_POP_LABEL_value = map[string]int32{
"Playroom": 0, "Playroom": 0,
@ -244,6 +246,7 @@ var (
"CatnipGrandReward": 68, "CatnipGrandReward": 68,
"CatnipPlay": 69, "CatnipPlay": 69,
"FriendTReward": 70, "FriendTReward": 70,
"PetTheif": 71,
} }
) )
@ -27061,7 +27064,7 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\vReqAdminBan\x12\x10\n" + "\vReqAdminBan\x12\x10\n" +
"\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x12\n" + "\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x12\n" +
"\x04Time\x18\x02 \x01(\x03R\x04Time\x12\x16\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" + "\n" +
"\x0eITEM_POP_LABEL\x12\f\n" + "\x0eITEM_POP_LABEL\x12\f\n" +
"\bPlayroom\x10\x00\x12\r\n" + "\bPlayroom\x10\x00\x12\r\n" +
@ -27142,7 +27145,8 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\x11CatnipGrandReward\x10D\x12\x0e\n" + "\x11CatnipGrandReward\x10D\x12\x0e\n" +
"\n" + "\n" +
"CatnipPlay\x10E\x12\x11\n" + "CatnipPlay\x10E\x12\x11\n" +
"\rFriendTReward\x10F*B\n" + "\rFriendTReward\x10F\x12\f\n" +
"\bPetTheif\x10G*B\n" +
"\vHANDLE_TYPE\x12\a\n" + "\vHANDLE_TYPE\x12\a\n" +
"\x03ADD\x10\x00\x12\v\n" + "\x03ADD\x10\x00\x12\v\n" +
"\aCOMPOSE\x10\x01\x12\a\n" + "\aCOMPOSE\x10\x01\x12\a\n" +