sekai-calculator 0.6.3 → 0.6.4
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 +25 -10
- package/dist/index.d.ts +25 -24
- package/dist/index.mjs +25 -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,30 @@ 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),
|
|
577
588
|
scoreUp,
|
|
578
589
|
lifeRecovery: cardDetail.lifeSkill
|
|
579
590
|
};
|
|
580
591
|
});
|
|
581
592
|
const eventBonus = EventCalculator.getDeckBonus(cardDetails);
|
|
582
|
-
return {
|
|
593
|
+
return {
|
|
594
|
+
power,
|
|
595
|
+
eventBonus,
|
|
596
|
+
cards
|
|
597
|
+
};
|
|
583
598
|
}
|
|
584
599
|
async getDeckDetail(deckCards) {
|
|
585
600
|
return DeckCalculator.getDeckDetailByCards(await this.cardCalculator.batchGetCardDetail(deckCards), await this.getHonorBonusPower());
|
|
@@ -628,7 +643,7 @@ class BaseDeckRecommend {
|
|
|
628
643
|
score,
|
|
629
644
|
power: deckDetail.power,
|
|
630
645
|
eventBonus: deckDetail.eventBonus,
|
|
631
|
-
deckCards
|
|
646
|
+
deckCards: deckDetail.cards
|
|
632
647
|
}];
|
|
633
648
|
}
|
|
634
649
|
let ans = [];
|
package/dist/index.d.ts
CHANGED
|
@@ -117,16 +117,36 @@ 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
|
+
scoreUp: number;
|
|
137
|
+
lifeRecovery: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
120
140
|
declare class DeckService {
|
|
121
141
|
private readonly dataProvider;
|
|
122
142
|
constructor(dataProvider: DataProvider);
|
|
123
143
|
getUserCard(cardId: number): Promise<UserCard>;
|
|
124
144
|
getDeck(deckId: number): Promise<UserDeck>;
|
|
125
145
|
getDeckCards(userDeck: UserDeck): Promise<UserCard[]>;
|
|
126
|
-
static toUserDeck(userCards:
|
|
146
|
+
static toUserDeck(userCards: DeckCardDetail[], userId?: number, deckId?: number, name?: string): UserDeck;
|
|
127
147
|
getChallengeLiveSoloDeck(characterId: number): Promise<UserChallengeLiveSoloDeck>;
|
|
128
148
|
getChallengeLiveSoloDeckCards(deck: UserChallengeLiveSoloDeck): Promise<UserCard[]>;
|
|
129
|
-
static toUserChallengeLiveSoloDeck(userCards:
|
|
149
|
+
static toUserChallengeLiveSoloDeck(userCards: DeckCardDetail[], characterId: number): UserChallengeLiveSoloDeck;
|
|
130
150
|
}
|
|
131
151
|
|
|
132
152
|
interface CommonResource {
|
|
@@ -189,25 +209,6 @@ declare class CardSkillCalculator {
|
|
|
189
209
|
private getSkillDetail;
|
|
190
210
|
}
|
|
191
211
|
|
|
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
212
|
declare class CardEventCalculator {
|
|
212
213
|
private readonly dataProvider;
|
|
213
214
|
constructor(dataProvider: DataProvider);
|
|
@@ -237,7 +238,7 @@ declare class LiveCalculator {
|
|
|
237
238
|
getMusicMeta(musicId: number, musicDiff: string): Promise<MusicMeta>;
|
|
238
239
|
private static getBaseScore;
|
|
239
240
|
private static getSkillScore;
|
|
240
|
-
static getLiveDetailByDeck(deckDetail: DeckDetail, musicMeta: MusicMeta, liveType: LiveType, skillDetails?:
|
|
241
|
+
static getLiveDetailByDeck(deckDetail: DeckDetail, musicMeta: MusicMeta, liveType: LiveType, skillDetails?: DeckCardDetail[] | undefined, multiPowerSum?: number): LiveDetail;
|
|
241
242
|
private static getMultiLiveSkill;
|
|
242
243
|
private static getSoloLiveSkill;
|
|
243
244
|
getLiveDetail(deckCards: UserCard[], musicMeta: MusicMeta, liveType: LiveType, liveSkills?: LiveSkill[] | undefined): Promise<LiveDetail>;
|
|
@@ -288,7 +289,7 @@ interface RecommendDeck {
|
|
|
288
289
|
score: number;
|
|
289
290
|
power: number;
|
|
290
291
|
eventBonus?: number;
|
|
291
|
-
deckCards:
|
|
292
|
+
deckCards: DeckCardDetail[];
|
|
292
293
|
}
|
|
293
294
|
interface DeckRecommendConfig {
|
|
294
295
|
musicMeta: MusicMeta;
|
|
@@ -567,4 +568,4 @@ interface UserHonor {
|
|
|
567
568
|
level: number;
|
|
568
569
|
}
|
|
569
570
|
|
|
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,
|
|
571
|
+
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,30 @@ 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),
|
|
575
586
|
scoreUp,
|
|
576
587
|
lifeRecovery: cardDetail.lifeSkill
|
|
577
588
|
};
|
|
578
589
|
});
|
|
579
590
|
const eventBonus = EventCalculator.getDeckBonus(cardDetails);
|
|
580
|
-
return {
|
|
591
|
+
return {
|
|
592
|
+
power,
|
|
593
|
+
eventBonus,
|
|
594
|
+
cards
|
|
595
|
+
};
|
|
581
596
|
}
|
|
582
597
|
async getDeckDetail(deckCards) {
|
|
583
598
|
return DeckCalculator.getDeckDetailByCards(await this.cardCalculator.batchGetCardDetail(deckCards), await this.getHonorBonusPower());
|
|
@@ -626,7 +641,7 @@ class BaseDeckRecommend {
|
|
|
626
641
|
score,
|
|
627
642
|
power: deckDetail.power,
|
|
628
643
|
eventBonus: deckDetail.eventBonus,
|
|
629
|
-
deckCards
|
|
644
|
+
deckCards: deckDetail.cards
|
|
630
645
|
}];
|
|
631
646
|
}
|
|
632
647
|
let ans = [];
|