h1z1-server 0.20.1-2 → 0.20.2-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/package.json +1 -1
  2. package/src/clients/gatewayclient.js +107 -107
  3. package/src/clients/loginclient.ts +228 -228
  4. package/src/clients/soeclient.js +321 -321
  5. package/src/clients/zoneclient.ts +172 -172
  6. package/src/packets/ClientProtocol/ClientProtocol_1080/abilities.ts +114 -114
  7. package/src/packets/ClientProtocol/ClientProtocol_1080/ability.ts +38 -38
  8. package/src/packets/ClientProtocol/ClientProtocol_1080/achievement.ts +62 -62
  9. package/src/packets/ClientProtocol/ClientProtocol_1080/acquaintance.ts +14 -14
  10. package/src/packets/ClientProtocol/ClientProtocol_1080/activityManager.ts +17 -17
  11. package/src/packets/ClientProtocol/ClientProtocol_1080/activityService.ts +18 -18
  12. package/src/packets/ClientProtocol/ClientProtocol_1080/base.ts +3378 -3378
  13. package/src/packets/ClientProtocol/ClientProtocol_1080/character.ts +404 -404
  14. package/src/packets/ClientProtocol/ClientProtocol_1080/chat.ts +57 -57
  15. package/src/packets/ClientProtocol/ClientProtocol_1080/clientUpdate.ts +341 -341
  16. package/src/packets/ClientProtocol/ClientProtocol_1080/coinStore.ts +100 -100
  17. package/src/packets/ClientProtocol/ClientProtocol_1080/collision.ts +31 -31
  18. package/src/packets/ClientProtocol/ClientProtocol_1080/combat.ts +25 -25
  19. package/src/packets/ClientProtocol/ClientProtocol_1080/command.ts +636 -636
  20. package/src/packets/ClientProtocol/ClientProtocol_1080/construction.ts +62 -62
  21. package/src/packets/ClientProtocol/ClientProtocol_1080/container.ts +97 -97
  22. package/src/packets/ClientProtocol/ClientProtocol_1080/currency.ts +26 -26
  23. package/src/packets/ClientProtocol/ClientProtocol_1080/definitionFilter.ts +73 -73
  24. package/src/packets/ClientProtocol/ClientProtocol_1080/deployable.ts +19 -19
  25. package/src/packets/ClientProtocol/ClientProtocol_1080/dto.ts +82 -82
  26. package/src/packets/ClientProtocol/ClientProtocol_1080/effects.ts +176 -176
  27. package/src/packets/ClientProtocol/ClientProtocol_1080/equipment.ts +125 -125
  28. package/src/packets/ClientProtocol/ClientProtocol_1080/experience.ts +85 -85
  29. package/src/packets/ClientProtocol/ClientProtocol_1080/facility.ts +171 -171
  30. package/src/packets/ClientProtocol/ClientProtocol_1080/friend.ts +100 -100
  31. package/src/packets/ClientProtocol/ClientProtocol_1080/guild.ts +31 -31
  32. package/src/packets/ClientProtocol/ClientProtocol_1080/h1z1packets.ts +128 -128
  33. package/src/packets/ClientProtocol/ClientProtocol_1080/implant.ts +20 -20
  34. package/src/packets/ClientProtocol/ClientProtocol_1080/inGamePurchase.ts +362 -362
  35. package/src/packets/ClientProtocol/ClientProtocol_1080/items.ts +88 -88
  36. package/src/packets/ClientProtocol/ClientProtocol_1080/loadout.ts +88 -88
  37. package/src/packets/ClientProtocol/ClientProtocol_1080/lobby.ts +24 -24
  38. package/src/packets/ClientProtocol/ClientProtocol_1080/lobbyGameDefinition.ts +35 -35
  39. package/src/packets/ClientProtocol/ClientProtocol_1080/loot.ts +14 -14
  40. package/src/packets/ClientProtocol/ClientProtocol_1080/mapRegion.ts +110 -110
  41. package/src/packets/ClientProtocol/ClientProtocol_1080/metaGameEvent.ts +23 -23
  42. package/src/packets/ClientProtocol/ClientProtocol_1080/missions.ts +33 -33
  43. package/src/packets/ClientProtocol/ClientProtocol_1080/mount.ts +86 -86
  44. package/src/packets/ClientProtocol/ClientProtocol_1080/operation.ts +25 -25
  45. package/src/packets/ClientProtocol/ClientProtocol_1080/profileStats.ts +33 -33
  46. package/src/packets/ClientProtocol/ClientProtocol_1080/quickChat.ts +49 -49
  47. package/src/packets/ClientProtocol/ClientProtocol_1080/ragdoll.ts +14 -14
  48. package/src/packets/ClientProtocol/ClientProtocol_1080/recipe.ts +35 -35
  49. package/src/packets/ClientProtocol/ClientProtocol_1080/referenceData.ts +113 -113
  50. package/src/packets/ClientProtocol/ClientProtocol_1080/rewardBuffs.ts +20 -20
  51. package/src/packets/ClientProtocol/ClientProtocol_1080/shared.ts +2388 -2388
  52. package/src/packets/ClientProtocol/ClientProtocol_1080/skill.ts +37 -37
  53. package/src/packets/ClientProtocol/ClientProtocol_1080/staticFacilityInfo.ts +41 -41
  54. package/src/packets/ClientProtocol/ClientProtocol_1080/target.ts +14 -14
  55. package/src/packets/ClientProtocol/ClientProtocol_1080/ui.ts +37 -37
  56. package/src/packets/ClientProtocol/ClientProtocol_1080/vehicle.ts +291 -291
  57. package/src/packets/ClientProtocol/ClientProtocol_1080/voice.ts +41 -41
  58. package/src/packets/ClientProtocol/ClientProtocol_1080/wallOfData.ts +43 -43
  59. package/src/packets/ClientProtocol/ClientProtocol_1080/weapon.ts +274 -274
  60. package/src/packets/ClientProtocol/ClientProtocol_1080/wordFilter.ts +22 -22
  61. package/src/packets/ClientProtocol/ClientProtocol_1080/zoneSetting.ts +35 -35
  62. package/src/packets/ClientProtocol/ClientProtocol_860/abilities.ts +207 -207
  63. package/src/packets/ClientProtocol/ClientProtocol_860/ability.ts +361 -361
  64. package/src/packets/ClientProtocol/ClientProtocol_860/achievement.ts +62 -62
  65. package/src/packets/ClientProtocol/ClientProtocol_860/acquaintance.ts +45 -45
  66. package/src/packets/ClientProtocol/ClientProtocol_860/activityManager.ts +17 -17
  67. package/src/packets/ClientProtocol/ClientProtocol_860/activityService.ts +18 -18
  68. package/src/packets/ClientProtocol/ClientProtocol_860/base.ts +2455 -2455
  69. package/src/packets/ClientProtocol/ClientProtocol_860/chat.ts +63 -63
  70. package/src/packets/ClientProtocol/ClientProtocol_860/clientPcData.ts +30 -30
  71. package/src/packets/ClientProtocol/ClientProtocol_860/clientUpdate.ts +434 -434
  72. package/src/packets/ClientProtocol/ClientProtocol_860/coinStore.ts +100 -100
  73. package/src/packets/ClientProtocol/ClientProtocol_860/collision.ts +31 -31
  74. package/src/packets/ClientProtocol/ClientProtocol_860/combat.ts +173 -173
  75. package/src/packets/ClientProtocol/ClientProtocol_860/command.ts +672 -672
  76. package/src/packets/ClientProtocol/ClientProtocol_860/construction.ts +42 -42
  77. package/src/packets/ClientProtocol/ClientProtocol_860/container.ts +30 -30
  78. package/src/packets/ClientProtocol/ClientProtocol_860/currency.ts +26 -26
  79. package/src/packets/ClientProtocol/ClientProtocol_860/definitionFilter.ts +73 -73
  80. package/src/packets/ClientProtocol/ClientProtocol_860/deployable.ts +19 -19
  81. package/src/packets/ClientProtocol/ClientProtocol_860/dto.ts +73 -73
  82. package/src/packets/ClientProtocol/ClientProtocol_860/effects.ts +176 -176
  83. package/src/packets/ClientProtocol/ClientProtocol_860/equipment.ts +112 -112
  84. package/src/packets/ClientProtocol/ClientProtocol_860/experience.ts +85 -85
  85. package/src/packets/ClientProtocol/ClientProtocol_860/facility.ts +185 -185
  86. package/src/packets/ClientProtocol/ClientProtocol_860/friend.ts +100 -100
  87. package/src/packets/ClientProtocol/ClientProtocol_860/guild.ts +31 -31
  88. package/src/packets/ClientProtocol/ClientProtocol_860/h1z1packets.ts +134 -134
  89. package/src/packets/ClientProtocol/ClientProtocol_860/implant.ts +20 -20
  90. package/src/packets/ClientProtocol/ClientProtocol_860/inGamePurchase.ts +362 -362
  91. package/src/packets/ClientProtocol/ClientProtocol_860/items.ts +38 -38
  92. package/src/packets/ClientProtocol/ClientProtocol_860/loadout.ts +110 -110
  93. package/src/packets/ClientProtocol/ClientProtocol_860/lobby.ts +24 -24
  94. package/src/packets/ClientProtocol/ClientProtocol_860/lobbyGameDefinition.ts +35 -35
  95. package/src/packets/ClientProtocol/ClientProtocol_860/loot.ts +34 -34
  96. package/src/packets/ClientProtocol/ClientProtocol_860/mapRegion.ts +110 -110
  97. package/src/packets/ClientProtocol/ClientProtocol_860/metaGameEvent.ts +23 -23
  98. package/src/packets/ClientProtocol/ClientProtocol_860/missions.ts +33 -33
  99. package/src/packets/ClientProtocol/ClientProtocol_860/mount.ts +125 -125
  100. package/src/packets/ClientProtocol/ClientProtocol_860/operation.ts +39 -39
  101. package/src/packets/ClientProtocol/ClientProtocol_860/profileStats.ts +154 -154
  102. package/src/packets/ClientProtocol/ClientProtocol_860/quickChat.ts +49 -49
  103. package/src/packets/ClientProtocol/ClientProtocol_860/ragdoll.ts +146 -146
  104. package/src/packets/ClientProtocol/ClientProtocol_860/recipe.ts +96 -96
  105. package/src/packets/ClientProtocol/ClientProtocol_860/referenceData.ts +56 -56
  106. package/src/packets/ClientProtocol/ClientProtocol_860/rewardBuffs.ts +20 -20
  107. package/src/packets/ClientProtocol/ClientProtocol_860/shared.ts +2183 -2183
  108. package/src/packets/ClientProtocol/ClientProtocol_860/skill.ts +89 -89
  109. package/src/packets/ClientProtocol/ClientProtocol_860/staticFacilityInfo.ts +41 -41
  110. package/src/packets/ClientProtocol/ClientProtocol_860/target.ts +124 -124
  111. package/src/packets/ClientProtocol/ClientProtocol_860/thrustPad.ts +18 -18
  112. package/src/packets/ClientProtocol/ClientProtocol_860/ui.ts +83 -83
  113. package/src/packets/ClientProtocol/ClientProtocol_860/vehicle.ts +411 -411
  114. package/src/packets/ClientProtocol/ClientProtocol_860/voice.ts +39 -39
  115. package/src/packets/ClientProtocol/ClientProtocol_860/wallOfData.ts +61 -61
  116. package/src/packets/ClientProtocol/ClientProtocol_860/warpgate.ts +22 -22
  117. package/src/packets/ClientProtocol/ClientProtocol_860/weapon.ts +274 -274
  118. package/src/packets/ClientProtocol/ClientProtocol_860/wordFilter.ts +22 -22
  119. package/src/packets/ClientProtocol/ClientProtocol_860/zoneSetting.ts +35 -35
  120. package/src/packets/LoginUdp/LoginUdp_11/loginTunnelPackets.ts +43 -43
  121. package/src/packets/LoginUdp/LoginUdp_11/loginpackets.ts +471 -471
  122. package/src/packets/LoginUdp/LoginUdp_9/loginTunnelPackets.ts +43 -43
  123. package/src/packets/LoginUdp/LoginUdp_9/loginpackets.ts +441 -441
  124. package/src/packets/gatewaypackets.ts +73 -73
  125. package/src/packets/packettable.ts +33 -33
  126. package/src/protocols/gatewayprotocol.ts +122 -122
  127. package/src/protocols/h1emuprotocol.ts +175 -175
  128. package/src/protocols/h1z1protocol.ts +675 -675
  129. package/src/protocols/loginprotocol.ts +139 -139
  130. package/src/protocols/loginprotocol2016.ts +141 -141
  131. package/src/protocols/soeprotocol.ts +620 -620
  132. package/src/servers/GatewayServer/gatewayserver.ts +3 -4
  133. package/src/servers/H1emuServer/h1emuLoginServer.ts +64 -64
  134. package/src/servers/H1emuServer/h1emuZoneServer.ts +123 -123
  135. package/src/servers/H1emuServer/shared/h1emuclient.ts +29 -29
  136. package/src/servers/H1emuServer/shared/h1emuserver.ts +112 -112
  137. package/src/servers/LoginServer/loginclient.ts +18 -18
  138. package/src/servers/LoginServer/loginserver.ts +980 -980
  139. package/src/servers/LoginServer/workers/httpServer.ts +120 -120
  140. package/src/servers/SoeServer/soeclient.ts +66 -66
  141. package/src/servers/SoeServer/soeinputstream.ts +6 -4
  142. package/src/servers/SoeServer/soeoutputstream.ts +3 -3
  143. package/src/servers/SoeServer/soeserver.ts +462 -462
  144. package/src/servers/ZoneServer/classes/character.ts +200 -200
  145. package/src/servers/ZoneServer/classes/vehicles.ts +115 -115
  146. package/src/servers/ZoneServer/classes/zoneclient.ts +0 -1
  147. package/src/servers/ZoneServer/commands/admin.ts +34 -34
  148. package/src/servers/ZoneServer/commands/dev.ts +255 -255
  149. package/src/servers/ZoneServer/commands/hax.ts +1088 -1088
  150. package/src/servers/ZoneServer/workers/createBaseEntities.ts +1203 -1203
  151. package/src/servers/ZoneServer/workers/dynamicWeather.ts +416 -416
  152. package/src/servers/ZoneServer/zonepackethandlers.ts +2347 -2347
  153. package/src/servers/ZoneServer/zoneserver.ts +3 -3
  154. package/src/servers/ZoneServer2016/classes/character.ts +53 -53
  155. package/src/servers/ZoneServer2016/classes/vehicle.ts +111 -111
  156. package/src/servers/ZoneServer2016/classes/worldobjectmanager.ts +1253 -1253
  157. package/src/servers/ZoneServer2016/commands/admin.ts +104 -104
  158. package/src/servers/ZoneServer2016/commands/dev.ts +1020 -1020
  159. package/src/servers/ZoneServer2016/commands/hax.ts +1 -1
  160. package/src/servers/ZoneServer2016/workers/dynamicWeather.ts +373 -373
  161. package/src/servers/ZoneServer2016/zonepackethandlers.ts +24 -1
  162. package/src/servers/ZoneServer2016/zoneserver.ts +11 -8
  163. package/src/servers/shared/workers/udpServerWorker.ts +68 -68
  164. package/src/types/gatewayserver.ts +34 -34
  165. package/src/types/loginserver.ts +78 -78
  166. package/src/types/packets.ts +2500 -2500
  167. package/src/types/shared.ts +24 -24
  168. package/src/types/soeserver.ts +35 -35
  169. package/src/types/zonedata.ts +27 -27
  170. package/src/types/zoneserver.ts +641 -641
  171. package/src/utils/lz4/lz4.ts +253 -253
  172. package/src/utils/utils.ts +327 -327
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "h1z1-server",
3
- "version": "0.20.1-2",
3
+ "version": "0.20.2-0",
4
4
  "description": "Library for emulating h1z1 servers",
