@crowdedkingdoms/crowdyjs 8.8.0 → 8.9.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/MIGRATION.md +43 -0
- package/README.md +1 -1
- package/dist/domains/compute.d.ts +12 -1
- package/dist/domains/compute.d.ts.map +1 -1
- package/dist/domains/compute.js +18 -1
- package/dist/generated/graphql.d.ts +60 -0
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/generated/graphql.js +2 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/kit/abilities.d.ts +66 -0
- package/dist/kit/abilities.d.ts.map +1 -0
- package/dist/kit/abilities.js +71 -0
- package/dist/kit/blueprints/index.d.ts +2 -0
- package/dist/kit/blueprints/index.d.ts.map +1 -1
- package/dist/kit/blueprints/index.js +2 -0
- package/dist/kit/blueprints/liveops.d.ts +42 -0
- package/dist/kit/blueprints/liveops.d.ts.map +1 -0
- package/dist/kit/blueprints/liveops.js +170 -0
- package/dist/kit/blueprints/moderation.d.ts +32 -0
- package/dist/kit/blueprints/moderation.d.ts.map +1 -0
- package/dist/kit/blueprints/moderation.js +140 -0
- package/dist/kit/index.d.ts +9 -2
- package/dist/kit/index.d.ts.map +1 -1
- package/dist/kit/index.js +9 -2
- package/dist/kit/kit.d.ts +44 -0
- package/dist/kit/kit.d.ts.map +1 -1
- package/dist/kit/kit.js +35 -1
- package/dist/kit/liveops.d.ts +112 -0
- package/dist/kit/liveops.d.ts.map +1 -0
- package/dist/kit/liveops.js +183 -0
- package/dist/kit/loot.d.ts +22 -1
- package/dist/kit/loot.d.ts.map +1 -1
- package/dist/kit/loot.js +41 -1
- package/dist/kit/moderation.d.ts +73 -0
- package/dist/kit/moderation.d.ts.map +1 -0
- package/dist/kit/moderation.js +103 -0
- package/dist/kit/movement.d.ts +78 -0
- package/dist/kit/movement.d.ts.map +1 -0
- package/dist/kit/movement.js +103 -0
- package/dist/kit/npcs.d.ts.map +1 -1
- package/dist/kit/racing.d.ts +85 -0
- package/dist/kit/racing.d.ts.map +1 -0
- package/dist/kit/racing.js +99 -0
- package/dist/kit/social.d.ts.map +1 -1
- package/dist/kit/telemetry.d.ts +66 -0
- package/dist/kit/telemetry.d.ts.map +1 -0
- package/dist/kit/telemetry.js +133 -0
- package/dist/kit/territory.d.ts +97 -0
- package/dist/kit/territory.d.ts.map +1 -0
- package/dist/kit/territory.js +114 -0
- package/dist/kit/wire.d.ts +51 -0
- package/dist/kit/wire.d.ts.map +1 -1
- package/dist/kit/wire.js +60 -0
- package/package.json +1 -1
package/dist/kit/wire.d.ts
CHANGED
|
@@ -66,6 +66,16 @@ export declare const EVENT_TURN = 91;
|
|
|
66
66
|
export declare const EVENT_SCORE = 92;
|
|
67
67
|
/** Match proposal (matchmaking → matches handoff). */
|
|
68
68
|
export declare const EVENT_PROPOSAL = 93;
|
|
69
|
+
/** Ability cast/impact (kit-play abilities). */
|
|
70
|
+
export declare const EVENT_ABILITY = 94;
|
|
71
|
+
/** Movement-envelope violation (movement-warden, observe/flag). */
|
|
72
|
+
export declare const EVENT_MOVEMENT_VIOLATION = 95;
|
|
73
|
+
/** Control-point state change (territory). */
|
|
74
|
+
export declare const EVENT_CONTROL_POINT = 96;
|
|
75
|
+
/** Race timing: checkpoint/lap/finish (kit-play timing). */
|
|
76
|
+
export declare const EVENT_RACE_TIMING = 97;
|
|
77
|
+
/** Zone change: shrinking circles, event areas (kit-sim zones). */
|
|
78
|
+
export declare const EVENT_ZONE_CHANGE = 98;
|
|
69
79
|
/** Split an engine server-event payload into its type + JSON body. */
|
|
70
80
|
export declare function parseEngineEvent(bytes: Uint8Array): {
|
|
71
81
|
eventType: number;
|
|
@@ -121,4 +131,45 @@ export interface ProposalEvent {
|
|
|
121
131
|
}
|
|
122
132
|
/** Parse a proposal event; null when the payload is another type. */
|
|
123
133
|
export declare function parseProposalEvent(bytes: Uint8Array): ProposalEvent | null;
|
|
134
|
+
/** A parsed type-94 ability cast/impact event. */
|
|
135
|
+
export interface AbilityEvent {
|
|
136
|
+
/** `'cast'` or `'impact'`. */
|
|
137
|
+
kind: string;
|
|
138
|
+
abilityId: string;
|
|
139
|
+
casterId: string;
|
|
140
|
+
victimId: string | null;
|
|
141
|
+
damage: number;
|
|
142
|
+
body: Record<string, unknown>;
|
|
143
|
+
}
|
|
144
|
+
/** Parse an ability event; null when the payload is another type. */
|
|
145
|
+
export declare function parseAbilityEvent(bytes: Uint8Array): AbilityEvent | null;
|
|
146
|
+
/** A parsed type-95 movement-violation event (observe/flag posture). */
|
|
147
|
+
export interface MovementViolationEvent {
|
|
148
|
+
/** `'speed'`, `'teleport'`, or `'bounds'`. */
|
|
149
|
+
kind: string;
|
|
150
|
+
userId: string;
|
|
151
|
+
detail: string;
|
|
152
|
+
body: Record<string, unknown>;
|
|
153
|
+
}
|
|
154
|
+
/** Parse a movement-violation event; null when the payload is another type. */
|
|
155
|
+
export declare function parseMovementViolation(bytes: Uint8Array): MovementViolationEvent | null;
|
|
156
|
+
/** A parsed type-96 control-point state event (territory flips). */
|
|
157
|
+
export interface ControlPointEvent {
|
|
158
|
+
pointId: string;
|
|
159
|
+
owner: string;
|
|
160
|
+
previousOwner: string;
|
|
161
|
+
body: Record<string, unknown>;
|
|
162
|
+
}
|
|
163
|
+
/** Parse a control-point event; null when the payload is another type. */
|
|
164
|
+
export declare function parseControlPointEvent(bytes: Uint8Array): ControlPointEvent | null;
|
|
165
|
+
/** A parsed type-97 race-timing event (checkpoint/lap/finish). */
|
|
166
|
+
export interface RaceTimingEvent {
|
|
167
|
+
/** `'started'`, `'checkpoint'`, `'lap'`, or `'finished'`. */
|
|
168
|
+
kind: string;
|
|
169
|
+
courseId: string;
|
|
170
|
+
userId: string;
|
|
171
|
+
body: Record<string, unknown>;
|
|
172
|
+
}
|
|
173
|
+
/** Parse a race-timing event; null when the payload is another type. */
|
|
174
|
+
export declare function parseRaceTimingEvent(bytes: Uint8Array): RaceTimingEvent | null;
|
|
124
175
|
//# sourceMappingURL=wire.d.ts.map
|
package/dist/kit/wire.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/kit/wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B,4EAA4E;AAC5E,eAAO,MAAM,aAAa,IAAS,CAAC;AACpC,eAAO,MAAM,QAAQ,IAAS,CAAC;AAC/B,eAAO,MAAM,QAAQ,IAAS,CAAC;AAC/B,eAAO,MAAM,cAAc,IAAS,CAAC;AAErC,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAiBtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAqBrE;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAI3D;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,UAAU,CAiBlD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,CAM5E;AAMD,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,uEAAuE;AACvE,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,oDAAoD;AACpD,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,8CAA8C;AAC9C,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sDAAsD;AACtD,eAAO,MAAM,cAAc,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/kit/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/kit/wire.js
CHANGED
|
@@ -120,6 +120,16 @@ export const EVENT_TURN = 91;
|
|
|
120
120
|
export const EVENT_SCORE = 92;
|
|
121
121
|
/** Match proposal (matchmaking → matches handoff). */
|
|
122
122
|
export const EVENT_PROPOSAL = 93;
|
|
123
|
+
/** Ability cast/impact (kit-play abilities). */
|
|
124
|
+
export const EVENT_ABILITY = 94;
|
|
125
|
+
/** Movement-envelope violation (movement-warden, observe/flag). */
|
|
126
|
+
export const EVENT_MOVEMENT_VIOLATION = 95;
|
|
127
|
+
/** Control-point state change (territory). */
|
|
128
|
+
export const EVENT_CONTROL_POINT = 96;
|
|
129
|
+
/** Race timing: checkpoint/lap/finish (kit-play timing). */
|
|
130
|
+
export const EVENT_RACE_TIMING = 97;
|
|
131
|
+
/** Zone change: shrinking circles, event areas (kit-sim zones). */
|
|
132
|
+
export const EVENT_ZONE_CHANGE = 98;
|
|
123
133
|
/** Split an engine server-event payload into its type + JSON body. */
|
|
124
134
|
export function parseEngineEvent(bytes) {
|
|
125
135
|
if (bytes.length < 2)
|
|
@@ -204,3 +214,53 @@ export function parseProposalEvent(bytes) {
|
|
|
204
214
|
body: parsed.body,
|
|
205
215
|
};
|
|
206
216
|
}
|
|
217
|
+
/** Parse an ability event; null when the payload is another type. */
|
|
218
|
+
export function parseAbilityEvent(bytes) {
|
|
219
|
+
const parsed = parseEngineEvent(bytes);
|
|
220
|
+
if (!parsed || parsed.eventType !== EVENT_ABILITY)
|
|
221
|
+
return null;
|
|
222
|
+
return {
|
|
223
|
+
kind: String(parsed.body.kind ?? ''),
|
|
224
|
+
abilityId: String(parsed.body.abilityId ?? ''),
|
|
225
|
+
casterId: String(parsed.body.casterId ?? ''),
|
|
226
|
+
victimId: parsed.body.victimId != null ? String(parsed.body.victimId) : null,
|
|
227
|
+
damage: Number(parsed.body.damage ?? 0),
|
|
228
|
+
body: parsed.body,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/** Parse a movement-violation event; null when the payload is another type. */
|
|
232
|
+
export function parseMovementViolation(bytes) {
|
|
233
|
+
const parsed = parseEngineEvent(bytes);
|
|
234
|
+
if (!parsed || parsed.eventType !== EVENT_MOVEMENT_VIOLATION)
|
|
235
|
+
return null;
|
|
236
|
+
return {
|
|
237
|
+
kind: String(parsed.body.kind ?? ''),
|
|
238
|
+
userId: String(parsed.body.userId ?? ''),
|
|
239
|
+
detail: String(parsed.body.detail ?? ''),
|
|
240
|
+
body: parsed.body,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/** Parse a control-point event; null when the payload is another type. */
|
|
244
|
+
export function parseControlPointEvent(bytes) {
|
|
245
|
+
const parsed = parseEngineEvent(bytes);
|
|
246
|
+
if (!parsed || parsed.eventType !== EVENT_CONTROL_POINT)
|
|
247
|
+
return null;
|
|
248
|
+
return {
|
|
249
|
+
pointId: String(parsed.body.pointId ?? ''),
|
|
250
|
+
owner: String(parsed.body.owner ?? ''),
|
|
251
|
+
previousOwner: String(parsed.body.previousOwner ?? ''),
|
|
252
|
+
body: parsed.body,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/** Parse a race-timing event; null when the payload is another type. */
|
|
256
|
+
export function parseRaceTimingEvent(bytes) {
|
|
257
|
+
const parsed = parseEngineEvent(bytes);
|
|
258
|
+
if (!parsed || parsed.eventType !== EVENT_RACE_TIMING)
|
|
259
|
+
return null;
|
|
260
|
+
return {
|
|
261
|
+
kind: String(parsed.body.kind ?? ''),
|
|
262
|
+
courseId: String(parsed.body.courseId ?? ''),
|
|
263
|
+
userId: String(parsed.body.userId ?? ''),
|
|
264
|
+
body: parsed.body,
|
|
265
|
+
};
|
|
266
|
+
}
|