omegga 1.2.9 → 1.3.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 (255) hide show
  1. package/README.md +20 -1
  2. package/dist/brickadia/config.js +26 -90
  3. package/dist/brickadia/config.js.map +1 -1
  4. package/dist/brickadia/server.js +294 -293
  5. package/dist/brickadia/server.js.map +1 -1
  6. package/dist/cli/auth.js +149 -177
  7. package/dist/cli/auth.js.map +1 -1
  8. package/dist/cli/config.js +64 -66
  9. package/dist/cli/config.js.map +1 -1
  10. package/dist/cli/index.js +14 -14
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/installer.js +37 -43
  13. package/dist/cli/installer.js.map +1 -1
  14. package/dist/cli/plugin.js +651 -682
  15. package/dist/cli/plugin.js.map +1 -1
  16. package/dist/cli/terminal.js +811 -733
  17. package/dist/cli/terminal.js.map +1 -1
  18. package/dist/config/formats/format_js.js +6 -6
  19. package/dist/config/formats/format_js.js.map +1 -1
  20. package/dist/config/formats/format_yml.js +7 -10
  21. package/dist/config/formats/format_yml.js.map +1 -1
  22. package/dist/config/index.js +46 -68
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/config/reader.js +16 -27
  25. package/dist/config/reader.js.map +1 -1
  26. package/dist/config/validator.js +23 -25
  27. package/dist/config/validator.js.map +1 -1
  28. package/dist/config/writer.js +11 -21
  29. package/dist/config/writer.js.map +1 -1
  30. package/dist/index.js +18 -64
  31. package/dist/index.js.map +1 -1
  32. package/dist/info/default_commands.json.js +39 -0
  33. package/dist/info/default_commands.json.js.map +1 -0
  34. package/dist/logger.js +61 -60
  35. package/dist/logger.js.map +1 -1
  36. package/dist/main.js +424 -471
  37. package/dist/main.js.map +1 -1
  38. package/dist/omegga/auth.js +101 -148
  39. package/dist/omegga/auth.js.map +1 -1
  40. package/dist/omegga/commandInjector.js +261 -251
  41. package/dist/omegga/commandInjector.js.map +1 -1
  42. package/dist/omegga/index.js +14 -52
  43. package/dist/omegga/index.js.map +1 -1
  44. package/dist/omegga/logWrangler.js +224 -275
  45. package/dist/omegga/logWrangler.js.map +1 -1
  46. package/dist/omegga/matchers/auth.js +36 -50
  47. package/dist/omegga/matchers/auth.js.map +1 -1
  48. package/dist/omegga/matchers/chat.js +49 -71
  49. package/dist/omegga/matchers/chat.js.map +1 -1
  50. package/dist/omegga/matchers/command.js +25 -36
  51. package/dist/omegga/matchers/command.js.map +1 -1
  52. package/dist/omegga/matchers/exit.js +15 -18
  53. package/dist/omegga/matchers/exit.js.map +1 -1
  54. package/dist/omegga/matchers/index.js +26 -40
  55. package/dist/omegga/matchers/index.js.map +1 -1
  56. package/dist/omegga/matchers/init.js +20 -23
  57. package/dist/omegga/matchers/init.js.map +1 -1
  58. package/dist/omegga/matchers/interact.js +58 -64
  59. package/dist/omegga/matchers/interact.js.map +1 -1
  60. package/dist/omegga/matchers/join.js +74 -95
  61. package/dist/omegga/matchers/join.js.map +1 -1
  62. package/dist/omegga/matchers/leave.js +43 -56
  63. package/dist/omegga/matchers/leave.js.map +1 -1
  64. package/dist/omegga/matchers/mapChange.js +26 -35
  65. package/dist/omegga/matchers/mapChange.js.map +1 -1
  66. package/dist/omegga/matchers/minigameJoin.js +24 -31
  67. package/dist/omegga/matchers/minigameJoin.js.map +1 -1
  68. package/dist/omegga/matchers/version.js +42 -49
  69. package/dist/omegga/matchers/version.js.map +1 -1
  70. package/dist/omegga/player.js +527 -527
  71. package/dist/omegga/player.js.map +1 -1
  72. package/dist/omegga/plugin/interface.js +91 -98
  73. package/dist/omegga/plugin/interface.js.map +1 -1
  74. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +524 -429
  75. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -1
  76. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +282 -294
  77. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -1
  78. package/dist/omegga/plugin/plugin_node_safe.js +365 -393
  79. package/dist/omegga/plugin/plugin_node_safe.js.map +1 -1
  80. package/dist/omegga/plugin/plugin_node_unsafe.js +119 -179
  81. package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -1
  82. package/dist/omegga/plugin.js +402 -347
  83. package/dist/omegga/plugin.js.map +1 -1
  84. package/dist/omegga/server.js +742 -774
  85. package/dist/omegga/server.js.map +1 -1
  86. package/dist/omegga/wrapper.js +64 -91
  87. package/dist/omegga/wrapper.js.map +1 -1
  88. package/dist/plugin.js +11 -31
  89. package/dist/plugin.js.map +1 -1
  90. package/dist/softconfig.js +121 -100
  91. package/dist/softconfig.js.map +1 -1
  92. package/dist/updater/steam.js +97 -112
  93. package/dist/updater/steam.js.map +1 -1
  94. package/dist/util/brdb.js +496 -528
  95. package/dist/util/brdb.js.map +1 -1
  96. package/dist/util/brick/checkBounds.js +11 -15
  97. package/dist/util/brick/checkBounds.js.map +1 -1
  98. package/dist/util/brick/constants.js +723 -174
  99. package/dist/util/brick/constants.js.map +1 -1
  100. package/dist/util/brick/displayName.js +204 -211
  101. package/dist/util/brick/displayName.js.map +1 -1
  102. package/dist/util/brick/getBounds.js +29 -41
  103. package/dist/util/brick/getBounds.js.map +1 -1
  104. package/dist/util/brick/getBrickSize.js +6 -7
  105. package/dist/util/brick/getBrickSize.js.map +1 -1
  106. package/dist/util/brick/getScaleAxis.js +24 -30
  107. package/dist/util/brick/getScaleAxis.js.map +1 -1
  108. package/dist/util/brick/index.js +8 -29
  109. package/dist/util/brick/index.js.map +1 -1
  110. package/dist/util/brick/rotate.js +29 -34
  111. package/dist/util/brick/rotate.js.map +1 -1
  112. package/dist/util/brick/setOwnership.js +13 -19
  113. package/dist/util/brick/setOwnership.js.map +1 -1
  114. package/dist/util/chat.js +53 -44
  115. package/dist/util/chat.js.map +1 -1
  116. package/dist/util/color.js +112 -124
  117. package/dist/util/color.js.map +1 -1
  118. package/dist/util/file.js +54 -98
  119. package/dist/util/file.js.map +1 -1
  120. package/dist/util/index.js +84 -106
  121. package/dist/util/index.js.map +1 -1
  122. package/dist/util/map.js +18 -20
  123. package/dist/util/map.js.map +1 -1
  124. package/dist/util/pattern.js +6 -9
  125. package/dist/util/pattern.js.map +1 -1
  126. package/dist/util/time.js +31 -34
  127. package/dist/util/time.js.map +1 -1
  128. package/dist/util/uuid.js +10 -8
  129. package/dist/util/uuid.js.map +1 -1
  130. package/dist/util/wsl.js +19 -25
  131. package/dist/util/wsl.js.map +1 -1
  132. package/dist/version.js +7 -9
  133. package/dist/version.js.map +1 -1
  134. package/dist/webserver/backend/api.js +784 -874
  135. package/dist/webserver/backend/api.js.map +1 -1
  136. package/dist/webserver/backend/calendar.js +14 -17
  137. package/dist/webserver/backend/calendar.js.map +1 -1
  138. package/dist/webserver/backend/database.js +563 -613
  139. package/dist/webserver/backend/database.js.map +1 -1
  140. package/dist/webserver/backend/index.js +153 -191
  141. package/dist/webserver/backend/index.js.map +1 -1
  142. package/dist/webserver/backend/metrics.js +219 -248
  143. package/dist/webserver/backend/metrics.js.map +1 -1
  144. package/dist/webserver/backend/util.js +47 -68
  145. package/dist/webserver/backend/util.js.map +1 -1
  146. package/dist/worker.js +322 -0
  147. package/dist/worker.js.map +1 -0
  148. package/package.json +14 -10
  149. package/templates/safe-ts/omegga.d.ts +1 -1
  150. package/vite.backend.config.mts +46 -0
  151. package/vite.frontend.config.mts +58 -0
  152. package/vitest.backend.config.mts +7 -0
  153. package/dist/brickadia/config.d.ts +0 -3
  154. package/dist/brickadia/presets.d.ts +0 -65
  155. package/dist/brickadia/presets.js +0 -3
  156. package/dist/brickadia/presets.js.map +0 -1
  157. package/dist/brickadia/server.d.ts +0 -36
  158. package/dist/brickadia/types.d.ts +0 -45
  159. package/dist/brickadia/types.js +0 -3
  160. package/dist/brickadia/types.js.map +0 -1
  161. package/dist/cli/auth.d.ts +0 -26
  162. package/dist/cli/config.d.ts +0 -10
  163. package/dist/cli/index.d.ts +0 -30
  164. package/dist/cli/installer.d.ts +0 -1
  165. package/dist/cli/plugin.d.ts +0 -22
  166. package/dist/cli/terminal.d.ts +0 -25
  167. package/dist/config/authorizer.d.ts +0 -2
  168. package/dist/config/authorizer.js +0 -38
  169. package/dist/config/authorizer.js.map +0 -1
  170. package/dist/config/formats/format_js.d.ts +0 -3
  171. package/dist/config/formats/format_yml.d.ts +0 -3
  172. package/dist/config/index.d.ts +0 -18
  173. package/dist/config/reader.d.ts +0 -3
  174. package/dist/config/types.d.ts +0 -50
  175. package/dist/config/types.js +0 -3
  176. package/dist/config/types.js.map +0 -1
  177. package/dist/config/validator.d.ts +0 -6
  178. package/dist/config/writer.d.ts +0 -3
  179. package/dist/index.d.ts +0 -22
  180. package/dist/info/default_commands.json +0 -29
  181. package/dist/logger.d.ts +0 -41
  182. package/dist/main.d.ts +0 -1
  183. package/dist/omegga/auth.d.ts +0 -9
  184. package/dist/omegga/commandInjector.d.ts +0 -35
  185. package/dist/omegga/index.d.ts +0 -7
  186. package/dist/omegga/logWrangler.d.ts +0 -32
  187. package/dist/omegga/matchers/auth.d.ts +0 -10
  188. package/dist/omegga/matchers/chat.d.ts +0 -10
  189. package/dist/omegga/matchers/command.d.ts +0 -7
  190. package/dist/omegga/matchers/exit.d.ts +0 -3
  191. package/dist/omegga/matchers/index.d.ts +0 -3
  192. package/dist/omegga/matchers/init.d.ts +0 -3
  193. package/dist/omegga/matchers/interact.d.ts +0 -4
  194. package/dist/omegga/matchers/join.d.ts +0 -4
  195. package/dist/omegga/matchers/leave.d.ts +0 -4
  196. package/dist/omegga/matchers/mapChange.d.ts +0 -3
  197. package/dist/omegga/matchers/minigameJoin.d.ts +0 -9
  198. package/dist/omegga/matchers/types.d.ts +0 -5
  199. package/dist/omegga/matchers/types.js +0 -3
  200. package/dist/omegga/matchers/types.js.map +0 -1
  201. package/dist/omegga/matchers/version.d.ts +0 -3
  202. package/dist/omegga/player.d.ts +0 -81
  203. package/dist/omegga/plugin/interface.d.ts +0 -30
  204. package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +0 -23
  205. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +0 -145
  206. package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +0 -1
  207. package/dist/omegga/plugin/plugin_node_safe/worker.js +0 -367
  208. package/dist/omegga/plugin/plugin_node_safe/worker.js.map +0 -1
  209. package/dist/omegga/plugin/plugin_node_safe.d.ts +0 -23
  210. package/dist/omegga/plugin/plugin_node_unsafe.d.ts +0 -13
  211. package/dist/omegga/plugin.d.ts +0 -63
  212. package/dist/omegga/server.d.ts +0 -166
  213. package/dist/omegga/types.d.ts +0 -49
  214. package/dist/omegga/types.js +0 -3
  215. package/dist/omegga/types.js.map +0 -1
  216. package/dist/omegga/wrapper.d.ts +0 -32
  217. package/dist/plugin.d.ts +0 -916
  218. package/dist/softconfig.d.ts +0 -67
  219. package/dist/tsconfig.tsbuildinfo +0 -1
  220. package/dist/updater/index.d.ts +0 -1
  221. package/dist/updater/index.js +0 -10
  222. package/dist/updater/index.js.map +0 -1
  223. package/dist/updater/steam.d.ts +0 -52
  224. package/dist/util/brdb.d.ts +0 -31
  225. package/dist/util/brick/checkBounds.d.ts +0 -8
  226. package/dist/util/brick/constants.d.ts +0 -18
  227. package/dist/util/brick/displayName.d.ts +0 -7
  228. package/dist/util/brick/getBounds.d.ts +0 -5
  229. package/dist/util/brick/getBrickSize.d.ts +0 -3
  230. package/dist/util/brick/getScaleAxis.d.ts +0 -3
  231. package/dist/util/brick/index.d.ts +0 -14
  232. package/dist/util/brick/rotate.d.ts +0 -16
  233. package/dist/util/brick/setOwnership.d.ts +0 -12
  234. package/dist/util/chat.d.ts +0 -23
  235. package/dist/util/color.d.ts +0 -13
  236. package/dist/util/file.d.ts +0 -5
  237. package/dist/util/index.d.ts +0 -183
  238. package/dist/util/map.d.ts +0 -6
  239. package/dist/util/pattern.d.ts +0 -1
  240. package/dist/util/time.d.ts +0 -39
  241. package/dist/util/uuid.d.ts +0 -3
  242. package/dist/util/wsl.d.ts +0 -2
  243. package/dist/version.d.ts +0 -2
  244. package/dist/webserver/backend/api.d.ts +0 -115
  245. package/dist/webserver/backend/calendar.d.ts +0 -5
  246. package/dist/webserver/backend/database.d.ts +0 -150
  247. package/dist/webserver/backend/index.d.ts +0 -30
  248. package/dist/webserver/backend/metrics.d.ts +0 -3
  249. package/dist/webserver/backend/types.d.ts +0 -114
  250. package/dist/webserver/backend/types.js +0 -3
  251. package/dist/webserver/backend/types.js.map +0 -1
  252. package/dist/webserver/backend/util.d.ts +0 -2
  253. package/dist/webserver/index.d.ts +0 -2
  254. package/dist/webserver/index.js +0 -9
  255. package/dist/webserver/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/omegga/matchers/init.ts"],"names":[],"mappings":";;;;;AAAA,0DAA8B;AAG9B,MAAM,IAAI,GAAyB,OAAO,CAAC,EAAE;IAC3C,OAAO;QACL,2BAA2B;QAC3B,OAAO,CAAC,KAAK,EAAE,QAAQ;YACrB,kCAAkC;YAClC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAE5C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;gBAAE,OAAO;YAE1C,sCAAsC;YACtC,IAAI,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,EAAE,CAAC;gBACnE,gBAAM,CAAC,IAAI,CACT,YAAY,CAAC,MAAM,EACnB,0EAA0E,CAC3E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,QAAQ,KAAI,CAAC;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"init.js","sources":["../../../src/omegga/matchers/init.ts"],"sourcesContent":["import Logger from '@/logger';\nimport { MatchGenerator } from './types';\n\nconst init: MatchGenerator<void> = _omegga => {\n return {\n // listen for auth messages\n pattern(_line, logMatch) {\n // line is not generic console log\n if (!logMatch) return;\n\n const { generator, data } = logMatch.groups;\n\n if (!generator.match(/^LogInit$/)) return;\n\n // check if log is the kill server log\n if (data.match(/we are not the first instance of this executable/)) {\n Logger.warn(\n 'W> WARNING'.yellow,\n 'You are running multiple brickadia instances, this better be intentional',\n );\n }\n },\n\n callback() {},\n };\n};\n\nexport default init;\n"],"names":["Logger"],"mappings":";;;AAGA,MAAM,OAA6B,CAAA,YAAW;AAC5C,SAAO;AAAA;AAAA,IAEL,QAAQ,OAAO,UAAU;AAEvB,UAAI,CAAC,SAAU;AAEf,YAAM,EAAE,WAAW,KAAA,IAAS,SAAS;AAErC,UAAI,CAAC,UAAU,MAAM,WAAW,EAAG;AAGnC,UAAI,KAAK,MAAM,kDAAkD,GAAG;AAClEA,eAAAA,QAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,IAEA,WAAW;AAAA,IAAC;AAAA,EAAA;AAEhB;;"}
