@sagl/server 0.0.0-stage → 0.1.0-next.51
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/LICENSE +21 -0
- package/README.md +61 -2
- package/dist/actions.d.ts +46 -0
- package/dist/actions.js +80 -0
- package/dist/actions.js.map +1 -0
- package/dist/animations.d.ts +32 -0
- package/dist/animations.js +95 -0
- package/dist/animations.js.map +1 -0
- package/dist/audio.d.ts +180 -0
- package/dist/audio.js +353 -0
- package/dist/audio.js.map +1 -0
- package/dist/audio_effects.d.ts +219 -0
- package/dist/audio_effects.js +84 -0
- package/dist/audio_effects.js.map +1 -0
- package/dist/camera.d.ts +188 -0
- package/dist/camera.js +247 -0
- package/dist/camera.js.map +1 -0
- package/dist/claims.d.ts +27 -0
- package/dist/claims.js +48 -0
- package/dist/claims.js.map +1 -0
- package/dist/commands.d.ts +135 -0
- package/dist/commands.js +373 -0
- package/dist/commands.js.map +1 -0
- package/dist/console.d.ts +21 -0
- package/dist/console.js +100 -0
- package/dist/console.js.map +1 -0
- package/dist/constants.d.ts +654 -0
- package/dist/constants.js +657 -0
- package/dist/constants.js.map +1 -0
- package/dist/cutscene.d.ts +47 -0
- package/dist/cutscene.js +190 -0
- package/dist/cutscene.js.map +1 -0
- package/dist/draw.d.ts +106 -0
- package/dist/draw.js +132 -0
- package/dist/draw.js.map +1 -0
- package/dist/effects.d.ts +91 -0
- package/dist/effects.js +116 -0
- package/dist/effects.js.map +1 -0
- package/dist/gangzones.d.ts +47 -0
- package/dist/gangzones.js +122 -0
- package/dist/gangzones.js.map +1 -0
- package/dist/geo.d.ts +11 -0
- package/dist/geo.js +25 -0
- package/dist/geo.js.map +1 -0
- package/dist/hud.d.ts +159 -0
- package/dist/hud.js +247 -0
- package/dist/hud.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +81 -0
- package/dist/interaction.js +143 -0
- package/dist/interaction.js.map +1 -0
- package/dist/junctions.d.ts +1 -0
- package/dist/junctions.js +330 -0
- package/dist/junctions.js.map +1 -0
- package/dist/map.d.ts +55 -0
- package/dist/map.js +71 -0
- package/dist/map.js.map +1 -0
- package/dist/menu.d.ts +96 -0
- package/dist/menu.js +129 -0
- package/dist/menu.js.map +1 -0
- package/dist/mission.d.ts +482 -0
- package/dist/mission.js +1258 -0
- package/dist/mission.js.map +1 -0
- package/dist/models.d.ts +56 -0
- package/dist/models.js +71 -0
- package/dist/models.js.map +1 -0
- package/dist/modshop.d.ts +229 -0
- package/dist/modshop.js +904 -0
- package/dist/modshop.js.map +1 -0
- package/dist/modshop_data.d.ts +44 -0
- package/dist/modshop_data.js +287 -0
- package/dist/modshop_data.js.map +1 -0
- package/dist/native.d.ts +809 -0
- package/dist/native.js +27 -0
- package/dist/native.js.map +1 -0
- package/dist/objects.d.ts +249 -0
- package/dist/objects.js +455 -0
- package/dist/objects.js.map +1 -0
- package/dist/paint.d.ts +124 -0
- package/dist/paint.js +84 -0
- package/dist/paint.js.map +1 -0
- package/dist/paynspray.d.ts +44 -0
- package/dist/paynspray.js +177 -0
- package/dist/paynspray.js.map +1 -0
- package/dist/ped.d.ts +335 -0
- package/dist/ped.js +536 -0
- package/dist/ped.js.map +1 -0
- package/dist/player.d.ts +685 -0
- package/dist/player.js +1163 -0
- package/dist/player.js.map +1 -0
- package/dist/screeneffects.d.ts +99 -0
- package/dist/screeneffects.js +257 -0
- package/dist/screeneffects.js.map +1 -0
- package/dist/scripts.d.ts +69 -0
- package/dist/scripts.js +125 -0
- package/dist/scripts.js.map +1 -0
- package/dist/server.d.ts +713 -0
- package/dist/server.js +1080 -0
- package/dist/server.js.map +1 -0
- package/dist/shopblips.d.ts +9 -0
- package/dist/shopblips.js +30 -0
- package/dist/shopblips.js.map +1 -0
- package/dist/special.d.ts +33 -0
- package/dist/special.js +26 -0
- package/dist/special.js.map +1 -0
- package/dist/splash.d.ts +42 -0
- package/dist/splash.js +55 -0
- package/dist/splash.js.map +1 -0
- package/dist/text.d.ts +19 -0
- package/dist/text.js +25 -0
- package/dist/text.js.map +1 -0
- package/dist/ui.d.ts +141 -0
- package/dist/ui.js +243 -0
- package/dist/ui.js.map +1 -0
- package/dist/vehicle.d.ts +306 -0
- package/dist/vehicle.js +612 -0
- package/dist/vehicle.js.map +1 -0
- package/dist/vehiclecolors.d.ts +26 -0
- package/dist/vehiclecolors.js +49 -0
- package/dist/vehiclecolors.js.map +1 -0
- package/dist/world.d.ts +222 -0
- package/dist/world.js +227 -0
- package/dist/world.js.map +1 -0
- package/dist/zone.d.ts +89 -0
- package/dist/zone.js +140 -0
- package/dist/zone.js.map +1 -0
- 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
|
package/dist/ped.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ped.js","sourceRoot":"","sources":["../src/ped.ts"],"names":[],"mappings":"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"}
|