@kar-mi/spirit-vale-tools-character 0.5.0
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/README.md +28 -0
- package/dist/decoder.d.ts +16 -0
- package/dist/decoder.d.ts.map +1 -0
- package/dist/formulas.d.ts +18 -0
- package/dist/formulas.d.ts.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1290 -0
- package/dist/inspect-roster.d.ts +26 -0
- package/dist/inspect-roster.d.ts.map +1 -0
- package/dist/record-decoder.d.ts +6 -0
- package/dist/record-decoder.d.ts.map +1 -0
- package/dist/stat-names.d.ts +3 -0
- package/dist/stat-names.d.ts.map +1 -0
- package/dist/synthetic-character.test-helper.d.ts +32 -0
- package/dist/synthetic-character.test-helper.d.ts.map +1 -0
- package/dist/tracker.d.ts +67 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @kar-mi/spirit-vale-tools-character
|
|
2
|
+
|
|
3
|
+
Spirit Vale character decoding and stat calculation utilities.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
bun add @kar-mi/spirit-vale-tools-character
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { FishNetCharacterTracker, calculateCharacterStats } from "@kar-mi/spirit-vale-tools-character";
|
|
15
|
+
|
|
16
|
+
const tracker = new FishNetCharacterTracker();
|
|
17
|
+
tracker.subscribe((state) => console.log(state));
|
|
18
|
+
|
|
19
|
+
// packet: CapturedFishNetPacket from @kar-mi/spirit-vale-tools-capture
|
|
20
|
+
tracker.consume(packet);
|
|
21
|
+
|
|
22
|
+
const stats = calculateCharacterStats(42, { STR: 30, VIT: 25, AGI: 20, DEX: 18, INT: 5, LUK: 12 });
|
|
23
|
+
for (const stat of stats) {
|
|
24
|
+
console.log(stat.label, stat.value);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
See the [package guide](https://github.com/kar-mi/spirit-vale-tools/blob/main/docs/packages.md) for registry setup and usage.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { resolveFishNetItem } from "@kar-mi/spirit-vale-tools-items";
|
|
2
|
+
import type { CharacterSnapshot } from "./types.ts";
|
|
3
|
+
export interface DecodedCharacterUpdate {
|
|
4
|
+
updateType: number;
|
|
5
|
+
snapshot: CharacterSnapshot;
|
|
6
|
+
currentWeight?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveCharacterArchetypeId(name: string): number | undefined;
|
|
9
|
+
export declare function decodeCharacterRpcPayload(payload: Buffer, includesUpdateType: boolean, now?: Date): DecodedCharacterUpdate;
|
|
10
|
+
/**
|
|
11
|
+
* Recomputes every derived substat field (name, scaled value, percent flag) from the raw
|
|
12
|
+
* type + roll using the current tables. Stored snapshots persist values baked by whatever
|
|
13
|
+
* build decoded them, so they must never be trusted for display or calculation.
|
|
14
|
+
*/
|
|
15
|
+
export declare function rescaleSubstats(snapshot: CharacterSnapshot, resolveItem?: typeof resolveFishNetItem): CharacterSnapshot;
|
|
16
|
+
//# sourceMappingURL=decoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../src/decoder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,KAAK,EAA8E,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AAalJ,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,OAAa,GAAG,sBAAsB,CAsEhI;AAiLD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,WAAW,GAAE,OAAO,kBAAuC,GAAG,iBAAiB,CAa3I"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { resolveFishNetItem } from "@kar-mi/spirit-vale-tools-items";
|
|
2
|
+
import { resolveFishNetSkill } from "@kar-mi/spirit-vale-tools-skills";
|
|
3
|
+
import type { CharacterArtifact, CharacterAttributes, CharacterEquipment, CharacterHealingTraits, CharacterSkill, CharacterSnapshot, CharacterStatBreakdown, CharacterSubstat, GearStatTotal } from "./types.ts";
|
|
4
|
+
export declare function calculateCharacterStats(level: number, baseAttributes: CharacterAttributes, substats?: readonly CharacterSubstat[], archetypes?: readonly string[]): CharacterStatBreakdown[];
|
|
5
|
+
/** Resolves catalogued item definitions; injectable so tests can supply synthetic data. */
|
|
6
|
+
export type ItemResolver = typeof resolveFishNetItem;
|
|
7
|
+
export type SkillResolver = typeof resolveFishNetSkill;
|
|
8
|
+
export declare function aggregateGearSubstats(equipment: readonly CharacterEquipment[], artifacts: readonly CharacterArtifact[], resolveItem?: ItemResolver): GearStatTotal[];
|
|
9
|
+
/** Combines rolled stats with the catalogued innate effects of items, cards, artifacts, and gems. */
|
|
10
|
+
export declare function materializeGearStats(equipment: readonly CharacterEquipment[], artifacts: readonly CharacterArtifact[], resolveItem?: ItemResolver): CharacterSubstat[];
|
|
11
|
+
/** Converts passive-skill effects into stat inputs at their learned level. */
|
|
12
|
+
export declare function materializeSkillStats(skills: readonly CharacterSkill[], resolveSkill?: SkillResolver): CharacterSubstat[];
|
|
13
|
+
/** Resolves the healing mechanics visible in a local character snapshot. */
|
|
14
|
+
export declare function resolveCharacterHealingTraits(snapshot: CharacterSnapshot, resolveItem?: ItemResolver, resolveSkill?: SkillResolver): CharacterHealingTraits;
|
|
15
|
+
/** Mirrors Formula.GetWeightLimit: base capacity, level growth, then flat stat 101 bonuses. */
|
|
16
|
+
export declare function calculateWeightLimit(snapshot: CharacterSnapshot, resolveItem?: ItemResolver, resolveSkill?: SkillResolver): number;
|
|
17
|
+
export declare function calculateAdvancedGearStats(totals: readonly GearStatTotal[]): CharacterStatBreakdown[];
|
|
18
|
+
//# sourceMappingURL=formulas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formulas.d.ts","sourceRoot":"","sources":["../src/formulas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AASjN,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ,GAAE,SAAS,gBAAgB,EAAO,EAAE,UAAU,GAAE,SAAS,MAAM,EAAO,GAAG,sBAAsB,EAAE,CAIpM;AAED,2FAA2F;AAC3F,MAAM,MAAM,YAAY,GAAG,OAAO,kBAAkB,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,OAAO,mBAAmB,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,iBAAiB,EAAE,EAAE,WAAW,GAAE,YAAiC,GAAG,aAAa,EAAE,CASxL;AAED,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EAAE,SAAS,EAAE,SAAS,iBAAiB,EAAE,EAAE,WAAW,GAAE,YAAiC,GAAG,gBAAgB,EAAE,CAmB1L;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,YAAY,GAAE,aAAmC,GAAG,gBAAgB,EAAE,CAQ9I;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,GAAE,YAAiC,EAC9C,YAAY,GAAE,aAAmC,GAChD,sBAAsB,CASxB;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,GAAE,YAAiC,EAC9C,YAAY,GAAE,aAAmC,GAChD,MAAM,CAMR;AAuBD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,sBAAsB,EAAE,CAarG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { decodeCharacterRpcPayload, rescaleSubstats, resolveCharacterArchetypeId } from "./decoder.ts";
|
|
2
|
+
export { aggregateGearSubstats, calculateCharacterStats, calculateWeightLimit, materializeGearStats, materializeSkillStats, resolveCharacterHealingTraits } from "./formulas.ts";
|
|
3
|
+
export { decodeCharacterRecordSync, decodeCharacterSpawnRecords } from "./record-decoder.ts";
|
|
4
|
+
export { FishNetCharacterTracker } from "./tracker.ts";
|
|
5
|
+
export { FishNetInspectRoster } from "./inspect-roster.ts";
|
|
6
|
+
export type { InspectedCharacter } from "./inspect-roster.ts";
|
|
7
|
+
export { PERCENT_STATS, STAT_NAMES } from "./stat-names.ts";
|
|
8
|
+
export { ATTRIBUTE_NAMES } from "./types.ts";
|
|
9
|
+
export type { CharacterAttributeName, CharacterAttributes, CharacterArtifact, CharacterEquipment, CharacterHealingTraits, CharacterIdentity, GearStatTotal, CharacterRecordValues, CharacterSubstat, CharacterSnapshot, CharacterSkill, CharacterSkillEffect, CharacterRefinableItem, CharacterStatBreakdown, CharacterViewState, CharacterWeight, } from "./types.ts";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACjL,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC"}
|