Skip to content

Commit

Permalink
cast light shield with shielder as initiator instead of target
Browse files Browse the repository at this point in the history
  • Loading branch information
kyvg committed Feb 26, 2024
1 parent ffa6206 commit ec3cd77
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 21 deletions.
16 changes: 8 additions & 8 deletions src/arena/magics/__snapshots__/lightShield.test.ts.snap
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`lightShield initiator should be hit by light shield 1`] = `
"*asperiores* использовал _Световой щит_ на *asperiores*
"*asperiores* использовал _Световой щит_ на *magni*
\\[ 📖6 ]
*asperiores* использовал _Световой щит_ на *asperiores*
*asperiores* использовал _Световой щит_ на *magni*
\\[ 📖3 ]
*alias* рубанул *asperiores* _Эпическим Мечом_ и нанёс *10.72* урона
\\[ asperiores 👊 💔-10.72/-2.72 📖86 ]
*ratione* рубанул *magni* _Эпическим Мечом_ и нанёс *10.72* урона
\\[ magni 👊 💔-10.72/-2.72 📖86 ]
*asperiores* сотворил _Световой щит_ на *alias* нанеся 2.25 урона
\\[ alias 💔-2.25/5.75 📖26 ]
*asperiores* сотворил _Световой щит_ на *ratione* нанеся 2.33 урона
\\[ ratione 💔-2.33/5.67 📖27 ]
*asperiores* сотворил _Световой щит_ на *alias* нанеся 1.13 урона
\\[ alias 💔-1.13/4.62 📖17 ]"
*asperiores* сотворил _Световой щит_ на *ratione* нанеся 1.17 урона
\\[ ratione 💔-1.17/4.5 📖17 ]"
`;
16 changes: 9 additions & 7 deletions src/arena/magics/lightShield.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@ describe('lightShield', () => {

beforeEach(async () => {
const initiator = await TestUtils.createCharacter({ prof: 'm', magics: { lightShield: 2 } });
const target = await TestUtils.createCharacter({ prof: 'w' }, { withWeapon: true });
const target = await TestUtils.createCharacter();
const attacker = await TestUtils.createCharacter({ prof: 'w' }, { withWeapon: true });

await Promise.all([initiator.id, target.id].map(CharacterService.getCharacterById));
const ids = [initiator.id, target.id, attacker.id];
await Promise.all(ids.map(CharacterService.getCharacterById));

game = new GameService([initiator.id, target.id]);
game = new GameService(ids);
});

beforeEach(() => {
Expand All @@ -35,13 +37,13 @@ describe('lightShield', () => {

it('initiator should be hit by light shield', async () => {
game.players.players[0].proc = 1;
game.players.players[1].proc = 1;
game.players.players[2].proc = 1;

lightShield.cast(game.players.players[0], game.players.players[0], game);
lightShield.cast(game.players.players[0], game.players.players[1], game);
game.players.players[0].proc = 0.5;

lightShield.cast(game.players.players[0], game.players.players[0], game);
attack.cast(game.players.players[1], game.players.players[0], game);
lightShield.cast(game.players.players[0], game.players.players[1], game);
attack.cast(game.players.players[2], game.players.players[1], game);

expect(TestUtils.normalizeRoundHistory(game.getRoundResults())).toMatchSnapshot();
});
Expand Down
21 changes: 15 additions & 6 deletions src/arena/magics/lightShield.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,32 @@ class LightShield extends DmgMagic {
class LightShieldBuff extends LongMagic implements PostAffect {
run() {
const { target, initiator } = this.params;
target.flags.isLightShielded.push({ initiator: initiator.nick, val: initiator.proc });
target.flags.isLightShielded.push({ initiator: initiator.id, val: initiator.proc });
}

runLong(): void {
const { target, initiator } = this.params;
target.flags.isLightShielded.push({ initiator: initiator.nick, val: initiator.proc });
target.flags.isLightShielded.push({ initiator: initiator.id, val: initiator.proc });
}

postAffect(
{ initiator, target, game } = this.params,
{ effect } = { effect: 0 },
): void | SuccessArgs | SuccessArgs[] {
return target.flags.isLightShielded.map(({ val }) => {
target.setProc(effect * val * 0.01);
lightShield.cast(target, initiator, game);
return lightShield.getSuccessResult({ initiator: target, target: initiator, game });
const results: SuccessArgs[] = [];

target.flags.isLightShielded.forEach((flag) => {
const shielder = game.players.getById(flag.initiator);
if (!shielder) {
return;
}

shielder.setProc(effect * flag.val * 0.01);
lightShield.cast(shielder, initiator, game);
results.push(lightShield.getSuccessResult({ initiator: shielder, target: initiator, game }));
});

return results;
}
}

Expand Down

0 comments on commit ec3cd77

Please sign in to comment.