修改宠物怪盗优化

This commit is contained in:
hahwu 2025-06-19 10:47:38 +08:00
parent c6b40c145c
commit 52e1427b08
6 changed files with 83 additions and 1 deletions

View File

@ -236,6 +236,23 @@ func SliceEqual(a, b []int) bool {
return true
}
// IsContainSlice checks if all elements of s2 are contained in s.
func IsContainSlice(s []int, s2 []int) bool {
if len(s2) == 0 {
return true
}
if len(s) < len(s2) {
return false
}
for _, v := range s2 {
if !InArray(v, s) {
return false
}
s = SubSlices(s, []int{v})
}
return true
}
func InitNumSlice(start, end int) []int {
result := make([]int, 0, end-start+1)
for i := start; i <= end; i++ {

View File

@ -793,6 +793,7 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error {
func (p *Player) UpdateUserInfo() {
simple := &PlayerSimpleData{}
Base := p.GetPlayerBaseMod()
CardMod := p.PlayMod.getCardMod()
BaseMod := p.PlayMod.getBaseMod()
simple.Name = p.PlayMod.getBaseMod().NickName
simple.Avatar = p.PlayMod.getAvatarMod().SetId
@ -814,6 +815,7 @@ func (p *Player) UpdateUserInfo() {
simple.Friend = p.PlayMod.getFriendMod().GetSimpleFriendList()
simple.Upvote = p.PlayMod.getPlayroomMod().Upvote
simple.DressSet = p.PlayMod.getPlayroomMod().DressSet
simple.CardInfo = CardMod.GetCardList()
value, _ := json.Marshal(simple)
IdStr := strconv.Itoa(int(p.M_DwUin))
db.RedisSetKey(IdStr, string(value), 0)

View File

@ -946,3 +946,54 @@ 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 {
Star := cardCfg.GetStarById(v)
if Star < 2 || Star > 4 {
continue
}
StarList = append(StarList, v)
}
return StarList
}

View File

@ -3461,7 +3461,8 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
Items1 := Items
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) {
Items1 = item.Merge(Items1, Items1)
ThiefItem := player.GetPetThiefReward(Target)
Items1 = item.Merge(Items1, ThiefItem)
}
err = player.HandleItem(Items1, msg.ITEM_POP_LABEL_PlayroomFlip.String())
if err != nil {

View File

@ -27,6 +27,7 @@ type PlayerSimpleData struct {
Friend []int
Upvote int
DressSet map[int]int
CardInfo []int
}
type VarGoldCard struct {

View File

@ -579,3 +579,13 @@ func (c *CardMod) SeasonFirstReward() ([]*item.Item, error) {
c.SeasonFirst = true
return cardCfg.GetSeasonFirstReward(), nil
}
func (c *CardMod) GetCardList() []int {
cardList := make([]int, 0)
for k, v := range c.CardList {
if v > 0 {
cardList = append(cardList, k)
}
}
return cardList
}