@sagl/server 0.0.0-stage → 0.1.0-next.49

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/dist/actions.d.ts +46 -0
  4. package/dist/actions.js +80 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/animations.d.ts +32 -0
  7. package/dist/animations.js +95 -0
  8. package/dist/animations.js.map +1 -0
  9. package/dist/audio.d.ts +180 -0
  10. package/dist/audio.js +353 -0
  11. package/dist/audio.js.map +1 -0
  12. package/dist/audio_effects.d.ts +219 -0
  13. package/dist/audio_effects.js +84 -0
  14. package/dist/audio_effects.js.map +1 -0
  15. package/dist/camera.d.ts +188 -0
  16. package/dist/camera.js +247 -0
  17. package/dist/camera.js.map +1 -0
  18. package/dist/claims.d.ts +27 -0
  19. package/dist/claims.js +48 -0
  20. package/dist/claims.js.map +1 -0
  21. package/dist/commands.d.ts +135 -0
  22. package/dist/commands.js +373 -0
  23. package/dist/commands.js.map +1 -0
  24. package/dist/console.d.ts +21 -0
  25. package/dist/console.js +100 -0
  26. package/dist/console.js.map +1 -0
  27. package/dist/constants.d.ts +654 -0
  28. package/dist/constants.js +657 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/cutscene.d.ts +47 -0
  31. package/dist/cutscene.js +190 -0
  32. package/dist/cutscene.js.map +1 -0
  33. package/dist/draw.d.ts +106 -0
  34. package/dist/draw.js +132 -0
  35. package/dist/draw.js.map +1 -0
  36. package/dist/effects.d.ts +91 -0
  37. package/dist/effects.js +116 -0
  38. package/dist/effects.js.map +1 -0
  39. package/dist/gangzones.d.ts +47 -0
  40. package/dist/gangzones.js +122 -0
  41. package/dist/gangzones.js.map +1 -0
  42. package/dist/geo.d.ts +11 -0
  43. package/dist/geo.js +25 -0
  44. package/dist/geo.js.map +1 -0
  45. package/dist/hud.d.ts +159 -0
  46. package/dist/hud.js +247 -0
  47. package/dist/hud.js.map +1 -0
  48. package/dist/index.d.ts +40 -0
  49. package/dist/index.js +43 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interaction.d.ts +81 -0
  52. package/dist/interaction.js +143 -0
  53. package/dist/interaction.js.map +1 -0
  54. package/dist/junctions.d.ts +1 -0
  55. package/dist/junctions.js +330 -0
  56. package/dist/junctions.js.map +1 -0
  57. package/dist/map.d.ts +55 -0
  58. package/dist/map.js +71 -0
  59. package/dist/map.js.map +1 -0
  60. package/dist/menu.d.ts +96 -0
  61. package/dist/menu.js +129 -0
  62. package/dist/menu.js.map +1 -0
  63. package/dist/mission.d.ts +482 -0
  64. package/dist/mission.js +1258 -0
  65. package/dist/mission.js.map +1 -0
  66. package/dist/models.d.ts +56 -0
  67. package/dist/models.js +71 -0
  68. package/dist/models.js.map +1 -0
  69. package/dist/modshop.d.ts +229 -0
  70. package/dist/modshop.js +904 -0
  71. package/dist/modshop.js.map +1 -0
  72. package/dist/modshop_data.d.ts +44 -0
  73. package/dist/modshop_data.js +287 -0
  74. package/dist/modshop_data.js.map +1 -0
  75. package/dist/native.d.ts +809 -0
  76. package/dist/native.js +27 -0
  77. package/dist/native.js.map +1 -0
  78. package/dist/objects.d.ts +249 -0
  79. package/dist/objects.js +455 -0
  80. package/dist/objects.js.map +1 -0
  81. package/dist/paint.d.ts +124 -0
  82. package/dist/paint.js +84 -0
  83. package/dist/paint.js.map +1 -0
  84. package/dist/paynspray.d.ts +44 -0
  85. package/dist/paynspray.js +177 -0
  86. package/dist/paynspray.js.map +1 -0
  87. package/dist/ped.d.ts +335 -0
  88. package/dist/ped.js +536 -0
  89. package/dist/ped.js.map +1 -0
  90. package/dist/player.d.ts +685 -0
  91. package/dist/player.js +1163 -0
  92. package/dist/player.js.map +1 -0
  93. package/dist/screeneffects.d.ts +99 -0
  94. package/dist/screeneffects.js +257 -0
  95. package/dist/screeneffects.js.map +1 -0
  96. package/dist/scripts.d.ts +69 -0
  97. package/dist/scripts.js +125 -0
  98. package/dist/scripts.js.map +1 -0
  99. package/dist/server.d.ts +713 -0
  100. package/dist/server.js +1080 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/shopblips.d.ts +9 -0
  103. package/dist/shopblips.js +30 -0
  104. package/dist/shopblips.js.map +1 -0
  105. package/dist/special.d.ts +33 -0
  106. package/dist/special.js +26 -0
  107. package/dist/special.js.map +1 -0
  108. package/dist/splash.d.ts +42 -0
  109. package/dist/splash.js +55 -0
  110. package/dist/splash.js.map +1 -0
  111. package/dist/text.d.ts +19 -0
  112. package/dist/text.js +25 -0
  113. package/dist/text.js.map +1 -0
  114. package/dist/ui.d.ts +141 -0
  115. package/dist/ui.js +243 -0
  116. package/dist/ui.js.map +1 -0
  117. package/dist/vehicle.d.ts +306 -0
  118. package/dist/vehicle.js +612 -0
  119. package/dist/vehicle.js.map +1 -0
  120. package/dist/vehiclecolors.d.ts +26 -0
  121. package/dist/vehiclecolors.js +49 -0
  122. package/dist/vehiclecolors.js.map +1 -0
  123. package/dist/world.d.ts +222 -0
  124. package/dist/world.js +227 -0
  125. package/dist/world.js.map +1 -0
  126. package/dist/zone.d.ts +89 -0
  127. package/dist/zone.js +140 -0
  128. package/dist/zone.js.map +1 -0
  129. package/package.json +33 -4
