sekai-calculator 0.4.0 → 0.4.1
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/README.md +18 -1
- package/dist/index.cjs +9 -3
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +9 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,4 +7,21 @@ This project is fully developed with TypeScript, while reducing `any` as possibl
|
|
|
7
7
|
Both ECMAScript Module `index.mjs` and CommonJS `index.cjs` are provided with types `index.d.ts` for TypeScript.
|
|
8
8
|
|
|
9
9
|
## Quick Start
|
|
10
|
-
|
|
10
|
+
### Install
|
|
11
|
+
This package has been released in [npm](https://www.npmjs.com/package/sekai-calculator).
|
|
12
|
+
```shell
|
|
13
|
+
# npm
|
|
14
|
+
npm i sekai-calculator
|
|
15
|
+
# yarn
|
|
16
|
+
yarn add sekai-calculator
|
|
17
|
+
# pnpm
|
|
18
|
+
pnpm add sekai-calculator
|
|
19
|
+
```
|
|
20
|
+
### Usage
|
|
21
|
+
Example is written in TypeScript.
|
|
22
|
+
|
|
23
|
+
A `DataProvider` implementation is required for providing `UserData`, `MasterData` and `MusicMeta`.
|
|
24
|
+
Basically, `UserArea`, `UserCard`, `UserCharacter` and `UserHonor` are required in `UserData`.
|
|
25
|
+
```typescript
|
|
26
|
+
// W.I.P.
|
|
27
|
+
```
|
package/dist/index.cjs
CHANGED
|
@@ -554,11 +554,14 @@ class BaseDeckRecommend {
|
|
|
554
554
|
}
|
|
555
555
|
return afterFilter;
|
|
556
556
|
}
|
|
557
|
-
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, deckCards = [], deckCharacters = []) {
|
|
557
|
+
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, honorBonus = 0, deckCards = [], deckCharacters = []) {
|
|
558
558
|
if (deckCards.length === member) {
|
|
559
559
|
const score = scoreFunc(deckCards);
|
|
560
|
+
const deckDetail = DeckCalculator.getDeckDetailByCards(deckCards, honorBonus);
|
|
560
561
|
return [{
|
|
561
562
|
score,
|
|
563
|
+
power: deckDetail.power,
|
|
564
|
+
eventBonus: deckDetail.eventBonus,
|
|
562
565
|
deckCards
|
|
563
566
|
}];
|
|
564
567
|
}
|
|
@@ -579,7 +582,7 @@ class BaseDeckRecommend {
|
|
|
579
582
|
if (CardCalculator.isCertainlyLessThan(card, preCard))
|
|
580
583
|
continue;
|
|
581
584
|
preCard = card;
|
|
582
|
-
const result = BaseDeckRecommend.findBestCards(cardDetails, scoreFunc, limit, isChallengeLive, member, [...deckCards, card], [...deckCharacters, card.characterId]);
|
|
585
|
+
const result = BaseDeckRecommend.findBestCards(cardDetails, scoreFunc, limit, isChallengeLive, member, honorBonus, [...deckCards, card], [...deckCharacters, card.characterId]);
|
|
583
586
|
ans = [...ans, ...result].sort((a, b) => b.score - a.score);
|
|
584
587
|
if (ans.length > limit)
|
|
585
588
|
ans = ans.slice(0, limit);
|
|
@@ -593,7 +596,7 @@ class BaseDeckRecommend {
|
|
|
593
596
|
let cardDetails = (isChallengeLive || eventId === 0) ? cards : BaseDeckRecommend.filterCard(cards);
|
|
594
597
|
cardDetails = cardDetails.sort((a, b) => a.cardId - b.cardId);
|
|
595
598
|
const honorBonus = await this.deckCalculator.getHonorBonusPower();
|
|
596
|
-
return BaseDeckRecommend.findBestCards(cardDetails, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member);
|
|
599
|
+
return BaseDeckRecommend.findBestCards(cardDetails, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
597
600
|
}
|
|
598
601
|
static getLiveScoreFunction(liveType) {
|
|
599
602
|
return (musicMeta, honorBonus, deckCards) => LiveCalculator.getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType);
|
|
@@ -619,6 +622,7 @@ class ChallengeLiveDeckRecommend {
|
|
|
619
622
|
return recommend.map(it => {
|
|
620
623
|
return {
|
|
621
624
|
score: it.score,
|
|
625
|
+
power: it.power,
|
|
622
626
|
deck: DeckService.toUserChallengeLiveSoloDeck(it.deckCards, characterId)
|
|
623
627
|
};
|
|
624
628
|
});
|
|
@@ -638,6 +642,8 @@ class EventDeckRecommend {
|
|
|
638
642
|
return recommend.map(it => {
|
|
639
643
|
return {
|
|
640
644
|
point: it.score,
|
|
645
|
+
power: it.power,
|
|
646
|
+
eventBonus: it.eventBonus,
|
|
641
647
|
deck: DeckService.toUserDeck(it.deckCards)
|
|
642
648
|
};
|
|
643
649
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -256,6 +256,7 @@ declare class ChallengeLiveDeckRecommend {
|
|
|
256
256
|
constructor(dataProvider: DataProvider);
|
|
257
257
|
recommendChallengeLiveDeck(characterId: number, musicMeta: MusicMeta, limit?: number, member?: number): Promise<Array<{
|
|
258
258
|
score: number;
|
|
259
|
+
power: number;
|
|
259
260
|
deck: UserChallengeLiveSoloDeck;
|
|
260
261
|
}>>;
|
|
261
262
|
}
|
|
@@ -266,6 +267,8 @@ declare class EventDeckRecommend {
|
|
|
266
267
|
constructor(dataProvider: DataProvider);
|
|
267
268
|
recommendEventDeck(eventId: number, musicMeta: MusicMeta, liveType: LiveType, limit?: number): Promise<Array<{
|
|
268
269
|
point: number;
|
|
270
|
+
power: number;
|
|
271
|
+
eventBonus?: number;
|
|
269
272
|
deck: UserDeck;
|
|
270
273
|
}>>;
|
|
271
274
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -552,11 +552,14 @@ class BaseDeckRecommend {
|
|
|
552
552
|
}
|
|
553
553
|
return afterFilter;
|
|
554
554
|
}
|
|
555
|
-
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, deckCards = [], deckCharacters = []) {
|
|
555
|
+
static findBestCards(cardDetails, scoreFunc, limit = 1, isChallengeLive = false, member = 5, honorBonus = 0, deckCards = [], deckCharacters = []) {
|
|
556
556
|
if (deckCards.length === member) {
|
|
557
557
|
const score = scoreFunc(deckCards);
|
|
558
|
+
const deckDetail = DeckCalculator.getDeckDetailByCards(deckCards, honorBonus);
|
|
558
559
|
return [{
|
|
559
560
|
score,
|
|
561
|
+
power: deckDetail.power,
|
|
562
|
+
eventBonus: deckDetail.eventBonus,
|
|
560
563
|
deckCards
|
|
561
564
|
}];
|
|
562
565
|
}
|
|
@@ -577,7 +580,7 @@ class BaseDeckRecommend {
|
|
|
577
580
|
if (CardCalculator.isCertainlyLessThan(card, preCard))
|
|
578
581
|
continue;
|
|
579
582
|
preCard = card;
|
|
580
|
-
const result = BaseDeckRecommend.findBestCards(cardDetails, scoreFunc, limit, isChallengeLive, member, [...deckCards, card], [...deckCharacters, card.characterId]);
|
|
583
|
+
const result = BaseDeckRecommend.findBestCards(cardDetails, scoreFunc, limit, isChallengeLive, member, honorBonus, [...deckCards, card], [...deckCharacters, card.characterId]);
|
|
581
584
|
ans = [...ans, ...result].sort((a, b) => b.score - a.score);
|
|
582
585
|
if (ans.length > limit)
|
|
583
586
|
ans = ans.slice(0, limit);
|
|
@@ -591,7 +594,7 @@ class BaseDeckRecommend {
|
|
|
591
594
|
let cardDetails = (isChallengeLive || eventId === 0) ? cards : BaseDeckRecommend.filterCard(cards);
|
|
592
595
|
cardDetails = cardDetails.sort((a, b) => a.cardId - b.cardId);
|
|
593
596
|
const honorBonus = await this.deckCalculator.getHonorBonusPower();
|
|
594
|
-
return BaseDeckRecommend.findBestCards(cardDetails, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member);
|
|
597
|
+
return BaseDeckRecommend.findBestCards(cardDetails, deckCards => scoreFunc(musicMeta, honorBonus, deckCards), limit, isChallengeLive, member, honorBonus);
|
|
595
598
|
}
|
|
596
599
|
static getLiveScoreFunction(liveType) {
|
|
597
600
|
return (musicMeta, honorBonus, deckCards) => LiveCalculator.getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType);
|
|
@@ -617,6 +620,7 @@ class ChallengeLiveDeckRecommend {
|
|
|
617
620
|
return recommend.map(it => {
|
|
618
621
|
return {
|
|
619
622
|
score: it.score,
|
|
623
|
+
power: it.power,
|
|
620
624
|
deck: DeckService.toUserChallengeLiveSoloDeck(it.deckCards, characterId)
|
|
621
625
|
};
|
|
622
626
|
});
|
|
@@ -636,6 +640,8 @@ class EventDeckRecommend {
|
|
|
636
640
|
return recommend.map(it => {
|
|
637
641
|
return {
|
|
638
642
|
point: it.score,
|
|
643
|
+
power: it.power,
|
|
644
|
+
eventBonus: it.eventBonus,
|
|
639
645
|
deck: DeckService.toUserDeck(it.deckCards)
|
|
640
646
|
};
|
|
641
647
|
});
|