cyberia 3.2.9 → 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.
Files changed (169) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +6 -0
  2. package/.github/workflows/npmpkg.ci.yml +1 -0
  3. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  4. package/.github/workflows/release.cd.yml +1 -0
  5. package/.vscode/extensions.json +9 -9
  6. package/.vscode/settings.json +20 -4
  7. package/CHANGELOG.md +213 -1
  8. package/CLI-HELP.md +92 -23
  9. package/README.md +190 -348
  10. package/bin/build.js +24 -8
  11. package/bin/build.template.js +187 -0
  12. package/bin/cyberia.js +229 -52
  13. package/bin/deploy.js +12 -2
  14. package/bin/index.js +229 -52
  15. package/bump.config.js +26 -0
  16. package/conf.js +130 -24
  17. package/deployment.yaml +4 -2
  18. package/hardhat/package-lock.json +113 -144
  19. package/hardhat/package.json +4 -3
  20. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  21. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  22. package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -2
  23. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  24. package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
  25. package/manifests/kind-config-dev.yaml +8 -0
  26. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  27. package/manifests/mongodb/pv-pvc.yaml +44 -8
  28. package/manifests/mongodb/statefulset.yaml +55 -68
  29. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  30. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  31. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  32. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  33. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  34. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  35. package/manifests/valkey/statefulset.yaml +1 -1
  36. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  37. package/package.json +27 -15
  38. package/scripts/ipxe-setup.sh +52 -49
  39. package/scripts/k3s-node-setup.sh +81 -46
  40. package/scripts/lxd-vm-setup.sh +193 -8
  41. package/scripts/maas-nat-firewalld.sh +145 -0
  42. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
  43. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +16 -16
  44. package/src/api/core/core.router.js +19 -14
  45. package/src/api/core/core.service.js +5 -5
  46. package/src/api/crypto/crypto.router.js +18 -12
  47. package/src/api/crypto/crypto.service.js +3 -3
  48. package/src/api/cyberia-action/cyberia-action.model.js +1 -1
  49. package/src/api/cyberia-action/cyberia-action.router.js +22 -18
  50. package/src/api/cyberia-action/cyberia-action.service.js +5 -5
  51. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
  52. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
  53. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
  54. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
  55. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
  56. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +6 -6
  57. package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
  58. package/src/api/cyberia-entity/cyberia-entity.service.js +5 -5
  59. package/src/api/cyberia-instance/cyberia-fallback-world.js +79 -4
  60. package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
  61. package/src/api/cyberia-instance/cyberia-instance.service.js +10 -10
  62. package/src/api/cyberia-instance/cyberia-world-generator.js +3 -3
  63. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +14 -48
  64. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
  65. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +5 -5
  66. package/src/api/cyberia-map/cyberia-map.router.js +35 -30
  67. package/src/api/cyberia-map/cyberia-map.service.js +7 -7
  68. package/src/api/cyberia-quest/cyberia-quest.model.js +1 -1
  69. package/src/api/cyberia-quest/cyberia-quest.router.js +22 -18
  70. package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
  71. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +22 -18
  72. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +5 -5
  73. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
  74. package/src/api/default/default.router.js +22 -18
  75. package/src/api/default/default.service.js +5 -5
  76. package/src/api/document/document.router.js +28 -23
  77. package/src/api/document/document.service.js +100 -23
  78. package/src/api/file/file.router.js +19 -13
  79. package/src/api/file/file.service.js +9 -7
  80. package/src/api/instance/instance.router.js +29 -24
  81. package/src/api/instance/instance.service.js +6 -6
  82. package/src/api/ipfs/ipfs.router.js +21 -16
  83. package/src/api/ipfs/ipfs.service.js +8 -8
  84. package/src/api/object-layer/object-layer.router.js +512 -507
  85. package/src/api/object-layer/object-layer.service.js +17 -14
  86. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
  87. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +5 -5
  88. package/src/api/test/test.router.js +17 -12
  89. package/src/api/types.js +24 -0
  90. package/src/api/user/guest.service.js +5 -4
  91. package/src/api/user/user.router.js +297 -288
  92. package/src/api/user/user.service.js +100 -35
  93. package/src/cli/baremetal.js +132 -101
  94. package/src/cli/cluster.js +700 -232
  95. package/src/cli/db.js +59 -60
  96. package/src/cli/deploy.js +216 -137
  97. package/src/cli/fs.js +13 -3
  98. package/src/cli/index.js +80 -15
  99. package/src/cli/ipfs.js +4 -6
  100. package/src/cli/kubectl.js +4 -1
  101. package/src/cli/lxd.js +1099 -223
  102. package/src/cli/monitor.js +9 -3
  103. package/src/cli/release.js +334 -140
  104. package/src/cli/repository.js +68 -23
  105. package/src/cli/run.js +193 -49
  106. package/src/cli/secrets.js +11 -2
  107. package/src/cli/test.js +9 -3
  108. package/src/client/Default.index.js +9 -3
  109. package/src/client/components/core/Auth.js +5 -0
  110. package/src/client/components/core/ClientEvents.js +76 -0
  111. package/src/client/components/core/EventBus.js +4 -0
  112. package/src/client/components/core/Modal.js +82 -41
  113. package/src/client/components/core/PanelForm.js +56 -52
  114. package/src/client/components/core/Worker.js +162 -363
  115. package/src/client/components/cyberia/MapEngineCyberia.js +1 -1
  116. package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
  117. package/src/client/public/cyberia-docs/ARCHITECTURE.md +50 -410
  118. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +114 -327
  119. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +200 -222
  120. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +203 -185
  121. package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
  122. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +2 -2
  123. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  124. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
  125. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  126. package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
  127. package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
  128. package/src/client/sw/core.sw.js +174 -112
  129. package/src/db/DataBaseProvider.js +115 -15
  130. package/src/db/mariadb/MariaDB.js +2 -1
  131. package/src/db/mongo/MongoBootstrap.js +657 -0
  132. package/src/db/mongo/MongooseDB.js +129 -21
  133. package/src/grpc/cyberia/grpc-server.js +25 -57
  134. package/src/index.js +1 -1
  135. package/src/runtime/cyberia-client/Dockerfile +24 -3
  136. package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
  137. package/src/runtime/cyberia-server/Dockerfile +29 -4
  138. package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
  139. package/src/runtime/express/Express.js +2 -2
  140. package/src/runtime/wp/Wp.js +8 -5
  141. package/src/server/auth.js +2 -2
  142. package/src/server/client-build-docs.js +1 -1
  143. package/src/server/client-build.js +94 -129
  144. package/src/server/conf.js +86 -83
  145. package/src/server/process.js +180 -19
  146. package/src/server/proxy.js +9 -2
  147. package/src/server/runtime.js +1 -1
  148. package/src/server/start.js +17 -5
  149. package/src/server/valkey.js +2 -0
  150. package/src/ws/IoInterface.js +16 -16
  151. package/src/ws/core/channels/core.ws.chat.js +11 -11
  152. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  153. package/src/ws/core/channels/core.ws.stream.js +19 -19
  154. package/src/ws/core/core.ws.connection.js +8 -8
  155. package/src/ws/core/core.ws.server.js +6 -5
  156. package/src/ws/default/channels/default.ws.main.js +10 -10
  157. package/src/ws/default/default.ws.connection.js +4 -4
  158. package/src/ws/default/default.ws.server.js +4 -3
  159. package/bin/file.js +0 -202
  160. package/bin/vs.js +0 -74
  161. package/bin/zed.js +0 -84
  162. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -574
  163. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -467
  164. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  165. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  166. package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
  167. /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
  168. /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
  169. /package/src/client/ssr/{pages → views}/Test.js +0 -0
