@maka/maka-cli 5.10.0 → 5.12.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.
Files changed (119) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +3 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js +6 -5
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/advance.js.map +1 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +28 -3
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +3 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.d.ts +13 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js +99 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/catalog.js.map +1 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +12 -2
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +14 -8
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/deck.d.ts +30 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/deck.js +142 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/deck.js.map +1 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.d.ts +14 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js +87 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/docwagon.js.map +1 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/equipment.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +11 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +29 -3
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js +9 -3
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/grapple.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +9 -5
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +5 -0
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +7 -6
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js +4 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/install.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.d.ts +32 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js +94 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js.map +1 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/jump.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.d.ts +39 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js +187 -0
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/lead.js.map +1 -0
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.d.ts +16 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js +86 -0
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/palm.js.map +1 -0
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js +3 -2
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/pan.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.d.ts +13 -0
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js +48 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/perform.js.map +1 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js +8 -7
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/quality-trade.js.map +1 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js +8 -3
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/rest.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +9 -2
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js +3 -2
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/sell.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.d.ts +6 -4
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +80 -65
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/source.d.ts +11 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js +176 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/source.js.map +1 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +6 -3
  73. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +71 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/game.js +424 -29
  76. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +28 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +83 -0
  79. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +29 -7
  81. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +23 -3
  83. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +78 -17
  84. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +7 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +299 -60
  88. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +25 -0
  89. package/bundle/typescript/src/commands/game/sideQuest/ui.js +73 -3
  90. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +32 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +112 -0
  93. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -0
  94. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +28 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +128 -0
  96. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.d.ts +3 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +41 -9
  99. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  100. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.d.ts +19 -0
  101. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js +13 -0
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/comm-style.js.map +1 -1
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.d.ts +33 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js +44 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/docwagon.js.map +1 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +8 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.d.ts +4 -2
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js +35 -4
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/planes.js.map +1 -1
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.d.ts +39 -0
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.js +63 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/utilities/programs.js.map +1 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.d.ts +18 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js +91 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js.map +1 -0
  117. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +25 -16
  118. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  119. package/package.json +1 -1
