Skip to content

Commit bf2d69b

Browse files
committed
feat: add support for Rush Ritual monsters
1 parent 9fa926f commit bf2d69b

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/edopro/card/domain/Card.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ export class Card {
5353

5454
return false;
5555
}
56+
57+
isRitualMonster(): boolean {
58+
return (this.type & CardTypes.TYPE_RITUAL) !== 0 && (this.type & CardTypes.TYPE_MONSTER) !== 0;
59+
}
5660
}

src/edopro/deck/application/DeckCreator.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import { Deck } from "../domain/Deck";
88
export class DeckCreator {
99
private readonly cardRepository: CardRepository;
1010
private readonly deckRules: DeckRules;
11+
private readonly duelFlags: bigint;
12+
private readonly DUEL_EXTRA_DECK_RITUAL_FLAG = 0x800000000n;
1113

12-
constructor(cardRepositoy: CardRepository, deckRules: DeckRules) {
14+
constructor(cardRepositoy: CardRepository, deckRules: DeckRules, duelFlags: bigint) {
1315
this.cardRepository = cardRepositoy;
1416
this.deckRules = deckRules;
17+
this.duelFlags = duelFlags;
1518
}
1619

1720
async build({
@@ -26,14 +29,20 @@ export class DeckCreator {
2629
const mainDeck: Card[] = [];
2730
const extraDeck: Card[] = [];
2831
const sideDeck: Card[] = [];
32+
const placeRitualInExtraDeckEnabled = this.placeRitualInExtraDeckEnabled();
2933

3034
for (const code of main) {
3135
// eslint-disable-next-line no-await-in-loop
3236
const card = await this.cardRepository.findByCode(code.toString());
3337
if (!card) {
3438
continue;
3539
}
36-
card.isExtraCard() ? extraDeck.push(card) : mainDeck.push(card);
40+
41+
if (card.isExtraCard() || (card.isRitualMonster() && placeRitualInExtraDeckEnabled)) {
42+
extraDeck.push(card);
43+
} else {
44+
mainDeck.push(card);
45+
}
3746
}
3847

3948
for (const code of side) {
@@ -55,4 +64,8 @@ export class DeckCreator {
5564
deckRules: this.deckRules,
5665
});
5766
}
67+
68+
private placeRitualInExtraDeckEnabled(): boolean {
69+
return (this.duelFlags & this.DUEL_EXTRA_DECK_RITUAL_FLAG) !== 0n;
70+
}
5871
}

src/edopro/room/domain/Room.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ export class Room extends YgoRoom {
284284
this.emitter,
285285
this.logger,
286286
new UserAuth(new UserProfilePostgresRepository()),
287-
new DeckCreator(new CardSQLiteTYpeORMRepository(), this.deckRules)
287+
new DeckCreator(new CardSQLiteTYpeORMRepository(), this.deckRules, this.duelFlag)
288288
);
289289
}
290290

@@ -404,7 +404,7 @@ export class Room extends YgoRoom {
404404
this.logger,
405405
new Reconnect(new UserAuth(new UserProfilePostgresRepository())),
406406
new JoinToDuelAsSpectator(),
407-
new DeckCreator(new CardSQLiteTYpeORMRepository(), this.deckRules)
407+
new DeckCreator(new CardSQLiteTYpeORMRepository(), this.deckRules, this.duelFlag)
408408
);
409409
}
410410

0 commit comments

Comments
 (0)