5
5
  "author": "Quentin Gruber <quentingruber@gmail.com> (http://github.com/quentingruber)",
6
6
  "license": "GPL-3.0-only",
@@ -1,107 +1,107 @@
1
- // ======================================================================
2
- //
3
- // GNU GENERAL PUBLIC LICENSE
4
- // Version 3, 29 June 2007
5
- // copyright (C) 2020 - 2021 Quentin Gruber
6
- // copyright (C) 2021 - 2022 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
- const EventEmitter = require("events").EventEmitter,
15
- SOEClient = require("./soeclient").SOEClient,
16
- fs = require("fs"),
17
- util = require("util"),
18
- GatewayProtocol = require("../protocols/gatewayprotocol").GatewayProtocol,
19
- GatewayPackets = require("../protocols/gatewayprotocol").GatewayPackets,
20
- debug = require("debug")("GatewayClient");
21
-
22
- function GatewayClientError(message) {
23
- this.name = this.constructor.name;
24
- this.message = message;
25
- }
26
-
27
- util.inherits(GatewayClientError, Error);
28
-
29
- class GatewayClient {
30
- constructor(serverAddress, serverPort, key, localPort) {
31
- EventEmitter.call(this);
32
-
33
- const soeClient = (this._soeClient = new SOEClient(
34
- "ExternalGatewayApi_3",
35
- serverAddress,
36
- serverPort,
37
- key,
38
- localPort
39
- ));
40
- const protocol = (this._protocol = new GatewayProtocol());
41
- const me = this;
42
-
43
- soeClient.on("appdata", function (err, data) {
44
- const packet = protocol.parse(data);
45
- const result = packet.result;
46
-
47
- switch (packet.name) {
48
- case "LoginReply":
49
- if (result.loggedIn) {
50
- me.emit("login", null, result);
51
- } else {
52
- me.emit("login", new GatewayClientError("Login failed"));
53
- }
54
- break;
55
- case "TunnelPacketToExternalConnection":
56
- me.emit("tunneldata", null, packet.tunnelData, packet.flags);
57
- break;
58
- }
59
- });
60
-
61
- soeClient.on("connect", function (err, result) {
62
- debug("Connected to login server");
63
- soeClient.toggleEncryption(false);
64
- me.emit("connect", err, result);
65
- });
66
-
67
- soeClient.on("disconnect", function (err, result) {
68
- debug("Disconnected");
69
- me.emit("disconnect", err, result);
70
- });
71
- }
72
-
73
- connect(callback) {
74
- debug("Connecting to gateway server");
75
- this._soeClient.connect();
76
- }
77
-
78
- sendTunnelData(tunnelData, channel) {
79
- channel = channel || 0;
80
- debug("Sending tunnel data to gateway server");
81
- const data = this._protocol.pack("TunnelPacketFromExternalConnection", {
82
- channel: channel,
83
- tunnelData: tunnelData,
84
- });
85
- //fs.writeFileSync("dump/out_tunneldata_" + (tunnelCount++) + ".dat", data);
86
- this._soeClient.sendAppData(data, true);
87
- }
88
-
89
- login(characterId, ticket, clientProtocol, clientBuild) {
90
- debug("Sending login request");
91
- const data = this._protocol.pack("LoginRequest", {
92
- characterId: characterId,
93
- ticket: ticket,
94
- clientProtocol: clientProtocol,
95
- clientBuild: clientBuild,
96
- });
97
- //fs.writeFileSync("loginrequest.dat", data);
98
- this._soeClient.sendAppData(data, false);
99
- this._soeClient.toggleEncryption(true);
100
- }
101
-
102
- disconnect() {}
103
- }
104
-
105
- util.inherits(GatewayClient, EventEmitter);
106
-
107
- exports.GatewayClient = GatewayClient;
1
+ // ======================================================================
2
+ //
3
+ // GNU GENERAL PUBLIC LICENSE
4
+ // Version 3, 29 June 2007
5
+ // copyright (C) 2020 - 2021 Quentin Gruber
6
+ // copyright (C) 2021 - 2022 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
+ const EventEmitter = require("events").EventEmitter,
15
+ SOEClient = require("./soeclient").SOEClient,
16
+ fs = require("fs"),
17
+ util = require("util"),
18
+ GatewayProtocol = require("../protocols/gatewayprotocol").GatewayProtocol,
19
+ GatewayPackets = require("../protocols/gatewayprotocol").GatewayPackets,
20
+ debug = require("debug")("GatewayClient");
21
+
22
+ function GatewayClientError(message) {
23
+ this.name = this.constructor.name;
24
+ this.message = message;
25
+ }
26
+
27
+ util.inherits(GatewayClientError, Error);
28
+
29
+ class GatewayClient {
30
+ constructor(serverAddress, serverPort, key, localPort) {
31
+ EventEmitter.call(this);
32
+
33
+ const soeClient = (this._soeClient = new SOEClient(
34
+ "ExternalGatewayApi_3",
35
+ serverAddress,
36
+ serverPort,
37
+ key,
38
+ localPort
39
+ ));
40
+ const protocol = (this._protocol = new GatewayProtocol());
41
+ const me = this;
42
+
43
+ soeClient.on("appdata", function (err, data) {
44
+ const packet = protocol.parse(data);
45
+ const result = packet.result;
46
+
47
+ switch (packet.name) {
48
+ case "LoginReply":
49
+ if (result.loggedIn) {
50
+ me.emit("login", null, result);
51
+ } else {
52
+ me.emit("login", new GatewayClientError("Login failed"));
53
+ }
54
+ break;
55
+ case "TunnelPacketToExternalConnection":
56
+ me.emit("tunneldata", null, packet.tunnelData, packet.flags);
57
+ break;
58
+ }
59
+ });
60
+
61
+ soeClient.on("connect", function (err, result) {
62
+ debug("Connected to login server");
63
+ soeClient.toggleEncryption(false);
64
+ me.emit("connect", err, result);
65
+ });
66
+
67
+ soeClient.on("disconnect", function (err, result) {
68
+ debug("Disconnected");
69
+ me.emit("disconnect", err, result);
70
+ });
71
+ }
72
+
73
+ connect(callback) {
74
+ debug("Connecting to gateway server");
75
+ this._soeClient.connect();
76
+ }
77
+
78
+ sendTunnelData(tunnelData, channel) {
79
+ channel = channel || 0;
80
+ debug("Sending tunnel data to gateway server");
81
+ const data = this._protocol.pack("TunnelPacketFromExternalConnection", {
82
+ channel: channel,
83
+ tunnelData: tunnelData,
84
+ });
85
+ //fs.writeFileSync("dump/out_tunneldata_" + (tunnelCount++) + ".dat", data);
86
+ this._soeClient.sendAppData(data, true);
87
+ }
88
+
89
+ login(characterId, ticket, clientProtocol, clientBuild) {
90
+ debug("Sending login request");
91
+ const data = this._protocol.pack("LoginRequest", {
92
+ characterId: characterId,
93
+ ticket: ticket,
94
+ clientProtocol: clientProtocol,
95
+ clientBuild: clientBuild,
96
+ });
97
+ //fs.writeFileSync("loginrequest.dat", data);
98
+ this._soeClient.sendAppData(data, false);
99
+ this._soeClient.toggleEncryption(true);
100
+ }
101
+
102
+ disconnect() {}
103
+ }
104
+
105
+ util.inherits(GatewayClient, EventEmitter);
106
+
107
+ exports.GatewayClient = GatewayClient;
@@ -1,228 +1,228 @@
1
- // ======================================================================
2
- //
3
- // GNU GENERAL PUBLIC LICENSE
4
- // Version 3, 29 June 2007
5
- // copyright (C) 2020 - 2021 Quentin Gruber
6
- // copyright (C) 2021 - 2022 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 { EventEmitter } from "events";
15
-
16
- import { SOEClient } from "./soeclient";
17
- import { LoginProtocol } from "../protocols/loginprotocol";
18
-
19
- const loginProtocolName = "LoginUdp_9";
20
- const debug = require("debug")("LoginClient");
21
-
22
- interface SoeClient {
23
- on: Function;
24
- emit: Function;
25
- connect: Function;
26
- start: Function;
27
- stop: Function;
28
- _sessionId: number;
29
- _protocol: LoginProtocol;
30
- _sendPacket: Function;
31
- sendAppData: Function;
32
- toggleEncryption: Function;
33
- toggleDataDump: Function;
34
- }
35
-
36
- interface LoginProtocolInterface {
37
- parse: Function;
38
- pack: Function;
39
- }
40
-
41
- export class LoginClient extends EventEmitter {
42
- _gameId: number;
43
- _environment: string;
44
- _soeClient: any;
45
- _protocol: LoginProtocolInterface;
46
-
47
- constructor(
48
- gameId: number,
49
- environment: string,
50
- serverAddress: string,
51
- serverPort: number,
52
- loginKey: Uint8Array,
53
- localPort: number
54
- ) {
55
- super();
56
- this._gameId = gameId;
57
- this._environment = environment;
58
- this._soeClient = new SOEClient(
59
- loginProtocolName,
60
- serverAddress,
61
- serverPort,
62
- loginKey,
63
- localPort
64
- );
65
- this._protocol = new LoginProtocol();
66
- let n = 0;
67
- this._soeClient.on("connect", (err: string, result: string) => {
68
- debug("Connected to login server");
69
- this.login("FiNgErPrInT");
70
- });
71
- this._soeClient.on("disconnect", (err: string, result: string) => {
72
- debug("Disconnected");
73
- });
74
- this._soeClient.on("appdata", (err: string, data: Buffer) => {
75
- n++;
76
- let packet, result;
77
- try {
78
- packet = this._protocol.parse(data);
79
- } catch (e) {
80
- debug("Failed parsing app data loginclient_appdata_" + n + ".dat");
81
- return;
82
- }
83
-
84
- result = packet.result;
85
-
86
- switch (packet.name) {
87
- case "LoginReply":
88
- if (result.status === 1) {
89
- this.emit("login", null, {
90
- loggedIn: result.loggedIn,
91
- isMember: result.isMember,
92
- });
93
- } else {
94
- this.emit("login", "Login failed");
95
- }
96
- break;
97
- case "ForceDisconnect":
98
- break;
99
- case "CharacterLoginReply":
100
- if (result.status === 1) {
101
- debug(JSON.stringify(result, null, 4));
102
- this.emit("characterlogin", null, result);
103
- } else {
104
- this.emit("characterlogin", "Character login failed");
105
- }
106
- break;
107
- case "CharacterCreateReply":
108
- if (result.status === 1) {
109
- this.emit("charactercreate", null, {
110
- characterId: result.characterId,
111
- });
112
- } else {
113
- this.emit("charactercreate", "Character create failed");
114
- }
115
- break;
116
- case "CharacterDeleteReply":
117
- if (result.status === 1) {
118
- this.emit("characterdelete", null, {});
119
- } else {
120
- this.emit("characterdelete", "Character delete failed");
121
- }
122
- break;
123
- case "CharacterSelectInfoReply":
124
- if (result.status === 1) {
125
- this.emit("characterinfo", null, result);
126
- } else {
127
- this.emit("characterinfo", "Character info failed");
128
- }
129
- break;
130
- case "ServerListReply":
131
- this.emit("serverlist", null, {
132
- servers: result.servers,
133
- });
134
- break;
135
- case "ServerUpdate":
136
- if (result.status === 1) {
137
- this.emit("serverupdate", null, result.server);
138
- } else {
139
- this.emit("serverupdate", "Server update failed");
140
- }
141
- break;
142
- case "TunnelAppPacketServerToClient":
143
- break;
144
- }
145
- });
146
- }
147
-
148
- connect() {
149
- debug("Connecting to login server");
150
- this._soeClient.connect();
151
- }
152
-
153
- async login(fingerprint: string) {
154
- async function SetupLoginRequest(
155
- fingerprint: any,
156
- sessionId: any,
157
- protocol: any
158
- ) {
159
- const data = await protocol.pack("LoginRequest", {
160
- sessionId: sessionId,
161
- systemFingerPrint: fingerprint,
162
- });
163
- return data;
164
- }
165
-
166
- var data = await SetupLoginRequest(
167
- fingerprint,
168
- this._soeClient._sessionId.toString(),
169
- this._protocol
170
- );
171
- debug("Sending login request");
172
- this._soeClient.sendAppData(data, true);
173
-
174
- this.emit("connect");
175
- }
176
-
177
- disconnect() {
178
- this.emit("disconnect");
179
- }
180
-
181
- requestServerList() {
182
- debug("Requesting server list");
183
- const data = this._protocol.pack("ServerListRequest");
184
- this._soeClient.sendAppData(data, true);
185
- }
186
-
187
- requestCharacterInfo() {
188
- debug("Requesting character info");
189
- const data = this._protocol.pack("CharacterSelectInfoRequest");
190
- this._soeClient.sendAppData(data, true);
191
- }
192
-
193
- requestCharacterLogin(characterId: string, serverId: number, payload: any) {
194
- debug("Requesting character login");
195
- const data = this._protocol.pack("CharacterLoginRequest", {
196
- characterId: characterId,
197
- serverId: serverId,
198
- payload: payload,
199
- });
200
- if (data) {
201
- this._soeClient.sendAppData(data, true);
202
- } else {
203
- debug("Could not pack character login request data");
204
- }
205
- }
206
-
207
- requestCharacterDelete = function () {};
208
-
209
- requestCharacterCreate() {
210
- debug("Requesting character create");
211
- const data = this._protocol.pack("CharacterCreateRequest", {
212
- serverId: 1,
213
- unknown: 0,
214
- payload: {
215
- empireId: 2,
216
- headType: 1,
217
- profileType: 3,
218
- gender: 1,
219
- characterName: "test",
220
- },
221
- });
222
- if (data) {
223
- this._soeClient.sendAppData(data, true);
224
- } else {
225
- debug("Could not pack character create request data");
226
- }
227
- }
228
- }
1
+ // ======================================================================
2
+ //
3
+ // GNU GENERAL PUBLIC LICENSE
4
+ // Version 3, 29 June 2007
5
+ // copyright (C) 2020 - 2021 Quentin Gruber
6
+ // copyright (C) 2021 - 2022 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 { EventEmitter } from "events";
15
+
16
+ import { SOEClient } from "./soeclient";
17
+ import { LoginProtocol } from "../protocols/loginprotocol";
18
+
19
+ const loginProtocolName = "LoginUdp_9";
20
+ const debug = require("debug")("LoginClient");
21
+
22
+ interface SoeClient {
23
+ on: Function;
24
+ emit: Function;
25
+ connect: Function;
26
+ start: Function;
27
+ stop: Function;
28
+ _sessionId: number;
29
+ _protocol: LoginProtocol;
30
+ _sendPacket: Function;
31
+ sendAppData: Function;
32
+ toggleEncryption: Function;
33
+ toggleDataDump: Function;
34
+ }
35
+
36
+ interface LoginProtocolInterface {
37
+ parse: Function;
38
+ pack: Function;
39
+ }
40
+
41
+ export class LoginClient extends EventEmitter {
42
+ _gameId: number;
43
+ _environment: string;
44
+ _soeClient: any;
45
+ _protocol: LoginProtocolInterface;
46
+
47
+ constructor(
48
+ gameId: number,
49
+ environment: string,
50
+ serverAddress: string,
51
+ serverPort: number,
52
+ loginKey: Uint8Array,
53
+ localPort: number
54
+ ) {
55
+ super();
56
+ this._gameId = gameId;
57
+ this._environment = environment;
58
+ this._soeClient = new SOEClient(
59
+ loginProtocolName,
60
+ serverAddress,
61
+ serverPort,
62
+ loginKey,
63
+ localPort
64
+ );
65
+ this._protocol = new LoginProtocol();
66
+ let n = 0;
67
+ this._soeClient.on("connect", (err: string, result: string) => {
68
+ debug("Connected to login server");
69
+ this.login("FiNgErPrInT");
70
+ });
71
+ this._soeClient.on("disconnect", (err: string, result: string) => {
72
+ debug("Disconnected");
73
+ });
74
+ this._soeClient.on("appdata", (err: string, data: Buffer) => {
75
+ n++;
76
+ let packet, result;
77
+ try {
78
+ packet = this._protocol.parse(data);
79
+ } catch (e) {
80
+ debug("Failed parsing app data loginclient_appdata_" + n + ".dat");
81
+ return;
82
+ }
83
+
84
+ result = packet.result;
85
+
86
+ switch (packet.name) {
87
+ case "LoginReply":
88
+ if (result.status === 1) {
89
+ this.emit("login", null, {
90
+ loggedIn: result.loggedIn,
91
+ isMember: result.isMember,
92
+ });
93
+ } else {
94
+ this.emit("login", "Login failed");
95
+ }
96
+ break;
97
+ case "ForceDisconnect":
98
+ break;
99
+ case "CharacterLoginReply":
100
+ if (result.status === 1) {
101
+ debug(JSON.stringify(result, null, 4));
102
+ this.emit("characterlogin", null, result);
103
+ } else {
104
+ this.emit("characterlogin", "Character login failed");
105
+ }
106
+ break;
107
+ case "CharacterCreateReply":
108
+ if (result.status === 1) {
109
+ this.emit("charactercreate", null, {
110
+ characterId: result.characterId,
111
+ });
112
+ } else {
113
+ this.emit("charactercreate", "Character create failed");
114
+ }
115
+ break;
116
+ case "CharacterDeleteReply":
117
+ if (result.status === 1) {
118
+ this.emit("characterdelete", null, {});
119
+ } else {
120
+ this.emit("characterdelete", "Character delete failed");
121
+ }
122
+ break;
123
+ case "CharacterSelectInfoReply":
124
+ if (result.status === 1) {
125
+ this.emit("characterinfo", null, result);
126
+ } else {
127
+ this.emit("characterinfo", "Character info failed");
128
+ }
129
+ break;
130
+ case "ServerListReply":
131
+ this.emit("serverlist", null, {
132
+ servers: result.servers,
133
+ });
134
+ break;
135
+ case "ServerUpdate":
136
+ if (result.status === 1) {
137
+ this.emit("serverupdate", null, result.server);
138
+ } else {
139
+ this.emit("serverupdate", "Server update failed");
140
+ }
141
+ break;
142
+ case "TunnelAppPacketServerToClient":
143
+ break;
144
+ }
145
+ });
146
+ }
147
+
148
+ connect() {
149
+ debug("Connecting to login server");
150
+ this._soeClient.connect();
151
+ }
152
+
153
+ async login(fingerprint: string) {
154
+ async function SetupLoginRequest(
155
+ fingerprint: any,
156
+ sessionId: any,
157
+ protocol: any
158
+ ) {
159
+ const data = await protocol.pack("LoginRequest", {
160
+ sessionId: sessionId,
161
+ systemFingerPrint: fingerprint,
162
+ });
163
+ return data;
164
+ }
165
+
166
+ var data = await SetupLoginRequest(
167
+ fingerprint,
168
+ this._soeClient._sessionId.toString(),
169
+ this._protocol
170
+ );
171
+ debug("Sending login request");
172
+ this._soeClient.sendAppData(data, true);
173
+
174
+ this.emit("connect");
175
+ }
176
+
177
+ disconnect() {
178
+ this.emit("disconnect");
179
+ }
180
+
181
+ requestServerList() {
182
+ debug("Requesting server list");
183
+ const data = this._protocol.pack("ServerListRequest");
184
+ this._soeClient.sendAppData(data, true);
185
+ }
186
+
187
+ requestCharacterInfo() {
188
+ debug("Requesting character info");
189
+ const data = this._protocol.pack("CharacterSelectInfoRequest");
190
+ this._soeClient.sendAppData(data, true);
191
+ }
192
+
193
+ requestCharacterLogin(characterId: string, serverId: number, payload: any) {
194
+ debug("Requesting character login");
195
+ const data = this._protocol.pack("CharacterLoginRequest", {
196
+ characterId: characterId,
197
+ serverId: serverId,
198
+ payload: payload,
199
+ });
200
+ if (data) {
201
+ this._soeClient.sendAppData(data, true);
202
+ } else {
203
+ debug("Could not pack character login request data");
204
+ }
205
+ }
206
+
207
+ requestCharacterDelete = function () {};
208
+
209
+ requestCharacterCreate() {
210
+ debug("Requesting character create");
211
+ const data = this._protocol.pack("CharacterCreateRequest", {
212
+ serverId: 1,
213
+ unknown: 0,
214
+ payload: {
215
+ empireId: 2,
216
+ headType: 1,
217
+ profileType: 3,
218
+ gender: 1,
219
+ characterName: "test",
220
+ },
221
+ });
222
+ if (data) {
223
+ this._soeClient.sendAppData(data, true);
224
+ } else {
225
+ debug("Could not pack character create request data");
226
+ }
227
+ }
228
+ }