afnm-types 0.6.56 → 0.6.58
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 +2 -2
- package/dist/auction.d.ts +1 -0
- package/dist/breakthrough.d.ts +19 -1
- package/dist/buff.d.ts +33 -0
- package/dist/cli/extract-translations/extractors.js +12 -0
- package/dist/cli/extract-translations/reporters.js +25 -14
- package/dist/components.d.ts +2 -1
- package/dist/entity.d.ts +2 -0
- package/dist/event.d.ts +28 -1
- package/dist/expedition.d.ts +128 -0
- package/dist/expedition.js +57 -0
- package/dist/fallenStar.d.ts +2 -1
- package/dist/gameVersion.d.ts +1 -1
- package/dist/gameVersion.js +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/item.d.ts +26 -3
- package/dist/itemAction.d.ts +33 -0
- package/dist/itemAction.js +1 -0
- package/dist/life.d.ts +5 -0
- package/dist/location.d.ts +34 -4
- package/dist/location.js +1 -0
- package/dist/manual.d.ts +8 -0
- package/dist/manual.js +1 -0
- package/dist/mineConfig.d.ts +64 -0
- package/dist/mineConfig.js +4 -0
- package/dist/mod.d.ts +413 -5
- package/dist/reduxState.d.ts +64 -3
- package/dist/soulShardDelve.d.ts +33 -0
- package/dist/stat.d.ts +2 -0
- package/dist/stat.js +1 -1
- package/dist/technique.d.ts +4 -0
- package/dist/typeTests.d.ts +9 -0
- package/dist/worldAspect.d.ts +23 -0
- package/dist/worldAspect.js +1 -0
- package/package.json +1 -1
package/dist/GameScreen.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'reforge' | 'pillarGrid' | 'fallenStar' | 'trainingGround' | 'tenThousandFlames' | 'lifeScreen' | 'soulShardDelve' | 'enchantmentShop' | 'challengeBoard';
|
|
2
|
-
export type ScreenType = GameScreen | 'newgame' | 'combat' | 'crafting' | 'dualCultivation' | 'event' | 'auction' | 'mysticalRegion' | 'tournament' | 'house' | 'guild' | 'stoneCutting' | 'fallenStar' | 'soulShardDelve';
|
|
1
|
+
export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'reforge' | 'expedition' | 'pillarGrid' | 'fallenStar' | 'trainingGround' | 'tenThousandFlames' | 'lifeScreen' | 'soulShardDelve' | 'enchantmentShop' | 'challengeBoard';
|
|
2
|
+
export type ScreenType = GameScreen | 'newgame' | 'combat' | 'crafting' | 'dualCultivation' | 'event' | 'auction' | 'mysticalRegion' | 'tournament' | 'house' | 'guild' | 'stoneCutting' | 'fallenStar' | 'soulShardDelve' | 'expedition';
|
package/dist/auction.d.ts
CHANGED
package/dist/breakthrough.d.ts
CHANGED
|
@@ -23,12 +23,30 @@ export interface StoredFigment {
|
|
|
23
23
|
stances: StoredStance[];
|
|
24
24
|
currentStyle?: StoredStyle;
|
|
25
25
|
storedStyles?: StoredStyle[];
|
|
26
|
+
assignedTiers?: Record<string, number>;
|
|
27
|
+
}
|
|
28
|
+
/** An active firmament incursion targeting the player's inner world */
|
|
29
|
+
export interface ActiveIncursion {
|
|
30
|
+
id: string;
|
|
31
|
+
spawnedYear: number;
|
|
32
|
+
spawnedMonth: number;
|
|
33
|
+
}
|
|
34
|
+
/** Generated but uncollected essence accumulating in the inner world */
|
|
35
|
+
export interface PendingEssence {
|
|
36
|
+
essenceItemName: string;
|
|
37
|
+
count: number;
|
|
38
|
+
progress: number;
|
|
26
39
|
}
|
|
27
40
|
/** State for the Life Flourishing breakthrough system */
|
|
28
41
|
export interface LifeFlourishingState {
|
|
29
42
|
unlockedSpecies: string[];
|
|
30
43
|
storedFigments: StoredFigment[];
|
|
31
|
-
|
|
44
|
+
evokedFigmentId?: string;
|
|
45
|
+
worldAspectId?: string;
|
|
46
|
+
firmamentProgress?: number;
|
|
47
|
+
activeIncursions?: ActiveIncursion[];
|
|
48
|
+
pendingEssences?: PendingEssence[];
|
|
49
|
+
essenceTiersUnlocked?: Record<string, number>;
|
|
32
50
|
}
|
|
33
51
|
export interface BreakthroughState {
|
|
34
52
|
mundane?: {
|
package/dist/buff.d.ts
CHANGED
|
@@ -57,6 +57,20 @@ interface InventoryItemTechniqueCondition extends BaseTechniqueCondition {
|
|
|
57
57
|
count: number;
|
|
58
58
|
mode: 'more' | 'less' | 'equal';
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Configures how a buff lives outside combat. Buffs without a `persistence`
|
|
62
|
+
* field are combat or event scoped only.
|
|
63
|
+
*/
|
|
64
|
+
export interface BuffPersistence {
|
|
65
|
+
/**
|
|
66
|
+
* When combat ends, the surviving stack count of this buff on the player is
|
|
67
|
+
* written back into `player.monthBuffs`. Existing entries are replaced, not
|
|
68
|
+
* additively merged. Stacks of zero or below remove the buff.
|
|
69
|
+
*/
|
|
70
|
+
persistAfterCombat?: boolean;
|
|
71
|
+
/** Stacks of this buff lost at the end of every month. */
|
|
72
|
+
decayPerMonth?: number;
|
|
73
|
+
}
|
|
60
74
|
export interface Buff {
|
|
61
75
|
name: string;
|
|
62
76
|
displayName?: Translatable;
|
|
@@ -108,6 +122,7 @@ export interface Buff {
|
|
|
108
122
|
/** Block specific triggers from executing. Used to prevent effects like celestial rotation. */
|
|
109
123
|
blockTriggerEffects?: {
|
|
110
124
|
trigger: string;
|
|
125
|
+
condition?: TechniqueCondition;
|
|
111
126
|
effects: BuffEffect[];
|
|
112
127
|
}[];
|
|
113
128
|
damageInterceptorEffects?: {
|
|
@@ -122,6 +137,7 @@ export interface Buff {
|
|
|
122
137
|
amplifier: {
|
|
123
138
|
kind: 'multiply';
|
|
124
139
|
value: number;
|
|
140
|
+
cantUpgrade?: boolean;
|
|
125
141
|
};
|
|
126
142
|
effects?: BuffEffect[];
|
|
127
143
|
appliesTo: ('damage' | 'barrier' | 'heal' | 'tempHealth')[];
|
|
@@ -134,6 +150,7 @@ export interface Buff {
|
|
|
134
150
|
modifier: {
|
|
135
151
|
kind: 'add' | 'multiply';
|
|
136
152
|
value: number;
|
|
153
|
+
cantUpgrade?: boolean;
|
|
137
154
|
};
|
|
138
155
|
effects?: BuffEffect[];
|
|
139
156
|
}[];
|
|
@@ -144,6 +161,12 @@ export interface Buff {
|
|
|
144
161
|
stacks: number;
|
|
145
162
|
stacksAreDays?: boolean;
|
|
146
163
|
stacksAreMonths?: boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Marks the buff as carrying state on the player between events. When set,
|
|
166
|
+
* the buff opts out of the default daily monthBuffs decay (which treats
|
|
167
|
+
* stacks as days remaining) and follows the rules in this object instead.
|
|
168
|
+
*/
|
|
169
|
+
persistence?: BuffPersistence;
|
|
147
170
|
buffType?: string;
|
|
148
171
|
buffTypeTooltip?: string;
|
|
149
172
|
endurePercent?: number;
|
|
@@ -155,6 +178,11 @@ export interface Buff {
|
|
|
155
178
|
guardianIntercept?: {
|
|
156
179
|
percent: Scaling;
|
|
157
180
|
maxHp: Scaling;
|
|
181
|
+
/** How re-application of the guardian buff combines with existing guardian HP.
|
|
182
|
+
* 'refresh' (default): maxHp = max(old, new); hp = maxHp (fully heal).
|
|
183
|
+
* 'extend': hp = oldHp + newMaxHp; maxHp = max(oldMaxHp, hp). Adds onto current and extends the cap. */
|
|
184
|
+
refreshMode?: 'refresh' | 'extend';
|
|
185
|
+
canUpgrade?: boolean;
|
|
158
186
|
};
|
|
159
187
|
/** Runtime guardian HP — set automatically from guardianIntercept.maxHp at buff creation */
|
|
160
188
|
guardianHp?: number;
|
|
@@ -328,6 +356,7 @@ interface BaseBuff {
|
|
|
328
356
|
[key in CombatStatistic]: Scaling;
|
|
329
357
|
}>;
|
|
330
358
|
hidden?: boolean;
|
|
359
|
+
cantUpgrade?: boolean;
|
|
331
360
|
}
|
|
332
361
|
interface DamageEffect extends BaseBuff {
|
|
333
362
|
kind: 'damage';
|
|
@@ -372,6 +401,7 @@ interface ConsumeBuffSelfEffect extends BaseBuff {
|
|
|
372
401
|
buff: Buff | string;
|
|
373
402
|
silent?: boolean;
|
|
374
403
|
hideBuff?: boolean;
|
|
404
|
+
targeting?: EffectTargeting;
|
|
375
405
|
}
|
|
376
406
|
interface CreateBuffTargetEffect extends BaseBuff {
|
|
377
407
|
kind: 'buffTarget';
|
|
@@ -418,6 +448,9 @@ interface ModifyBuffGroupEffect extends BaseBuff {
|
|
|
418
448
|
onTarget?: boolean;
|
|
419
449
|
group: string;
|
|
420
450
|
amount: Scaling;
|
|
451
|
+
/** Defaults to 'all'. 'highest'/'lowest' restrict the effect to a single matching buff
|
|
452
|
+
* chosen by stack count. */
|
|
453
|
+
mode?: 'all' | 'highest' | 'lowest';
|
|
421
454
|
}
|
|
422
455
|
interface SetStateEffect extends BaseBuff {
|
|
423
456
|
kind: 'setState';
|
|
@@ -537,6 +537,18 @@ function extractFromFile(filePath) {
|
|
|
537
537
|
});
|
|
538
538
|
}
|
|
539
539
|
}
|
|
540
|
+
else if (typescript_1.default.isBinaryExpression(arg) && arg.operatorToken.kind === typescript_1.default.SyntaxKind.PlusToken) {
|
|
541
|
+
// String concatenation with + is supported - try to resolve it
|
|
542
|
+
const resolved = (0, template_processor_js_1.tryResolveBinaryExpression)(arg, sourceFile, filePath);
|
|
543
|
+
if (resolved !== null && resolved.trim().length > 0) {
|
|
544
|
+
results.push({
|
|
545
|
+
text: resolved,
|
|
546
|
+
file: filePath,
|
|
547
|
+
line: (0, template_processor_js_1.getLineNumber)(sourceFile, node.getStart()),
|
|
548
|
+
context: `${funcName}-call`,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}
|
|
540
552
|
else if (typescript_1.default.isTemplateExpression(arg)) {
|
|
541
553
|
const templateText = arg.getText(sourceFile);
|
|
542
554
|
const processed = (0, template_processor_js_1.processTemplateExpression)(arg, sourceFile, filePath);
|
|
@@ -1037,20 +1037,31 @@ function buildTranslationLookup(langData) {
|
|
|
1037
1037
|
function loadExistingLanguageFiles() {
|
|
1038
1038
|
const languageFiles = new Map();
|
|
1039
1039
|
const translationsDir = path_1.default.join('src', 'translations');
|
|
1040
|
-
//
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1040
|
+
// Discover languages by scanning the translations directory rather than maintaining
|
|
1041
|
+
// a hardcoded list (which silently dropped ja/ko/vi/fi/pl/pt-BR/th/zh-CN/zh-TW).
|
|
1042
|
+
// Filenames are <lang>.json; non-language files in this dir are explicitly excluded.
|
|
1043
|
+
const NON_LANGUAGE_FILES = new Set([
|
|
1044
|
+
'template.json',
|
|
1045
|
+
'debug.json',
|
|
1046
|
+
'custom-strings.json',
|
|
1047
|
+
'technique-tooltip-templates.json',
|
|
1048
|
+
]);
|
|
1049
|
+
const entries = fs_1.default.readdirSync(translationsDir);
|
|
1050
|
+
for (const file of entries) {
|
|
1051
|
+
if (!file.endsWith('.json'))
|
|
1052
|
+
continue;
|
|
1053
|
+
if (NON_LANGUAGE_FILES.has(file))
|
|
1054
|
+
continue;
|
|
1055
|
+
const lang = file.replace(/\.json$/, '');
|
|
1056
|
+
const langPath = path_1.default.join(translationsDir, file);
|
|
1057
|
+
try {
|
|
1058
|
+
const data = JSON.parse(fs_1.default.readFileSync(langPath, 'utf-8'));
|
|
1059
|
+
languageFiles.set(lang, data);
|
|
1060
|
+
console.log(` Loaded existing translations from ${lang}.json`);
|
|
1061
|
+
}
|
|
1062
|
+
catch (error) {
|
|
1063
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1064
|
+
console.warn(` Warning: Failed to parse ${lang}.json: ${message}`);
|
|
1054
1065
|
}
|
|
1055
1066
|
}
|
|
1056
1067
|
return languageFiles;
|
package/dist/components.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ReactNode, PropsWithChildren, ReactElement } from 'react';
|
|
|
3
3
|
import type { SoundEffectName } from './audio';
|
|
4
4
|
import type { ScreenEffectType } from './ScreenEffectType';
|
|
5
5
|
import type React from 'react';
|
|
6
|
-
export type BorderType = 'wood' | 'mystic';
|
|
6
|
+
export type BorderType = 'wood' | 'mystic' | 'expedition' | 'expeditionSmall';
|
|
7
7
|
interface GameDialogProps {
|
|
8
8
|
id: string;
|
|
9
9
|
onClose?: () => void;
|
|
@@ -33,6 +33,7 @@ export type GameIconButtonFC = React.ForwardRefRenderFunction<HTMLButtonElement,
|
|
|
33
33
|
hoverSfx?: SoundEffectName;
|
|
34
34
|
clickSfx?: SoundEffectName;
|
|
35
35
|
tooltip?: ReactNode;
|
|
36
|
+
fancyBorder?: boolean;
|
|
36
37
|
}>;
|
|
37
38
|
export type GameCloseButtonFC = React.ForwardRefRenderFunction<HTMLButtonElement, Omit<IconButtonProps & {
|
|
38
39
|
hoverSfx?: SoundEffectName;
|
package/dist/entity.d.ts
CHANGED
|
@@ -333,6 +333,8 @@ export interface CombatEntity {
|
|
|
333
333
|
partyId?: string;
|
|
334
334
|
/** When true, critchance is forced to 0 for this entity (used in training ground) */
|
|
335
335
|
noCrit?: boolean;
|
|
336
|
+
/** Maximum qi droplets for this entity (set during combat entity creation) */
|
|
337
|
+
maxqiDroplets?: number;
|
|
336
338
|
/** Cached hash for getVariablesFromEntity. Cleared whenever stats or buffs mutate. */
|
|
337
339
|
_cachedHash?: string;
|
|
338
340
|
}
|
package/dist/event.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export interface BaseEventStep {
|
|
|
39
39
|
kind: EventStepKind;
|
|
40
40
|
condition?: string;
|
|
41
41
|
}
|
|
42
|
-
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 | CraftingTeamUpStep | AddFollowerStep | BreakPartyStep | ClearTeamUpStep | UnlockAltarStep | DropItemStep | SetAltarCooldownStep | CompressCoreStep | ChangeScreenStep | UnlockTechniqueStep | UnlockAuctionTechniqueStep | AddRecipeStep | AddManualStep | LearnNpcStancesStep | ReplaceItemStep | DualCultivationStep | ChangeBGMStep | ClearChangeBGMStep | AddGuildApprovalStep | AdvanceGuildRankStep | OverridePlayerRealmStep | SetContentRealmOverrideStep | SetAidBreakthroughCooldownStep | StoneCuttingStep | GiveItemStep | ChangePhysicalStatStep | ChangeSocialStatStep | SelectRelationshipPathStep | SetTradeCooldownStep | StatusStep | ClearStatusStep;
|
|
42
|
+
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 | CraftingTeamUpStep | AddFollowerStep | BreakPartyStep | ClearTeamUpStep | UnlockAltarStep | DropItemStep | SetAltarCooldownStep | CompressCoreStep | ChangeScreenStep | UnlockTechniqueStep | UnlockAuctionTechniqueStep | AddRecipeStep | AddManualStep | LearnNpcStancesStep | ReplaceItemStep | DualCultivationStep | ChangeBGMStep | ClearChangeBGMStep | AddGuildApprovalStep | AdvanceGuildRankStep | OverridePlayerRealmStep | SetContentRealmOverrideStep | SetAidBreakthroughCooldownStep | StoneCuttingStep | GiveItemStep | ChangePhysicalStatStep | ChangeSocialStatStep | SelectRelationshipPathStep | SetTradeCooldownStep | StatusStep | ClearStatusStep | IncreaseInstabilityStep | EndExpeditionStep | AddItemsToFoundStep | AddItemsToExtractedStep;
|
|
43
43
|
export interface TextStep extends BaseEventStep {
|
|
44
44
|
kind: 'text';
|
|
45
45
|
text: Translatable;
|
|
@@ -174,6 +174,7 @@ export interface CreateBuffStep extends BaseEventStep {
|
|
|
174
174
|
buff: Buff;
|
|
175
175
|
amount: string;
|
|
176
176
|
persistBeyondEvent?: boolean;
|
|
177
|
+
debuff?: boolean;
|
|
177
178
|
}
|
|
178
179
|
export interface ConsumeBuffStep extends BaseEventStep {
|
|
179
180
|
kind: 'consumeBuff';
|
|
@@ -464,6 +465,10 @@ export interface SetAidBreakthroughCooldownStep extends BaseEventStep {
|
|
|
464
465
|
export interface StoneCuttingStep extends BaseEventStep {
|
|
465
466
|
kind: 'stoneCutting';
|
|
466
467
|
realm: Realm;
|
|
468
|
+
/** Percentage discount to apply to stone cutting costs (0-100), evaluated as expression */
|
|
469
|
+
discountPercentage?: string;
|
|
470
|
+
/** Number of stones the player can cut for free, evaluated as expression */
|
|
471
|
+
freeCount?: string;
|
|
467
472
|
}
|
|
468
473
|
export interface GiveItemStep extends BaseEventStep {
|
|
469
474
|
kind: 'giveItem';
|
|
@@ -509,4 +514,26 @@ export interface EventStatusThreshold {
|
|
|
509
514
|
colour: string;
|
|
510
515
|
label?: Translatable;
|
|
511
516
|
}
|
|
517
|
+
export interface IncreaseInstabilityStep {
|
|
518
|
+
kind: 'instability';
|
|
519
|
+
condition?: string;
|
|
520
|
+
}
|
|
521
|
+
export interface EndExpeditionStep {
|
|
522
|
+
kind: 'endExpedition';
|
|
523
|
+
failed: boolean;
|
|
524
|
+
condition?: string;
|
|
525
|
+
}
|
|
526
|
+
export interface AddItemsToFoundStep {
|
|
527
|
+
kind: 'addToFound';
|
|
528
|
+
items: {
|
|
529
|
+
item: ItemDesc;
|
|
530
|
+
count: number;
|
|
531
|
+
}[];
|
|
532
|
+
condition?: string;
|
|
533
|
+
}
|
|
534
|
+
export interface AddItemsToExtractedStep {
|
|
535
|
+
kind: 'addToExtracted';
|
|
536
|
+
extractSlots: number;
|
|
537
|
+
condition?: string;
|
|
538
|
+
}
|
|
512
539
|
export {};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Buff } from './buff';
|
|
2
|
+
import { EnemyEntity } from './entity';
|
|
3
|
+
import { EventStep } from './event';
|
|
4
|
+
import { ItemDesc } from './item';
|
|
5
|
+
import { Rarity } from './rarity';
|
|
6
|
+
import { Translatable } from './translatable';
|
|
7
|
+
export declare const expeditionBaseCost = 87500;
|
|
8
|
+
export declare const expeditionDirections: readonly ["left", "right", "top", "bottom"];
|
|
9
|
+
export type ExpeditionDirection = (typeof expeditionDirections)[number];
|
|
10
|
+
export declare const expeditionDirectionOpposite: {
|
|
11
|
+
[key in ExpeditionDirection]: ExpeditionDirection;
|
|
12
|
+
};
|
|
13
|
+
export declare const expeditionDirectionPoint: {
|
|
14
|
+
[key in ExpeditionDirection]: ExpeditionPoint;
|
|
15
|
+
};
|
|
16
|
+
export interface ExpeditionPoint {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
}
|
|
20
|
+
export type RoleRarity = Exclude<Rarity, 'transcendent'>;
|
|
21
|
+
export declare const RoleRarityWeight: Record<RoleRarity, number>;
|
|
22
|
+
export type Roles = 'fighter' | 'healer' | 'surveyor' | 'archaeologist' | 'stabilizer' | 'qiflow';
|
|
23
|
+
export declare const rolesToName: Record<Roles, string>;
|
|
24
|
+
export declare const roleDescription: Record<Roles, string>;
|
|
25
|
+
export declare const RoleWeight: Record<Roles, number>;
|
|
26
|
+
export type MemberRole = {
|
|
27
|
+
role: Roles;
|
|
28
|
+
rarity: RoleRarity;
|
|
29
|
+
};
|
|
30
|
+
export type TeamMember = {
|
|
31
|
+
name: Translatable;
|
|
32
|
+
buff?: Buff;
|
|
33
|
+
role: MemberRole;
|
|
34
|
+
};
|
|
35
|
+
export type ExpeditionTeam = TeamMember[];
|
|
36
|
+
export interface TileMonsters {
|
|
37
|
+
combat: EnemyEntity[];
|
|
38
|
+
boss: EnemyEntity[];
|
|
39
|
+
challenge: EnemyEntity[];
|
|
40
|
+
}
|
|
41
|
+
export type ExpeditionTileTypes = 'entrance' | 'exit' | 'extract' | 'combat' | 'rest' | 'treasure' | 'boss' | 'buff' | 'debuff' | 'challenge' | 'puzzle' | 'boonBane';
|
|
42
|
+
export interface ExpeditionTilePoint extends ExpeditionPoint {
|
|
43
|
+
name: string;
|
|
44
|
+
}
|
|
45
|
+
export interface ExpeditionTile extends ExpeditionPoint {
|
|
46
|
+
expeditionTiles: ExpeditionTilePoint[];
|
|
47
|
+
edges: {
|
|
48
|
+
[key in ExpeditionDirection]: ExpeditionPoint[];
|
|
49
|
+
};
|
|
50
|
+
tileConnections: {
|
|
51
|
+
src: string;
|
|
52
|
+
dst: string;
|
|
53
|
+
}[];
|
|
54
|
+
edgeConnections: {
|
|
55
|
+
tile: string;
|
|
56
|
+
edge: string;
|
|
57
|
+
direction: ExpeditionDirection;
|
|
58
|
+
}[];
|
|
59
|
+
}
|
|
60
|
+
export type ExpeditionTiles = EntranceTile | ExitTile | ExtractTile | CombatTile | RestTile | TreasureTile | BossTile | BuffTile | DebuffTile | ChallengeTile | PuzzleTile | BoonBaneTile;
|
|
61
|
+
interface BaseTile {
|
|
62
|
+
name: string;
|
|
63
|
+
icon: string;
|
|
64
|
+
bg: string;
|
|
65
|
+
description: Translatable;
|
|
66
|
+
rarity: Rarity;
|
|
67
|
+
intro: EventStep[];
|
|
68
|
+
}
|
|
69
|
+
export interface EntranceTile extends BaseTile {
|
|
70
|
+
kind: 'entrance';
|
|
71
|
+
}
|
|
72
|
+
export interface ExitTile extends BaseTile {
|
|
73
|
+
kind: 'exit';
|
|
74
|
+
}
|
|
75
|
+
export interface ExtractTile extends BaseTile {
|
|
76
|
+
kind: 'extract';
|
|
77
|
+
extractCount: number;
|
|
78
|
+
}
|
|
79
|
+
export interface CombatTile extends BaseTile {
|
|
80
|
+
kind: 'combat';
|
|
81
|
+
modifier?: number;
|
|
82
|
+
enemyCount?: number;
|
|
83
|
+
items?: {
|
|
84
|
+
item: ItemDesc;
|
|
85
|
+
count: number;
|
|
86
|
+
}[];
|
|
87
|
+
}
|
|
88
|
+
export interface RestTile extends BaseTile {
|
|
89
|
+
kind: 'rest';
|
|
90
|
+
baseRestore: number;
|
|
91
|
+
}
|
|
92
|
+
export interface TreasureTile extends BaseTile {
|
|
93
|
+
kind: 'treasure';
|
|
94
|
+
}
|
|
95
|
+
export interface BossTile extends BaseTile {
|
|
96
|
+
kind: 'boss';
|
|
97
|
+
modifier?: number;
|
|
98
|
+
items?: {
|
|
99
|
+
item: ItemDesc;
|
|
100
|
+
count: number;
|
|
101
|
+
}[];
|
|
102
|
+
}
|
|
103
|
+
export interface BuffTile extends BaseTile {
|
|
104
|
+
kind: 'buff';
|
|
105
|
+
}
|
|
106
|
+
export interface DebuffTile extends BaseTile {
|
|
107
|
+
kind: 'debuff';
|
|
108
|
+
}
|
|
109
|
+
export interface ChallengeTile extends BaseTile {
|
|
110
|
+
kind: 'challenge';
|
|
111
|
+
modifier?: number;
|
|
112
|
+
items?: {
|
|
113
|
+
item: ItemDesc;
|
|
114
|
+
count: number;
|
|
115
|
+
}[];
|
|
116
|
+
}
|
|
117
|
+
export interface PuzzleTile extends BaseTile {
|
|
118
|
+
kind: 'puzzle';
|
|
119
|
+
enemies?: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface BoonBaneTile extends BaseTile {
|
|
122
|
+
kind: 'boonBane';
|
|
123
|
+
}
|
|
124
|
+
export interface ItemWCount {
|
|
125
|
+
item: ItemDesc;
|
|
126
|
+
count: number;
|
|
127
|
+
}
|
|
128
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export const expeditionBaseCost = 87500;
|
|
2
|
+
export const expeditionDirections = ['left', 'right', 'top', 'bottom'];
|
|
3
|
+
export const expeditionDirectionOpposite = {
|
|
4
|
+
left: 'right',
|
|
5
|
+
right: 'left',
|
|
6
|
+
top: 'bottom',
|
|
7
|
+
bottom: 'top',
|
|
8
|
+
};
|
|
9
|
+
export const expeditionDirectionPoint = {
|
|
10
|
+
left: {
|
|
11
|
+
x: -1,
|
|
12
|
+
y: 0,
|
|
13
|
+
},
|
|
14
|
+
right: {
|
|
15
|
+
x: 2,
|
|
16
|
+
y: 0,
|
|
17
|
+
},
|
|
18
|
+
top: {
|
|
19
|
+
x: 0,
|
|
20
|
+
y: -1,
|
|
21
|
+
},
|
|
22
|
+
bottom: {
|
|
23
|
+
x: 0,
|
|
24
|
+
y: 2,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export const RoleRarityWeight = {
|
|
28
|
+
mundane: 30,
|
|
29
|
+
qitouched: 30,
|
|
30
|
+
empowered: 25,
|
|
31
|
+
resplendent: 20,
|
|
32
|
+
incandescent: 5,
|
|
33
|
+
};
|
|
34
|
+
export const rolesToName = {
|
|
35
|
+
fighter: 'Fighter',
|
|
36
|
+
healer: 'Healer',
|
|
37
|
+
surveyor: 'Surveyor',
|
|
38
|
+
archaeologist: 'Archeologist',
|
|
39
|
+
stabilizer: 'Stabilizer',
|
|
40
|
+
qiflow: 'Qi Manipulator',
|
|
41
|
+
};
|
|
42
|
+
export const roleDescription = {
|
|
43
|
+
fighter: 'Assists in limiting the prowess of fierce foes',
|
|
44
|
+
healer: 'Aids recuperation while resting',
|
|
45
|
+
surveyor: 'Analyzes signs of ambushes and plots routes avoiding them',
|
|
46
|
+
archaeologist: 'Utilizes expedition records to locate additional treasures',
|
|
47
|
+
stabilizer: 'Trained in placing spatial nodes that slow spatial destabilization',
|
|
48
|
+
qiflow: "Senses minute qi flow changes and manipulates them to the team's advantage",
|
|
49
|
+
};
|
|
50
|
+
export const RoleWeight = {
|
|
51
|
+
healer: 25,
|
|
52
|
+
archaeologist: 25,
|
|
53
|
+
surveyor: 20,
|
|
54
|
+
stabilizer: 15,
|
|
55
|
+
fighter: 10,
|
|
56
|
+
qiflow: 5,
|
|
57
|
+
};
|
package/dist/fallenStar.d.ts
CHANGED
package/dist/gameVersion.d.ts
CHANGED
package/dist/gameVersion.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/item.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import type { Realm, RealmProgress } from './realm';
|
|
|
12
12
|
import type { RecipeDifficulty } from './RecipeDifficulty';
|
|
13
13
|
import type { CombatStatistic, CombatStatsMap, CraftingStatistic, CraftingStatsMap, PhysicalStatistic, Scaling, SocialStatistic } from './stat';
|
|
14
14
|
import type { Technique, TechniqueEffect } from './technique';
|
|
15
|
-
import {
|
|
15
|
+
import { DelveRoomConfig } from './soulShardDelve';
|
|
16
16
|
export declare const itemKinds: readonly ["clothing", "talisman", "artefact", "mount", "cauldron", "flame", "upgrade", "fruit", "elixir", "recipe", "technique", "action", "transport_seal", "enchantment", "pill", "reagent", "concoction", "consumable", "recuperation", "formation", "breakthrough", "pillar_shard", "material", "flare", "mystical_key", "condensation_art", "blueprint", "trophy", "treasure", "token", "life_essence", "device", "manual", "pillar_pattern", "local_map"];
|
|
17
17
|
export type ItemKind = (typeof itemKinds)[number];
|
|
18
18
|
export declare const itemKindToName: {
|
|
@@ -43,6 +43,13 @@ interface ItemBase {
|
|
|
43
43
|
qualityTier?: number;
|
|
44
44
|
hiddenPotential?: number;
|
|
45
45
|
minimumPotential?: number;
|
|
46
|
+
corruption?: ItemCorruption;
|
|
47
|
+
}
|
|
48
|
+
export interface ItemCorruption {
|
|
49
|
+
name: Translatable;
|
|
50
|
+
debuff: Buff;
|
|
51
|
+
threshold: number;
|
|
52
|
+
countPerCombat: number;
|
|
46
53
|
}
|
|
47
54
|
export interface ItemDesc {
|
|
48
55
|
name: string;
|
|
@@ -223,6 +230,14 @@ export interface CombatItem extends ItemBase {
|
|
|
223
230
|
export interface ConsumablePillItem extends BasePillItem {
|
|
224
231
|
pillKind: 'consumable';
|
|
225
232
|
max: number;
|
|
233
|
+
/**
|
|
234
|
+
* Optional shared consumption group. When set, the player can consume at most `groupCap`
|
|
235
|
+
* pills total across every pill that names the same `consumptionGroup`, in addition to
|
|
236
|
+
* each pill's individual `max` limit.
|
|
237
|
+
*/
|
|
238
|
+
consumptionGroup?: string;
|
|
239
|
+
/** Lifetime cap for the entire consumption group. Required when `consumptionGroup` is set. */
|
|
240
|
+
groupCap?: number;
|
|
226
241
|
physicalStats: Partial<Record<PhysicalStatistic, number>>;
|
|
227
242
|
socialStats: Partial<Record<SocialStatistic, number>>;
|
|
228
243
|
rawStats?: Partial<Record<CombatStatistic | CraftingStatistic, Scaling>>;
|
|
@@ -292,6 +307,11 @@ export interface RecipeItem extends ItemBase {
|
|
|
292
307
|
baseItem: Item;
|
|
293
308
|
perfectItem: Item;
|
|
294
309
|
sublimeItem?: Item;
|
|
310
|
+
/** Override the default perfection effect resolved from the perfectItem's
|
|
311
|
+
* ItemKind in recipePerfectionEffect. Use 'quality' on recipes that should
|
|
312
|
+
* reward perfect/sublime crafts with stronger items (quality tier bonus)
|
|
313
|
+
* instead of producing more copies. */
|
|
314
|
+
perfectionEffectOverride?: 'none' | 'quality' | 'stacks';
|
|
295
315
|
displayPerfect?: boolean;
|
|
296
316
|
hideFromCompendium?: boolean;
|
|
297
317
|
realmProgress: RealmProgress;
|
|
@@ -328,6 +348,7 @@ export interface CraftingTechniqueItem extends ItemBase {
|
|
|
328
348
|
export interface TransportSealItem extends ItemBase {
|
|
329
349
|
kind: 'transport_seal';
|
|
330
350
|
destination: string;
|
|
351
|
+
omni?: boolean;
|
|
331
352
|
}
|
|
332
353
|
export interface EnchantmentItem extends ItemBase {
|
|
333
354
|
kind: 'enchantment';
|
|
@@ -454,9 +475,9 @@ export interface PillarShardVariant {
|
|
|
454
475
|
}
|
|
455
476
|
export interface PillarShardItem extends ItemBase {
|
|
456
477
|
kind: 'pillar_shard';
|
|
457
|
-
tooltip
|
|
478
|
+
tooltip?: Translatable;
|
|
458
479
|
maxInstances?: number;
|
|
459
|
-
delveRoomConfig?:
|
|
480
|
+
delveRoomConfig?: DelveRoomConfig;
|
|
460
481
|
variants?: PillarShardVariant[];
|
|
461
482
|
stability?: number;
|
|
462
483
|
portal?: {
|
|
@@ -499,6 +520,8 @@ export interface UncutStonePool {
|
|
|
499
520
|
}
|
|
500
521
|
export interface LifeEssenceItem extends ItemBase {
|
|
501
522
|
kind: 'life_essence';
|
|
523
|
+
/** Signature colour for UI (rings, slot borders, picker tints). Hex string. */
|
|
524
|
+
color: string;
|
|
502
525
|
thresholds: {
|
|
503
526
|
level: number;
|
|
504
527
|
buffs: Buff[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { AppDispatch } from '../store';
|
|
3
|
+
import type { BreakthroughState } from './breakthrough';
|
|
4
|
+
import type { SoundEffectName } from './audio';
|
|
5
|
+
import type { Item } from './item';
|
|
6
|
+
import type { PlayerEntity } from './entity';
|
|
7
|
+
import type { InventoryState } from './reduxState';
|
|
8
|
+
interface OpenItem {
|
|
9
|
+
item: Item;
|
|
10
|
+
data: unknown;
|
|
11
|
+
onComplete: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface ItemActionContext {
|
|
14
|
+
item: Item;
|
|
15
|
+
player: PlayerEntity;
|
|
16
|
+
inventory: InventoryState;
|
|
17
|
+
breakthrough: BreakthroughState;
|
|
18
|
+
flags: Record<string, number | string | boolean>;
|
|
19
|
+
dispatch: AppDispatch;
|
|
20
|
+
setResult: (result: ReactNode) => void;
|
|
21
|
+
setClicked: (clicked: boolean) => void;
|
|
22
|
+
setOpenItem?: (openItem: OpenItem) => void;
|
|
23
|
+
setDoEnchant?: (doEnchant: boolean) => void;
|
|
24
|
+
setDoUpgrade?: (doUpgrade: boolean) => void;
|
|
25
|
+
setDoAppearanceChange?: (doAppearanceChange: boolean) => void;
|
|
26
|
+
playSfx: (sound: SoundEffectName) => void;
|
|
27
|
+
usageRestricted: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ItemActionResult {
|
|
30
|
+
buttons: ReactNode[];
|
|
31
|
+
}
|
|
32
|
+
export type ItemActionHandler = (context: ItemActionContext) => ItemActionResult;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/life.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export interface LifeForm {
|
|
|
14
14
|
role: string;
|
|
15
15
|
species: string;
|
|
16
16
|
image: string;
|
|
17
|
+
unlockCost: {
|
|
18
|
+
essence: string;
|
|
19
|
+
amount: number;
|
|
20
|
+
}[];
|
|
21
|
+
parentSpecies?: string;
|
|
17
22
|
supportImage?: LifeFormAnimationImage;
|
|
18
23
|
defensiveImage?: LifeFormAnimationImage;
|
|
19
24
|
utilityImage?: LifeFormAnimationImage;
|