@@ -0,0 +1,39 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * LEADERSHIP (SR5e p.139, p.141-142): Charisma-linked, "direct and
4
+ * motivate others" -- the party layer's command console. The book's
5
+ * four actions, translated to this engine's exchange model:
6
+ *
7
+ * RALLY -- +1 initiative SCORE per 2 hits, every party member,
8
+ * banked until their next initiative contest (RAW: 1 turn).
9
+ * DIRECT -- your hits ride ONE companion's next attack as teamwork
10
+ * dice (RAW: their next skill/Composure test), capped at
11
+ * your leadership rating (the teamwork cap, p.49).
12
+ * INSPIRE -- RAW primes Surprise Tests; surprise isn't modeled, so
13
+ * the adaptation primes the party's next DEFENSE instead.
14
+ *
15
+ * A banked bonus must be SPENT before that action re-arms -- the lull
16
+ * between exchanges is a leader's one voice, not a stacking machine.
17
+ * COMMAND (the fourth action) recruits -- see RecruitCommand below.
18
+ */
19
+ export declare class LeadCommand extends Command implements ICommand {
20
+ protected static verb: string;
21
+ protected static description: string;
22
+ private leadPool;
23
+ private party;
24
+ execute(args?: string[]): Promise<string>;
25
+ }
26
+ /**
27
+ * COMMAND (SR5e p.141-142): the opposed test -- your Charisma +
28
+ * Leadership vs their Leadership + Willpower -- to be ACCEPTED as
29
+ * leader. Translated to the hub: recruit a contact (Loyalty 3+, meat,
30
+ * face to face) as an ALLY who rides along on your NEXT RUN (RAW's
31
+ * net-hits-in-combat-turns duration scaled to the job clock). RAW's
32
+ * teeth kept: fail the test and that contact never accepts you at this
33
+ * standing -- the refusal clears only when Loyalty deepens.
34
+ */
35
+ export declare class RecruitCommand extends Command implements ICommand {
36
+ protected static verb: string;
37
+ protected static description: string;
38
+ execute(args?: string[]): Promise<string>;
39
+ }
@@ -0,0 +1,187 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
5
+ import { NPC } from '../models/npc.js';
6
+ /**
7
+ * LEADERSHIP (SR5e p.139, p.141-142): Charisma-linked, "direct and
8
+ * motivate others" -- the party layer's command console. The book's
9
+ * four actions, translated to this engine's exchange model:
10
+ *
11
+ * RALLY -- +1 initiative SCORE per 2 hits, every party member,
12
+ * banked until their next initiative contest (RAW: 1 turn).
13
+ * DIRECT -- your hits ride ONE companion's next attack as teamwork
14
+ * dice (RAW: their next skill/Composure test), capped at
15
+ * your leadership rating (the teamwork cap, p.49).
16
+ * INSPIRE -- RAW primes Surprise Tests; surprise isn't modeled, so
17
+ * the adaptation primes the party's next DEFENSE instead.
18
+ *
19
+ * A banked bonus must be SPENT before that action re-arms -- the lull
20
+ * between exchanges is a leader's one voice, not a stacking machine.
21
+ * COMMAND (the fourth action) recruits -- see RecruitCommand below.
22
+ */
23
+ export class LeadCommand extends Command {
24
+ static verb = 'lead';
25
+ static description = 'Leadership (SR5e p.141): "lead rally" (+initiative, whole party), "lead direct <companion>" (teamwork dice on their next attack), "lead inspire" (primes the party\'s next defense). Bare "lead" shows the party.';
26
+ leadPool() {
27
+ const skill = this.actor.skillRating('leadership');
28
+ return Math.max(1, this.actor.charisma + (skill > 0 ? skill : -1) + this.actor.woundModifier - this.actor.sustainingPenalty);
29
+ }
30
+ party() {
31
+ return (this.game?.companions ?? [])
32
+ .map(c => c.npc)
33
+ .filter(n => n.currentLocation === this.actor.currentLocation && !n.isIncapacitated());
34
+ }
35
+ async execute(args = []) {
36
+ const action = (args[0] ?? '').toLowerCase();
37
+ const party = this.party();
38
+ if (!action) {
39
+ if (party.length === 0)
40
+ return `Nobody's following you right now -- a leader needs a party.${hint(` (Summon, deploy, or "command" someone first.)`)}`;
41
+ const roster = party.map(n => {
42
+ const banked = [
43
+ n.rallyInitBonus > 0 ? `rally +${n.rallyInitBonus}` : '',
44
+ n.directedDice > 0 ? `directed +${n.directedDice}` : '',
45
+ n.inspiredGuardDice > 0 ? `inspired +${n.inspiredGuardDice}` : '',
46
+ ].filter(Boolean).join(', ');
47
+ return ` ${n.name}${banked ? ` (${banked})` : ''}`;
48
+ });
49
+ return [`=== THE PARTY ===`, ...roster, '', `Leadership pool: ${this.leadPool()}d6 (Cha + leadership). "lead rally" | "lead direct <name>" | "lead inspire".`].join('\n');
50
+ }
51
+ if (party.length === 0) {
52
+ return `You square your shoulders and address an empty room. A leader needs a party first.`;
53
+ }
54
+ if (this.actor.inExchange || (this.actor === this.scene.getPlayer() && this.scene.isPlayerExchangeActive())) {
55
+ return `Orders wait for the lull -- nobody hears doctrine over gunfire.`;
56
+ }
57
+ const isPlayer = this.actor === this.scene.getPlayer();
58
+ const tick = (line) => { if (isPlayer)
59
+ this.logger.meta(line); };
60
+ if (action === 'rally') {
61
+ if (party.every(n => n.rallyInitBonus > 0)) {
62
+ return `The rally's already ringing in their ears -- spend it before you spend more breath.`;
63
+ }
64
+ const roll = rollPool(this.leadPool());
65
+ const bonus = Math.floor(roll.hits / 2);
66
+ tick(`Leadership -- Rally: ${formatRoll(roll)} (+1 initiative per 2 hits)`);
67
+ if (bonus <= 0) {
68
+ this.actor.performAction('rallies', `the party -- the words land flat`);
69
+ return `You call the shape of the fight -- and fumble it. Nobody moves sharper for hearing that.`;
70
+ }
71
+ for (const n of party)
72
+ n.rallyInitBonus = Math.max(n.rallyInitBonus, bonus);
73
+ this.actor.performAction('rallies', `the party -- +${bonus} initiative`);
74
+ return `You call the shape of the fight and the party SNAPS to it: +${bonus} initiative, banked for the next clash. (${party.map(n => n.name).join(', ')})`;
75
+ }
76
+ if (action === 'direct') {
77
+ const query = args.slice(1).join(' ');
78
+ if (!query)
79
+ return `Direct whom? Your party: ${party.map(n => n.name).join(', ')}.`;
80
+ const picked = fuzzyPickName(query, party.map(n => n.name));
81
+ const target = picked ? party.find(n => n.name === picked) : undefined;
82
+ if (!target)
83
+ return `No "${query}" in your party. Following you: ${party.map(n => n.name).join(', ')}.`;
84
+ if (target.directedDice > 0) {
85
+ return `${target.name} is already carrying your instructions -- let them use them first.`;
86
+ }
87
+ const roll = rollPool(this.leadPool());
88
+ const cap = Math.max(1, this.actor.skillRating('leadership'));
89
+ const dice = Math.min(roll.hits, cap);
90
+ tick(`Leadership -- Direct ${target.name}: ${formatRoll(roll)} (teamwork, cap ${cap})`);
91
+ if (dice <= 0) {
92
+ this.actor.performAction('directs', `${target.name} -- unclear orders`);
93
+ return `You talk ${target.name} through the opening -- badly. They nod anyway.`;
94
+ }
95
+ target.directedDice = dice;
96
+ this.actor.performAction('directs', `${target.name} -- +${dice} dice on their next strike`);
97
+ return `You walk ${target.name} through exactly where to hit: +${dice} dice on their next strike, banked.`;
98
+ }
99
+ if (action === 'inspire') {
100
+ if (party.every(n => n.inspiredGuardDice > 0)) {
101
+ return `They're already watching the angles you called -- spend it first.`;
102
+ }
103
+ const roll = rollPool(this.leadPool());
104
+ tick(`Leadership -- Inspire: ${formatRoll(roll)} (primes the party's next defense)`);
105
+ if (roll.hits <= 0) {
106
+ this.actor.performAction('inspires', `the party -- the speech wobbles`);
107
+ return `You start the speech and lose the thread. The party pretends not to notice.`;
108
+ }
109
+ for (const n of party)
110
+ n.inspiredGuardDice = Math.max(n.inspiredGuardDice, roll.hits);
111
+ this.actor.performAction('inspires', `the party -- +${roll.hits} on their next defense`);
112
+ return `You put steel in them: +${roll.hits} dice on each party member's next defense, banked. Heads up, eyes open.`;
113
+ }
114
+ return `"lead rally", "lead direct <name>", or "lead inspire".${hint(` ("command <name>" recruits.)`)}`;
115
+ }
116
+ }
117
+ /**
118
+ * COMMAND (SR5e p.141-142): the opposed test -- your Charisma +
119
+ * Leadership vs their Leadership + Willpower -- to be ACCEPTED as
120
+ * leader. Translated to the hub: recruit a contact (Loyalty 3+, meat,
121
+ * face to face) as an ALLY who rides along on your NEXT RUN (RAW's
122
+ * net-hits-in-combat-turns duration scaled to the job clock). RAW's
123
+ * teeth kept: fail the test and that contact never accepts you at this
124
+ * standing -- the refusal clears only when Loyalty deepens.
125
+ */
126
+ export class RecruitCommand extends Command {
127
+ static verb = 'command';
128
+ static description = 'Leadership\'s Command test (SR5e p.141): recruit a contact (Loyalty 3+, in person) to run with you as an ALLY on your next job. Fail, and they won\'t hear it again until your standing grows.';
129
+ async execute(args = []) {
130
+ if (!this.game?.hasHub) {
131
+ return `Recruiting runs on standing -- home turf only.`;
132
+ }
133
+ if (this.game.enlistedAlly) {
134
+ return `${this.game.enlistedAlly.name} is already riding with you on the next one -- this crew runs one guest at a time.`;
135
+ }
136
+ const query = args.join(' ').trim();
137
+ if (!query)
138
+ return `Command whom? Try: command <contact>`;
139
+ const candidates = this.scene.getActorsInRoom(this.actor.currentLocation)
140
+ .filter((a) => a !== this.actor && a instanceof NPC && a.plane === 'meat' && !a.companionKind);
141
+ const picked = fuzzyPickName(query, candidates.map(a => a.name));
142
+ const target = picked ? candidates.find(a => a.name === picked) : undefined;
143
+ if (!target) {
144
+ return `Nobody by that name is standing here -- commanding happens face to face.`;
145
+ }
146
+ const entry = this.game.contacts.get(target.name);
147
+ if (!entry || entry.loyalty < 3) {
148
+ return `${target.name} hears the tone and raises an eyebrow. Authority is EARNED -- run their errands, spend at their counter (Loyalty 3+), then try again.`;
149
+ }
150
+ const refusedAt = this.game.commandRefusals[target.name];
151
+ if (refusedAt !== undefined && entry.loyalty <= refusedAt) {
152
+ return `${target.name} already turned you down at this standing -- RAW is unforgiving about repeat speeches${hint(' (p.142)')}. Deepen the loyalty first.`;
153
+ }
154
+ // The opposed test, both sides ticked.
155
+ const mySkill = this.actor.skillRating('leadership');
156
+ const myPool = Math.max(1, this.actor.charisma + (mySkill > 0 ? mySkill : -1) + this.actor.woundModifier - this.actor.sustainingPenalty);
157
+ const theirSkill = target.skillRating('leadership');
158
+ const theirPool = Math.max(1, target.willpower + (theirSkill > 0 ? theirSkill : -1));
159
+ const mine = rollPool(myPool);
160
+ const theirs = rollPool(theirPool);
161
+ const isPlayer = this.actor === this.scene.getPlayer();
162
+ if (isPlayer) {
163
+ this.logger.meta(`Command -- you (Cha+Leadership): ${formatRoll(mine)}`);
164
+ this.logger.meta(`${target.name} (Willpower+Leadership): ${formatRoll(theirs)}`);
165
+ }
166
+ const net = mine.hits - theirs.hits;
167
+ if (net <= 0) {
168
+ this.game.commandRefusals[target.name] = entry.loyalty;
169
+ this.actor.performAction('tries to command', `${target.name} -- and is refused`);
170
+ return `${target.name} lets the silence answer first. "Not this time, chummer." That door stays shut until you mean more to them.`;
171
+ }
172
+ this.game.enlistedAlly = {
173
+ name: target.name,
174
+ description: target.description ?? `${target.name}, running with you on this one.`,
175
+ combat: {
176
+ body: target.body, agility: target.agility, reaction: target.reaction,
177
+ combatSkill: target.combatSkill, strength: target.strength, willpower: target.willpower,
178
+ logic: target.logic, intuition: target.intuition, charisma: target.charisma,
179
+ skills: { ...target.skills },
180
+ },
181
+ };
182
+ this.actor.performAction('commands', `${target.name} -- who accepts, and is IN for the next run`);
183
+ void Promise.resolve(target.hear(this.actor, `[System note: ${this.actor.name} just talked you into riding along on their NEXT JOB as crew -- you accepted (their Leadership won you over, ${net} net). Say ONE short line in your own voice about being in.]`)).catch(() => { });
184
+ return `${target.name} looks you over once, and nods. IN -- they'll meet you at the jobsite when the next run rolls.${hint(` (They ride the next "call taxi"; the crew disbands at homecoming.)`)}`;
185
+ }
186
+ }
187
+ //# sourceMappingURL=lead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/lead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * PALMING (SR5e canon, Agility): sleight of hand -- lifting something
4
+ * without the room noticing. The honest counterpart to "take": a take
5
+ * broadcasts (owner-stamped grabs wake owners, prize grabs wake
6
+ * EVERYONE -- see NPC.see), a palm is an opposed roll against the
7
+ * sharpest eyes present. Win: the item simply leaves the world's
8
+ * attention -- no performAction, no reactions, the theft machinery
9
+ * never fires. Lose: you took it AND they watched you do it, which is
10
+ * strictly worse than taking it openly.
11
+ */
12
+ export declare class PalmCommand extends Command implements ICommand {
13
+ protected static verb: string;
14
+ protected static description: string;
15
+ execute(args?: string[]): Promise<string>;
16
+ }
@@ -0,0 +1,86 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ import { canReach, ensureAtSpot } from '../utilities/spots.js';
5
+ import { NPC } from '../models/npc.js';
6
+ /**
7
+ * PALMING (SR5e canon, Agility): sleight of hand -- lifting something
8
+ * without the room noticing. The honest counterpart to "take": a take
9
+ * broadcasts (owner-stamped grabs wake owners, prize grabs wake
10
+ * EVERYONE -- see NPC.see), a palm is an opposed roll against the
11
+ * sharpest eyes present. Win: the item simply leaves the world's
12
+ * attention -- no performAction, no reactions, the theft machinery
13
+ * never fires. Lose: you took it AND they watched you do it, which is
14
+ * strictly worse than taking it openly.
15
+ */
16
+ export class PalmCommand extends Command {
17
+ static verb = 'palm';
18
+ static description = 'Sleight of hand (Palming + Agility): lift an item without being seen -- opposed by the sharpest eyes in the room. Winning leaves no witnesses; losing means they watched your hand the whole way.';
19
+ async execute(args = []) {
20
+ const actor = this.actor;
21
+ if (!args || args.length === 0)
22
+ return `Palm what? Try: palm <item>`;
23
+ if (actor.plane !== 'meat')
24
+ return `Sleight of hand needs a hand.`;
25
+ const room = actor.currentLocation;
26
+ const itemName = args.join(' ');
27
+ const item = room.inventory.getItem(itemName);
28
+ if (!item)
29
+ return `You don't see "${itemName}" here to lift.`;
30
+ if (!item.transferable)
31
+ return `The ${item.name} isn't going anywhere in anyone's sleeve.`;
32
+ // "At" spots: light fingers still need to be standing at the goods.
33
+ if (!canReach(actor, item.atSpot)) {
34
+ const reach = ensureAtSpot(actor, item.atSpot);
35
+ if (reach.refusal)
36
+ return reach.refusal;
37
+ }
38
+ const observers = this.scene.getActorsInRoom(room)
39
+ .filter((a) => a !== actor && a instanceof NPC && a.canPerceive(actor) && !a.isIncapacitated() && !a.allyOf);
40
+ const skill = actor.skillRating('palming');
41
+ const pool = Math.max(1, actor.agility + (skill > 0 ? skill : -1) + actor.woundModifier - actor.sustainingPenalty);
42
+ const myRoll = rollPool(pool);
43
+ // The sharpest eyes in the room are the opposition.
44
+ let sharpest;
45
+ let bestPool = 0;
46
+ for (const o of observers) {
47
+ const p = o.intuition + Math.max(o.skillRating('perception'), 0);
48
+ if (p > bestPool) {
49
+ bestPool = p;
50
+ sharpest = o;
51
+ }
52
+ }
53
+ const theirRoll = sharpest ? rollPool(Math.max(1, bestPool)) : { hits: 0 };
54
+ const isPlayer = actor === this.scene.getPlayer();
55
+ if (isPlayer) {
56
+ this.logger.meta(`Palming: ${formatRoll(myRoll)}`);
57
+ if (sharpest)
58
+ this.logger.meta(` ${sharpest.name}'s eyes: ${formatRoll(theirRoll)}`);
59
+ }
60
+ // The lift happens either way -- what's contested is who SAW it.
61
+ const moved = room.inventory.removeItem(item.name);
62
+ if (!moved)
63
+ return `The ${item.name} slips your grip -- somebody got there first.`;
64
+ try {
65
+ actor.addInventory(item); // throws over the carry-weight cap
66
+ }
67
+ catch {
68
+ room.inventory.addItem(item);
69
+ return `The ${item.name} is heavier than a sleeve can hide -- and heavier than your pack can take.`;
70
+ }
71
+ this.scene.updateInventory(this.scene.getPlayer().inventory);
72
+ if (!sharpest || myRoll.hits > theirRoll.hits) {
73
+ // CLEAN: no performAction -- the see()/theft machinery never hears
74
+ // about it. The log keeps the truth for the record.
75
+ this.logger.write(`PalmCommand: ${actor.name} palmed ${item.name} unseen (vs ${sharpest?.name ?? 'an empty room'}).`);
76
+ const winNote = this.scene.checkWinCondition ? this.scene.checkWinCondition(item.name, actor.name) : null;
77
+ return `Your hand barely moves. The ${item.name} is in your pocket and the room never blinked.${winNote ? `` : ''}${hint(` (Palmed goods raise no alarms -- unlike "take".)`)}`;
78
+ }
79
+ // BLOWN: the take goes loud, with a witness who watched the hand.
80
+ actor.performAction('takes', `${item.name}${item.owner && item.owner !== actor.name ? ` (${item.owner}'s)` : ''} -- and ${sharpest.name} watched the whole clumsy lift`);
81
+ void Promise.resolve(sharpest.hear(actor, `[System note: you just WATCHED ${actor.name} try to palm the ${item.name} and botch it -- you saw the whole lift. React to a caught thief, in your own voice.]`)).catch(() => { });
82
+ this.scene.checkWinCondition?.(item.name, actor.name);
83
+ return `The lift goes wide -- ${sharpest.name}'s eyes are already on your hand. You HAVE the ${item.name}, and a witness.`;
84
+ }
85
+ }
86
+ //# sourceMappingURL=palm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palm.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/palm.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
2
3
  import { Category } from '../types/shared/item-enum.js';
3
4
  /**
4
5
  * The PAN dashboard: your personal area network at a glance -- master
@@ -43,12 +44,12 @@ export class PanCommand extends Command {
43
44
  }
44
45
  const drone = a.inventory.getAllItems().find(i => i.category === Category.Drone);
45
46
  if (drone) {
46
- lines.push(` • ${drone.name} (drone) -- recon uplink ("drone")`);
47
+ lines.push(` • ${drone.name} (drone) -- recon uplink${hint(' ("drone")')}`);
47
48
  }
48
49
  lines.push('');
49
50
  lines.push(a.runningSilent
50
51
  ? `Silent running: enemy deckers must FIND you before they can crack you -- but a good one can force you loud.`
51
- : `Running loud: any decker in reach can try your firewall -- jammed guns and dead AR are how that feels. "silent" goes dark.`);
52
+ : `Running loud: any decker in reach can try your firewall -- jammed guns and dead AR are how that feels.${hint(' "silent" goes dark.')}`);
52
53
  return lines.join('\n');
53
54
  }
54
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pan.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/pan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pan.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/pan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * PERFORMANCE (SR5e canon, Charisma): busking -- the small, honest end
4
+ * of the shadow economy. Once per job cycle (the flag resets at
5
+ * homecoming, like a contact's legwork), at a venue with an audience:
6
+ * Charisma + Performance, 25 nuyen a hit in tips. Nobody retires on it,
7
+ * but nobody shoots at you for it either.
8
+ */
9
+ export declare class PerformCommand extends Command implements ICommand {
10
+ protected static verb: string;
11
+ protected static description: string;
12
+ execute(_args?: string[]): Promise<string>;
13
+ }
@@ -0,0 +1,48 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ /**
5
+ * PERFORMANCE (SR5e canon, Charisma): busking -- the small, honest end
6
+ * of the shadow economy. Once per job cycle (the flag resets at
7
+ * homecoming, like a contact's legwork), at a venue with an audience:
8
+ * Charisma + Performance, 25 nuyen a hit in tips. Nobody retires on it,
9
+ * but nobody shoots at you for it either.
10
+ */
11
+ export class PerformCommand extends Command {
12
+ static verb = 'perform';
13
+ static description = 'Busk for tips (Performance + Charisma, SR5e canon): once per job cycle, somewhere with an audience. 25 nuyen a hit -- honest money, small.';
14
+ async execute(_args = []) {
15
+ const actor = this.actor;
16
+ if (!this.game?.hasHub) {
17
+ return `Nobody tips on a jobsite.`;
18
+ }
19
+ if (actor.plane !== 'meat') {
20
+ return `An audience wants a body on the stage, not a ghost or an icon.`;
21
+ }
22
+ if (this.game.performedThisCycle) {
23
+ return `The district's heard your set already -- fresh material after the next job.`;
24
+ }
25
+ // An audience: anyone at all sharing the room (companions included --
26
+ // even the spirit counts as a crowd of one, barely).
27
+ const audience = this.scene.getActorsInRoom(actor.currentLocation).filter(a => a !== actor && actor.canPerceive(a));
28
+ if (audience.length === 0) {
29
+ return `You clear your throat at an empty room. The room remains unmoved.`;
30
+ }
31
+ const skill = actor.skillRating('performance');
32
+ const pool = Math.max(1, actor.charisma + (skill > 0 ? skill : -1) + actor.woundModifier - actor.sustainingPenalty);
33
+ const roll = rollPool(pool);
34
+ if (actor === this.scene.getPlayer()) {
35
+ this.logger.meta(`Performance: ${formatRoll(roll)} (25 nuyen a hit)`);
36
+ }
37
+ this.game.performedThisCycle = true;
38
+ const tips = roll.hits * 25;
39
+ actor.performAction('performs', `for the room -- ${roll.hits > 0 ? `${tips} nuyen in tips` : 'to polite silence'}`);
40
+ if (tips <= 0) {
41
+ return `You give the room your best. The room gives you a cough and someone's back. No tips tonight.`;
42
+ }
43
+ actor.adjustCurrency(tips);
44
+ this.scene.updateInventory(this.scene.getPlayer().inventory);
45
+ return `You work the room and the room, grudgingly, pays: ${tips} nuyen in tips.${hint(` (Once per job cycle -- the district wants new material.)`)}`;
46
+ }
47
+ }
48
+ //# sourceMappingURL=perform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perform.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/perform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO;IAC/B,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;IACxB,MAAM,CAAC,WAAW,GAAG,4IAA4I,CAAC;IAE5K,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,2BAA2B,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,gEAAgE,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjC,OAAO,6EAA6E,CAAC;QACvF,CAAC;QACD,sEAAsE;QACtE,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,mEAAmE,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAC5B,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACpH,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,OAAO,8FAA8F,CAAC;QACxG,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,qDAAqD,IAAI,kBAAkB,IAAI,CAAC,2DAA2D,CAAC,EAAE,CAAC;IACxJ,CAAC"}
@@ -54,11 +54,11 @@ export class QualityTradeCommand extends Command {
54
54
  // RAW forbids the one stacking this catalog can produce: High Pain
55
55
  // Tolerance never combines with a pain editor (p.74).
56
56
  if (quality.key === 'high-pain-tolerance' && actor.hasAug('pain-editor')) {
57
- return `The pain editor already owns that circuit -- High Pain Tolerance can't grow where chrome filters first (SR5e p.74).`;
57
+ return `The pain editor already owns that circuit -- High Pain Tolerance can't grow where chrome filters first${hint(' (SR5e p.74)')}.`;
58
58
  }
59
59
  const cost = quality.karma * 2;
60
60
  if (actor.karma < cost) {
61
- return `${quality.name} costs ${cost} karma in play (listed ${quality.karma} x2, ${quality.page}) -- you have ${actor.karma}.`;
61
+ return `${quality.name} costs ${cost} karma in play${hint(` (listed ${quality.karma} x2, ${quality.page})`)} -- you have ${actor.karma}.`;
62
62
  }
63
63
  actor.karma -= cost;
64
64
  actor.addQuality(quality.key);
@@ -74,7 +74,7 @@ export class QualityTradeCommand extends Command {
74
74
  }
75
75
  const cost = quality.karma * 2;
76
76
  if (actor.karma < cost) {
77
- return `Shedding ${quality.name} costs ${cost} karma (bonus ${quality.karma} x2, SR5e p.107) -- you have ${actor.karma}.`;
77
+ return `Shedding ${quality.name} costs ${cost} karma${hint(` (bonus ${quality.karma} x2, SR5e p.107)`)} -- you have ${actor.karma}.`;
78
78
  }
79
79
  const notorietyBefore = actor.notoriety;
80
80
  actor.karma -= cost;
@@ -95,7 +95,7 @@ export class QualityTradeCommand extends Command {
95
95
  }
96
96
  listBoard() {
97
97
  const actor = this.actor;
98
- const lines = [`=== QUALITIES (karma: ${actor.karma} -- SR5e in-play rates, p.106-107) ===`];
98
+ const lines = [`=== QUALITIES (karma: ${actor.karma}${hint(' -- SR5e in-play rates, p.106-107')}) ===`];
99
99
  const owned = QUALITIES.filter(q => actor.hasQuality(q.key));
100
100
  if (owned.length > 0) {
101
101
  lines.push(`Yours:`);
@@ -108,14 +108,15 @@ export class QualityTradeCommand extends Command {
108
108
  }
109
109
  const buyable = QUALITIES.filter(q => q.kind === 'positive' && !actor.hasQuality(q.key));
110
110
  if (buyable.length > 0) {
111
- lines.push(`On the board (listed x2 to learn in play):`);
111
+ lines.push(`On the board${hint(' (listed x2 to learn in play)')}:`);
112
112
  for (const q of buyable) {
113
113
  const blocked = q.key === 'high-pain-tolerance' && actor.hasAug('pain-editor');
114
114
  lines.push(` + ${q.name.padEnd(24)} ${q.effect} -- ${q.karma * 2} karma${blocked ? ' (BLOCKED: pain editor)' : actor.karma >= q.karma * 2 ? '' : ' (short)'}`);
115
115
  }
116
116
  }
117
- lines.push('');
118
- lines.push(`"qualities <name>" buys a positive or buys off a negative. Negatives can't be taken on for karma -- the street hands those out for free (see your sheet's Stains).`);
117
+ const footer = hint(`"qualities <name>" buys a positive or buys off a negative. Negatives can't be taken on for karma -- the street hands those out for free (see your sheet's Stains).`);
118
+ if (footer)
119
+ lines.push('', footer);
119
120
  return lines.join('\n');
120
121
  }
121
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quality-trade.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/quality-trade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quality-trade.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/quality-trade.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,10 @@ export class RestCommand extends Command {
66
66
  const tierDice = isResidence ? (this.game?.lifestyle?.restDice ?? 0) : 0;
67
67
  // Quick Healer (p.77): +2 on every healing test, this one included.
68
68
  const healerDice = actor.qualityBonus('healing');
69
- const roll = rollPool(Math.max(1, actor.body + tierDice + healerDice));
69
+ // MEDICINE aids natural recovery (canon p.207-208: Medicine hits
70
+ // add dice to healing tests) -- knowing what your body needs.
71
+ const medicineDice = actor.skillRating('medicine');
72
+ const roll = rollPool(Math.max(1, actor.body + tierDice + healerDice + medicineDice));
70
73
  let recovery = roll.hits + 1;
71
74
  // Insomnia (p.81): the sleep that comes is thin -- half the boxes.
72
75
  const insomnia = actor.hasQuality('insomnia');
@@ -83,7 +86,9 @@ export class RestCommand extends Command {
83
86
  const wasBricked = deck.isBricked;
84
87
  // Juryrigger (p.75): +2 on the bench -- coaxing boards back to life
85
88
  // is exactly the intuitive-hardware knack the quality describes.
86
- const repairRoll = rollPool(actor.logic + actor.qualityBonus('piloting'));
89
+ // HARDWARE is the bench skill (canon, Logic) -- Juryrigger's +2
90
+ // still stacks on top.
91
+ const repairRoll = rollPool(actor.logic + actor.skillRating('hardware') + actor.qualityBonus('piloting'));
87
92
  const repaired = deck.repairDeck(repairRoll.hits + 1);
88
93
  this.logger.write(`RestCommand: ${actor.name} repaired ${repaired} boxes on ${deck.name} (${deck.deckDamage}/${deck.maxDeckBoxes}).`);
89
94
  lines.push(` Bench work on the ${deck.name}: ${formatRoll(repairRoll)}`);
@@ -91,7 +96,7 @@ export class RestCommand extends Command {
91
96
  }
92
97
  for (const drone of damagedDrones) {
93
98
  const wasWrecked = drone.isWrecked;
94
- const repairRoll = rollPool(actor.logic + actor.qualityBonus('piloting'));
99
+ const repairRoll = rollPool(actor.logic + actor.skillRating('hardware') + actor.qualityBonus('piloting'));
95
100
  const repaired = drone.repairDrone(repairRoll.hits + 1);
96
101
  this.logger.write(`RestCommand: ${actor.name} repaired ${repaired} hull boxes on ${drone.name} (${drone.droneDamage}/${drone.maxDroneBoxes}).`);
97
102
  lines.push(` Airframe work on the ${drone.name}: ${formatRoll(repairRoll)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/rest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAO;IAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,WAAW,GAAG,8HAA8H,CAAC;IAE9J,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;QAEnC,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC5E,OAAO,sCAAsC,CAAC;QAChD,CAAC;QACD,kEAAkE;QAClE,mEAAmE;QACnE,+DAA+D;QAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACpG,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAElG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC;QAEjE,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrF,8DAA8D;YAC9D,qDAAqD;YACrD,iEAAiE;YACjE,qBAAqB;YACrB,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzC,KAAK,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC9C,OAAO,2FAA2F,CAAC;YACrG,CAAC;YACD,OAAO,oDAAoD,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,WAAW,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,iCAAiC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC;QAChI,CAAC;QAED,iEAAiE;QACjE,+DAA+D;QAC/D,MAAM,YAAY,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEnE,sEAAsE;QACtE,sEAAsE;QACtE,+DAA+D;QAC/D,oEAAoE;QACpE,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACtD,IAAI,WAAW;YAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QAEnC,MAAM,KAAK,GAAa,CAAC,YAAY;gBACnC,CAAC,CAAC,sEAAsE,IAAI,CAAC,IAAK,CAAC,QAAQ,YAAY,IAAI,CAAC,wBAAwB,CAAC,EAAE;gBACvI,CAAC,CAAC,mEAAmE,CAAC,CAAC;QACzE,IAAI,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAEtF,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YACxB,oEAAoE;YACpE,qEAAqE;YACrE,8CAA8C;YAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,oEAAoE;YACpE,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;YACvE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC7B,mEAAmE;YACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,QAAQ;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,YAAY;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,yBAAyB,SAAS,UAAU,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC5V,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,iBAAiB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,8BAA8B,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5U,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,oBAAoB,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;YAClC,oEAAoE;YACpE,iEAAiE;YACjE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,aAAa,QAAQ,aAAa,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YACtI,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5J,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,aAAa,QAAQ,kBAAkB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;YAChJ,KAAK,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,uBAAuB,KAAK,CAAC,YAAY,EAAE,GAAG,UAAU,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjL,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;YAC1H,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAE1B,mEAAmE;QACnE,+DAA+D;QAC/D,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC"}
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/rest.ts"],"names":[],"mappings":"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"}