sekai-calculator 0.6.3 → 0.6.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.cjs +26 -10
- package/dist/index.d.ts +26 -24
- package/dist/index.mjs +26 -10
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -438,8 +438,8 @@ class LiveCalculator {
|
|
|
438
438
|
? skillDetails
|
|
439
439
|
: (liveType === exports.LiveType.MULTI
|
|
440
440
|
? duplicateObj(LiveCalculator.getMultiLiveSkill(deckDetail), 6)
|
|
441
|
-
: [...[...deckDetail.
|
|
442
|
-
deckDetail.
|
|
441
|
+
: [...[...deckDetail.cards].sort((a, b) => a.scoreUp - b.scoreUp),
|
|
442
|
+
deckDetail.cards[0]]);
|
|
443
443
|
const baseRate = LiveCalculator.getBaseScore(musicMeta, liveType);
|
|
444
444
|
const skillScores = [...LiveCalculator.getSkillScore(musicMeta, liveType)];
|
|
445
445
|
const skillRate = skillDetails === undefined
|
|
@@ -457,9 +457,11 @@ class LiveCalculator {
|
|
|
457
457
|
};
|
|
458
458
|
}
|
|
459
459
|
static getMultiLiveSkill(deckDetail) {
|
|
460
|
-
const scoreUp = deckDetail.
|
|
461
|
-
const lifeRecovery = deckDetail.
|
|
460
|
+
const scoreUp = deckDetail.cards.reduce((v, it, i) => v + (i === 0 ? it.scoreUp : (it.scoreUp / 5)), 0);
|
|
461
|
+
const lifeRecovery = deckDetail.cards[0].lifeRecovery;
|
|
462
462
|
return {
|
|
463
|
+
cardId: 0,
|
|
464
|
+
power: 0,
|
|
463
465
|
scoreUp,
|
|
464
466
|
lifeRecovery
|
|
465
467
|
};
|
|
@@ -471,6 +473,8 @@ class LiveCalculator {
|
|
|
471
473
|
const ret = [];
|
|
472
474
|
for (let i = 0; i < 6; ++i) {
|
|
473
475
|
ret.push({
|
|
476
|
+
cardId: 0,
|
|
477
|
+
power: 0,
|
|
474
478
|
scoreUp: 0,
|
|
475
479
|
lifeRecovery: 0
|
|
476
480
|
});
|
|
@@ -485,7 +489,7 @@ class LiveCalculator {
|
|
|
485
489
|
const deckDetail = await this.deckCalculator.getDeckDetail(deckCards);
|
|
486
490
|
const skills = liveType === exports.LiveType.MULTI
|
|
487
491
|
? undefined
|
|
488
|
-
: LiveCalculator.getSoloLiveSkill(liveSkills, deckDetail.
|
|
492
|
+
: LiveCalculator.getSoloLiveSkill(liveSkills, deckDetail.cards);
|
|
489
493
|
return LiveCalculator.getLiveDetailByDeck(deckDetail, musicMeta, liveType, skills);
|
|
490
494
|
}
|
|
491
495
|
static getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType) {
|
|
@@ -567,19 +571,31 @@ class DeckCalculator {
|
|
|
567
571
|
const map = new Map();
|
|
568
572
|
for (const cardDetail of cardDetails) {
|
|
569
573
|
computeWithDefault(map, cardDetail.attr, 0, it => it + 1);
|
|
570
|
-
cardDetail.units.forEach(key => {
|
|
574
|
+
cardDetail.units.forEach(key => {
|
|
575
|
+
computeWithDefault(map, key, 0, it => it + 1);
|
|
576
|
+
});
|
|
571
577
|
}
|
|
572
|
-
const
|
|
573
|
-
|
|
578
|
+
const cardPower = new Map();
|
|
579
|
+
cardDetails.forEach(cardDetail => {
|
|
580
|
+
cardPower.set(cardDetail.cardId, cardDetail.units.reduce((vv, unit) => Math.max(vv, cardDetail.power.get(unit, getOrThrow(map, unit), getOrThrow(map, cardDetail.attr))), 0));
|
|
581
|
+
});
|
|
582
|
+
const power = cardDetails.reduce((v, cardDetail) => v + getOrThrow(cardPower, cardDetail.cardId), 0) + honorBonus;
|
|
583
|
+
const cards = cardDetails.map(cardDetail => {
|
|
574
584
|
const scoreUp = cardDetail.units.reduce((vv, unit) => Math.max(vv, cardDetail.scoreSkill.get(unit, getOrThrow(map, unit), 1)), 0);
|
|
575
585
|
return {
|
|
576
586
|
cardId: cardDetail.cardId,
|
|
587
|
+
power: getOrThrow(cardPower, cardDetail.cardId),
|
|
588
|
+
eventBonus: cardDetail.eventBonus,
|
|
577
589
|
scoreUp,
|
|
578
590
|
lifeRecovery: cardDetail.lifeSkill
|
|
579
591
|
};
|
|
580
592
|
});
|
|
581
593
|
const eventBonus = EventCalculator.getDeckBonus(cardDetails);
|
|
582
|
-
return {
|
|
594
|
+
return {
|
|
595
|
+
power,
|
|
596
|
+
eventBonus,
|
|
597
|
+
cards
|
|
598
|
+
};
|
|
583
599
|
}
|
|
584
600
|
async getDeckDetail(deckCards) {
|
|
585
601
|
return DeckCalculator.getDeckDetailByCards(await this.cardCalculator.batchGetCardDetail(deckCards), await this.getHonorBonusPower());
|
|
@@ -628,7 +644,7 @@ class BaseDeckRecommend {
|
|
|
628
644
|
score,
|
|
629
645
|
power: deckDetail.power,
|
|
630
646
|
eventBonus: deckDetail.eventBonus,
|
|
631
|
-
deckCards
|
|
647
|
+
deckCards: deckDetail.cards
|
|
632
648
|
}];
|
|
633
649
|
}
|
|
634
650
|
let ans = [];
|
package/dist/index.d.ts
CHANGED
|
@@ -117,16 +117,37 @@ interface CardConfig {
|
|
|
117
117
|
skillMax?: boolean;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
declare class DeckCalculator {
|
|
121
|
+
private readonly dataProvider;
|
|
122
|
+
private readonly cardCalculator;
|
|
123
|
+
constructor(dataProvider: DataProvider);
|
|
124
|
+
getHonorBonusPower(): Promise<number>;
|
|
125
|
+
static getDeckDetailByCards(cardDetails: CardDetail[], honorBonus: number): DeckDetail;
|
|
126
|
+
getDeckDetail(deckCards: UserCard[]): Promise<DeckDetail>;
|
|
127
|
+
}
|
|
128
|
+
interface DeckDetail {
|
|
129
|
+
power: number;
|
|
130
|
+
eventBonus?: number;
|
|
131
|
+
cards: DeckCardDetail[];
|
|
132
|
+
}
|
|
133
|
+
interface DeckCardDetail {
|
|
134
|
+
cardId: number;
|
|
135
|
+
power: number;
|
|
136
|
+
eventBonus?: number;
|
|
137
|
+
scoreUp: number;
|
|
138
|
+
lifeRecovery: number;
|
|
139
|
+
}
|
|
140
|
+
|
|
120
141
|
declare class DeckService {
|
|
121
142
|
private readonly dataProvider;
|
|
122
143
|
constructor(dataProvider: DataProvider);
|
|
123
144
|
getUserCard(cardId: number): Promise<UserCard>;
|
|
124
145
|
getDeck(deckId: number): Promise<UserDeck>;
|
|
125
146
|
getDeckCards(userDeck: UserDeck): Promise<UserCard[]>;
|
|
126
|
-
static toUserDeck(userCards:
|
|
147
|
+
static toUserDeck(userCards: DeckCardDetail[], userId?: number, deckId?: number, name?: string): UserDeck;
|
|
127
148
|
getChallengeLiveSoloDeck(characterId: number): Promise<UserChallengeLiveSoloDeck>;
|
|
128
149
|
getChallengeLiveSoloDeckCards(deck: UserChallengeLiveSoloDeck): Promise<UserCard[]>;
|
|
129
|
-
static toUserChallengeLiveSoloDeck(userCards:
|
|
150
|
+
static toUserChallengeLiveSoloDeck(userCards: DeckCardDetail[], characterId: number): UserChallengeLiveSoloDeck;
|
|
130
151
|
}
|
|
131
152
|
|
|
132
153
|
interface CommonResource {
|
|
@@ -189,25 +210,6 @@ declare class CardSkillCalculator {
|
|
|
189
210
|
private getSkillDetail;
|
|
190
211
|
}
|
|
191
212
|
|
|
192
|
-
declare class DeckCalculator {
|
|
193
|
-
private readonly dataProvider;
|
|
194
|
-
private readonly cardCalculator;
|
|
195
|
-
constructor(dataProvider: DataProvider);
|
|
196
|
-
getHonorBonusPower(): Promise<number>;
|
|
197
|
-
static getDeckDetailByCards(cardDetails: CardDetail[], honorBonus: number): DeckDetail;
|
|
198
|
-
getDeckDetail(deckCards: UserCard[]): Promise<DeckDetail>;
|
|
199
|
-
}
|
|
200
|
-
interface DeckDetail {
|
|
201
|
-
power: number;
|
|
202
|
-
eventBonus?: number;
|
|
203
|
-
skill: SkillDetail[];
|
|
204
|
-
}
|
|
205
|
-
interface SkillDetail {
|
|
206
|
-
cardId?: number;
|
|
207
|
-
scoreUp: number;
|
|
208
|
-
lifeRecovery: number;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
213
|
declare class CardEventCalculator {
|
|
212
214
|
private readonly dataProvider;
|
|
213
215
|
constructor(dataProvider: DataProvider);
|
|
@@ -237,7 +239,7 @@ declare class LiveCalculator {
|
|
|
237
239
|
getMusicMeta(musicId: number, musicDiff: string): Promise<MusicMeta>;
|
|
238
240
|
private static getBaseScore;
|
|
239
241
|
private static getSkillScore;
|
|
240
|
-
static getLiveDetailByDeck(deckDetail: DeckDetail, musicMeta: MusicMeta, liveType: LiveType, skillDetails?:
|
|
242
|
+
static getLiveDetailByDeck(deckDetail: DeckDetail, musicMeta: MusicMeta, liveType: LiveType, skillDetails?: DeckCardDetail[] | undefined, multiPowerSum?: number): LiveDetail;
|
|
241
243
|
private static getMultiLiveSkill;
|
|
242
244
|
private static getSoloLiveSkill;
|
|
243
245
|
getLiveDetail(deckCards: UserCard[], musicMeta: MusicMeta, liveType: LiveType, liveSkills?: LiveSkill[] | undefined): Promise<LiveDetail>;
|
|
@@ -288,7 +290,7 @@ interface RecommendDeck {
|
|
|
288
290
|
score: number;
|
|
289
291
|
power: number;
|
|
290
292
|
eventBonus?: number;
|
|
291
|
-
deckCards:
|
|
293
|
+
deckCards: DeckCardDetail[];
|
|
292
294
|
}
|
|
293
295
|
interface DeckRecommendConfig {
|
|
294
296
|
musicMeta: MusicMeta;
|
|
@@ -567,4 +569,4 @@ interface UserHonor {
|
|
|
567
569
|
level: number;
|
|
568
570
|
}
|
|
569
571
|
|
|
570
|
-
export { AreaItemLevel, BaseDeckRecommend, CachedDataProvider, Card, CardCalculator, CardConfig, CardDetail, CardEpisode, CardEventCalculator, CardPowerCalculator, CardRarity, CardSkillCalculator, ChallengeLiveDeckRecommend, CharacterRank, DataProvider, DeckCalculator, DeckDetail, DeckRecommendConfig, DeckService, EventCalculator, EventCard, EventDeckBonus, EventDeckRecommend, EventRarityBonusRate, GameCharacter, GameCharacterUnit, Honor, LiveCalculator, LiveDetail, LiveSkill, LiveType, MasterLesson, Music, MusicDifficulty, MusicMeta, MusicRecommend, RecommendDeck, ScoreFunction, Skill,
|
|
572
|
+
export { AreaItemLevel, BaseDeckRecommend, CachedDataProvider, Card, CardCalculator, CardConfig, CardDetail, CardEpisode, CardEventCalculator, CardPowerCalculator, CardRarity, CardSkillCalculator, ChallengeLiveDeckRecommend, CharacterRank, DataProvider, DeckCalculator, DeckCardDetail, DeckDetail, DeckRecommendConfig, DeckService, EventCalculator, EventCard, EventDeckBonus, EventDeckRecommend, EventRarityBonusRate, GameCharacter, GameCharacterUnit, Honor, LiveCalculator, LiveDetail, LiveSkill, LiveType, MasterLesson, Music, MusicDifficulty, MusicMeta, MusicRecommend, RecommendDeck, ScoreFunction, Skill, User, UserArea, UserCard, UserChallengeLiveSoloDeck, UserCharacter, UserDeck, UserHonor };
|
package/dist/index.mjs
CHANGED
|
@@ -436,8 +436,8 @@ class LiveCalculator {
|
|
|
436
436
|
? skillDetails
|
|
437
437
|
: (liveType === LiveType.MULTI
|
|
438
438
|
? duplicateObj(LiveCalculator.getMultiLiveSkill(deckDetail), 6)
|
|
439
|
-
: [...[...deckDetail.
|
|
440
|
-
deckDetail.
|
|
439
|
+
: [...[...deckDetail.cards].sort((a, b) => a.scoreUp - b.scoreUp),
|
|
440
|
+
deckDetail.cards[0]]);
|
|
441
441
|
const baseRate = LiveCalculator.getBaseScore(musicMeta, liveType);
|
|
442
442
|
const skillScores = [...LiveCalculator.getSkillScore(musicMeta, liveType)];
|
|
443
443
|
const skillRate = skillDetails === undefined
|
|
@@ -455,9 +455,11 @@ class LiveCalculator {
|
|
|
455
455
|
};
|
|
456
456
|
}
|
|
457
457
|
static getMultiLiveSkill(deckDetail) {
|
|
458
|
-
const scoreUp = deckDetail.
|
|
459
|
-
const lifeRecovery = deckDetail.
|
|
458
|
+
const scoreUp = deckDetail.cards.reduce((v, it, i) => v + (i === 0 ? it.scoreUp : (it.scoreUp / 5)), 0);
|
|
459
|
+
const lifeRecovery = deckDetail.cards[0].lifeRecovery;
|
|
460
460
|
return {
|
|
461
|
+
cardId: 0,
|
|
462
|
+
power: 0,
|
|
461
463
|
scoreUp,
|
|
462
464
|
lifeRecovery
|
|
463
465
|
};
|
|
@@ -469,6 +471,8 @@ class LiveCalculator {
|
|
|
469
471
|
const ret = [];
|
|
470
472
|
for (let i = 0; i < 6; ++i) {
|
|
471
473
|
ret.push({
|
|
474
|
+
cardId: 0,
|
|
475
|
+
power: 0,
|
|
472
476
|
scoreUp: 0,
|
|
473
477
|
lifeRecovery: 0
|
|
474
478
|
});
|
|
@@ -483,7 +487,7 @@ class LiveCalculator {
|
|
|
483
487
|
const deckDetail = await this.deckCalculator.getDeckDetail(deckCards);
|
|
484
488
|
const skills = liveType === LiveType.MULTI
|
|
485
489
|
? undefined
|
|
486
|
-
: LiveCalculator.getSoloLiveSkill(liveSkills, deckDetail.
|
|
490
|
+
: LiveCalculator.getSoloLiveSkill(liveSkills, deckDetail.cards);
|
|
487
491
|
return LiveCalculator.getLiveDetailByDeck(deckDetail, musicMeta, liveType, skills);
|
|
488
492
|
}
|
|
489
493
|
static getLiveScoreByDeck(deckCards, honorBonus, musicMeta, liveType) {
|
|
@@ -565,19 +569,31 @@ class DeckCalculator {
|
|
|
565
569
|
const map = new Map();
|
|
566
570
|
for (const cardDetail of cardDetails) {
|
|
567
571
|
computeWithDefault(map, cardDetail.attr, 0, it => it + 1);
|
|
568
|
-
cardDetail.units.forEach(key => {
|
|
572
|
+
cardDetail.units.forEach(key => {
|
|
573
|
+
computeWithDefault(map, key, 0, it => it + 1);
|
|
574
|
+
});
|
|
569
575
|
}
|
|
570
|
-
const
|
|
571
|
-
|
|
576
|
+
const cardPower = new Map();
|
|
577
|
+
cardDetails.forEach(cardDetail => {
|
|
578
|
+
cardPower.set(cardDetail.cardId, cardDetail.units.reduce((vv, unit) => Math.max(vv, cardDetail.power.get(unit, getOrThrow(map, unit), getOrThrow(map, cardDetail.attr))), 0));
|
|
579
|
+
});
|
|
580
|
+
const power = cardDetails.reduce((v, cardDetail) => v + getOrThrow(cardPower, cardDetail.cardId), 0) + honorBonus;
|
|
581
|
+
const cards = cardDetails.map(cardDetail => {
|
|
572
582
|
const scoreUp = cardDetail.units.reduce((vv, unit) => Math.max(vv, cardDetail.scoreSkill.get(unit, getOrThrow(map, unit), 1)), 0);
|
|
573
583
|
return {
|
|
574
584
|
cardId: cardDetail.cardId,
|
|
585
|
+
power: getOrThrow(cardPower, cardDetail.cardId),
|
|
586
|
+
eventBonus: cardDetail.eventBonus,
|
|
575
587
|
scoreUp,
|
|
576
588
|
lifeRecovery: cardDetail.lifeSkill
|
|
577
589
|
};
|
|
578
590
|
});
|
|
579
591
|
const eventBonus = EventCalculator.getDeckBonus(cardDetails);
|
|
580
|
-
return {
|
|
592
|
+
return {
|
|
593
|
+
power,
|
|
594
|
+
eventBonus,
|
|
595
|
+
cards
|
|
596
|
+
};
|
|
581
597
|
}
|
|
582
598
|
async getDeckDetail(deckCards) {
|
|
583
599
|
return DeckCalculator.getDeckDetailByCards(await this.cardCalculator.batchGetCardDetail(deckCards), await this.getHonorBonusPower());
|
|
@@ -626,7 +642,7 @@ class BaseDeckRecommend {
|
|
|
626
642
|
score,
|
|
627
643
|
power: deckDetail.power,
|
|
628
644
|
eventBonus: deckDetail.eventBonus,
|
|
629
|
-
deckCards
|
|
645
|
+
deckCards: deckDetail.cards
|
|
630
646
|
}];
|
|
631
647
|
}
|
|
632
648
|
let ans = [];
|