@kar-mi/spirit-vale-tools-combat 3.3.5

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.
Files changed (47) hide show
  1. package/README.md +56 -0
  2. package/dist/actor-directory.d.ts +88 -0
  3. package/dist/actor-directory.d.ts.map +1 -0
  4. package/dist/boss-catalog.d.ts +6 -0
  5. package/dist/boss-catalog.d.ts.map +1 -0
  6. package/dist/combat-tracker.d.ts +295 -0
  7. package/dist/combat-tracker.d.ts.map +1 -0
  8. package/dist/dps-meter.d.ts +115 -0
  9. package/dist/dps-meter.d.ts.map +1 -0
  10. package/dist/effect-display.d.ts +16 -0
  11. package/dist/effect-display.d.ts.map +1 -0
  12. package/dist/history/domain.d.ts +6 -0
  13. package/dist/history/domain.d.ts.map +1 -0
  14. package/dist/history/importer.d.ts +12 -0
  15. package/dist/history/importer.d.ts.map +1 -0
  16. package/dist/history/store.d.ts +90 -0
  17. package/dist/history/store.d.ts.map +1 -0
  18. package/dist/index.d.ts +34 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3998 -0
  21. package/dist/live-combat.d.ts +80 -0
  22. package/dist/live-combat.d.ts.map +1 -0
  23. package/dist/live-log.d.ts +50 -0
  24. package/dist/live-log.d.ts.map +1 -0
  25. package/dist/position-tracker.d.ts +43 -0
  26. package/dist/position-tracker.d.ts.map +1 -0
  27. package/dist/reducers/damage.d.ts +168 -0
  28. package/dist/reducers/damage.d.ts.map +1 -0
  29. package/dist/reducers/meter.d.ts +29 -0
  30. package/dist/reducers/meter.d.ts.map +1 -0
  31. package/dist/reducers/rows.d.ts +37 -0
  32. package/dist/reducers/rows.d.ts.map +1 -0
  33. package/dist/reducers/timeline.d.ts +29 -0
  34. package/dist/reducers/timeline.d.ts.map +1 -0
  35. package/dist/replay-capture.d.ts +24 -0
  36. package/dist/replay-capture.d.ts.map +1 -0
  37. package/dist/replay-summary.d.ts +14 -0
  38. package/dist/replay-summary.d.ts.map +1 -0
  39. package/dist/replay.d.ts +11 -0
  40. package/dist/replay.d.ts.map +1 -0
  41. package/dist/snapshot.d.ts +67 -0
  42. package/dist/snapshot.d.ts.map +1 -0
  43. package/dist/status-tracker.d.ts +61 -0
  44. package/dist/status-tracker.d.ts.map +1 -0
  45. package/dist/summon-calibration.d.ts +8 -0
  46. package/dist/summon-calibration.d.ts.map +1 -0
  47. package/package.json +33 -0
