sekai-calculator 0.6.6 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +26 -10
- package/dist/index.mjs +26 -10
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -625,16 +625,22 @@ class BaseDeckRecommend {
|
|
|
625
625
|
}
|
|
626
626
|
return false;
|
|
627
627
|
}
|
|
628
|
-
static filterCard(cardDetails) {
|
|
629
|
-
let afterFilter = cardDetails;
|
|
628
|
+
static filterCard(cardDetails, preMinBonus = 65) {
|
|
630
629
|
for (const minBonus of [55, 50, 45, 40, 30, 25, 15, 5, 0]) {
|
|
630
|
+
if (minBonus >= preMinBonus)
|
|
631
|
+
continue;
|
|
631
632
|
const bonusFilter = cardDetails.filter(cardDetail => !(cardDetail.eventBonus !== undefined && cardDetail.eventBonus < minBonus));
|
|
632
633
|
if (this.canMakeEventDeck(bonusFilter)) {
|
|
633
|
-
|
|
634
|
-
|
|
634
|
+
return {
|
|
635
|
+
minBonus,
|
|
636
|
+
cards: bonusFilter
|
|
637
|
+
};
|
|
635
638
|
}
|
|
636
639
|
}
|
|
637
|
-
return
|
|
640
|
+
return {
|
|
641
|
+
minBonus: 0,
|
|
642
|
+
cards: cardDetails
|
|
643
|
+
};
|
|
638
644
|
}
|
|
639
645
|
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, honorBonus = 0, deckCards = [], deckCharacters = []) {
|
|
640
646
|
if (deckCards.length === member) {
|
|
@@ -674,16 +680,26 @@ class BaseDeckRecommend {
|
|
|
674
680
|
if (ans.length > limit)
|
|
675
681
|
ans = ans.slice(0, limit);
|
|
676
682
|
}
|
|
677
|
-
if (deckCards.length === 0 && ans.length === 0)
|
|
678
|
-
throw new Error(`Cannot find deck in ${cardDetails.length} cards`);
|
|
683
|
+
if (deckCards.length === 0 && ans.length === 0) {
|
|
684
|
+
throw new Error(`Cannot find deck in ${cardDetails.length} cards(${cardDetails.map(it => it.cardId).toString()})`);
|
|
685
|
+
}
|
|
679
686
|
return ans;
|
|
680
687
|
}
|
|
681
688
|
async recommendHighScoreDeck(userCards, scoreFunc, { musicMeta, limit = 1, member = 5, cardConfig = {} }, eventId = 0, isChallengeLive = false) {
|
|
682
689
|
const cards = await this.cardCalculator.batchGetCardDetail(userCards, cardConfig, eventId);
|
|
683
|
-
let cardDetails = (isChallengeLive || eventId === 0) ? cards : BaseDeckRecommend.filterCard(cards);
|
|
684
|
-
cardDetails = cardDetails.sort((a, b) => a.cardId - b.cardId);
|
|
685
690
|
const honorBonus = await this.deckCalculator.getHonorBonusPower();
|
|
686
|
-
|
|
691
|
+
let minBonus = (isChallengeLive || eventId === 0) ? 0 : 65;
|
|
692
|
+
while (minBonus > 0) {
|
|
693
|
+
const cardDetails = BaseDeckRecommend.filterCard(cards, minBonus);
|
|
694
|
+
minBonus = cardDetails.minBonus;
|
|
695
|
+
try {
|
|
696
|
+
return BaseDeckRecommend.findBestCards(cardDetails.cards, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
697
|
+
}
|
|
698
|
+
catch (e) {
|
|
699
|
+
console.warn(e);
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
return BaseDeckRecommend.findBestCards(cards, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
687
703
|
}
|
|
688
704
|
static getLiveScoreFunction(liveType) {
|
|
689
705
|
return (musicMeta, honorBonus, deckCards) => LiveCalculator.getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType);
|
package/dist/index.mjs
CHANGED
|
@@ -623,16 +623,22 @@ class BaseDeckRecommend {
|
|
|
623
623
|
}
|
|
624
624
|
return false;
|
|
625
625
|
}
|
|
626
|
-
static filterCard(cardDetails) {
|
|
627
|
-
let afterFilter = cardDetails;
|
|
626
|
+
static filterCard(cardDetails, preMinBonus = 65) {
|
|
628
627
|
for (const minBonus of [55, 50, 45, 40, 30, 25, 15, 5, 0]) {
|
|
628
|
+
if (minBonus >= preMinBonus)
|
|
629
|
+
continue;
|
|
629
630
|
const bonusFilter = cardDetails.filter(cardDetail => !(cardDetail.eventBonus !== undefined && cardDetail.eventBonus < minBonus));
|
|
630
631
|
if (this.canMakeEventDeck(bonusFilter)) {
|
|
631
|
-
|
|
632
|
-
|
|
632
|
+
return {
|
|
633
|
+
minBonus,
|
|
634
|
+
cards: bonusFilter
|
|
635
|
+
};
|
|
633
636
|
}
|
|
634
637
|
}
|
|
635
|
-
return
|
|
638
|
+
return {
|
|
639
|
+
minBonus: 0,
|
|
640
|
+
cards: cardDetails
|
|
641
|
+
};
|
|
636
642
|
}
|
|
637
643
|
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, honorBonus = 0, deckCards = [], deckCharacters = []) {
|
|
638
644
|
if (deckCards.length === member) {
|
|
@@ -672,16 +678,26 @@ class BaseDeckRecommend {
|
|
|
672
678
|
if (ans.length > limit)
|
|
673
679
|
ans = ans.slice(0, limit);
|
|
674
680
|
}
|
|
675
|
-
if (deckCards.length === 0 && ans.length === 0)
|
|
676
|
-
throw new Error(`Cannot find deck in ${cardDetails.length} cards`);
|
|
681
|
+
if (deckCards.length === 0 && ans.length === 0) {
|
|
682
|
+
throw new Error(`Cannot find deck in ${cardDetails.length} cards(${cardDetails.map(it => it.cardId).toString()})`);
|
|
683
|
+
}
|
|
677
684
|
return ans;
|
|
678
685
|
}
|
|
679
686
|
async recommendHighScoreDeck(userCards, scoreFunc, { musicMeta, limit = 1, member = 5, cardConfig = {} }, eventId = 0, isChallengeLive = false) {
|
|
680
687
|
const cards = await this.cardCalculator.batchGetCardDetail(userCards, cardConfig, eventId);
|
|
681
|
-
let cardDetails = (isChallengeLive || eventId === 0) ? cards : BaseDeckRecommend.filterCard(cards);
|
|
682
|
-
cardDetails = cardDetails.sort((a, b) => a.cardId - b.cardId);
|
|
683
688
|
const honorBonus = await this.deckCalculator.getHonorBonusPower();
|
|
684
|
-
|
|
689
|
+
let minBonus = (isChallengeLive || eventId === 0) ? 0 : 65;
|
|
690
|
+
while (minBonus > 0) {
|
|
691
|
+
const cardDetails = BaseDeckRecommend.filterCard(cards, minBonus);
|
|
692
|
+
minBonus = cardDetails.minBonus;
|
|
693
|
+
try {
|
|
694
|
+
return BaseDeckRecommend.findBestCards(cardDetails.cards, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
695
|
+
}
|
|
696
|
+
catch (e) {
|
|
697
|
+
console.warn(e);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
return BaseDeckRecommend.findBestCards(cards, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
685
701
|
}
|
|
686
702
|
static getLiveScoreFunction(liveType) {
|
|
687
703
|
return (musicMeta, honorBonus, deckCards) => LiveCalculator.getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType);
|