omegga 0.1.85 → 1.0.2
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/README.md +142 -62
- package/bin/omegga +10 -4
- package/dist/brickadia/config.d.ts +3 -0
- package/dist/brickadia/config.d.ts.map +1 -0
- package/dist/brickadia/config.js +61 -0
- package/dist/brickadia/config.js.map +1 -0
- package/dist/brickadia/presets.d.ts +65 -0
- package/dist/brickadia/presets.js +3 -0
- package/dist/brickadia/presets.js.map +1 -0
- package/dist/brickadia/server.d.ts +20 -0
- package/dist/brickadia/server.d.ts.map +1 -0
- package/dist/brickadia/server.js +188 -0
- package/dist/brickadia/server.js.map +1 -0
- package/dist/brickadia/types.d.ts +45 -0
- package/dist/brickadia/types.d.ts.map +1 -0
- package/dist/brickadia/types.js +3 -0
- package/dist/brickadia/types.js.map +1 -0
- package/dist/cli/auth.d.ts +20 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +115 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +72 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +20 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/installer.d.ts +1 -0
- package/dist/cli/installer.d.ts.map +1 -0
- package/dist/cli/installer.js +55 -0
- package/dist/cli/installer.js.map +1 -0
- package/dist/cli/plugin.d.ts +11 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +598 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli/terminal.d.ts +34 -0
- package/dist/cli/terminal.d.ts.map +1 -0
- package/dist/cli/terminal.js +395 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/config/authorizer.d.ts +2 -0
- package/dist/config/authorizer.d.ts.map +1 -0
- package/dist/config/authorizer.js +38 -0
- package/dist/config/authorizer.js.map +1 -0
- package/dist/config/formats/format_js.d.ts +3 -0
- package/dist/config/formats/format_js.d.ts.map +1 -0
- package/dist/config/formats/format_js.js +10 -0
- package/dist/config/formats/format_js.js.map +1 -0
- package/dist/config/formats/format_yml.d.ts +3 -0
- package/dist/config/formats/format_yml.d.ts.map +1 -0
- package/dist/config/formats/format_yml.js +14 -0
- package/dist/config/formats/format_yml.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +86 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/reader.d.ts +3 -0
- package/dist/config/reader.d.ts.map +1 -0
- package/dist/config/reader.js +30 -0
- package/dist/config/reader.js.map +1 -0
- package/dist/config/types.d.ts +37 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validator.d.ts +6 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +26 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/writer.d.ts +3 -0
- package/dist/config/writer.d.ts.map +1 -0
- package/dist/config/writer.js +25 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/info/default_commands.json +28 -0
- package/dist/lib.d.ts +21 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +54 -0
- package/dist/lib.js.map +1 -0
- package/dist/logger.d.ts +41 -0
- package/dist/logger.js +67 -0
- package/dist/logger.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +284 -0
- package/dist/main.js.map +1 -0
- package/dist/omegga/auth.d.ts +6 -0
- package/dist/omegga/auth.d.ts.map +1 -0
- package/dist/omegga/auth.js +139 -0
- package/dist/omegga/auth.js.map +1 -0
- package/dist/omegga/commandInjector.d.ts +35 -0
- package/dist/omegga/commandInjector.d.ts.map +1 -0
- package/dist/omegga/commandInjector.js +234 -0
- package/dist/omegga/commandInjector.js.map +1 -0
- package/dist/omegga/index.d.ts +7 -0
- package/dist/omegga/index.d.ts.map +1 -0
- package/dist/omegga/index.js +43 -0
- package/dist/omegga/index.js.map +1 -0
- package/dist/omegga/logWrangler.d.ts +32 -0
- package/dist/omegga/logWrangler.d.ts.map +1 -0
- package/dist/omegga/logWrangler.js +279 -0
- package/dist/omegga/logWrangler.js.map +1 -0
- package/dist/omegga/matchers/auth.d.ts +9 -0
- package/dist/omegga/matchers/auth.d.ts.map +1 -0
- package/dist/omegga/matchers/auth.js +53 -0
- package/dist/omegga/matchers/auth.js.map +1 -0
- package/dist/omegga/matchers/chat.d.ts +9 -0
- package/dist/omegga/matchers/chat.d.ts.map +1 -0
- package/dist/omegga/matchers/chat.js +68 -0
- package/dist/omegga/matchers/chat.js.map +1 -0
- package/dist/omegga/matchers/command.d.ts +7 -0
- package/dist/omegga/matchers/command.d.ts.map +1 -0
- package/dist/omegga/matchers/command.js +39 -0
- package/dist/omegga/matchers/command.js.map +1 -0
- package/dist/omegga/matchers/exit.d.ts +3 -0
- package/dist/omegga/matchers/exit.d.ts.map +1 -0
- package/dist/omegga/matchers/exit.js +21 -0
- package/dist/omegga/matchers/exit.js.map +1 -0
- package/dist/omegga/matchers/index.d.ts +3 -0
- package/dist/omegga/matchers/index.d.ts.map +1 -0
- package/dist/omegga/matchers/index.js +39 -0
- package/dist/omegga/matchers/index.js.map +1 -0
- package/dist/omegga/matchers/init.d.ts +3 -0
- package/dist/omegga/matchers/init.d.ts.map +1 -0
- package/dist/omegga/matchers/init.js +26 -0
- package/dist/omegga/matchers/init.js.map +1 -0
- package/dist/omegga/matchers/interact.d.ts +4 -0
- package/dist/omegga/matchers/interact.js +39 -0
- package/dist/omegga/matchers/interact.js.map +1 -0
- package/dist/omegga/matchers/join.d.ts +4 -0
- package/dist/omegga/matchers/join.d.ts.map +1 -0
- package/dist/omegga/matchers/join.js +95 -0
- package/dist/omegga/matchers/join.js.map +1 -0
- package/dist/omegga/matchers/leave.d.ts +4 -0
- package/dist/omegga/matchers/leave.d.ts.map +1 -0
- package/dist/omegga/matchers/leave.js +59 -0
- package/dist/omegga/matchers/leave.js.map +1 -0
- package/dist/omegga/matchers/mapChange.d.ts +3 -0
- package/dist/omegga/matchers/mapChange.d.ts.map +1 -0
- package/dist/omegga/matchers/mapChange.js +38 -0
- package/dist/omegga/matchers/mapChange.js.map +1 -0
- package/dist/omegga/matchers/types.d.ts +5 -0
- package/dist/omegga/matchers/types.d.ts.map +1 -0
- package/dist/omegga/matchers/types.js +7 -0
- package/dist/omegga/matchers/types.js.map +1 -0
- package/dist/omegga/matchers/version.d.ts +3 -0
- package/dist/omegga/matchers/version.d.ts.map +1 -0
- package/dist/omegga/matchers/version.js +45 -0
- package/dist/omegga/matchers/version.js.map +1 -0
- package/dist/omegga/player.d.ts +71 -0
- package/dist/omegga/player.d.ts.map +1 -0
- package/dist/omegga/player.js +442 -0
- package/dist/omegga/player.js.map +1 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +23 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +441 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +129 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +260 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.js +289 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe.d.ts +24 -0
- package/dist/omegga/plugin/plugin_node_safe.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe.js +397 -0
- package/dist/omegga/plugin/plugin_node_safe.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts +13 -0
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_unsafe.js +178 -0
- package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -0
- package/dist/omegga/plugin.d.ts +86 -0
- package/dist/omegga/plugin.d.ts.map +1 -0
- package/dist/omegga/plugin.js +458 -0
- package/dist/omegga/plugin.js.map +1 -0
- package/dist/omegga/server.d.ts +149 -0
- package/dist/omegga/server.d.ts.map +1 -0
- package/dist/omegga/server.js +601 -0
- package/dist/omegga/server.js.map +1 -0
- package/dist/omegga/types.d.ts +48 -0
- package/dist/omegga/types.d.ts.map +1 -0
- package/dist/omegga/types.js +3 -0
- package/dist/omegga/types.js.map +1 -0
- package/dist/omegga/wrapper.d.ts +22 -0
- package/dist/omegga/wrapper.d.ts.map +1 -0
- package/dist/omegga/wrapper.js +75 -0
- package/dist/omegga/wrapper.js.map +1 -0
- package/dist/omeggaplugin.d.ts +1 -0
- package/dist/omeggaplugin.js +4 -0
- package/dist/omeggaplugin.js.map +1 -0
- package/dist/plugin.d.ts +781 -0
- package/dist/plugin.js +41 -0
- package/dist/plugin.js.map +1 -0
- package/dist/softconfig.d.ts +51 -0
- package/dist/softconfig.d.ts.map +1 -0
- package/dist/softconfig.js +82 -0
- package/dist/softconfig.js.map +1 -0
- package/dist/util/brick/checkBounds.d.ts +8 -0
- package/dist/util/brick/checkBounds.d.ts.map +1 -0
- package/dist/util/brick/checkBounds.js +22 -0
- package/dist/util/brick/checkBounds.js.map +1 -0
- package/dist/util/brick/constants.d.ts +18 -0
- package/dist/util/brick/constants.d.ts.map +1 -0
- package/dist/util/brick/constants.js +184 -0
- package/dist/util/brick/constants.js.map +1 -0
- package/dist/util/brick/getBounds.d.ts +4 -0
- package/dist/util/brick/getBounds.d.ts.map +1 -0
- package/dist/util/brick/getBounds.js +39 -0
- package/dist/util/brick/getBounds.js.map +1 -0
- package/dist/util/brick/getBrickSize.d.ts +3 -0
- package/dist/util/brick/getBrickSize.d.ts.map +1 -0
- package/dist/util/brick/getBrickSize.js +12 -0
- package/dist/util/brick/getBrickSize.js.map +1 -0
- package/dist/util/brick/getScaleAxis.d.ts +3 -0
- package/dist/util/brick/getScaleAxis.d.ts.map +1 -0
- package/dist/util/brick/getScaleAxis.js +38 -0
- package/dist/util/brick/getScaleAxis.js.map +1 -0
- package/dist/util/brick/index.d.ts +13 -0
- package/dist/util/brick/index.d.ts.map +1 -0
- package/dist/util/brick/index.js +29 -0
- package/dist/util/brick/index.js.map +1 -0
- package/dist/util/brick/rotate.d.ts +17 -0
- package/dist/util/brick/rotate.d.ts.map +1 -0
- package/dist/util/brick/rotate.js +38 -0
- package/dist/util/brick/rotate.js.map +1 -0
- package/dist/util/brick/setOwnership.d.ts +12 -0
- package/dist/util/brick/setOwnership.d.ts.map +1 -0
- package/dist/util/brick/setOwnership.js +21 -0
- package/dist/util/brick/setOwnership.js.map +1 -0
- package/dist/util/chat.d.ts +23 -0
- package/dist/util/chat.d.ts.map +1 -0
- package/dist/util/chat.js +50 -0
- package/dist/util/chat.js.map +1 -0
- package/dist/util/color.d.ts +13 -0
- package/dist/util/color.d.ts.map +1 -0
- package/dist/util/color.js +130 -0
- package/dist/util/color.js.map +1 -0
- package/dist/util/file.d.ts +5 -0
- package/dist/util/file.d.ts.map +1 -0
- package/dist/util/file.js +114 -0
- package/dist/util/file.js.map +1 -0
- package/dist/util/index.d.ts +162 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +92 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/map.d.ts +6 -0
- package/dist/util/map.d.ts.map +1 -0
- package/dist/util/map.js +26 -0
- package/dist/util/map.js.map +1 -0
- package/dist/util/pattern.d.ts +1 -0
- package/dist/util/pattern.d.ts.map +1 -0
- package/dist/util/pattern.js +11 -0
- package/dist/util/pattern.js.map +1 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.d.ts.map +1 -0
- package/dist/util/time.js +41 -0
- package/dist/util/time.js.map +1 -0
- package/dist/util/uuid.d.ts +2 -0
- package/dist/util/uuid.d.ts.map +1 -0
- package/dist/util/uuid.js +8 -0
- package/dist/util/uuid.js.map +1 -0
- package/dist/util/wsl.d.ts +1 -0
- package/dist/util/wsl.d.ts.map +1 -0
- package/dist/util/wsl.js +14 -0
- package/dist/util/wsl.js.map +1 -0
- package/dist/webserver/backend/api.d.ts +3 -0
- package/dist/webserver/backend/api.d.ts.map +1 -0
- package/dist/webserver/backend/api.js +685 -0
- package/dist/webserver/backend/api.js.map +1 -0
- package/dist/webserver/backend/calendar.d.ts +5 -0
- package/dist/webserver/backend/calendar.d.ts.map +1 -0
- package/dist/webserver/backend/calendar.js +21 -0
- package/dist/webserver/backend/calendar.js.map +1 -0
- package/dist/webserver/backend/database.d.ts +149 -0
- package/dist/webserver/backend/database.d.ts.map +1 -0
- package/dist/webserver/backend/database.js +575 -0
- package/dist/webserver/backend/database.js.map +1 -0
- package/dist/webserver/backend/index.d.ts +31 -0
- package/dist/webserver/backend/index.d.ts.map +1 -0
- package/dist/webserver/backend/index.js +189 -0
- package/dist/webserver/backend/index.js.map +1 -0
- package/dist/webserver/backend/metrics.d.ts +3 -0
- package/dist/webserver/backend/metrics.d.ts.map +1 -0
- package/dist/webserver/backend/metrics.js +203 -0
- package/dist/webserver/backend/metrics.js.map +1 -0
- package/dist/webserver/backend/types.d.ts +115 -0
- package/dist/webserver/backend/types.d.ts.map +1 -0
- package/dist/webserver/backend/types.js +3 -0
- package/dist/webserver/backend/types.js.map +1 -0
- package/dist/webserver/backend/util.d.ts +2 -0
- package/dist/webserver/backend/util.d.ts.map +1 -0
- package/dist/webserver/backend/util.js +78 -0
- package/dist/webserver/backend/util.js.map +1 -0
- package/dist/webserver/index.d.ts +2 -0
- package/dist/webserver/index.d.ts.map +1 -0
- package/dist/webserver/index.js +9 -0
- package/dist/webserver/index.js.map +1 -0
- package/{src/webserver/frontend → frontend}/app.html +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceBold.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceItalic.otf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceMedium.otf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceRegular.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoBold.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoItalic.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoRegular.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/auth_bg.webp +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/dark_bg.webp +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/turkey.webp +0 -0
- package/{src/webserver/frontend → frontend}/auth.html +0 -0
- package/index.js +10 -2
- package/package.json +44 -16
- package/public/app.bundle.js +537 -73
- package/public/app.bundle.js.map +1 -1
- package/public/app.css +727 -2
- package/public/app.css.map +1 -1
- package/public/auth.bundle.js +18 -18
- package/public/auth.bundle.js.map +1 -1
- package/public/auth.css +364 -2
- package/public/auth.css.map +1 -1
- package/templates/rpc/README.md +29 -0
- package/templates/rpc/doc.json +7 -0
- package/templates/rpc/omegga_plugin +0 -0
- package/templates/rpc/plugin.json +4 -0
- package/templates/rpc/setup.sh +3 -0
- package/templates/safe/README.md +29 -0
- package/templates/safe/access.json +1 -0
- package/templates/safe/doc.json +7 -0
- package/templates/safe/omegga.plugin.js +20 -0
- package/templates/safe/plugin.json +4 -0
- package/templates/safe/setup.sh +4 -0
- package/templates/safe-ts/.gitignore.rename +3 -0
- package/templates/safe-ts/README.md +29 -0
- package/templates/safe-ts/access.json +1 -0
- package/templates/safe-ts/doc.json +7 -0
- package/templates/safe-ts/omegga.d.ts +1311 -0
- package/templates/safe-ts/omegga.plugin.ts +29 -0
- package/templates/safe-ts/plugin.json +4 -0
- package/templates/safe-ts/setup.sh +4 -0
- package/templates/safe-ts/tsconfig.json +10 -0
- package/templates/unsafe/README.md +29 -0
- package/templates/unsafe/doc.json +7 -0
- package/templates/unsafe/omegga.main.js +15 -0
- package/templates/unsafe/plugin.json +4 -0
- package/templates/unsafe/setup.sh +4 -0
- package/.babelrc.json +0 -5
- package/.github/workflows/lint.yml +0 -26
- package/.prettierrc +0 -7
- package/.vscode/extensions.json +0 -5
- package/src/OMEGGA_LEGACY_INSTALL +0 -44
- package/src/brickadia/config.js +0 -42
- package/src/brickadia/server.js +0 -227
- package/src/cli/auth.js +0 -104
- package/src/cli/config.js +0 -77
- package/src/cli/index.js +0 -6
- package/src/cli/installer.js +0 -65
- package/src/cli/plugin.js +0 -575
- package/src/cli/terminal.js +0 -466
- package/src/config/authorizer.js +0 -37
- package/src/config/formats/format_js.js +0 -6
- package/src/config/formats/format_yml.js +0 -8
- package/src/config/index.js +0 -81
- package/src/config/reader.js +0 -27
- package/src/config/validator.js +0 -32
- package/src/config/writer.js +0 -20
- package/src/info/default_commands.json +0 -26
- package/src/lib.js +0 -23
- package/src/main.js +0 -332
- package/src/omegga/auth.js +0 -138
- package/src/omegga/commandInjector.js +0 -228
- package/src/omegga/index.js +0 -22
- package/src/omegga/logWrangler.js +0 -323
- package/src/omegga/matchers/auth.js +0 -49
- package/src/omegga/matchers/chat.js +0 -73
- package/src/omegga/matchers/command.js +0 -39
- package/src/omegga/matchers/exit.js +0 -19
- package/src/omegga/matchers/init.js +0 -23
- package/src/omegga/matchers/join.js +0 -115
- package/src/omegga/matchers/leave.js +0 -58
- package/src/omegga/matchers/mapChange.js +0 -37
- package/src/omegga/matchers/version.js +0 -45
- package/src/omegga/player.js +0 -585
- package/src/omegga/plugin/plugin_jsonrpc_stdio.js +0 -526
- package/src/omegga/plugin/plugin_node_safe/proxyOmegga.js +0 -117
- package/src/omegga/plugin/plugin_node_safe/worker.js +0 -238
- package/src/omegga/plugin/plugin_node_safe.js +0 -473
- package/src/omegga/plugin/plugin_node_unsafe.js +0 -177
- package/src/omegga/plugin.js +0 -565
- package/src/omegga/server.js +0 -658
- package/src/omegga/wrapper.js +0 -62
- package/src/softconfig.js +0 -64
- package/src/util/brick/checkBounds.js +0 -22
- package/src/util/brick/constants.js +0 -185
- package/src/util/brick/getBounds.js +0 -36
- package/src/util/brick/getBrickSize.js +0 -9
- package/src/util/brick/getScaleAxis.js +0 -31
- package/src/util/brick/index.js +0 -9
- package/src/util/brick/rotate.js +0 -43
- package/src/util/brick/setOwnership.js +0 -20
- package/src/util/chat.js +0 -28
- package/src/util/color.js +0 -143
- package/src/util/file.js +0 -119
- package/src/util/index.js +0 -28
- package/src/util/map.js +0 -28
- package/src/util/pattern.js +0 -14
- package/src/util/time.js +0 -46
- package/src/util/uuid.js +0 -8
- package/src/util/wsl.js +0 -9
- package/src/webserver/backend/api.js +0 -795
- package/src/webserver/backend/calendar.js +0 -15
- package/src/webserver/backend/database.js +0 -725
- package/src/webserver/backend/index.js +0 -206
- package/src/webserver/backend/metrics.js +0 -148
- package/src/webserver/backend/util.js +0 -75
- package/src/webserver/frontend/.eslintrc.yml +0 -26
- package/src/webserver/frontend/app.js +0 -78
- package/src/webserver/frontend/auth.js +0 -16
- package/src/webserver/frontend/components/Background.vue +0 -83
- package/src/webserver/frontend/components/Button.vue +0 -105
- package/src/webserver/frontend/components/ChatEntry.vue +0 -107
- package/src/webserver/frontend/components/ChatTime.vue +0 -40
- package/src/webserver/frontend/components/Dimmer.vue +0 -43
- package/src/webserver/frontend/components/Dropdown.vue +0 -145
- package/src/webserver/frontend/components/Footer.vue +0 -29
- package/src/webserver/frontend/components/Header.vue +0 -27
- package/src/webserver/frontend/components/InfiniteScroll.vue +0 -51
- package/src/webserver/frontend/components/Input.vue +0 -93
- package/src/webserver/frontend/components/ListInput.vue +0 -105
- package/src/webserver/frontend/components/Loader.vue +0 -98
- package/src/webserver/frontend/components/MainMenuButton.vue +0 -83
- package/src/webserver/frontend/components/Modal.vue +0 -44
- package/src/webserver/frontend/components/NavBar.vue +0 -24
- package/src/webserver/frontend/components/PlayerDropdown.vue +0 -210
- package/src/webserver/frontend/components/PopoutContent.vue +0 -32
- package/src/webserver/frontend/components/RoleDropdown.vue +0 -157
- package/src/webserver/frontend/components/Scroll.vue +0 -33
- package/src/webserver/frontend/components/Toggle.vue +0 -91
- package/src/webserver/frontend/components/index.js +0 -33
- package/src/webserver/frontend/css/font.scss +0 -53
- package/src/webserver/frontend/css/mixins.scss +0 -49
- package/src/webserver/frontend/css/style.scss +0 -166
- package/src/webserver/frontend/css/theme.scss +0 -64
- package/src/webserver/frontend/partials/NavHeader.vue +0 -55
- package/src/webserver/frontend/partials/Page.vue +0 -40
- package/src/webserver/frontend/partials/PageContent.vue +0 -31
- package/src/webserver/frontend/partials/SideNav.vue +0 -115
- package/src/webserver/frontend/partials/index.js +0 -4
- package/src/webserver/frontend/router.js +0 -83
- package/src/webserver/frontend/views/Auth.vue +0 -190
- package/src/webserver/frontend/views/History.vue +0 -462
- package/src/webserver/frontend/views/Home.vue +0 -251
- package/src/webserver/frontend/views/Main.vue +0 -69
- package/src/webserver/frontend/views/NotFound.vue +0 -10
- package/src/webserver/frontend/views/Players.vue +0 -425
- package/src/webserver/frontend/views/PlayersInspector.vue +0 -538
- package/src/webserver/frontend/views/Plugins.vue +0 -217
- package/src/webserver/frontend/views/PluginsInspector.vue +0 -418
- package/src/webserver/frontend/views/Server.vue +0 -167
- package/src/webserver/frontend/views/Users.vue +0 -538
- package/src/webserver/frontend/widgets/Chat.vue +0 -124
- package/src/webserver/frontend/widgets/Status.vue +0 -91
- package/src/webserver/frontend/widgets/index.js +0 -2
- package/src/webserver/frontend/widgets/tooltip.js +0 -108
- package/src/webserver/index.js +0 -4
|
@@ -0,0 +1,601 @@
|
|
|
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 default_commands_json_1 = __importDefault(require("../info/default_commands.json"));
|
|
7
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
8
|
+
const softconfig_1 = require("../softconfig");
|
|
9
|
+
const _util_1 = require("../util");
|
|
10
|
+
const file_1 = require("../util/file");
|
|
11
|
+
const backend_1 = __importDefault(require("../webserver/backend"));
|
|
12
|
+
const brs_js_1 = require("brs-js");
|
|
13
|
+
require("colors");
|
|
14
|
+
const fs_1 = require("fs");
|
|
15
|
+
const glob_1 = require("glob");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const commandInjector_1 = __importDefault(require("./commandInjector"));
|
|
18
|
+
const matchers_1 = __importDefault(require("./matchers"));
|
|
19
|
+
const plugin_1 = require("./plugin");
|
|
20
|
+
const wrapper_1 = __importDefault(require("./wrapper"));
|
|
21
|
+
const MISSING_CMD = '"Command not found. Type <color=\\"ffff00\\">/help</> for a list of commands or <color=\\"ffff00\\">/plugins</> for plugin information."';
|
|
22
|
+
// TODO: safe broadcast parsing
|
|
23
|
+
class Omegga extends wrapper_1.default {
|
|
24
|
+
/**
|
|
25
|
+
* Omegga instance
|
|
26
|
+
*/
|
|
27
|
+
constructor(serverPath, cfg, options = {}) {
|
|
28
|
+
super(serverPath, cfg);
|
|
29
|
+
/** The save counter prevents omegga from saving over the same file */
|
|
30
|
+
this._tempCounter = { save: 0, environment: 0 };
|
|
31
|
+
/** The save prefix is prepended to all temporary saves */
|
|
32
|
+
this._tempSavePrefix = 'omegga_temp_';
|
|
33
|
+
// pluginloader is not private so plugins can potentially add more formats
|
|
34
|
+
this.pluginLoader = undefined;
|
|
35
|
+
this.verbose = logger_1.default.VERBOSE;
|
|
36
|
+
// inject commands
|
|
37
|
+
logger_1.default.verbose('Setting up command injector');
|
|
38
|
+
(0, commandInjector_1.default)(this, this.logWrangler);
|
|
39
|
+
// launch options (disabling webserver)
|
|
40
|
+
this.options = options;
|
|
41
|
+
// path to save files
|
|
42
|
+
this.savePath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Builds');
|
|
43
|
+
this.presetPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Presets');
|
|
44
|
+
// path to config files
|
|
45
|
+
this.configPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Server');
|
|
46
|
+
// create dir folders
|
|
47
|
+
logger_1.default.verbose('Creating directories');
|
|
48
|
+
(0, file_1.mkdir)(this.savePath);
|
|
49
|
+
(0, file_1.mkdir)(this.configPath);
|
|
50
|
+
// ignore auth file copy
|
|
51
|
+
if (!options.noauth) {
|
|
52
|
+
logger_1.default.verbose('Copying auth files');
|
|
53
|
+
this.copyAuthFiles();
|
|
54
|
+
}
|
|
55
|
+
// create the webserver if it's enabled
|
|
56
|
+
// the web interface provides access to server information while the server is running
|
|
57
|
+
// and lets you view chat logs, disable plugins, etc
|
|
58
|
+
if (!options.noweb) {
|
|
59
|
+
logger_1.default.verbose('Creating webserver');
|
|
60
|
+
this.webserver = new backend_1.default(cfg.omegga, this);
|
|
61
|
+
}
|
|
62
|
+
if (!options.noplugin) {
|
|
63
|
+
logger_1.default.verbose('Creating plugin loader');
|
|
64
|
+
// create the pluginloader
|
|
65
|
+
this.pluginLoader = new plugin_1.PluginLoader((0, path_1.join)(this.path, softconfig_1.PLUGIN_PATH), this);
|
|
66
|
+
logger_1.default.verbose('Creating loading plugins');
|
|
67
|
+
// load all the plugin formats in
|
|
68
|
+
this.pluginLoader.loadFormats((0, path_1.join)(__dirname, 'plugin'));
|
|
69
|
+
}
|
|
70
|
+
/** @type {Array<Player>}list of online players */
|
|
71
|
+
this.players = [];
|
|
72
|
+
/** host player info `{id: uuid, name: player name}` */
|
|
73
|
+
this.host = undefined;
|
|
74
|
+
/** @type {String} current game version - may later be turned into CL#### versions */
|
|
75
|
+
this.version = -1;
|
|
76
|
+
/** @type {Boolean} whether server has started */
|
|
77
|
+
this.started = false;
|
|
78
|
+
/** @type {Boolean} whether server is starting up */
|
|
79
|
+
this.starting = false;
|
|
80
|
+
/** @type {String} current map */
|
|
81
|
+
this.currentMap = '';
|
|
82
|
+
// add all the matchers to the server
|
|
83
|
+
logger_1.default.verbose('Adding matchers');
|
|
84
|
+
for (const matcher of matchers_1.default) {
|
|
85
|
+
const { pattern, callback } = matcher(this);
|
|
86
|
+
this.addMatcher(pattern, callback);
|
|
87
|
+
}
|
|
88
|
+
process.on('uncaughtException', async (err) => {
|
|
89
|
+
var _a, _b;
|
|
90
|
+
logger_1.default.verbose('Uncaught exception', err);
|
|
91
|
+
this.emit('error', err);
|
|
92
|
+
// publish stop to database
|
|
93
|
+
(_b = (_a = this.webserver) === null || _a === void 0 ? void 0 : _a.database) === null || _b === void 0 ? void 0 : _b.addChatLog('server', {}, 'Server error');
|
|
94
|
+
try {
|
|
95
|
+
await this.stop();
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
logger_1.default.error(e);
|
|
99
|
+
}
|
|
100
|
+
process.exit();
|
|
101
|
+
});
|
|
102
|
+
// when brickadia starts, mark the server as started
|
|
103
|
+
this.on('start', ({ map }) => {
|
|
104
|
+
this.started = true;
|
|
105
|
+
this.starting = false;
|
|
106
|
+
this.currentMap = map;
|
|
107
|
+
this.writeln('Chat.MessageForUnknownCommands 0');
|
|
108
|
+
this.restoreServer();
|
|
109
|
+
});
|
|
110
|
+
// when brickadia exits, stop omegga
|
|
111
|
+
this.on('exit', () => {
|
|
112
|
+
this.stop();
|
|
113
|
+
});
|
|
114
|
+
// when the process closes, emit the exit signal and stop
|
|
115
|
+
this.on('closed', () => {
|
|
116
|
+
if (this.started)
|
|
117
|
+
this.emit('exit');
|
|
118
|
+
if (!this.stopping)
|
|
119
|
+
this.stop();
|
|
120
|
+
});
|
|
121
|
+
// detect when a missing command is sent
|
|
122
|
+
this.on('cmd', (cmd, name) => {
|
|
123
|
+
// if it's not in the default commands and it's not registered to a plugin,
|
|
124
|
+
// it's okay to send the missing command message
|
|
125
|
+
if (!default_commands_json_1.default.includes(cmd) &&
|
|
126
|
+
(!this.pluginLoader || !this.pluginLoader.isCommand(cmd))) {
|
|
127
|
+
this.whisper(name, MISSING_CMD);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/** attempt to save server state */
|
|
132
|
+
async saveServer(config) {
|
|
133
|
+
if (config.players && this.players.length > 0) {
|
|
134
|
+
logger_1.default.logp('Getting player positions...');
|
|
135
|
+
const players = await this.getAllPlayerPositions();
|
|
136
|
+
logger_1.default.logp(`Saving ${players.length} player positions...`);
|
|
137
|
+
const data = players
|
|
138
|
+
.filter(p => !p.isDead && p.pos)
|
|
139
|
+
.map(p => ({ position: p.pos, id: p.player.id }));
|
|
140
|
+
if (players.length > 0)
|
|
141
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'omegga_temp_players.json'), JSON.stringify(data));
|
|
142
|
+
}
|
|
143
|
+
if (config.minigames) {
|
|
144
|
+
try {
|
|
145
|
+
logger_1.default.logp('Getting minigames...');
|
|
146
|
+
const minigames = await this.listMinigames();
|
|
147
|
+
logger_1.default.logp(`Saving ${minigames.length} minigames...`);
|
|
148
|
+
for (const minigame of minigames) {
|
|
149
|
+
logger_1.default.log(` - Saved "${minigame.name}" as omegga_temp_${minigame.index}`);
|
|
150
|
+
this.saveMinigame(minigame.index, 'omegga_temp_' + minigame.index);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
logger_1.default.errorp('Error getting minigames...', err);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (config.environment) {
|
|
158
|
+
logger_1.default.logp('Saving environment...');
|
|
159
|
+
this.saveEnvironment('omegga_temp');
|
|
160
|
+
}
|
|
161
|
+
if (config.bricks) {
|
|
162
|
+
logger_1.default.logp('Saving bricks...');
|
|
163
|
+
await this.saveBricksAsync('omegga_temp');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** attempt to restore the server's state */
|
|
167
|
+
async restoreServer() {
|
|
168
|
+
try {
|
|
169
|
+
const tempPlayersFile = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'omegga_temp_players.json');
|
|
170
|
+
if ((0, fs_1.existsSync)(tempPlayersFile)) {
|
|
171
|
+
logger_1.default.logp('Loading previous player positions...');
|
|
172
|
+
// player positions are an array to address multi-clienting
|
|
173
|
+
const players = JSON.parse((0, fs_1.readFileSync)(tempPlayersFile).toString());
|
|
174
|
+
// restore player position on join
|
|
175
|
+
const callback = (player) => {
|
|
176
|
+
const index = players.findIndex(p => p.id === player.id);
|
|
177
|
+
if (index > -1) {
|
|
178
|
+
const { position } = players[index];
|
|
179
|
+
this.writeln(`Chat.Command /TP "${player.name}" ${position.join(' ')} 0`);
|
|
180
|
+
// remove the entry
|
|
181
|
+
players[index] = players[players.length - 1];
|
|
182
|
+
players.pop();
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
this.on('join', callback);
|
|
186
|
+
setTimeout(() => {
|
|
187
|
+
try {
|
|
188
|
+
this.off('join', callback);
|
|
189
|
+
(0, fs_1.unlinkSync)(tempPlayersFile);
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
logger_1.default.error('Error removing omegga_temp_players.json', err);
|
|
193
|
+
}
|
|
194
|
+
}, 10000);
|
|
195
|
+
}
|
|
196
|
+
const minigames = this.getMinigamePresets().filter(s => s.startsWith('omegga_temp_'));
|
|
197
|
+
if (minigames.length > 0) {
|
|
198
|
+
logger_1.default.logp('Loading previous minigames...');
|
|
199
|
+
for (const minigame of minigames) {
|
|
200
|
+
this.loadMinigame(minigame);
|
|
201
|
+
setTimeout(() => {
|
|
202
|
+
try {
|
|
203
|
+
(0, fs_1.unlinkSync)((0, path_1.join)(this.presetPath, 'Minigame', minigame + '.bp'));
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
logger_1.default.error(`Error removing minigame ${minigame}`, err);
|
|
207
|
+
}
|
|
208
|
+
}, 10000);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const tempEnvironment = (0, path_1.join)(this.presetPath, 'Environment', 'omegga_temp.bp');
|
|
212
|
+
if ((0, fs_1.existsSync)(tempEnvironment)) {
|
|
213
|
+
logger_1.default.logp('Loading previous environment...');
|
|
214
|
+
this.loadEnvironment('omegga_temp');
|
|
215
|
+
setTimeout(() => {
|
|
216
|
+
try {
|
|
217
|
+
(0, fs_1.unlinkSync)(tempEnvironment);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
logger_1.default.error('Error removing environment omegga_temp.bp', err);
|
|
221
|
+
}
|
|
222
|
+
}, 10000);
|
|
223
|
+
}
|
|
224
|
+
const tempSave = this.getSavePath('omegga_temp');
|
|
225
|
+
if (tempSave) {
|
|
226
|
+
logger_1.default.logp('Loading previous bricks...');
|
|
227
|
+
this.loadBricks('omegga_temp');
|
|
228
|
+
setTimeout(() => {
|
|
229
|
+
try {
|
|
230
|
+
(0, fs_1.unlinkSync)(tempSave);
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
logger_1.default.error('Error removing omegga_temp.brs', err);
|
|
234
|
+
}
|
|
235
|
+
}, 10000);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
logger_1.default.error('Error restoring previous server state', err);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* start webserver, load plugins, start the brickadia server
|
|
244
|
+
* this should not be called by a plugin
|
|
245
|
+
*/
|
|
246
|
+
//
|
|
247
|
+
async start() {
|
|
248
|
+
this.starting = true;
|
|
249
|
+
if (this.webserver)
|
|
250
|
+
await this.webserver.start();
|
|
251
|
+
if (this.pluginLoader) {
|
|
252
|
+
// scan for plugins
|
|
253
|
+
logger_1.default.verbose('Scanning for plugins');
|
|
254
|
+
await this.pluginLoader.scan();
|
|
255
|
+
// load the plugins
|
|
256
|
+
logger_1.default.verbose('Loading plugins');
|
|
257
|
+
await this.pluginLoader.reload();
|
|
258
|
+
}
|
|
259
|
+
logger_1.default.verbose('Starting Brickadia');
|
|
260
|
+
super.start();
|
|
261
|
+
this.emit('server:starting');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* unload plugins and stop the server
|
|
265
|
+
* this should not be called by a plugin
|
|
266
|
+
*/
|
|
267
|
+
async stop() {
|
|
268
|
+
if (!this.started && !this.starting) {
|
|
269
|
+
logger_1.default.verbose("Stop called while server wasn't started or was starting");
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (this.stopping) {
|
|
273
|
+
logger_1.default.verbose('Stop called while server was starting');
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
this.stopping = true;
|
|
277
|
+
this.emit('server:stopping');
|
|
278
|
+
if (this.pluginLoader) {
|
|
279
|
+
logger_1.default.verbose('Unloading plugins');
|
|
280
|
+
await this.pluginLoader.unload();
|
|
281
|
+
}
|
|
282
|
+
logger_1.default.verbose('Stopping server');
|
|
283
|
+
super.stop();
|
|
284
|
+
if (this.stopping)
|
|
285
|
+
this.emit('server:stopped');
|
|
286
|
+
this.stopping = false;
|
|
287
|
+
this.started = false;
|
|
288
|
+
this.starting = false;
|
|
289
|
+
this.players = [];
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Copies auth files from home config dir
|
|
293
|
+
* this should never be called by a plugin
|
|
294
|
+
*/
|
|
295
|
+
copyAuthFiles() {
|
|
296
|
+
const authPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Auth');
|
|
297
|
+
const homeAuthPath = (0, path_1.join)(softconfig_1.CONFIG_HOME, softconfig_1.CONFIG_AUTH_DIR);
|
|
298
|
+
(0, file_1.copyFiles)(homeAuthPath, authPath, softconfig_1.BRICKADIA_AUTH_FILES);
|
|
299
|
+
}
|
|
300
|
+
// TODO: split messages that longer than 512 characters
|
|
301
|
+
// TODO: delete characters that are known to crash the game
|
|
302
|
+
broadcast(...messages) {
|
|
303
|
+
messages
|
|
304
|
+
.flatMap(m => m.toString().split('\n'))
|
|
305
|
+
.filter(m => m.length < 512)
|
|
306
|
+
.forEach(m => this.writeln(`Chat.Broadcast ${m}`));
|
|
307
|
+
}
|
|
308
|
+
whisper(target, ...messages) {
|
|
309
|
+
// find the target player
|
|
310
|
+
if (typeof target !== 'object')
|
|
311
|
+
target = this.getPlayer(target);
|
|
312
|
+
// whisper the messages to that player
|
|
313
|
+
messages
|
|
314
|
+
.flatMap(m => m.toString().split('\n'))
|
|
315
|
+
.filter(m => m.length < 512)
|
|
316
|
+
.forEach(m => this.writeln(`Chat.Whisper "${target.name}" ${m}`));
|
|
317
|
+
}
|
|
318
|
+
middlePrint(target, message) {
|
|
319
|
+
// find the target player
|
|
320
|
+
if (typeof target !== 'object')
|
|
321
|
+
target = this.getPlayer(target);
|
|
322
|
+
// whisper the messages to that player
|
|
323
|
+
if (message.length > 512)
|
|
324
|
+
return;
|
|
325
|
+
this.writeln(`Chat.StatusMessage "${target.name}" ${message}`);
|
|
326
|
+
}
|
|
327
|
+
getPlayers() {
|
|
328
|
+
return this.players.map(p => (Object.assign({}, p)));
|
|
329
|
+
}
|
|
330
|
+
getRoleSetup() {
|
|
331
|
+
return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'RoleSetup.json'));
|
|
332
|
+
}
|
|
333
|
+
getRoleAssignments() {
|
|
334
|
+
return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'RoleAssignments.json'));
|
|
335
|
+
}
|
|
336
|
+
getBanList() {
|
|
337
|
+
return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'BanList.json'));
|
|
338
|
+
}
|
|
339
|
+
getNameCache() {
|
|
340
|
+
return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'PlayerNameCache.json'));
|
|
341
|
+
}
|
|
342
|
+
getPlayer(target) {
|
|
343
|
+
return this.players.find(p => p.name === target ||
|
|
344
|
+
p.id === target ||
|
|
345
|
+
p.controller === target ||
|
|
346
|
+
p.state === target);
|
|
347
|
+
}
|
|
348
|
+
findPlayerByName(name) {
|
|
349
|
+
name = name.toLowerCase();
|
|
350
|
+
const exploded = _util_1.pattern.explode(name);
|
|
351
|
+
return (this.players.find(p => p.name === name) || // find by exact match
|
|
352
|
+
this.players.find(p => p.name.indexOf(name) > -1) || // find by rough match
|
|
353
|
+
this.players.find(p => p.name.match(exploded))); // find by exploded regex match (ck finds cake, tbp finds TheBlackParrot)
|
|
354
|
+
}
|
|
355
|
+
getHostId() {
|
|
356
|
+
var _a, _b;
|
|
357
|
+
return (_b = (_a = this.host) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
|
|
358
|
+
}
|
|
359
|
+
saveMinigame(index, name) {
|
|
360
|
+
this.writeln(`Server.Minigames.SavePreset ${index} "${name}"`);
|
|
361
|
+
}
|
|
362
|
+
deleteMinigame(index) {
|
|
363
|
+
this.writeln(`Server.Minigames.Delete ${index}`);
|
|
364
|
+
}
|
|
365
|
+
resetMinigame(index) {
|
|
366
|
+
this.writeln(`Server.Minigames.Reset ${index}`);
|
|
367
|
+
}
|
|
368
|
+
nextRoundMinigame(index) {
|
|
369
|
+
this.writeln(`Server.Minigames.NextRound ${index}`);
|
|
370
|
+
}
|
|
371
|
+
loadMinigame(presetName, owner = '') {
|
|
372
|
+
this.writeln(`Server.Minigames.LoadPreset "${presetName}" ${owner ? `"${owner}"` : ''}`);
|
|
373
|
+
}
|
|
374
|
+
getMinigamePresets() {
|
|
375
|
+
const presetPath = (0, path_1.join)(this.presetPath, 'Minigame');
|
|
376
|
+
return (0, fs_1.existsSync)(presetPath)
|
|
377
|
+
? (0, glob_1.sync)(presetPath + '/**/*.bp').map(f => (0, path_1.basename)(f).replace(/\.bp$/, ''))
|
|
378
|
+
: [];
|
|
379
|
+
}
|
|
380
|
+
resetEnvironment() {
|
|
381
|
+
this.writeln(`Server.Environment.Reset`);
|
|
382
|
+
}
|
|
383
|
+
saveEnvironment(presetName) {
|
|
384
|
+
this.writeln(`Server.Environment.SavePreset "${presetName}"`);
|
|
385
|
+
}
|
|
386
|
+
loadEnvironment(presetName) {
|
|
387
|
+
this.writeln(`Server.Environment.LoadPreset ${presetName}`);
|
|
388
|
+
}
|
|
389
|
+
loadEnvironmentData(preset) {
|
|
390
|
+
if ('data' in preset)
|
|
391
|
+
preset = preset.data.groups;
|
|
392
|
+
const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.environment++;
|
|
393
|
+
const path = (0, path_1.join)(this.presetPath, 'Environment', saveFile + '.bp');
|
|
394
|
+
(0, fs_1.writeFileSync)(path, JSON.stringify({
|
|
395
|
+
formatVersion: '1',
|
|
396
|
+
presetVersion: '1',
|
|
397
|
+
type: 'Environment',
|
|
398
|
+
data: {
|
|
399
|
+
groups: Object.assign({}, preset),
|
|
400
|
+
},
|
|
401
|
+
}));
|
|
402
|
+
this.loadEnvironment(saveFile);
|
|
403
|
+
// this is lazy, but environments should load much faster than builds
|
|
404
|
+
// do, so it's not really worth keeping track of logs for this
|
|
405
|
+
setTimeout(() => (0, fs_1.unlinkSync)(path), 5000);
|
|
406
|
+
}
|
|
407
|
+
getEnvironmentPresets() {
|
|
408
|
+
const presetPath = (0, path_1.join)(this.presetPath, 'Environment');
|
|
409
|
+
return (0, fs_1.existsSync)(presetPath)
|
|
410
|
+
? (0, glob_1.sync)(presetPath + '/**/*.bp').map(f => (0, path_1.basename)(f).replace(/\.bp$/, ''))
|
|
411
|
+
: [];
|
|
412
|
+
}
|
|
413
|
+
clearBricks(target, quiet = false) {
|
|
414
|
+
// target is a player object, just use that id
|
|
415
|
+
if (typeof target === 'object' && target.id)
|
|
416
|
+
target = target.id;
|
|
417
|
+
// if the target isn't a uuid already, find the player by name or controller and use that uuid
|
|
418
|
+
else if (typeof target === 'string' && !_util_1.uuid.match(target)) {
|
|
419
|
+
// only set the target if the player exists
|
|
420
|
+
const player = this.getPlayer(target);
|
|
421
|
+
target = player && player.id;
|
|
422
|
+
}
|
|
423
|
+
if (!target)
|
|
424
|
+
return;
|
|
425
|
+
this.writeln(`Bricks.Clear ${target} ${quiet ? 1 : ''}`);
|
|
426
|
+
}
|
|
427
|
+
clearRegion(region, options) {
|
|
428
|
+
let target = '';
|
|
429
|
+
// target is a player object, just use that id
|
|
430
|
+
if (options && typeof options.target === 'object')
|
|
431
|
+
target = ' ' + options.target.id;
|
|
432
|
+
// if the target isn't a uuid already, find the player by name or controller and use that uuid
|
|
433
|
+
if (typeof target === 'string' && !_util_1.uuid.match(target)) {
|
|
434
|
+
// only set the target if the player exists
|
|
435
|
+
const player = this.getPlayer(target);
|
|
436
|
+
if (player)
|
|
437
|
+
target = ' ' + player.id;
|
|
438
|
+
}
|
|
439
|
+
this.writeln(`Bricks.ClearRegion ${region.center.join(' ')} ${region.extent.join(' ')}${target}`);
|
|
440
|
+
}
|
|
441
|
+
clearAllBricks(quiet = false) {
|
|
442
|
+
this.writeln(`Bricks.ClearAll ${quiet ? 1 : ''}`);
|
|
443
|
+
}
|
|
444
|
+
saveBricks(saveName, region) {
|
|
445
|
+
if (!saveName)
|
|
446
|
+
return;
|
|
447
|
+
// add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
|
|
448
|
+
if (!(saveName.startsWith('"') && saveName.endsWith('"')))
|
|
449
|
+
saveName = `"${saveName}"`;
|
|
450
|
+
if ((region === null || region === void 0 ? void 0 : region.center) && (region === null || region === void 0 ? void 0 : region.extent))
|
|
451
|
+
this.writeln(`Bricks.SaveRegion ${saveName} ${region.center.join(' ')} ${region.extent.join(' ')}`);
|
|
452
|
+
else
|
|
453
|
+
this.writeln(`Bricks.Save ${saveName}`);
|
|
454
|
+
}
|
|
455
|
+
async saveBricksAsync(saveName, region) {
|
|
456
|
+
if (!saveName)
|
|
457
|
+
return;
|
|
458
|
+
let saveNameClean = saveName;
|
|
459
|
+
// add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
|
|
460
|
+
if (!(saveName.startsWith('"') && saveName.endsWith('"')))
|
|
461
|
+
saveNameClean = `"${saveName}"`;
|
|
462
|
+
const command = (region === null || region === void 0 ? void 0 : region.center) && (region === null || region === void 0 ? void 0 : region.extent)
|
|
463
|
+
? `Bricks.SaveRegion ${saveNameClean} ${region.center.join(' ')} ${region.extent.join(' ')}`
|
|
464
|
+
: `Bricks.Save ${saveNameClean}`;
|
|
465
|
+
// wait for the server to save the file
|
|
466
|
+
await this.watchLogChunk(command, /^(LogBrickSerializer|LogTemp): (.+)$/, {
|
|
467
|
+
first: match => match[0].endsWith(saveName + '.brs...'),
|
|
468
|
+
last: match => Boolean(match[2].match(/Saved .+ bricks and .+ components from .+ owners|Error: No bricks in grid!|Error: No bricks selected to save!/)),
|
|
469
|
+
afterMatchDelay: 0,
|
|
470
|
+
timeoutDelay: 30000,
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
loadBricks(saveName, { offX = 0, offY = 0, offZ = 0, quiet = false, correctPalette = false, correctCustom = false, } = {}) {
|
|
474
|
+
// add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
|
|
475
|
+
if (!(saveName.startsWith('"') && saveName.endsWith('"')))
|
|
476
|
+
saveName = `"${saveName}"`;
|
|
477
|
+
this.writeln(`Bricks.Load ${saveName} ${offX} ${offY} ${offZ} ${quiet ? 1 : 0} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0}`);
|
|
478
|
+
}
|
|
479
|
+
loadBricksOnPlayer(saveName, player, { offX = 0, offY = 0, offZ = 0, correctPalette = false, correctCustom = false, } = {}) {
|
|
480
|
+
player = typeof player === 'string' ? this.getPlayer(player) : player;
|
|
481
|
+
if (!player)
|
|
482
|
+
return;
|
|
483
|
+
// add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
|
|
484
|
+
if (!(saveName.startsWith('"') && saveName.endsWith('"')))
|
|
485
|
+
saveName = `"${saveName}"`;
|
|
486
|
+
this.writeln(`Bricks.LoadTemplate ${saveName} ${offX} ${offY} ${offZ} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0} "${player.name}"`);
|
|
487
|
+
}
|
|
488
|
+
getSaves() {
|
|
489
|
+
return (0, fs_1.existsSync)(this.savePath) ? (0, glob_1.sync)(this.savePath + '/**/*.brs') : [];
|
|
490
|
+
}
|
|
491
|
+
getSavePath(saveName) {
|
|
492
|
+
const file = (0, path_1.join)(this.savePath, saveName.endsWith('.brs') ? saveName : saveName + '.brs');
|
|
493
|
+
return (0, fs_1.existsSync)(file) ? file : undefined;
|
|
494
|
+
}
|
|
495
|
+
writeSaveData(saveName, saveData) {
|
|
496
|
+
if (typeof saveName !== 'string')
|
|
497
|
+
throw 'expected name argument for writeSaveData';
|
|
498
|
+
const file = (0, path_1.join)(this.savePath, saveName + '.brs');
|
|
499
|
+
if (!file.startsWith(this.savePath))
|
|
500
|
+
throw 'save file not in Saved/Builds directory';
|
|
501
|
+
(0, fs_1.writeFileSync)(file, new Uint8Array((0, brs_js_1.write)(saveData)));
|
|
502
|
+
}
|
|
503
|
+
readSaveData(saveName, nobricks = false) {
|
|
504
|
+
if (typeof saveName !== 'string')
|
|
505
|
+
throw 'expected name argument for readSaveData';
|
|
506
|
+
const file = this.getSavePath(saveName);
|
|
507
|
+
if (!file || !file.startsWith(this.savePath))
|
|
508
|
+
throw 'save file not in Saved/Builds directory';
|
|
509
|
+
if (file)
|
|
510
|
+
return (0, brs_js_1.read)((0, fs_1.readFileSync)(file), {
|
|
511
|
+
preview: false,
|
|
512
|
+
bricks: !nobricks,
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
async loadSaveData(saveData, { offX = 0, offY = 0, offZ = 0, quiet = false, correctPalette = false, correctCustom = false, } = {}) {
|
|
516
|
+
const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
|
|
517
|
+
// write savedata to file
|
|
518
|
+
this.writeSaveData(saveFile, saveData);
|
|
519
|
+
// wait for the server to finish reading the save
|
|
520
|
+
await this.watchLogChunk(`Bricks.Load "${saveFile}" ${offX} ${offY} ${offZ} ${quiet ? 1 : 0} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0}`, /^LogBrickSerializer: (.+)$/, {
|
|
521
|
+
first: match => match[0].endsWith(saveFile + '.brs...'),
|
|
522
|
+
last: match => Boolean(match[1].match(/Read .+ bricks/)),
|
|
523
|
+
afterMatchDelay: 0,
|
|
524
|
+
timeoutDelay: 30000,
|
|
525
|
+
});
|
|
526
|
+
// delete the save file after we're done
|
|
527
|
+
const savePath = this.getSavePath(saveFile);
|
|
528
|
+
if (savePath) {
|
|
529
|
+
(0, fs_1.unlinkSync)(savePath);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async loadSaveDataOnPlayer(saveData, player, { offX = 0, offY = 0, offZ = 0, correctPalette = false, correctCustom = false, } = {}) {
|
|
533
|
+
player = typeof player === 'string' ? this.getPlayer(player) : player;
|
|
534
|
+
if (!player)
|
|
535
|
+
return;
|
|
536
|
+
const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
|
|
537
|
+
// write savedata to file
|
|
538
|
+
this.writeSaveData(saveFile, saveData);
|
|
539
|
+
// wait for the server to finish reading the save
|
|
540
|
+
await this.watchLogChunk(`Bricks.LoadTemplate "${saveFile}" ${offX} ${offY} ${offZ} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0} ${player.name}`, /^LogBrickSerializer: (.+)$/, {
|
|
541
|
+
first: match => match[0].endsWith(saveFile + '.brs...'),
|
|
542
|
+
last: match => Boolean(match[1].match(/Read .+ bricks/)),
|
|
543
|
+
afterMatchDelay: 0,
|
|
544
|
+
timeoutDelay: 30000,
|
|
545
|
+
});
|
|
546
|
+
// delete the save file after we're done
|
|
547
|
+
const savePath = this.getSavePath(saveFile);
|
|
548
|
+
if (savePath) {
|
|
549
|
+
(0, fs_1.unlinkSync)(savePath);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
async getSaveData(region) {
|
|
553
|
+
const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
|
|
554
|
+
await this.saveBricksAsync(saveFile, region);
|
|
555
|
+
// read the save file
|
|
556
|
+
const savePath = this.getSavePath(saveFile);
|
|
557
|
+
if (savePath) {
|
|
558
|
+
// read and parse the save file
|
|
559
|
+
const saveData = (0, brs_js_1.read)((0, fs_1.readFileSync)(savePath));
|
|
560
|
+
// delete the save file after we're done reading it
|
|
561
|
+
(0, fs_1.unlinkSync)(savePath);
|
|
562
|
+
// return the parsed save
|
|
563
|
+
return saveData;
|
|
564
|
+
}
|
|
565
|
+
return undefined;
|
|
566
|
+
}
|
|
567
|
+
async changeMap(map) {
|
|
568
|
+
if (!map)
|
|
569
|
+
return;
|
|
570
|
+
// ServerTravel requires /Game/Maps/Plate/Plate instead of Plate
|
|
571
|
+
const brName = _util_1.map.n2brn(map);
|
|
572
|
+
// wait for the server to change maps
|
|
573
|
+
const match = await this.addWatcher(/^.*(LogLoad: Took .+ seconds to LoadMap\((?<map>.+)\))|(ERROR: The map .+)$/, {
|
|
574
|
+
timeoutDelay: 30000,
|
|
575
|
+
exec: () => this.writeln(`ServerTravel ${brName}`),
|
|
576
|
+
});
|
|
577
|
+
const success = !!(match &&
|
|
578
|
+
match[0] &&
|
|
579
|
+
match[0].groups &&
|
|
580
|
+
match[0].groups.map);
|
|
581
|
+
return success;
|
|
582
|
+
}
|
|
583
|
+
async getPlugin(name) {
|
|
584
|
+
const plugin = this.pluginLoader.plugins.find(p => p.getName() === name);
|
|
585
|
+
if (plugin) {
|
|
586
|
+
return {
|
|
587
|
+
name,
|
|
588
|
+
documentation: plugin.getDocumentation(),
|
|
589
|
+
loaded: plugin.isLoaded(),
|
|
590
|
+
emitPlugin: (event, ...args) => {
|
|
591
|
+
return plugin.emitPlugin(event, 'unsafe', args);
|
|
592
|
+
},
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
return null;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
exports.default = Omegga;
|
|
601
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/omegga/server.ts"],"names":[],"mappings":"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"}
|