@@ -1,69 +1,63 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const logger_1 = __importDefault(require("../../logger"));
7
- const brick_1 = require("../../util/brick");
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const logger = require("../../logger.js");
4
+ const displayName = require("../../util/brick/displayName.js");
8
5
  const interactRegExp = /^Player "(?<name>[^"]+)" \((?<id>[^,]+), (?<pawn>[^,]+), (?<controller>[^)]+)\) interacted with brick "(?<brick>[^\"]+)" at (?<x>-?\d+) (?<y>-?\d+) (?<z>-?\d+), message: "(?<message>.*)".$/;
9
6
  const customEventRegExp = /^event:(?<name>[^:]+)(:(?<args>.*))?$/;
10
- const interact = omegga => {
11
- return {
12
- // listen for auth messages
13
- pattern(_line, logMatch) {
14
- var _a, _b;
15
- // line is not generic console log
16
- if (!logMatch)
17
- return;
18
- const { generator, data } = logMatch.groups;
19
- if (generator !== 'LogBrickadia')
20
- return;
21
- const match = data.match(interactRegExp);
22
- // check if log is the kill server log
23
- if (match) {
24
- let blob = null, error = false, json = false;
25
- if ((_a = match.groups.message) === null || _a === void 0 ? void 0 : _a.startsWith('json:')) {
26
- json = true;
27
- try {
28
- blob = JSON.parse(match.groups.message.slice(5));
29
- }
30
- catch (err) {
31
- logger_1.default.verbose('Error parsing interact event json', data, err);
32
- error = true;
33
- }
34
- }
35
- const convertedBrick = (_b = (0, brick_1.convertDisplayName)(match.groups.brick)) !== null && _b !== void 0 ? _b : [];
36
- return {
37
- player: {
38
- id: match.groups.id,
39
- name: match.groups.name,
40
- controller: match.groups.controller,
41
- pawn: match.groups.pawn,
42
- },
43
- brick_name: match.groups.brick,
44
- brick_asset: convertedBrick[0],
45
- brick_size: convertedBrick[1],
46
- position: [
47
- Number(match.groups.x),
48
- Number(match.groups.y),
49
- Number(match.groups.z),
50
- ],
51
- message: match.groups.message,
52
- json,
53
- error,
54
- data: blob,
55
- };
56
- }
57
- },
58
- callback(interaction) {
59
- var _a, _b;
60
- const match = interaction.message.match(customEventRegExp);
61
- if (match) {
62
- omegga.emit(`event:${match.groups.name}`, interaction.player, ...((_b = (_a = match.groups.args) === null || _a === void 0 ? void 0 : _a.replace(/\\,/g, '{ESCAPED_COMMA}').split(',').filter(v => typeof v !== 'undefined').map(v => v.replace(/\{ESCAPED_COMMA\}/g, ','))) !== null && _b !== void 0 ? _b : []));
63
- }
64
- omegga.emit('interact', interaction);
65
- },
66
- };
7
+ const interact = (omegga) => {
8
+ return {
9
+ // listen for auth messages
10
+ pattern(_line, logMatch) {
11
+ if (!logMatch) return;
12
+ const { generator, data } = logMatch.groups;
13
+ if (generator !== "LogBrickadia") return;
14
+ const match = data.match(interactRegExp);
15
+ if (match) {
16
+ let blob = null, error = false, json = false;
17
+ if (match.groups.message?.startsWith("json:")) {
18
+ json = true;
19
+ try {
20
+ blob = JSON.parse(match.groups.message.slice(5));
21
+ } catch (err) {
22
+ logger.default.verbose("Error parsing interact event json", data, err);
23
+ error = true;
24
+ }
25
+ }
26
+ const convertedBrick = displayName.convertDisplayName(match.groups.brick) ?? [];
27
+ return {
28
+ player: {
29
+ id: match.groups.id,
30
+ name: match.groups.name,
31
+ controller: match.groups.controller,
32
+ pawn: match.groups.pawn
33
+ },
34
+ brick_name: match.groups.brick,
35
+ brick_asset: convertedBrick[0],
36
+ brick_size: convertedBrick[1],
37
+ position: [
38
+ Number(match.groups.x),
39
+ Number(match.groups.y),
40
+ Number(match.groups.z)
41
+ ],
42
+ message: match.groups.message,
43
+ json,
44
+ error,
45
+ data: blob
46
+ };
47
+ }
48
+ },
49
+ callback(interaction) {
50
+ const match = interaction.message.match(customEventRegExp);
51
+ if (match) {
52
+ omegga.emit(
53
+ `event:${match.groups.name}`,
54
+ interaction.player,
55
+ ...match.groups.args?.replace(/\\,/g, "{ESCAPED_COMMA}").split(",").filter((v) => typeof v !== "undefined").map((v) => v.replace(/\{ESCAPED_COMMA\}/g, ",")) ?? []
56
+ );
57
+ }
58
+ omegga.emit("interact", interaction);
59
+ }
60
+ };
67
61
  };
68
62
  exports.default = interact;
69
- //# sourceMappingURL=interact.js.map
63
+ //# sourceMappingURL=interact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interact.js","sourceRoot":"","sources":["../../../src/omegga/matchers/interact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interact.js","sources":["../../../src/omegga/matchers/interact.ts"],"sourcesContent":["import { MatchGenerator } from './types';\nimport { BrickInteraction } from '@/plugin';\nimport Logger from '@/logger';\nimport { convertDisplayName } from '@util/brick';\n\nconst interactRegExp =\n /^Player \"(?<name>[^\"]+)\" \\((?<id>[^,]+), (?<pawn>[^,]+), (?<controller>[^)]+)\\) interacted with brick \"(?<brick>[^\\\"]+)\" at (?<x>-?\\d+) (?<y>-?\\d+) (?<z>-?\\d+), message: \"(?<message>.*)\".$/;\n\nconst customEventRegExp = /^event:(?<name>[^:]+)(:(?<args>.*))?$/;\n\nconst interact: MatchGenerator<BrickInteraction> = omegga => {\n return {\n // listen for auth messages\n pattern(_line, logMatch) {\n // line is not generic console log\n if (!logMatch) return;\n\n const { generator, data } = logMatch.groups;\n\n if (generator !== 'LogBrickadia') return;\n\n const match = data.match(interactRegExp);\n\n // check if log is the kill server log\n if (match) {\n let blob: any = null,\n error = false,\n json = false;\n if (match.groups.message?.startsWith('json:')) {\n json = true;\n try {\n blob = JSON.parse(match.groups.message.slice(5));\n } catch (err) {\n Logger.verbose('Error parsing interact event json', data, err);\n error = true;\n }\n }\n\n const convertedBrick = convertDisplayName(match.groups.brick) ?? [];\n\n return {\n player: {\n id: match.groups.id,\n name: match.groups.name,\n controller: match.groups.controller,\n pawn: match.groups.pawn,\n },\n brick_name: match.groups.brick,\n brick_asset: convertedBrick[0],\n brick_size: convertedBrick[1],\n position: [\n Number(match.groups.x),\n Number(match.groups.y),\n Number(match.groups.z),\n ],\n message: match.groups.message,\n json,\n error,\n data: blob,\n };\n }\n },\n\n callback(interaction) {\n const match = interaction.message.match(customEventRegExp);\n if (match) {\n omegga.emit(\n `event:${match.groups.name}`,\n interaction.player,\n ...(match.groups.args\n ?.replace(/\\\\,/g, '{ESCAPED_COMMA}')\n .split(',')\n .filter(v => typeof v !== 'undefined')\n .map(v => v.replace(/\\{ESCAPED_COMMA\\}/g, ',')) ?? []),\n );\n }\n\n omegga.emit('interact', interaction);\n },\n };\n};\n\nexport default interact;\n"],"names":["Logger","convertDisplayName"],"mappings":";;;;AAKA,MAAM,iBACJ;AAEF,MAAM,oBAAoB;AAE1B,MAAM,WAA6C,CAAA,WAAU;AAC3D,SAAO;AAAA;AAAA,IAEL,QAAQ,OAAO,UAAU;AAEvB,UAAI,CAAC,SAAU;AAEf,YAAM,EAAE,WAAW,KAAA,IAAS,SAAS;AAErC,UAAI,cAAc,eAAgB;AAElC,YAAM,QAAQ,KAAK,MAAM,cAAc;AAGvC,UAAI,OAAO;AACT,YAAI,OAAY,MACd,QAAQ,OACR,OAAO;AACT,YAAI,MAAM,OAAO,SAAS,WAAW,OAAO,GAAG;AAC7C,iBAAO;AACP,cAAI;AACF,mBAAO,KAAK,MAAM,MAAM,OAAO,QAAQ,MAAM,CAAC,CAAC;AAAA,UACjD,SAAS,KAAK;AACZA,mBAAAA,QAAO,QAAQ,qCAAqC,MAAM,GAAG;AAC7D,oBAAQ;AAAA,UACV;AAAA,QACF;AAEA,cAAM,iBAAiBC,YAAAA,mBAAmB,MAAM,OAAO,KAAK,KAAK,CAAA;AAEjE,eAAO;AAAA,UACL,QAAQ;AAAA,YACN,IAAI,MAAM,OAAO;AAAA,YACjB,MAAM,MAAM,OAAO;AAAA,YACnB,YAAY,MAAM,OAAO;AAAA,YACzB,MAAM,MAAM,OAAO;AAAA,UAAA;AAAA,UAErB,YAAY,MAAM,OAAO;AAAA,UACzB,aAAa,eAAe,CAAC;AAAA,UAC7B,YAAY,eAAe,CAAC;AAAA,UAC5B,UAAU;AAAA,YACR,OAAO,MAAM,OAAO,CAAC;AAAA,YACrB,OAAO,MAAM,OAAO,CAAC;AAAA,YACrB,OAAO,MAAM,OAAO,CAAC;AAAA,UAAA;AAAA,UAEvB,SAAS,MAAM,OAAO;AAAA,UACtB;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QAAA;AAAA,MAEV;AAAA,IACF;AAAA,IAEA,SAAS,aAAa;AACpB,YAAM,QAAQ,YAAY,QAAQ,MAAM,iBAAiB;AACzD,UAAI,OAAO;AACT,eAAO;AAAA,UACL,SAAS,MAAM,OAAO,IAAI;AAAA,UAC1B,YAAY;AAAA,UACZ,GAAI,MAAM,OAAO,MACb,QAAQ,QAAQ,iBAAiB,EAClC,MAAM,GAAG,EACT,OAAO,OAAK,OAAO,MAAM,WAAW,EACpC,IAAI,CAAA,MAAK,EAAE,QAAQ,sBAAsB,GAAG,CAAC,KAAK,CAAA;AAAA,QAAC;AAAA,MAE1D;AAEA,aAAO,KAAK,YAAY,WAAW;AAAA,IACrC;AAAA,EAAA;AAEJ;;"}
@@ -1,98 +1,77 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const player_1 = __importDefault(require("../player"));
7
- const join = omegga => {
8
- // username + id and a log counter to keep track of actual join messages
9
- const userJoinInfo = [];
10
- // username + id to get player state and controller
11
- const joiningPlayers = [];
12
- // patterns to match PlayerState and PlayerController objects in GetAll commands
13
- const stateRegExp = /BP_PlayerState_C .+?PersistentLevel\.(?<state>BP_PlayerState_C_\d+)\.UserName = (?<name>.+)$/;
14
- const controllerRegExp = /BP_PlayerState_C .+?PersistentLevel\.(?<state>BP_PlayerState_C_\d+)\.Owner = .*?BP_PlayerController_C'.+?:PersistentLevel.(?<controller>BP_PlayerController_C_\d+)'/;
15
- return {
16
- // listen for join events and wait for PlayerController info
17
- pattern(line, logMatch) {
18
- if (logMatch) {
19
- const { generator, counter, data } = logMatch.groups;
20
- let joinData = userJoinInfo.find(l => l.counter === counter);
21
- // LogServerList includes the new user information
22
- if (generator === 'LogServerList') {
23
- // create joindata if it doesn't exist
24
- if (!joinData) {
25
- joinData = { counter };
26
- userJoinInfo.push(joinData);
27
- }
28
- // match on username or user id
29
- const match = data.match(/^(?<field>UserName|UserId|DisplayName): (?<value>.+)$/);
30
- // put that value in the join data
31
- if (match) {
32
- joinData[match.groups.field] = match.groups.value;
33
- }
34
- // LogNet lets us know the player successfully joined
35
- }
36
- else if (generator == 'LogNet') {
37
- // find which player joined
38
- const match = data.match(/^Join succeeded: (.+)$/);
39
- // make sure this joindata corresponds to this player
40
- // TODO: [BRICKADIA] display name used here instead of username...
41
- if (match && joinData.DisplayName === match[1]) {
42
- // remove that player from our buffer
43
- userJoinInfo.splice(userJoinInfo.indexOf(joinData), 1);
44
- // found joined player, now we need to find the BRPlayerState
45
- joiningPlayers.push({
46
- displayName: joinData.DisplayName,
47
- name: joinData.UserName,
48
- id: joinData.UserId,
49
- });
50
- // get the state of all players so we can determine which is this player
51
- // TODO: maybe also use the ReplicatedJoinTime, which matches the time for these logs
52
- omegga.writeln('GetAll BRPlayerState UserName');
53
- }
54
- }
55
- // only match state and controllers if we have joining players
56
- }
57
- else if (joiningPlayers.length) {
58
- const stateMatch = line.match(stateRegExp);
59
- const controllerMatch = line.match(controllerRegExp);
60
- // this line matches our PlayerName -> PlayerState pattern
61
- if (stateMatch) {
62
- const { name, state } = stateMatch.groups;
63
- // find the joining player that has a matching name
64
- const player = joiningPlayers.find(p => p.name === name);
65
- // check if another player is already using this state or if there's any joining player with this name
66
- if (!player || omegga.players.some(p => p.state === state))
67
- return;
68
- // this player owns this state, find the controller now
69
- player.state = state;
70
- omegga.writeln(`GetAll BRPlayerState Owner Name=${state}`);
71
- // this line matches our PlayerState -> PlayerController pattern
72
- }
73
- else if (controllerMatch) {
74
- const { controller, state } = controllerMatch.groups;
75
- // find the joining player that has a matching state
76
- const player = joiningPlayers.find(p => p.state === state);
77
- // no player found
78
- if (!player)
79
- return;
80
- // assign the controller and state, remove the player from the joining players
81
- player.controller = controller;
82
- player.state = state;
83
- joiningPlayers.splice(joiningPlayers.indexOf(player), 1);
84
- // return the newly joined player
85
- return new player_1.default(omegga, player.name, player.displayName, player.id, player.controller, player.state);
86
- }
87
- }
88
- },
89
- // when there's a match, emit a join event and add the player to the player list
90
- callback(player) {
91
- omegga.emit('join', player);
92
- omegga.players.push(player);
93
- omegga.emit('plugin:players:raw', omegga.players.map(p => p.raw()));
94
- },
95
- };
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const player = require("../player.js");
4
+ const join = (omegga) => {
5
+ const userJoinInfo = [];
6
+ const joiningPlayers = [];
7
+ const stateRegExp = /BP_PlayerState_C .+?PersistentLevel\.(?<state>BP_PlayerState_C_\d+)\.UserName = (?<name>.+)$/;
8
+ const controllerRegExp = /BP_PlayerState_C .+?PersistentLevel\.(?<state>BP_PlayerState_C_\d+)\.Owner = .*?BP_PlayerController_C'.+?:PersistentLevel.(?<controller>BP_PlayerController_C_\d+)'/;
9
+ return {
10
+ // listen for join events and wait for PlayerController info
11
+ pattern(line, logMatch) {
12
+ if (logMatch) {
13
+ const { generator, counter, data } = logMatch.groups;
14
+ let joinData = userJoinInfo.find((l) => l.counter === counter);
15
+ if (generator === "LogServerList") {
16
+ if (!joinData) {
17
+ joinData = { counter };
18
+ userJoinInfo.push(joinData);
19
+ }
20
+ const match = data.match(
21
+ /^(?<field>UserName|UserId|DisplayName): (?<value>.+)$/
22
+ );
23
+ if (match) {
24
+ joinData[match.groups.field] = match.groups.value;
25
+ }
26
+ } else if (generator == "LogNet") {
27
+ const match = data.match(/^Join succeeded: (.+)$/);
28
+ if (match && joinData.DisplayName === match[1]) {
29
+ userJoinInfo.splice(userJoinInfo.indexOf(joinData), 1);
30
+ joiningPlayers.push({
31
+ displayName: joinData.DisplayName,
32
+ name: joinData.UserName,
33
+ id: joinData.UserId
34
+ });
35
+ omegga.writeln("GetAll BRPlayerState UserName");
36
+ }
37
+ }
38
+ } else if (joiningPlayers.length) {
39
+ const stateMatch = line.match(stateRegExp);
40
+ const controllerMatch = line.match(controllerRegExp);
41
+ if (stateMatch) {
42
+ const { name, state } = stateMatch.groups;
43
+ const player2 = joiningPlayers.find((p) => p.name === name);
44
+ if (!player2 || omegga.players.some((p) => p.state === state)) return;
45
+ player2.state = state;
46
+ omegga.writeln(`GetAll BRPlayerState Owner Name=${state}`);
47
+ } else if (controllerMatch) {
48
+ const { controller, state } = controllerMatch.groups;
49
+ const player$1 = joiningPlayers.find((p) => p.state === state);
50
+ if (!player$1) return;
51
+ player$1.controller = controller;
52
+ player$1.state = state;
53
+ joiningPlayers.splice(joiningPlayers.indexOf(player$1), 1);
54
+ return new player.default(
55
+ omegga,
56
+ player$1.name,
57
+ player$1.displayName,
58
+ player$1.id,
59
+ player$1.controller,
60
+ player$1.state
61
+ );
62
+ }
63
+ }
64
+ },
65
+ // when there's a match, emit a join event and add the player to the player list
66
+ callback(player2) {
67
+ omegga.emit("join", player2);
68
+ omegga.players.push(player2);
69
+ omegga.emit(
70
+ "plugin:players:raw",
71
+ omegga.players.map((p) => p.raw())
72
+ );
73
+ }
74
+ };
96
75
  };
97
76
  exports.default = join;
98
- //# sourceMappingURL=join.js.map
77
+ //# sourceMappingURL=join.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"join.js","sourceRoot":"","sources":["../../../src/omegga/matchers/join.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"join.js","sources":["../../../src/omegga/matchers/join.ts"],"sourcesContent":["import Player from '@omegga/player';\nimport { MatchGenerator } from './types';\n\nconst join: MatchGenerator<Player> = omegga => {\n // username + id and a log counter to keep track of actual join messages\n const userJoinInfo: {\n counter: string;\n UserName?: string;\n UserId?: string;\n DisplayName?: string;\n }[] = [];\n\n // username + id to get player state and controller\n const joiningPlayers: {\n displayName: string;\n name: string;\n id: string;\n state?: string;\n controller?: string;\n }[] = [];\n\n // patterns to match PlayerState and PlayerController objects in GetAll commands\n const stateRegExp =\n /BP_PlayerState_C .+?PersistentLevel\\.(?<state>BP_PlayerState_C_\\d+)\\.UserName = (?<name>.+)$/;\n const controllerRegExp =\n /BP_PlayerState_C .+?PersistentLevel\\.(?<state>BP_PlayerState_C_\\d+)\\.Owner = .*?BP_PlayerController_C'.+?:PersistentLevel.(?<controller>BP_PlayerController_C_\\d+)'/;\n\n return {\n // listen for join events and wait for PlayerController info\n pattern(line, logMatch) {\n if (logMatch) {\n const { generator, counter, data } = logMatch.groups;\n let joinData = userJoinInfo.find(l => l.counter === counter);\n\n // LogServerList includes the new user information\n if (generator === 'LogServerList') {\n // create joindata if it doesn't exist\n if (!joinData) {\n joinData = { counter };\n userJoinInfo.push(joinData);\n }\n\n // match on username or user id\n const match = data.match(\n /^(?<field>UserName|UserId|DisplayName): (?<value>.+)$/,\n );\n\n // put that value in the join data\n if (match) {\n joinData[\n match.groups.field as 'UserName' | 'UserId' | 'DisplayName'\n ] = match.groups.value;\n }\n\n // LogNet lets us know the player successfully joined\n } else if (generator == 'LogNet') {\n // find which player joined\n const match = data.match(/^Join succeeded: (.+)$/);\n\n // make sure this joindata corresponds to this player\n // TODO: [BRICKADIA] display name used here instead of username...\n if (match && joinData.DisplayName === match[1]) {\n // remove that player from our buffer\n userJoinInfo.splice(userJoinInfo.indexOf(joinData), 1);\n\n // found joined player, now we need to find the BRPlayerState\n joiningPlayers.push({\n displayName: joinData.DisplayName,\n name: joinData.UserName,\n id: joinData.UserId,\n });\n\n // get the state of all players so we can determine which is this player\n // TODO: maybe also use the ReplicatedJoinTime, which matches the time for these logs\n omegga.writeln('GetAll BRPlayerState UserName');\n }\n }\n\n // only match state and controllers if we have joining players\n } else if (joiningPlayers.length) {\n const stateMatch = line.match(stateRegExp);\n const controllerMatch = line.match(controllerRegExp);\n\n // this line matches our PlayerName -> PlayerState pattern\n if (stateMatch) {\n const { name, state } = stateMatch.groups;\n\n // find the joining player that has a matching name\n const player = joiningPlayers.find(p => p.name === name);\n\n // check if another player is already using this state or if there's any joining player with this name\n if (!player || omegga.players.some(p => p.state === state)) return;\n\n // this player owns this state, find the controller now\n player.state = state;\n omegga.writeln(`GetAll BRPlayerState Owner Name=${state}`);\n\n // this line matches our PlayerState -> PlayerController pattern\n } else if (controllerMatch) {\n const { controller, state } = controllerMatch.groups;\n\n // find the joining player that has a matching state\n const player = joiningPlayers.find(p => p.state === state);\n\n // no player found\n if (!player) return;\n\n // assign the controller and state, remove the player from the joining players\n player.controller = controller;\n player.state = state;\n joiningPlayers.splice(joiningPlayers.indexOf(player), 1);\n\n // return the newly joined player\n return new Player(\n omegga,\n player.name,\n player.displayName,\n player.id,\n player.controller,\n player.state,\n );\n }\n }\n },\n // when there's a match, emit a join event and add the player to the player list\n callback(player) {\n omegga.emit('join', player);\n omegga.players.push(player);\n omegga.emit(\n 'plugin:players:raw',\n omegga.players.map(p => p.raw()),\n );\n },\n };\n};\n\nexport default join;\n"],"names":["player","Player"],"mappings":";;;AAGA,MAAM,OAA+B,CAAA,WAAU;AAE7C,QAAM,eAKA,CAAA;AAGN,QAAM,iBAMA,CAAA;AAGN,QAAM,cACJ;AACF,QAAM,mBACJ;AAEF,SAAO;AAAA;AAAA,IAEL,QAAQ,MAAM,UAAU;AACtB,UAAI,UAAU;AACZ,cAAM,EAAE,WAAW,SAAS,KAAA,IAAS,SAAS;AAC9C,YAAI,WAAW,aAAa,KAAK,CAAA,MAAK,EAAE,YAAY,OAAO;AAG3D,YAAI,cAAc,iBAAiB;AAEjC,cAAI,CAAC,UAAU;AACb,uBAAW,EAAE,QAAA;AACb,yBAAa,KAAK,QAAQ;AAAA,UAC5B;AAGA,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,UAAA;AAIF,cAAI,OAAO;AACT,qBACE,MAAM,OAAO,KACf,IAAI,MAAM,OAAO;AAAA,UACnB;AAAA,QAGF,WAAW,aAAa,UAAU;AAEhC,gBAAM,QAAQ,KAAK,MAAM,wBAAwB;AAIjD,cAAI,SAAS,SAAS,gBAAgB,MAAM,CAAC,GAAG;AAE9C,yBAAa,OAAO,aAAa,QAAQ,QAAQ,GAAG,CAAC;AAGrD,2BAAe,KAAK;AAAA,cAClB,aAAa,SAAS;AAAA,cACtB,MAAM,SAAS;AAAA,cACf,IAAI,SAAS;AAAA,YAAA,CACd;AAID,mBAAO,QAAQ,+BAA+B;AAAA,UAChD;AAAA,QACF;AAAA,MAGF,WAAW,eAAe,QAAQ;AAChC,cAAM,aAAa,KAAK,MAAM,WAAW;AACzC,cAAM,kBAAkB,KAAK,MAAM,gBAAgB;AAGnD,YAAI,YAAY;AACd,gBAAM,EAAE,MAAM,MAAA,IAAU,WAAW;AAGnC,gBAAMA,UAAS,eAAe,KAAK,CAAA,MAAK,EAAE,SAAS,IAAI;AAGvD,cAAI,CAACA,WAAU,OAAO,QAAQ,KAAK,CAAA,MAAK,EAAE,UAAU,KAAK,EAAG;AAG5D,UAAAA,QAAO,QAAQ;AACf,iBAAO,QAAQ,mCAAmC,KAAK,EAAE;AAAA,QAG3D,WAAW,iBAAiB;AAC1B,gBAAM,EAAE,YAAY,MAAA,IAAU,gBAAgB;AAG9C,gBAAMA,WAAS,eAAe,KAAK,CAAA,MAAK,EAAE,UAAU,KAAK;AAGzD,cAAI,CAACA,SAAQ;AAGbA,mBAAO,aAAa;AACpBA,mBAAO,QAAQ;AACf,yBAAe,OAAO,eAAe,QAAQA,QAAM,GAAG,CAAC;AAGvD,iBAAO,IAAIC,OAAAA;AAAAA,YACT;AAAA,YACAD,SAAO;AAAA,YACPA,SAAO;AAAA,YACPA,SAAO;AAAA,YACPA,SAAO;AAAA,YACPA,SAAO;AAAA,UAAA;AAAA,QAEX;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAEA,SAASA,SAAQ;AACf,aAAO,KAAK,QAAQA,OAAM;AAC1B,aAAO,QAAQ,KAAKA,OAAM;AAC1B,aAAO;AAAA,QACL;AAAA,QACA,OAAO,QAAQ,IAAI,CAAA,MAAK,EAAE,KAAK;AAAA,MAAA;AAAA,IAEnC;AAAA,EAAA;AAEJ;;"}
@@ -1,59 +1,46 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const logger_1 = __importDefault(require("../../logger"));
7
- const leave = omegga => {
8
- // pattern to get PlayerController from a leave message
9
- const ownerRegExp = /Owner: (BP_PlayerController_C_\d+)/;
10
- return {
11
- // listen for leave events and wait for PlayerController info
12
- pattern(_line, logMatch) {
13
- // line is not generic console log
14
- if (!logMatch)
15
- return;
16
- const { generator, data } = logMatch.groups;
17
- // check if log is a disconnect log
18
- if (generator !== 'LogNet' || !data.startsWith('UChannel::Close:'))
19
- return;
20
- // get the PlayerController from the leave message if there is one (there should be)
21
- const match = data.match(ownerRegExp);
22
- if (!match)
23
- return null;
24
- // helper func for finding player with this controller
25
- const getLeavingPlayer = () => omegga.players.find(p => p.controller === match[1]);
26
- let found = getLeavingPlayer();
27
- // attempt to find the player over the course of 2 seconds
28
- // this is because a player can join before all their data is collected
29
- return new Promise((resolve, reject) => {
30
- let tries = 50;
31
- function attempt() {
32
- found = getLeavingPlayer();
33
- if (found)
34
- return resolve(found);
35
- if (tries-- < 0)
36
- return reject('ghost player ' + match[1]);
37
- setTimeout(attempt, 50);
38
- }
39
- attempt();
40
- });
41
- },
42
- // when there's a match, remove the player from the player list, emit a leave event
43
- async callback(res) {
44
- if (!(res instanceof Promise))
45
- return;
46
- try {
47
- const player = await res;
48
- omegga.players.splice(omegga.players.indexOf(player), 1);
49
- omegga.emit('leave', player);
50
- omegga.emit('plugin:players:raw', omegga.players.map(p => p.raw()));
51
- }
52
- catch (e) {
53
- logger_1.default.error('error getting player leave', e);
54
- }
55
- },
56
- };
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const logger = require("../../logger.js");
4
+ const leave = (omegga) => {
5
+ const ownerRegExp = /Owner: (BP_PlayerController_C_\d+)/;
6
+ return {
7
+ // listen for leave events and wait for PlayerController info
8
+ pattern(_line, logMatch) {
9
+ if (!logMatch) return;
10
+ const { generator, data } = logMatch.groups;
11
+ if (generator !== "LogNet" || !data.startsWith("UChannel::Close:"))
12
+ return;
13
+ const match = data.match(ownerRegExp);
14
+ if (!match) return null;
15
+ const getLeavingPlayer = () => omegga.players.find((p) => p.controller === match[1]);
16
+ let found = getLeavingPlayer();
17
+ return new Promise((resolve, reject) => {
18
+ let tries = 50;
19
+ function attempt() {
20
+ found = getLeavingPlayer();
21
+ if (found) return resolve(found);
22
+ if (tries-- < 0) return reject("ghost player " + match[1]);
23
+ setTimeout(attempt, 50);
24
+ }
25
+ attempt();
26
+ });
27
+ },
28
+ // when there's a match, remove the player from the player list, emit a leave event
29
+ async callback(res) {
30
+ if (!(res instanceof Promise)) return;
31
+ try {
32
+ const player = await res;
33
+ omegga.players.splice(omegga.players.indexOf(player), 1);
34
+ omegga.emit("leave", player);
35
+ omegga.emit(
36
+ "plugin:players:raw",
37
+ omegga.players.map((p) => p.raw())
38
+ );
39
+ } catch (e) {
40
+ logger.default.error("error getting player leave", e);
41
+ }
42
+ }
43
+ };
57
44
  };
58
45
  exports.default = leave;
59
- //# sourceMappingURL=leave.js.map
46
+ //# sourceMappingURL=leave.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"leave.js","sourceRoot":"","sources":["../../../src/omegga/matchers/leave.ts"],"names":[],"mappings":";;;;;AAEA,0DAA8B;AAE9B,MAAM,KAAK,GAA0C,MAAM,CAAC,EAAE;IAC5D,uDAAuD;IACvD,MAAM,WAAW,GAAG,oCAAoC,CAAC;IAEzD,OAAO;QACL,6DAA6D;QAC7D,OAAO,CAAC,KAAK,EAAE,QAAQ;YACrB,kCAAkC;YAClC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,mCAAmC;YACnC,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;gBAChE,OAAO;YAET,oFAAoF;YACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YAExB,sDAAsD;YACtD,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtD,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;YAE/B,0DAA0D;YAC1D,uEAAuE;YACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,SAAS,OAAO;oBACd,KAAK,GAAG,gBAAgB,EAAE,CAAC;oBAE3B,IAAI,KAAK;wBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,KAAK,EAAE,GAAG,CAAC;wBAAE,OAAO,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE3D,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,mFAAmF;QACnF,KAAK,CAAC,QAAQ,CAAC,GAAG;YAChB,IAAI,CAAC,CAAC,GAAG,YAAY,OAAO,CAAC;gBAAE,OAAO;YAEtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC;gBACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CACjC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,gBAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"leave.js","sources":["../../../src/omegga/matchers/leave.ts"],"sourcesContent":["import { MatchGenerator } from './types';\nimport { OmeggaPlayer } from '@/plugin';\nimport Logger from '@/logger';\n\nconst leave: MatchGenerator<Promise<OmeggaPlayer>> = omegga => {\n // pattern to get PlayerController from a leave message\n const ownerRegExp = /Owner: (BP_PlayerController_C_\\d+)/;\n\n return {\n // listen for leave events and wait for PlayerController info\n pattern(_line, logMatch) {\n // line is not generic console log\n if (!logMatch) return;\n\n const { generator, data } = logMatch.groups;\n // check if log is a disconnect log\n if (generator !== 'LogNet' || !data.startsWith('UChannel::Close:'))\n return;\n\n // get the PlayerController from the leave message if there is one (there should be)\n const match = data.match(ownerRegExp);\n if (!match) return null;\n\n // helper func for finding player with this controller\n const getLeavingPlayer = () =>\n omegga.players.find(p => p.controller === match[1]);\n\n let found = getLeavingPlayer();\n\n // attempt to find the player over the course of 2 seconds\n // this is because a player can join before all their data is collected\n return new Promise((resolve, reject) => {\n let tries = 50;\n function attempt() {\n found = getLeavingPlayer();\n\n if (found) return resolve(found);\n if (tries-- < 0) return reject('ghost player ' + match[1]);\n\n setTimeout(attempt, 50);\n }\n attempt();\n });\n },\n // when there's a match, remove the player from the player list, emit a leave event\n async callback(res) {\n if (!(res instanceof Promise)) return;\n\n try {\n const player = await res;\n omegga.players.splice(omegga.players.indexOf(player), 1);\n omegga.emit('leave', player);\n omegga.emit(\n 'plugin:players:raw',\n omegga.players.map(p => p.raw()),\n );\n } catch (e) {\n Logger.error('error getting player leave', e);\n }\n },\n };\n};\n\nexport default leave;\n"],"names":["Logger"],"mappings":";;;AAIA,MAAM,QAA+C,CAAA,WAAU;AAE7D,QAAM,cAAc;AAEpB,SAAO;AAAA;AAAA,IAEL,QAAQ,OAAO,UAAU;AAEvB,UAAI,CAAC,SAAU;AAEf,YAAM,EAAE,WAAW,KAAA,IAAS,SAAS;AAErC,UAAI,cAAc,YAAY,CAAC,KAAK,WAAW,kBAAkB;AAC/D;AAGF,YAAM,QAAQ,KAAK,MAAM,WAAW;AACpC,UAAI,CAAC,MAAO,QAAO;AAGnB,YAAM,mBAAmB,MACvB,OAAO,QAAQ,KAAK,OAAK,EAAE,eAAe,MAAM,CAAC,CAAC;AAEpD,UAAI,QAAQ,iBAAA;AAIZ,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAI,QAAQ;AACZ,iBAAS,UAAU;AACjB,kBAAQ,iBAAA;AAER,cAAI,MAAO,QAAO,QAAQ,KAAK;AAC/B,cAAI,UAAU,EAAG,QAAO,OAAO,kBAAkB,MAAM,CAAC,CAAC;AAEzD,qBAAW,SAAS,EAAE;AAAA,QACxB;AACA,gBAAA;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,IAEA,MAAM,SAAS,KAAK;AAClB,UAAI,EAAE,eAAe,SAAU;AAE/B,UAAI;AACF,cAAM,SAAS,MAAM;AACrB,eAAO,QAAQ,OAAO,OAAO,QAAQ,QAAQ,MAAM,GAAG,CAAC;AACvD,eAAO,KAAK,SAAS,MAAM;AAC3B,eAAO;AAAA,UACL;AAAA,UACA,OAAO,QAAQ,IAAI,CAAA,MAAK,EAAE,KAAK;AAAA,QAAA;AAAA,MAEnC,SAAS,GAAG;AACVA,uBAAO,MAAM,8BAA8B,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
@@ -1,38 +1,29 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const map_1 = require("../../util/map");
4
- const mapChange = omegga => {
5
- // LogLoad: Took 0.396473 seconds to LoadMap(/Game/Maps/Plate/Plate)
6
- const mapChangeRegExp = /^Took .+ seconds to LoadMap\((?<map>.+)\)$/;
7
- return {
8
- // listen for commands messages
9
- pattern(_line, logMatch) {
10
- // line is not generic console log
11
- if (!logMatch)
12
- return;
13
- const { generator, data } = logMatch.groups;
14
- // check if log is a world log
15
- if (generator !== 'LogLoad')
16
- return;
17
- // match the log to the map change finish pattern
18
- const matchChange = data.match(mapChangeRegExp);
19
- if (matchChange && matchChange.groups && matchChange.groups.map) {
20
- return (0, map_1.brn2n)(matchChange.groups.map);
21
- }
22
- return null;
23
- },
24
- // when there's a match, emit the comand event
25
- callback(map) {
26
- // if the only argument is an empty string, ignore it
27
- if (map) {
28
- // dont emit on startup or when there is no current map
29
- if (omegga.started && omegga.currentMap)
30
- omegga.emit('mapchange', { map });
31
- // set omegga's current map
32
- omegga.currentMap = map;
33
- }
34
- },
35
- };
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const map = require("../../util/map.js");
4
+ const mapChange = (omegga) => {
5
+ const mapChangeRegExp = /^Took .+ seconds to LoadMap\((?<map>.+)\)$/;
6
+ return {
7
+ // listen for commands messages
8
+ pattern(_line, logMatch) {
9
+ if (!logMatch) return;
10
+ const { generator, data } = logMatch.groups;
11
+ if (generator !== "LogLoad") return;
12
+ const matchChange = data.match(mapChangeRegExp);
13
+ if (matchChange && matchChange.groups && matchChange.groups.map) {
14
+ return map.brn2n(matchChange.groups.map);
15
+ }
16
+ return null;
17
+ },
18
+ // when there's a match, emit the comand event
19
+ callback(map2) {
20
+ if (map2) {
21
+ if (omegga.started && omegga.currentMap)
22
+ omegga.emit("mapchange", { map: map2 });
23
+ omegga.currentMap = map2;
24
+ }
25
+ }
26
+ };
36
27
  };
37
28
  exports.default = mapChange;
38
- //# sourceMappingURL=mapChange.js.map
29
+ //# sourceMappingURL=mapChange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapChange.js","sourceRoot":"","sources":["../../../src/omegga/matchers/mapChange.ts"],"names":[],"mappings":";;AAAA,wCAAkC;AAGlC,MAAM,SAAS,GAA2B,MAAM,CAAC,EAAE;IACjD,oEAAoE;IACpE,MAAM,eAAe,GAAG,4CAA4C,CAAC;IAErE,OAAO;QACL,+BAA+B;QAC/B,OAAO,CAAC,KAAK,EAAE,QAAQ;YACrB,kCAAkC;YAClC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,8BAA8B;YAC9B,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO;YAEpC,iDAAiD;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAChD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAChE,OAAO,IAAA,WAAK,EAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QACD,8CAA8C;QAC9C,QAAQ,CAAC,GAAG;YACV,qDAAqD;YACrD,IAAI,GAAG,EAAE,CAAC;gBACR,uDAAuD;gBACvD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU;oBACrC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBAEpC,2BAA2B;gBAC3B,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"mapChange.js","sources":["../../../src/omegga/matchers/mapChange.ts"],"sourcesContent":["import { brn2n } from '@util/map';\nimport { MatchGenerator } from './types';\n\nconst mapChange: MatchGenerator<string> = omegga => {\n // LogLoad: Took 0.396473 seconds to LoadMap(/Game/Maps/Plate/Plate)\n const mapChangeRegExp = /^Took .+ seconds to LoadMap\\((?<map>.+)\\)$/;\n\n return {\n // listen for commands messages\n pattern(_line, logMatch) {\n // line is not generic console log\n if (!logMatch) return;\n\n const { generator, data } = logMatch.groups;\n // check if log is a world log\n if (generator !== 'LogLoad') return;\n\n // match the log to the map change finish pattern\n const matchChange = data.match(mapChangeRegExp);\n if (matchChange && matchChange.groups && matchChange.groups.map) {\n return brn2n(matchChange.groups.map);\n }\n\n return null;\n },\n // when there's a match, emit the comand event\n callback(map) {\n // if the only argument is an empty string, ignore it\n if (map) {\n // dont emit on startup or when there is no current map\n if (omegga.started && omegga.currentMap)\n omegga.emit('mapchange', { map });\n\n // set omegga's current map\n omegga.currentMap = map;\n }\n },\n };\n};\n\nexport default mapChange;\n"],"names":["brn2n","map"],"mappings":";;;AAGA,MAAM,YAAoC,CAAA,WAAU;AAElD,QAAM,kBAAkB;AAExB,SAAO;AAAA;AAAA,IAEL,QAAQ,OAAO,UAAU;AAEvB,UAAI,CAAC,SAAU;AAEf,YAAM,EAAE,WAAW,KAAA,IAAS,SAAS;AAErC,UAAI,cAAc,UAAW;AAG7B,YAAM,cAAc,KAAK,MAAM,eAAe;AAC9C,UAAI,eAAe,YAAY,UAAU,YAAY,OAAO,KAAK;AAC/D,eAAOA,UAAM,YAAY,OAAO,GAAG;AAAA,MACrC;AAEA,aAAO;AAAA,IACT;AAAA;AAAA,IAEA,SAASC,MAAK;AAEZ,UAAIA,MAAK;AAEP,YAAI,OAAO,WAAW,OAAO;AAC3B,iBAAO,KAAK,aAAa,EAAE,KAAAA,KAAA,CAAK;AAGlC,eAAO,aAAaA;AAAA,MACtB;AAAA,IACF;AAAA,EAAA;AAEJ;;"}