afnm-types 0.6.38 → 0.6.42

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/buff.d.ts CHANGED
@@ -3,7 +3,7 @@ import { TechniqueElement } from './element';
3
3
  import { CombatStatistic, Scaling } from './stat';
4
4
  import { DamageType } from './DamageType';
5
5
  import type { CombatEntity } from './entity';
6
- export type TechniqueCondition = ChanceTechniqueCondition | BuffTechniqueCondition | HpTechniqueCondition | ConditionTechniqueCondition;
6
+ export type TechniqueCondition = ChanceTechniqueCondition | BuffTechniqueCondition | HpTechniqueCondition | ConditionTechniqueCondition | InventoryItemTechniqueCondition;
7
7
  export type DamageModifier = MultiplyDamageModifier | ReduceDamageModifier | ExpressionDamageModifier;
8
8
  interface MultiplyDamageModifier {
9
9
  kind: 'multiply';
@@ -38,6 +38,12 @@ interface ConditionTechniqueCondition {
38
38
  condition: string;
39
39
  tooltip?: string;
40
40
  }
41
+ interface InventoryItemTechniqueCondition {
42
+ kind: 'inventoryItem';
43
+ itemName: string;
44
+ count: number;
45
+ mode: 'more' | 'less' | 'equal';
46
+ }
41
47
  export interface Buff {
42
48
  name: string;
43
49
  displayName?: Translatable;
@@ -119,6 +125,7 @@ export interface Buff {
119
125
  afterTechnique?: boolean;
120
126
  combatImage?: BuffCombatImage;
121
127
  maxStacks?: number;
128
+ upgradeKey?: string;
122
129
  stacks: number;
123
130
  stacksAreDays?: boolean;
124
131
  stacksAreMonths?: boolean;
@@ -127,15 +134,26 @@ export interface Buff {
127
134
  endurePercent?: number;
128
135
  setupPercent?: number;
129
136
  cantUpgrade?: boolean;
137
+ /** When set, this buff acts as a guardian that intercepts a percentage of incoming damage.
138
+ * Guardian HP is initialized from guardianIntercept.maxHp and stored on guardianHp / guardianMaxHp.
139
+ * When guardianHp reaches 0, the buff is permanently removed. */
140
+ guardianIntercept?: {
141
+ percent: Scaling;
142
+ maxHp: Scaling;
143
+ };
144
+ /** Runtime guardian HP — set automatically from guardianIntercept.maxHp at buff creation */
145
+ guardianHp?: number;
146
+ /** Runtime guardian max HP — set automatically from guardianIntercept.maxHp at buff creation */
147
+ guardianMaxHp?: number;
130
148
  }
131
- type BuffCombatImage = ScatterCombatImage | ArcCombatImage | FloatingCombatImage | OverlayCombatImage | CompanionCombatImage | GroundCombatImage | FormationCombatImage | TransformationCombatImage;
149
+ type BuffCombatImage = ScatterCombatImage | ArcCombatImage | FloatingCombatImage | OverlayCombatImage | CompanionCombatImage | GuardianCombatImage | GroundCombatImage | FormationCombatImage | ForegroundCombatImage | BackgroundCombatImage | TransformationCombatImage;
132
150
  interface BaseCombatImage {
133
151
  image: string;
134
152
  imageOverrides?: {
135
153
  stacks: number;
136
154
  image: string;
137
155
  }[];
138
- position: 'scatter' | 'arc' | 'floating' | 'overlay' | 'companion' | 'ground' | 'formation';
156
+ position: 'scatter' | 'arc' | 'floating' | 'overlay' | 'companion' | 'guardian' | 'ground' | 'formation' | 'foreground' | 'background';
139
157
  animations?: ('buff' | 'bump' | 'attack' | 'debuff')[];
140
158
  animateOnEntity?: boolean;
141
159
  }
@@ -186,6 +204,21 @@ export interface CompanionCombatImage extends BaseCombatImage {
186
204
  };
187
205
  };
188
206
  }
207
+ /** Guardian combat image - positions the buff in front of the entity as a defensive line.
208
+ * Used for puppet guardians that intercept damage. Displayed in a zig-zag pattern. */
209
+ export interface GuardianCombatImage extends BaseCombatImage {
210
+ position: 'guardian';
211
+ scale?: number;
212
+ stacksScale?: number;
213
+ executeImage?: {
214
+ image: string;
215
+ scale: number;
216
+ imageOffset?: {
217
+ x: number;
218
+ y: number;
219
+ };
220
+ };
221
+ }
189
222
  export interface GroundCombatImage extends BaseCombatImage {
190
223
  position: 'ground';
191
224
  scale?: number;
@@ -196,6 +229,24 @@ export interface FormationCombatImage extends BaseCombatImage {
196
229
  scale?: number;
197
230
  showSingleInstance?: boolean;
198
231
  }
232
+ /** Foreground combat image - displays the entire image in front of the character.
233
+ * Unlike overlays which are masked to the character sprite, this displays the full image. */
234
+ export interface ForegroundCombatImage extends BaseCombatImage {
235
+ position: 'foreground';
236
+ scale?: number;
237
+ stacksScale?: number;
238
+ baseOpacity?: number;
239
+ stacksOpacity?: number;
240
+ }
241
+ /** Background combat image - displays the entire image behind the character.
242
+ * Unlike overlays which are masked to the character sprite, this displays the full image. */
243
+ export interface BackgroundCombatImage extends BaseCombatImage {
244
+ position: 'background';
245
+ scale?: number;
246
+ stacksScale?: number;
247
+ baseOpacity?: number;
248
+ stacksOpacity?: number;
249
+ }
199
250
  /** Image configuration for a single avatar state in transformation */
200
251
  export interface TransformationImageConfig {
201
252
  image: string;
@@ -240,13 +291,15 @@ export interface TransformationCombatImage {
240
291
  /** Whether animations should trigger on the entity. Defaults to true for transformation. */
241
292
  animateOnEntity?: boolean;
242
293
  }
243
- export type BuffEffect = DamageEffect | DamageSelfEffect | HealEffect | BarrierEffect | CreateBuffSelfEffect | ConsumeBuffSelfEffect | CreateBuffTargetEffect | ConsumeBuffTargetEffect | NegateEffect | AddEffect | MultiplyEffect | MergeEffect | TriggerEffect | ModifyBuffGroupEffect | CleanseToxicityEffect | SetStateEffect | ConvertSelfEffect;
294
+ export type RepairRule = 'all' | 'lowestHealth' | 'highestHealth';
295
+ export type BuffEffect = DamageEffect | DamageSelfEffect | HealEffect | BarrierEffect | CreateBuffSelfEffect | ConsumeBuffSelfEffect | CreateBuffTargetEffect | ConsumeBuffTargetEffect | NegateEffect | AddEffect | MultiplyEffect | MergeEffect | TriggerEffect | ModifyBuffGroupEffect | CleanseToxicityEffect | SetStateEffect | ConvertSelfEffect | RepairEffect | ConsumeInventoryItemEffect;
244
296
  interface BaseBuff {
245
297
  condition?: TechniqueCondition;
246
298
  triggerKey?: string;
247
299
  statChanges?: Partial<{
248
300
  [key in CombatStatistic]: Scaling;
249
301
  }>;
302
+ hidden?: boolean;
250
303
  }
251
304
  interface DamageEffect extends BaseBuff {
252
305
  kind: 'damage';
@@ -341,4 +394,17 @@ interface ConvertSelfEffect extends BaseBuff {
341
394
  target: Buff;
342
395
  amount: Scaling;
343
396
  }
397
+ interface RepairEffect extends BaseBuff {
398
+ kind: 'repair';
399
+ amount: Scaling;
400
+ /** Matches buffs by name, buffType, or flag (same matching as modifyBuffGroup) */
401
+ group: string;
402
+ /** Which matching buff(s) to repair: 'all', 'lowestHealth', or 'highestHealth' */
403
+ rule: RepairRule;
404
+ }
405
+ interface ConsumeInventoryItemEffect extends BaseBuff {
406
+ kind: 'consumeInventoryItem';
407
+ itemName: string;
408
+ amount: Scaling;
409
+ }
344
410
  export {};
@@ -12,6 +12,7 @@ export interface Character {
12
12
  displayName?: Translatable;
13
13
  allegiance: string | undefined;
14
14
  bio?: string;
15
+ manualDescription?: string;
15
16
  condition: string;
16
17
  definitions: CharacterDefinition[];
17
18
  relationship?: CharacterRelationshipDefinition[];
@@ -151,6 +152,13 @@ export interface ShopCharacterInteraction extends BaseCharacterInteraction {
151
152
  costMultiplier: number;
152
153
  introSteps: EventStep[];
153
154
  exitSteps: EventStep[];
155
+ tokenCurrency?: {
156
+ currencyItem: Item;
157
+ tokenStock: Array<{
158
+ item: Item;
159
+ tokenCost: number;
160
+ }>;
161
+ };
154
162
  }
155
163
  export interface SparCharacterInteraction extends BaseCharacterInteraction {
156
164
  introSteps: EventStep[];
package/dist/entity.d.ts CHANGED
@@ -16,7 +16,7 @@ export interface CombatEffectTracking {
16
16
  barrier: number;
17
17
  damageTaken: number;
18
18
  }
19
- export declare const entityTypes: readonly ["Player", "Lifeform", "Enemy"];
19
+ export declare const entityTypes: readonly ["Player", "Lifeform", "Enemy", "PlayerParty", "EnemyParty", "System"];
20
20
  export type EntityType = (typeof entityTypes)[number];
21
21
  export declare const sexes: readonly ["male", "female"];
22
22
  export type Sex = (typeof sexes)[number];
@@ -308,6 +308,8 @@ export interface CombatEntity {
308
308
  party?: CombatEntity[];
309
309
  isPartyMember?: boolean;
310
310
  partyMemberIndex?: number;
311
+ /** UUID assigned at creation — only present on PlayerParty and EnemyParty entities */
312
+ partyId?: string;
311
313
  }
312
314
  export type StanceRule = SingleStance | RandomStance;
313
315
  export interface SingleStance {
@@ -324,13 +326,26 @@ interface RandomStance {
324
326
  repeatable?: boolean;
325
327
  alternatives?: StanceRule[];
326
328
  }
329
+ export interface ConditionalCycle {
330
+ id: string;
331
+ name: string;
332
+ position: number;
333
+ conditions: Array<{
334
+ condition: string;
335
+ check: '<' | '==' | '>' | '!=';
336
+ value: number;
337
+ }>;
338
+ operator: 'AND' | 'OR';
339
+ }
327
340
  export interface StoredStyle {
328
341
  name: string;
329
342
  id: string;
330
343
  autoName?: boolean;
331
344
  stances: StoredStance[];
345
+ conditionalCycles?: ConditionalCycle[];
346
+ autoUseItems?: (string | undefined)[];
332
347
  }
333
- export type StoredRule = OpenerStoredRule | RotationStoredRule | ConditionalStoredRule;
348
+ export type StoredRule = OpenerStoredRule | RotationStoredRule | ConditionalStoredRule | ConditionalRotationStoredRule;
334
349
  export interface OpenerStoredRule {
335
350
  kind: 'opener';
336
351
  position: number;
@@ -351,6 +366,11 @@ export interface ConditionalStoredRule {
351
366
  }>;
352
367
  operator?: 'AND' | 'OR';
353
368
  }
369
+ export interface ConditionalRotationStoredRule {
370
+ kind: 'conditionalRotation';
371
+ position: number;
372
+ cycleId: string;
373
+ }
354
374
  export interface StoredStance {
355
375
  name: string;
356
376
  autoName?: boolean;
package/dist/entity.js CHANGED
@@ -1,4 +1,4 @@
1
- export const entityTypes = ['Player', 'Lifeform', 'Enemy'];
1
+ export const entityTypes = ['Player', 'Lifeform', 'Enemy', 'PlayerParty', 'EnemyParty', 'System'];
2
2
  export const sexes = ['male', 'female'];
3
3
  export const sexToName = {
4
4
  male: 'Male',
package/dist/event.d.ts CHANGED
@@ -22,6 +22,7 @@ export interface TriggeredEvent {
22
22
  max: number;
23
23
  };
24
24
  usesCooldown?: boolean;
25
+ minLocationCharacters?: number;
25
26
  }
26
27
  export interface GameEvent {
27
28
  location: string;
@@ -31,7 +32,7 @@ export interface GameEvent {
31
32
  value: number;
32
33
  }[];
33
34
  }
34
- export type EventStep = TextStep | SpeechStep | CombatStep | CraftingStep | ChoiceStep | ConditionalStep | SetFlagStep | ExitStep | CreateBuffStep | ConsumeBuffStep | ChangeLocationStep | AddItemStep | RemoveItemStep | AddQuestStep | ChangeMoneyStep | ChangeFavourStep | AddDestinyStep | ChangeReputationStep | QiStep | UnlockLocationStep | ClearCharacterStep | SetCharacterStep | LabelStep | GotoLabelStep | UnlockCraftingTechniqueStep | TalkToCharacterStep | TradeWithCharacterStep | CraftWithCharacterStep | FightCharacterStep | MarkBeatCharacterStep | MarkDidEncounterStep | ChangeHpStep | PassTimeStep | ReportAnalyticsStep | ApprovalStep | ProgressRelationshipStep | MarkGiftedStep | UpdateCharacterDefinitionStep | AuctionStep | MarkCalendarEventCompleteStep | AddMultipleItemStep | AdvanceMysticalRegionStep | CraftSkillStep | TournamentStep | TeamUpStep | AddFollowerStep | ClearTeamUpStep | UnlockAltarStep | DropItemStep | SetAltarCooldownStep | CompressCoreStep | ChangeScreenStep | UnlockTechniqueStep | UnlockAuctionTechniqueStep | AddRecipeStep | AddManualStep | ReplaceItemStep | DualCultivationStep | ChangeBGMStep | ClearChangeBGMStep | AddGuildApprovalStep | AdvanceGuildRankStep | OverridePlayerRealmStep | SetAidBreakthroughCooldownStep | StoneCuttingStep | GiveItemStep | ChangePhysicalStatStep | ChangeSocialStatStep;
35
+ export type EventStep = TextStep | SpeechStep | CombatStep | CraftingStep | ChoiceStep | ConditionalStep | SetFlagStep | ExitStep | CreateBuffStep | ConsumeBuffStep | ChangeLocationStep | AddItemStep | RemoveItemStep | AddQuestStep | ChangeMoneyStep | ChangeFavourStep | AddDestinyStep | ChangeReputationStep | QiStep | UnlockLocationStep | ClearCharacterStep | SetCharacterStep | LabelStep | GotoLabelStep | UnlockCraftingTechniqueStep | TalkToCharacterStep | TradeWithCharacterStep | CraftWithCharacterStep | FightCharacterStep | MarkBeatCharacterStep | MarkDidEncounterStep | ChangeHpStep | PassTimeStep | ReportAnalyticsStep | ApprovalStep | ProgressRelationshipStep | MarkGiftedStep | UpdateCharacterDefinitionStep | AuctionStep | MarkCalendarEventCompleteStep | AddMultipleItemStep | AdvanceMysticalRegionStep | CraftSkillStep | TournamentStep | TeamUpStep | AddFollowerStep | ClearTeamUpStep | UnlockAltarStep | DropItemStep | SetAltarCooldownStep | CompressCoreStep | ChangeScreenStep | UnlockTechniqueStep | UnlockAuctionTechniqueStep | AddRecipeStep | AddManualStep | LearnNpcStancesStep | ReplaceItemStep | DualCultivationStep | ChangeBGMStep | ClearChangeBGMStep | AddGuildApprovalStep | AdvanceGuildRankStep | OverridePlayerRealmStep | SetAidBreakthroughCooldownStep | StoneCuttingStep | GiveItemStep | ChangePhysicalStatStep | ChangeSocialStatStep;
35
36
  export interface TextStep {
36
37
  kind: 'text';
37
38
  condition?: string;
@@ -295,6 +296,11 @@ export interface AddManualStep {
295
296
  condition?: string;
296
297
  manual: string;
297
298
  }
299
+ export interface LearnNpcStancesStep {
300
+ kind: 'learnNpcStances';
301
+ condition?: string;
302
+ characterName: string;
303
+ }
298
304
  export interface TalkToCharacterStep {
299
305
  kind: 'talkToCharacter';
300
306
  condition?: string;
package/dist/item.d.ts CHANGED
@@ -90,6 +90,8 @@ export interface DeviceItem extends ItemBase {
90
90
  export interface ManualItem extends ItemBase {
91
91
  kind: 'manual';
92
92
  style: ManualStyle;
93
+ /** Unique identifier for NPC manuals; deduplication key separate from the display name. */
94
+ id?: string;
93
95
  }
94
96
  export interface ManualStyle {
95
97
  name: string;
@@ -129,6 +131,7 @@ export interface ClothingEnchantment extends Enchantment {
129
131
  }
130
132
  export interface TalismanItem extends ItemBase {
131
133
  kind: 'talisman';
134
+ combatStats?: Partial<CombatStatsMap>;
132
135
  buffs: {
133
136
  buff: Buff;
134
137
  buffStacks: Scaling;
@@ -148,6 +151,10 @@ export interface ArtefactItem extends ItemBase {
148
151
  combatStats?: Partial<CombatStatsMap>;
149
152
  charisma?: number;
150
153
  techniques: ArtefactTechnique[];
154
+ buffs?: {
155
+ buff: Buff;
156
+ buffStacks: Scaling;
157
+ }[];
151
158
  }
152
159
  export interface ArtefactEnchantment extends Enchantment {
153
160
  itemKind: 'artefact';
@@ -8,7 +8,7 @@ export const itemTypeToHarmonyType = {
8
8
  artefact: 'forge',
9
9
  mount: 'forge',
10
10
  cauldron: 'forge',
11
- flame: 'forge',
11
+ flame: 'resonance',
12
12
  // alchemical
13
13
  pill: 'alchemical',
14
14
  concoction: 'alchemical',
@@ -821,6 +821,17 @@ const codeToBaseKey = {
821
821
  Digit7: '7',
822
822
  Digit8: '8',
823
823
  Digit9: '9',
824
+ // Numpad numbers
825
+ Numpad0: '0',
826
+ Numpad1: '1',
827
+ Numpad2: '2',
828
+ Numpad3: '3',
829
+ Numpad4: '4',
830
+ Numpad5: '5',
831
+ Numpad6: '6',
832
+ Numpad7: '7',
833
+ Numpad8: '8',
834
+ Numpad9: '9',
824
835
  // Letters
825
836
  KeyA: 'a',
826
837
  KeyB: 'b',
@@ -940,7 +951,7 @@ export function parseKeybindingString(keybinding) {
940
951
  // Check if a keyboard event matches a keybinding string
941
952
  export function matchesKeybinding(event, keybinding) {
942
953
  const parsed = parseKeybindingString(keybinding);
943
- return (event.key === parsed.key &&
954
+ return (getBaseKeyFromEvent(event) === parsed.key &&
944
955
  event.ctrlKey === parsed.ctrl &&
945
956
  event.altKey === parsed.alt &&
946
957
  event.shiftKey === parsed.shift);
@@ -9,6 +9,15 @@ import { ItemDesc } from './item';
9
9
  import { House, HouseData } from './house';
10
10
  import { Buff } from './buff';
11
11
  import { AmbienceName, MusicName } from './audio';
12
+ export interface LocationGatheringEvent {
13
+ steps: EventStep[];
14
+ triggerChance?: number;
15
+ resetMonths?: {
16
+ min: number;
17
+ max: number;
18
+ };
19
+ minCharacters?: number;
20
+ }
12
21
  export interface GameLocation {
13
22
  name: string;
14
23
  displayName?: Translatable;
@@ -35,6 +44,7 @@ export interface GameLocation {
35
44
  realm?: Realm;
36
45
  realmProgress?: RealmProgress;
37
46
  reputationName?: string;
47
+ gatheringEvent?: LocationGatheringEvent;
38
48
  }
39
49
  /**
40
50
  * A root location that serves as an entry point for location discovery.
@@ -81,6 +91,11 @@ export interface LocationEvent {
81
91
  rarity: Rarity;
82
92
  triggerChance?: number;
83
93
  condition: string;
94
+ cooldown?: {
95
+ key: string;
96
+ min: number;
97
+ max: number;
98
+ };
84
99
  }
85
100
  export interface LocationMapEvent {
86
101
  event: EventStep[];
package/dist/mine.d.ts CHANGED
@@ -48,6 +48,8 @@ interface BaseChamber {
48
48
  isUnique?: boolean;
49
49
  /** If set, the chamber is only considered completed for pathing purposes when this game flag is truthy */
50
50
  completeFlag?: string;
51
+ /** If set, quantity-based drops are scaled: Middle = ×1.5, Late = ×2 */
52
+ realmProgress?: RealmProgress;
51
53
  }
52
54
  export interface OreChamber extends BaseChamber {
53
55
  kind: 'ore';
package/dist/mod.d.ts CHANGED
@@ -358,7 +358,6 @@ export interface ModAPI {
358
358
  metalShard: Buff;
359
359
  metalFragment: Buff;
360
360
  magnetizedMetal: Buff;
361
- stormOfSteel: Buff;
362
361
  };
363
362
  };
364
363
  guilds: Record<string, Guild>;
package/dist/quest.d.ts CHANGED
@@ -63,6 +63,7 @@ interface CollectQuestStep extends QuestStepBase {
63
63
  item: string;
64
64
  alternates?: string[];
65
65
  amount: number;
66
+ completionCondition?: string;
66
67
  }
67
68
  export interface KillQuestStep extends QuestStepBase {
68
69
  kind: 'kill';
@@ -1,5 +1,5 @@
1
1
  import { PlayerEntity, EnemyEntity, CombatEntity, Sex } from './entity';
2
- import { ItemDesc, EnchantmentDesc, ItemKind } from './item';
2
+ import { ItemDesc, EnchantmentDesc, ItemKind, ManualItem } from './item';
3
3
  import { BreakthroughState } from './breakthrough';
4
4
  import { ScreenEffectType } from './ScreenEffectType';
5
5
  import { CalendarEvent } from './calendar';
@@ -30,6 +30,7 @@ export interface PlayerState {
30
30
  name: string;
31
31
  }[];
32
32
  numStancesSeen: number;
33
+ learnedNpcManuals?: ManualItem[];
33
34
  }
34
35
  export interface InventoryItemState {
35
36
  name: string;
@@ -181,6 +182,7 @@ export interface CropReference {
181
182
  export interface LocationHerbFieldState {
182
183
  formation?: string;
183
184
  upgradeLevel?: number;
185
+ currentGardenLayoutId?: string;
184
186
  cropGrid?: {
185
187
  x: number;
186
188
  y: number;
@@ -384,6 +386,7 @@ export interface RecipeFilters {
384
386
  selectedRecipe: string;
385
387
  pinnedRecipes: string[];
386
388
  category: 'all' | ItemKind;
389
+ realmFilter: 'all' | Realm;
387
390
  }
388
391
  export interface CharacterUiPreferencesState {
389
392
  techniqueFilter: string;
package/dist/stat.js CHANGED
@@ -285,7 +285,7 @@ export const physicalStatToName = {
285
285
  };
286
286
  export const physicalStatToDescription = {
287
287
  flesh: 'Your ability to withstand damage. Affects <b>Max Health</b> and <b>Barrier Effectiveness</b>.',
288
- digestion: 'Your ability to handle the effects of alchemical creations. Affects your <b>Toxicity Handling</b> (<b>Toxicity Resistance</b> and <b>Item Effectiveness</b>).',
288
+ digestion: 'Your ability to handle the effects of alchemical creations. Affects your <b>Toxicity Handling</b> (<b>Toxicity Resistance</b>) and <b>Item Effectiveness</b>.',
289
289
  muscles: 'Your ability to use your body to project force. Affects your crafting <b>Qi Intensity</b> and combat <b>Power</b>.',
290
290
  dantian: 'Your ability to store and channel Qi. Affects your combat <b>Max Barrier</b>, crafting <b>Max Qi Pool</b>, <b>Qi Absorption</b>, and <b>Technique Mastery Points</b>.',
291
291
  meridians: 'Your ability to control Qi. Affects crafting <b>Qi Control</b> and combat <b>Artefact Power</b>.',
@@ -1,5 +1,5 @@
1
1
  import { Translatable } from './translatable';
2
- import { Buff, TechniqueCondition } from './buff';
2
+ import { Buff, RepairRule, TechniqueCondition } from './buff';
3
3
  import { DamageType } from './DamageType';
4
4
  import { TechniqueElement } from './element';
5
5
  import { Rarity } from './rarity';
@@ -62,8 +62,8 @@ export interface Technique {
62
62
  enhancement?: number;
63
63
  i?: number;
64
64
  }
65
- export type TechniqueEffectKind = 'buffSelf' | 'consumeSelf' | 'buffTarget' | 'consumeTarget' | 'damage' | 'damageSelf' | 'barrier' | 'heal' | 'convertSelf' | 'mergeSelf' | 'cleanseToxicity' | 'modifyBuffGroup' | 'trigger';
66
- export type TechniqueEffect = BuffSelfTechniqueEffect | ConsumeSelfTechniqueEffect | BuffTargetTechniqueEffect | ConsumeTargetTechniqueEffect | DamageTechniqueEffect | BarrierTechniqueEffect | HealTechniqueEffect | DamageSelfTechniqueEffect | ConvertSelfTechniqueEffect | MergeSelfTechniqueEffect | CleanseToxicityTechniqueEffect | ModifyBuffGroupEffect | TriggerEffect;
65
+ export type TechniqueEffectKind = 'buffSelf' | 'consumeSelf' | 'buffTarget' | 'consumeTarget' | 'damage' | 'damageSelf' | 'barrier' | 'heal' | 'convertSelf' | 'mergeSelf' | 'cleanseToxicity' | 'modifyBuffGroup' | 'trigger' | 'repair';
66
+ export type TechniqueEffect = BuffSelfTechniqueEffect | ConsumeSelfTechniqueEffect | BuffTargetTechniqueEffect | ConsumeTargetTechniqueEffect | DamageTechniqueEffect | BarrierTechniqueEffect | HealTechniqueEffect | DamageSelfTechniqueEffect | ConvertSelfTechniqueEffect | MergeSelfTechniqueEffect | CleanseToxicityTechniqueEffect | ModifyBuffGroupEffect | TriggerEffect | RepairTechniqueEffect;
67
67
  interface BaseTechniqueEffect {
68
68
  kind: TechniqueEffectKind;
69
69
  condition?: TechniqueCondition;
@@ -146,6 +146,14 @@ interface TriggerEffect extends BaseTechniqueEffect {
146
146
  amount: Scaling;
147
147
  triggerTooltip?: string;
148
148
  }
149
+ interface RepairTechniqueEffect extends BaseTechniqueEffect {
150
+ kind: 'repair';
151
+ amount: Scaling;
152
+ /** Matches buffs by name, buffType, or flag (same matching as modifyBuffGroup) */
153
+ group: string;
154
+ /** Which matching buff(s) to repair: 'all', 'lowestHealth', or 'highestHealth' */
155
+ rule: RepairRule;
156
+ }
149
157
  export type TechniqueMastery = PowerTechniqueMastery | EffectTechniqueMastery | CritChanceTechniqueMastery | CritMultiplierTechniqueMastery | UpgradeTechniqueMastery;
150
158
  interface BaseTechniqueMastery {
151
159
  condition?: TechniqueCondition;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "afnm-types",
3
- "version": "0.6.38",
3
+ "version": "0.6.42",
4
4
  "description": "Type definitions for Ascend From Nine Mountains",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -20,6 +20,10 @@
20
20
  "@mui/material": "^7.3.6"
21
21
  },
22
22
  "devDependencies": {
23
+ "@mui/icons-material": "^7.3.6",
24
+ "@mui/material": "^7.3.6",
25
+ "@types/react": "^19.0.0",
26
+ "react": "^19.0.0",
23
27
  "typescript": "^5.9.3"
24
28
  },
25
29
  "scripts": {
@@ -27,5 +31,10 @@
27
31
  "prepublishOnly": "npm run build"
28
32
  },
29
33
  "author": "Lyeeedar",
30
- "license": "MIT"
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/Lyeeedar/AscendFromNineMountains.git",
38
+ "directory": "typesPackage"
39
+ }
31
40
  }