sekai-calculator 0.0.4 → 0.0.6

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.d.ts CHANGED
@@ -16,15 +16,128 @@ interface UserCard {
16
16
  }>;
17
17
  }
18
18
 
19
+ interface UserDeck {
20
+ deckId: number;
21
+ member1: number;
22
+ member2: number;
23
+ member3: number;
24
+ member4: number;
25
+ member5: number;
26
+ }
27
+
19
28
  declare class EventCalculator {
20
29
  private readonly dataProvider;
30
+ private readonly deckCalculator;
21
31
  constructor(dataProvider: DataProvider);
22
32
  private getEventDeckBonus;
23
33
  getCardEventBonus(userCard: UserCard, eventId: number): Promise<number>;
34
+ getDeckEventBonus(userDeck: UserDeck, eventId: number): Promise<number>;
35
+ }
36
+
37
+ interface AreaItemLevel {
38
+ areaItemId: number;
39
+ level: number;
40
+ targetUnit: string;
41
+ targetCardAttr: string;
42
+ targetGameCharacterId: number;
43
+ power1BonusRate: number;
44
+ power1AllMatchBonusRate: number;
45
+ power2BonusRate: number;
46
+ power2AllMatchBonusRate: number;
47
+ power3BonusRate: number;
48
+ power3AllMatchBonusRate: number;
49
+ sentence: string;
50
+ }
51
+
52
+ interface CommonResource {
53
+ resourceId?: number;
54
+ resourceType: string;
55
+ resourceLevel?: number;
56
+ quantity: number;
57
+ }
58
+
59
+ interface Card {
60
+ id: number;
61
+ seq: number;
62
+ characterId: number;
63
+ cardRarityType: string;
64
+ specialTrainingPower1BonusFixed: number;
65
+ specialTrainingPower2BonusFixed: number;
66
+ specialTrainingPower3BonusFixed: number;
67
+ attr: string;
68
+ supportUnit: string;
69
+ skillId: number;
70
+ cardSkillName: string;
71
+ prefix: string;
72
+ assetbundleName: string;
73
+ gachaPhrase: string;
74
+ flavorText: string;
75
+ releaseAt: number;
76
+ cardParameters: Array<{
77
+ id: number;
78
+ cardId: number;
79
+ cardLevel: number;
80
+ cardParameterType: string;
81
+ power: number;
82
+ }>;
83
+ specialTrainingCosts: CommonResource[];
84
+ masterLessonAchieveResources: {
85
+ releaseConditionId: number;
86
+ cardId: number;
87
+ masterRank: number;
88
+ resources: CommonResource[];
89
+ };
90
+ }
91
+
92
+ interface EventCard {
93
+ id: number;
94
+ cardId: number;
95
+ eventId: number;
96
+ bonusRate: number;
24
97
  }
25
98
 
26
- declare const _default: {
27
- EventCalculator: typeof EventCalculator;
28
- };
99
+ interface EventDeckBonus {
100
+ id: number;
101
+ eventId: number;
102
+ gameCharacterUnitId?: number;
103
+ cardAttr?: string;
104
+ bonusRate: number;
105
+ }
106
+
107
+ interface EventRarityBonusRate {
108
+ id: number;
109
+ cardRarityType: string;
110
+ masterRank: number;
111
+ bonusRate: number;
112
+ }
113
+
114
+ interface GameCharacterUnit {
115
+ id: number;
116
+ gameCharacterId: number;
117
+ unit: string;
118
+ colorCode: string;
119
+ skinColorCode: string;
120
+ skinShadowColorCode1: string;
121
+ skinShadowColorCode2: string;
122
+ }
123
+
124
+ interface UserAreaItem {
125
+ areaItemId: number;
126
+ level: number;
127
+ }
128
+
129
+ interface UserChallengeLiveSoloDeck {
130
+ characterId: number;
131
+ leader: number;
132
+ support1: number;
133
+ support2: number | null;
134
+ support3: number | null;
135
+ support4: number | null;
136
+ }
137
+
138
+ interface UserCharacter {
139
+ characterId: number;
140
+ characterRank: number;
141
+ }
29
142
 