package/dist/ped.js ADDED
@@ -0,0 +1,536 @@
1
+ import { encodeEffects } from "./audio_effects.js";
2
+ import { gxt } from "./text.js";
3
+ // server.audio.speak, for say({ file }) (set by the server).
4
+ let speaker = null;
5
+ /** @internal */
6
+ export function setPedSpeaker(fn) {
7
+ speaker = fn;
8
+ }
9
+ const PACE = { walk: 4, run: 6, sprint: 7 };
10
+ const KIND = {
11
+ goTo: 1, goStraight: 2, follow: 3, flee: 4, face: 5, lookAt: 6, stand: 7, handsUp: 8,
12
+ cower: 9, attack: 10, wander: 11, playAnim: 12, enterVehicle: 13, leaveVehicle: 14, driveTo: 15,
13
+ };
14
+ function isPed(t) {
15
+ return !("name" in t);
16
+ }
17
+ function targetOf(t) {
18
+ return isPed(t) ? { targetPed: t.id + 1 } : { targetPlayer: t.id + 1 };
19
+ }
20
+ function duration(v) {
21
+ return v === true ? 0 : Math.max(0, v);
22
+ }
23
+ /** @internal A step, as the native server takes it. */
24
+ export function encodeStep(step) {
25
+ if ("walkTo" in step) {
26
+ return {
27
+ kind: step.straight ? KIND.goStraight : KIND.goTo, ...step.walkTo,
28
+ pace: PACE[step.pace ?? "walk"], distance: step.radius ?? 1,
29
+ };
30
+ }
31
+ if ("follow" in step)
32
+ return { kind: KIND.follow, ...targetOf(step.follow), distance: step.distance ?? 2, ms: step.ms ?? 0 };
33
+ if ("fleeFrom" in step)
34
+ return { kind: KIND.flee, ...targetOf(step.fleeFrom), distance: step.distance ?? 50, ms: step.ms ?? 0 };
35
+ if ("face" in step) {
36
+ const f = step.face;
37
+ return "x" in f && !("id" in f) ? { kind: KIND.face, ...f } : { kind: KIND.face, ...targetOf(f) };
38
+ }
39
+ if ("lookAt" in step)
40
+ return { kind: KIND.lookAt, ...targetOf(step.lookAt), ms: step.ms };
41
+ if ("standStill" in step)
42
+ return { kind: KIND.stand, ms: duration(step.standStill) };
43
+ if ("handsUp" in step)
44
+ return { kind: KIND.handsUp, ms: duration(step.handsUp) };
45
+ if ("cower" in step)
46
+ return { kind: KIND.cower, ms: duration(step.cower) };
47
+ if ("attack" in step)
48
+ return { kind: KIND.attack, ...targetOf(step.attack) };
49
+ if ("wander" in step)
50
+ return { kind: KIND.wander };
51
+ if ("playAnim" in step) {
52
+ return { kind: KIND.playAnim, animBlock: step.playAnim[0], animName: step.playAnim[1], loop: step.loop ?? false, ms: step.ms ?? 0 };
53
+ }
54
+ if ("enterVehicle" in step) {
55
+ const seat = step.seat ?? 0;
56
+ if (!Number.isInteger(seat) || seat < 0 || seat > 8)
57
+ throw new RangeError(`not a seat: ${seat} (0 driver, 1-8)`);
58
+ return { kind: KIND.enterVehicle, vehicleId: step.enterVehicle.id, seat };
59
+ }
60
+ if ("leaveVehicle" in step)
61
+ return { kind: KIND.leaveVehicle };
62
+ if ("driveTo" in step) {
63
+ return { kind: KIND.driveTo, ...step.driveTo, speed: step.speed ?? 12, driveStyle: step.hurry ? 1 : 0, distance: step.radius ?? 8 };
64
+ }
65
+ throw new TypeError(`not a ped step: ${JSON.stringify(step)}`);
66
+ }
67
+ /** @internal What a `say()` sends, and how long it lasts. */
68
+ export function speechOf(native, line) {
69
+ let subtitle = (line.subtitle ?? "").slice(0, 255);
70
+ let recording = 0;
71
+ if (line.dialogue !== undefined) {
72
+ recording = native.dialogueMs(line.dialogue);
73
+ if (recording < 0)
74
+ throw new RangeError(`the game has no recording of "${line.dialogue}"`);
75
+ if (!line.subtitle)
76
+ subtitle = gxt(line.dialogue, line.table ? { table: line.table } : {});
77
+ }
78
+ const ms = line.ms ?? (recording ? recording + 400
79
+ : subtitle ? Math.min(10000, Math.max(2000, 1500 + subtitle.length * 60)) : 2500);
80
+ return { subtitle, dialogue: line.dialogue ?? "", ms };
81
+ }
82
+ /**
83
+ * A ped (NPC) created with `server.createPed()`. The nearest player's game
84
+ * simulates it, running its own AI as for any ped in single-player (it
85
+ * flees gunfire, falls over when hit, dies), and everyone sees the same ped.
86
+ * The server checks what that game reports.
87
+ */
88
+ export class Ped {
89
+ id;
90
+ /** Ped model (skin). */
91
+ model;
92
+ /** The story character it is ("ryder"), or null: then `model` is 0. */
93
+ character;
94
+ /** Free-form per-ped storage for gamemode data. */
95
+ data = {};
96
+ #native;
97
+ #player;
98
+ #vehicle;
99
+ #destroy;
100
+ #exists = true;
101
+ #order = null;
102
+ #listeners = {};
103
+ #settings = {};
104
+ #visibleTo = "world";
105
+ #controller = null;
106
+ /** @internal Created by Server. */
107
+ constructor(nativeServer, id, player, vehicle, destroy) {
108
+ this.#native = nativeServer;
109
+ this.id = id;
110
+ this.#player = player;
111
+ this.#vehicle = vehicle;
112
+ this.#destroy = destroy;
113
+ const state = this.#state();
114
+ this.model = state?.model ?? 0;
115
+ this.character = state?.special || null;
116
+ }
117
+ #state() {
118
+ return this.#exists ? this.#native.ped(this.id) : null;
119
+ }
120
+ /** False once destroyed. */
121
+ get exists() {
122
+ return this.#exists;
123
+ }
124
+ /** @internal */
125
+ markDestroyed() {
126
+ this.#exists = false;
127
+ this.#finishOrder({ status: "failed", reason: "removed", step: 0 });
128
+ }
129
+ // ---- Orders -------------------------------------------------------------------
130
+ //
131
+ // Each returns a promise of how it ended (never rejected: a failed or
132
+ // cancelled order resolves too). A new order cancels the one before.
133
+ /** Walks (or runs, sprints) to `position`, along the paths (or `straight`). Done within `radius` (1 m). */
134
+ walkTo(position, options = {}) {
135
+ return this.sequence([{ walkTo: position, ...options }]);
136
+ }
137
+ /** Keeps within `distance` (2 m) of `target`, for `ms` (until the next order if left out). */
138
+ follow(target, options = {}) {
139
+ return this.sequence([{ follow: target, ...options }]);
140
+ }
141
+ /** Runs from `target` until `distance` (50 m) away, or `ms` is up. */
142
+ fleeFrom(target, options = {}) {
143
+ return this.sequence([{ fleeFrom: target, ...options }]);
144
+ }
145
+ /** Turns to face a player, a ped or a position. */
146
+ face(target) {
147
+ return this.sequence([{ face: target }]);
148
+ }
149
+ /** Looks at `target` for `ms`. */
150
+ lookAt(target, ms) {
151
+ return this.sequence([{ lookAt: target, ms }]);
152
+ }
153
+ /** Stands still for `ms` (until the next order if left out). */
154
+ standStill(ms) {
155
+ return this.sequence([{ standStill: ms ?? true }]);
156
+ }
157
+ /** Puts its hands up for `ms` (until the next order if left out). */
158
+ handsUp(ms) {
159
+ return this.sequence([{ handsUp: ms ?? true }]);
160
+ }
161
+ /** Cowers for `ms` (until the next order if left out). */
162
+ cower(ms) {
163
+ return this.sequence([{ cower: ms ?? true }]);
164
+ }
165
+ /** Attacks `target` with what it holds, until one of them is dead. */
166
+ attack(target) {
167
+ return this.sequence([{ attack: target }]);
168
+ }
169
+ /** Wanders around (until the next order). */
170
+ wander() {
171
+ return this.sequence([{ wander: true }]);
172
+ }
173
+ /**
174
+ * Walks to `vehicle` and gets in: its driver's seat (`seat` 0, the
175
+ * default) or a passenger's (1-8). Done once it's sitting there.
176
+ */
177
+ enterVehicle(vehicle, seat = 0) {
178
+ return this.sequence([{ enterVehicle: vehicle, seat }]);
179
+ }
180
+ /** Gets out of the vehicle it's in (done at once if it's on foot). */
181
+ leaveVehicle() {
182
+ return this.sequence([{ leaveVehicle: true }]);
183
+ }
184
+ /**
185
+ * Drives the vehicle it's driving to `position` along the roads, at
186
+ * `speed` m/s (default 12), by the rules (stopping for traffic and
187
+ * lights) or, with `hurry`, weaving round traffic and through lights.
188
+ * Done within `radius` (8 m).
189
+ */
190
+ driveTo(position, options = {}) {
191
+ return this.sequence([{ driveTo: position, ...options }]);
192
+ }
193
+ /** Plays one of the game's animations (`block`, `name`), once or `loop`ing, for `ms`. */
194
+ playAnim(block, name, options = {}) {
195
+ return this.sequence([{ playAnim: [block, name], ...options }]);
196
+ }
197
+ /**
198
+ * Several steps, run one after another by its owner's game with no pause
199
+ * between them (up to 16). Resolves when the last is done, or one fails.
200
+ */
201
+ sequence(steps) {
202
+ const encoded = steps.map(encodeStep);
203
+ const id = this.#exists ? this.#native.orderPed(this.id, encoded) : 0;
204
+ if (!id) {
205
+ return Promise.resolve({ status: "failed", reason: this.dead ? "died" : "refused", step: 0 });
206
+ }
207
+ this.#finishOrder({ status: "cancelled", reason: "superseded", step: 0 });
208
+ return new Promise((resolve) => {
209
+ this.#order = { id, resolve, steps: steps.length };
210
+ });
211
+ }
212
+ /** Stops what it's been ordered to do: back to standing (or wandering). */
213
+ stop() {
214
+ if (!this.#order)
215
+ return;
216
+ this.#native.cancelPedOrder(this.id);
217
+ this.#finishOrder({ status: "cancelled", reason: "stopped", step: 0 });
218
+ }
219
+ /**
220
+ * Who sees it: `"world"` (the default), everyone its virtual world shows
221
+ * it to (its world, and worlds viewing it); or only these players (while
222
+ * they're in its world or one viewing it). Players who can't see it can't
223
+ * hit it, nor it them. Players who leave drop off the list.
224
+ */
225
+ get visibleTo() {
226
+ return this.#visibleTo;
227
+ }
228
+ set visibleTo(players) {
229
+ this.#visibleTo = players === "world" ? "world" : [...players];
230
+ if (this.#exists) {
231
+ this.#native.setPedVisibility(this.id, players === "world" ? null : players.filter((p) => p.connected).map((p) => p.id));
232
+ }
233
+ }
234
+ /**
235
+ * The player whose game always runs it, at any distance, while they can
236
+ * see it (a mission's player, so a chase or a follow plays out on their
237
+ * screen); null, the nearest player's (the default). If they can't have
238
+ * it (left, another world), the nearest takes over meanwhile.
239
+ */
240
+ get controller() {
241
+ return this.#controller;
242
+ }
243
+ set controller(player) {
244
+ this.#controller = player;
245
+ if (this.#exists)
246
+ this.#native.setPedController(this.id, player ? player.id : null);
247
+ }
248
+ /** Its settings (see `PedSettings`). */
249
+ get settings() {
250
+ return this.#settings;
251
+ }
252
+ /**
253
+ * Changes its settings; fields left out keep their value. For mission
254
+ * characters: `{ reactions: "self-defence", keepTask: true }` is what
255
+ * `createPed`'s `mission` option starts from.
256
+ */
257
+ set(settings) {
258
+ this.#settings = { ...this.#settings, ...settings };
259
+ if (!this.#exists)
260
+ return this;
261
+ const s = this.#settings;
262
+ const p = s.proofs ?? {};
263
+ const proofs = s.invincible ? 31
264
+ : (p.bullet ? 1 : 0) | (p.fire ? 2 : 0) | (p.explosion ? 4 : 0) | (p.collision ? 8 : 0) | (p.melee ? 16 : 0);
265
+ this.#native.setPedSettings(this.id, {
266
+ reactions: s.reactions === "none" ? 1 : s.reactions === "self-defence" ? 2 : 0,
267
+ keepTask: s.keepTask ?? false,
268
+ proofs,
269
+ notDraggable: s.draggable === false,
270
+ accuracy: s.accuracy ?? 0,
271
+ hostilePlayers: (s.hostileTo ?? []).filter((pl) => pl.connected).map((pl) => pl.id),
272
+ hostileRange: s.hostileRange ?? 0,
273
+ });
274
+ return this;
275
+ }
276
+ /** @internal Set at creation (the server has them already). */
277
+ initVisibility(visibleTo, controller) {
278
+ this.#visibleTo = visibleTo === "world" ? "world" : [...visibleTo];
279
+ this.#controller = controller;
280
+ }
281
+ /** @internal A player left: off its hostile and visibility lists (the server drops them too). */
282
+ forgetPlayer(player) {
283
+ if (this.#visibleTo !== "world")
284
+ this.#visibleTo = this.#visibleTo.filter((p) => p !== player);
285
+ if (this.#controller === player)
286
+ this.#controller = null;
287
+ if (this.#settings.hostileTo?.includes(player)) {
288
+ this.set({ hostileTo: this.#settings.hostileTo.filter((p) => p !== player) });
289
+ }
290
+ }
291
+ /**
292
+ * Says something: one of the game's voice lines in its own voice
293
+ * (`context`, a `VoiceContext`), and/or a `subtitle` shown to the players
294
+ * who hear it (those who have subtitles on in their pause menu). Or a line
295
+ * of the game's mission dialogue (`dialogue`, its GXT key such as
296
+ * "RYD2_AA", from mission table `table`): its recording, from this ped,
297
+ * with its own text as the subtitle. Heard by `to`, or everyone within
298
+ * 40 m who sees it. Resolves when it's done (after `ms`, the recording,
299
+ * or about as long as reading the subtitle takes). `effects` puts the
300
+ * recording through audio effects (`"phone"`...; then its lips don't move).
301
+ */
302
+ say(line) {
303
+ if (line.file !== undefined) {
304
+ if (!this.#exists || this.dead || !speaker)
305
+ return Promise.resolve();
306
+ return speaker(line.file, {
307
+ at: line.inside ?? this, muffled: !!line.inside, subtitle: line.subtitle, to: line.to, effects: line.effects,
308
+ }).done;
309
+ }
310
+ const spoken = speechOf(this.#native, line);
311
+ if (this.#exists && !this.dead) {
312
+ this.#native.pedSay(this.id, line.context ?? 0, spoken.subtitle, line.ms ?? 0, line.to ? line.to.filter((p) => p.connected).map((p) => p.id) : null, spoken.dialogue, encodeEffects(line.effects));
313
+ }
314
+ return new Promise((resolve) => setTimeout(resolve, spoken.ms));
315
+ }
316
+ /**
317
+ * What happens to it when hurt, for this ped alone (as
318
+ * `server.on("pedDamage")` for all): return `false` to refuse it, or a
319
+ * number for the damage instead. Called before the server's listeners.
320
+ * **Returns** a function that removes it.
321
+ *
322
+ * ```ts
323
+ * witness.onDamage((by, hit) => (hit.weapon <= 15 ? 0 : undefined)); // fists and bats don't hurt him
324
+ * ```
325
+ */
326
+ onDamage(fn) {
327
+ this.#damage.push(fn);
328
+ return () => {
329
+ const i = this.#damage.indexOf(fn);
330
+ if (i >= 0)
331
+ this.#damage.splice(i, 1);
332
+ };
333
+ }
334
+ #damage = [];
335
+ /** @internal Hurt: to its own listeners first. */
336
+ damagedBy(attacker, hit) {
337
+ let out;
338
+ for (const fn of [...this.#damage]) {
339
+ try {
340
+ const r = fn(attacker, hit);
341
+ if (r === false)
342
+ return false;
343
+ if (typeof r === "number")
344
+ out = r;
345
+ }
346
+ catch (err) {
347
+ console.error("[sagl] ped onDamage threw:", err);
348
+ }
349
+ }
350
+ if (hit.weapon <= 15 && "name" in attacker)
351
+ this.threatenedBy(attacker, "melee");
352
+ return out;
353
+ }
354
+ /**
355
+ * A player threatening it: aiming a gun at it within `range` m (default
356
+ * 8), or (unless `melee: false`) hitting it with fists or a melee weapon.
357
+ * For a ped that gives up, as in a holdup or an arrest. Called each time
358
+ * it happens (aiming: at most once a second per player). **Returns** a
359
+ * function that removes it.
360
+ *
361
+ * ```ts
362
+ * clerk.onThreatened((player) => { void clerk.handsUp(5000); });
363
+ * ```
364
+ */
365
+ onThreatened(fn, options = {}) {
366
+ const entry = { fn, range: options.range ?? 8, melee: options.melee ?? true };
367
+ this.#threat.push(entry);
368
+ return () => {
369
+ const i = this.#threat.indexOf(entry);
370
+ if (i >= 0)
371
+ this.#threat.splice(i, 1);
372
+ };
373
+ }
374
+ #threat = [];
375
+ #aimedAt = new Map();
376
+ /** @internal Whether anything listens for threats (the server checks aims only then). */
377
+ get watchesThreats() {
378
+ return this.#threat.length > 0;
379
+ }
380
+ /** @internal Checks whether `player` is aiming at it (the server, a few times a second). */
381
+ checkAim(player) {
382
+ if (!this.#threat.length || this.dead)
383
+ return;
384
+ const range = Math.max(...this.#threat.map((t) => t.range));
385
+ if (!player.isAimingAt(this, { range }))
386
+ return;
387
+ const now = Date.now();
388
+ if (now - (this.#aimedAt.get(player) ?? 0) < 1000)
389
+ return;
390
+ this.#aimedAt.set(player, now);
391
+ const d = Math.hypot(player.position.x - this.position.x, player.position.y - this.position.y);
392
+ for (const t of [...this.#threat]) {
393
+ if (d <= t.range)
394
+ this.#threatCall(t.fn, player, "aim");
395
+ }
396
+ }
397
+ /** @internal */
398
+ threatenedBy(player, how) {
399
+ for (const t of [...this.#threat])
400
+ if (how === "aim" || t.melee)
401
+ this.#threatCall(t.fn, player, how);
402
+ }
403
+ #threatCall(fn, player, how) {
404
+ try {
405
+ fn(player, how);
406
+ }
407
+ catch (err) {
408
+ console.error("[sagl] ped onThreatened threw:", err);
409
+ }
410
+ }
411
+ /** Whether it's carrying out an order. */
412
+ get busy() {
413
+ return this.#order !== null;
414
+ }
415
+ on(event, listener) {
416
+ (this.#listeners[event] ??= []).push(listener);
417
+ return this;
418
+ }
419
+ off(event, listener) {
420
+ const list = this.#listeners[event];
421
+ const i = list?.indexOf(listener) ?? -1;
422
+ if (list && i >= 0)
423
+ list.splice(i, 1);
424
+ return this;
425
+ }
426
+ #emit(event, ...args) {
427
+ for (const fn of [...(this.#listeners[event] ?? [])]) {
428
+ try {
429
+ fn(...args);
430
+ }
431
+ catch (err) {
432
+ console.error(`[sagl] ped ${event} handler threw:`, err);
433
+ }
434
+ }
435
+ }
436
+ #finishOrder(result) {
437
+ const o = this.#order;
438
+ if (!o)
439
+ return;
440
+ this.#order = null;
441
+ o.resolve(result);
442
+ }
443
+ /** @internal The server's word on an order. */
444
+ handleOrder(orderId, step, state, reason) {
445
+ if (state === "stepDone") {
446
+ this.#emit("stepDone", step, orderId);
447
+ return;
448
+ }
449
+ if (state === "done")
450
+ this.#emit("orderDone", orderId);
451
+ else
452
+ this.#emit("orderFailed", reason, step, orderId);
453
+ if (this.#order?.id === orderId) {
454
+ this.#finishOrder(state === "done" ? { status: "done", step } : { status: "failed", reason, step });
455
+ }
456
+ }
457
+ /** Where it is, as its owner last reported. */
458
+ get position() {
459
+ const s = this.#state();
460
+ return { x: s?.x ?? 0, y: s?.y ?? 0, z: s?.z ?? 0 };
461
+ }
462
+ /** Facing, degrees. */
463
+ get heading() {
464
+ return ((this.#state()?.heading ?? 0) * 180) / Math.PI;
465
+ }
466
+ get health() {
467
+ return this.#state()?.health ?? 0;
468
+ }
469
+ get armour() {
470
+ return this.#state()?.armour ?? 0;
471
+ }
472
+ /** The weapon it holds (`Weapon`), 0 unarmed. */
473
+ get weapon() {
474
+ return this.#state()?.weapon ?? 0;
475
+ }
476
+ get dead() {
477
+ return this.#state()?.dead ?? false;
478
+ }
479
+ get world() {
480
+ return this.#state()?.world ?? 0;
481
+ }
482
+ /** The player whose game simulates it, or null (nobody near). */
483
+ get owner() {
484
+ const id = this.#state()?.ownerId;
485
+ return id === null || id === undefined ? null : this.#player(id) ?? null;
486
+ }
487
+ /** Part of the ambient population (the server removes it when nobody is near). */
488
+ get ambient() {
489
+ return this.#state()?.ambient ?? false;
490
+ }
491
+ /** The vehicle it's in, or null on foot. */
492
+ get vehicle() {
493
+ const id = this.#state()?.vehicleId;
494
+ return id === null || id === undefined ? null : this.#vehicle(id) ?? null;
495
+ }
496
+ /** Its seat in `vehicle` (0 driver, 1-8 passenger), or null on foot. */
497
+ get seat() {
498
+ return this.#state()?.seat ?? null;
499
+ }
500
+ /**
501
+ * Puts it in a vehicle seat (0 driver, the default) for everyone. A driver
502
+ * whose behaviour is "wander" drives around; it still reacts as any
503
+ * driver would (it gets out and runs, fights back...). Throws if the seat
504
+ * is taken or the vehicle is in another world.
505
+ */
506
+ putInVehicle(vehicle, seat = 0) {
507
+ if (this.#exists && !this.#native.putPedInVehicle(this.id, vehicle.id, seat)) {
508
+ throw new Error(`seat ${seat} of vehicle ${vehicle.id} isn't free for ped ${this.id}`);
509
+ }
510
+ }
511
+ /** Takes it out of its vehicle (beside it). */
512
+ removeFromVehicle() {
513
+ if (this.#exists)
514
+ this.#native.removePedFromVehicle(this.id);
515
+ }
516
+ /**
517
+ * Hands it back to the game, like `MARK_CHAR_AS_NO_LONGER_NEEDED`: its
518
+ * order stops, everyone sees it, and the server removes it as it does the
519
+ * ambient population, once nobody is near (a body after it has lain a
520
+ * while). The Ped object stays usable until then.
521
+ */
522
+ release() {
523
+ if (!this.#exists)
524
+ return;
525
+ this.stop();
526
+ this.controller = null;
527
+ this.visibleTo = "world";
528
+ this.#native.releasePed(this.id);
529
+ }
530
+ /** Removes it for everyone. */
531
+ destroy() {
532
+ if (this.#exists)
533
+ this.#destroy(this);
534
+ }
535
+ }
536
+ //# sourceMappingURL=ped.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ped.js","sourceRoot":"","sources":["../src/ped.ts"],"names":[],"mappings":"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"}