同一个卡包内不能开出重复卡牌

This commit is contained in:
hahwu 2025-01-23 11:55:51 +08:00
parent 0f732904be
commit d4dc459192
4 changed files with 29 additions and 8 deletions

View File

@ -271,3 +271,14 @@ func IsContain(s []int, s2 []int) bool {
}
return true
}
func IsSameElem(s []int) bool {
r := make(map[int]struct{})
for _, v := range s {
if _, ok := r[v]; ok {
return true
}
r[v] = struct{}{}
}
return false
}

View File

@ -134,3 +134,11 @@ func UnitLimitedTimeEvent(p *Player) error {
}
return nil
}
func UnitCard(p *Player) error {
CardMod := p.PlayMod.getCardMod()
for i := 0; i < 1000; i++ {
CardMod.OpenCardPack(4)
}
return nil
}

View File

@ -157,9 +157,8 @@ func (c *CardMod) OpenCardPack(Star int) ([]int, error) {
}
mustHaveStar := cardCfg.GetPackMustHave(Star)
if mustHaveStar != 0 {
cardId = randCard(c.Round, mustHaveStar, 0)
cardId = randCard(c.Round, mustHaveStar, 0, newCard)
if cardId == 0 {
return newCard, fmt.Errorf("OpenCardPack card id err")
}
@ -177,11 +176,11 @@ func (c *CardMod) OpenCardPack(Star int) ([]int, error) {
CardStar := GoUtil.RandMap(randList)
switch CardStar {
case 5:
cardId = randCard(c.Round, 4, 1)
cardId = randCard(c.Round, 4, 1, newCard)
case 6:
cardId = randCard(c.Round, 5, 1)
cardId = randCard(c.Round, 5, 1, newCard)
default:
cardId = randCard(c.Round, CardStar, 0)
cardId = randCard(c.Round, CardStar, 0, newCard)
}
if cardId == 0 {
return newCard, fmt.Errorf("OpenCardPack card id err")
@ -539,7 +538,7 @@ func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
}
func (c *CardMod) RandCard(Star int) int {
return randCard(c.Round, Star, 0)
return randCard(c.Round, Star, 0, []int{})
}
func (c *CardMod) SeasonFirstReward() ([]*item.Item, error) {

View File

@ -5,12 +5,15 @@ import (
cardCfg "server/conf/card"
)
func randCard(Round, Star, IsGold int) int {
func randCard(Round, Star, IsGold int, Except []int) int {
cardList := cardCfg.GetCardListByStar(Round, Star, IsGold)
cardList = GoUtil.SubSlices(cardList, Except)
cardId := GoUtil.RandSlice(cardList)
return cardId
}
func RankGoldCard() (int, int) {
return randCard(0, 4, 1), randCard(0, 5, 1)
Card1 := randCard(0, 4, 1, []int{})
Card2 := randCard(0, 5, 1, []int{Card1})
return Card1, Card2
}