h1z1-server 0.23.4-3 → 0.23.4-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/2016/zoneData/Z1_POIs.json +44 -4
- package/package.json +1 -1
- package/src/servers/ZoneServer2016/classes/zoneclient.ts +127 -128
- package/src/servers/ZoneServer2016/commands/commands.ts +1905 -1905
- package/src/servers/ZoneServer2016/managers/worlddatamanager.ts +1220 -1220
- package/src/servers/ZoneServer2016/zonepackethandlers.ts +2214 -2214
- package/src/servers/ZoneServer2016/zoneserver.ts +7049 -7054
- package/src/utils/utils.ts +831 -830
|
@@ -164,10 +164,10 @@
|
|
|
164
164
|
"range": 300,
|
|
165
165
|
"bounds": [
|
|
166
166
|
[
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
167
|
+
[ -692.3400268554688, 2793.47998046875 ],
|
|
168
|
+
[ -688.9000244140625, 2579.320068359375 ],
|
|
169
|
+
[ -1174.68994140625, 2576.340087890625 ],
|
|
170
|
+
[ -1198.72998046875, 2839.840087890625 ]
|
|
171
171
|
]
|
|
172
172
|
],
|
|
173
173
|
"position": [
|
|
@@ -284,5 +284,45 @@
|
|
|
284
284
|
-2726.31,
|
|
285
285
|
1
|
|
286
286
|
]
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"POIid": 18,
|
|
290
|
+
"POIname": "Military Base",
|
|
291
|
+
"stringId": 9550,
|
|
292
|
+
"range": 0,
|
|
293
|
+
"bounds": [
|
|
294
|
+
[
|
|
295
|
+
[ 558.22998046875, -2550.699951171875 ],
|
|
296
|
+
[ 1051.0999755859375, -2515.39990234375 ],
|
|
297
|
+
[ 1056.3900146484375, -2796.889892578125 ],
|
|
298
|
+
[ 559.989990234375, -2806.1298828125 ]
|
|
299
|
+
]
|
|
300
|
+
],
|
|
301
|
+
"position": [
|
|
302
|
+
822.40,
|
|
303
|
+
14.00,
|
|
304
|
+
-2670.29,
|
|
305
|
+
1
|
|
306
|
+
]
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"POIid": 19,
|
|
310
|
+
"POIname": "Toxic",
|
|
311
|
+
"stringId": 9550,
|
|
312
|
+
"range": 0,
|
|
313
|
+
"bounds": [
|
|
314
|
+
[
|
|
315
|
+
[ -2975.1298828125, -1970.3499755859375 ],
|
|
316
|
+
[ -2966.89990234375, -2243.929931640625 ],
|
|
317
|
+
[ -3218.27001953125, -2242.27001953125 ],
|
|
318
|
+
[ -3198.72998046875, -1979.6300048828125 ]
|
|
319
|
+
]
|
|
320
|
+
],
|
|
321
|
+
"position": [
|
|
322
|
+
-3102.32,
|
|
323
|
+
28.22,
|
|
324
|
+
-2164.61,
|
|
325
|
+
1
|
|
326
|
+
]
|
|
287
327
|
}
|
|
288
328
|
]
|
package/package.json
CHANGED
|
@@ -1,128 +1,127 @@
|
|
|
1
|
-
// ======================================================================
|
|
2
|
-
//
|
|
3
|
-
// GNU GENERAL PUBLIC LICENSE
|
|
4
|
-
// Version 3, 29 June 2007
|
|
5
|
-
// copyright (C) 2020 - 2021 Quentin Gruber
|
|
6
|
-
// copyright (C) 2021 - 2023 H1emu community
|
|
7
|
-
//
|
|
8
|
-
// https://github.com/QuentinGruber/h1z1-server
|
|
9
|
-
// https://www.npmjs.com/package/h1z1-server
|
|
10
|
-
//
|
|
11
|
-
// Based on https://github.com/psemu/soe-network
|
|
12
|
-
// ======================================================================
|
|
13
|
-
|
|
14
|
-
import { toInt, _ } from "../../../utils/utils";
|
|
15
|
-
import { Character2016 } from "../entities/character";
|
|
16
|
-
import { ZoneClient2016 as Client } from "./zoneclient";
|
|
17
|
-
import { LootableProp } from "../entities/lootableprop";
|
|
18
|
-
import { ZoneServer2016 } from "../zoneserver";
|
|
19
|
-
|
|
20
|
-
export class ZoneClient2016 {
|
|
21
|
-
guid?: string;
|
|
22
|
-
character: Character2016;
|
|
23
|
-
currentPOI?: number;
|
|
24
|
-
firstLoading: boolean = false;
|
|
25
|
-
isLoading: boolean = true;
|
|
26
|
-
characterReleased: boolean = false;
|
|
27
|
-
isInteracting: boolean = false;
|
|
28
|
-
isAdmin: boolean = false;
|
|
29
|
-
isDebugMode: boolean = false;
|
|
30
|
-
banType: string = "";
|
|
31
|
-
HWID: string = "";
|
|
32
|
-
posAtLastRoutine: Float32Array = new Float32Array();
|
|
33
|
-
posAtLogoutStart: Float32Array = new Float32Array();
|
|
34
|
-
oldPos: { position: Float32Array; time: number } = {
|
|
35
|
-
position: new Float32Array(),
|
|
36
|
-
time: 0,
|
|
37
|
-
};
|
|
38
|
-
speedWarnsNumber: number = 0;
|
|
39
|
-
allowedProjectiles: number = 0;
|
|
40
|
-
pvpStats: {
|
|
41
|
-
shotsFired: number;
|
|
42
|
-
shotsHit: number;
|
|
43
|
-
head: number;
|
|
44
|
-
spine: number;
|
|
45
|
-
hands: number;
|
|
46
|
-
legs: number;
|
|
47
|
-
} = { shotsFired: 0, shotsHit: 0, head: 0, spine: 0, legs: 0, hands: 0 };
|
|
48
|
-
clientLogs: { log: string; isSuspicious: boolean }[] = [];
|
|
49
|
-
reports: number = 0;
|
|
50
|
-
lastDeathReport?: {
|
|
51
|
-
position: Float32Array;
|
|
52
|
-
attackerPosition: Float32Array;
|
|
53
|
-
distance: number;
|
|
54
|
-
attacker: Client;
|
|
55
|
-
};
|
|
56
|
-
hudTimer?: NodeJS.Timeout | null;
|
|
57
|
-
spawnedDTOs: any[] = [];
|
|
58
|
-
spawnedEntities: any[] = [];
|
|
59
|
-
searchedProps: LootableProp[] = [];
|
|
60
|
-
managedObjects: string[] = [];
|
|
61
|
-
vehicle: {
|
|
62
|
-
mountedVehicle?: string;
|
|
63
|
-
} = {};
|
|
64
|
-
radio: boolean = false;
|
|
65
|
-
npcsToSpawnTimer!: NodeJS.Timeout;
|
|
66
|
-
loginSessionId: string;
|
|
67
|
-
pingTimer: NodeJS.Timeout | undefined;
|
|
68
|
-
clearHudTimer: () => void;
|
|
69
|
-
clearTimers: () => void;
|
|
70
|
-
sessionId: number;
|
|
71
|
-
soeClientId: string;
|
|
72
|
-
lastKeepAliveTime: number = 0;
|
|
73
|
-
pings: number[] = [];
|
|
74
|
-
avgPing: number = 0;
|
|
75
|
-
avgPingLen: number = 4;
|
|
76
|
-
pingWarnings: number = 0;
|
|
77
|
-
isWeaponLock: boolean = false;
|
|
78
|
-
avgPingReady: boolean = false;
|
|
79
|
-
chunkRenderDistance: number = 400;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
this.
|
|
94
|
-
this.
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
this.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
this.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
1
|
+
// ======================================================================
|
|
2
|
+
//
|
|
3
|
+
// GNU GENERAL PUBLIC LICENSE
|
|
4
|
+
// Version 3, 29 June 2007
|
|
5
|
+
// copyright (C) 2020 - 2021 Quentin Gruber
|
|
6
|
+
// copyright (C) 2021 - 2023 H1emu community
|
|
7
|
+
//
|
|
8
|
+
// https://github.com/QuentinGruber/h1z1-server
|
|
9
|
+
// https://www.npmjs.com/package/h1z1-server
|
|
10
|
+
//
|
|
11
|
+
// Based on https://github.com/psemu/soe-network
|
|
12
|
+
// ======================================================================
|
|
13
|
+
|
|
14
|
+
import { toInt, _ } from "../../../utils/utils";
|
|
15
|
+
import { Character2016 } from "../entities/character";
|
|
16
|
+
import { ZoneClient2016 as Client } from "./zoneclient";
|
|
17
|
+
import { LootableProp } from "../entities/lootableprop";
|
|
18
|
+
import { ZoneServer2016 } from "../zoneserver";
|
|
19
|
+
|
|
20
|
+
export class ZoneClient2016 {
|
|
21
|
+
guid?: string;
|
|
22
|
+
character: Character2016;
|
|
23
|
+
currentPOI?: number;
|
|
24
|
+
firstLoading: boolean = false;
|
|
25
|
+
isLoading: boolean = true;
|
|
26
|
+
characterReleased: boolean = false;
|
|
27
|
+
isInteracting: boolean = false;
|
|
28
|
+
isAdmin: boolean = false;
|
|
29
|
+
isDebugMode: boolean = false;
|
|
30
|
+
banType: string = "";
|
|
31
|
+
HWID: string = "";
|
|
32
|
+
posAtLastRoutine: Float32Array = new Float32Array();
|
|
33
|
+
posAtLogoutStart: Float32Array = new Float32Array();
|
|
34
|
+
oldPos: { position: Float32Array; time: number } = {
|
|
35
|
+
position: new Float32Array(),
|
|
36
|
+
time: 0,
|
|
37
|
+
};
|
|
38
|
+
speedWarnsNumber: number = 0;
|
|
39
|
+
allowedProjectiles: number = 0;
|
|
40
|
+
pvpStats: {
|
|
41
|
+
shotsFired: number;
|
|
42
|
+
shotsHit: number;
|
|
43
|
+
head: number;
|
|
44
|
+
spine: number;
|
|
45
|
+
hands: number;
|
|
46
|
+
legs: number;
|
|
47
|
+
} = { shotsFired: 0, shotsHit: 0, head: 0, spine: 0, legs: 0, hands: 0 };
|
|
48
|
+
clientLogs: { log: string; isSuspicious: boolean }[] = [];
|
|
49
|
+
reports: number = 0;
|
|
50
|
+
lastDeathReport?: {
|
|
51
|
+
position: Float32Array;
|
|
52
|
+
attackerPosition: Float32Array;
|
|
53
|
+
distance: number;
|
|
54
|
+
attacker: Client;
|
|
55
|
+
};
|
|
56
|
+
hudTimer?: NodeJS.Timeout | null;
|
|
57
|
+
spawnedDTOs: any[] = [];
|
|
58
|
+
spawnedEntities: any[] = [];
|
|
59
|
+
searchedProps: LootableProp[] = [];
|
|
60
|
+
managedObjects: string[] = [];
|
|
61
|
+
vehicle: {
|
|
62
|
+
mountedVehicle?: string;
|
|
63
|
+
} = {};
|
|
64
|
+
radio: boolean = false;
|
|
65
|
+
npcsToSpawnTimer!: NodeJS.Timeout;
|
|
66
|
+
loginSessionId: string;
|
|
67
|
+
pingTimer: NodeJS.Timeout | undefined;
|
|
68
|
+
clearHudTimer: () => void;
|
|
69
|
+
clearTimers: () => void;
|
|
70
|
+
sessionId: number;
|
|
71
|
+
soeClientId: string;
|
|
72
|
+
lastKeepAliveTime: number = 0;
|
|
73
|
+
pings: number[] = [];
|
|
74
|
+
avgPing: number = 0;
|
|
75
|
+
avgPingLen: number = 4;
|
|
76
|
+
pingWarnings: number = 0;
|
|
77
|
+
isWeaponLock: boolean = false;
|
|
78
|
+
avgPingReady: boolean = false;
|
|
79
|
+
chunkRenderDistance: number = 400;
|
|
80
|
+
routineCounter: number = 0;
|
|
81
|
+
constructor(
|
|
82
|
+
sessionId: number,
|
|
83
|
+
soeClientId: string,
|
|
84
|
+
loginSessionId: string,
|
|
85
|
+
characterId: string,
|
|
86
|
+
transientId: number,
|
|
87
|
+
server: ZoneServer2016
|
|
88
|
+
) {
|
|
89
|
+
this.sessionId = sessionId;
|
|
90
|
+
this.soeClientId = soeClientId;
|
|
91
|
+
|
|
92
|
+
this.isLoading = true;
|
|
93
|
+
this.firstLoading = true;
|
|
94
|
+
this.loginSessionId = loginSessionId;
|
|
95
|
+
this.spawnedEntities = [];
|
|
96
|
+
this.managedObjects = [];
|
|
97
|
+
this.clearTimers = () => {
|
|
98
|
+
clearTimeout(this.npcsToSpawnTimer);
|
|
99
|
+
};
|
|
100
|
+
this.clearHudTimer = () => {
|
|
101
|
+
if (this.hudTimer) {
|
|
102
|
+
clearTimeout(this.hudTimer);
|
|
103
|
+
}
|
|
104
|
+
this.hudTimer = null;
|
|
105
|
+
this.isInteracting = false;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
this.character = new Character2016(characterId, transientId, server);
|
|
109
|
+
}
|
|
110
|
+
addPing(ping: number) {
|
|
111
|
+
if (ping > 0) {
|
|
112
|
+
this.pings.push(ping);
|
|
113
|
+
}
|
|
114
|
+
if (this.pings.length > this.avgPingLen) {
|
|
115
|
+
this.pings.shift();
|
|
116
|
+
}
|
|
117
|
+
if (this.pings.length === this.avgPingLen) {
|
|
118
|
+
this.updateAvgPing();
|
|
119
|
+
} else {
|
|
120
|
+
this.avgPingReady = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
updateAvgPing() {
|
|
124
|
+
this.avgPing = toInt(_.sum(this.pings) / this.pings.length);
|
|
125
|
+
this.avgPingReady = true;
|
|
126
|
+
}
|
|
127
|
+
}
|