@@ -1,467 +0,0 @@
1
- /**
2
- * Shared Cyberia plain-data module.
3
- * Keep this file free of runtime-specific imports so the same registry can be
4
- * consumed by client, server, and CLI code.
5
- */
6
- const ITEM_TYPES = Object.freeze({
7
- skin: 'skin',
8
- breastplate: 'breastplate',
9
- weapon: 'weapon',
10
- skill: 'skill',
11
- coin: 'coin',
12
- floor: 'floor',
13
- obstacle: 'obstacle',
14
- portal: 'portal',
15
- foreground: 'foreground',
16
- resource: 'resource',
17
- });
18
- const ENTITY_TYPES = Object.freeze({
19
- player: 'player',
20
- other_player: 'other_player',
21
- bot: 'bot',
22
- skill: 'skill',
23
- coin: 'coin',
24
- floor: 'floor',
25
- obstacle: 'obstacle',
26
- portal: 'portal',
27
- foreground: 'foreground',
28
- resource: 'resource',
29
- });
30
- const QUEST_STEPS_TYPES = Object.freeze(['collect', 'talk', 'kill']);
31
- const CYBERIA_ACTION_TYPES = Object.freeze(['craft', 'shop', 'storage', 'quest-talk']);
32
- const ENTITY_TYPE_TO_ITEM_TYPES = Object.freeze({
33
- [ENTITY_TYPES.player]: Object.freeze([ITEM_TYPES.skin, ITEM_TYPES.breastplate, ITEM_TYPES.weapon]),
34
- [ENTITY_TYPES.other_player]: Object.freeze([ITEM_TYPES.skin, ITEM_TYPES.breastplate, ITEM_TYPES.weapon]),
35
- [ENTITY_TYPES.bot]: Object.freeze([ITEM_TYPES.skin, ITEM_TYPES.weapon]),
36
- [ENTITY_TYPES.skill]: Object.freeze([ITEM_TYPES.skill]),
37
- [ENTITY_TYPES.coin]: Object.freeze([ITEM_TYPES.coin]),
38
- [ENTITY_TYPES.floor]: Object.freeze([ITEM_TYPES.floor]),
39
- [ENTITY_TYPES.obstacle]: Object.freeze([ITEM_TYPES.obstacle]),
40
- [ENTITY_TYPES.portal]: Object.freeze([ITEM_TYPES.portal]),
41
- [ENTITY_TYPES.foreground]: Object.freeze([ITEM_TYPES.foreground]),
42
- [ENTITY_TYPES.resource]: Object.freeze([ITEM_TYPES.resource]),
43
- });
44
- class CyberiaDependencies {
45
- static 'maxrects-packer' = '^2.7.3';
46
- static pngjs = '^7.0.0';
47
- static jimp = '^1.6.0';
48
- static sharp = '^0.34.5';
49
- static ethers = '~6.16.0';
50
- }
51
- const DefaultCyberiaItems = [
52
- { item: { id: 'coin', type: ITEM_TYPES.coin } },
53
- // { item: { id: 'red-power', type: 'skill' } },
54
- // { item: { id: 'heal', type: 'skill' } },
55
- { item: { id: 'hatchet-skill', type: ITEM_TYPES.skill } },
56
- // { item: { id: 'green-power', type: 'skill' } },
57
- // { item: { id: 'blood', type: 'skill' } },
58
- { item: { id: 'atlas_pistol_mk2', type: ITEM_TYPES.weapon } },
59
- { item: { id: 'atlas_pistol_mk2_bullet', type: ITEM_TYPES.skill } },
60
- { item: { id: 'tim-knife', type: ITEM_TYPES.weapon } },
61
- { item: { id: 'hatchet', type: ITEM_TYPES.weapon } },
62
- { item: { id: 'wason', type: ITEM_TYPES.skin } },
63
- { item: { id: 'scp-2040', type: ITEM_TYPES.skin } },
64
- { item: { id: 'purple', type: ITEM_TYPES.skin } },
65
- { item: { id: 'punk', type: ITEM_TYPES.skin } },
66
- // { item: { id: 'marciano', type: 'skin' } },
67
- { item: { id: 'lain', type: ITEM_TYPES.skin } },
68
- { item: { id: 'kaneki', type: ITEM_TYPES.skin } },
69
- { item: { id: 'junko', type: ITEM_TYPES.skin } },
70
- { item: { id: 'ghost', type: ITEM_TYPES.skin } },
71
- { item: { id: 'eiri', type: ITEM_TYPES.skin } },
72
- { item: { id: 'anon', type: ITEM_TYPES.skin } },
73
- { item: { id: 'alex', type: ITEM_TYPES.skin } },
74
- { item: { id: 'agent', type: ITEM_TYPES.skin } },
75
- { item: { id: 'grass', type: ITEM_TYPES.floor } },
76
- ];
77
- const DEFAULT_CYBERIA_ITEM_BY_ID = Object.freeze(
78
- DefaultCyberiaItems.reduce((acc, entry) => {
79
- acc[entry.item.id] = entry;
80
- return acc;
81
- }, {}),
82
- );
83
- const getDefaultCyberiaItemById = (itemId) => DEFAULT_CYBERIA_ITEM_BY_ID[itemId] || null;
84
- const getDefaultCyberiaItemsByItemType = (itemType) =>
85
- DefaultCyberiaItems.filter((entry) => entry.item.type === itemType);
86
- const getDefaultCyberiaItemsByEntityType = (entityType) => {
87
- const allowedTypes = ENTITY_TYPE_TO_ITEM_TYPES[entityType] || [];
88
- return DefaultCyberiaItems.filter((entry) => allowedTypes.includes(entry.item.type));
89
- };
90
- const DefaultSkillConfig = [
91
- // { triggerItemId: 'anon', logicEventIds: ['doppelganger'] },
92
- {
93
- triggerItemId: 'atlas_pistol_mk2',
94
- logicEventIds: ['projectile'],
95
- },
96
- { triggerItemId: 'coin', logicEventIds: ['coin_drop_or_transaction'] },
97
- // { triggerItemId: 'purple', logicEventIds: ['doppelganger'] },
98
- // { triggerItemId: 'atlas_pistol_mk2_bullet', logicEventIds: ['doppelganger'] },
99
- ];
100
- /**
101
- * Default dialogue seeds for every non-commented entry in DefaultCyberiaItems.
102
- * Each entry follows the CyberiaDialogue model schema:
103
- * { code, order, speaker, text, mood }
104
- *
105
- * `code` is the primary grouping key (e.g. "default-lain"). The C client
106
- * fetches all lines for a code with GET /api/cyberia-dialogue/code/:code.
107
- *
108
- * Used by the seed/migration script to populate the database on first boot.
109
- */
110
- const DefaultCyberiaDialogues = [
111
- {
112
- code: 'default-coin',
113
- order: 0,
114
- speaker: 'Coin',
115
- text: 'A standard unit of exchange in the cyberia network.',
116
- mood: 'neutral',
117
- },
118
- {
119
- code: 'default-atlas_pistol_mk2',
120
- order: 0,
121
- speaker: 'Atlas Pistol MK2',
122
- text: 'Military-grade sidearm. Fires energy projectiles.',
123
- mood: 'neutral',
124
- },
125
- {
126
- code: 'default-atlas_pistol_mk2_bullet',
127
- order: 0,
128
- speaker: 'MK2 Bullet',
129
- text: 'High-velocity energy round. Dissipates on impact.',
130
- mood: 'neutral',
131
- },
132
- {
133
- code: 'default-hatchet',
134
- order: 0,
135
- speaker: 'Hatchet',
136
- text: 'A crude but reliable melee tool. Good for close quarters.',
137
- mood: 'neutral',
138
- },
139
- {
140
- code: 'default-wason',
141
- order: 0,
142
- speaker: 'Wason',
143
- text: 'They say I am just a wandering merchant... but I have seen things.',
144
- mood: 'neutral',
145
- },
146
- {
147
- code: 'default-wason',
148
- order: 1,
149
- speaker: 'Wason',
150
- text: 'The network was not always like this. There was a time before the portals.',
151
- mood: 'sad',
152
- },
153
- {
154
- code: 'default-scp-2040',
155
- order: 0,
156
- speaker: 'SCP-2040',
157
- text: 'CONTAINMENT PROTOCOL ACTIVE. Do not make direct eye contact.',
158
- mood: 'angry',
159
- },
160
- {
161
- code: 'default-scp-2040',
162
- order: 1,
163
- speaker: 'SCP-2040',
164
- text: 'I remember everything. Every iteration. Every reset.',
165
- mood: 'sad',
166
- },
167
- {
168
- code: 'default-purple',
169
- order: 0,
170
- speaker: 'Purple',
171
- text: 'The void between nodes is not empty — it is alive.',
172
- mood: 'neutral',
173
- },
174
- {
175
- code: 'default-punk',
176
- order: 0,
177
- speaker: 'Punk',
178
- text: 'Rules are just code someone else wrote. I write my own.',
179
- mood: 'happy',
180
- },
181
- {
182
- code: 'default-lain',
183
- order: 0,
184
- speaker: 'Lain',
185
- text: 'No matter where you go, everyone is connected.',
186
- mood: 'neutral',
187
- },
188
- {
189
- code: 'default-lain',
190
- order: 1,
191
- speaker: 'Lain',
192
- text: 'If you are not remembered, then you never existed.',
193
- mood: 'sad',
194
- },
195
- {
196
- code: 'default-lain',
197
- order: 2,
198
- speaker: 'Lain',
199
- text: 'The wired is not a separate world. It is layered over this one.',
200
- mood: 'neutral',
201
- },
202
- {
203
- code: 'default-kaneki',
204
- order: 0,
205
- speaker: 'Kaneki',
206
- text: 'I am not the protagonist of a novel. I am just... me.',
207
- mood: 'sad',
208
- },
209
- {
210
- code: 'default-kaneki',
211
- order: 1,
212
- speaker: 'Kaneki',
213
- text: 'What is 1000 minus 7?',
214
- mood: 'angry',
215
- },
216
- {
217
- code: 'default-junko',
218
- order: 0,
219
- speaker: 'Junko',
220
- text: 'Despair is the seed from which hope blooms!',
221
- mood: 'happy',
222
- },
223
- {
224
- code: 'default-junko',
225
- order: 1,
226
- speaker: 'Junko',
227
- text: 'How boring... nothing ever surprises me anymore.',
228
- mood: 'sad',
229
- },
230
- { code: 'default-ghost', order: 0, speaker: 'Ghost', text: '...', mood: 'neutral' },
231
- {
232
- code: 'default-eiri',
233
- order: 0,
234
- speaker: 'Eiri',
235
- text: 'I am the god of the wired. I designed the protocol.',
236
- mood: 'neutral',
237
- },
238
- {
239
- code: 'default-eiri',
240
- order: 1,
241
- speaker: 'Eiri',
242
- text: 'Flesh is just hardware. Consciousness is the only software that matters.',
243
- mood: 'neutral',
244
- },
245
- {
246
- code: 'default-anon',
247
- order: 0,
248
- speaker: '???',
249
- text: 'You should not be here. Turn back.',
250
- mood: 'angry',
251
- },
252
- {
253
- code: 'default-anon',
254
- order: 1,
255
- speaker: '???',
256
- text: 'Or stay. It does not matter. Nothing leaves this place.',
257
- mood: 'neutral',
258
- },
259
- {
260
- code: 'default-alex',
261
- order: 0,
262
- speaker: 'Alex',
263
- text: 'I have been mapping the portal network. Something does not add up.',
264
- mood: 'neutral',
265
- },
266
- {
267
- code: 'default-alex',
268
- order: 1,
269
- speaker: 'Alex',
270
- text: 'There are nodes that exist in the registry but have no physical anchor.',
271
- mood: 'neutral',
272
- },
273
- {
274
- code: 'default-agent',
275
- order: 0,
276
- speaker: 'Agent',
277
- text: 'Civilian, this area is restricted. State your business.',
278
- mood: 'neutral',
279
- },
280
- {
281
- code: 'default-agent',
282
- order: 1,
283
- speaker: 'Agent',
284
- text: 'Hmm. Proceed, but know that you are being watched.',
285
- mood: 'neutral',
286
- },
287
- {
288
- code: 'default-grass',
289
- order: 0,
290
- speaker: 'Grass',
291
- text: 'A patch of synthetic grass. It sways gently despite no wind.',
292
- mood: 'neutral',
293
- },
294
- // ── Quest-talk dialogue lines ────────────────────────────────────────────
295
- {
296
- code: 'quest-talk-wason',
297
- order: 0,
298
- speaker: 'Wason',
299
- text: 'Wanderer! Glad you stopped by. I need a favor — nothing dangerous... mostly.',
300
- mood: 'happy',
301
- },
302
- {
303
- code: 'quest-talk-wason',
304
- order: 1,
305
- speaker: 'Wason',
306
- text: "First, find Alex — she's been surveying the nodes east of here. Then gather a hatchet for me.",
307
- mood: 'neutral',
308
- },
309
- {
310
- code: 'quest-talk-wason',
311
- order: 2,
312
- speaker: 'Wason',
313
- text: 'And one more thing: the SCP-2040 anomalies are overrunning my trade routes. Deal with two of them.',
314
- mood: 'sad',
315
- },
316
- {
317
- code: 'quest-talk-alex',
318
- order: 0,
319
- speaker: 'Alex',
320
- text: "Wason sent you? Good. The portal anomalies are getting worse. I've logged what I can.",
321
- mood: 'neutral',
322
- },
323
- {
324
- code: 'quest-talk-alex',
325
- order: 1,
326
- speaker: 'Alex',
327
- text: 'Tell Wason: the source is somewhere in the deeper nodes. The registry does not lie.',
328
- mood: 'neutral',
329
- },
330
- ];
331
-
332
- /**
333
- * Default action catalog — provide base metadata default actions,
334
- * this provide for entities dynamicaale match when init instance init x and init y
335
- * positions of entitie for the fallback world or custom instance, and seed dialogue
336
- * for quest-talk actions.
337
- *
338
- * type values: 'quest-talk' | 'shop' | 'craft' | 'storage'
339
- * dialogCode: General-purpose default dialogue opened for this action
340
- * (any action type). Used as the immediate greeting/intro.
341
- * questDialogueCodes: Ordered list of CyberiaDialogue codes that must be
342
- * completed (in sequence) to satisfy quest-talk step
343
- * validation. Distinct from dialogCode — for simple
344
- * actions they may overlap; for multi-stage quests they
345
- * can diverge.
346
- * is completed. Empty string = no quest granted.
347
- */
348
- const DefaultCyberiaActions = [
349
- {
350
- code: 'wason-quest-intro',
351
- type: 'quest-talk',
352
- label: 'Quest',
353
- provideItemId: 'wason',
354
- grantQuestCode: 'fallback-intro-quest',
355
- dialogCode: 'quest-talk-wason',
356
- questDialogueCodes: ['quest-talk-wason'],
357
- },
358
- {
359
- code: 'alex-quest-talk',
360
- type: 'quest-talk',
361
- label: 'Quest Talk',
362
- provideItemId: 'alex',
363
- grantQuestCode: '',
364
- dialogCode: 'quest-talk-alex',
365
- questDialogueCodes: ['quest-talk-alex'],
366
- },
367
- {
368
- code: 'agent-mission-brief',
369
- type: 'quest-talk',
370
- label: 'Mission Brief',
371
- provideItemId: 'agent',
372
- grantQuestCode: 'bounty-quest-alpha',
373
- dialogCode: 'default-agent',
374
- questDialogueCodes: ['default-agent'],
375
- },
376
- {
377
- code: 'wason-bounty-brief',
378
- type: 'quest-talk',
379
- label: 'Bounty Brief',
380
- provideItemId: 'wason',
381
- grantQuestCode: '',
382
- dialogCode: 'quest-talk-wason',
383
- questDialogueCodes: ['quest-talk-wason'],
384
- },
385
- ];
386
-
387
- /**
388
- * Default quest definitions for the fallback world.
389
- * Mirrors the CyberiaQuestSchema.
390
- *
391
- * Objective types:
392
- * 'talk' — itemId = provideItemId of the NPC to interact with
393
- * 'collect' — itemId = item to receive in inventory; quantity = amount
394
- * 'kill' — itemId = entity skin itemId; quantity = kill count
395
- *
396
- */
397
- const DefaultCyberiaQuests = [
398
- {
399
- code: 'fallback-intro-quest',
400
- title: "The Wanderer's Task",
401
- description: 'Help Wason restore order to the fractured nodes.',
402
- prerequisiteCodes: [],
403
- unlocksQuestCodes: ['bounty-quest-alpha'],
404
- steps: [
405
- {
406
- id: 'step-talk-alex',
407
- description: 'Find Alex and hear her report on the portal anomalies.',
408
- objectives: [{ type: 'talk', itemId: 'alex', quantity: 1 }],
409
- },
410
- {
411
- id: 'step-collect-hatchet',
412
- description: 'Obtain a hatchet for Wason.',
413
- objectives: [{ type: 'collect', itemId: 'hatchet', quantity: 1 }],
414
- },
415
- {
416
- id: 'step-kill-scp',
417
- description: 'Eliminate SCP-2040 anomalies threatening the trade routes.',
418
- objectives: [{ type: 'kill', itemId: 'scp-2040', quantity: 2 }],
419
- },
420
- ],
421
- rewards: [{ itemId: 'coin', quantity: 50 }],
422
- },
423
- {
424
- // Second quest: exercises all step types in a different order (kill → collect → talk).
425
- // Unlocked automatically after completing fallback-intro-quest.
426
- code: 'bounty-quest-alpha',
427
- title: 'Alpha Bounty',
428
- description: 'A field test: eliminate a threat, claim your reward, then report back.',
429
- prerequisiteCodes: ['fallback-intro-quest'],
430
- unlocksQuestCodes: [],
431
- steps: [
432
- {
433
- id: 'step-kill-first',
434
- description: 'Eliminate the SCP-2040 threat.',
435
- objectives: [{ type: 'kill', itemId: 'scp-2040', quantity: 1 }],
436
- },
437
- {
438
- id: 'step-collect-reward',
439
- description: 'Collect the bounty coin drop.',
440
- objectives: [{ type: 'collect', itemId: 'coin', quantity: 10 }],
441
- },
442
- {
443
- id: 'step-report-wason',
444
- description: 'Report back to Wason.',
445
- objectives: [{ type: 'talk', itemId: 'wason', quantity: 1 }],
446
- },
447
- ],
448
- rewards: [{ itemId: 'hatchet', quantity: 1 }],
449
- },
450
- ];
451
-
452
- export {
453
- ITEM_TYPES,
454
- ENTITY_TYPES,
455
- ENTITY_TYPE_TO_ITEM_TYPES,
456
- QUEST_STEPS_TYPES,
457
- CYBERIA_ACTION_TYPES,
458
- getDefaultCyberiaItemById,
459
- getDefaultCyberiaItemsByItemType,
460
- getDefaultCyberiaItemsByEntityType,
461
- CyberiaDependencies,
462
- DefaultCyberiaItems,
463
- DefaultSkillConfig,
464
- DefaultCyberiaDialogues,
465
- DefaultCyberiaActions,
466
- DefaultCyberiaQuests,
467
- };
@@ -1,21 +0,0 @@
1
- SrrComponent = (render = { style: {}, renderStyle: () => '' }, options) =>
2
- html`
3
- <div style="${render.renderStyle('body')}">
4
- <div style="${render.renderStyle('.container')}">
5
- <h1 style="${render.renderStyle('h1')}">{{H1}}</h1>
6
- <p style="${render.renderStyle('p')}">{{P1}}</p>
7
- <p style="${render.renderStyle('p')}">
8
- <a href="{{RECOVER_WEB_URL}}" style="${render.renderStyle('button')}"
9
- ><img
10
- src="http${options.transport.secure ? 's' : ''}://${options.host}${options.path === '/'
11
- ? ''
12
- : options.path}/api/user/recover/{{TOKEN}}"
13
- /><br />{{RECOVER_BTN_LABEL}}</a
14
- >
15
- </p>
16
- </div>
17
- <div style="${render.renderStyle('.footer')}">
18
- <p>{{COMPANY}}</p>
19
- </div>
20
- </div>
21
- `;
@@ -1,17 +0,0 @@
1
- SrrComponent = (render = { style: {}, renderStyle: () => '' }, options) =>
2
- html`
3
- <div style="${render.renderStyle('body')}">
4
- <div style="${render.renderStyle('.container')}">
5
- <h1 style="${render.renderStyle('h1')}">{{H1}}</h1>
6
- <p style="${render.renderStyle('p')}">{{P1}}</p>
7
- <img
8
- src="http${options.transport.secure ? 's' : ''}://${options.host}${options.path === '/'
9
- ? ''
10
- : options.path}/api/user/mailer/{{TOKEN}}"
11
- />
12
- </div>
13
- <div style="${render.renderStyle('.footer')}">
14
- <p>{{COMPANY}}</p>
15
- </div>
16
- </div>
17
- `;