cyberia 3.2.5 → 3.2.12
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 +8 -2
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +2 -2
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +563 -1
- package/CLI-HELP.md +130 -34
- package/Dockerfile +0 -4
- package/README.md +194 -607
- package/bin/build.js +42 -12
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +1367 -281
- package/bin/deploy.js +582 -3
- package/bin/index.js +1367 -281
- package/bump.config.js +26 -0
- package/conf.js +195 -111
- package/deployment.yaml +6 -222
- package/hardhat/package-lock.json +118 -149
- package/hardhat/package.json +5 -4
- 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 +6 -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 +138 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +45 -24
- package/proxy.yaml +10 -118
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +83 -48
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- 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.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +15 -15
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +11 -11
- 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 +31 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -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 +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
- package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
- 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.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
- 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.model.js +18 -49
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +17 -17
- 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 +31 -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 +31 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +15 -15
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +45 -43
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +16 -16
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +22 -36
- 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.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +29 -26
- 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.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.router.js +17 -12
- package/src/api/test/test.service.js +8 -8
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +103 -55
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +732 -217
- package/src/cli/db.js +106 -62
- package/src/cli/deploy.js +260 -149
- package/src/cli/fs.js +90 -9
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +106 -16
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +336 -86
- package/src/cli/repository.js +136 -53
- package/src/cli/run.js +599 -76
- package/src/cli/secrets.js +11 -2
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +9 -3
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +30 -36
- 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 +40 -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 +163 -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 +96 -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 +544 -219
- 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 +81 -177
- 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 +211 -276
- 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/SharedDefaultsCyberia.js +330 -0
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- 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 +83 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -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/UNDERPOST-PLATFORM.md +106 -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-client-hints/cyberia-client-hints.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/views/CyberiaServerMetrics.js +982 -0
- package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
- package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
- package/src/client/ssr/{pages → views}/Test.js +2 -2
- package/src/client/sw/core.sw.js +274 -0
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +185 -105
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +101 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +62 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +46 -47
- package/src/server/client-build.js +371 -132
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +91 -87
- 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 +192 -45
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- 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 +34 -8
- package/src/server/valkey.js +143 -235
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- 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/bin/file.js +0 -196
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- 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/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
- 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/CommonCyberiaPortal.js +0 -223
- 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/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- 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,259 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://www.cyberiaonline.com/assets/splash/apple-touch-icon-precomposed.png" alt="CYBERIA Network Object Layer Engine"/>
|
|
4
|
+
|
|
5
|
+
<h1>CYBERIA</h1>
|
|
6
|
+
|
|
7
|
+
**Network Object Layers**
|
|
8
|
+
|
|
9
|
+
_Stackable Rendering Layers as a Unified Tokenized Reality_
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.org/package/cyberia)
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
Cyberia is an MMORPG extension built on the Underpost Platform. The platform owns the
|
|
15
|
+
toolchain, deployment surface, PWA delivery, and base infrastructure. Cyberia adds a three-service MMO
|
|
16
|
+
runtime: `engine-cyberia`, `cyberia-server`, and `cyberia-client`.
|
|
17
|
+
|
|
18
|
+
`engine-cyberia` is the **sidecar-backed data layer**: a Node.js sidecar that owns content,
|
|
19
|
+
validation, persistence, the gRPC/REST data services, and asset metadata. It backs the authoritative
|
|
20
|
+
Go server and the WASM client with data — it does not run the simulation or the presentation.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Ecosystem at a glance
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
┌───────────────────────────────────────────────┐
|
|
28
|
+
│ UNDERPOST PLATFORM │
|
|
29
|
+
│ toolchain · deploy · PWA build · static │
|
|
30
|
+
│ delivery · cluster/image/db · monitoring │
|
|
31
|
+
│ │
|
|
32
|
+
│ underpost CLI ──▶ builds & deploys all │
|
|
33
|
+
└───────────────────────────────────────────────┘
|
|
34
|
+
│ hosts / delivers
|
|
35
|
+
▼
|
|
36
|
+
╔═══════════════════════════════ CYBERIA MMO ══════════════════════════════════╗
|
|
37
|
+
║ ║
|
|
38
|
+
║ ┌──────────────────┐ gRPC ┌──────────────────┐ WebSocket ║
|
|
39
|
+
║ │ engine-cyberia │ ────────▶ │ cyberia-server │ ───────────┐ ║
|
|
40
|
+
║ │ (Node.js) │ │ (Go) │ │ ║
|
|
41
|
+
║ │ │ │ │ ▼ ║
|
|
42
|
+
║ │ content │ │ authoritative │ ┌──────────────────┐ ║
|
|
43
|
+
║ │ validation │ │ simulation │ │ cyberia-client │ ║
|
|
44
|
+
║ │ persistence │ │ world tick │ │ (C / WASM) │ ║
|
|
45
|
+
║ │ gRPC/REST data │ │ AOI replication │ │ │ ║
|
|
46
|
+
║ │ asset metadata │ │ │ │ rendering │ ║
|
|
47
|
+
║ └──────────────────┘ └──────────────────┘ │ input │ ║
|
|
48
|
+
║ │ │ prediction │ ║
|
|
49
|
+
║ └──────────────── REST (content/assets) ─────▶│ presentation │ ║
|
|
50
|
+
║ └──────────────────┘ ║
|
|
51
|
+
╚═══════════════════════════════════════════════════════════════════════════════╝
|
|
52
|
+
|
|
53
|
+
One source of truth per concern:
|
|
54
|
+
content & world config ── engine-cyberia
|
|
55
|
+
real-time world state ── cyberia-server
|
|
56
|
+
presentation & input ── cyberia-client
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 1. Toolchain and base infrastructure
|
|
62
|
+
|
|
63
|
+
Underpost Platform is the operational backbone and the source of truth for deploy IDs, runtime
|
|
64
|
+
selection, host/path layout, generated client assets, and environment resolution.
|
|
65
|
+
|
|
66
|
+
| Area | What it owns |
|
|
67
|
+
| --------------- | ------------------------------------------------------------------------------------ |
|
|
68
|
+
| Toolchain | `underpost` CLI, build, deploy, release, metadata, secrets, environment selection |
|
|
69
|
+
| Infrastructure | bare metal, LXD, Kubernetes, K3s, kubeadm, images, SSH, runners |
|
|
70
|
+
| Data operations | MongoDB, MariaDB where needed, backups, cron, monitoring |
|
|
71
|
+
| Delivery | static build, SSR views, PWA packaging, service worker generation, host/path routing |
|
|
72
|
+
|
|
73
|
+
`underpost` is the shared control surface for everything infrastructural. Cyberia-specific work belongs
|
|
74
|
+
in the `cyberia` CLI, never in parallel platform commands. When a concern already exists in `underpost`,
|
|
75
|
+
reuse it instead of forking a Cyberia variant.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 2. PWA workflow
|
|
80
|
+
|
|
81
|
+
Every deployed client ships as a static application shell with PWA support. The pipeline has exactly two
|
|
82
|
+
inputs:
|
|
83
|
+
|
|
84
|
+
- the deploy `ssr` configuration in `conf.dd-*.js` (or `conf.ssr.json`)
|
|
85
|
+
- the service worker source in `src/client/sw/core.sw.js`
|
|
86
|
+
|
|
87
|
+
Everything else — `index.html` pages, `sw.js`, the precache list — is **generated** during the client
|
|
88
|
+
build. Treat them as outputs only; never hand-edit them.
|
|
89
|
+
|
|
90
|
+
Runtime service-worker behavior:
|
|
91
|
+
|
|
92
|
+
| Request | Strategy |
|
|
93
|
+
| ------------- | -------------------------------- |
|
|
94
|
+
| static assets | stale-while-revalidate |
|
|
95
|
+
| API `GET` | network-first + short cache |
|
|
96
|
+
| API mutations | network-only + background replay |
|
|
97
|
+
| navigation | network-first + fallback shells |
|
|
98
|
+
|
|
99
|
+
Fallback selection: offline network → offline fallback view; origin/server failure → maintenance
|
|
100
|
+
fallback view. Only fallback-marked views are guaranteed precached.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 3. Cyberia MMO extension
|
|
105
|
+
|
|
106
|
+
### Responsibility split
|
|
107
|
+
|
|
108
|
+
| Service | Owns | Must not own |
|
|
109
|
+
| ---------------- | ------------------------------------------------------------------------- | --------------------------------------------- |
|
|
110
|
+
| `engine-cyberia` | content, validation, persistence, gRPC/REST data services, asset metadata | authoritative simulation, render policy |
|
|
111
|
+
| `cyberia-server` | authoritative simulation, world tick, gameplay mutation, AOI replication | content authority, presentation metadata |
|
|
112
|
+
| `cyberia-client` | rendering, input, prediction, interpolation, presentation | authoritative world state, gameplay authority |
|
|
113
|
+
|
|
114
|
+
Two boundaries are non-negotiable:
|
|
115
|
+
|
|
116
|
+
- Do not move authoritative logic into the client.
|
|
117
|
+
- Do not move content-authority logic into the Go runtime.
|
|
118
|
+
|
|
119
|
+
### Data flow
|
|
120
|
+
|
|
121
|
+
```text
|
|
122
|
+
engine-cyberia ──gRPC──▶ cyberia-server ──WebSocket──▶ cyberia-client
|
|
123
|
+
engine-cyberia ──REST──────────────────────────────▶ cyberia-client
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### `engine-cyberia` as the sidecar-backed data layer
|
|
127
|
+
|
|
128
|
+
`engine-cyberia` is the only Cyberia service that owns content-backed data and asset metadata.
|
|
129
|
+
|
|
130
|
+
- Boot-time world configuration flows from `engine-cyberia` to `cyberia-server` over gRPC `GetFullInstance`.
|
|
131
|
+
- Client-facing assets, object layers, dialogues, and presentation hints flow from `engine-cyberia` to `cyberia-client` over REST.
|
|
132
|
+
- Simulation never migrates into the sidecar, and presentation policy never migrates out of the client.
|
|
133
|
+
|
|
134
|
+
### Runtime / health model
|
|
135
|
+
|
|
136
|
+
Three supervised processes run in parallel, each with its own monitor and reconnect loop. Gameplay is live only when all three are healthy at once.
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
140
|
+
│ SUPERVISION (parallel) │
|
|
141
|
+
│ │
|
|
142
|
+
│ engine-cyberia cyberia-server cyberia-client │
|
|
143
|
+
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
144
|
+
│ │ monitor │ │ monitor │ │ monitor │ │
|
|
145
|
+
│ │ +reconnect │ │ +reconnect │ │ +reconnect │ │
|
|
146
|
+
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
|
|
147
|
+
│ │ │ │ │
|
|
148
|
+
│ └──────────┬──────────┴──────────┬──────────┘ │
|
|
149
|
+
│ ▼ ▼ │
|
|
150
|
+
│ all three up & connected? │
|
|
151
|
+
└────────────────────────────┬─────────────────────────────────┘
|
|
152
|
+
│
|
|
153
|
+
┌─────────────────────┼─────────────────────┐
|
|
154
|
+
▼ ▼ ▼
|
|
155
|
+
┌───────────┐ ┌───────────┐ ┌───────────┐
|
|
156
|
+
│ HEALTHY │ │ DEGRADED │ │ STANDBY │
|
|
157
|
+
│ all 3 up │ │ ≥1 service│ │ gameplay │
|
|
158
|
+
│ gameplay │ │ reconnect-│ │ paused │
|
|
159
|
+
│ live │ │ ing / down│ │ until all │
|
|
160
|
+
│ │ │ │ │ 3 healthy │
|
|
161
|
+
└───────────┘ └───────────┘ └───────────┘
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
| State | Meaning |
|
|
165
|
+
| ---------- | -------------------------------------------------------------------- |
|
|
166
|
+
| `healthy` | all three Cyberia services are up and connected |
|
|
167
|
+
| `degraded` | at least one service is reconnecting or unavailable |
|
|
168
|
+
| `standby` | gameplay is paused because the full three-service set is not healthy |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## User commands
|
|
173
|
+
|
|
174
|
+
Use `underpost` for platform, infrastructure, build, and deploy. Use `cyberia` for MMO content and
|
|
175
|
+
extension workflows. Both share the same helpers — never duplicate config, env, or path logic.
|
|
176
|
+
|
|
177
|
+
### Platform (underpost)
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
# Bootstrap a new app (local app serves on http://localhost:4001)
|
|
181
|
+
underpost new app-name
|
|
182
|
+
|
|
183
|
+
# Build the client bundle / static + PWA output
|
|
184
|
+
underpost client
|
|
185
|
+
npm run build # node bin client
|
|
186
|
+
|
|
187
|
+
# Deploy and operate
|
|
188
|
+
underpost deploy <deploy-id>
|
|
189
|
+
underpost monitor
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Cyberia (cyberia) — `bin/cyberia.js`
|
|
193
|
+
|
|
194
|
+
| Group | Command | Purpose |
|
|
195
|
+
| -------------- | -------------------------------------- | -------------------------------------------------------- |
|
|
196
|
+
| `ol` | `cyberia ol [item-id]` | ObjectLayer import, procedural generation, atlas/sprite |
|
|
197
|
+
| `instance` | `cyberia instance [instance-code]` | export / import / drop a Cyberia instance and its data |
|
|
198
|
+
| `client-hints` | `cyberia client-hints [instance-code]` | per-instance presentation hints (palette, camera, icons) |
|
|
199
|
+
| `chain` | `cyberia chain <sub>` | Hyperledger Besu + ERC-1155 ObjectLayerToken lifecycle |
|
|
200
|
+
| `run-workflow` | `cyberia run-workflow <name>` | named maintenance/build scripts from `scripts/` |
|
|
201
|
+
|
|
202
|
+
Common examples:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Object layer content
|
|
206
|
+
cyberia ol hatchet,sword --import # import specific items
|
|
207
|
+
cyberia ol --import-types skin,floors # batch import by type (or: all)
|
|
208
|
+
cyberia ol floor-desert --generate --seed fx-42 # procedural generation
|
|
209
|
+
cyberia ol hatchet --to-atlas-sprite-sheet # build atlas sprite sheet
|
|
210
|
+
cyberia ol --drop --client-public # drop data + static asset folders
|
|
211
|
+
|
|
212
|
+
# Instance data
|
|
213
|
+
cyberia instance FOREST --export ./backup
|
|
214
|
+
cyberia instance FOREST --import ./backup
|
|
215
|
+
cyberia instance FOREST --drop
|
|
216
|
+
|
|
217
|
+
# Presentation hints
|
|
218
|
+
cyberia client-hints cyberia-main --seed-defaults
|
|
219
|
+
|
|
220
|
+
# Chain / token lifecycle
|
|
221
|
+
cyberia chain deploy --chain-id 777771
|
|
222
|
+
cyberia chain status
|
|
223
|
+
cyberia chain register / mint / transfer / burn / pause / unpause
|
|
224
|
+
|
|
225
|
+
# Named workflows
|
|
226
|
+
cyberia run-workflow import-default-items
|
|
227
|
+
cyberia run-workflow seed-skill-config --instance-code default
|
|
228
|
+
cyberia run-workflow seed-dialogues
|
|
229
|
+
cyberia run-workflow build-manifest
|
|
230
|
+
cyberia run-workflow build-server-dashboard
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Run the MMO services
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# engine-cyberia (Node.js data/content services)
|
|
237
|
+
npm start # node src/server
|
|
238
|
+
|
|
239
|
+
# cyberia-server (Go authoritative simulation)
|
|
240
|
+
cd cyberia-server && go run main.go # dev
|
|
241
|
+
cd cyberia-server && go build -o cyberia-server . && ./cyberia-server
|
|
242
|
+
|
|
243
|
+
# cyberia-client (C / WASM presentation)
|
|
244
|
+
cd cyberia-client && make -f Web.mk clean && make -f Web.mk web
|
|
245
|
+
cd cyberia-client && make -f Web.mk serve-development # serves on :8082
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Operational guardrails
|
|
251
|
+
|
|
252
|
+
- Prefer one source of truth for config, deploy IDs, runtime selection, startup behavior, and generated assets.
|
|
253
|
+
- Reuse existing helpers and conventions instead of creating parallel implementations.
|
|
254
|
+
- Do not duplicate parsing, env resolution, or path normalization logic across modules.
|
|
255
|
+
- Treat generated artifacts (`sw.js`, static pages, atlases, README, manifests) as outputs only.
|
|
256
|
+
- Host-level changes must be idempotent, reversible, and explicit; validate before mutating; keep
|
|
257
|
+
orchestration scripts safe to rerun.
|
|
258
|
+
- `engine-private/` is a private external dependency. Reference it only as private input; never assume
|
|
259
|
+
its contents exist locally.
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Entity Profile
|
|
2
|
+
|
|
3
|
+
**Module:** `src/api/cyberia-entity` · `src/api/cyberia-instance-conf`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
An **Entity** is any object in the Cyberia Online game world — players, bots, NPCs, resource nodes, terrain tiles, portals, and skill-spawned projectiles. Every entity is represented as an ordered stack of **Object Layer** item IDs, a position on the grid, a type discriminator, and a runtime state.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## CyberiaEntity Schema (MongoDB)
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
CyberiaEntity {
|
|
17
|
+
entityType: String // see Entity Type Registry below
|
|
18
|
+
initCellX: Number // initial grid column
|
|
19
|
+
initCellY: Number // initial grid row
|
|
20
|
+
dimX: Number // width in cells (default: 1)
|
|
21
|
+
dimY: Number // height in cells (default: 1)
|
|
22
|
+
color: String // RGBA fallback color (no active OL texture)
|
|
23
|
+
objectLayerItemIds: [String] // ordered list of ObjectLayer item IDs
|
|
24
|
+
|
|
25
|
+
// Bot-specific (ignored for non-bot entities)
|
|
26
|
+
spawnRadius: Number // max wander / respawn radius in cells
|
|
27
|
+
aggroRange: Number // attack range in cells (0 = passive)
|
|
28
|
+
maxLife: Number // maximum HP (0 = immortal)
|
|
29
|
+
lifeRegen: Number // HP regeneration per tick
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Entity Type Registry
|
|
36
|
+
|
|
37
|
+
| `entityType` | Behavior | Map-placed | Description |
|
|
38
|
+
| -------------- | --------------------- | ---------- | ----------------------------------------------------- |
|
|
39
|
+
| `player` | interactive | no | Local (self) player |
|
|
40
|
+
| `other_player` | interactive | no | Remote players in AOI |
|
|
41
|
+
| `bot` | `hostile` / `passive` | yes | AI-controlled bot |
|
|
42
|
+
| `skill` | `skill` | no | Runtime-spawned projectile (created by skill system) |
|
|
43
|
+
| `coin` | `coin` | no | Runtime-spawned collectible (dropped on entity death) |
|
|
44
|
+
| `floor` | static | yes | Terrain tile (walkable) |
|
|
45
|
+
| `obstacle` | static | yes | Collision tile (blocks movement) |
|
|
46
|
+
| `portal` | static | yes | Zone transition trigger |
|
|
47
|
+
| `foreground` | static | yes | Foreground decoration layer |
|
|
48
|
+
| `resource` | extractable | yes | Exploitable world object (drops items on extraction) |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Runtime PlayerState (Go)
|
|
53
|
+
|
|
54
|
+
```go
|
|
55
|
+
type PlayerState struct {
|
|
56
|
+
ID string // Go server player UUID
|
|
57
|
+
MapCode string // current map
|
|
58
|
+
Pos Point // world position (float64 X, Y)
|
|
59
|
+
Dims Dimensions // entity size
|
|
60
|
+
Color ColorRGBA // fallback solid color
|
|
61
|
+
Direction Direction // UP, UP_RIGHT, RIGHT, DOWN_RIGHT, DOWN, DOWN_LEFT, LEFT, UP_LEFT, NONE
|
|
62
|
+
Mode ObjectLayerMode // IDLE, WALKING, TELEPORTING
|
|
63
|
+
ObjectLayers []ObjectLayerState // active OL stack: { ItemID, Active, Quantity }
|
|
64
|
+
MaxLife float64
|
|
65
|
+
Life float64
|
|
66
|
+
LifeRegen float64
|
|
67
|
+
Coins uint32 // flat coin balance (single source of truth)
|
|
68
|
+
Frozen bool // FrozenInteractionState active
|
|
69
|
+
FreezeReason string // "dialogue" | "inventory" | ...
|
|
70
|
+
Path []PointI // A* path (for smooth movement)
|
|
71
|
+
AOI Rectangle // current area-of-interest bounds
|
|
72
|
+
SumStatsLimit int // max aggregate stat sum (equipment rules)
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## ObjectLayer State
|
|
79
|
+
|
|
80
|
+
Each entity carries an ordered stack of `ObjectLayerState` entries:
|
|
81
|
+
|
|
82
|
+
```go
|
|
83
|
+
type ObjectLayerState struct {
|
|
84
|
+
ItemID string // references ObjectLayer.data.item.id
|
|
85
|
+
Active bool // equipped/activated (only activable types can be true)
|
|
86
|
+
Quantity int // inventory quantity (for stackable items)
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The **active layers** determine the entity's rendered appearance and mechanical stats. The `Active` field is managed by the equipment rules.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Equipment Rules
|
|
95
|
+
|
|
96
|
+
Equipment rules govern which item types may be simultaneously active on a character:
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
EQUIPMENT_RULES_DEFAULTS = {
|
|
100
|
+
activeItemTypes: ['skin', 'breastplate', 'weapon'], // only these types may be activated
|
|
101
|
+
onePerType: true, // at most one active item per type
|
|
102
|
+
requireSkin: true, // player must always have an active skin if they own any
|
|
103
|
+
};
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Validation on `item_activation` request:**
|
|
107
|
+
|
|
108
|
+
1. Reject if `item.type` not in `activeItemTypes`.
|
|
109
|
+
2. If `onePerType`, deactivate any currently active item of the same type before activating the new one.
|
|
110
|
+
3. If `requireSkin`, ensure a skin remains active after the change.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Z-Order Rendering
|
|
115
|
+
|
|
116
|
+
The C client composites layers bottom-to-top by `item.type`:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
z-order type
|
|
120
|
+
────── ───────────────────
|
|
121
|
+
0 floor / obstacle / portal / foreground
|
|
122
|
+
1 skin (base character body)
|
|
123
|
+
2 breastplate (armor overlay)
|
|
124
|
+
3 weapon (weapon overlay)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
`get_priority_for_type()` in `entity_render.c` maps item type → z-order integer. Multiple layers of the same type are rendered in declared order within that z-level.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Stat Aggregation
|
|
132
|
+
|
|
133
|
+
Stats are aggregated across all **active** Object Layers on an entity. The server enforces a `sumStatsLimit` — the maximum sum of all stat values allowed for the player. Attempting to equip items that would exceed this limit is rejected.
|
|
134
|
+
|
|
135
|
+
**Active stats sum:**
|
|
136
|
+
|
|
137
|
+
$$\text{activeStatsSum} = \sum_{\text{active layers}} (\text{effect} + \text{resistance} + \text{agility} + \text{range} + \text{intelligence} + \text{utility})$$
|
|
138
|
+
|
|
139
|
+
The `sumStatsLimit` and `activeStatsSum` are sent to the client on each AOI update so the inventory UI can show remaining equip budget.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Entity Status Indicator (ESI)
|
|
144
|
+
|
|
145
|
+
The Go server computes a status `u8` per entity each AOI tick. The C client renders the corresponding icon above the entity nameplate.
|
|
146
|
+
|
|
147
|
+
```go
|
|
148
|
+
// Status constants (entity_status.go) — MUST stay in sync with JS STATUS_ICONS array
|
|
149
|
+
StatusNone = 0 // skill/coin bots, world objects
|
|
150
|
+
StatusPassive = 1 // passive bot
|
|
151
|
+
StatusHostile = 2 // hostile bot
|
|
152
|
+
StatusFrozen = 3 // player in FrozenInteractionState
|
|
153
|
+
StatusPlayer = 4 // normal alive player
|
|
154
|
+
StatusDead = 5 // dead / respawning entity
|
|
155
|
+
StatusResource = 6 // static exploitable resource
|
|
156
|
+
StatusResourceExtracted = 7 // depleted resource (respawning)
|
|
157
|
+
StatusActionProvider = 8 // NPC with available actions (bouncing chat icon)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Per-EntityType Defaults
|
|
163
|
+
|
|
164
|
+
Instance configuration (`CyberiaInstanceConf`) defines canonical defaults per entity type:
|
|
165
|
+
|
|
166
|
+
| Field | Description |
|
|
167
|
+
| ------------- | --------------------------------------------------------------------------------- |
|
|
168
|
+
| `liveItemIds` | ObjectLayer item IDs applied when entity is alive with no explicit items assigned |
|
|
169
|
+
| `deadItemIds` | ObjectLayer item IDs for dead/ghost/respawning state |
|
|
170
|
+
| `dropItemIds` | Items granted to the extractor when a resource entity is depleted |
|
|
171
|
+
| `colorKey` | Named palette color used as solid fallback when no active OL texture is available |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Bot Entity Profile
|
|
176
|
+
|
|
177
|
+
Bot entities extend the base schema with runtime AI state:
|
|
178
|
+
|
|
179
|
+
```go
|
|
180
|
+
type BotState struct {
|
|
181
|
+
// Inherits all PlayerState fields
|
|
182
|
+
Behavior string // "hostile" | "passive" | "skill" | "coin"
|
|
183
|
+
SpawnRadius int // wander / respawn radius
|
|
184
|
+
AggroRange int // attack range (0 = passive)
|
|
185
|
+
SpawnPoint PointI // original spawn cell
|
|
186
|
+
RespawnTimer time.Time // next respawn timestamp
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Bot behaviors:**
|
|
191
|
+
|
|
192
|
+
| Behavior | AI Actions | Description |
|
|
193
|
+
| --------- | --------------------------------------- | ------------------------ |
|
|
194
|
+
| `hostile` | pathfind to player, attack | Aggressive enemy bot |
|
|
195
|
+
| `passive` | random wander | Non-aggressive world NPC |
|
|
196
|
+
| `skill` | move in direction, despawn on collision | Projectile entity |
|
|
197
|
+
| `coin` | static, collectible | Coin drop entity |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Resource Entity Profile
|
|
202
|
+
|
|
203
|
+
Resource entities have a specific lifecycle:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
Alive (StatusResource)
|
|
207
|
+
→ Player extracts (tap interaction)
|
|
208
|
+
→ dropItemIds granted to player inventory
|
|
209
|
+
→ Entity transitions to StatusResourceExtracted
|
|
210
|
+
→ Respawn timer starts
|
|
211
|
+
→ Entity returns to StatusResource
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Entity Lifecycle Diagram
|
|
217
|
+
|
|
218
|
+
```mermaid
|
|
219
|
+
stateDiagram-v2
|
|
220
|
+
[*] --> Alive : Spawned by instance_loader
|
|
221
|
+
Alive --> Dead : Life reaches 0 (combat/skill)
|
|
222
|
+
Alive --> ResourceExtracted : Player extracts (resource type)
|
|
223
|
+
Dead --> Alive : Respawn timer elapsed
|
|
224
|
+
ResourceExtracted --> Alive : Respawn timer elapsed
|
|
225
|
+
Alive --> Frozen : Player opens modal (FrozenInteractionState)
|
|
226
|
+
Frozen --> Alive : Player closes modal
|
|
227
|
+
Alive --> [*] : Entity removed from AOI
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Coin Balance Architecture
|
|
233
|
+
|
|
234
|
+
Coins use a **flat + display split** design to avoid O(N) inventory traversal:
|
|
235
|
+
|
|
236
|
+
| Field | Type | Purpose |
|
|
237
|
+
| ----------------------------- | ------------------ | -------------------------------------------------------------------------------------------------- |
|
|
238
|
+
| `entity.Coins` | `uint32` | **Single source of truth** — all economy operations read/write this field O(1) |
|
|
239
|
+
| `coinItemId ObjectLayer slot` | `ObjectLayerState` | **Display only** — `Active: false`, `Quantity = Coins`, synced by `syncCoinOL()` on every mutation |
|
|
240
|
+
|
|
241
|
+
The `coin` item type is never activable. The inventory UI automatically renders it with a lock indicator.
|