diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index 0d639685..09ac9938 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -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 +} diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 8ec674da..e48796f8 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -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 +} diff --git a/src/server/game/mod/card/Card.go b/src/server/game/mod/card/Card.go index 6d6eb726..465bb8cb 100644 --- a/src/server/game/mod/card/Card.go +++ b/src/server/game/mod/card/Card.go @@ -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) { diff --git a/src/server/game/mod/card/CardFunc.go b/src/server/game/mod/card/CardFunc.go index 49990000..26bf2b50 100644 --- a/src/server/game/mod/card/CardFunc.go +++ b/src/server/game/mod/card/CardFunc.go @@ -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 }