30
- export { _default as default };
143
+ export { AreaItemLevel, Card, DataProvider, EventCalculator, EventCard, EventDeckBonus, EventRarityBonusRate, GameCharacterUnit, UserAreaItem, UserCard, UserChallengeLiveSoloDeck, UserCharacter, UserDeck };
package/dist/index.es.js CHANGED
@@ -1,7 +1,35 @@
1
+ function findOrThrow(arr, p) {
2
+ const result = arr.find(p);
3
+ if (result === undefined)
4
+ throw new Error('object not found');
5
+ return result;
6
+ }
7
+
8
+ class DeckCalculator {
9
+ dataProvider;
10
+ constructor(dataProvider) {
11
+ this.dataProvider = dataProvider;
12
+ }
13
+ async getDeck(deckId) {
14
+ const userDecks = await this.dataProvider.getUserData('userDecks');
15
+ return findOrThrow(userDecks, it => it.deckId === deckId);
16
+ }
17
+ async getDeckCards(userDeck) {
18
+ const userCards = await this.dataProvider.getUserData('userCards');
19
+ const cardIds = [userDeck.member1, userDeck.member2, userDeck.member3, userDeck.member4, userDeck.member5];
20
+ return cardIds.map(id => findOrThrow(userCards, it => it.cardId === id));
21
+ }
22
+ async getDeckCardsById(deckId) {
23
+ return await this.getDeckCards(await this.getDeck(deckId));
24
+ }
25
+ }
26
+
1
27
  class EventCalculator {
2
28
  dataProvider;
29
+ deckCalculator;
3
30
  constructor(dataProvider) {
4
31
  this.dataProvider = dataProvider;
32
+ this.deckCalculator = new DeckCalculator(dataProvider);
5
33
  }
6
34
  async getEventDeckBonus(eventId, card) {
7
35
  const eventDeckBonuses = await this.dataProvider.getMasterData('eventDeckBonuses');
@@ -11,9 +39,7 @@ class EventCalculator {
11
39
  .reduce((v, eventDeckBonus) => {
12
40
  if (eventDeckBonus.gameCharacterUnitId === undefined)
13
41
  return Math.max(v, eventDeckBonus.bonusRate);
14
- const gameCharacterUnit = gameCharacterUnits.find(it => it.id === eventDeckBonus.gameCharacterUnitId);
15
- if (gameCharacterUnit === undefined)
16
- throw new Error('game character unit not found');
42
+ const gameCharacterUnit = findOrThrow(gameCharacterUnits, unit => unit.id === eventDeckBonus.gameCharacterUnitId);
17
43
  if (gameCharacterUnit.gameCharacterId !== card.characterId)
18
44
  return v;
19
45
  if (card.characterId < 21 || card.supportUnit === gameCharacterUnit.unit) {
@@ -27,23 +53,20 @@ class EventCalculator {
27
53
  const eventCards = await this.dataProvider.getMasterData('eventCards');
28
54
  const eventRarityBonusRates = await this.dataProvider.getMasterData('eventRarityBonusRates');
29
55
  let eventBonus = 0;
30
- const card = cards.find(it => it.id === userCard.cardId);
31
- if (card === undefined)
32
- throw new Error('card not found');
56
+ const card = findOrThrow(cards, it => it.id === userCard.cardId);
33
57
  eventBonus += await this.getEventDeckBonus(eventId, card);
34
58
  const cardBonus = eventCards.find((it) => it.eventId === eventId && it.cardId === card.id);
35
59
  if (cardBonus != null) {
36
60
  eventBonus += cardBonus.bonusRate;
37
61
  }
38
- const masterRankBonus = eventRarityBonusRates
39
- .find((it) => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
40
- if (masterRankBonus === undefined)
41
- throw new Error('master rank bonus not found');
62
+ const masterRankBonus = findOrThrow(eventRarityBonusRates, it => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
42
63
  eventBonus += masterRankBonus.bonusRate;
43
64
  return eventBonus;
44
65
  }
66
+ async getDeckEventBonus(userDeck, eventId) {
67
+ const deckCards = await this.deckCalculator.getDeckCards(userDeck);
68
+ return await deckCards.reduce(async (v, it) => await this.getCardEventBonus(it, eventId) + await v, Promise.resolve(0));
69
+ }
45
70
  }
46
71
 
47
- var index = { EventCalculator };
48
-
49
- export { index as default };
72
+ export { EventCalculator };
package/dist/index.js CHANGED
@@ -1,9 +1,37 @@
1
1
  'use strict';
2
2
 
3
+ function findOrThrow(arr, p) {
4
+ const result = arr.find(p);
5
+ if (result === undefined)
6
+ throw new Error('object not found');
7
+ return result;
8
+ }
9
+
10
+ class DeckCalculator {
11
+ dataProvider;
12
+ constructor(dataProvider) {
13
+ this.dataProvider = dataProvider;
14
+ }
15
+ async getDeck(deckId) {
16
+ const userDecks = await this.dataProvider.getUserData('userDecks');
17
+ return findOrThrow(userDecks, it => it.deckId === deckId);
18
+ }
19
+ async getDeckCards(userDeck) {
20
+ const userCards = await this.dataProvider.getUserData('userCards');
21
+ const cardIds = [userDeck.member1, userDeck.member2, userDeck.member3, userDeck.member4, userDeck.member5];
22
+ return cardIds.map(id => findOrThrow(userCards, it => it.cardId === id));
23
+ }
24
+ async getDeckCardsById(deckId) {
25
+ return await this.getDeckCards(await this.getDeck(deckId));
26
+ }
27
+ }
28
+
3
29
  class EventCalculator {
4
30
  dataProvider;
31
+ deckCalculator;
5
32
  constructor(dataProvider) {
6
33
  this.dataProvider = dataProvider;
34
+ this.deckCalculator = new DeckCalculator(dataProvider);
7
35
  }
8
36
  async getEventDeckBonus(eventId, card) {
9
37
  const eventDeckBonuses = await this.dataProvider.getMasterData('eventDeckBonuses');
@@ -13,9 +41,7 @@ class EventCalculator {
13
41
  .reduce((v, eventDeckBonus) => {
14
42
  if (eventDeckBonus.gameCharacterUnitId === undefined)
15
43
  return Math.max(v, eventDeckBonus.bonusRate);
16
- const gameCharacterUnit = gameCharacterUnits.find(it => it.id === eventDeckBonus.gameCharacterUnitId);
17
- if (gameCharacterUnit === undefined)
18
- throw new Error('game character unit not found');
44
+ const gameCharacterUnit = findOrThrow(gameCharacterUnits, unit => unit.id === eventDeckBonus.gameCharacterUnitId);
19
45
  if (gameCharacterUnit.gameCharacterId !== card.characterId)
20
46
  return v;
21
47
  if (card.characterId < 21 || card.supportUnit === gameCharacterUnit.unit) {
@@ -29,23 +55,20 @@ class EventCalculator {
29
55
  const eventCards = await this.dataProvider.getMasterData('eventCards');
30
56
  const eventRarityBonusRates = await this.dataProvider.getMasterData('eventRarityBonusRates');
31
57
  let eventBonus = 0;
32
- const card = cards.find(it => it.id === userCard.cardId);
33
- if (card === undefined)
34
- throw new Error('card not found');
58
+ const card = findOrThrow(cards, it => it.id === userCard.cardId);
35
59
  eventBonus += await this.getEventDeckBonus(eventId, card);
36
60
  const cardBonus = eventCards.find((it) => it.eventId === eventId && it.cardId === card.id);
37
61
  if (cardBonus != null) {
38
62
  eventBonus += cardBonus.bonusRate;
39
63
  }
40
- const masterRankBonus = eventRarityBonusRates
41
- .find((it) => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
42
- if (masterRankBonus === undefined)
43
- throw new Error('master rank bonus not found');
64
+ const masterRankBonus = findOrThrow(eventRarityBonusRates, it => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
44
65
  eventBonus += masterRankBonus.bonusRate;
45
66
  return eventBonus;
46
67
  }
68
+ async getDeckEventBonus(userDeck, eventId) {
69
+ const deckCards = await this.deckCalculator.getDeckCards(userDeck);
70
+ return await deckCards.reduce(async (v, it) => await this.getCardEventBonus(it, eventId) + await v, Promise.resolve(0));
71
+ }
47
72
  }
48
73
 
49
- var index = { EventCalculator };
50
-
51
- module.exports = index;
74
+ exports.EventCalculator = EventCalculator;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sekai-calculator",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
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",
@@ -50,6 +50,7 @@
50
50
  "scripts": {
51
51
  "build": "rollup -c --configPlugin typescript",
52
52
  "lint": "eslint --fix 'src/**/*.ts'",
53
- "test": "jest"
53
+ "test": "jest",
54
+ "release": "pnpm build && pnpm publish"
54
55
  }
55
56
  }