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 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
- W.I.P.
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
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sekai-calculator",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Project SEKAI Calculator for deck power, live score, event point and more.",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",