@quake2ts/server 0.0.1 → 0.0.740
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/dist/{index.cjs → cjs/index.cjs} +175 -224
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/{index.js → esm/index.js} +44 -82
- package/dist/esm/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/{client.d.ts → types/client.d.ts} +1 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/{dedicated.d.ts → types/dedicated.d.ts} +1 -0
- package/dist/types/dedicated.d.ts.map +1 -0
- package/dist/{index.d.ts → types/index.d.ts} +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{net → types/net}/nodeWsDriver.d.ts +1 -0
- package/dist/types/net/nodeWsDriver.d.ts.map +1 -0
- package/dist/{protocol → types/protocol}/player.d.ts +1 -0
- package/dist/types/protocol/player.d.ts.map +1 -0
- package/dist/{protocol → types/protocol}/write.d.ts +1 -0
- package/dist/types/protocol/write.d.ts.map +1 -0
- package/dist/{protocol.d.ts → types/protocol.d.ts} +1 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/{server.d.ts → types/server.d.ts} +1 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/{transport.d.ts → types/transport.d.ts} +1 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/{transports → types/transports}/websocket.d.ts +1 -0
- package/dist/types/transports/websocket.d.ts.map +1 -0
- package/package.json +26 -14
- package/tsconfig.json +11 -5
- package/tsup.config.ts +10 -0
- package/dist/client.js +0 -100
- package/dist/dedicated.js +0 -1104
- package/dist/net/nodeWsDriver.js +0 -122
- package/dist/protocol/player.js +0 -1
- package/dist/protocol/write.js +0 -167
- package/dist/protocol.js +0 -71
- package/dist/server.js +0 -12
- package/dist/transport.js +0 -1
- package/dist/transports/websocket.js +0 -38
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,47 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var WebSocket = require('ws');
|
|
4
|
+
var game = require('@quake2ts/game');
|
|
5
|
+
var shared = require('@quake2ts/shared');
|
|
6
|
+
var engine = require('@quake2ts/engine');
|
|
7
|
+
var fs = require('fs/promises');
|
|
8
|
+
var path = require('path');
|
|
9
|
+
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
function _interopNamespace(e) {
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
17
25
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
ClientMessageParser: () => ClientMessageParser,
|
|
34
|
-
ClientState: () => ClientState,
|
|
35
|
-
DedicatedServer: () => DedicatedServer,
|
|
36
|
-
ServerState: () => ServerState,
|
|
37
|
-
WebSocketNetDriver: () => WebSocketNetDriver,
|
|
38
|
-
createClient: () => createClient,
|
|
39
|
-
createServer: () => createServer
|
|
40
|
-
});
|
|
41
|
-
module.exports = __toCommonJS(index_exports);
|
|
30
|
+
var WebSocket__default = /*#__PURE__*/_interopDefault(WebSocket);
|
|
31
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
32
|
+
var path__namespace = /*#__PURE__*/_interopNamespace(path);
|
|
42
33
|
|
|
43
34
|
// src/net/nodeWsDriver.ts
|
|
44
|
-
var import_ws = __toESM(require("ws"), 1);
|
|
45
35
|
var WebSocketNetDriver = class {
|
|
46
36
|
constructor() {
|
|
47
37
|
this.socket = null;
|
|
@@ -52,7 +42,7 @@ var WebSocketNetDriver = class {
|
|
|
52
42
|
async connect(url) {
|
|
53
43
|
return new Promise((resolve2, reject) => {
|
|
54
44
|
try {
|
|
55
|
-
this.socket = new
|
|
45
|
+
this.socket = new WebSocket__default.default(url);
|
|
56
46
|
this.socket.binaryType = "arraybuffer";
|
|
57
47
|
this.socket.onopen = () => {
|
|
58
48
|
resolve2();
|
|
@@ -132,7 +122,7 @@ var WebSocketNetDriver = class {
|
|
|
132
122
|
}
|
|
133
123
|
}
|
|
134
124
|
send(data) {
|
|
135
|
-
if (this.socket && this.socket.readyState ===
|
|
125
|
+
if (this.socket && this.socket.readyState === WebSocket__default.default.OPEN) {
|
|
136
126
|
this.socket.send(data);
|
|
137
127
|
} else {
|
|
138
128
|
console.warn("Attempted to send data on closed or connecting socket");
|
|
@@ -148,15 +138,9 @@ var WebSocketNetDriver = class {
|
|
|
148
138
|
this.errorCallback = callback;
|
|
149
139
|
}
|
|
150
140
|
isConnected() {
|
|
151
|
-
return this.socket !== null && this.socket.readyState ===
|
|
141
|
+
return this.socket !== null && this.socket.readyState === WebSocket__default.default.OPEN;
|
|
152
142
|
}
|
|
153
143
|
};
|
|
154
|
-
|
|
155
|
-
// src/dedicated.ts
|
|
156
|
-
var import_game = require("@quake2ts/game");
|
|
157
|
-
|
|
158
|
-
// src/client.ts
|
|
159
|
-
var import_shared = require("@quake2ts/shared");
|
|
160
144
|
var ClientState = /* @__PURE__ */ ((ClientState2) => {
|
|
161
145
|
ClientState2[ClientState2["Free"] = 0] = "Free";
|
|
162
146
|
ClientState2[ClientState2["Zombie"] = 1] = "Zombie";
|
|
@@ -167,7 +151,7 @@ var ClientState = /* @__PURE__ */ ((ClientState2) => {
|
|
|
167
151
|
})(ClientState || {});
|
|
168
152
|
function createClient(index, net) {
|
|
169
153
|
const frames = [];
|
|
170
|
-
for (let i = 0; i <
|
|
154
|
+
for (let i = 0; i < shared.UPDATE_BACKUP; i++) {
|
|
171
155
|
frames.push({
|
|
172
156
|
areaBytes: 0,
|
|
173
157
|
areaBits: new Uint8Array(0),
|
|
@@ -180,7 +164,7 @@ function createClient(index, net) {
|
|
|
180
164
|
packetCRC: 0
|
|
181
165
|
});
|
|
182
166
|
}
|
|
183
|
-
const netchan = new
|
|
167
|
+
const netchan = new shared.NetChan();
|
|
184
168
|
netchan.setup(Math.floor(Math.random() * 65536));
|
|
185
169
|
return {
|
|
186
170
|
index,
|
|
@@ -256,9 +240,6 @@ function createEmptyPlayerState() {
|
|
|
256
240
|
renderfx: 0
|
|
257
241
|
};
|
|
258
242
|
}
|
|
259
|
-
|
|
260
|
-
// src/protocol.ts
|
|
261
|
-
var import_shared2 = require("@quake2ts/shared");
|
|
262
243
|
var ClientMessageParser = class {
|
|
263
244
|
constructor(stream, handler) {
|
|
264
245
|
this.stream = stream;
|
|
@@ -269,16 +250,16 @@ var ClientMessageParser = class {
|
|
|
269
250
|
const cmdId = this.stream.readByte();
|
|
270
251
|
if (cmdId === -1) break;
|
|
271
252
|
switch (cmdId) {
|
|
272
|
-
case
|
|
253
|
+
case shared.ClientCommand.move:
|
|
273
254
|
this.parseMove();
|
|
274
255
|
break;
|
|
275
|
-
case
|
|
256
|
+
case shared.ClientCommand.userinfo:
|
|
276
257
|
this.parseUserInfo();
|
|
277
258
|
break;
|
|
278
|
-
case
|
|
259
|
+
case shared.ClientCommand.stringcmd:
|
|
279
260
|
this.parseStringCmd();
|
|
280
261
|
break;
|
|
281
|
-
case
|
|
262
|
+
case shared.ClientCommand.nop:
|
|
282
263
|
this.handler.onNop();
|
|
283
264
|
break;
|
|
284
265
|
default:
|
|
@@ -327,13 +308,6 @@ var ClientMessageParser = class {
|
|
|
327
308
|
}
|
|
328
309
|
};
|
|
329
310
|
|
|
330
|
-
// src/dedicated.ts
|
|
331
|
-
var import_shared5 = require("@quake2ts/shared");
|
|
332
|
-
var import_engine = require("@quake2ts/engine");
|
|
333
|
-
var import_promises = __toESM(require("fs/promises"), 1);
|
|
334
|
-
var path = __toESM(require("path"), 1);
|
|
335
|
-
var import_game2 = require("@quake2ts/game");
|
|
336
|
-
|
|
337
311
|
// src/server.ts
|
|
338
312
|
var ServerState = /* @__PURE__ */ ((ServerState2) => {
|
|
339
313
|
ServerState2[ServerState2["Dead"] = 0] = "Dead";
|
|
@@ -344,36 +318,27 @@ var ServerState = /* @__PURE__ */ ((ServerState2) => {
|
|
|
344
318
|
ServerState2[ServerState2["Pic"] = 5] = "Pic";
|
|
345
319
|
return ServerState2;
|
|
346
320
|
})(ServerState || {});
|
|
347
|
-
|
|
348
|
-
// src/dedicated.ts
|
|
349
|
-
var import_shared6 = require("@quake2ts/shared");
|
|
350
|
-
|
|
351
|
-
// src/protocol/player.ts
|
|
352
|
-
var import_shared3 = require("@quake2ts/shared");
|
|
353
|
-
|
|
354
|
-
// src/protocol/write.ts
|
|
355
|
-
var import_shared4 = require("@quake2ts/shared");
|
|
356
321
|
function writeServerCommand(writer, event, ...args) {
|
|
357
322
|
writer.writeByte(event);
|
|
358
323
|
switch (event) {
|
|
359
|
-
case
|
|
324
|
+
case shared.ServerCommand.print: {
|
|
360
325
|
const level = args[0];
|
|
361
326
|
const text = args[1];
|
|
362
327
|
writer.writeByte(level);
|
|
363
328
|
writer.writeString(text);
|
|
364
329
|
break;
|
|
365
330
|
}
|
|
366
|
-
case
|
|
331
|
+
case shared.ServerCommand.centerprint: {
|
|
367
332
|
const text = args[0];
|
|
368
333
|
writer.writeString(text);
|
|
369
334
|
break;
|
|
370
335
|
}
|
|
371
|
-
case
|
|
336
|
+
case shared.ServerCommand.stufftext: {
|
|
372
337
|
const text = args[0];
|
|
373
338
|
writer.writeString(text);
|
|
374
339
|
break;
|
|
375
340
|
}
|
|
376
|
-
case
|
|
341
|
+
case shared.ServerCommand.sound: {
|
|
377
342
|
const flags = args[0];
|
|
378
343
|
const soundNum = args[1];
|
|
379
344
|
const volume = args[2];
|
|
@@ -404,14 +369,14 @@ function writeServerCommand(writer, event, ...args) {
|
|
|
404
369
|
}
|
|
405
370
|
break;
|
|
406
371
|
}
|
|
407
|
-
case
|
|
372
|
+
case shared.ServerCommand.muzzleflash: {
|
|
408
373
|
const entIndex = args[0];
|
|
409
374
|
const flashType = args[1];
|
|
410
375
|
writer.writeShort(entIndex);
|
|
411
376
|
writer.writeByte(flashType);
|
|
412
377
|
break;
|
|
413
378
|
}
|
|
414
|
-
case
|
|
379
|
+
case shared.ServerCommand.temp_entity: {
|
|
415
380
|
const type = args[0];
|
|
416
381
|
writer.writeByte(type);
|
|
417
382
|
writeTempEntity(writer, type, args.slice(1));
|
|
@@ -424,70 +389,70 @@ function writeServerCommand(writer, event, ...args) {
|
|
|
424
389
|
}
|
|
425
390
|
function writeTempEntity(writer, type, args) {
|
|
426
391
|
switch (type) {
|
|
427
|
-
case
|
|
428
|
-
case
|
|
429
|
-
case
|
|
430
|
-
case
|
|
431
|
-
case
|
|
432
|
-
case
|
|
433
|
-
case
|
|
434
|
-
case
|
|
435
|
-
case
|
|
436
|
-
case
|
|
437
|
-
case
|
|
438
|
-
case
|
|
439
|
-
case
|
|
440
|
-
case
|
|
441
|
-
case
|
|
442
|
-
case
|
|
392
|
+
case shared.TempEntity.ROCKET_EXPLOSION:
|
|
393
|
+
case shared.TempEntity.GRENADE_EXPLOSION:
|
|
394
|
+
case shared.TempEntity.EXPLOSION1:
|
|
395
|
+
case shared.TempEntity.EXPLOSION2:
|
|
396
|
+
case shared.TempEntity.ROCKET_EXPLOSION_WATER:
|
|
397
|
+
case shared.TempEntity.GRENADE_EXPLOSION_WATER:
|
|
398
|
+
case shared.TempEntity.BFG_EXPLOSION:
|
|
399
|
+
case shared.TempEntity.BFG_BIGEXPLOSION:
|
|
400
|
+
case shared.TempEntity.PLASMA_EXPLOSION:
|
|
401
|
+
case shared.TempEntity.PLAIN_EXPLOSION:
|
|
402
|
+
case shared.TempEntity.TRACKER_EXPLOSION:
|
|
403
|
+
case shared.TempEntity.EXPLOSION1_BIG:
|
|
404
|
+
case shared.TempEntity.EXPLOSION1_NP:
|
|
405
|
+
case shared.TempEntity.EXPLOSION1_NL:
|
|
406
|
+
case shared.TempEntity.EXPLOSION2_NL:
|
|
407
|
+
case shared.TempEntity.BERSERK_SLAM:
|
|
443
408
|
writer.writePos(args[0]);
|
|
444
409
|
break;
|
|
445
|
-
case
|
|
446
|
-
case
|
|
410
|
+
case shared.TempEntity.BLASTER:
|
|
411
|
+
case shared.TempEntity.FLECHETTE:
|
|
447
412
|
writer.writePos(args[0]);
|
|
448
413
|
writer.writeDir(args[1]);
|
|
449
414
|
break;
|
|
450
|
-
case
|
|
451
|
-
case
|
|
452
|
-
case
|
|
453
|
-
case
|
|
454
|
-
case
|
|
455
|
-
case
|
|
456
|
-
case
|
|
415
|
+
case shared.TempEntity.RAILTRAIL:
|
|
416
|
+
case shared.TempEntity.DEBUGTRAIL:
|
|
417
|
+
case shared.TempEntity.BUBBLETRAIL:
|
|
418
|
+
case shared.TempEntity.BUBBLETRAIL2:
|
|
419
|
+
case shared.TempEntity.BFG_LASER:
|
|
420
|
+
case shared.TempEntity.LIGHTNING_BEAM:
|
|
421
|
+
case shared.TempEntity.LIGHTNING:
|
|
457
422
|
writer.writePos(args[0]);
|
|
458
423
|
writer.writePos(args[1]);
|
|
459
424
|
break;
|
|
460
|
-
case
|
|
461
|
-
case
|
|
462
|
-
case
|
|
463
|
-
case
|
|
464
|
-
case
|
|
465
|
-
case
|
|
466
|
-
case
|
|
425
|
+
case shared.TempEntity.LASER_SPARKS:
|
|
426
|
+
case shared.TempEntity.WELDING_SPARKS:
|
|
427
|
+
case shared.TempEntity.TUNNEL_SPARKS:
|
|
428
|
+
case shared.TempEntity.ELECTRIC_SPARKS:
|
|
429
|
+
case shared.TempEntity.HEATBEAM_SPARKS:
|
|
430
|
+
case shared.TempEntity.HEATBEAM_STEAM:
|
|
431
|
+
case shared.TempEntity.STEAM:
|
|
467
432
|
writer.writeByte(args[0]);
|
|
468
433
|
writer.writePos(args[1]);
|
|
469
434
|
writer.writeDir(args[2]);
|
|
470
435
|
writer.writeByte(args[3] || 0);
|
|
471
436
|
break;
|
|
472
|
-
case
|
|
473
|
-
case
|
|
437
|
+
case shared.TempEntity.PARASITE_ATTACK:
|
|
438
|
+
case shared.TempEntity.MEDIC_CABLE_ATTACK:
|
|
474
439
|
const ent = args[0];
|
|
475
440
|
writer.writeShort(ent ? ent.index : 0);
|
|
476
441
|
writer.writePos(args[1]);
|
|
477
442
|
writer.writePos(args[2]);
|
|
478
443
|
break;
|
|
479
|
-
case
|
|
480
|
-
case
|
|
481
|
-
case
|
|
482
|
-
case
|
|
483
|
-
case
|
|
484
|
-
case
|
|
444
|
+
case shared.TempEntity.GUNSHOT:
|
|
445
|
+
case shared.TempEntity.BLOOD:
|
|
446
|
+
case shared.TempEntity.SPARKS:
|
|
447
|
+
case shared.TempEntity.BULLET_SPARKS:
|
|
448
|
+
case shared.TempEntity.SCREEN_SPARKS:
|
|
449
|
+
case shared.TempEntity.SHIELD_SPARKS:
|
|
485
450
|
writer.writePos(args[0]);
|
|
486
451
|
writer.writeDir(args[1]);
|
|
487
452
|
break;
|
|
488
|
-
case
|
|
489
|
-
case
|
|
490
|
-
case
|
|
453
|
+
case shared.TempEntity.SPLASH:
|
|
454
|
+
case shared.TempEntity.POWER_SPLASH:
|
|
455
|
+
case shared.TempEntity.WIDOWSPLASH:
|
|
491
456
|
writer.writeByte(args[0]);
|
|
492
457
|
writer.writePos(args[1]);
|
|
493
458
|
writer.writeDir(args[2]);
|
|
@@ -498,12 +463,6 @@ function writeTempEntity(writer, type, args) {
|
|
|
498
463
|
break;
|
|
499
464
|
}
|
|
500
465
|
}
|
|
501
|
-
|
|
502
|
-
// src/dedicated.ts
|
|
503
|
-
var import_shared7 = require("@quake2ts/shared");
|
|
504
|
-
|
|
505
|
-
// src/transports/websocket.ts
|
|
506
|
-
var import_ws2 = require("ws");
|
|
507
466
|
var WebSocketTransport = class {
|
|
508
467
|
constructor() {
|
|
509
468
|
this.wss = null;
|
|
@@ -512,7 +471,7 @@ var WebSocketTransport = class {
|
|
|
512
471
|
}
|
|
513
472
|
async listen(port) {
|
|
514
473
|
return new Promise((resolve2) => {
|
|
515
|
-
this.wss = new
|
|
474
|
+
this.wss = new WebSocket.WebSocketServer({ port });
|
|
516
475
|
this.wss.on("listening", () => resolve2());
|
|
517
476
|
this.wss.on("connection", (ws, req) => {
|
|
518
477
|
const driver = new WebSocketNetDriver();
|
|
@@ -579,11 +538,11 @@ var DedicatedServer = class {
|
|
|
579
538
|
frame: 0,
|
|
580
539
|
name: "",
|
|
581
540
|
collisionModel: null,
|
|
582
|
-
configStrings: new Array(
|
|
583
|
-
baselines: new Array(
|
|
541
|
+
configStrings: new Array(shared.MAX_CONFIGSTRINGS).fill(""),
|
|
542
|
+
baselines: new Array(shared.MAX_EDICTS).fill(null),
|
|
584
543
|
multicastBuf: new Uint8Array(0)
|
|
585
544
|
};
|
|
586
|
-
this.entityIndex = new
|
|
545
|
+
this.entityIndex = new shared.CollisionEntityIndex();
|
|
587
546
|
}
|
|
588
547
|
setTransport(transport) {
|
|
589
548
|
if (this.svs.initialized) {
|
|
@@ -607,8 +566,8 @@ var DedicatedServer = class {
|
|
|
607
566
|
if (client && client.state >= 2 /* Connected */) {
|
|
608
567
|
console.log(`Kicking client ${clientId}`);
|
|
609
568
|
if (client.netchan) {
|
|
610
|
-
const writer = new
|
|
611
|
-
writer.writeByte(
|
|
569
|
+
const writer = new shared.BinaryWriter();
|
|
570
|
+
writer.writeByte(shared.ServerCommand.print);
|
|
612
571
|
writer.writeByte(2);
|
|
613
572
|
writer.writeString("Kicked by server.\n");
|
|
614
573
|
try {
|
|
@@ -624,8 +583,8 @@ var DedicatedServer = class {
|
|
|
624
583
|
console.log(`Changing map to ${mapName}`);
|
|
625
584
|
this.multicast(
|
|
626
585
|
{ x: 0, y: 0, z: 0 },
|
|
627
|
-
|
|
628
|
-
|
|
586
|
+
game.MulticastType.All,
|
|
587
|
+
shared.ServerCommand.print,
|
|
629
588
|
2,
|
|
630
589
|
`Changing map to ${mapName}...
|
|
631
590
|
`
|
|
@@ -638,7 +597,7 @@ var DedicatedServer = class {
|
|
|
638
597
|
this.sv.configStrings.fill("");
|
|
639
598
|
this.sv.baselines.fill(null);
|
|
640
599
|
this.history.clear();
|
|
641
|
-
this.entityIndex = new
|
|
600
|
+
this.entityIndex = new shared.CollisionEntityIndex();
|
|
642
601
|
await this.loadMap(mapName);
|
|
643
602
|
this.initGame();
|
|
644
603
|
for (const client of this.svs.clients) {
|
|
@@ -646,7 +605,7 @@ var DedicatedServer = class {
|
|
|
646
605
|
client.edict = null;
|
|
647
606
|
client.state = 2 /* Connected */;
|
|
648
607
|
this.sendServerData(client);
|
|
649
|
-
client.netchan.writeReliableByte(
|
|
608
|
+
client.netchan.writeReliableByte(shared.ServerCommand.stufftext);
|
|
650
609
|
client.netchan.writeReliableString(`map ${mapName}
|
|
651
610
|
`);
|
|
652
611
|
this.handleBegin(client);
|
|
@@ -694,21 +653,21 @@ var DedicatedServer = class {
|
|
|
694
653
|
this.sv.name = mapName;
|
|
695
654
|
let arrayBuffer;
|
|
696
655
|
try {
|
|
697
|
-
await
|
|
698
|
-
const mapData = await
|
|
656
|
+
await fs__default.default.access(mapName);
|
|
657
|
+
const mapData = await fs__default.default.readFile(mapName);
|
|
699
658
|
arrayBuffer = mapData.buffer.slice(mapData.byteOffset, mapData.byteOffset + mapData.byteLength);
|
|
700
659
|
} catch (e) {
|
|
701
660
|
console.log(`Map file ${mapName} not found on disk, checking pak.pak...`);
|
|
702
661
|
const possiblePakPaths = [
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
662
|
+
path__namespace.resolve(process.cwd(), "pak.pak"),
|
|
663
|
+
path__namespace.resolve(process.cwd(), "../pak.pak"),
|
|
664
|
+
path__namespace.resolve(process.cwd(), "../../pak.pak"),
|
|
665
|
+
path__namespace.resolve("baseq2/pak.pak")
|
|
707
666
|
];
|
|
708
667
|
let pakPath = null;
|
|
709
668
|
for (const p of possiblePakPaths) {
|
|
710
669
|
try {
|
|
711
|
-
await
|
|
670
|
+
await fs__default.default.access(p);
|
|
712
671
|
pakPath = p;
|
|
713
672
|
break;
|
|
714
673
|
} catch {
|
|
@@ -717,9 +676,9 @@ var DedicatedServer = class {
|
|
|
717
676
|
if (!pakPath) {
|
|
718
677
|
throw new Error(`Map ${mapName} not found and pak.pak not found.`);
|
|
719
678
|
}
|
|
720
|
-
const pakBuffer = await
|
|
679
|
+
const pakBuffer = await fs__default.default.readFile(pakPath);
|
|
721
680
|
const pakArrayBuffer = pakBuffer.buffer.slice(pakBuffer.byteOffset, pakBuffer.byteOffset + pakBuffer.byteLength);
|
|
722
|
-
const pak =
|
|
681
|
+
const pak = engine.PakArchive.fromArrayBuffer("pak.pak", pakArrayBuffer);
|
|
723
682
|
const entry = pak.getEntry(mapName);
|
|
724
683
|
if (!entry) {
|
|
725
684
|
throw new Error(`Map ${mapName} not found in pak.pak`);
|
|
@@ -727,7 +686,7 @@ var DedicatedServer = class {
|
|
|
727
686
|
const data = pak.readFile(mapName);
|
|
728
687
|
arrayBuffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
729
688
|
}
|
|
730
|
-
const bspMap =
|
|
689
|
+
const bspMap = engine.parseBsp(arrayBuffer);
|
|
731
690
|
const planes = bspMap.planes.map((p) => {
|
|
732
691
|
const normal = { x: p.normal[0], y: p.normal[1], z: p.normal[2] };
|
|
733
692
|
let signbits = 0;
|
|
@@ -834,7 +793,7 @@ var DedicatedServer = class {
|
|
|
834
793
|
ent: hitEntity
|
|
835
794
|
};
|
|
836
795
|
}
|
|
837
|
-
const worldResult = this.sv.collisionModel ?
|
|
796
|
+
const worldResult = this.sv.collisionModel ? shared.traceBox({
|
|
838
797
|
start,
|
|
839
798
|
end,
|
|
840
799
|
mins: mins || void 0,
|
|
@@ -885,7 +844,7 @@ var DedicatedServer = class {
|
|
|
885
844
|
},
|
|
886
845
|
setLagCompensation: (active, client, lagMs) => this.setLagCompensation(active, client, lagMs)
|
|
887
846
|
};
|
|
888
|
-
this.game =
|
|
847
|
+
this.game = game.createGame(imports, this, {
|
|
889
848
|
gravity: { x: 0, y: 0, z: -800 },
|
|
890
849
|
deathmatch: this.options.deathmatch !== false
|
|
891
850
|
});
|
|
@@ -897,8 +856,8 @@ var DedicatedServer = class {
|
|
|
897
856
|
populateBaselines() {
|
|
898
857
|
if (!this.game) return;
|
|
899
858
|
this.game.entities.forEachEntity((ent) => {
|
|
900
|
-
if (ent.index >=
|
|
901
|
-
if (ent.modelindex > 0 || ent.solid !==
|
|
859
|
+
if (ent.index >= shared.MAX_EDICTS) return;
|
|
860
|
+
if (ent.modelindex > 0 || ent.solid !== game.Solid.Not) {
|
|
902
861
|
this.sv.baselines[ent.index] = this.entityToState(ent);
|
|
903
862
|
}
|
|
904
863
|
});
|
|
@@ -973,8 +932,8 @@ var DedicatedServer = class {
|
|
|
973
932
|
}
|
|
974
933
|
}
|
|
975
934
|
handleMove(client, cmd, checksum, lastFrame) {
|
|
976
|
-
if (lastFrame > 0 && lastFrame <= client.lastFrame && lastFrame > client.lastFrame -
|
|
977
|
-
const frameIdx = lastFrame %
|
|
935
|
+
if (lastFrame > 0 && lastFrame <= client.lastFrame && lastFrame > client.lastFrame - shared.UPDATE_BACKUP) {
|
|
936
|
+
const frameIdx = lastFrame % shared.UPDATE_BACKUP;
|
|
978
937
|
const frame = client.frames[frameIdx];
|
|
979
938
|
if (frame.packetCRC !== checksum) {
|
|
980
939
|
console.warn(`Client ${client.index} checksum mismatch for frame ${lastFrame}: expected ${frame.packetCRC}, got ${checksum}`);
|
|
@@ -1026,8 +985,8 @@ var DedicatedServer = class {
|
|
|
1026
985
|
`;
|
|
1027
986
|
}
|
|
1028
987
|
}
|
|
1029
|
-
const writer = new
|
|
1030
|
-
writer.writeByte(
|
|
988
|
+
const writer = new shared.BinaryWriter();
|
|
989
|
+
writer.writeByte(shared.ServerCommand.print);
|
|
1031
990
|
writer.writeByte(2);
|
|
1032
991
|
writer.writeString(status);
|
|
1033
992
|
const packet = client.netchan.transmit(writer.getData());
|
|
@@ -1036,8 +995,8 @@ var DedicatedServer = class {
|
|
|
1036
995
|
handleGetChallenge(client) {
|
|
1037
996
|
const challenge = Math.floor(Math.random() * 1e6) + 1;
|
|
1038
997
|
client.challenge = challenge;
|
|
1039
|
-
const writer = new
|
|
1040
|
-
writer.writeByte(
|
|
998
|
+
const writer = new shared.BinaryWriter();
|
|
999
|
+
writer.writeByte(shared.ServerCommand.stufftext);
|
|
1041
1000
|
writer.writeString(`challenge ${challenge}
|
|
1042
1001
|
`);
|
|
1043
1002
|
const packet = client.netchan.transmit(writer.getData());
|
|
@@ -1055,7 +1014,7 @@ var DedicatedServer = class {
|
|
|
1055
1014
|
}
|
|
1056
1015
|
try {
|
|
1057
1016
|
this.sendServerData(client);
|
|
1058
|
-
client.netchan.writeReliableByte(
|
|
1017
|
+
client.netchan.writeReliableByte(shared.ServerCommand.stufftext);
|
|
1059
1018
|
client.netchan.writeReliableString("precache\n");
|
|
1060
1019
|
const packet = client.netchan.transmit();
|
|
1061
1020
|
client.net.send(packet);
|
|
@@ -1065,8 +1024,8 @@ var DedicatedServer = class {
|
|
|
1065
1024
|
}
|
|
1066
1025
|
} else {
|
|
1067
1026
|
console.log(`Client ${client.index} rejected: ${result}`);
|
|
1068
|
-
const writer = new
|
|
1069
|
-
writer.writeByte(
|
|
1027
|
+
const writer = new shared.BinaryWriter();
|
|
1028
|
+
writer.writeByte(shared.ServerCommand.print);
|
|
1070
1029
|
writer.writeByte(2);
|
|
1071
1030
|
writer.writeString(`Connection rejected: ${result}
|
|
1072
1031
|
`);
|
|
@@ -1082,8 +1041,8 @@ var DedicatedServer = class {
|
|
|
1082
1041
|
spawnClient(client) {
|
|
1083
1042
|
if (!this.game) return;
|
|
1084
1043
|
const ent = this.game.clientBegin({
|
|
1085
|
-
inventory:
|
|
1086
|
-
weaponStates:
|
|
1044
|
+
inventory: game.createPlayerInventory(),
|
|
1045
|
+
weaponStates: game.createPlayerWeaponStates(),
|
|
1087
1046
|
buttons: 0,
|
|
1088
1047
|
pm_type: 0,
|
|
1089
1048
|
pm_time: 0,
|
|
@@ -1105,26 +1064,26 @@ var DedicatedServer = class {
|
|
|
1105
1064
|
console.log(`Client ${client.index} entered game`);
|
|
1106
1065
|
}
|
|
1107
1066
|
sendServerData(client) {
|
|
1108
|
-
client.netchan.writeReliableByte(
|
|
1067
|
+
client.netchan.writeReliableByte(shared.ServerCommand.serverdata);
|
|
1109
1068
|
client.netchan.writeReliableLong(34);
|
|
1110
1069
|
client.netchan.writeReliableLong(this.sv.frame);
|
|
1111
1070
|
client.netchan.writeReliableByte(0);
|
|
1112
1071
|
client.netchan.writeReliableString("baseq2");
|
|
1113
1072
|
client.netchan.writeReliableShort(client.index);
|
|
1114
1073
|
client.netchan.writeReliableString(this.sv.name || "maps/test.bsp");
|
|
1115
|
-
for (let i = 0; i <
|
|
1074
|
+
for (let i = 0; i < shared.MAX_CONFIGSTRINGS; i++) {
|
|
1116
1075
|
if (this.sv.configStrings[i]) {
|
|
1117
|
-
client.netchan.writeReliableByte(
|
|
1076
|
+
client.netchan.writeReliableByte(shared.ServerCommand.configstring);
|
|
1118
1077
|
client.netchan.writeReliableShort(i);
|
|
1119
1078
|
client.netchan.writeReliableString(this.sv.configStrings[i]);
|
|
1120
1079
|
}
|
|
1121
1080
|
}
|
|
1122
|
-
const baselineWriter = new
|
|
1123
|
-
for (let i = 0; i <
|
|
1081
|
+
const baselineWriter = new shared.BinaryWriter();
|
|
1082
|
+
for (let i = 0; i < shared.MAX_EDICTS; i++) {
|
|
1124
1083
|
if (this.sv.baselines[i]) {
|
|
1125
1084
|
baselineWriter.reset();
|
|
1126
|
-
baselineWriter.writeByte(
|
|
1127
|
-
|
|
1085
|
+
baselineWriter.writeByte(shared.ServerCommand.spawnbaseline);
|
|
1086
|
+
shared.writeDeltaEntity({}, this.sv.baselines[i], baselineWriter, true, true);
|
|
1128
1087
|
const data = baselineWriter.getData();
|
|
1129
1088
|
for (let j = 0; j < data.length; j++) {
|
|
1130
1089
|
client.netchan.writeReliableByte(data[j]);
|
|
@@ -1133,13 +1092,13 @@ var DedicatedServer = class {
|
|
|
1133
1092
|
}
|
|
1134
1093
|
}
|
|
1135
1094
|
SV_SetConfigString(index, value) {
|
|
1136
|
-
if (index < 0 || index >=
|
|
1095
|
+
if (index < 0 || index >= shared.MAX_CONFIGSTRINGS) return;
|
|
1137
1096
|
this.sv.configStrings[index] = value;
|
|
1138
1097
|
for (const client of this.svs.clients) {
|
|
1139
1098
|
if (client && client.state >= 2 /* Connected */) {
|
|
1140
1099
|
if (client.netchan) {
|
|
1141
1100
|
try {
|
|
1142
|
-
client.netchan.writeReliableByte(
|
|
1101
|
+
client.netchan.writeReliableByte(shared.ServerCommand.configstring);
|
|
1143
1102
|
client.netchan.writeReliableShort(index);
|
|
1144
1103
|
client.netchan.writeReliableString(value);
|
|
1145
1104
|
const packet = client.netchan.transmit();
|
|
@@ -1153,7 +1112,7 @@ var DedicatedServer = class {
|
|
|
1153
1112
|
}
|
|
1154
1113
|
}
|
|
1155
1114
|
SV_WriteConfigString(writer, index, value) {
|
|
1156
|
-
writer.writeByte(
|
|
1115
|
+
writer.writeByte(shared.ServerCommand.configstring);
|
|
1157
1116
|
writer.writeShort(index);
|
|
1158
1117
|
writer.writeString(value);
|
|
1159
1118
|
}
|
|
@@ -1183,7 +1142,7 @@ var DedicatedServer = class {
|
|
|
1183
1142
|
} else {
|
|
1184
1143
|
buffer = new Uint8Array(data).buffer;
|
|
1185
1144
|
}
|
|
1186
|
-
const reader = new
|
|
1145
|
+
const reader = new shared.BinaryStream(buffer);
|
|
1187
1146
|
const parser = new ClientMessageParser(reader, {
|
|
1188
1147
|
onMove: (checksum, lastFrame, cmd) => this.handleMove(client, cmd, checksum, lastFrame),
|
|
1189
1148
|
onUserInfo: (info) => this.handleUserInfo(client, info),
|
|
@@ -1260,17 +1219,17 @@ var DedicatedServer = class {
|
|
|
1260
1219
|
}
|
|
1261
1220
|
SV_SendClientFrame(client, snapshot) {
|
|
1262
1221
|
const MTU = 1400;
|
|
1263
|
-
const writer = new
|
|
1264
|
-
writer.writeByte(
|
|
1222
|
+
const writer = new shared.BinaryWriter(MTU);
|
|
1223
|
+
writer.writeByte(shared.ServerCommand.frame);
|
|
1265
1224
|
writer.writeLong(this.sv.frame);
|
|
1266
1225
|
let deltaFrame = 0;
|
|
1267
|
-
if (client.lastFrame && client.lastFrame < this.sv.frame && client.lastFrame >= this.sv.frame -
|
|
1226
|
+
if (client.lastFrame && client.lastFrame < this.sv.frame && client.lastFrame >= this.sv.frame - shared.UPDATE_BACKUP) {
|
|
1268
1227
|
deltaFrame = client.lastFrame;
|
|
1269
1228
|
}
|
|
1270
1229
|
writer.writeLong(deltaFrame);
|
|
1271
1230
|
writer.writeByte(0);
|
|
1272
1231
|
writer.writeByte(0);
|
|
1273
|
-
writer.writeByte(
|
|
1232
|
+
writer.writeByte(shared.ServerCommand.playerinfo);
|
|
1274
1233
|
const ps = {
|
|
1275
1234
|
pm_type: snapshot.pmType,
|
|
1276
1235
|
origin: snapshot.origin,
|
|
@@ -1293,16 +1252,16 @@ var DedicatedServer = class {
|
|
|
1293
1252
|
watertype: snapshot.watertype
|
|
1294
1253
|
// Populate watertype
|
|
1295
1254
|
};
|
|
1296
|
-
|
|
1297
|
-
writer.writeByte(
|
|
1255
|
+
shared.writePlayerState(writer, ps);
|
|
1256
|
+
writer.writeByte(shared.ServerCommand.packetentities);
|
|
1298
1257
|
const entities = snapshot.packetEntities || [];
|
|
1299
1258
|
const currentEntityIds = [];
|
|
1300
|
-
const frameIdx = this.sv.frame %
|
|
1259
|
+
const frameIdx = this.sv.frame % shared.UPDATE_BACKUP;
|
|
1301
1260
|
const currentFrame = client.frames[frameIdx];
|
|
1302
1261
|
currentFrame.entities = entities;
|
|
1303
1262
|
let oldEntities = [];
|
|
1304
1263
|
if (deltaFrame > 0) {
|
|
1305
|
-
const oldFrameIdx = deltaFrame %
|
|
1264
|
+
const oldFrameIdx = deltaFrame % shared.UPDATE_BACKUP;
|
|
1306
1265
|
oldEntities = client.frames[oldFrameIdx].entities;
|
|
1307
1266
|
}
|
|
1308
1267
|
for (const entityState of currentFrame.entities) {
|
|
@@ -1313,9 +1272,9 @@ var DedicatedServer = class {
|
|
|
1313
1272
|
currentEntityIds.push(entityState.number);
|
|
1314
1273
|
const oldState = oldEntities.find((e) => e.number === entityState.number);
|
|
1315
1274
|
if (oldState) {
|
|
1316
|
-
|
|
1275
|
+
shared.writeDeltaEntity(oldState, entityState, writer, false, false);
|
|
1317
1276
|
} else {
|
|
1318
|
-
|
|
1277
|
+
shared.writeDeltaEntity({}, entityState, writer, false, true);
|
|
1319
1278
|
}
|
|
1320
1279
|
}
|
|
1321
1280
|
for (const oldId of client.lastPacketEntities) {
|
|
@@ -1324,12 +1283,12 @@ var DedicatedServer = class {
|
|
|
1324
1283
|
break;
|
|
1325
1284
|
}
|
|
1326
1285
|
if (!currentEntityIds.includes(oldId)) {
|
|
1327
|
-
|
|
1286
|
+
shared.writeRemoveEntity(oldId, writer);
|
|
1328
1287
|
}
|
|
1329
1288
|
}
|
|
1330
1289
|
writer.writeShort(0);
|
|
1331
1290
|
const frameData = writer.getData();
|
|
1332
|
-
currentFrame.packetCRC =
|
|
1291
|
+
currentFrame.packetCRC = shared.crc8(frameData);
|
|
1333
1292
|
const packet = client.netchan.transmit(frameData);
|
|
1334
1293
|
client.net.send(packet);
|
|
1335
1294
|
client.lastFrame = this.sv.frame;
|
|
@@ -1341,8 +1300,8 @@ var DedicatedServer = class {
|
|
|
1341
1300
|
}
|
|
1342
1301
|
modelIndex(name) {
|
|
1343
1302
|
console.log(`modelIndex(${name}) called`);
|
|
1344
|
-
const start =
|
|
1345
|
-
const end =
|
|
1303
|
+
const start = shared.ConfigStringIndex.Models;
|
|
1304
|
+
const end = shared.ConfigStringIndex.Sounds;
|
|
1346
1305
|
for (let i = start + 1; i < end; i++) {
|
|
1347
1306
|
if (this.sv.configStrings[i] === name) {
|
|
1348
1307
|
return i - start;
|
|
@@ -1358,8 +1317,8 @@ var DedicatedServer = class {
|
|
|
1358
1317
|
return 0;
|
|
1359
1318
|
}
|
|
1360
1319
|
soundIndex(name) {
|
|
1361
|
-
const start =
|
|
1362
|
-
const end =
|
|
1320
|
+
const start = shared.ConfigStringIndex.Sounds;
|
|
1321
|
+
const end = shared.ConfigStringIndex.Images;
|
|
1363
1322
|
for (let i = start + 1; i < end; i++) {
|
|
1364
1323
|
if (this.sv.configStrings[i] === name) {
|
|
1365
1324
|
return i - start;
|
|
@@ -1375,8 +1334,8 @@ var DedicatedServer = class {
|
|
|
1375
1334
|
return 0;
|
|
1376
1335
|
}
|
|
1377
1336
|
imageIndex(name) {
|
|
1378
|
-
const start =
|
|
1379
|
-
const end =
|
|
1337
|
+
const start = shared.ConfigStringIndex.Images;
|
|
1338
|
+
const end = shared.ConfigStringIndex.Lights;
|
|
1380
1339
|
for (let i = start + 1; i < end; i++) {
|
|
1381
1340
|
if (this.sv.configStrings[i] === name) {
|
|
1382
1341
|
return i - start;
|
|
@@ -1392,43 +1351,35 @@ var DedicatedServer = class {
|
|
|
1392
1351
|
return 0;
|
|
1393
1352
|
}
|
|
1394
1353
|
multicast(origin, type, event, ...args) {
|
|
1395
|
-
const writer = new
|
|
1354
|
+
const writer = new shared.BinaryWriter();
|
|
1396
1355
|
writeServerCommand(writer, event, ...args);
|
|
1397
1356
|
const data = writer.getData();
|
|
1398
|
-
const reliable = false;
|
|
1399
1357
|
for (const client of this.svs.clients) {
|
|
1400
1358
|
if (!client || client.state < 4 /* Active */ || !client.edict) {
|
|
1401
1359
|
continue;
|
|
1402
1360
|
}
|
|
1403
1361
|
let send = false;
|
|
1404
1362
|
switch (type) {
|
|
1405
|
-
case
|
|
1363
|
+
case game.MulticastType.All:
|
|
1406
1364
|
send = true;
|
|
1407
1365
|
break;
|
|
1408
|
-
case
|
|
1366
|
+
case game.MulticastType.Pvs:
|
|
1409
1367
|
if (this.sv.collisionModel) {
|
|
1410
|
-
send =
|
|
1368
|
+
send = shared.inPVS(origin, client.edict.origin, this.sv.collisionModel);
|
|
1411
1369
|
} else {
|
|
1412
1370
|
send = true;
|
|
1413
1371
|
}
|
|
1414
1372
|
break;
|
|
1415
|
-
case
|
|
1373
|
+
case game.MulticastType.Phs:
|
|
1416
1374
|
if (this.sv.collisionModel) {
|
|
1417
|
-
send =
|
|
1375
|
+
send = shared.inPHS(origin, client.edict.origin, this.sv.collisionModel);
|
|
1418
1376
|
} else {
|
|
1419
1377
|
send = true;
|
|
1420
1378
|
}
|
|
1421
1379
|
break;
|
|
1422
1380
|
}
|
|
1423
1381
|
if (send) {
|
|
1424
|
-
|
|
1425
|
-
try {
|
|
1426
|
-
for (let i = 0; i < data.length; i++) {
|
|
1427
|
-
client.netchan.writeReliableByte(data[i]);
|
|
1428
|
-
}
|
|
1429
|
-
} catch (e) {
|
|
1430
|
-
}
|
|
1431
|
-
} else {
|
|
1382
|
+
{
|
|
1432
1383
|
const packet = client.netchan.transmit(data);
|
|
1433
1384
|
client.net.send(packet);
|
|
1434
1385
|
}
|
|
@@ -1438,7 +1389,7 @@ var DedicatedServer = class {
|
|
|
1438
1389
|
unicast(ent, reliable, event, ...args) {
|
|
1439
1390
|
const client = this.svs.clients.find((c) => c?.edict === ent);
|
|
1440
1391
|
if (client && client.state >= 2 /* Connected */) {
|
|
1441
|
-
const writer = new
|
|
1392
|
+
const writer = new shared.BinaryWriter();
|
|
1442
1393
|
writeServerCommand(writer, event, ...args);
|
|
1443
1394
|
const data = writer.getData();
|
|
1444
1395
|
if (reliable) {
|
|
@@ -1466,7 +1417,7 @@ var DedicatedServer = class {
|
|
|
1466
1417
|
const now = Date.now();
|
|
1467
1418
|
const HISTORY_MAX_MS = 1e3;
|
|
1468
1419
|
this.game.entities.forEachEntity((ent) => {
|
|
1469
|
-
if (ent.solid !==
|
|
1420
|
+
if (ent.solid !== game.Solid.Not || ent.takedamage) {
|
|
1470
1421
|
let hist = this.history.get(ent.index);
|
|
1471
1422
|
if (!hist) {
|
|
1472
1423
|
hist = [];
|
|
@@ -1493,7 +1444,7 @@ var DedicatedServer = class {
|
|
|
1493
1444
|
const targetTime = now - lagMs;
|
|
1494
1445
|
this.game.entities.forEachEntity((ent) => {
|
|
1495
1446
|
if (ent === client) return;
|
|
1496
|
-
if (ent.solid ===
|
|
1447
|
+
if (ent.solid === game.Solid.Not && !ent.takedamage) return;
|
|
1497
1448
|
const hist = this.history.get(ent.index);
|
|
1498
1449
|
if (!hist || hist.length === 0) return;
|
|
1499
1450
|
let i = hist.length - 1;
|
|
@@ -1517,9 +1468,9 @@ var DedicatedServer = class {
|
|
|
1517
1468
|
z: s1.origin.z + (s2.origin.z - s1.origin.z) * frac
|
|
1518
1469
|
};
|
|
1519
1470
|
const angles = {
|
|
1520
|
-
x:
|
|
1521
|
-
y:
|
|
1522
|
-
z:
|
|
1471
|
+
x: shared.lerpAngle(s1.angles.x, s2.angles.x, frac),
|
|
1472
|
+
y: shared.lerpAngle(s1.angles.y, s2.angles.y, frac),
|
|
1473
|
+
z: shared.lerpAngle(s1.angles.z, s2.angles.z, frac)
|
|
1523
1474
|
};
|
|
1524
1475
|
this.backup.set(ent.index, {
|
|
1525
1476
|
origin: { ...ent.origin },
|
|
@@ -1574,13 +1525,13 @@ var DedicatedServer = class {
|
|
|
1574
1525
|
function createServer(options = {}) {
|
|
1575
1526
|
return new DedicatedServer(options);
|
|
1576
1527
|
}
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1528
|
+
|
|
1529
|
+
exports.ClientMessageParser = ClientMessageParser;
|
|
1530
|
+
exports.ClientState = ClientState;
|
|
1531
|
+
exports.DedicatedServer = DedicatedServer;
|
|
1532
|
+
exports.ServerState = ServerState;
|
|
1533
|
+
exports.WebSocketNetDriver = WebSocketNetDriver;
|
|
1534
|
+
exports.createClient = createClient;
|
|
1535
|
+
exports.createServer = createServer;
|
|
1536
|
+
//# sourceMappingURL=index.cjs.map
|
|
1537
|
+
//# sourceMappingURL=index.cjs.map
|