From 21ae84b8d21e5f678e3b924d8f460b12a9f3ca27 Mon Sep 17 00:00:00 2001 From: Guyutongxue Date: Mon, 3 Feb 2025 12:27:59 +0800 Subject: [PATCH] fix(core): rename ambagious commonSkill to characterSkill (#125) --- packages/core/src/base/skill.ts | 14 ++++----- packages/core/src/builder/context/skill.ts | 2 ++ packages/core/src/builder/skill.ts | 36 +++++++--------------- packages/core/src/skill_executor.ts | 10 +++--- packages/core/src/utils.ts | 10 +++--- 5 files changed, 30 insertions(+), 42 deletions(-) diff --git a/packages/core/src/base/skill.ts b/packages/core/src/base/skill.ts index e6d23e6a..86f0daab 100644 --- a/packages/core/src/base/skill.ts +++ b/packages/core/src/base/skill.ts @@ -53,10 +53,10 @@ import { diceCostSize, getEntityArea, getEntityById, + isCharacterInitiativeSkill, mixins, normalizeCost, } from "../utils"; -import { commonInitiativeSkillCheck } from "../builder/skill"; export interface SkillDefinitionBase { readonly type: "skill"; @@ -69,7 +69,7 @@ export interface SkillDefinitionBase { export type SkillResult = { readonly emittedEvents: readonly EventAndRequest[]; readonly mainDamage: DamageInfo | null; -} +}; export const EMPTY_SKILL_RESULT: SkillResult = { emittedEvents: [], @@ -392,8 +392,8 @@ export class ActionEventArg< return this.action.type === "declareEnd"; } /** 是角色主动技能(而非特技) */ - isUseCommonSkill(): this is ActionEventArg { - return this.isUseSkill() && commonInitiativeSkillCheck(this.action.skill); + isUseCharacterSkill(): this is ActionEventArg { + return this.isUseSkill() && isCharacterInitiativeSkill(this.action.skill); } isUseTechnique(): this is ActionEventArg { return this.isSkillType("technique"); @@ -402,7 +402,7 @@ export class ActionEventArg< character: CharacterState, skillType?: CommonSkillType, ): boolean { - if (this.isUseCommonSkill()) { + if (this.isUseCharacterSkill()) { const skillDef = this.action.skill.definition; return ( character.definition.skills.some((sk) => sk.id === skillDef.id) && @@ -1051,8 +1051,8 @@ export class ReactionEventArg extends CharacterEventArg { } /** 是否为“角色引发的” */ - viaCommonInitiativeSkill() { - return commonInitiativeSkillCheck(this.reactionInfo.via); + viaCharacterSkill() { + return isCharacterInitiativeSkill(this.reactionInfo.via); } relatedTo(target: DamageType): boolean { diff --git a/packages/core/src/builder/context/skill.ts b/packages/core/src/builder/context/skill.ts index 02676093..1756ddfd 100644 --- a/packages/core/src/builder/context/skill.ts +++ b/packages/core/src/builder/context/skill.ts @@ -62,6 +62,7 @@ import { getActiveCharacterIndex, getEntityArea, getEntityById, + isCharacterInitiativeSkill, sortDice, } from "../../utils"; import { executeQuery } from "../../query"; @@ -756,6 +757,7 @@ export class SkillContext { const targetState = t.state; let isSkillMainDamage = false; if ( + isCharacterInitiativeSkill(this.skillInfo) && !this.fromReaction && !this.mainDamage && type !== DamageType.Piercing diff --git a/packages/core/src/builder/skill.ts b/packages/core/src/builder/skill.ts index 58b9888e..5a4fd1f5 100644 --- a/packages/core/src/builder/skill.ts +++ b/packages/core/src/builder/skill.ts @@ -236,15 +236,6 @@ function defineDescriptor( * * @param allowTechnique 是否允许特技 */ -export function commonInitiativeSkillCheck( - skillInfo: SkillInfo, - allowTechnique = false, -): boolean { - return ( - isCharacterInitiativeSkill(skillInfo.definition, allowTechnique) && - !skillInfo.definition.initiativeSkillConfig.prepared - ); -} function isDebuff(state: GameState, damageInfo: DamageInfo): boolean { return ( @@ -297,20 +288,20 @@ const detailedEventDictionary = { }), deductVoidDiceSkill: defineDescriptor("modifyAction0", (c, e, r) => { return ( - e.isUseCommonSkill() && + e.isUseCharacterSkill() && checkRelative(e.onTimeState, e.action.skill.caller.id, r) && e.canDeductVoidCost() ); }), deductElementDiceSkill: defineDescriptor("modifyAction1", (c, e, r) => { return ( - e.isUseCommonSkill() && + e.isUseCharacterSkill() && checkRelative(e.onTimeState, e.action.skill.caller.id, r) ); }), deductOmniDiceSkill: defineDescriptor("modifyAction2", (c, e, r) => { return ( - e.isUseCommonSkill() && + e.isUseCharacterSkill() && checkRelative(e.onTimeState, e.action.skill.caller.id, r) && e.canDeductCost() ); @@ -339,7 +330,7 @@ const detailedEventDictionary = { return ( e.type !== DamageType.Piercing && checkRelative(e.onTimeState, e.source.id, r) && - isCharacterInitiativeSkill(e.via.definition) && + isCharacterInitiativeSkill(e.via) && e.damageInfo.fromReaction === null ); }), @@ -354,7 +345,7 @@ const detailedEventDictionary = { return ( e.type !== DamageType.Piercing && checkRelative(e.onTimeState, e.source.id, r) && - isCharacterInitiativeSkill(e.via.definition) && + isCharacterInitiativeSkill(e.via) && e.damageInfo.fromReaction === null ); }), @@ -370,7 +361,7 @@ const detailedEventDictionary = { return ( e.type !== DamageType.Piercing && checkRelative(e.onTimeState, e.source.id, r) && - isCharacterInitiativeSkill(e.via.definition) && + isCharacterInitiativeSkill(e.via) && !isDebuff(e.onTimeState, e.damageInfo) ); }), @@ -423,16 +414,11 @@ const detailedEventDictionary = { checkRelative(e.onTimeState, { who: e.who }, r) ); }), - // modifySkill: defineDescriptor("modifyUseSkill", (c, e, r) => { - // return ( - // checkRelative(e.onTimeState, e.callerArea, r) && - // commonInitiativeSkillCheck(e.skill) - // ); - // }), useSkill: defineDescriptor("onUseSkill", (c, e, r) => { return ( checkRelative(e.onTimeState, e.callerArea, r) && - commonInitiativeSkillCheck(e.skill) + isCharacterInitiativeSkill(e.skill) && + !e.skill.definition.initiativeSkillConfig.prepared ); }), useTechinque: defineDescriptor("onUseSkill", (c, e, r) => { @@ -444,7 +430,8 @@ const detailedEventDictionary = { useSkillOrTechnique: defineDescriptor("onUseSkill", (c, e, r) => { return ( checkRelative(e.onTimeState, e.callerArea, r) && - commonInitiativeSkillCheck(e.skill, true) + isCharacterInitiativeSkill(e.skill, true) && + !e.skill.definition.initiativeSkillConfig.prepared ); }), declareEnd: defineDescriptor("onAction", (c, e, r) => { @@ -499,8 +486,7 @@ const detailedEventDictionary = { }), skillReaction: defineDescriptor("onReaction", (c, e, r) => { return ( - checkRelative(e.onTimeState, e.caller.id, r) && - e.viaCommonInitiativeSkill() + checkRelative(e.onTimeState, e.caller.id, r) && e.viaCharacterSkill() ); }), enter: defineDescriptor("onEnter", (c, e, r) => { diff --git a/packages/core/src/skill_executor.ts b/packages/core/src/skill_executor.ts index 2204178c..25aec733 100644 --- a/packages/core/src/skill_executor.ts +++ b/packages/core/src/skill_executor.ts @@ -527,12 +527,10 @@ export class SkillExecutor { plunging, }); await this.finalizeSkill(skillInfo, { targets: [] }); - if (!skillDef.initiativeSkillConfig.prepared) { - await this.handleEvent([ - "onUseSkill", - new UseSkillEventArg(this.state, callerArea, skillInfo), - ]); - } + await this.handleEvent([ + "onUseSkill", + new UseSkillEventArg(this.state, callerArea, skillInfo), + ]); } else if (name === "requestTriggerEndPhaseSkill") { using l = this.mutator.subLog( DetailLogType.Event, diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index ceb62f7d..d3bd9ebe 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -44,6 +44,7 @@ import { EventNames, InitiativeSkillDefinition, InitiativeSkillEventArg, + InitiativeSkillInfo, SkillDefinition, SkillInfo, SkillType, @@ -303,17 +304,18 @@ export function removeEntity(state: Draft, id: number) { throw new GiTcgCoreInternalEntityNotFoundError(state, id); } +/** 检查 `skill` 是否是角色主动技能 */ export function isCharacterInitiativeSkill( - skillDef: SkillDefinition, + skill: SkillInfo, allowTechnique = false, -): skillDef is InitiativeSkillDefinition { +): skill is InitiativeSkillInfo { const allowSkillType: SkillType[] = ["normal", "elemental", "burst"]; if (allowTechnique) { allowSkillType.push("technique"); } return ( - skillDef.triggerOn === "initiative" && - allowSkillType.includes(skillDef.initiativeSkillConfig.skillType) + skill.definition.triggerOn === "initiative" && + allowSkillType.includes(skill.definition.initiativeSkillConfig.skillType) ); }