@maka/maka-cli 5.123.0 → 5.123.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -64
- package/bundle/typescript/package.json +120 -120
- package/bundle/typescript/src/README.md +64 -64
- package/bundle/typescript/src/commands/aws/aws.command.js +2 -2
- package/bundle/typescript/src/commands/aws/ci.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/aws/ckp.sub.cmd.js +12 -12
- package/bundle/typescript/src/commands/aws/csg.sub.cmd.js +3 -3
- package/bundle/typescript/src/commands/aws/di.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/aws/rkp.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/aws/sth.sub.cmd.js +3 -3
- package/bundle/typescript/src/commands/aws/ti.sub.cmd.js +5 -5
- package/bundle/typescript/src/commands/build/build.js +16 -16
- package/bundle/typescript/src/commands/build/docker.sub.cmd.js +9 -9
- package/bundle/typescript/src/commands/create.js +36 -36
- package/bundle/typescript/src/commands/debug.js +4 -4
- package/bundle/typescript/src/commands/deploy/deploy.command.js +2 -2
- package/bundle/typescript/src/commands/deploy/galaxy.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/deploy/github.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/deploy/ubuntu.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/env/env.command.js +8 -8
- package/bundle/typescript/src/commands/env/set.sub.cmd.js +11 -11
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -9
- package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +7 -7
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +443 -443
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -6
- package/bundle/typescript/src/commands/game/sideQuest/game.js +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +206 -206
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +9 -9
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +556 -556
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +1447 -1447
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +14 -14
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/generate.js +2 -2
- package/bundle/typescript/src/commands/lint.js +10 -10
- package/bundle/typescript/src/commands/maka.cmd.js +26 -26
- package/bundle/typescript/src/commands/murder.js +14 -14
- package/bundle/typescript/src/commands/proxy.js +13 -13
- package/bundle/typescript/src/commands/remote/reconfig.sub.cmd.js +6 -6
- package/bundle/typescript/src/commands/run/docker.sub.cmd.js +11 -11
- package/bundle/typescript/src/commands/run/run.command.js +24 -24
- package/bundle/typescript/src/commands/set/global.sub.cmd.js +8 -8
- package/bundle/typescript/src/commands/set/local.sub.cmd.js +2 -2
- package/bundle/typescript/src/commands/set/set.command.js +3 -3
- package/bundle/typescript/src/commands/testCmd/test.command.js +2 -2
- package/bundle/typescript/src/exec.js +0 -0
- package/bundle/typescript/src/generators/api.js +11 -11
- package/bundle/typescript/src/generators/collection.js +6 -6
- package/bundle/typescript/src/generators/hook.js +10 -10
- package/bundle/typescript/src/generators/kits/auth/auth.generator.js +2 -2
- package/bundle/typescript/src/generators/kits/auth/auth0-meteor.auth.gen.js +612 -612
- package/bundle/typescript/src/generators/kits/auth/basic-meteor.auth.gen.js +48 -48
- package/bundle/typescript/src/generators/kits/auth/provider.auth.gen.js +12 -12
- package/bundle/typescript/src/generators/kits/esri/esri.generator.js +3 -3
- package/bundle/typescript/src/generators/kits/esri/map.esri.gen.js +7 -7
- package/bundle/typescript/src/generators/kits/frames/frames.generator.js +16 -16
- package/bundle/typescript/src/generators/kits/mui/auth.mui.gen.js +2 -2
- package/bundle/typescript/src/generators/kits/mui/auth0.mui.gen.js +5 -5
- package/bundle/typescript/src/generators/kits/mui/frame.mui.gen.js +4 -4
- package/bundle/typescript/src/generators/kits/mui/mui.generator.js +22 -22
- package/bundle/typescript/src/generators/services/translation.js +5 -5
- package/bundle/typescript/src/templates/aws/cloudformation/create-ec2-instance.template +14 -14
- package/bundle/typescript/src/templates/meteor/api/api.js +20 -20
- package/bundle/typescript/src/templates/meteor/api/api.js.ts +20 -20
- package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js +50 -50
- package/bundle/typescript/src/templates/meteor/api/apollo-gateway.js.ts +55 -55
- package/bundle/typescript/src/templates/meteor/api/graphql-api.js +63 -63
- package/bundle/typescript/src/templates/meteor/api/graphql-api.js.ts +69 -69
- package/bundle/typescript/src/templates/meteor/api/methods.js +39 -39
- package/bundle/typescript/src/templates/meteor/api/methods.js.ts +40 -40
- package/bundle/typescript/src/templates/meteor/api/register-api.js +3 -3
- package/bundle/typescript/src/templates/meteor/api/register-api.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/api/resolvers.js +9 -9
- package/bundle/typescript/src/templates/meteor/api/resolvers.js.ts +9 -9
- package/bundle/typescript/src/templates/meteor/api/typeDefs.js +6 -6
- package/bundle/typescript/src/templates/meteor/api/typeDefs.js.ts +6 -6
- package/bundle/typescript/src/templates/meteor/app/client/body.html +3 -3
- package/bundle/typescript/src/templates/meteor/app/client/head.html +12 -12
- package/bundle/typescript/src/templates/meteor/app/client/main.js +15 -15
- package/bundle/typescript/src/templates/meteor/app/client/main.js.jsx +15 -15
- package/bundle/typescript/src/templates/meteor/app/client/main.js.ts +17 -17
- package/bundle/typescript/src/templates/meteor/app/client/main.js.tsx +17 -17
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.jsx +107 -107
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.ts +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/index.js.tsx +108 -108
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js +39 -39
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.jsx +33 -33
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.ts +24 -24
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/routes.js.tsx +33 -33
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.jsx +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.ts +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/client/templates.js.tsx +9 -9
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.jsx +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/index.js.tsx +20 -20
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.jsx +28 -28
- package/bundle/typescript/src/templates/meteor/app/imports/startup/lib/routes.js.tsx +28 -28
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js +1 -1
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.jsx +95 -95
- package/bundle/typescript/src/templates/meteor/app/imports/startup/server/index.js.tsx +98 -98
- package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js +24 -24
- package/bundle/typescript/src/templates/meteor/app/imports/ui/test-helpers.js.ts +24 -24
- package/bundle/typescript/src/templates/meteor/app/lib/main.js +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.jsx +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/app/lib/main.js.tsx +3 -3
- package/bundle/typescript/src/templates/meteor/app/maka.d.ts +533 -533
- package/bundle/typescript/src/templates/meteor/app/meteor.d.ts +181 -181
- package/bundle/typescript/src/templates/meteor/app/public/manifest.json +27 -27
- package/bundle/typescript/src/templates/meteor/app/public/sw.js +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.jsx +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.ts +30 -30
- package/bundle/typescript/src/templates/meteor/app/public/sw.js.tsx +30 -30
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.jsx +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.ts +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/helmet-csp.js.tsx +179 -179
- package/bundle/typescript/src/templates/meteor/app/server/main.js +13 -13
- package/bundle/typescript/src/templates/meteor/app/server/main.js.jsx +13 -13
- package/bundle/typescript/src/templates/meteor/app/server/main.js.ts +14 -14
- package/bundle/typescript/src/templates/meteor/app/server/main.js.tsx +14 -14
- package/bundle/typescript/src/templates/meteor/app/tsconfig.json +42 -42
- package/bundle/typescript/src/templates/meteor/collection/collection.js +51 -51
- package/bundle/typescript/src/templates/meteor/collection/collection.js.ts +55 -55
- package/bundle/typescript/src/templates/meteor/collection/tests.js +27 -27
- package/bundle/typescript/src/templates/meteor/collection/tests.js.ts +27 -27
- package/bundle/typescript/src/templates/meteor/config/deploy.sh.template +101 -101
- package/bundle/typescript/src/templates/meteor/config/docker-compose.yaml +17 -17
- package/bundle/typescript/src/templates/meteor/config/nginx.conf.template +31 -31
- package/bundle/typescript/src/templates/meteor/config/pm2.config.js +27 -27
- package/bundle/typescript/src/templates/meteor/config/process.env +5 -5
- package/bundle/typescript/src/templates/meteor/config/settings.json +11 -11
- package/bundle/typescript/src/templates/meteor/config/ssh.json +6 -6
- package/bundle/typescript/src/templates/meteor/dbc/config.js +70 -70
- package/bundle/typescript/src/templates/meteor/dbc/config.js.ts +70 -70
- package/bundle/typescript/src/templates/meteor/dbc/conn.js +37 -37
- package/bundle/typescript/src/templates/meteor/dbc/conn.js.ts +37 -37
- package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js +3 -3
- package/bundle/typescript/src/templates/meteor/dbc/register-dbc.js.ts +3 -3
- package/bundle/typescript/src/templates/meteor/github/workflows/deploy.yaml +150 -150
- package/bundle/typescript/src/templates/meteor/method/method.js +48 -48
- package/bundle/typescript/src/templates/meteor/method/method.js.ts +48 -48
- package/bundle/typescript/src/templates/meteor/package/package.js +37 -37
- package/bundle/typescript/src/templates/meteor/package/package.js.jsx +37 -37
- package/bundle/typescript/src/templates/meteor/package/package.js.ts +36 -36
- package/bundle/typescript/src/templates/meteor/package/package.js.tsx +37 -37
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.jsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.ts +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/client/package.js.tsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.jsx +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.ts +5 -5
- package/bundle/typescript/src/templates/meteor/package/tests/server/package.js.tsx +5 -5
- package/bundle/typescript/src/templates/meteor/project/.maka/config.json +29 -29
- package/bundle/typescript/src/templates/meteor/project/README.md +33 -33
- package/bundle/typescript/src/templates/meteor/project/build/README +4 -4
- package/bundle/typescript/src/templates/meteor/project/gitignore +10 -10
- package/bundle/typescript/src/templates/meteor/project/package.json +29 -29
- package/bundle/typescript/src/templates/meteor/publish/publish.js +7 -7
- package/bundle/typescript/src/templates/meteor/publish/publish.js.ts +7 -7
- package/bundle/typescript/src/templates/meteor/service/logger/logger.js +27 -27
- package/bundle/typescript/src/templates/meteor/service/logger/logger.js.ts +27 -27
- package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css +5 -5
- package/bundle/typescript/src/templates/meteor/stylesheet/stylesheet.css.less +5 -5
- package/bundle/typescript/src/templates/meteor/template/template-tests.js +1 -1
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.jsx +55 -55
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/template/template-tests.js.tsx +55 -55
- package/bundle/typescript/src/templates/meteor/template/template.css +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.css.less +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.css.scss +3 -3
- package/bundle/typescript/src/templates/meteor/template/template.html +5 -5
- package/bundle/typescript/src/templates/meteor/template/template.js +20 -20
- package/bundle/typescript/src/templates/meteor/template/template.js.jsx +77 -77
- package/bundle/typescript/src/templates/meteor/template/template.js.ts +1 -1
- package/bundle/typescript/src/templates/meteor/template/template.js.tsx +89 -89
- package/bundle/typescript/src/templates/react/component/component.css +6 -6
- package/bundle/typescript/src/templates/react/component/component.css.less +6 -6
- package/bundle/typescript/src/templates/react/component/component.css.scss +3 -3
- package/bundle/typescript/src/templates/react/component/component.js.jsx +59 -59
- package/bundle/typescript/src/templates/react/component/component.js.tsx +65 -65
- package/bundle/typescript/src/templates/react/hook/hook.css +3 -3
- package/bundle/typescript/src/templates/react/hook/hook.css.scss +3 -3
- package/bundle/typescript/src/templates/react/hook/hook.js.jsx +19 -19
- package/bundle/typescript/src/templates/react/hook/hook.js.tsx +19 -19
- package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.jsx +306 -306
- package/bundle/typescript/src/templates/react/kit/auth/provider/authentication-provider.js.tsx +350 -350
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.jsx +178 -178
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-client.js.tsx +178 -178
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.jsx +59 -59
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-config.js.tsx +67 -67
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.jsx +273 -273
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-methods.js.tsx +275 -275
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.jsx +182 -182
- package/bundle/typescript/src/templates/react/kit/auth/service/auth0-validator.js.tsx +199 -199
- package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.jsx +138 -138
- package/bundle/typescript/src/templates/react/kit/auth/service/meteor-auth-service.js.tsx +153 -153
- package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.jsx +29 -29
- package/bundle/typescript/src/templates/react/kit/esri/map/basic-map.js.tsx +32 -32
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.css +63 -63
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.jsx +153 -153
- package/bundle/typescript/src/templates/react/kit/frames/frames-demo.tsx +164 -164
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.css +105 -105
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.jsx +158 -158
- package/bundle/typescript/src/templates/react/kit/frames/workspace-manager.tsx +166 -166
- package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.jsx +34 -34
- package/bundle/typescript/src/templates/react/kit/mui/auth/forgot-password/basic-forgot-password-page.js.tsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.jsx +53 -53
- package/bundle/typescript/src/templates/react/kit/mui/auth/login/basic-login-page.js.tsx +53 -53
- package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.jsx +25 -25
- package/bundle/typescript/src/templates/react/kit/mui/auth/logout/basic-logout-page.js.tsx +25 -25
- package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.jsx +41 -41
- package/bundle/typescript/src/templates/react/kit/mui/auth/password-reset/basic-password-reset-page.js.tsx +34 -34
- package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.jsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth/register/basic-register-page.js.tsx +33 -33
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.jsx +71 -71
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth-callback.js.tsx +71 -71
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.jsx +123 -123
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-account-settings.js.tsx +123 -123
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.jsx +56 -56
- package/bundle/typescript/src/templates/react/kit/mui/auth0/auth0-login-button.js.tsx +74 -74
- package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.jsx +43 -43
- package/bundle/typescript/src/templates/react/kit/mui/frame/app-bars/basic-app-bar.js.tsx +43 -43
- package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.jsx +121 -121
- package/bundle/typescript/src/templates/react/kit/mui/frame/drawers/basic-drawer.js.tsx +117 -117
- package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.jsx +41 -41
- package/bundle/typescript/src/templates/react/kit/mui/frame/footers/basic-sticky-footer.js.tsx +41 -41
- package/bundle/typescript/src/templates/react/route/route.js +8 -8
- package/bundle/typescript/src/templates/react/route/route.js.jsx +5 -5
- package/bundle/typescript/src/templates/react/route/route.js.ts +8 -8
- package/bundle/typescript/src/templates/react/route/route.js.tsx +5 -5
- package/bundle/typescript/src/templates/react/test/test.js +1 -1
- package/bundle/typescript/src/templates/react/test/test.js.jsx +40 -40
- package/bundle/typescript/src/templates/react/test/test.js.ts +1 -1
- package/bundle/typescript/src/templates/react/test/test.js.tsx +40 -40
- package/bundle/typescript/src/templates/service/docker/Dockerfile +54 -54
- package/bundle/typescript/src/templates/service/eslint/babel.config.js +16 -16
- package/bundle/typescript/src/templates/service/eslint/config.eslint.js +69 -69
- package/bundle/typescript/src/templates/service/i18n/i18n.js +33 -33
- package/bundle/typescript/src/templates/service/i18n/i18n.js.ts +33 -33
- package/bundle/typescript/src/templates/service/i18n/locales.js +3 -3
- package/bundle/typescript/src/templates/service/i18n/locales.js.ts +3 -3
- package/bundle/typescript/src/templates/service/openssl/openssl.conf +22 -22
- package/bundle/typescript/src/templates/service/test/jest/jest.config.js +24 -24
- package/bundle/typescript/src/templates/service/test/jest/jest.setup.js +7 -7
- package/bundle/typescript/src/tools/mpi/sdk-runtime.d.ts +1 -0
- package/bundle/typescript/src/tools/mpi/sdk-runtime.js +29 -0
- package/bundle/typescript/src/tools/mpi/sdk-runtime.js.map +1 -1
- package/package.json +120 -120
|
@@ -132,12 +132,12 @@ export class SceneSynthesizer {
|
|
|
132
132
|
// Shared context handed to every ensureAI*() call below, so room
|
|
133
133
|
// descriptions, NPC appearances, and puzzle riddles all stay
|
|
134
134
|
// consistent with the same scene tone.
|
|
135
|
-
const sceneContext = `
|
|
136
|
-
Scene: ${json.name}
|
|
137
|
-
Story: ${json.story}
|
|
138
|
-
Currency: ${json.currency.type}
|
|
139
|
-
Residence Tiers: ${json.residenceTiers.join(', ')}
|
|
140
|
-
Key Locations: ${json.rooms.map(r => r.name).join(', ')}
|
|
135
|
+
const sceneContext = `
|
|
136
|
+
Scene: ${json.name}
|
|
137
|
+
Story: ${json.story}
|
|
138
|
+
Currency: ${json.currency.type}
|
|
139
|
+
Residence Tiers: ${json.residenceTiers.join(', ')}
|
|
140
|
+
Key Locations: ${json.rooms.map(r => r.name).join(', ')}
|
|
141
141
|
`.trim();
|
|
142
142
|
// Step 2: Create and Register Rooms using RoomFactory
|
|
143
143
|
logger.write(`Creating Rooms`);
|
|
@@ -2174,7 +2174,7 @@ export default class Game {
|
|
|
2174
2174
|
if (client.dead) {
|
|
2175
2175
|
this.contacts.delete(client.name);
|
|
2176
2176
|
Logger.getInstance().write(`Client reputation settled: ${client.name} (dead -- no contact).`);
|
|
2177
|
-
return `
|
|
2177
|
+
return `
|
|
2178
2178
|
${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and their friends ask questions.`;
|
|
2179
2179
|
}
|
|
2180
2180
|
const existing = this.contacts.get(client.name);
|
|
@@ -252,13 +252,13 @@ export function credentialHonestyNote(passesHeld) {
|
|
|
252
252
|
const known = passesHeld > 0
|
|
253
253
|
? `the ${passesHeld === 1 ? 'pass' : `${passesHeld} passes`} for the barrier${passesHeld === 1 ? '' : 's'} at your own post, named above, and NO others`
|
|
254
254
|
: `NO code, pass, or combination to anything -- you hold none`;
|
|
255
|
-
return `
|
|
256
|
-
CREDENTIALS YOU DO NOT HOLD: you know ${known}. You cannot deduce, guess, or
|
|
257
|
-
reason your way to a credential you were never given, and you must NEVER invent one --
|
|
258
|
-
not as a guess, not as a "try this", not as a number you half-remember. A code you make
|
|
259
|
-
up is a code the lock refuses, and the runner who trusts it burns their whole approach on
|
|
260
|
-
it. Asked for a pass you do not hold, say so plainly and point them at where such things
|
|
261
|
-
actually live: written down somewhere in the world by whoever has to remember it, or in
|
|
255
|
+
return `
|
|
256
|
+
CREDENTIALS YOU DO NOT HOLD: you know ${known}. You cannot deduce, guess, or
|
|
257
|
+
reason your way to a credential you were never given, and you must NEVER invent one --
|
|
258
|
+
not as a guess, not as a "try this", not as a number you half-remember. A code you make
|
|
259
|
+
up is a code the lock refuses, and the runner who trusts it burns their whole approach on
|
|
260
|
+
it. Asked for a pass you do not hold, say so plainly and point them at where such things
|
|
261
|
+
actually live: written down somewhere in the world by whoever has to remember it, or in
|
|
262
262
|
the hands of whoever works that door.`;
|
|
263
263
|
}
|
|
264
264
|
/**
|
|
@@ -289,14 +289,14 @@ the hands of whoever works that door.`;
|
|
|
289
289
|
*/
|
|
290
290
|
export function localKnowledgeNote(roomName) {
|
|
291
291
|
const here = roomName ? `"${roomName}"` : 'the room you are standing in';
|
|
292
|
-
return `
|
|
293
|
-
WHAT YOU KNOW ENDS AT THIS ROOM: you know ${here} -- what stands here, what you can see
|
|
294
|
-
here, what you carry, and where its own exits lead. Beyond that you know only what you
|
|
295
|
-
have actually been told above. You do NOT know where things are kept in rooms you are not
|
|
296
|
-
in, you have NOT been through the other doors in this world, and you do not know what they
|
|
297
|
-
need to open. If someone asks and you were not told, say you don't know and say where you
|
|
298
|
-
WOULD look -- never name a room to be helpful. A confident wrong room is worse than a
|
|
299
|
-
shrug: they will walk there, search it, come back empty, and stop believing the true
|
|
292
|
+
return `
|
|
293
|
+
WHAT YOU KNOW ENDS AT THIS ROOM: you know ${here} -- what stands here, what you can see
|
|
294
|
+
here, what you carry, and where its own exits lead. Beyond that you know only what you
|
|
295
|
+
have actually been told above. You do NOT know where things are kept in rooms you are not
|
|
296
|
+
in, you have NOT been through the other doors in this world, and you do not know what they
|
|
297
|
+
need to open. If someone asks and you were not told, say you don't know and say where you
|
|
298
|
+
WOULD look -- never name a room to be helpful. A confident wrong room is worse than a
|
|
299
|
+
shrug: they will walk there, search it, come back empty, and stop believing the true
|
|
300
300
|
things you tell them afterwards.`;
|
|
301
301
|
}
|
|
302
302
|
/**
|
|
@@ -788,78 +788,78 @@ export class NPC extends Player {
|
|
|
788
788
|
this._dialogue = npcConfig.dialog;
|
|
789
789
|
this._description = npcConfig.description;
|
|
790
790
|
this.commandRegistry = commandRegistry;
|
|
791
|
-
this._commandHelp = `
|
|
792
|
-
Available in-game commands (use with [COMMAND] prefix):
|
|
793
|
-
|
|
794
|
-
- go <direction> — move in a direction like north, south, east, west
|
|
795
|
-
- move to <spot> — cross THIS room to one of its named places (bar, door, booths...),
|
|
796
|
-
when the room has them. You must share a place with someone to talk-to or trade
|
|
797
|
-
with them; speech from another place reaches them only as a shout everyone hears.
|
|
798
|
-
"move away" steps to the OPEN FLOOR -- the neutral ground between the places; to
|
|
799
|
-
reach someone standing there, move to the open floor yourself. "move to <name>"
|
|
800
|
-
also works: it walks you to wherever that person is standing.
|
|
801
|
-
- grapple <name> — seize and RESTRAIN someone without hurting them; held, they cannot
|
|
802
|
-
move, flee, or fight until they break your grip. Your hands are full while you hold
|
|
803
|
-
them ("release" lets go). If YOU are ever held: "struggle" is the only way out.
|
|
804
|
-
- say <message> — speak a message
|
|
805
|
-
- take <item name> — pick up an item from the current room ("take all" sweeps everything here, but only AFTER you have searched this room)
|
|
806
|
-
- drop <item name> — drop an item
|
|
807
|
-
- use <item name> — use an item (a Medical item like a medkit heals your PHYSICAL damage;
|
|
808
|
-
a StimPatch item recovers your STUN but costs 1 physical as a crash -- both are consumed.
|
|
809
|
-
Use them if you're hurt and carrying one)
|
|
810
|
-
- rest — recover Stun by resting. Only works in a Residence room or a room with no one
|
|
811
|
-
else present; never rest mid-fight
|
|
812
|
-
- equip <item name> — equip an item (e.g., equip a weapon to use)
|
|
813
|
-
- equip all - equip all wearable items in inventory
|
|
814
|
-
- unequip <item name> — remove an equipped item
|
|
815
|
-
- unlock <door name> — unlock a door (if you have the key or solution)
|
|
816
|
-
- lock <door name> — lock a door
|
|
817
|
-
- use <panel name> <the code> — enter a code you actually know into a keypad or panel.
|
|
818
|
-
Only a PANEL takes a code; you cannot talk at a mechanical lock
|
|
819
|
-
- pick — attempt to pick the lock on the puzzle in this room without knowing the answer (50/50, a failure sets off an alarm)
|
|
820
|
-
- hack — attempt to hack the terminal/system in this room without knowing the answer (50/50, a failure trips a countermeasure)
|
|
821
|
-
- cast <spell> [at <target>] — cast a spell you know. Requires being Awakened
|
|
822
|
-
(innate talent -- you'll be told if you are) OR carrying that spell's formula
|
|
823
|
-
item or a grimoire (a Focus item boosts your pool either way). Spells:
|
|
824
|
-
"manabolt" (combat damage resisted by body, not armor), "heal [on <ally>]" (heal
|
|
825
|
-
physical wounds -- your own by default, or an ally's in your room; healing a
|
|
826
|
-
wounded ally is a strong support move), "armor [on <ally>]" (sustained protection
|
|
827
|
-
on yourself or an ally; its bearer gets +soak at -2 dice to all else; cast at them
|
|
828
|
-
again to release). EVERY cast costs drain -- stun damage to YOU the caster; fill
|
|
829
|
-
your stun track and you're out cold. Never cast if you're mundane with no magic gear.
|
|
830
|
-
- cast — bare "cast" attempts to magically bypass the ward/barrier in this room
|
|
831
|
-
without knowing the answer (requires the same talent or gear; failing burns the
|
|
832
|
-
route for good and the backlash hurts you badly)
|
|
833
|
-
- search — search the room for hidden things
|
|
834
|
-
- look — look around the current room
|
|
835
|
-
- look at <target> - looks at an item, player, or direction
|
|
836
|
-
- store <item name> — store an item (in bank, safe, etc.)
|
|
837
|
-
- give <item name> to <target> — give an item to someone
|
|
838
|
-
- talk-to <target> — initiate conversation with another character
|
|
839
|
-
- call <target> [message] — call someone remotely over a commlink (works even if they're not in your room; requires having a commlink equipped, and the target having one too)
|
|
840
|
-
- end-call — hang up your current commlink call
|
|
841
|
-
- silent — toggle your commlink broadcast. While running silent, you can't place
|
|
842
|
-
calls and nobody can call YOU. Toggle again to go loud.
|
|
843
|
-
- read <target> - Reads an item of Category "Book"
|
|
844
|
-
- attack <target> — attack someone in your room. Resolved as opposed dice-pool combat
|
|
845
|
-
(your weapon and armor matter); an initiative roll decides who strikes first each
|
|
846
|
-
exchange (fast fighters can even land an extra strike), the target strikes back, and
|
|
847
|
-
it usually takes several exchanges to bring someone down. Only start a fight your
|
|
848
|
-
character would actually risk dying in. If your target flees the room, a failed
|
|
849
|
-
attack tells you exactly where they went and which direction to "go" -- CHASE them
|
|
850
|
-
with that instead of attacking the empty room again.
|
|
851
|
-
- kill <target> - alias for attack: real combat, NOT an instant kill.
|
|
852
|
-
- subdue <target> — take someone down ALIVE: stun damage, bare-handed, slower than
|
|
853
|
-
shooting; they retaliate lethally. Use when you want them breathing.
|
|
854
|
-
- brandish — draw your holstered weapon WITHOUT attacking. Everyone in the room sees
|
|
855
|
-
it: a threat display, pure intimidation. (Attacking auto-draws, so you never need
|
|
856
|
-
this to fight -- it's for making a point.)
|
|
857
|
-
- holster — put your drawn weapon away, visibly. A stand-down gesture: use it to
|
|
858
|
-
de-escalate, accept a surrender, or show good faith in a negotiation.
|
|
859
|
-
- reload — refill your equipped firearm (consumes an Ammunition item from your pack).
|
|
860
|
-
Firearms run dry: if your attack reports "dry", reload or switch to melee.
|
|
861
|
-
Fleeing someone you just fought gives them one free parting shot at your back
|
|
862
|
-
(and fleeing enemies give YOU one).
|
|
791
|
+
this._commandHelp = `
|
|
792
|
+
Available in-game commands (use with [COMMAND] prefix):
|
|
793
|
+
|
|
794
|
+
- go <direction> — move in a direction like north, south, east, west
|
|
795
|
+
- move to <spot> — cross THIS room to one of its named places (bar, door, booths...),
|
|
796
|
+
when the room has them. You must share a place with someone to talk-to or trade
|
|
797
|
+
with them; speech from another place reaches them only as a shout everyone hears.
|
|
798
|
+
"move away" steps to the OPEN FLOOR -- the neutral ground between the places; to
|
|
799
|
+
reach someone standing there, move to the open floor yourself. "move to <name>"
|
|
800
|
+
also works: it walks you to wherever that person is standing.
|
|
801
|
+
- grapple <name> — seize and RESTRAIN someone without hurting them; held, they cannot
|
|
802
|
+
move, flee, or fight until they break your grip. Your hands are full while you hold
|
|
803
|
+
them ("release" lets go). If YOU are ever held: "struggle" is the only way out.
|
|
804
|
+
- say <message> — speak a message
|
|
805
|
+
- take <item name> — pick up an item from the current room ("take all" sweeps everything here, but only AFTER you have searched this room)
|
|
806
|
+
- drop <item name> — drop an item
|
|
807
|
+
- use <item name> — use an item (a Medical item like a medkit heals your PHYSICAL damage;
|
|
808
|
+
a StimPatch item recovers your STUN but costs 1 physical as a crash -- both are consumed.
|
|
809
|
+
Use them if you're hurt and carrying one)
|
|
810
|
+
- rest — recover Stun by resting. Only works in a Residence room or a room with no one
|
|
811
|
+
else present; never rest mid-fight
|
|
812
|
+
- equip <item name> — equip an item (e.g., equip a weapon to use)
|
|
813
|
+
- equip all - equip all wearable items in inventory
|
|
814
|
+
- unequip <item name> — remove an equipped item
|
|
815
|
+
- unlock <door name> — unlock a door (if you have the key or solution)
|
|
816
|
+
- lock <door name> — lock a door
|
|
817
|
+
- use <panel name> <the code> — enter a code you actually know into a keypad or panel.
|
|
818
|
+
Only a PANEL takes a code; you cannot talk at a mechanical lock
|
|
819
|
+
- pick — attempt to pick the lock on the puzzle in this room without knowing the answer (50/50, a failure sets off an alarm)
|
|
820
|
+
- hack — attempt to hack the terminal/system in this room without knowing the answer (50/50, a failure trips a countermeasure)
|
|
821
|
+
- cast <spell> [at <target>] — cast a spell you know. Requires being Awakened
|
|
822
|
+
(innate talent -- you'll be told if you are) OR carrying that spell's formula
|
|
823
|
+
item or a grimoire (a Focus item boosts your pool either way). Spells:
|
|
824
|
+
"manabolt" (combat damage resisted by body, not armor), "heal [on <ally>]" (heal
|
|
825
|
+
physical wounds -- your own by default, or an ally's in your room; healing a
|
|
826
|
+
wounded ally is a strong support move), "armor [on <ally>]" (sustained protection
|
|
827
|
+
on yourself or an ally; its bearer gets +soak at -2 dice to all else; cast at them
|
|
828
|
+
again to release). EVERY cast costs drain -- stun damage to YOU the caster; fill
|
|
829
|
+
your stun track and you're out cold. Never cast if you're mundane with no magic gear.
|
|
830
|
+
- cast — bare "cast" attempts to magically bypass the ward/barrier in this room
|
|
831
|
+
without knowing the answer (requires the same talent or gear; failing burns the
|
|
832
|
+
route for good and the backlash hurts you badly)
|
|
833
|
+
- search — search the room for hidden things
|
|
834
|
+
- look — look around the current room
|
|
835
|
+
- look at <target> - looks at an item, player, or direction
|
|
836
|
+
- store <item name> — store an item (in bank, safe, etc.)
|
|
837
|
+
- give <item name> to <target> — give an item to someone
|
|
838
|
+
- talk-to <target> — initiate conversation with another character
|
|
839
|
+
- call <target> [message] — call someone remotely over a commlink (works even if they're not in your room; requires having a commlink equipped, and the target having one too)
|
|
840
|
+
- end-call — hang up your current commlink call
|
|
841
|
+
- silent — toggle your commlink broadcast. While running silent, you can't place
|
|
842
|
+
calls and nobody can call YOU. Toggle again to go loud.
|
|
843
|
+
- read <target> - Reads an item of Category "Book"
|
|
844
|
+
- attack <target> — attack someone in your room. Resolved as opposed dice-pool combat
|
|
845
|
+
(your weapon and armor matter); an initiative roll decides who strikes first each
|
|
846
|
+
exchange (fast fighters can even land an extra strike), the target strikes back, and
|
|
847
|
+
it usually takes several exchanges to bring someone down. Only start a fight your
|
|
848
|
+
character would actually risk dying in. If your target flees the room, a failed
|
|
849
|
+
attack tells you exactly where they went and which direction to "go" -- CHASE them
|
|
850
|
+
with that instead of attacking the empty room again.
|
|
851
|
+
- kill <target> - alias for attack: real combat, NOT an instant kill.
|
|
852
|
+
- subdue <target> — take someone down ALIVE: stun damage, bare-handed, slower than
|
|
853
|
+
shooting; they retaliate lethally. Use when you want them breathing.
|
|
854
|
+
- brandish — draw your holstered weapon WITHOUT attacking. Everyone in the room sees
|
|
855
|
+
it: a threat display, pure intimidation. (Attacking auto-draws, so you never need
|
|
856
|
+
this to fight -- it's for making a point.)
|
|
857
|
+
- holster — put your drawn weapon away, visibly. A stand-down gesture: use it to
|
|
858
|
+
de-escalate, accept a surrender, or show good faith in a negotiation.
|
|
859
|
+
- reload — refill your equipped firearm (consumes an Ammunition item from your pack).
|
|
860
|
+
Firearms run dry: if your attack reports "dry", reload or switch to melee.
|
|
861
|
+
Fleeing someone you just fought gives them one free parting shot at your back
|
|
862
|
+
(and fleeing enemies give YOU one).
|
|
863
863
|
`.trim();
|
|
864
864
|
}
|
|
865
865
|
set scene(scene) {
|
|
@@ -885,16 +885,16 @@ Available in-game commands (use with [COMMAND] prefix):
|
|
|
885
885
|
return;
|
|
886
886
|
if (!AI.isConfigured())
|
|
887
887
|
return;
|
|
888
|
-
const prompt = `
|
|
889
|
-
You are a game narrator. Write a brief (2-3 sentence), visually evocative first-impression
|
|
890
|
-
description of a character's appearance and demeanor, in a gritty cyberpunk tone.
|
|
891
|
-
|
|
892
|
-
Scene context: ${sceneContext}
|
|
893
|
-
|
|
894
|
-
Character name: ${this.name}
|
|
895
|
-
|
|
896
|
-
Only describe what a stranger would immediately notice on first meeting them. Do not
|
|
897
|
-
reveal hidden motives, secret plans, backstory, or intentions. Respond with ONLY the
|
|
888
|
+
const prompt = `
|
|
889
|
+
You are a game narrator. Write a brief (2-3 sentence), visually evocative first-impression
|
|
890
|
+
description of a character's appearance and demeanor, in a gritty cyberpunk tone.
|
|
891
|
+
|
|
892
|
+
Scene context: ${sceneContext}
|
|
893
|
+
|
|
894
|
+
Character name: ${this.name}
|
|
895
|
+
|
|
896
|
+
Only describe what a stranger would immediately notice on first meeting them. Do not
|
|
897
|
+
reveal hidden motives, secret plans, backstory, or intentions. Respond with ONLY the
|
|
898
898
|
description text.`;
|
|
899
899
|
try {
|
|
900
900
|
const reply = await AI.ask(prompt);
|
|
@@ -1418,39 +1418,39 @@ description text.`;
|
|
|
1418
1418
|
+ deliveryTail
|
|
1419
1419
|
: '';
|
|
1420
1420
|
// Build the prompt context
|
|
1421
|
-
const context = `
|
|
1422
|
-
You are an NPC named ${this.name}.
|
|
1423
|
-
${this.buildPlaneSummary()}
|
|
1424
|
-
${objectiveSummary}
|
|
1425
|
-
${masterLine}
|
|
1426
|
-
${this.buildConditionSummary()}
|
|
1427
|
-
${reflectGeography}
|
|
1428
|
-
${exitsLine}
|
|
1429
|
-
${spotsLine}
|
|
1430
|
-
|
|
1431
|
-
You just performed the action: "${commandString}"
|
|
1432
|
-
With the result: "${result}"
|
|
1433
|
-
|
|
1434
|
-
Based on this, what is the most logical next in-game command (from the following list)?
|
|
1435
|
-
${this._commandHelp}
|
|
1436
|
-
- Only respond with: [COMMAND] <in-game command here>
|
|
1437
|
-
- Do not respond on behalf of another player or NPC
|
|
1438
|
-
- If there is nothing to do, respond with: wait
|
|
1439
|
-
- Only respond with one [COMMAND]
|
|
1440
|
-
- READ the result above and report honestly: if it says an action failed, was refused,
|
|
1441
|
-
or found nothing, then it FAILED -- never speak or act as if it succeeded (a beaten
|
|
1442
|
-
sentry once announced a door "open" after his unlock bounced; the runner walked into
|
|
1443
|
-
a locked hatch).
|
|
1444
|
-
- If you have already said your piece and are waiting on someone to answer, the logical next step is: wait
|
|
1445
|
-
${this._spokeThisStimulus ? '- You have ALREADY spoken since the last thing that happened. Do NOT say or talk-to again -- choose a non-speech action, or respond with: wait' : ''}
|
|
1446
|
-
${this._triedThisStimulus.length > 0 ? `- ALREADY TRIED since the last thing that happened -- do NOT repeat any of these, and do not retry a failed one with different wording:
|
|
1447
|
-
${this._triedThisStimulus.map(a => ` "${a.cmd}"${a.failed ? ' (FAILED)' : ''}`).join('\n')}
|
|
1448
|
-
If everything sensible has been tried, the answer is: wait` : ''}
|
|
1449
|
-
|
|
1450
|
-
This is what has already happened:
|
|
1451
|
-
${historySummary}
|
|
1452
|
-
|
|
1453
|
-
${worldEventsSummary}
|
|
1421
|
+
const context = `
|
|
1422
|
+
You are an NPC named ${this.name}.
|
|
1423
|
+
${this.buildPlaneSummary()}
|
|
1424
|
+
${objectiveSummary}
|
|
1425
|
+
${masterLine}
|
|
1426
|
+
${this.buildConditionSummary()}
|
|
1427
|
+
${reflectGeography}
|
|
1428
|
+
${exitsLine}
|
|
1429
|
+
${spotsLine}
|
|
1430
|
+
|
|
1431
|
+
You just performed the action: "${commandString}"
|
|
1432
|
+
With the result: "${result}"
|
|
1433
|
+
|
|
1434
|
+
Based on this, what is the most logical next in-game command (from the following list)?
|
|
1435
|
+
${this._commandHelp}
|
|
1436
|
+
- Only respond with: [COMMAND] <in-game command here>
|
|
1437
|
+
- Do not respond on behalf of another player or NPC
|
|
1438
|
+
- If there is nothing to do, respond with: wait
|
|
1439
|
+
- Only respond with one [COMMAND]
|
|
1440
|
+
- READ the result above and report honestly: if it says an action failed, was refused,
|
|
1441
|
+
or found nothing, then it FAILED -- never speak or act as if it succeeded (a beaten
|
|
1442
|
+
sentry once announced a door "open" after his unlock bounced; the runner walked into
|
|
1443
|
+
a locked hatch).
|
|
1444
|
+
- If you have already said your piece and are waiting on someone to answer, the logical next step is: wait
|
|
1445
|
+
${this._spokeThisStimulus ? '- You have ALREADY spoken since the last thing that happened. Do NOT say or talk-to again -- choose a non-speech action, or respond with: wait' : ''}
|
|
1446
|
+
${this._triedThisStimulus.length > 0 ? `- ALREADY TRIED since the last thing that happened -- do NOT repeat any of these, and do not retry a failed one with different wording:
|
|
1447
|
+
${this._triedThisStimulus.map(a => ` "${a.cmd}"${a.failed ? ' (FAILED)' : ''}`).join('\n')}
|
|
1448
|
+
If everything sensible has been tried, the answer is: wait` : ''}
|
|
1449
|
+
|
|
1450
|
+
This is what has already happened:
|
|
1451
|
+
${historySummary}
|
|
1452
|
+
|
|
1453
|
+
${worldEventsSummary}
|
|
1454
1454
|
`;
|
|
1455
1455
|
// Send to the configured AI provider
|
|
1456
1456
|
let reply;
|
|
@@ -1755,10 +1755,10 @@ ${worldEventsSummary}
|
|
|
1755
1755
|
// the engine gave her no way to bring.
|
|
1756
1756
|
const wares = visibleItems.filter(i => i && i.owner === this.name);
|
|
1757
1757
|
const waresDesc = wares.length > 0
|
|
1758
|
-
? `YOUR SHOP STOCK, here on your own shelf/counter (yours to serve or sell):
|
|
1759
|
-
${wares.map(i => `- "${i.name}" (${priceOf(i)} nuyen)`).join('\n')}
|
|
1760
|
-
When a customer orders or agrees to buy, SERVE it in the same response: [COMMAND] give <item name> to <customer name>
|
|
1761
|
-
Serve EXACTLY the stock item whose name best matches what the customer asked for (they say "noodles", you have a "Noodle Bowl" -- that's the one). Substitute a different dish ONLY if the match is out of stock, and say so out loud when you do. The stock list above is the truth about what you have -- never claim a listed item is gone.
|
|
1758
|
+
? `YOUR SHOP STOCK, here on your own shelf/counter (yours to serve or sell):
|
|
1759
|
+
${wares.map(i => `- "${i.name}" (${priceOf(i)} nuyen)`).join('\n')}
|
|
1760
|
+
When a customer orders or agrees to buy, SERVE it in the same response: [COMMAND] give <item name> to <customer name>
|
|
1761
|
+
Serve EXACTLY the stock item whose name best matches what the customer asked for (they say "noodles", you have a "Noodle Bowl" -- that's the one). Substitute a different dish ONLY if the match is out of stock, and say so out loud when you do. The stock list above is the truth about what you have -- never claim a listed item is gone.
|
|
1762
1762
|
The till settles automatically on handoff (they're charged street price, or what they can cover). Quote the price when they order. Never serve someone who hasn't asked.`
|
|
1763
1763
|
: '';
|
|
1764
1764
|
// SWAG OVER THE LINE (source.ts; the shop-stock lesson's remote
|
|
@@ -1771,8 +1771,8 @@ The till settles automatically on handoff (they're charged street price, or what
|
|
|
1771
1771
|
const domains = contactEntry?.role && !this.allyOf ? ROLE_DOMAINS[contactEntry.role] : undefined;
|
|
1772
1772
|
const trade = domains ? catalogGear().filter(i => domains.includes(i.category)) : [];
|
|
1773
1773
|
const swagNote = trade.length > 0
|
|
1774
|
-
? `YOUR TRADE as the district's ${contactEntry.role} -- orderable through your network (NOT shelf stock in this room):
|
|
1775
|
-
${trade.map(i => `- "${i.name}" (${i.price} nuyen)`).join('\n')}
|
|
1774
|
+
? `YOUR TRADE as the district's ${contactEntry.role} -- orderable through your network (NOT shelf stock in this room):
|
|
1775
|
+
${trade.map(i => `- "${i.name}" (${i.price} nuyen)`).join('\n')}
|
|
1776
1776
|
An ORDER is the only way these goods change hands -- never a dialogue sale, never a handshake over comms. When a customer wants one (in person or on a call), quote the LIST price and tell them in your own voice to put the order through -- the exact words they must say are: source <item name> from ${this.name}. The system then rolls your availability test, takes their cred up front (plus your sourcing cut), and delivers at their next homecoming. NEVER invent stock or prices beyond this list, and NEVER claim a sale is complete from conversation alone -- a sale without the order simply never happened. Special requests beyond the list exist, but the same order system rolls them.`
|
|
1777
1777
|
: '';
|
|
1778
1778
|
// THE ADAPTER, and it is the only thing here that knows about
|
|
@@ -1973,83 +1973,83 @@ An ORDER is the only way these goods change hands -- never a dialogue sale, neve
|
|
|
1973
1973
|
// somewhere in the world for the finding.
|
|
1974
1974
|
const gameRef = this._scene?.ownerGame;
|
|
1975
1975
|
const clientNote = gameRef?.currentClient?.name === this.name
|
|
1976
|
-
? `
|
|
1977
|
-
YOU ARE THE CLIENT on this job: you hired ${this._scene?.getPlayer?.()?.name ?? 'the runner'}'s team and you WANT THE JOB DONE.
|
|
1978
|
-
Everything you know that helps them -- locations, names, who guards what, what the job is
|
|
1979
|
-
worth -- you share FREELY the moment they ask. You never barter, extort, or withhold
|
|
1980
|
-
job-relevant information from your own runners: every obstacle they hit is YOUR money
|
|
1981
|
-
burning. What you do NOT have is the inside of the place: you are the money, not the
|
|
1982
|
-
staff, so codes, passphrases, and lock combinations are exactly the thing you were hiring
|
|
1983
|
-
THEM to solve -- say so plainly when they ask, and send them to find it rather than
|
|
1984
|
-
handing them a number you'd be making up. If you genuinely don't know a thing, say so plainly and point at who might. You
|
|
1985
|
-
front half the pay at the meet and settle the rest on delivery (the engine moves the money
|
|
1976
|
+
? `
|
|
1977
|
+
YOU ARE THE CLIENT on this job: you hired ${this._scene?.getPlayer?.()?.name ?? 'the runner'}'s team and you WANT THE JOB DONE.
|
|
1978
|
+
Everything you know that helps them -- locations, names, who guards what, what the job is
|
|
1979
|
+
worth -- you share FREELY the moment they ask. You never barter, extort, or withhold
|
|
1980
|
+
job-relevant information from your own runners: every obstacle they hit is YOUR money
|
|
1981
|
+
burning. What you do NOT have is the inside of the place: you are the money, not the
|
|
1982
|
+
staff, so codes, passphrases, and lock combinations are exactly the thing you were hiring
|
|
1983
|
+
THEM to solve -- say so plainly when they ask, and send them to find it rather than
|
|
1984
|
+
handing them a number you'd be making up. If you genuinely don't know a thing, say so plainly and point at who might. You
|
|
1985
|
+
front half the pay at the meet and settle the rest on delivery (the engine moves the money
|
|
1986
1986
|
-- never haggle it yourself unless they invoke a negotiation).`
|
|
1987
1987
|
: '';
|
|
1988
1988
|
// ---------- prompt ----------
|
|
1989
|
-
const prompt = `
|
|
1990
|
-
You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
|
|
1991
|
-
|
|
1992
|
-
- Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
|
|
1993
|
-
- Any exposition should be in 3rd person. Keep exposition to bare minimum.
|
|
1994
|
-
- Do NOT repeat, rephrase, or re-ask anything you have already said (check the recent-activity history below). If you already asked a question and it hasn't been answered, wait for the answer -- do not ask it again in different words.
|
|
1995
|
-
- Silence is a valid response: if this event doesn't genuinely need words from you, do not include a say command at all.
|
|
1996
|
-
- Keep spoken lines SHORT -- one or two sentences. People don't monologue at strangers.
|
|
1997
|
-
- When speaking, use the "say" command. Syntax is "[COMMAND] say <message>"
|
|
1998
|
-
- At most ONE say line per response. Never follow a say with talk-to to the same person -- they already heard you; talk-to is only for a genuinely private aside.
|
|
1999
|
-
- If you want to perform an action, include a separate line that starts with:
|
|
2000
|
-
[COMMAND] <your in-game command here>
|
|
2001
|
-
- Attempt to use [COMMAND] when appropriate for interacting with the environment. (e.g., "take <item>" when picking up)
|
|
2002
|
-
- You should only provide one [COMMAND] at a time (one say line plus one action line is fine).
|
|
2003
|
-
- NEVER promise a physical action in words only. If you say you'll hand something over,
|
|
2004
|
-
serve food, fetch an item, or take something, the SAME response must include the matching
|
|
2005
|
-
[COMMAND] line (e.g. "give <item> to <name>"). A promise without the command simply never
|
|
2006
|
-
happens in the world -- the other person will be left waiting forever.
|
|
2007
|
-
- Do not respond on behalf of another player or NPC
|
|
2008
|
-
${eph ? '' : `- If this event genuinely changes what you're trying to accomplish, include a separate line:
|
|
2009
|
-
[OBJECTIVE] <your new one-sentence objective>
|
|
2010
|
-
Only include this line if your objective has actually changed. Do not include it otherwise.
|
|
2011
|
-
|
|
2012
|
-
Your objective is to drive the story line.`}
|
|
2013
|
-
${eph ? '' : story}
|
|
2014
|
-
${eph ? '' : firstContactNudge}
|
|
2015
|
-
|
|
2016
|
-
${eph ? '' : this._commandHelp}
|
|
2017
|
-
|
|
2018
|
-
${npcDescription}
|
|
2019
|
-
${conditionSummary}
|
|
2020
|
-
${magicSummary}${resonanceSummary}
|
|
2021
|
-
${eph ? '' : objectiveSummary}
|
|
2022
|
-
${dialogueSummary}
|
|
2023
|
-
${eph ? '' : payoutSummary}
|
|
2024
|
-
|
|
2025
|
-
${roomDesc}${spotBlock}${combatSpatialBlock}
|
|
2026
|
-
${formattedExitsStr}
|
|
2027
|
-
${roomInventoryDesc}
|
|
2028
|
-
${eph ? '' : waresDesc}
|
|
2029
|
-
${eph ? '' : swagNote}${eph ? '' : clientNote}${hostileBlock}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}${ephDenials}
|
|
2030
|
-
${eph ? '' : familiarity}
|
|
2031
|
-
${droneNote}
|
|
2032
|
-
${eph ? '' : companionNote}${tableNote}
|
|
2033
|
-
${geographySummary}
|
|
2034
|
-
${eph ? '' : castSummary}
|
|
2035
|
-
|
|
2036
|
-
${eph ? '' : lifestyleSummary}
|
|
2037
|
-
${npcInventoryDesc}
|
|
2038
|
-
|
|
2039
|
-
${eph ? '' : ownedRoomsDesc}
|
|
2040
|
-
${eph ? '' : ownedItemsDesc}
|
|
2041
|
-
|
|
2042
|
-
${eph ? '' : historySummary}
|
|
2043
|
-
|
|
2044
|
-
${worldEventsSummary}
|
|
2045
|
-
|
|
1989
|
+
const prompt = `
|
|
1990
|
+
You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
|
|
1991
|
+
|
|
1992
|
+
- Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
|
|
1993
|
+
- Any exposition should be in 3rd person. Keep exposition to bare minimum.
|
|
1994
|
+
- Do NOT repeat, rephrase, or re-ask anything you have already said (check the recent-activity history below). If you already asked a question and it hasn't been answered, wait for the answer -- do not ask it again in different words.
|
|
1995
|
+
- Silence is a valid response: if this event doesn't genuinely need words from you, do not include a say command at all.
|
|
1996
|
+
- Keep spoken lines SHORT -- one or two sentences. People don't monologue at strangers.
|
|
1997
|
+
- When speaking, use the "say" command. Syntax is "[COMMAND] say <message>"
|
|
1998
|
+
- At most ONE say line per response. Never follow a say with talk-to to the same person -- they already heard you; talk-to is only for a genuinely private aside.
|
|
1999
|
+
- If you want to perform an action, include a separate line that starts with:
|
|
2000
|
+
[COMMAND] <your in-game command here>
|
|
2001
|
+
- Attempt to use [COMMAND] when appropriate for interacting with the environment. (e.g., "take <item>" when picking up)
|
|
2002
|
+
- You should only provide one [COMMAND] at a time (one say line plus one action line is fine).
|
|
2003
|
+
- NEVER promise a physical action in words only. If you say you'll hand something over,
|
|
2004
|
+
serve food, fetch an item, or take something, the SAME response must include the matching
|
|
2005
|
+
[COMMAND] line (e.g. "give <item> to <name>"). A promise without the command simply never
|
|
2006
|
+
happens in the world -- the other person will be left waiting forever.
|
|
2007
|
+
- Do not respond on behalf of another player or NPC
|
|
2008
|
+
${eph ? '' : `- If this event genuinely changes what you're trying to accomplish, include a separate line:
|
|
2009
|
+
[OBJECTIVE] <your new one-sentence objective>
|
|
2010
|
+
Only include this line if your objective has actually changed. Do not include it otherwise.
|
|
2011
|
+
|
|
2012
|
+
Your objective is to drive the story line.`}
|
|
2013
|
+
${eph ? '' : story}
|
|
2014
|
+
${eph ? '' : firstContactNudge}
|
|
2015
|
+
|
|
2016
|
+
${eph ? '' : this._commandHelp}
|
|
2017
|
+
|
|
2018
|
+
${npcDescription}
|
|
2019
|
+
${conditionSummary}
|
|
2020
|
+
${magicSummary}${resonanceSummary}
|
|
2021
|
+
${eph ? '' : objectiveSummary}
|
|
2022
|
+
${dialogueSummary}
|
|
2023
|
+
${eph ? '' : payoutSummary}
|
|
2024
|
+
|
|
2025
|
+
${roomDesc}${spotBlock}${combatSpatialBlock}
|
|
2026
|
+
${formattedExitsStr}
|
|
2027
|
+
${roomInventoryDesc}
|
|
2028
|
+
${eph ? '' : waresDesc}
|
|
2029
|
+
${eph ? '' : swagNote}${eph ? '' : clientNote}${hostileBlock}${picketBlock}${barrierBlock}${credentialHonesty}${localKnowledge}${ephDenials}
|
|
2030
|
+
${eph ? '' : familiarity}
|
|
2031
|
+
${droneNote}
|
|
2032
|
+
${eph ? '' : companionNote}${tableNote}
|
|
2033
|
+
${geographySummary}
|
|
2034
|
+
${eph ? '' : castSummary}
|
|
2035
|
+
|
|
2036
|
+
${eph ? '' : lifestyleSummary}
|
|
2037
|
+
${npcInventoryDesc}
|
|
2038
|
+
|
|
2039
|
+
${eph ? '' : ownedRoomsDesc}
|
|
2040
|
+
${eph ? '' : ownedItemsDesc}
|
|
2041
|
+
|
|
2042
|
+
${eph ? '' : historySummary}
|
|
2043
|
+
|
|
2044
|
+
${worldEventsSummary}
|
|
2045
|
+
|
|
2046
2046
|
${actor.gender
|
|
2047
2047
|
? `${actor.name} is ${actor.gender === 'male' ? 'a man -- he/him' : 'a woman -- she/her'}. Use those pronouns for ${actor.name}; never guess others.`
|
|
2048
2048
|
: actor === scenePlayer
|
|
2049
2049
|
? `${actor.name}'s gender is unstated -- refer to ${actor.name} with they/them, never guess.`
|
|
2050
|
-
: ''}
|
|
2051
|
-
|
|
2052
|
-
${actor.name}: ${message}
|
|
2050
|
+
: ''}
|
|
2051
|
+
|
|
2052
|
+
${actor.name}: ${message}
|
|
2053
2053
|
`.trim();
|
|
2054
2054
|
// ---------- AI call + parsing (defensive) ----------
|
|
2055
2055
|
try {
|
|
@@ -582,15 +582,15 @@ export class Room extends AbstractRoom {
|
|
|
582
582
|
}
|
|
583
583
|
async ensureAIDescription(sceneContext) {
|
|
584
584
|
if (!this.hasAIDescription && AI.isConfigured()) {
|
|
585
|
-
const prompt = `
|
|
586
|
-
You are a game narrator. Based on the following context, generate a rich, immersive description of the current room that enhances but does not repeat the existing description.
|
|
587
|
-
|
|
588
|
-
Scene context: ${sceneContext}
|
|
589
|
-
|
|
590
|
-
Room name: ${this.name}
|
|
591
|
-
Room description: ${this.description}
|
|
592
|
-
|
|
593
|
-
Include any mood, atmosphere, or inferred meaning from the surroundings.
|
|
585
|
+
const prompt = `
|
|
586
|
+
You are a game narrator. Based on the following context, generate a rich, immersive description of the current room that enhances but does not repeat the existing description.
|
|
587
|
+
|
|
588
|
+
Scene context: ${sceneContext}
|
|
589
|
+
|
|
590
|
+
Room name: ${this.name}
|
|
591
|
+
Room description: ${this.description}
|
|
592
|
+
|
|
593
|
+
Include any mood, atmosphere, or inferred meaning from the surroundings.
|
|
594
594
|
Keep it concise and dramatic.`;
|
|
595
595
|
try {
|
|
596
596
|
const reply = await AI.ask(prompt);
|