sekai-calculator 0.0.4 → 0.0.5
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 +117 -4
- package/dist/index.es.js +29 -13
- package/dist/index.js +29 -13
- package/package.json +1 -1
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
|
-
|
|
27
|
-
|
|
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 {
|
|
143
|
+
export { AreaItemLevel, Card, DataProvider, EventCalculator, EventCard, EventDeckBonus, EventRarityBonusRate, GameCharacterUnit, UserAreaItem, UserCard, UserChallengeLiveSoloDeck, UserCharacter, UserDeck };
|
package/dist/index.es.js
CHANGED
|
@@ -1,7 +1,28 @@
|
|
|
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 getDeckCards(userDeck) {
|
|
14
|
+
const userCards = await this.dataProvider.getUserData('userCards');
|
|
15
|
+
const cardIds = [userDeck.member1, userDeck.member2, userDeck.member3, userDeck.member4, userDeck.member5];
|
|
16
|
+
return cardIds.map(id => findOrThrow(userCards, it => it.cardId === id));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
1
20
|
class EventCalculator {
|
|
2
21
|
dataProvider;
|
|
22
|
+
deckCalculator;
|
|
3
23
|
constructor(dataProvider) {
|
|
4
24
|
this.dataProvider = dataProvider;
|
|
25
|
+
this.deckCalculator = new DeckCalculator(dataProvider);
|
|
5
26
|
}
|
|
6
27
|
async getEventDeckBonus(eventId, card) {
|
|
7
28
|
const eventDeckBonuses = await this.dataProvider.getMasterData('eventDeckBonuses');
|
|
@@ -11,9 +32,7 @@ class EventCalculator {
|
|
|
11
32
|
.reduce((v, eventDeckBonus) => {
|
|
12
33
|
if (eventDeckBonus.gameCharacterUnitId === undefined)
|
|
13
34
|
return Math.max(v, eventDeckBonus.bonusRate);
|
|
14
|
-
const gameCharacterUnit = gameCharacterUnits
|
|
15
|
-
if (gameCharacterUnit === undefined)
|
|
16
|
-
throw new Error('game character unit not found');
|
|
35
|
+
const gameCharacterUnit = findOrThrow(gameCharacterUnits, unit => unit.id === eventDeckBonus.gameCharacterUnitId);
|
|
17
36
|
if (gameCharacterUnit.gameCharacterId !== card.characterId)
|
|
18
37
|
return v;
|
|
19
38
|
if (card.characterId < 21 || card.supportUnit === gameCharacterUnit.unit) {
|
|
@@ -27,23 +46,20 @@ class EventCalculator {
|
|
|
27
46
|
const eventCards = await this.dataProvider.getMasterData('eventCards');
|
|
28
47
|
const eventRarityBonusRates = await this.dataProvider.getMasterData('eventRarityBonusRates');
|
|
29
48
|
let eventBonus = 0;
|
|
30
|
-
const card = cards
|
|
31
|
-
if (card === undefined)
|
|
32
|
-
throw new Error('card not found');
|
|
49
|
+
const card = findOrThrow(cards, it => it.id === userCard.cardId);
|
|
33
50
|
eventBonus += await this.getEventDeckBonus(eventId, card);
|
|
34
51
|
const cardBonus = eventCards.find((it) => it.eventId === eventId && it.cardId === card.id);
|
|
35
52
|
if (cardBonus != null) {
|
|
36
53
|
eventBonus += cardBonus.bonusRate;
|
|
37
54
|
}
|
|
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');
|
|
55
|
+
const masterRankBonus = findOrThrow(eventRarityBonusRates, it => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
|
|
42
56
|
eventBonus += masterRankBonus.bonusRate;
|
|
43
57
|
return eventBonus;
|
|
44
58
|
}
|
|
59
|
+
async getDeckEventBonus(userDeck, eventId) {
|
|
60
|
+
const deckCards = await this.deckCalculator.getDeckCards(userDeck);
|
|
61
|
+
return await deckCards.reduce(async (v, it) => await this.getCardEventBonus(it, eventId) + await v, Promise.resolve(0));
|
|
62
|
+
}
|
|
45
63
|
}
|
|
46
64
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export { index as default };
|
|
65
|
+
export { EventCalculator };
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
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 getDeckCards(userDeck) {
|
|
16
|
+
const userCards = await this.dataProvider.getUserData('userCards');
|
|
17
|
+
const cardIds = [userDeck.member1, userDeck.member2, userDeck.member3, userDeck.member4, userDeck.member5];
|
|
18
|
+
return cardIds.map(id => findOrThrow(userCards, it => it.cardId === id));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
3
22
|
class EventCalculator {
|
|
4
23
|
dataProvider;
|
|
24
|
+
deckCalculator;
|
|
5
25
|
constructor(dataProvider) {
|
|
6
26
|
this.dataProvider = dataProvider;
|
|
27
|
+
this.deckCalculator = new DeckCalculator(dataProvider);
|
|
7
28
|
}
|
|
8
29
|
async getEventDeckBonus(eventId, card) {
|
|
9
30
|
const eventDeckBonuses = await this.dataProvider.getMasterData('eventDeckBonuses');
|
|
@@ -13,9 +34,7 @@ class EventCalculator {
|
|
|
13
34
|
.reduce((v, eventDeckBonus) => {
|
|
14
35
|
if (eventDeckBonus.gameCharacterUnitId === undefined)
|
|
15
36
|
return Math.max(v, eventDeckBonus.bonusRate);
|
|
16
|
-
const gameCharacterUnit = gameCharacterUnits
|
|
17
|
-
if (gameCharacterUnit === undefined)
|
|
18
|
-
throw new Error('game character unit not found');
|
|
37
|
+
const gameCharacterUnit = findOrThrow(gameCharacterUnits, unit => unit.id === eventDeckBonus.gameCharacterUnitId);
|
|
19
38
|
if (gameCharacterUnit.gameCharacterId !== card.characterId)
|
|
20
39
|
return v;
|
|
21
40
|
if (card.characterId < 21 || card.supportUnit === gameCharacterUnit.unit) {
|
|
@@ -29,23 +48,20 @@ class EventCalculator {
|
|
|
29
48
|
const eventCards = await this.dataProvider.getMasterData('eventCards');
|
|
30
49
|
const eventRarityBonusRates = await this.dataProvider.getMasterData('eventRarityBonusRates');
|
|
31
50
|
let eventBonus = 0;
|
|
32
|
-
const card = cards
|
|
33
|
-
if (card === undefined)
|
|
34
|
-
throw new Error('card not found');
|
|
51
|
+
const card = findOrThrow(cards, it => it.id === userCard.cardId);
|
|
35
52
|
eventBonus += await this.getEventDeckBonus(eventId, card);
|
|
36
53
|
const cardBonus = eventCards.find((it) => it.eventId === eventId && it.cardId === card.id);
|
|
37
54
|
if (cardBonus != null) {
|
|
38
55
|
eventBonus += cardBonus.bonusRate;
|
|
39
56
|
}
|
|
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');
|
|
57
|
+
const masterRankBonus = findOrThrow(eventRarityBonusRates, it => it.cardRarityType === card.cardRarityType && it.masterRank === userCard.masterRank);
|
|
44
58
|
eventBonus += masterRankBonus.bonusRate;
|
|
45
59
|
return eventBonus;
|
|
46
60
|
}
|
|
61
|
+
async getDeckEventBonus(userDeck, eventId) {
|
|
62
|
+
const deckCards = await this.deckCalculator.getDeckCards(userDeck);
|
|
63
|
+
return await deckCards.reduce(async (v, it) => await this.getCardEventBonus(it, eventId) + await v, Promise.resolve(0));
|
|
64
|
+
}
|
|
47
65
|
}
|
|
48
66
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
module.exports = index;
|
|
67
|
+
exports.EventCalculator = EventCalculator;
|