afnm-types 0.6.11 → 0.6.16
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/GameScreen.d.ts +1 -1
- package/dist/buff.d.ts +1 -0
- package/dist/character.d.ts +5 -0
- package/dist/entity.d.ts +15 -0
- package/dist/guild.d.ts +5 -1
- package/dist/house.d.ts +1 -1
- package/dist/item.d.ts +1 -0
- package/dist/mod.d.ts +788 -1
- package/dist/quest.d.ts +6 -1
- package/dist/reduxState.d.ts +5 -1
- package/dist/stat.d.ts +1 -0
- package/dist/stat.js +1 -1
- package/dist/technique.d.ts +1 -0
- package/dist/trainingGround.d.ts +10 -0
- package/dist/trainingGround.js +1 -0
- package/package.json +4 -1
package/dist/GameScreen.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'pillarGrid' | 'fallenStar';
|
|
1
|
+
export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'pillarGrid' | 'fallenStar' | 'trainingGround';
|
package/dist/buff.d.ts
CHANGED
package/dist/character.d.ts
CHANGED
|
@@ -18,6 +18,11 @@ export interface Character {
|
|
|
18
18
|
portrait: string;
|
|
19
19
|
image: string;
|
|
20
20
|
imageScale?: number;
|
|
21
|
+
imageOverride?: {
|
|
22
|
+
image: string;
|
|
23
|
+
portrait: string;
|
|
24
|
+
condition: string;
|
|
25
|
+
}[];
|
|
21
26
|
}
|
|
22
27
|
export declare const characterRelationships: readonly ["Hostile", "Neutral", "Friendly", "Intimate"];
|
|
23
28
|
export type CharacterRelationship = (typeof characterRelationships)[number];
|
package/dist/entity.d.ts
CHANGED
|
@@ -41,6 +41,8 @@ export interface PlayerEntity {
|
|
|
41
41
|
storedCraftingLoadouts?: StoredCraftingLoadout[];
|
|
42
42
|
craftingQuickAccess?: (string | undefined)[];
|
|
43
43
|
craftingTechniques: KnownCraftingTechnique[];
|
|
44
|
+
currentEquipmentLoadout?: StoredEquipmentLoadout;
|
|
45
|
+
storedEquipmentLoadouts?: StoredEquipmentLoadout[];
|
|
44
46
|
destiny: string[];
|
|
45
47
|
monthBuffs?: Buff[];
|
|
46
48
|
injured?: boolean;
|
|
@@ -212,4 +214,17 @@ export interface StoredCraftingLoadout {
|
|
|
212
214
|
autoName?: boolean;
|
|
213
215
|
loadout: string[];
|
|
214
216
|
}
|
|
217
|
+
export interface StoredEquipmentLoadout {
|
|
218
|
+
name: string;
|
|
219
|
+
id: string;
|
|
220
|
+
autoName?: boolean;
|
|
221
|
+
equipment: {
|
|
222
|
+
clothing?: ItemDesc;
|
|
223
|
+
talismans: (ItemDesc | undefined)[];
|
|
224
|
+
artefacts: (ItemDesc | undefined)[];
|
|
225
|
+
mount?: ItemDesc;
|
|
226
|
+
cauldron?: ItemDesc;
|
|
227
|
+
flame?: ItemDesc;
|
|
228
|
+
};
|
|
229
|
+
}
|
|
215
230
|
export {};
|
package/dist/guild.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { OverridableComponent } from '@mui/material/OverridableComponent';
|
|
|
3
3
|
import { EventStep } from './event';
|
|
4
4
|
import { ShopItem } from './location';
|
|
5
5
|
import { ScreenEffectType } from './ScreenEffectType';
|
|
6
|
+
export interface GuildMission {
|
|
7
|
+
quest: string;
|
|
8
|
+
condition: string;
|
|
9
|
+
}
|
|
6
10
|
export interface Guild {
|
|
7
11
|
name: string;
|
|
8
12
|
description: string;
|
|
@@ -12,7 +16,7 @@ export interface Guild {
|
|
|
12
16
|
screenEffect: ScreenEffectType;
|
|
13
17
|
ranks: Record<number, string>;
|
|
14
18
|
rankShop: Record<number, ShopItem[]>;
|
|
15
|
-
rankQuests: Record<number,
|
|
19
|
+
rankQuests: Record<number, GuildMission[]>;
|
|
16
20
|
reputationToPromote: Record<number, number>;
|
|
17
21
|
promotionQuests: Record<number, {
|
|
18
22
|
title: string;
|
package/dist/house.d.ts
CHANGED
package/dist/item.d.ts
CHANGED
|
@@ -168,6 +168,7 @@ export interface CombatItem extends ItemBase {
|
|
|
168
168
|
kind: 'consumable';
|
|
169
169
|
effects: TechniqueEffect[];
|
|
170
170
|
tooltip?: string;
|
|
171
|
+
affinity?: TechniqueElement;
|
|
171
172
|
}
|
|
172
173
|
export interface ConsumablePillItem extends BasePillItem {
|
|
173
174
|
pillKind: 'consumable';
|
package/dist/mod.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { AuctionStep, CombatStep, CraftingStep, DualCultivationStep, EventStep,
|
|
|
15
15
|
import { Guild } from './guild';
|
|
16
16
|
import { Crop } from './herbField';
|
|
17
17
|
import { Enchantment, Item, ItemDesc, RecipeItem, UncutStonePool } from './item';
|
|
18
|
-
import { ConditionalLink, ExplorationLink, GameLocation, LocationEnemy, LocationEvent } from './location';
|
|
18
|
+
import { ConditionalLink, ExplorationLink, GameLocation, LocationBuilding, LocationEnemy, LocationEvent, LocationMapEvent, SectMission, CraftingMission } from './location';
|
|
19
19
|
import { Manual } from './manual';
|
|
20
20
|
import { MineChamber } from './mine';
|
|
21
21
|
import { Quest } from './quest';
|
|
@@ -33,6 +33,7 @@ import { SoundEffectName } from './audio';
|
|
|
33
33
|
import { ScreenEffectType } from './ScreenEffectType';
|
|
34
34
|
import { RootState } from './reduxState';
|
|
35
35
|
import { GameButtonFC, GameDialogFC, GameIconButtonFC, MemoBackgroundImageFC } from './components';
|
|
36
|
+
import { PuppetType } from './trainingGround';
|
|
36
37
|
export interface ModMetadata {
|
|
37
38
|
name: string;
|
|
38
39
|
version: string;
|
|
@@ -42,30 +43,184 @@ export interface ModMetadata {
|
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
export interface ModReduxAPI {
|
|
46
|
+
/**
|
|
47
|
+
* Hook to access the Redux store state. Works like React Redux's useSelector.
|
|
48
|
+
* @param selector - Function that extracts data from the RootState
|
|
49
|
+
* @returns The selected data from the store
|
|
50
|
+
* @example
|
|
51
|
+
* const playerRealm = useSelector((state) => state.player.realm);
|
|
52
|
+
* const inventory = useSelector((state) => state.inventory.items);
|
|
53
|
+
*/
|
|
45
54
|
useSelector: <TSelected>(selector: (state: RootState) => TSelected) => TSelected;
|
|
55
|
+
/**
|
|
56
|
+
* Hook to access game flags used for tracking quest progress and game state.
|
|
57
|
+
* @returns Object containing flags map and serialized JSON representation
|
|
58
|
+
* @example
|
|
59
|
+
* const { flags, flagsJSON } = useGameFlags();
|
|
60
|
+
* const questProgress = flags['main_quest_stage'] || 0;
|
|
61
|
+
*/
|
|
46
62
|
useGameFlags: () => {
|
|
47
63
|
flags: Record<string, number>;
|
|
48
64
|
flagsJSON: string;
|
|
49
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Hook to get a function for playing sound effects.
|
|
68
|
+
* @returns Function that plays a sound effect by name
|
|
69
|
+
* @example
|
|
70
|
+
* const playSfx = usePlaySfx();
|
|
71
|
+
* playSfx('Select');
|
|
72
|
+
*/
|
|
50
73
|
usePlaySfx: () => (name: SoundEffectName) => void;
|
|
74
|
+
/**
|
|
75
|
+
* Hook to register keyboard shortcuts
|
|
76
|
+
* @param priority - Higher numbers take precedence (0-100 typical)
|
|
77
|
+
* @param binding - Map of key names to callback functions
|
|
78
|
+
* @param disableSpaceOverride - If true, spacebar won't be overridden to map to Enter
|
|
79
|
+
* @example
|
|
80
|
+
* useKeybinding(10, {
|
|
81
|
+
* 'Escape': () => closeDialog(),
|
|
82
|
+
* 'Enter': () => confirmAction(),
|
|
83
|
+
* 'i': () => openInventory()
|
|
84
|
+
* });
|
|
85
|
+
*/
|
|
51
86
|
useKeybinding: (priority: number, binding: Record<string, () => void> | undefined, disableSpaceOverride?: boolean) => void;
|
|
52
87
|
actions: {
|
|
88
|
+
/**
|
|
89
|
+
* Navigate to a different game screen.
|
|
90
|
+
* @param screen - Screen identifier (e.g., 'location', 'market', 'auction')
|
|
91
|
+
* @example
|
|
92
|
+
* setScreen('my_mod_custom_screen');
|
|
93
|
+
*/
|
|
53
94
|
setScreen: (screen: string) => void;
|
|
95
|
+
/**
|
|
96
|
+
* Set or update a game flag value.
|
|
97
|
+
* @param flag - Flag identifier (e.g., 'quest_started', 'boss_defeated')
|
|
98
|
+
* @param value - Numeric value to set (typically 0/1 for booleans, or progress counters)
|
|
99
|
+
* @example
|
|
100
|
+
* setFlag('tutorial_complete', 1);
|
|
101
|
+
* setFlag('quest_stage', 3);
|
|
102
|
+
*/
|
|
54
103
|
setFlag: (flag: string, value: number) => void;
|
|
104
|
+
/**
|
|
105
|
+
* Store custom mod-specific data in save file.
|
|
106
|
+
* @param modName - Name of your mod (for namespacing)
|
|
107
|
+
* @param key - Data key identifier
|
|
108
|
+
* @param data - Any JSON-serializable data
|
|
109
|
+
* @example
|
|
110
|
+
* setModData('myMod', 'customNPC_affinity', { npcId: 'elder_li', value: 75 });
|
|
111
|
+
*/
|
|
55
112
|
setModData: (modName: string, key: string, data: any) => void;
|
|
113
|
+
/**
|
|
114
|
+
* Move player to a different location on the world map.
|
|
115
|
+
* @param location - Location key from the locations data
|
|
116
|
+
* @example
|
|
117
|
+
* setLocation('Liang Tiao Village');
|
|
118
|
+
* setLocation('Shen Henda City');
|
|
119
|
+
*/
|
|
56
120
|
setLocation: (location: string) => void;
|
|
121
|
+
/**
|
|
122
|
+
* Update player entity stats and attributes.
|
|
123
|
+
* @param player - Player entity with properties to update
|
|
124
|
+
* @example
|
|
125
|
+
* updatePlayer(newPlayer);
|
|
126
|
+
*/
|
|
57
127
|
updatePlayer: (player: PlayerEntity) => void;
|
|
128
|
+
/**
|
|
129
|
+
* Advance the game calendar by specified days.
|
|
130
|
+
* @param days - Number of days to advance
|
|
131
|
+
* @example
|
|
132
|
+
* advanceDays(7); // Skip one week
|
|
133
|
+
* advanceDays(30); // Skip one month
|
|
134
|
+
*/
|
|
58
135
|
advanceDays: (days: number) => void;
|
|
136
|
+
/**
|
|
137
|
+
* Add a quest to the player's quest log.
|
|
138
|
+
* @param quest - Quest identifier key
|
|
139
|
+
* @example
|
|
140
|
+
* addQuest('Burning Bridges');
|
|
141
|
+
* addQuest('Shadow Cloak');
|
|
142
|
+
*/
|
|
59
143
|
addQuest: (quest: string) => void;
|
|
144
|
+
/**
|
|
145
|
+
* Add an item to player inventory.
|
|
146
|
+
* @param item - Item descriptor with name and optional properties
|
|
147
|
+
* @example
|
|
148
|
+
* addItem({ name: 'Spirit Core (III)', count: 10 });
|
|
149
|
+
* addItem({ name: 'Nine Mountain Hammer', count: 1, quality: 5 });
|
|
150
|
+
*/
|
|
60
151
|
addItem: (item: ItemDesc) => void;
|
|
152
|
+
/**
|
|
153
|
+
* Remove items from player inventory.
|
|
154
|
+
* @param itemName - Name of the item to remove
|
|
155
|
+
* @param count - Number of items to remove
|
|
156
|
+
* @example
|
|
157
|
+
* removeItem('Spirit Core (I)', 5);
|
|
158
|
+
* removeItem('Healing Pill (III)', 1);
|
|
159
|
+
*/
|
|
61
160
|
removeItem: (itemName: string, count: number) => void;
|
|
161
|
+
/**
|
|
162
|
+
* Teach the player a crafting recipe.
|
|
163
|
+
* @param item - Item name that the recipe produces
|
|
164
|
+
* @example
|
|
165
|
+
* learnRecipe('Healing Pill (III) Recipe');
|
|
166
|
+
*/
|
|
62
167
|
learnRecipe: (item: string) => void;
|
|
168
|
+
/**
|
|
169
|
+
* Teach the player a combat technique.
|
|
170
|
+
* @param technique - Technique identifier key
|
|
171
|
+
* @example
|
|
172
|
+
* learnTechnique('Gale Blast');
|
|
173
|
+
* learnTechnique('Advancing Fist');
|
|
174
|
+
*/
|
|
63
175
|
learnTechnique: (technique: string) => void;
|
|
176
|
+
/**
|
|
177
|
+
* Teach the player a crafting action/technique.
|
|
178
|
+
* @param action - Crafting action identifier
|
|
179
|
+
* @example
|
|
180
|
+
* learnCraftingAction('Toxic Fusion');
|
|
181
|
+
* learnCraftingAction('Gentle Repair');
|
|
182
|
+
*/
|
|
64
183
|
learnCraftingAction: (action: string) => void;
|
|
184
|
+
/**
|
|
185
|
+
* Modify player's spirit stones.
|
|
186
|
+
* @param amount - Amount to add (positive) or subtract (negative)
|
|
187
|
+
* @example
|
|
188
|
+
* changeMoney(100); // Add 100 spirit stones
|
|
189
|
+
* changeMoney(-50); // Remove 50 spirit stones
|
|
190
|
+
*/
|
|
65
191
|
changeMoney: (amount: number) => void;
|
|
192
|
+
/**
|
|
193
|
+
* Modify player's qi.
|
|
194
|
+
* @param amount - Amount to add (positive) or subtract (negative)
|
|
195
|
+
* @example
|
|
196
|
+
* changeQi(50); // Restore 50 qi
|
|
197
|
+
* changeQi(-20); // Consume 20 qi
|
|
198
|
+
*/
|
|
66
199
|
changeQi: (amount: number) => void;
|
|
200
|
+
/**
|
|
201
|
+
* Modify sect favour.
|
|
202
|
+
* @param amount - Amount to add (positive) or subtract (negative)
|
|
203
|
+
* @example
|
|
204
|
+
* changeFavour(10); // Gain 10 favour
|
|
205
|
+
* changeFavour(-5); // Lose 5 favour
|
|
206
|
+
*/
|
|
67
207
|
changeFavour: (amount: number) => void;
|
|
208
|
+
/**
|
|
209
|
+
* Start a game event.
|
|
210
|
+
* @param event - Event configuration with steps
|
|
211
|
+
* @example
|
|
212
|
+
* startEvent({ location: "Liang Tiao Village", steps: [{ type: 'text', text: 'Welcome!' }] });
|
|
213
|
+
*/
|
|
68
214
|
startEvent: (event: GameEvent) => void;
|
|
215
|
+
/**
|
|
216
|
+
* Initiate combat encounter.
|
|
217
|
+
* @param enemies - Array of enemy entities to fight
|
|
218
|
+
* @param playerBuffs - Buffs to apply to player at combat start
|
|
219
|
+
* @param locationBackgroundOverride - Optional custom background for combat
|
|
220
|
+
* @example
|
|
221
|
+
* startCombat([ratascar], []);
|
|
222
|
+
* startCombat([boss], [strengthBuff], { backgroundImage: 'boss_arena.png', screenEffect: 'mist' });
|
|
223
|
+
*/
|
|
69
224
|
startCombat: (enemies: EnemyEntity[], playerBuffs: Buff[], locationBackgroundOverride?: {
|
|
70
225
|
backgroundImage: string;
|
|
71
226
|
screenEffect: ScreenEffectType;
|
|
@@ -166,74 +321,600 @@ export interface ModAPI {
|
|
|
166
321
|
mysticalRegionBlessings: Blessing[];
|
|
167
322
|
harmonyConfigs: Record<RecipeHarmonyType, HarmonyTypeConfig>;
|
|
168
323
|
itemTypeToHarmonyType: Record<ItemKind, RecipeHarmonyType>;
|
|
324
|
+
puppets: PuppetType[];
|
|
169
325
|
};
|
|
170
326
|
actions: {
|
|
327
|
+
/**
|
|
328
|
+
* Add a background option for character creation (birth stage).
|
|
329
|
+
* @param background - Background configuration with stats and description
|
|
330
|
+
*/
|
|
171
331
|
addBirthBackground: (background: Background) => void;
|
|
332
|
+
/**
|
|
333
|
+
* Add a background option for character creation (childhood stage).
|
|
334
|
+
* @param background - Background configuration for childhood events
|
|
335
|
+
*/
|
|
172
336
|
addChildBackground: (background: Background) => void;
|
|
337
|
+
/**
|
|
338
|
+
* Add a background option for character creation (teenage stage).
|
|
339
|
+
* @param background - Background configuration for teenage experiences
|
|
340
|
+
*/
|
|
173
341
|
addTeenBackground: (background: Background) => void;
|
|
342
|
+
/**
|
|
343
|
+
* Register a new item type in the game.
|
|
344
|
+
* @param item - Complete item definition with stats and properties
|
|
345
|
+
*/
|
|
174
346
|
addItem: (item: Item) => void;
|
|
347
|
+
/**
|
|
348
|
+
* Add an item to a shop's inventory.
|
|
349
|
+
* @param item - Item to add
|
|
350
|
+
* @param stacks - Number of stacks available
|
|
351
|
+
* @param location - Location of the shop
|
|
352
|
+
* @param realm - Required realm to purchase
|
|
353
|
+
* @param valueModifier - (Optional) Price multiplier (default 1.0)
|
|
354
|
+
* @param reputation - (Optional) Required reputation tier
|
|
355
|
+
*/
|
|
175
356
|
addItemToShop: (item: Item, stacks: number, location: string, realm: Realm, valueModifier?: number, reputation?: ReputationTier) => void;
|
|
357
|
+
/**
|
|
358
|
+
* Add an item to a guild's rank shop.
|
|
359
|
+
* @param item - Item to add
|
|
360
|
+
* @param stacks - Number of stacks available
|
|
361
|
+
* @param guild - Name of the guild
|
|
362
|
+
* @param rank - Required guild rank to purchase
|
|
363
|
+
* @param valueModifier - (Optional) Price multiplier (default 1.0)
|
|
364
|
+
* @param reputation - (Optional) Required reputation tier
|
|
365
|
+
*/
|
|
366
|
+
addItemToGuild: (item: Item, stacks: number, guild: string, rank: number, valueModifier?: number, reputation?: ReputationTier) => void;
|
|
367
|
+
/**
|
|
368
|
+
* Add a crafting recipe to the sect recipe library.
|
|
369
|
+
* @param item - Recipe item configuration
|
|
370
|
+
*/
|
|
176
371
|
addRecipeToLibrary: (item: RecipeItem) => void;
|
|
372
|
+
/**
|
|
373
|
+
* Add an item to auction house pool.
|
|
374
|
+
* @param item - Item to add
|
|
375
|
+
* @param chance - Spawn chance (0-1). Default 1 unless you want it to be extra rare
|
|
376
|
+
* @param condition - Condition expression for availability. Normally should be '1'
|
|
377
|
+
* @param countOverride - Override stack count
|
|
378
|
+
* @param countMultiplier - Multiply default count
|
|
379
|
+
* @example
|
|
380
|
+
* addItemToAuction(rareRecipe, 1, '1');
|
|
381
|
+
*/
|
|
177
382
|
addItemToAuction: (item: Item, chance: number, condition: string, countOverride?: number, countMultiplier?: number) => void;
|
|
383
|
+
/**
|
|
384
|
+
* Add a recipe that can be researched from a base item.
|
|
385
|
+
* @param baseItem - Item that enables research
|
|
386
|
+
* @param recipe - Recipe to unlock
|
|
387
|
+
* @example
|
|
388
|
+
* addRecipeToResearch(ancientScroll, advancedPillRecipe);
|
|
389
|
+
*/
|
|
178
390
|
addRecipeToResearch: (baseItem: Item, recipe: RecipeItem) => void;
|
|
391
|
+
/**
|
|
392
|
+
* Register a new character.
|
|
393
|
+
* @param character - Complete character definition
|
|
394
|
+
*/
|
|
179
395
|
addCharacter: (character: Character) => void;
|
|
396
|
+
/**
|
|
397
|
+
* Add a breakthrough for a realm.
|
|
398
|
+
* @param realm - Target realm
|
|
399
|
+
* @param breakthrough - Breakthrough configuration
|
|
400
|
+
*/
|
|
180
401
|
addBreakthrough: (realm: Realm, breakthrough: Breakthrough) => void;
|
|
402
|
+
/**
|
|
403
|
+
* Add a recurring calendar event.
|
|
404
|
+
* @param event - Calendar event configuration
|
|
405
|
+
* @example
|
|
406
|
+
* addCalendarEvent({ name: 'Moon Festival', condition: '1', year: 1066, month: 8 });
|
|
407
|
+
*/
|
|
181
408
|
addCalendarEvent: (event: CalendarEvent) => void;
|
|
409
|
+
/**
|
|
410
|
+
* Register a new crafting action.
|
|
411
|
+
* @param action - Crafting action definition
|
|
412
|
+
*/
|
|
182
413
|
addCraftingTechnique: (technique: CraftingTechnique) => void;
|
|
414
|
+
/**
|
|
415
|
+
* Add a destiny
|
|
416
|
+
* @param destiny - Destiny configuration
|
|
417
|
+
*/
|
|
183
418
|
addDestiny: (destiny: Destiny) => void;
|
|
419
|
+
/**
|
|
420
|
+
* Add an event that triggers on conditions.
|
|
421
|
+
* @param event - Triggered event configuration
|
|
422
|
+
*/
|
|
184
423
|
addTriggeredEvent: (event: TriggeredEvent) => void;
|
|
424
|
+
/**
|
|
425
|
+
* Add a crop type for herb gardens.
|
|
426
|
+
* @param realm - Required realm to plant
|
|
427
|
+
* @param crop - Crop configuration
|
|
428
|
+
* @example
|
|
429
|
+
* addCrop('qi_condensation', { item: 'Twisted Vine', yield: 5, growthDays: 30 });
|
|
430
|
+
*/
|
|
185
431
|
addCrop: (realm: Realm, crop: Crop) => void;
|
|
432
|
+
/**
|
|
433
|
+
* Register a new world location.
|
|
434
|
+
* @param location - Complete location definition
|
|
435
|
+
*/
|
|
186
436
|
addLocation: (location: GameLocation) => void;
|
|
437
|
+
/**
|
|
438
|
+
* Create a link between two locations.
|
|
439
|
+
* @param existing - Source location key
|
|
440
|
+
* @param link - Link configuration
|
|
441
|
+
* @example
|
|
442
|
+
* linkLocations('Liang Tiao Village', { location: myLocation, distance: 5, condition: "my_unlock_flag" });
|
|
443
|
+
*/
|
|
187
444
|
linkLocations: (existing: string, link: ConditionalLink | ExplorationLink) => void;
|
|
445
|
+
/**
|
|
446
|
+
* Add buildings to an existing location.
|
|
447
|
+
* @param location - Location key
|
|
448
|
+
* @param buildings - Buildings to add
|
|
449
|
+
* @example
|
|
450
|
+
* addBuildingsToLocation('Liang Tiao Village', [{ kind: 'healer' }]);
|
|
451
|
+
*/
|
|
452
|
+
addBuildingsToLocation: (location: string, buildings: LocationBuilding[]) => void;
|
|
453
|
+
/**
|
|
454
|
+
* Add enemies to an existing location.
|
|
455
|
+
* @param location - Location key
|
|
456
|
+
* @param enemies - Enemy configurations
|
|
457
|
+
*/
|
|
458
|
+
addEnemiesToLocation: (location: string, enemies: LocationEnemy[]) => void;
|
|
459
|
+
/**
|
|
460
|
+
* Add events to an existing location.
|
|
461
|
+
* @param location - Location key
|
|
462
|
+
* @param events - Event configurations
|
|
463
|
+
*/
|
|
464
|
+
addEventsToLocation: (location: string, events: LocationEvent[]) => void;
|
|
465
|
+
/**
|
|
466
|
+
* Add exploration events to an existing location.
|
|
467
|
+
* @param location - Location key
|
|
468
|
+
* @param events - Exploration event configurations
|
|
469
|
+
*/
|
|
470
|
+
addExplorationEventsToLocation: (location: string, events: LocationEvent[]) => void;
|
|
471
|
+
/**
|
|
472
|
+
* Add map events to an existing location.
|
|
473
|
+
* @param location - Location key
|
|
474
|
+
* @param mapEvents - Map event configurations
|
|
475
|
+
*/
|
|
476
|
+
addMapEventsToLocation: (location: string, mapEvents: LocationMapEvent[]) => void;
|
|
477
|
+
/**
|
|
478
|
+
* Add sect missions to an existing location.
|
|
479
|
+
* @param location - Location key
|
|
480
|
+
* @param missions - Mission configurations
|
|
481
|
+
* @example
|
|
482
|
+
* addMissionsToLocation('Sect Hall', [window.modAPI.utils.createCullingMission(...)]);
|
|
483
|
+
*/
|
|
484
|
+
addMissionsToLocation: (location: string, missions: SectMission[]) => void;
|
|
485
|
+
/**
|
|
486
|
+
* Add crafting missions to an existing location.
|
|
487
|
+
* @param location - Location key
|
|
488
|
+
* @param missions - Crafting mission configurations
|
|
489
|
+
* @example
|
|
490
|
+
* addCraftingMissionsToLocation('Crafting Hall', [window.modAPI.utils.createCraftingMission(...)]);
|
|
491
|
+
*/
|
|
492
|
+
addCraftingMissionsToLocation: (location: string, missions: CraftingMission[]) => void;
|
|
493
|
+
/**
|
|
494
|
+
* Add a manual to the Manual Pagoda.
|
|
495
|
+
* @param manual - Manual configuration
|
|
496
|
+
*/
|
|
188
497
|
addManual: (manual: Manual) => void;
|
|
498
|
+
/**
|
|
499
|
+
* Add a chamber to the spirit stone mine.
|
|
500
|
+
* @param realm - Required realm
|
|
501
|
+
* @param progress - Realm progress level
|
|
502
|
+
* @param chamber - Chamber configuration
|
|
503
|
+
*/
|
|
189
504
|
addMineChamber: (realm: Realm, progress: RealmProgress, chamber: MineChamber) => void;
|
|
505
|
+
/**
|
|
506
|
+
* Register a new quest.
|
|
507
|
+
* @param quest - Complete quest definition
|
|
508
|
+
*/
|
|
190
509
|
addQuest: (quest: Quest) => void;
|
|
510
|
+
/**
|
|
511
|
+
* Add a combat technique.
|
|
512
|
+
* @param technique - Technique configuration
|
|
513
|
+
*/
|
|
191
514
|
addTechnique: (technique: Technique) => void;
|
|
515
|
+
/**
|
|
516
|
+
* Register background music tracks.
|
|
517
|
+
* @param name - Music identifier
|
|
518
|
+
* @param path - Array of file paths (for variants)
|
|
519
|
+
* @example
|
|
520
|
+
* addMusic('boss_theme', ['audio/boss1.ogg', 'audio/boss2.ogg']);
|
|
521
|
+
*/
|
|
192
522
|
addMusic: (name: string, path: string[]) => void;
|
|
523
|
+
/**
|
|
524
|
+
* Register a sound effect.
|
|
525
|
+
* @param name - Sound effect identifier
|
|
526
|
+
* @param path - File path
|
|
527
|
+
* @example
|
|
528
|
+
* addSfx('sword_clash', 'audio/sfx/sword_clash.ogg');
|
|
529
|
+
*/
|
|
193
530
|
addSfx: (name: string, path: string) => void;
|
|
531
|
+
/**
|
|
532
|
+
* Add a joinable organisation.
|
|
533
|
+
* @param guild - Guild configuration
|
|
534
|
+
*/
|
|
194
535
|
addGuild: (guild: Guild) => void;
|
|
536
|
+
/**
|
|
537
|
+
* Add a dual cultivation technique.
|
|
538
|
+
* @param technique - Intimate technique configuration
|
|
539
|
+
*/
|
|
195
540
|
addDualCultivationTechnique: (technique: IntimateTechnique) => void;
|
|
541
|
+
/**
|
|
542
|
+
* Register an equipment enchantment.
|
|
543
|
+
* @param enchantment - Enchantment configuration
|
|
544
|
+
*/
|
|
196
545
|
addEnchantment: (enchantment: Enchantment) => void;
|
|
546
|
+
/**
|
|
547
|
+
* Add a fallen star.
|
|
548
|
+
* @param fallenStar - Fallen star configuration
|
|
549
|
+
*/
|
|
197
550
|
addFallenStar: (fallenStar: FallenStar) => void;
|
|
551
|
+
/**
|
|
552
|
+
* Add a room type for player housing.
|
|
553
|
+
* @param room - Room configuration
|
|
554
|
+
*/
|
|
198
555
|
addRoom: (room: Room) => void;
|
|
556
|
+
/**
|
|
557
|
+
* Add a researchable recipe linked to an item.
|
|
558
|
+
* @param baseItem - Item key that enables research
|
|
559
|
+
* @param recipe - Recipe to unlock
|
|
560
|
+
* @example
|
|
561
|
+
* addResearchableRecipe('ancient_cauldron', advancedPillRecipe);
|
|
562
|
+
*/
|
|
199
563
|
addResearchableRecipe: (baseItem: string, recipe: RecipeItem) => void;
|
|
564
|
+
/**
|
|
565
|
+
* Add an uncut stone to stone cutting pool.
|
|
566
|
+
* @param realm - Required realm
|
|
567
|
+
* @param uncutStone - Stone item
|
|
568
|
+
*/
|
|
200
569
|
addUncutStone: (realm: Realm, uncutStone: Item) => void;
|
|
570
|
+
/**
|
|
571
|
+
* Add a blessing for mystical regions.
|
|
572
|
+
* @param blessing - Blessing configuration
|
|
573
|
+
*/
|
|
201
574
|
addMysticalRegionBlessing: (blessing: Blessing) => void;
|
|
575
|
+
/**
|
|
576
|
+
* Register a new harmony type for crafting.
|
|
577
|
+
* @param harmonyType - Harmony type identifier
|
|
578
|
+
* @param config - Harmony configuration
|
|
579
|
+
*/
|
|
202
580
|
addHarmonyType: (harmonyType: RecipeHarmonyType, config: HarmonyTypeConfig) => void;
|
|
581
|
+
/**
|
|
582
|
+
* Override item type to harmony type mappings.
|
|
583
|
+
* @param mapping - Partial mapping of item kinds to harmony types
|
|
584
|
+
* @example
|
|
585
|
+
* overrideItemTypeToHarmonyType({ 'pill': 'medicinal', 'artefact': 'elemental' });
|
|
586
|
+
*/
|
|
203
587
|
overrideItemTypeToHarmonyType: (mapping: Partial<Record<ItemKind, RecipeHarmonyType>>) => void;
|
|
588
|
+
/**
|
|
589
|
+
* Register a custom game screen.
|
|
590
|
+
* @param config - Screen configuration
|
|
591
|
+
*/
|
|
204
592
|
addScreen: (config: ModScreenConfig) => void;
|
|
593
|
+
/**
|
|
594
|
+
* Register a new puppet type for training ground.
|
|
595
|
+
* @param puppet - Puppet configuration
|
|
596
|
+
*/
|
|
597
|
+
addPuppetType: (puppet: PuppetType) => void;
|
|
205
598
|
};
|
|
206
599
|
utils: {
|
|
600
|
+
/**
|
|
601
|
+
* Create an alpha variant of an enemy (stronger version).
|
|
602
|
+
* @param enemy - Base enemy entity
|
|
603
|
+
* @returns Enhanced enemy with increased stats
|
|
604
|
+
* @example
|
|
605
|
+
* const alphaBandit = alpha(bandit);
|
|
606
|
+
* // Returns bandit with ~1.5x health and damage
|
|
607
|
+
*/
|
|
207
608
|
alpha: (enemy: EnemyEntity) => EnemyEntity;
|
|
609
|
+
/**
|
|
610
|
+
* Create an alpha+ variant of an enemy (much stronger).
|
|
611
|
+
* @param enemy - Base enemy entity
|
|
612
|
+
* @returns Significantly enhanced enemy
|
|
613
|
+
* @example
|
|
614
|
+
* const eliteBoss = alphaPlus(demonLord);
|
|
615
|
+
* // Returns enemy with ~2x stats and special abilities
|
|
616
|
+
*/
|
|
208
617
|
alphaPlus: (enemy: EnemyEntity) => EnemyEntity;
|
|
618
|
+
/**
|
|
619
|
+
* Create realmbreaker variants (group of stronger enemies).
|
|
620
|
+
* @param enemy - Base enemy template
|
|
621
|
+
* @returns Array of enhanced enemies
|
|
622
|
+
* @example
|
|
623
|
+
* const demonHorde = realmbreaker(demon);
|
|
624
|
+
* // Returns array of 3-5 demons with varied stats
|
|
625
|
+
*/
|
|
209
626
|
realmbreaker: (enemy: EnemyEntity) => EnemyEntity[];
|
|
627
|
+
/**
|
|
628
|
+
* Create a corrupted variant of an enemy.
|
|
629
|
+
* @param enemy - Base enemy entity
|
|
630
|
+
* @returns Corrupted enemy with dark powers
|
|
631
|
+
* @example
|
|
632
|
+
* const corruptedBeast = corrupted(beast);
|
|
633
|
+
* // Returns enemy with corruption buffs and abilities
|
|
634
|
+
*/
|
|
210
635
|
corrupted: (enemy: EnemyEntity) => EnemyEntity;
|
|
636
|
+
/**
|
|
637
|
+
* Create a combat event from an enemy configuration.
|
|
638
|
+
* @param enemy - Location enemy definition
|
|
639
|
+
* @returns Location event that triggers combat
|
|
640
|
+
*/
|
|
211
641
|
createCombatEvent: (enemy: LocationEnemy) => LocationEvent;
|
|
642
|
+
/**
|
|
643
|
+
* Create a monster culling quest.
|
|
644
|
+
* @param monster - Enemy to defeat
|
|
645
|
+
* @param location - Quest location
|
|
646
|
+
* @param description - Quest description text
|
|
647
|
+
* @param favour - Favour reward
|
|
648
|
+
* @returns Complete quest object
|
|
649
|
+
*/
|
|
212
650
|
createCullingMission: (monster: EnemyEntity, location: string, description: string, favour: number) => Quest;
|
|
651
|
+
/**
|
|
652
|
+
* Create an item collection quest.
|
|
653
|
+
* @param item - Item to collect
|
|
654
|
+
* @param location - Collection location
|
|
655
|
+
* @param description - Quest description
|
|
656
|
+
* @param favour - Favour reward
|
|
657
|
+
* @returns Complete quest object
|
|
658
|
+
*/
|
|
213
659
|
createCollectionMission: (item: Item, location: string, description: string, favour: number) => Quest;
|
|
660
|
+
/**
|
|
661
|
+
* Create a delivery quest with events.
|
|
662
|
+
* @param items - Items to deliver
|
|
663
|
+
* @param count - Number of items
|
|
664
|
+
* @param location - Delivery location
|
|
665
|
+
* @param description - Quest description
|
|
666
|
+
* @param preDeliverySteps - Events before delivery
|
|
667
|
+
* @param postDeliverySteps - Events after delivery
|
|
668
|
+
* @param favour - Favour reward
|
|
669
|
+
* @returns Complete quest object
|
|
670
|
+
*/
|
|
214
671
|
createDeliveryMission: (items: Item[], count: number, location: string, description: string, preDeliverySteps: EventStep[], postDeliverySteps: EventStep[], favour: number) => Quest;
|
|
672
|
+
/**
|
|
673
|
+
* Create a hunt quest with rewards.
|
|
674
|
+
* @param monster - Target monster
|
|
675
|
+
* @param location - Hunt location
|
|
676
|
+
* @param description - Quest description
|
|
677
|
+
* @param encounter - Encounter text
|
|
678
|
+
* @param spiritStones - Money reward
|
|
679
|
+
* @param reputation - Reputation gain
|
|
680
|
+
* @param reputationName - Faction name
|
|
681
|
+
* @param maxReputation - Max reputation tier
|
|
682
|
+
* @param characterEncounter - Optional NPC encounter
|
|
683
|
+
* @returns Complete quest object
|
|
684
|
+
*/
|
|
215
685
|
createHuntQuest: (monster: EnemyEntity, location: string, description: string, encounter: string, spiritStones: number, reputation: number, reputationName: string, maxReputation: ReputationTier, characterEncounter?: CharacterRequestEncounter) => Quest;
|
|
686
|
+
/**
|
|
687
|
+
* Create a pack hunting quest.
|
|
688
|
+
* @param monster - Monster type in pack
|
|
689
|
+
* @param location - Hunt location
|
|
690
|
+
* @param description - Quest description
|
|
691
|
+
* @param encounter - Encounter text
|
|
692
|
+
* @param spiritStones - Money reward
|
|
693
|
+
* @param reputation - Reputation gain
|
|
694
|
+
* @param reputationName - Faction name
|
|
695
|
+
* @param maxReputation - Max tier
|
|
696
|
+
* @returns Complete quest object
|
|
697
|
+
*/
|
|
216
698
|
createPackQuest: (monster: EnemyEntity, location: string, description: string, encounter: string, spiritStones: number, reputation: number, reputationName: string, maxReputation: ReputationTier) => Quest;
|
|
699
|
+
/**
|
|
700
|
+
* Create a delivery quest with full rewards.
|
|
701
|
+
* @param location - Delivery destination
|
|
702
|
+
* @param description - Quest description
|
|
703
|
+
* @param predelivery - Pre-delivery events
|
|
704
|
+
* @param item - Item to deliver
|
|
705
|
+
* @param amount - Item count
|
|
706
|
+
* @param postdelivery - Post-delivery events
|
|
707
|
+
* @param spiritStones - Money reward
|
|
708
|
+
* @param reputation - Reputation gain
|
|
709
|
+
* @param reputationName - Faction name
|
|
710
|
+
* @param maxReputation - Max tier
|
|
711
|
+
* @returns Complete quest object
|
|
712
|
+
*/
|
|
217
713
|
createDeliveryQuest: (location: string, description: string, predelivery: EventStep[], item: Item, amount: number, postdelivery: EventStep[], spiritStones: number, reputation: number, reputationName: string, maxReputation: ReputationTier) => Quest;
|
|
714
|
+
/**
|
|
715
|
+
* Create a fetch quest between locations.
|
|
716
|
+
* @param title - Quest title
|
|
717
|
+
* @param description - Quest description
|
|
718
|
+
* @param srcLocation - Source location
|
|
719
|
+
* @param srcHint - Hint for source
|
|
720
|
+
* @param srcSteps - Source events
|
|
721
|
+
* @param dstLocation - Destination location
|
|
722
|
+
* @param dstHint - Hint for destination
|
|
723
|
+
* @param dstSteps - Destination events
|
|
724
|
+
* @param spiritStones - Money reward
|
|
725
|
+
* @param reputation - Reputation gain
|
|
726
|
+
* @param reputationName - Faction name
|
|
727
|
+
* @param maxReputation - Max tier
|
|
728
|
+
* @returns Complete quest object
|
|
729
|
+
*/
|
|
218
730
|
createFetchQuest: (title: string, description: string, srcLocation: string, srcHint: string, srcSteps: EventStep[], dstLocation: string, dstHint: string, dstSteps: EventStep[], spiritStones: number, reputation: number, reputationName: string, maxReputation: ReputationTier) => Quest;
|
|
731
|
+
/**
|
|
732
|
+
* Create a crafting hall mission
|
|
733
|
+
* @param recipe - Quest recipe
|
|
734
|
+
* @param cost - Spirit Stone acceptance cost
|
|
735
|
+
* @param location - Quest start location
|
|
736
|
+
* @param appraiser - Quest start confirmation NPC
|
|
737
|
+
* @param description - Quest description
|
|
738
|
+
* @param introSteps - Pre Crafting quest steps
|
|
739
|
+
* @param sublimeSteps - Sublime result quest steps
|
|
740
|
+
* @param perfectSteps - Perfect result quest steps
|
|
741
|
+
* @param basicSteps - Basic result quest steps
|
|
742
|
+
* @param failureSteps - Failure result quest steps
|
|
743
|
+
* @param favour - Sect favour granted on success
|
|
744
|
+
*/
|
|
745
|
+
createCraftingMission: (recipe: Item, cost: number, location: string, appraiser: string, description: string, introSteps: EventStep[], sublimeSteps: EventStep[], perfectSteps: EventStep[], basicSteps: EventStep[], failureSteps: EventStep[], favour: number) => Quest;
|
|
746
|
+
/**
|
|
747
|
+
* Create a Q&A dialogue tree.
|
|
748
|
+
* @param key - Unique key for the dialogue
|
|
749
|
+
* @param questions - Array of questions/answers
|
|
750
|
+
* @param exit - Exit option
|
|
751
|
+
* @param showExitOnAllComplete - Show exit only after all questions
|
|
752
|
+
* @returns Event steps for the dialogue
|
|
753
|
+
*/
|
|
219
754
|
createQuestionAnswerList: (key: string, questions: QuestionAnswer[], exit: QuestionAnswer, showExitOnAllComplete?: boolean) => EventStep[];
|
|
755
|
+
/**
|
|
756
|
+
* Get expected health for a realm/progress.
|
|
757
|
+
* @param realm - Cultivation realm
|
|
758
|
+
* @param progress - Progress within realm
|
|
759
|
+
* @returns Expected health value
|
|
760
|
+
* @example
|
|
761
|
+
* const health = getExpectedHealth('coreFormation', 'Middle');
|
|
762
|
+
*/
|
|
220
763
|
getExpectedHealth: (realm: Realm, progress: RealmProgress) => number;
|
|
764
|
+
/**
|
|
765
|
+
* Get expected power for a realm/progress.
|
|
766
|
+
* @param realm - Cultivation realm
|
|
767
|
+
* @param progress - Progress within realm
|
|
768
|
+
* @returns Expected power value
|
|
769
|
+
* @example
|
|
770
|
+
* const power = getExpectedPower('coreFormation', 'Late');
|
|
771
|
+
*/
|
|
221
772
|
getExpectedPower: (realm: Realm, progress: RealmProgress) => number;
|
|
773
|
+
/**
|
|
774
|
+
* Get expected defense for a realm/progress.
|
|
775
|
+
* @param realm - Cultivation realm
|
|
776
|
+
* @param progress - Progress within realm
|
|
777
|
+
* @returns Expected defense value
|
|
778
|
+
* @example
|
|
779
|
+
* const defense = getExpectedDefense('coreFormation', 'Early');
|
|
780
|
+
*/
|
|
222
781
|
getExpectedDefense: (realm: Realm, progress: RealmProgress) => number;
|
|
782
|
+
/**
|
|
783
|
+
* Get expected barrier for a realm/progress.
|
|
784
|
+
* @param realm - Cultivation realm
|
|
785
|
+
* @param progress - Progress within realm
|
|
786
|
+
* @returns Expected barrier value
|
|
787
|
+
* @example
|
|
788
|
+
* const barrier = getExpectedBarrier('coreFormation', 'Early');
|
|
789
|
+
*/
|
|
223
790
|
getExpectedBarrier: (realm: Realm, progress: RealmProgress) => number;
|
|
791
|
+
/**
|
|
792
|
+
* Get expected toxicity resistance for a realm/progress.
|
|
793
|
+
* @param realm - Cultivation realm
|
|
794
|
+
* @param progress - Progress within realm
|
|
795
|
+
* @returns Expected toxicity value
|
|
796
|
+
* @example
|
|
797
|
+
* const toxicity = getExpectedToxicity('coreFormation', 'Middle');
|
|
798
|
+
*/
|
|
224
799
|
getExpectedToxicity: (realm: Realm, progress: RealmProgress) => number;
|
|
800
|
+
/**
|
|
801
|
+
* Get expected qi pool for crafting.
|
|
802
|
+
* @param realm - Cultivation realm
|
|
803
|
+
* @param progress - Progress within realm
|
|
804
|
+
* @returns Expected pool value
|
|
805
|
+
* @example
|
|
806
|
+
* const pool = getExpectedPool('coreFormation', 'Late');
|
|
807
|
+
*/
|
|
225
808
|
getExpectedPool: (realm: Realm, progress: RealmProgress) => number;
|
|
809
|
+
/**
|
|
810
|
+
* Get expected crafting intensity.
|
|
811
|
+
* @param realm - Cultivation realm
|
|
812
|
+
* @param progress - Progress within realm
|
|
813
|
+
* @returns Expected intensity value
|
|
814
|
+
* @example
|
|
815
|
+
* const intensity = getExpectedIntensity('coreFormation', 'Late');
|
|
816
|
+
*/
|
|
226
817
|
getExpectedIntensity: (realm: Realm, progress: RealmProgress) => number;
|
|
818
|
+
/**
|
|
819
|
+
* Get expected crafting control.
|
|
820
|
+
* @param realm - Cultivation realm
|
|
821
|
+
* @param progress - Progress within realm
|
|
822
|
+
* @returns Expected control value
|
|
823
|
+
* @example
|
|
824
|
+
* const control = getExpectedControl('coreFormation', 'Early');
|
|
825
|
+
*/
|
|
227
826
|
getExpectedControl: (realm: Realm, progress: RealmProgress) => number;
|
|
827
|
+
/**
|
|
828
|
+
* Get expected player combat power. This takes into account masteries, equipement, buffs, and other factors. Normally ~100x higher than getExpectedPower.
|
|
829
|
+
* @param realm - Cultivation realm
|
|
830
|
+
* @param progress - Progress within realm
|
|
831
|
+
* @returns Expected power level
|
|
832
|
+
* @example
|
|
833
|
+
* const playerPower = getExpectedPlayerPower('coreFormation', 'Early');
|
|
834
|
+
*/
|
|
228
835
|
getExpectedPlayerPower: (realm: Realm, progress: RealmProgress) => number;
|
|
836
|
+
/**
|
|
837
|
+
* Get expected artifact power.
|
|
838
|
+
* @param realm - Cultivation realm
|
|
839
|
+
* @param progress - Progress within realm
|
|
840
|
+
* @returns Expected artifact power
|
|
841
|
+
* @example
|
|
842
|
+
* const artifactPower = getExpectedArtefactPower('coreFormation', 'Middle');
|
|
843
|
+
*/
|
|
229
844
|
getExpectedArtefactPower: (realm: Realm, progress: RealmProgress) => number;
|
|
845
|
+
/**
|
|
846
|
+
* Calculate charisma for breakthrough rewards.
|
|
847
|
+
* @param realm - Target realm
|
|
848
|
+
* @param mult - Multiplier (typically 1.0-3.0)
|
|
849
|
+
* @returns Charisma value
|
|
850
|
+
* @example
|
|
851
|
+
* const charisma = getBreakthroughCharisma('coreFormation', 1.5);
|
|
852
|
+
*/
|
|
230
853
|
getBreakthroughCharisma: (realm: Realm, mult: number) => number;
|
|
854
|
+
/**
|
|
855
|
+
* Calculate clothing defense value.
|
|
856
|
+
* @param realm - Required realm
|
|
857
|
+
* @param scale - Scale factor (0.5-2.0 typical)
|
|
858
|
+
* @returns Defense value
|
|
859
|
+
* @example
|
|
860
|
+
* const defense = getClothingDefense('coreFormation', 1.2);
|
|
861
|
+
*/
|
|
231
862
|
getClothingDefense: (realm: Realm, scale: number) => number;
|
|
863
|
+
/**
|
|
864
|
+
* Calculate clothing charisma value.
|
|
865
|
+
* @param realm - Required realm
|
|
866
|
+
* @param mult - Multiplier (1.0-3.0 typical)
|
|
867
|
+
* @returns Charisma value
|
|
868
|
+
* @example
|
|
869
|
+
* const charisma = getClothingCharisma('coreFormation', 2.0);
|
|
870
|
+
*/
|
|
232
871
|
getClothingCharisma: (realm: Realm, mult: number) => number;
|
|
872
|
+
/**
|
|
873
|
+
* Get max qi the player can hold in a realm.
|
|
874
|
+
* @param realm - Target realm
|
|
875
|
+
* @param realmProgress - Progress level
|
|
876
|
+
* @returns Qi amount
|
|
877
|
+
* @example
|
|
878
|
+
* const qi = getRealmQi('coreFormation', 'Late');
|
|
879
|
+
*/
|
|
233
880
|
getRealmQi: (realm: Realm, realmProgress: RealmProgress) => number;
|
|
881
|
+
/**
|
|
882
|
+
* Get qi cost for breakthrough.
|
|
883
|
+
* @param realm - Current realm
|
|
884
|
+
* @param realmProgress - Current progress
|
|
885
|
+
* @returns Qi cost
|
|
886
|
+
* @example
|
|
887
|
+
* const qiCost = getBreakthroughQi('coreFormation', 'Late');
|
|
888
|
+
*/
|
|
234
889
|
getBreakthroughQi: (realm: Realm, realmProgress: RealmProgress) => number;
|
|
890
|
+
/**
|
|
891
|
+
* Scale a numeric reward amount to a value appropriate for the player's realm and progress.
|
|
892
|
+
* @param base - Base reward amount
|
|
893
|
+
* @param realm - Player realm
|
|
894
|
+
* @param progress - Realm progress
|
|
895
|
+
* @returns Scaled reward
|
|
896
|
+
* @example
|
|
897
|
+
* const reward = getNumericReward(100, 'coreFormation', 'Middle');
|
|
898
|
+
*/
|
|
235
899
|
getNumericReward: (base: number, realm: Realm, progress: RealmProgress) => number;
|
|
900
|
+
/**
|
|
901
|
+
* Create a flag reference string.
|
|
902
|
+
* @param flag - Flag name
|
|
903
|
+
* @returns Flag reference for conditions
|
|
904
|
+
* @example
|
|
905
|
+
* const flagRef = flag('quest complete'); // Returns 'quest_complete'
|
|
906
|
+
*/
|
|
236
907
|
flag: (flag: string) => string;
|
|
908
|
+
/**
|
|
909
|
+
* Calculate crafting equipment stats.
|
|
910
|
+
* @param realm - Equipment realm
|
|
911
|
+
* @param realmProgress - Progress level
|
|
912
|
+
* @param factors - Stat multipliers for pool/control/intensity
|
|
913
|
+
* @param type - Equipment type ('cauldron' or 'flame')
|
|
914
|
+
* @returns Crafting statistics
|
|
915
|
+
* @example
|
|
916
|
+
* getCraftingEquipmentStats('coreFormation', 'Middle', { pool: 1.2, control: 1.0, intensity: 0.8 }, 'cauldron');
|
|
917
|
+
*/
|
|
237
918
|
getCraftingEquipmentStats: (realm: Realm, realmProgress: RealmProgress, factors: {
|
|
238
919
|
pool: number;
|
|
239
920
|
control: number;
|
|
@@ -241,17 +922,123 @@ export interface ModAPI {
|
|
|
241
922
|
}, type: 'cauldron' | 'flame') => Partial<{
|
|
242
923
|
[key in CraftingStatistic]: number;
|
|
243
924
|
}>;
|
|
925
|
+
/**
|
|
926
|
+
* Evaluate an expression with game flags.
|
|
927
|
+
* @param exp - Expression string
|
|
928
|
+
* @param flags - Current flag values
|
|
929
|
+
* @returns Evaluated result (floored to integer)
|
|
930
|
+
* @example
|
|
931
|
+
* evalExp('10 * quest_stage + 50', { quest_stage: 3 }); // Returns 80
|
|
932
|
+
*/
|
|
244
933
|
evalExp: (exp: string, flags: Record<string, number>) => number;
|
|
934
|
+
/**
|
|
935
|
+
* Evaluate expression without flooring.
|
|
936
|
+
* @param exp - Expression string
|
|
937
|
+
* @param flags - Current flag values
|
|
938
|
+
* @returns Evaluated result (decimal allowed)
|
|
939
|
+
* @example
|
|
940
|
+
* evalExpNoFloor('charisma * 1.5', { charisma: 10 }); // Returns 15.0
|
|
941
|
+
*/
|
|
245
942
|
evalExpNoFloor: (exp: string, flags: Record<string, number>) => number;
|
|
943
|
+
/**
|
|
944
|
+
* Get pill effectiveness multiplier for realm.
|
|
945
|
+
* @param realm - Player realm
|
|
946
|
+
* @returns Multiplier value
|
|
947
|
+
* @example
|
|
948
|
+
* const mult = getPillRealmMultiplier('coreFormation');
|
|
949
|
+
*/
|
|
950
|
+
getPillRealmMultiplier: (realm: Realm) => number;
|
|
246
951
|
};
|
|
247
952
|
hooks: {
|
|
953
|
+
/**
|
|
954
|
+
* Hook into enemy combat entity creation to modify stats.
|
|
955
|
+
* @param interceptor - Function to modify combat entity
|
|
956
|
+
* @example
|
|
957
|
+
* onCreateEnemyCombatEntity((enemy, combatEntity, flags) => {
|
|
958
|
+
* if (flags.hard_mode) {
|
|
959
|
+
* combatEntity.stats.hp *= 1.5;
|
|
960
|
+
* combatEntity.stats.power *= 1.2;
|
|
961
|
+
* }
|
|
962
|
+
* return combatEntity;
|
|
963
|
+
* });
|
|
964
|
+
*/
|
|
248
965
|
onCreateEnemyCombatEntity: (interceptor: (enemy: EnemyEntity, combatEntity: CombatEntity, gameFlags: Record<string, number>) => CombatEntity) => void;
|
|
966
|
+
/**
|
|
967
|
+
* Hook to modify recipe difficulty calculations.
|
|
968
|
+
* @param interceptor - Function to adjust recipe stats
|
|
969
|
+
* @example
|
|
970
|
+
* onDeriveRecipeDifficulty((recipe, stats, flags) => {
|
|
971
|
+
* if (recipe.basicItem.kind === 'pill' && flags.alchemy_mastery) {
|
|
972
|
+
* stats.difficulty *= 0.8;
|
|
973
|
+
* }
|
|
974
|
+
* return stats;
|
|
975
|
+
* });
|
|
976
|
+
*/
|
|
249
977
|
onDeriveRecipeDifficulty: (interceptor: (recipe: RecipeItem, recipeStats: CraftingRecipeStats, gameFlags: Record<string, number>) => CraftingRecipeStats) => void;
|
|
978
|
+
/**
|
|
979
|
+
* Hook to add events after combat completion.
|
|
980
|
+
* @param interceptor - Function returning additional event steps
|
|
981
|
+
* @example
|
|
982
|
+
* onCompleteCombat((step, victory, playerState, flags) => {
|
|
983
|
+
* if (victory && playerState.stats.hp < 10) {
|
|
984
|
+
* return [{ type: 'text', text: 'That was close!' }];
|
|
985
|
+
* }
|
|
986
|
+
* return [];
|
|
987
|
+
* });
|
|
988
|
+
*/
|
|
250
989
|
onCompleteCombat: (interceptor: (eventStep: CombatStep | FightCharacterStep, victory: boolean, playerCombatState: CombatEntity, gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
990
|
+
/**
|
|
991
|
+
* Hook to add events after tournament completion.
|
|
992
|
+
* @param interceptor - Function returning additional event steps
|
|
993
|
+
* @example
|
|
994
|
+
* onCompleteTournament((step, result, flags) => {
|
|
995
|
+
* if (result === 'victory') {
|
|
996
|
+
* return [{ type: 'addItem', item: { name: 'champion_medal' }, amount: "1" }];
|
|
997
|
+
* }
|
|
998
|
+
* return [];
|
|
999
|
+
* });
|
|
1000
|
+
*/
|
|
251
1001
|
onCompleteTournament: (interceptor: (eventStep: TournamentStep, tournamentState: 'victory' | 'second' | 'defeat', gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
1002
|
+
/**
|
|
1003
|
+
* Hook to add events after dual cultivation.
|
|
1004
|
+
* @param interceptor - Function returning additional event steps
|
|
1005
|
+
* @example
|
|
1006
|
+
* onCompleteDualCultivation((step, success, flags) => {
|
|
1007
|
+
* if (success && flags.dual_mastery) {
|
|
1008
|
+
* return [{ type: 'buff', buff: harmonyBonus }];
|
|
1009
|
+
* }
|
|
1010
|
+
* return [];
|
|
1011
|
+
* });
|
|
1012
|
+
*/
|
|
252
1013
|
onCompleteDualCultivation: (interceptor: (eventStep: DualCultivationStep, success: boolean, gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
1014
|
+
/**
|
|
1015
|
+
* Hook to add events after crafting completion.
|
|
1016
|
+
* @param interceptor - Function returning additional event steps
|
|
1017
|
+
* @example
|
|
1018
|
+
* onCompleteCrafting((step, item, flags) => {
|
|
1019
|
+
* if (item && item.quality > 5) {
|
|
1020
|
+
* return [{ type: 'text', text: 'A masterpiece!' }];
|
|
1021
|
+
* }
|
|
1022
|
+
* return [];
|
|
1023
|
+
* });
|
|
1024
|
+
*/
|
|
253
1025
|
onCompleteCrafting: (interceptor: (eventStep: CraftingStep, item: CraftingResult | undefined, gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
1026
|
+
/**
|
|
1027
|
+
* Hook to add events after auction completion.
|
|
1028
|
+
* @param interceptor - Function returning additional event steps
|
|
1029
|
+
* @example
|
|
1030
|
+
* onCompleteAuction((step, itemsBought, flags) => {
|
|
1031
|
+
* if (itemsBought.length > 5) {
|
|
1032
|
+
* return [{ type: 'flag', flag: 'big_spender', value: "1", global: true }];
|
|
1033
|
+
* }
|
|
1034
|
+
* return [];
|
|
1035
|
+
* });
|
|
1036
|
+
*/
|
|
254
1037
|
onCompleteAuction: (interceptor: (eventStep: AuctionStep, itemsBought: AuctionItem[], gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
1038
|
+
/**
|
|
1039
|
+
* Hook to add events after stone cutting.
|
|
1040
|
+
* @param interceptor - Function returning additional event steps
|
|
1041
|
+
*/
|
|
255
1042
|
onCompleteStoneCutting: (interceptor: (eventStep: StoneCuttingStep, gameFlags: Record<string, number>) => EventStep[]) => void;
|
|
256
1043
|
};
|
|
257
1044
|
}
|
package/dist/quest.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export interface QuestProgressState {
|
|
|
15
15
|
seenUpTo: number;
|
|
16
16
|
completed: number[];
|
|
17
17
|
killTally: Record<string, number>;
|
|
18
|
+
raidsComplete: number;
|
|
18
19
|
waitMonths?: Record<number, number>;
|
|
19
20
|
}
|
|
20
21
|
export type QuestReward = ItemQuestReward | MoneyQuestReward | FavourQuestReward | ReputationQuestReward | GuildApprovalQuestReward;
|
|
@@ -42,7 +43,7 @@ interface GuildApprovalQuestReward {
|
|
|
42
43
|
amount: number;
|
|
43
44
|
guild: string;
|
|
44
45
|
}
|
|
45
|
-
export type QuestStep = EventQuestStep | ConditionQuestStep | CollectQuestStep | MissionHallQuestStep | FlagValueQuestStep | SpeakToCharacterQuestStep | KillQuestStep | WaitQuestStep;
|
|
46
|
+
export type QuestStep = EventQuestStep | ConditionQuestStep | CollectQuestStep | MissionHallQuestStep | FlagValueQuestStep | SpeakToCharacterQuestStep | KillQuestStep | WaitQuestStep | RaidQuestStep;
|
|
46
47
|
interface QuestStepBase {
|
|
47
48
|
hint: string;
|
|
48
49
|
}
|
|
@@ -88,4 +89,8 @@ interface WaitQuestStep extends QuestStepBase {
|
|
|
88
89
|
kind: 'wait';
|
|
89
90
|
months: number;
|
|
90
91
|
}
|
|
92
|
+
export interface RaidQuestStep extends QuestStepBase {
|
|
93
|
+
kind: 'raid';
|
|
94
|
+
amount: number;
|
|
95
|
+
}
|
|
91
96
|
export {};
|
package/dist/reduxState.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ import { Realm } from './realm';
|
|
|
23
23
|
export interface Viewport {
|
|
24
24
|
x: number;
|
|
25
25
|
y: number;
|
|
26
|
-
|
|
26
|
+
zoom: number;
|
|
27
27
|
}
|
|
28
28
|
export interface PlayerState {
|
|
29
29
|
player: PlayerEntity;
|
|
@@ -81,6 +81,10 @@ export interface CombatState {
|
|
|
81
81
|
customBgm?: string[];
|
|
82
82
|
background: string;
|
|
83
83
|
screenEffect: ScreenEffectType;
|
|
84
|
+
combatVictoryFlag?: {
|
|
85
|
+
flag: string;
|
|
86
|
+
value: number;
|
|
87
|
+
};
|
|
84
88
|
}
|
|
85
89
|
export type CraftingSliceState = ExistingCraftingState;
|
|
86
90
|
export interface ResetFlag {
|
package/dist/stat.d.ts
CHANGED
|
@@ -62,6 +62,7 @@ export interface Scaling {
|
|
|
62
62
|
stat: PhysicalStatistic | SocialStatistic | CombatStatistic | CraftingStatistic | TechniqueElement | undefined;
|
|
63
63
|
scaling?: 'stacks' | 'consumed' | string;
|
|
64
64
|
eqn?: string;
|
|
65
|
+
additiveEqn?: string;
|
|
65
66
|
max?: Scaling;
|
|
66
67
|
divideByStanceLength?: boolean;
|
|
67
68
|
upgradeKey?: string;
|
package/dist/stat.js
CHANGED
|
@@ -149,7 +149,7 @@ export const combatStatToDescription = {
|
|
|
149
149
|
lifesteal: '',
|
|
150
150
|
critchance: 'Your chance to get a critical effect, increasing the power of your techniques.',
|
|
151
151
|
critdam: '',
|
|
152
|
-
artefactpower: "The strength of your artefact's techniques.",
|
|
152
|
+
artefactpower: "The strength of your artefact's techniques and your Formation Parts.",
|
|
153
153
|
fistBoost: '',
|
|
154
154
|
blossomBoost: '',
|
|
155
155
|
weaponBoost: '',
|
package/dist/technique.d.ts
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EnemyEntity, Realm, RealmProgress } from '.';
|
|
2
|
+
export interface PuppetType {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
image: string;
|
|
7
|
+
baseMultiplier: number;
|
|
8
|
+
multiplierGrowth: number;
|
|
9
|
+
createPuppet: (tier: number, realm: Realm, realmProgress: RealmProgress) => EnemyEntity;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "afnm-types",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.16",
|
|
4
4
|
"description": "Type definitions for Ascend From Nine Mountains",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"@mui/icons-material": "^7.3.1",
|
|
20
20
|
"@mui/material": "^7.3.1"
|
|
21
21
|
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"typescript": "^5.7.2"
|
|
24
|
+
},
|
|
22
25
|
"scripts": {
|
|
23
26
|
"build": "tsc --project tsconfig.types.json",
|
|
24
27
|
"prepublishOnly": "npm run build"
|