@@ -0,0 +1,61 @@
1
+ import type { FishNetStatusCatalog } from "@kar-mi/spirit-vale-tools-statuses";
2
+ import type { FishNetSkillCatalog } from "@kar-mi/spirit-vale-tools-skills";
3
+ import type { FishNetActorIdentityEvent } from "./actor-directory.ts";
4
+ import type { FishNetCombatEvent, FishNetCombatStatusEvent, FishNetCombatSummonEvent } from "./combat-tracker.ts";
5
+ export interface FishNetActiveStatus {
6
+ statusId: string;
7
+ displayName: string;
8
+ spriteId?: string;
9
+ isDebuff: boolean;
10
+ level: number;
11
+ appliedAtMs: number;
12
+ expiresAtMs?: number;
13
+ remainingMs?: number;
14
+ stacks?: number;
15
+ }
16
+ export interface FishNetStatusTrackerOptions {
17
+ /** Status metadata used to resolve durations by level. Defaults to the bundled catalog. */
18
+ statusCatalog?: FishNetStatusCatalog;
19
+ /** Skill metadata used to label summon-derived buffs. Defaults to the bundled catalog. */
20
+ skillCatalog?: FishNetSkillCatalog;
21
+ }
22
+ /** Tracks per-actor active buffs/debuffs from FishNet status apply/remove events. */
23
+ export declare class FishNetStatusTracker {
24
+ private readonly directory;
25
+ private readonly skillDirectory;
26
+ private readonly active;
27
+ /** Actor display names, tracked independently of damage so statuses resolve before an actor has hit anything. */
28
+ private readonly identities;
29
+ /** Last known actorId per uid. */
30
+ private readonly actorIdByUid;
31
+ private revisionValue;
32
+ private nextExpiryRevision;
33
+ private nextExpiry?;
34
+ constructor(options?: FishNetStatusTrackerOptions);
35
+ /** Bumped only when the tracked set actually changed. */
36
+ get revision(): number;
37
+ /** Earliest moment a tracked status is due to disappear, or undefined when nothing is on a timer. */
38
+ nextExpiryAtMs(): number | undefined;
39
+ private touch;
40
+ consume(event: FishNetCombatEvent, observedAtMs: number): void;
41
+ consumeIdentity(event: FishNetActorIdentityEvent): void;
42
+ private migrateActive;
43
+ consumeStatus(event: FishNetCombatStatusEvent, observedAtMs: number): void;
44
+ /** Whether the status runs on a real countdown, as opposed to a toggle or aura the server merely keeps re-stating. */
45
+ private isTimed;
46
+ /** Picks the expiry to trust. */
47
+ private resolveExpiry;
48
+ consumeSummon(event: FishNetCombatSummonEvent, observedAtMs: number): void;
49
+ /** Refreshes a status's timer when one of its granting skills activates again. */
50
+ private consumeActivation;
51
+ /** Drops statuses whose computed duration has elapsed; servers do not always send an explicit remove. */
52
+ advance(nowMs: number): void;
53
+ getActiveStatuses(actorId: number, nowMs: number): FishNetActiveStatus[];
54
+ /** Merges active statuses across actor IDs that represent the same logical actor (e.g. after a respawn). */
55
+ getActiveStatusesForActors(actorIds: readonly number[], nowMs: number): FishNetActiveStatus[];
56
+ /** Resolves active statuses by display name, independent of whether that actor has dealt any damage. */
57
+ getActiveStatusesForName(personalName: string, nowMs: number): FishNetActiveStatus[];
58
+ /** Discards all tracked statuses, e.g. when the encounter/session resets. */
59
+ reset(): void;
60
+ }
61
+ //# sourceMappingURL=status-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-tracker.d.ts","sourceRoot":"","sources":["../src/status-tracker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAEV,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,2FAA2F;IAC3F,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAmBD,qFAAqF;AACrF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,iHAAiH;IACjH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,YAAY,OAAO,GAAE,2BAAgC,EAGpD;IAED,yDAAyD;IACzD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,qGAAqG;IACrG,cAAc,IAAI,MAAM,GAAG,SAAS,CAYnC;IAED,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAK7D;IAED,eAAe,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAoBtD;IAED,OAAO,CAAC,aAAa;IAYrB,aAAa,CAAC,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAqBzE;IAED,sHAAsH;IACtH,OAAO,CAAC,OAAO;IAIf,iCAAiC;IACjC,OAAO,CAAC,aAAa;IAwBrB,aAAa,CAAC,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAczE;IAED,kFAAkF;IAClF,OAAO,CAAC,iBAAiB;IAuBzB,yGAAyG;IACzG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAY3B;IAED,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAwBvE;IAED,4GAA4G;IAC5G,0BAA0B,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAS5F;IAED,wGAAwG;IACxG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAOnF;IAED,6EAA6E;IAC7E,KAAK,IAAI,IAAI,CAKZ;CACF"}
@@ -0,0 +1,8 @@
1
+ export interface FishNetSummonCalibrationEntry {
2
+ skillId: string;
3
+ isPrimary: boolean;
4
+ isMountedSummon: boolean;
5
+ }
6
+ /** Decodes the complete summon snapshot carried by CalibrateSummons_T. */
7
+ export declare function decodeSummonCalibration(payload: Buffer): FishNetSummonCalibrationEntry[];
8
+ //# sourceMappingURL=summon-calibration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summon-calibration.d.ts","sourceRoot":"","sources":["../src/summon-calibration.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,6BAA6B,EAAE,CAqBxF"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@kar-mi/spirit-vale-tools-combat",
3
+ "version": "3.3.5",
4
+ "description": "Spirit Vale combat event tracking and replay utilities.",
5
+ "license": "AGPL-3.0-only",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/kar-mi/spirit-vale-tools.git",
9
+ "directory": "packages/combat"
10
+ },
11
+ "type": "module",
12
+ "files": [
13
+ "dist",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun --format esm --external '@kar-mi/spirit-vale-tools-*' && bunx tsc --project ./tsconfig.build.json"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "default": "./dist/index.js"
23
+ }
24
+ },
25
+ "dependencies": {
26
+ "@kar-mi/spirit-vale-tools-capture": "^2.3.0",
27
+ "@kar-mi/spirit-vale-tools-logging": "^0.9.0",
28
+ "@kar-mi/spirit-vale-tools-metrics": "^0.2.0",
29
+ "@kar-mi/spirit-vale-tools-skills": "^0.2.1",
30
+ "@kar-mi/spirit-vale-tools-sqlite": "^0.2.1",
31
+ "@kar-mi/spirit-vale-tools-statuses": "^0.2.3"
32
+ }
33
+ }