@maka/maka-cli 5.147.0 → 5.148.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.147.0",
3
+ "version": "5.148.0",
4
4
  "type": "module",
5
5
  "summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
6
6
  "description": "A command line tool for scaffolding Meteor 3.x applications using React.",
@@ -6,7 +6,7 @@ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
6
6
  import { describeFledTarget } from '../utilities/pursuit.js';
7
7
  import { shellsInRoom, resolveBodyAttack, crossPlaneRefusal } from '../utilities/planes.js';
8
8
  import { heldBy, holding } from '../utilities/grapple.js';
9
- import { spotOf, ensureAtSpot, ensureAtExit, canReach, spotDistanceMeters } from '../utilities/spots.js';
9
+ import { spotOf, ensureAtSpot, ensureAtExit, canReach, spotDistanceMeters, OPEN_FLOOR } from '../utilities/spots.js';
10
10
  import { resolveBarrierStrike } from '../utilities/barrier-combat.js';
11
11
  import { billAction, notYourPhase, phaseHint } from '../utilities/action-cost.js';
12
12
  import { spendMovementMeters } from '../utilities/movement-cost.js';
@@ -369,6 +369,18 @@ export class AttackCommand extends Command {
369
369
  // MELEE REACH: ground costs (p.161-162).
370
370
  if (isMelee) {
371
371
  const targetSpot = spotOf(target);
372
+ // An attacker with no spot of their own reads to canReach as
373
+ // "reaches everything" (the same compat rule that lets an unbound
374
+ // exit be worked from anywhere) -- fine for a location query, but
375
+ // for the ATTACKER in a reach check it skips ground-closing
376
+ // billing entirely: a hostile spawned mid-room, never having
377
+ // moved, could swing on a target the player had just paced away
378
+ // from in a fully gridded room (MotczCjebFNdHAWq7). Resolving
379
+ // an unset spot to the open floor first -- move.ts's own default
380
+ // -- gives canReach and spotDistanceMeters a real position to
381
+ // measure the reach/cost from instead of "unknown = anywhere".
382
+ if (spotOf(actor) === undefined)
383
+ actor.atSpot = OPEN_FLOOR;
372
384
  const mine = spotOf(actor);
373
385
  if (targetSpot !== undefined && !canReach(actor, targetSpot)) {
374
386
  const meters = mine !== undefined && room.ensureGrid() ? spotDistanceMeters(room, mine, targetSpot) : 0;
@@ -57,7 +57,10 @@ export class DocwagonCommand extends Command {
57
57
  const surcharge = Math.ceil(def.price * check.surchargePct);
58
58
  const total = def.price + surcharge;
59
59
  if (this.actor.currency < total) {
60
- return `${reachable.name} taps the rate card: ${total} nuyen a year for ${tier}${surcharge > 0 ? ` (papers with a smell run extra)` : ''}. You're carrying ${this.actor.currency}.`;
60
+ return [
61
+ ...(check.lines[0] ? [check.lines[0]] : []),
62
+ `${reachable.name} taps the rate card: ${total} nuyen a year for ${tier}${surcharge > 0 ? ` (papers with a smell run extra)` : ''}. You're carrying ${this.actor.currency}.`,
63
+ ].join('\n');
61
64
  }
62
65
  const renewal = this.game.docwagon?.tier === tier;
63
66
  this.actor.adjustCurrency(-total);
@@ -161,7 +161,10 @@ export class InstallCommand extends Command {
161
161
  paymentLine = `You put the ${part.name} on the tray. The doc turns it over once, nods. "Part's good. Installation's on the house story-rate."`;
162
162
  }
163
163
  else if (actor.currency < aug.cost) {
164
- return `${aug.name} runs ${aug.cost} nuyen -- you're carrying ${actor.currency}. The doc doesn't do tabs on surgery.`;
164
+ return [
165
+ ...(identityLine ? [identityLine] : []),
166
+ `${aug.name} runs ${aug.cost} nuyen -- you're carrying ${actor.currency}. The doc doesn't do tabs on surgery.`,
167
+ ].join('\n');
165
168
  }
166
169
  else {
167
170
  actor.adjustCurrency(-aug.cost);
@@ -1840,8 +1840,9 @@ ${worldEventsSummary}
1840
1840
  ${wares.map(i => `- "${i.name}" (${priceOf(i)} nuyen)`).join('\n')}
1841
1841
  When a customer orders or agrees to buy, SERVE it in the same response: [COMMAND] give <item name> to <customer name>
1842
1842
  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.
1843
- 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.`
1844
- : '';
1843
+ 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.
1844
+ NEVER claim a sale is complete from dialogue alone -- no "here you go," no till chirping, no describing them pocketing anything, unless this SAME response also issues the [COMMAND] give line above. A sale without that command simply never happened, and the customer is left owning nothing while believing they bought something.`
1845
+ : `YOUR SHOP STOCK: you have NOTHING owner-tagged to you on the shelf/counter right now -- the list above is empty. If a customer asks to buy something, you do not have it to sell: say so honestly (out of stock, don't carry it, check back later), or point them at where they might actually find it. NEVER narrate handing over an item, taking payment, or a till settling for anything that isn't real stock -- there is nothing here to [COMMAND] give, so nothing changes hands no matter how the conversation reads.`;
1845
1846
  // SWAG OVER THE LINE (source.ts; the shop-stock lesson's remote
1846
1847
  // twin): a contact with a TRADE can order anything in their domain
1847
1848
  // through the network -- but only the order system closes a deal.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.147.0",
3
+ "version": "5.148.0",
4
4
  "type": "module",
5
5
  "summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
6
6
  "description": "A command line tool for scaffolding Meteor 3.x applications using React.",