@maka/maka-cli 5.3.17 → 5.5.0
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/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.d.ts +62 -0
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +196 -0
- package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +65 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js +122 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/assense.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js +243 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/attack.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +39 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.d.ts +21 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js +82 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/brandish.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +28 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +101 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +219 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +397 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.d.ts +11 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js +8 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.js +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/command.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js +72 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drone.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/edge.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js +31 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/edge.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +59 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +50 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/give.js +7 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/give.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +147 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +25 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +199 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +75 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +43 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.d.ts +17 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js +64 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/jack.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.d.ts +10 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js +11 -33
- package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +47 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +46 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +55 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.d.ts +18 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +100 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +33 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.d.ts +19 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +54 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/read.js +6 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/read.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js +52 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reboot.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.d.ts +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +40 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +59 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +31 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +71 -7
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +58 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.d.ts +13 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +50 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js +35 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/sneak.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +32 -11
- package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.d.ts +14 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js +86 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/spells.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.d.ts +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/stance.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.d.ts +21 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js +43 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/subdue.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.d.ts +20 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js +45 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/surrender.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +138 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js +6 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +102 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js +7 -2
- package/bundle/typescript/src/commands/game/sideQuest/factories/npc-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js +2 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +175 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +673 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.d.ts +8 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +139 -21
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +174 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +647 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +138 -9
- package/bundle/typescript/src/commands/game/sideQuest/game.js +757 -197
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js +101 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/hack-minigame.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js +95 -0
- package/bundle/typescript/src/commands/game/sideQuest/minigames/lockpick-minigame.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/door.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/door.js +15 -2
- package/bundle/typescript/src/commands/game/sideQuest/models/door.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +10 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +54 -4
- package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +41 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js +106 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +27 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +312 -50
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +278 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js +661 -9
- package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +75 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +199 -6
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +53 -18
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +208 -3
- package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +319 -70
- package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +661 -227
- package/bundle/typescript/src/commands/game/sideQuest/types/player-equipment.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/exit-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/item-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/npc-seed.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +15 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +4 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +8 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.d.ts +15 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/seed/win-condition-seed.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js +5 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.d.ts +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/ui.d.ts +3 -0
- package/bundle/typescript/src/commands/game/sideQuest/ui.js +95 -6
- package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.d.ts +60 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js +138 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/auto-fight.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +145 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +354 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +2 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +34 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +36 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +92 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +77 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +265 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.d.ts +16 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js +36 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/pursuit.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +78 -7
- package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/commands/set/global.sub.cmd.js +59 -5
- package/bundle/typescript/src/commands/set/global.sub.cmd.js.map +1 -1
- package/bundle/typescript/src/tools/ai/ai.class.d.ts +42 -0
- package/bundle/typescript/src/tools/ai/ai.class.js +117 -0
- package/bundle/typescript/src/tools/ai/ai.class.js.map +1 -0
- package/bundle/typescript/src/tools/fsi/fsi.interfaces.d.ts +1 -0
- package/bundle/typescript/src/tools/fsi/fsi.interfaces.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.class.d.ts +3 -2
- package/bundle/typescript/src/tools/https/https.class.js +51 -2
- package/bundle/typescript/src/tools/https/https.class.js.map +1 -1
- package/bundle/typescript/src/tools/https/https.interface.d.ts +10 -0
- package/package.json +1 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Command } from './command.js';
|
|
2
|
+
import { Category } from '../types/shared/item-enum.js';
|
|
3
|
+
import { parseArgsWithQuotes } from './talk.js';
|
|
4
|
+
import { CALL_ICON, CALL_COLOR } from '../utilities/comm-style.js';
|
|
5
|
+
import { FIXER_NAME } from '../factories/scene-seed-generator.js';
|
|
6
|
+
import { fuzzyPickName } from '../utilities/fuzzy-match.js';
|
|
7
|
+
export class CallCommand extends Command {
|
|
8
|
+
static verb = 'call';
|
|
9
|
+
static description = 'Call someone remotely over a commlink (no need to be in the same room; commlink must be equipped).';
|
|
10
|
+
async execute(args) {
|
|
11
|
+
if (!args || args.length === 0) {
|
|
12
|
+
return 'Usage: call <name> [message]';
|
|
13
|
+
}
|
|
14
|
+
const rawWords = parseArgsWithQuotes(args.join(' '));
|
|
15
|
+
if (!this.hasEquippedCommlink(this.actor)) {
|
|
16
|
+
return `You need to equip a commlink before you can call anyone.`;
|
|
17
|
+
}
|
|
18
|
+
// Running silent kills the broadcast both ways (see silent.ts).
|
|
19
|
+
if (this.actor.runningSilent) {
|
|
20
|
+
return `You're running silent -- your link isn't broadcasting. Go loud ("silent") before calling anyone.`;
|
|
21
|
+
}
|
|
22
|
+
// Hacked dark is a different kind of quiet (see hack.ts PAN attacks).
|
|
23
|
+
if (this.actor.arOffline) {
|
|
24
|
+
return `Your AR is CUT -- someone cracked your PAN and your link is dead air. "reboot" first.`;
|
|
25
|
+
}
|
|
26
|
+
// Talking on comms is not a quiet activity (see sneak.ts).
|
|
27
|
+
this.actor.sneaking = false;
|
|
28
|
+
// "call taxi" / "call cab": transport is a phone call away, like
|
|
29
|
+
// everything else in this world -- no system travel verbs. With a job
|
|
30
|
+
// pending, the cab comes to WHEREVER you are and takes you to the
|
|
31
|
+
// run; with a WRAPPED job it takes you home to the hub. Checked
|
|
32
|
+
// before NPC resolution ("taxi" is a service, not a person).
|
|
33
|
+
const spoken = rawWords.map(w => w.toLowerCase()).filter(w => w !== 'a' && w !== 'the');
|
|
34
|
+
if (this.game?.hasHub && (spoken[0] === 'taxi' || spoken[0] === 'cab')) {
|
|
35
|
+
if (this.actor.plane !== 'meat') {
|
|
36
|
+
return this.actor.plane === 'matrix'
|
|
37
|
+
? `Cabs take bodies, not personas -- "jack out" first.`
|
|
38
|
+
: `Cabs take bodies, not ghosts -- "return" first.`;
|
|
39
|
+
}
|
|
40
|
+
if (this.actor.inExchange) {
|
|
41
|
+
return `Mid-fight is no time to hail a cab.`;
|
|
42
|
+
}
|
|
43
|
+
if (this.scene.isHub && this.game.pendingRun) {
|
|
44
|
+
this.actor.performAction('calls a taxi', 'and steps to the curb');
|
|
45
|
+
const ride = this.game.pendingRide;
|
|
46
|
+
const trip = await this.game.launchPendingRun();
|
|
47
|
+
return `${ride?.arrive ?? 'A cab pulls up.'}\n${ride?.board ?? 'You climb in.'}\n${trip}`;
|
|
48
|
+
}
|
|
49
|
+
if (!this.scene.isHub && this.scene.isCompleted()) {
|
|
50
|
+
this.actor.performAction('calls a taxi', 'for the ride home');
|
|
51
|
+
const home = await this.game.continueToNextScene();
|
|
52
|
+
return `A cab noses out of the dark and finds you like it always knew where you'd be.\n${home}`;
|
|
53
|
+
}
|
|
54
|
+
if (this.scene.isHub) {
|
|
55
|
+
return `The dispatcher's bored voice: "No fare on the books for you, chummer." (No job arranged -- "call ${FIXER_NAME}" first.)`;
|
|
56
|
+
}
|
|
57
|
+
return `No cab rolls into the middle of a live job. Finish it -- or walk.`;
|
|
58
|
+
}
|
|
59
|
+
const { target, remainingWords } = this.resolveTargetAndMessage(rawWords);
|
|
60
|
+
if (!target) {
|
|
61
|
+
return `You don't know anyone by the name "${rawWords[0]}" to call.`;
|
|
62
|
+
}
|
|
63
|
+
if (target === this.actor) {
|
|
64
|
+
return "You can't call yourself.";
|
|
65
|
+
}
|
|
66
|
+
if (!this.hasCommlink(target)) {
|
|
67
|
+
return `You don't get through -- ${target.name} doesn't seem to have a commlink.`;
|
|
68
|
+
}
|
|
69
|
+
if (target.runningSilent) {
|
|
70
|
+
return `You can't raise ${target.name} -- their link isn't broadcasting. They're running silent.`;
|
|
71
|
+
}
|
|
72
|
+
// HUB flow: calling the fixer from home isn't a conversation -- it's
|
|
73
|
+
// the COMMISSION. He answers, tells you to stay by your link, and
|
|
74
|
+
// hangs up; the job arrives as HIS callback the moment drafting lands
|
|
75
|
+
// (see Game.draftNextScene's incoming-call handoff). No lingering
|
|
76
|
+
// chat: a real session found it confusing to still be talking to the
|
|
77
|
+
// man who just said "I'll call you back."
|
|
78
|
+
if (this.game && this.game.hasHub && this.scene.isHub && target.name === FIXER_NAME) {
|
|
79
|
+
this.actor.performAction('calls', target.name);
|
|
80
|
+
// A job is WAITING: this call is the offer. The line connects for
|
|
81
|
+
// real -- his AI pitches it in his own voice, the rate can be
|
|
82
|
+
// haggled right here (haggle.ts reads the pending seed), and
|
|
83
|
+
// "travel" is what actually takes it. Calling again re-delivers.
|
|
84
|
+
const pending = this.game.pendingRun;
|
|
85
|
+
if (pending) {
|
|
86
|
+
this.actor.activeCallPartner = target;
|
|
87
|
+
target.activeCallPartner = this.actor;
|
|
88
|
+
void Promise.resolve(target.hear(this.actor, `[System note: you sent ${this.actor.name} a message about a job and they are calling back. Pitch it in your own voice: "${pending.name}" -- ${pending.story} The payout is EXACTLY ${pending.winCondition?.payout ?? 'unset'} nuyen (they may haggle). The fare's on the client's account -- taking the job means calling a taxi ("call taxi"), which picks them up wherever they are.]`)).catch(err => {
|
|
89
|
+
this.logger.error(`${target.name} failed to pitch the pending job: ${err}`);
|
|
90
|
+
});
|
|
91
|
+
return `${CALL_ICON} ${FIXER_NAME} picks up.\n=== JOB OFFER #${this.game.pendingRunTier}: ${pending.name} ===\n${pending.story}\n("haggle" to talk rate, "end-call" to think. Fare's on the client -- "call taxi" when you're in.)`;
|
|
92
|
+
}
|
|
93
|
+
const gate = this.game.canDraftNextScene();
|
|
94
|
+
// Plain text (icon only, no color tags): a real session saw the
|
|
95
|
+
// closing tag render literally on this line.
|
|
96
|
+
if (gate.allowed) {
|
|
97
|
+
this.game.draftNextSceneInBackground();
|
|
98
|
+
return `${CALL_ICON} One ring. "${FIXER_NAME}. I'll have work for you shortly -- I'll ping you." Click.`;
|
|
99
|
+
}
|
|
100
|
+
return `${CALL_ICON} One ring. "${gate.message ?? 'Working on it.'}" Click.`;
|
|
101
|
+
}
|
|
102
|
+
const message = remainingWords.join(' ');
|
|
103
|
+
const greeting = message || `(calling) You there, ${target.name}?`;
|
|
104
|
+
this.actor.performAction('calls', target.name);
|
|
105
|
+
this.logger.write(`${this.actor.name} calls ${target.name}: "${greeting}"`);
|
|
106
|
+
// Cleanly disconnect any stale prior call on either side before linking
|
|
107
|
+
// the new one -- otherwise a former partner would be left thinking
|
|
108
|
+
// they're still connected (their own "say" would keep routing to
|
|
109
|
+
// someone who's since moved on). See end-call.ts for the explicit
|
|
110
|
+
// version of this same disconnect.
|
|
111
|
+
if (this.actor.activeCallPartner && this.actor.activeCallPartner !== target) {
|
|
112
|
+
this.actor.activeCallPartner.activeCallPartner = undefined;
|
|
113
|
+
}
|
|
114
|
+
if (target.activeCallPartner && target.activeCallPartner !== this.actor) {
|
|
115
|
+
target.activeCallPartner.activeCallPartner = undefined;
|
|
116
|
+
}
|
|
117
|
+
// Symmetric: either side can now reach the other with an ordinary
|
|
118
|
+
// "say", not just this initial hail -- see say.ts. Stays connected
|
|
119
|
+
// until "end-call" (or a new call replaces it, per above).
|
|
120
|
+
this.actor.activeCallPartner = target;
|
|
121
|
+
target.activeCallPartner = this.actor;
|
|
122
|
+
// If the caller is holding this run's win-condition macguffin and
|
|
123
|
+
// calls its intended recipient, treat the call itself as the hand-off.
|
|
124
|
+
// Fixers work deals over comms, not face to face -- there's no in-world
|
|
125
|
+
// reason a physical "give" should ever be required for a job-giver
|
|
126
|
+
// who's meant to be unreachable in person. Resolved synchronously
|
|
127
|
+
// (doesn't depend on the NPC's reply), so it's reflected in this
|
|
128
|
+
// command's own return text right away.
|
|
129
|
+
let deliveryNote = '';
|
|
130
|
+
let deliveredItemName = '';
|
|
131
|
+
const wc = this.scene.getWinCondition();
|
|
132
|
+
if (wc?.type === 'give' && wc.toNpc?.toLowerCase() === target.name.toLowerCase()) {
|
|
133
|
+
const item = this.actor.inventory.getItem(wc.item);
|
|
134
|
+
if (item) {
|
|
135
|
+
const delivered = this.actor.inventory.transferItemTo(item.name, target.inventory);
|
|
136
|
+
if (delivered) {
|
|
137
|
+
this.scene.updateInventory(this.scene.getPlayer().inventory);
|
|
138
|
+
this.scene.checkWinCondition(item.name, target.name);
|
|
139
|
+
deliveryNote = ` You relay that you have the ${item.name} -- consider it delivered.`;
|
|
140
|
+
deliveredItemName = item.name;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Fold the delivery into what the NPC actually hears (not just the
|
|
145
|
+
// player-facing confirmation above) -- otherwise an NPC whose reply is
|
|
146
|
+
// AI-generated has no way to know the job's already done, and keeps
|
|
147
|
+
// asking about it on a callback.
|
|
148
|
+
const heardMessage = deliveredItemName
|
|
149
|
+
? `${greeting} [System note: ${this.actor.name} just delivered "${deliveredItemName}" to you over this call.]`
|
|
150
|
+
: greeting;
|
|
151
|
+
// Deliberately does NOT require sharing a room with the target -- the
|
|
152
|
+
// whole point of a commlink call is reaching someone you can't walk up
|
|
153
|
+
// to (a fixer working from a hideout you'll never set foot in, say).
|
|
154
|
+
// Deliberately NOT awaited: the target's reply (if any) comes from an
|
|
155
|
+
// AI round-trip and announces itself to the screen on its own once it
|
|
156
|
+
// arrives. Awaiting it here would block this confirmation behind that
|
|
157
|
+
// delay, so the reply could render before "You call X" does -- making
|
|
158
|
+
// it look like the call was never actually made.
|
|
159
|
+
void Promise.resolve(target.hear(this.actor, heardMessage)).catch(err => {
|
|
160
|
+
this.logger.error(`${target.name} failed to handle a call from ${this.actor.name}: ${err}`);
|
|
161
|
+
});
|
|
162
|
+
// Calling ${FIXER_NAME} once the job's done is what actually gets you
|
|
163
|
+
// the next one -- the in-fiction equivalent of typing "continue", which
|
|
164
|
+
// still works too as an explicit fallback. Deliberately checks the
|
|
165
|
+
// fixer's identity directly, NOT the win condition's toNpc: a job's
|
|
166
|
+
// "give" target is often a one-off contact ${FIXER_NAME} pointed the
|
|
167
|
+
// runner toward, not ${FIXER_NAME} himself (see the "broker, not always
|
|
168
|
+
// the destination" convention), so it's ${FIXER_NAME} specifically who
|
|
169
|
+
// lines up the next gig, regardless of who this job's delivery went to.
|
|
170
|
+
// Not gated on this call being the one that JUST completed the job:
|
|
171
|
+
// checking in on an already-finished job (e.g. delivered via "give"
|
|
172
|
+
// instead) triggers it just as well. Runs in the background (see
|
|
173
|
+
// Game.draftNextSceneInBackground()) -- job generation can take 20-40+
|
|
174
|
+
// seconds, and this confirmation shouldn't wait behind it.
|
|
175
|
+
//
|
|
176
|
+
// CLASSIC sessions only (hub calls short-circuit above): calling the
|
|
177
|
+
// fixer after a completed job chain-drafts the next one. In hub
|
|
178
|
+
// sessions a finished run's Johnson call is just a call -- "continue"
|
|
179
|
+
// home first, then commission the next job from there.
|
|
180
|
+
if (this.game && target.name === FIXER_NAME
|
|
181
|
+
&& !this.game.hasHub
|
|
182
|
+
&& this.game.canDraftNextScene().allowed) {
|
|
183
|
+
this.game.draftNextSceneInBackground();
|
|
184
|
+
}
|
|
185
|
+
return `{${CALL_COLOR}-fg}${CALL_ICON} You call ${target.name}: "${greeting}"${deliveryNote}{/${CALL_COLOR}-fg}`;
|
|
186
|
+
}
|
|
187
|
+
hasEquippedCommlink(actor) {
|
|
188
|
+
return actor.equipment.head?.commlink != null;
|
|
189
|
+
}
|
|
190
|
+
hasCommlink(actor) {
|
|
191
|
+
const inInventory = actor.inventory.getAllItems().some(item => item.category === Category.Commlink);
|
|
192
|
+
return inInventory || this.hasEquippedCommlink(actor);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Multi-word names ("Mr. Johnson") shouldn't require the player to quote
|
|
196
|
+
* them just to call someone, and partial names shouldn't fail -- found
|
|
197
|
+
* via real sessions where "call Mr. Johnson" (period parsing), then
|
|
198
|
+
* "call mr" and "call Mr. J" (partials) all bounced. Tries progressively
|
|
199
|
+
* shorter word-prefixes of the input (longest first), resolving each
|
|
200
|
+
* through the same fuzzy matcher "take"/"attack"/"cast" use (punctuation
|
|
201
|
+
* and typo tolerant; an ambiguous fragment deliberately misses).
|
|
202
|
+
* Whatever's left over after the matched name becomes the message.
|
|
203
|
+
*/
|
|
204
|
+
resolveTargetAndMessage(words) {
|
|
205
|
+
// Includes the caller too, so "call <own name>" resolves into the
|
|
206
|
+
// actual "can't call yourself" check below rather than a confusing
|
|
207
|
+
// "don't know anyone" -- self is never a real target.
|
|
208
|
+
const candidates = [this.actor, ...this.scene.allActors];
|
|
209
|
+
const names = candidates.map(a => a.name);
|
|
210
|
+
for (let i = words.length; i >= 1; i--) {
|
|
211
|
+
const picked = fuzzyPickName(words.slice(0, i).join(' '), names);
|
|
212
|
+
if (picked) {
|
|
213
|
+
return { target: candidates.find(a => a.name === picked), remainingWords: words.slice(i) };
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return { target: undefined, remainingWords: [] };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BypassCommand } from './bypass-command.js';
|
|
2
|
+
import { PuzzleBypassType } from '../types/seed/puzzle-seed.js';
|
|
3
|
+
/**
|
|
4
|
+
* Gear-driven spellcasting (see Player's magic section): you know a spell
|
|
5
|
+
* if you carry its SpellFormula (or any Grimoire), and the best Focus on
|
|
6
|
+
* you scales the casting pool. "cast <spell> [at <target>]" casts; a bare
|
|
7
|
+
* "cast" (or "cast <direction/barrier>") is still the ward-bypass route
|
|
8
|
+
* inherited from BypassCommand -- now gated on actually having magic gear,
|
|
9
|
+
* instead of being a free-floating coin flip anyone could attempt.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CastCommand extends BypassCommand {
|
|
12
|
+
protected static verb: string;
|
|
13
|
+
protected static description: string;
|
|
14
|
+
protected bypassType: PuzzleBypassType;
|
|
15
|
+
protected noPuzzleMessage: string;
|
|
16
|
+
execute(args?: string[]): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Lenient spell-name matching: the exact key, or a unique fragment of at
|
|
19
|
+
* least 3 characters ("bolt"/"mana" -> manabolt). Anything that doesn't
|
|
20
|
+
* resolve falls through to the ward-bypass path, which is what a
|
|
21
|
+
* direction or barrier name ("cast north", "cast maglock") needs.
|
|
22
|
+
*/
|
|
23
|
+
private resolveSpellName;
|
|
24
|
+
private castSpell;
|
|
25
|
+
/**
|
|
26
|
+
* Support spells (heal/armor) default to SELF but can target an ally:
|
|
27
|
+
* "cast heal on jinx". Touch range -- the target must share the room --
|
|
28
|
+
* and the same fuzzy name matching as everything else. Returns an error
|
|
29
|
+
* string instead of a target when the name can't be resolved here.
|
|
30
|
+
*/
|
|
31
|
+
private resolveAllyTarget;
|
|
32
|
+
/** How the caster's pool reads in narration: focus-assisted, raw talent, or book-learned. */
|
|
33
|
+
private castingLabel;
|
|
34
|
+
/**
|
|
35
|
+
* Drain, resolved AFTER the spell: resist with Body, take whatever gets
|
|
36
|
+
* through as STUN damage -- casting doesn't cut you, it wrings you out.
|
|
37
|
+
* A full stun track is a knockout, and overflow past it spills into the
|
|
38
|
+
* physical track (enough drain doesn't just put you down, it starts
|
|
39
|
+
* killing you). Callers check drainCollapse() afterward.
|
|
40
|
+
*/
|
|
41
|
+
private applyDrain;
|
|
42
|
+
/**
|
|
43
|
+
* What the drain just did to the caster, if anything: overflow filling
|
|
44
|
+
* the physical track is a burnout DEATH; a full stun track alone is a
|
|
45
|
+
* knockout -- out of the run, but honestly narrated as unconsciousness.
|
|
46
|
+
*/
|
|
47
|
+
private drainCollapse;
|
|
48
|
+
private castManabolt;
|
|
49
|
+
private castHeal;
|
|
50
|
+
private castArmor;
|
|
51
|
+
/**
|
|
52
|
+
* Non-combat casts are a single block, no exchange pacing needed: the
|
|
53
|
+
* player's own casts return the text for ui.ts to print, while an NPC's
|
|
54
|
+
* cast self-announces to a witnessing player (its return value only ever
|
|
55
|
+
* feeds its AI history) -- same rationale as CombatExchange.
|
|
56
|
+
*/
|
|
57
|
+
private finishSpell;
|
|
58
|
+
}
|