cyberia 3.2.5 → 3.2.9
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/.github/workflows/engine-cyberia.cd.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -2
- package/CHANGELOG.md +351 -1
- package/CLI-HELP.md +40 -13
- package/Dockerfile +0 -4
- package/README.md +242 -497
- package/bin/build.js +19 -5
- package/bin/cyberia.js +1149 -240
- package/bin/deploy.js +570 -1
- package/bin/file.js +6 -0
- package/bin/index.js +1149 -240
- package/bin/vs.js +1 -1
- package/conf.js +67 -89
- package/deployment.yaml +4 -222
- package/hardhat/package-lock.json +32 -32
- package/hardhat/package.json +3 -3
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/package.json +23 -14
- package/proxy.yaml +10 -118
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.service.js +10 -10
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.service.js +14 -28
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.service.js +12 -12
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +3 -20
- package/src/cli/cluster.js +61 -14
- package/src/cli/db.js +47 -2
- package/src/cli/deploy.js +67 -35
- package/src/cli/fs.js +79 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +26 -1
- package/src/cli/release.js +57 -1
- package/src/cli/repository.js +69 -31
- package/src/cli/run.js +415 -36
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +21 -33
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +35 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +92 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +462 -178
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +25 -125
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +179 -67
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/client-build-docs.js +45 -46
- package/src/server/client-build.js +334 -60
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +5 -4
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +13 -27
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +17 -3
- package/src/server/valkey.js +141 -235
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaActionService } from './cyberia-action.service.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
class CyberiaActionController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
const result = await CyberiaActionService.post(req, res, options);
|
|
10
|
+
return res.status(200).json({
|
|
11
|
+
status: 'success',
|
|
12
|
+
data: result,
|
|
13
|
+
});
|
|
14
|
+
} catch (error) {
|
|
15
|
+
logger.error(error, error.stack);
|
|
16
|
+
return res.status(400).json({
|
|
17
|
+
status: 'error',
|
|
18
|
+
message: error.message,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
|
+
try {
|
|
24
|
+
const { page, limit } = req.query;
|
|
25
|
+
const result = await CyberiaActionService.get(
|
|
26
|
+
{ ...req, query: { ...req.query, page: parseInt(page), limit: parseInt(limit) } },
|
|
27
|
+
res,
|
|
28
|
+
options,
|
|
29
|
+
);
|
|
30
|
+
return res.status(200).json({
|
|
31
|
+
status: 'success',
|
|
32
|
+
data: result,
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
logger.error(error, error.stack);
|
|
36
|
+
return res.status(400).json({
|
|
37
|
+
status: 'error',
|
|
38
|
+
message: error.message,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await CyberiaActionService.put(req, res, options);
|
|
45
|
+
return res.status(200).json({
|
|
46
|
+
status: 'success',
|
|
47
|
+
data: result,
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.error(error, error.stack);
|
|
51
|
+
return res.status(400).json({
|
|
52
|
+
status: 'error',
|
|
53
|
+
message: error.message,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await CyberiaActionService.delete(req, res, options);
|
|
60
|
+
return res.status(200).json({
|
|
61
|
+
status: 'success',
|
|
62
|
+
data: result,
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
logger.error(error, error.stack);
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
status: 'error',
|
|
68
|
+
message: error.message,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CyberiaActionController };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Schema, model } from 'mongoose';
|
|
2
|
+
import { CYBERIA_ACTION_TYPES } from '../../client/components/cyberia-portal/CommonCyberiaPortal.js';
|
|
3
|
+
|
|
4
|
+
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
5
|
+
|
|
6
|
+
const CyberiaActionSchema = new Schema(
|
|
7
|
+
{
|
|
8
|
+
// Spatial origin: the NPC/entity cell that provides this action.
|
|
9
|
+
// Matched against map entity initCellX/initCellY during instance init
|
|
10
|
+
// and assignable from ObjectLayerEngineModal.
|
|
11
|
+
sourceMapCode: { type: String, trim: true },
|
|
12
|
+
sourceCellX: { type: Number },
|
|
13
|
+
sourceCellY: { type: Number },
|
|
14
|
+
|
|
15
|
+
// ── Identity ──────────────────────────────────────────────────────────
|
|
16
|
+
code: { type: String, required: true, trim: true },
|
|
17
|
+
type: {
|
|
18
|
+
type: String,
|
|
19
|
+
required: true,
|
|
20
|
+
trim: true,
|
|
21
|
+
enum: CYBERIA_ACTION_TYPES,
|
|
22
|
+
},
|
|
23
|
+
label: { type: String, trim: true, default: '' },
|
|
24
|
+
|
|
25
|
+
// The item ID of the NPC/entity that provides this action.
|
|
26
|
+
// Used to match 'talk' quest objectives: a step with { type: 'talk', itemId: X }
|
|
27
|
+
// is satisfied when the player triggers an action where provideItemId === X.
|
|
28
|
+
// Typically the entity's active skin ObjectLayer item ID (e.g. 'wason', 'alex').
|
|
29
|
+
provideItemId: { type: String, trim: true, default: '' },
|
|
30
|
+
|
|
31
|
+
// Quest code granted to the player on their first interaction with this action.
|
|
32
|
+
// Used by 'quest-talk' NPCs to start a quest chain on first contact.
|
|
33
|
+
// Empty string = no quest granted.
|
|
34
|
+
grantQuestCode: { type: String, trim: true, default: '' },
|
|
35
|
+
|
|
36
|
+
// ── Dialogue ──────────────────────────────────────────────────────────
|
|
37
|
+
// General greeting/intro dialogue shown when the action button is tapped.
|
|
38
|
+
dialogCode: { type: String, trim: true, default: '' },
|
|
39
|
+
|
|
40
|
+
// Ordered list of CyberiaDialogue codes the player must view to satisfy
|
|
41
|
+
// a 'talk' quest objective linked to this action via provideItemId.
|
|
42
|
+
// For simple actions this may match dialogCode; for multi-stage NPCs it can diverge.
|
|
43
|
+
questDialogueCodes: [{ type: String, trim: true }],
|
|
44
|
+
|
|
45
|
+
// ── Shop payload (type="shop") ─────────────────────────────────────────
|
|
46
|
+
shopItems: [
|
|
47
|
+
{
|
|
48
|
+
itemId: { type: String, required: true, trim: true },
|
|
49
|
+
priceItemId: { type: String, default: 'coin', trim: true },
|
|
50
|
+
priceQty: { type: Number, default: 1, min: 0 },
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
|
|
54
|
+
// ── Craft payload (type="craft") ───────────────────────────────────────
|
|
55
|
+
craftRecipes: [
|
|
56
|
+
{
|
|
57
|
+
outputItems: [
|
|
58
|
+
{
|
|
59
|
+
itemId: { type: String, required: true, trim: true },
|
|
60
|
+
qty: { type: Number, default: 1, min: 1 },
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
ingredients: [
|
|
64
|
+
{
|
|
65
|
+
itemId: { type: String, required: true, trim: true },
|
|
66
|
+
qty: { type: Number, default: 1, min: 1 },
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
|
|
72
|
+
// ── Storage payload (type="storage") ──────────────────────────────────
|
|
73
|
+
storageSlots: { type: Number, default: 0, min: 0 },
|
|
74
|
+
},
|
|
75
|
+
{ timestamps: true },
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CyberiaActionSchema.index({ code: 1 }, { unique: true });
|
|
79
|
+
CyberiaActionSchema.index({ provideItemId: 1 });
|
|
80
|
+
CyberiaActionSchema.index({ grantQuestCode: 1 }, { sparse: true });
|
|
81
|
+
CyberiaActionSchema.index({ sourceMapCode: 1, sourceCellX: 1, sourceCellY: 1 });
|
|
82
|
+
|
|
83
|
+
const CyberiaActionModel = model('CyberiaAction', CyberiaActionSchema);
|
|
84
|
+
|
|
85
|
+
const ProviderSchema = CyberiaActionSchema;
|
|
86
|
+
|
|
87
|
+
export { CyberiaActionSchema, CyberiaActionModel, ProviderSchema };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaActionController } from './cyberia-action.controller.js';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
6
|
+
|
|
7
|
+
const CyberiaActionRouter = (options) => {
|
|
8
|
+
const router = express.Router();
|
|
9
|
+
const authMiddleware = options.authMiddleware;
|
|
10
|
+
router.post(`/:id`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
11
|
+
router.post(`/`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
12
|
+
router.get(
|
|
13
|
+
`/:id`,
|
|
14
|
+
// authMiddleware,
|
|
15
|
+
async (req, res) => await CyberiaActionController.get(req, res, options),
|
|
16
|
+
);
|
|
17
|
+
router.get(`/`, async (req, res) => await CyberiaActionController.get(req, res, options));
|
|
18
|
+
router.put(`/:id`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
19
|
+
router.put(`/`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
20
|
+
router.delete(`/:id`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
21
|
+
router.delete(`/`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
22
|
+
return router;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const ApiRouter = CyberiaActionRouter;
|
|
26
|
+
|
|
27
|
+
export { ApiRouter, CyberiaActionRouter };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DataBaseProvider } from '../../db/DataBaseProvider.js';
|
|
2
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
3
|
+
import { DataQuery } from '../../server/data-query.js';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
6
|
+
|
|
7
|
+
class CyberiaActionService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
10
|
+
const CyberiaAction = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaAction;
|
|
11
|
+
return await new CyberiaAction(req.body).save();
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
15
|
+
const CyberiaAction = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaAction;
|
|
16
|
+
if (req.params.id) return await CyberiaAction.findById(req.params.id);
|
|
17
|
+
|
|
18
|
+
// Parse query parameters using DataQuery helper
|
|
19
|
+
const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
|
|
20
|
+
|
|
21
|
+
const [data, total] = await Promise.all([
|
|
22
|
+
CyberiaAction.find(query).sort(sort).limit(limit).skip(skip),
|
|
23
|
+
CyberiaAction.countDocuments(query),
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
const totalPages = Math.ceil(total / limit);
|
|
27
|
+
return { data, total, page, totalPages };
|
|
28
|
+
};
|
|
29
|
+
static put = async (req, res, options) => {
|
|
30
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
31
|
+
const CyberiaAction = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaAction;
|
|
32
|
+
return await CyberiaAction.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
+
};
|
|
34
|
+
static delete = async (req, res, options) => {
|
|
35
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
36
|
+
const CyberiaAction = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaAction;
|
|
37
|
+
if (req.params.id) return await CyberiaAction.findByIdAndDelete(req.params.id);
|
|
38
|
+
else return await CyberiaAction.deleteMany();
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { CyberiaActionService };
|
|
@@ -3,8 +3,8 @@ import { CyberiaDialogueService } from './cyberia-dialogue.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class CyberiaDialogueController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await CyberiaDialogueService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const CyberiaDialogueController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
const { page, limit } = req.query;
|
|
25
25
|
const result = await CyberiaDialogueService.get(
|
|
@@ -38,8 +38,8 @@ const CyberiaDialogueController = {
|
|
|
38
38
|
message: error.message,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
}
|
|
42
|
-
put
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
43
|
try {
|
|
44
44
|
const result = await CyberiaDialogueService.put(req, res, options);
|
|
45
45
|
return res.status(200).json({
|
|
@@ -53,8 +53,8 @@ const CyberiaDialogueController = {
|
|
|
53
53
|
message: error.message,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
delete
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
58
|
try {
|
|
59
59
|
const result = await CyberiaDialogueService.delete(req, res, options);
|
|
60
60
|
return res.status(200).json({
|
|
@@ -68,14 +68,14 @@ const CyberiaDialogueController = {
|
|
|
68
68
|
message: error.message,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
}
|
|
72
|
-
|
|
71
|
+
};
|
|
72
|
+
static getByCode = async (req, res, options) => {
|
|
73
73
|
try {
|
|
74
74
|
if (req && req.headers && req.headers.origin) {
|
|
75
75
|
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
76
76
|
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
77
77
|
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
78
|
-
const result = await CyberiaDialogueService.
|
|
78
|
+
const result = await CyberiaDialogueService.getByCode(req, res, options);
|
|
79
79
|
return res.status(200).json({
|
|
80
80
|
status: 'success',
|
|
81
81
|
data: result,
|
|
@@ -87,7 +87,7 @@ const CyberiaDialogueController = {
|
|
|
87
87
|
message: error.message,
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
92
|
|
|
93
93
|
export { CyberiaDialogueController };
|
|
@@ -3,20 +3,20 @@ import { Schema, model, Types } from 'mongoose';
|
|
|
3
3
|
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* CyberiaDialogue — each document is
|
|
7
|
-
*
|
|
8
|
-
* (ordered by `order`). The client displays them sequentially when the
|
|
9
|
-
* player interacts with an entity whose active item layers match `itemId`.
|
|
6
|
+
* CyberiaDialogue — each document is one dialogue line that belongs to a
|
|
7
|
+
* named dialogue group (`code`). One code groups many ordered lines.
|
|
10
8
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
9
|
+
* Schema fields:
|
|
10
|
+
* code – primary grouping key, e.g. "default-lain" or "wason-intro".
|
|
11
|
+
* The C client fetches all lines for a given code in one request.
|
|
12
|
+
* order – zero-based display sequence within the code group.
|
|
13
|
+
* speaker – display name shown above the dialogue line.
|
|
14
|
+
* text – the dialogue line itself.
|
|
15
|
+
* mood – optional emotion hint (neutral / angry / sad / happy / …).
|
|
16
16
|
*/
|
|
17
17
|
const CyberiaDialogueSchema = new Schema(
|
|
18
18
|
{
|
|
19
|
-
|
|
19
|
+
code: { type: String, required: true, index: true },
|
|
20
20
|
order: { type: Number, default: 0 },
|
|
21
21
|
speaker: { type: String, default: '' },
|
|
22
22
|
text: { type: String, required: true },
|
|
@@ -27,7 +27,7 @@ const CyberiaDialogueSchema = new Schema(
|
|
|
27
27
|
},
|
|
28
28
|
);
|
|
29
29
|
|
|
30
|
-
CyberiaDialogueSchema.index({
|
|
30
|
+
CyberiaDialogueSchema.index({ code: 1, order: 1 });
|
|
31
31
|
|
|
32
32
|
const CyberiaDialogueModel = model('CyberiaDialogue', CyberiaDialogueSchema);
|
|
33
33
|
|
|
@@ -9,8 +9,8 @@ const CyberiaDialogueRouter = (options) => {
|
|
|
9
9
|
const authMiddleware = options.authMiddleware;
|
|
10
10
|
router.post(`/:id`, async (req, res) => await CyberiaDialogueController.post(req, res, options));
|
|
11
11
|
router.post(`/`, async (req, res) => await CyberiaDialogueController.post(req, res, options));
|
|
12
|
-
// Direct lookup by
|
|
13
|
-
router.get(`/
|
|
12
|
+
// Direct lookup by code — C client fetches dialogue by code (e.g. "default-lain")
|
|
13
|
+
router.get(`/code/:code`, async (req, res) => await CyberiaDialogueController.getByCode(req, res, options));
|
|
14
14
|
router.get(
|
|
15
15
|
`/:id`,
|
|
16
16
|
// authMiddleware,
|
|
@@ -4,13 +4,13 @@ import { DataQuery } from '../../server/data-query.js';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
post
|
|
7
|
+
class CyberiaDialogueService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./cyberia-dialogue.model.js').CyberiaDialogueModel} */
|
|
10
10
|
const CyberiaDialogue = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaDialogue;
|
|
11
11
|
return await new CyberiaDialogue(req.body).save();
|
|
12
|
-
}
|
|
13
|
-
get
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./cyberia-dialogue.model.js').CyberiaDialogueModel} */
|
|
15
15
|
const CyberiaDialogue = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaDialogue;
|
|
16
16
|
if (req.params.id) return await CyberiaDialogue.findById(req.params.id);
|
|
@@ -25,27 +25,27 @@ const CyberiaDialogueService = {
|
|
|
25
25
|
|
|
26
26
|
const totalPages = Math.ceil(total / limit);
|
|
27
27
|
return { data, total, page, totalPages };
|
|
28
|
-
}
|
|
29
|
-
put
|
|
28
|
+
};
|
|
29
|
+
static put = async (req, res, options) => {
|
|
30
30
|
/** @type {import('./cyberia-dialogue.model.js').CyberiaDialogueModel} */
|
|
31
31
|
const CyberiaDialogue = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaDialogue;
|
|
32
32
|
return await CyberiaDialogue.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
-
}
|
|
34
|
-
delete
|
|
33
|
+
};
|
|
34
|
+
static delete = async (req, res, options) => {
|
|
35
35
|
/** @type {import('./cyberia-dialogue.model.js').CyberiaDialogueModel} */
|
|
36
36
|
const CyberiaDialogue = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaDialogue;
|
|
37
37
|
if (req.params.id) return await CyberiaDialogue.findByIdAndDelete(req.params.id);
|
|
38
38
|
else return await CyberiaDialogue.deleteMany();
|
|
39
|
-
}
|
|
40
|
-
|
|
39
|
+
};
|
|
40
|
+
static getByCode = async (req, res, options) => {
|
|
41
41
|
/** @type {import('./cyberia-dialogue.model.js').CyberiaDialogueModel} */
|
|
42
42
|
const CyberiaDialogue = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaDialogue;
|
|
43
|
-
const {
|
|
44
|
-
if (!
|
|
45
|
-
const data = await CyberiaDialogue.find({
|
|
46
|
-
if (!data.length) throw new Error(`No dialogue found for
|
|
43
|
+
const { code } = req.params;
|
|
44
|
+
if (!code) throw new Error('code parameter is required');
|
|
45
|
+
const data = await CyberiaDialogue.find({ code }).sort({ order: 1 }).lean();
|
|
46
|
+
if (!data.length) throw new Error(`No dialogue found for code: ${code}`);
|
|
47
47
|
return data;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
50
|
|
|
51
51
|
export { CyberiaDialogueService };
|
|
@@ -3,8 +3,8 @@ import { CyberiaEntityService } from './cyberia-entity.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class CyberiaEntityController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await CyberiaEntityService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const CyberiaEntityController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
const { page, limit } = req.query;
|
|
25
25
|
const result = await CyberiaEntityService.get(
|
|
@@ -38,8 +38,8 @@ const CyberiaEntityController = {
|
|
|
38
38
|
message: error.message,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
}
|
|
42
|
-
put
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
43
|
try {
|
|
44
44
|
const result = await CyberiaEntityService.put(req, res, options);
|
|
45
45
|
return res.status(200).json({
|
|
@@ -53,8 +53,8 @@ const CyberiaEntityController = {
|
|
|
53
53
|
message: error.message,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
delete
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
58
|
try {
|
|
59
59
|
const result = await CyberiaEntityService.delete(req, res, options);
|
|
60
60
|
return res.status(200).json({
|
|
@@ -68,7 +68,7 @@ const CyberiaEntityController = {
|
|
|
68
68
|
message: error.message,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
73
|
|
|
74
74
|
export { CyberiaEntityController };
|
|
@@ -4,13 +4,13 @@ import { DataQuery } from '../../server/data-query.js';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
post
|
|
7
|
+
class CyberiaEntityService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./cyberia-entity.model.js').CyberiaEntityModel} */
|
|
10
10
|
const CyberiaEntity = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaEntity;
|
|
11
11
|
return await new CyberiaEntity(req.body).save();
|
|
12
|
-
}
|
|
13
|
-
get
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./cyberia-entity.model.js').CyberiaEntityModel} */
|
|
15
15
|
const CyberiaEntity = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaEntity;
|
|
16
16
|
if (req.params.id) return await CyberiaEntity.findById(req.params.id);
|
|
@@ -25,18 +25,18 @@ const CyberiaEntityService = {
|
|
|
25
25
|
|
|
26
26
|
const totalPages = Math.ceil(total / limit);
|
|
27
27
|
return { data, total, page, totalPages };
|
|
28
|
-
}
|
|
29
|
-
put
|
|
28
|
+
};
|
|
29
|
+
static put = async (req, res, options) => {
|
|
30
30
|
/** @type {import('./cyberia-entity.model.js').CyberiaEntityModel} */
|
|
31
31
|
const CyberiaEntity = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaEntity;
|
|
32
32
|
return await CyberiaEntity.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
-
}
|
|
34
|
-
delete
|
|
33
|
+
};
|
|
34
|
+
static delete = async (req, res, options) => {
|
|
35
35
|
/** @type {import('./cyberia-entity.model.js').CyberiaEntityModel} */
|
|
36
36
|
const CyberiaEntity = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaEntity;
|
|
37
37
|
if (req.params.id) return await CyberiaEntity.findByIdAndDelete(req.params.id);
|
|
38
38
|
else return await CyberiaEntity.deleteMany();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
41
|
|
|
42
42
|
export { CyberiaEntityService };
|