Compare commits
No commits in common. "0d7a84edeef5afb2477d3b9026d084449623a91a" and "359e7b748537779c297c94082f0595bf963c7e9a" have entirely different histories.
0d7a84edee
...
359e7b7485
|
|
@ -55,6 +55,25 @@ export function addDamageTriggers(triggers: Triggers) {
|
||||||
await next();
|
await next();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// spike: damage attacker
|
||||||
|
triggers.onDamage.use(async (ctx, next) => {
|
||||||
|
await next();
|
||||||
|
|
||||||
|
if (ctx.amount - (ctx.prevented ?? 0) <= 0) return;
|
||||||
|
|
||||||
|
const entity = getCombatEntity(ctx.game.value, ctx.entityId);
|
||||||
|
if (!entity || !entity.isAlive) return;
|
||||||
|
|
||||||
|
const spike = entity.effects.spike?.stacks ?? 0;
|
||||||
|
if (spike > 0 && ctx.sourceEntityId) {
|
||||||
|
await triggers.onDamage.execute(ctx.game, {
|
||||||
|
entityId: ctx.sourceEntityId,
|
||||||
|
amount: spike,
|
||||||
|
sourceEntityId: ctx.entityId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// energyDrain: player loses energy when enemy takes damage
|
// energyDrain: player loses energy when enemy takes damage
|
||||||
triggers.onDamage.use(async (ctx, next) => {
|
triggers.onDamage.use(async (ctx, next) => {
|
||||||
const entity = getCombatEntity(ctx.game.value, ctx.entityId);
|
const entity = getCombatEntity(ctx.game.value, ctx.entityId);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
import { Triggers } from "@/samples/slay-the-spire-like/system/combat/triggers";
|
import { Triggers } from "@/samples/slay-the-spire-like/system/combat/triggers";
|
||||||
import {
|
import { addEntityEffect } from "@/samples/slay-the-spire-like/system/combat/effects";
|
||||||
addEntityEffect,
|
|
||||||
getCombatEntity,
|
|
||||||
} from "@/samples/slay-the-spire-like/system/combat/effects";
|
|
||||||
import { moveToRegion } from "@/core/region";
|
import { moveToRegion } from "@/core/region";
|
||||||
import { CombatGameContext } from "@/samples/slay-the-spire-like/system/combat/types";
|
import { CombatGameContext } from "@/samples/slay-the-spire-like/system/combat/types";
|
||||||
import { GameCard } from "@/samples/slay-the-spire-like/system/deck";
|
import { GameCard } from "@/samples/slay-the-spire-like/system/deck";
|
||||||
|
|
@ -100,16 +97,6 @@ export function addInstantEffectTriggers(triggers: Triggers) {
|
||||||
amount: ctx.stacks,
|
amount: ctx.stacks,
|
||||||
sourceEntityId: ctx.sourceEntityId,
|
sourceEntityId: ctx.sourceEntityId,
|
||||||
});
|
});
|
||||||
|
|
||||||
const entity = getCombatEntity(ctx.game.value, ctx.entityId);
|
|
||||||
const spike = entity?.effects.spike?.stacks ?? 0;
|
|
||||||
if (spike > 0 && ctx.sourceEntityId) {
|
|
||||||
await triggers.onDamage.execute(ctx.game, {
|
|
||||||
entityId: ctx.sourceEntityId,
|
|
||||||
amount: spike,
|
|
||||||
sourceEntityId: ctx.entityId,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (ctx.effect.id === "draw") {
|
} else if (ctx.effect.id === "draw") {
|
||||||
await triggers.onDraw.execute(ctx.game, { count: ctx.stacks });
|
await triggers.onDraw.execute(ctx.game, { count: ctx.stacks });
|
||||||
} else if (ctx.effect.id === "gainEnergy") {
|
} else if (ctx.effect.id === "gainEnergy") {
|
||||||
|
|
|
||||||
|
|
@ -352,17 +352,15 @@ describe("desert triggers", () => {
|
||||||
);
|
);
|
||||||
const triggers = getTriggers();
|
const triggers = getTriggers();
|
||||||
const spikeEffect = createEffect("spike", "permanent");
|
const spikeEffect = createEffect("spike", "permanent");
|
||||||
const attackEffect = createEffect("attack", "instant");
|
|
||||||
|
|
||||||
ctx._state.produce((draft) => {
|
ctx._state.produce((draft) => {
|
||||||
const enemy = draft.enemies[0];
|
const enemy = draft.enemies[0];
|
||||||
enemy.effects.spike = { data: spikeEffect, stacks: 3 };
|
enemy.effects.spike = { data: spikeEffect, stacks: 3 };
|
||||||
});
|
});
|
||||||
|
|
||||||
await triggers.onEffectApplied.execute(ctx, {
|
await triggers.onDamage.execute(ctx, {
|
||||||
effect: attackEffect,
|
|
||||||
entityId: "仙人掌怪-0",
|
entityId: "仙人掌怪-0",
|
||||||
stacks: 5,
|
amount: 5,
|
||||||
sourceEntityId: "player",
|
sourceEntityId: "player",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue