player:shoplaw

Shop Law

Otherwise known as the player shop handbook. Where players learn how shopkeepers work in Nilgiri the Forgotten World — listing the room stock, valuing goods you carry, buying what is for sale, identifying listed items, and checking your balance at the keeper.

Listing goods for auction, bidding with offer, auction timers, fees, and how wins or returns are covered on Auction Law. Commerce needs a Banking Guild account (help auction). Immortal builders configure keepers under Creation Law — Shops; this page is the player-facing shop flow.

Related walkthroughs: Shopkeepers · Auction Law · Banking Guild · Postal Guild · Game Law (Economy)

Commands that only work in a shop room against a keeper with Acts.SHOPKEEPER (elsewhere they print the “not here” style refusal from CommandCommunication.cmdNotHere):

  • list — auctions and sales at this keeper
  • value — listing / postage quote for an item you carry (how listing spends that quote → Auction Law)
  • buy — purchase an item that is for sale (not mid-auction)
  • identify — examine a listed item's stats
  • balance — ask the keeper for your bank balance (same guild funds)
  • auction / offer — list goods and bid → Auction Law

Keepers only trade certain item types (armor, weapon, and so on). If the keeper refuses what you bring, try another specialist. Shop rows also store open/close hours for builders; player trade commands do not gate on those hours in the current runtime path.

Payment is from your Banking Guild account (carry a merchant note / have funds). In-game help demos often end command lines with with note.

A common visit: list the room, value something you might consign later, identify a listing you care about, buy what is for sale (or offer while it is still auctioning — see Auction Law), and balance if you want the keeper's short balance whisper.

list shows each stocked or consigned item with a short list index, hex item id, price in gc, name, and — while still in the auction window — time left and offer count. Produced shop stock (keeper inventory copies) may appear without an auction timer. Example:

> list
The armorer informs you of its auctions and sales:
1) #01A3EEB9 500gc : 'the golden eagle breast plate' (6 days offers:0)
2) #01A3F46D 123gc : 'a great golden eagle shield' (6 days offers:0)
3) #01A513D2 61gc : 'a pair of armored golden eagle leggings'
>

You may address items by list number (#1) or by the hex id (#01A513D2). Empty stock whispers: “I have nothing for auction or sale.” (MobileScript.shopkeeperActList).

Owner-listed items whose auction window has ended and that still have no buyer show remaining sale time as … sale) on the list line (Auction.list); those are buyable — see Buy below. Mid-auction bidding is on Auction Law.

Before you list, value <item> asks the keeper what listing will cost and what refundable shipping/handling deposit applies if you set a minimum selling price (so unsold goods can be mailed back). Example:

> inventory
You are carrying:
the golden eagle breast plate (soft aura)
a Banking Guild merchant note
a small sparkling diamond
a potion of youth
> value the plate
The armorer whispers to you, "I can list your plate for 6 gold coins. If you
require a minimum selling price then you will also be charged a refundable 101 gold
coins to cover shipping and handling fees for returned items."
>

The whisper formula is live from code (listing fee + shopMailCost(weight) for a minimum). help auction and current Constant.COST_AUCTION_LISTING = 0 mean the base listing is tax-covered; sample value demos may still show an older non-zero listing line. Always trust value on your item. How auction … minimum … spends that quote, and the full fee / timer table, are on Auction Law.

buy works only when the listing is for sale: either keeper-produced stock, or a player listing whose auction window has ended (and any bids have already resolved). Mid-auction items refuse buy with S.auctItemNoSale (“That item is for auction, not for sale.”). Example:

> list
The armorer informs you of its auctions and sales:
#01A51392 500gc : 'the golden eagle breast plate' (6 days offers:0)
#01A513CB 123gc : 'a great golden eagle shield' (6 days offers:1)
#01A513D2 61gc : 'a pair of armored golden eagle leggings'
> buy item #01a513d2 with note
Account #0000-1001 debited 61gc for purchase #01A513CB by Silk
Okay.
The armorer whispers to you, "That will be 61 coins, please."
You now have a pair of armored golden eagle leggings.
> list
The armorer informs you of its auctions and sales:
#01A51392 500gc : 'the golden eagle breast plate' (6 days offers:0)
#01A513CB 125gc : 'a great golden eagle shield' (6 days offers:1)
>

Same purchase by list number:

> buy item #1 with note
Account #0000-1001 debited 61gc for purchase #01A513CB by Silk
Okay.
The armorer whispers to you, "That will be 61 coins, please."
You now have a pair of armored golden eagle leggings.
>

(Snippet note: help demos show purchase hex #01A513CB on a buy of leggings #01a513d2 / list #1 — likely a help-demo paste inconsistency; live debit text uses the purchased item's id from Bank.buy. You now have … matches S.nowHave.)

Charisma can nudge the buy price slightly (code thresholds on Stat.CHARISMA): high CHA may shave a few percent; very low CHA may hike it. The keeper whispers the adjusted figure when it applies (S.discount / S.discountF for discounts; S.hike for low-CHA surcharges).

identify on a listed item (by list #n or hex id) prints type, AC, flags, wear slots, and modifiers. Live path announces COST_IDENTIFY (2 gold): “For %d gold, $n informs you:” (MobileScript.shopkeeperActIdentify). An older merchant-note lead-in still appears in some help demos:

> list
The armorer informs you of its auctions and sales:
1) #01A51392 500gc : 'the golden eagle breast plate' (6 days offers:0)
2) #01A513CB 123gc : 'a great golden eagle shield' (6 days offers:0)
3) #01A513D2 61gc : 'a pair of armored golden eagle leggings'
> identify item #01a513d2 with note
For the Banking Guild merchant note, the armorer informs you:
ARMOR
"a pair of armored golden eagle leggings"
AC apply: 8
ItemFlags    :
GLOW            MAGIC
Wear         :
TAKE            LEGS
Modifiers:
(0) STRENGTH +3
(1) HITROLL +2
--- Affects Modifiers ---
>

By list number:

> identify item #3 with note
For the Banking Guild merchant note, the armorer informs you:
ARMOR
"a pair of armored golden eagle leggings"
AC apply: 8
ItemFlags    :
GLOW            MAGIC
Wear         :
TAKE            LEGS
Modifiers:
(0) STRENGTH +3
(1) HITROLL +2
--- Affects Modifiers ---
>

Prefer the live “For 2 gold, …” cost line from code when identifying today; the item body above is the in-game help demo shape.

At a shopkeeper, balance asks the keeper for your Banking Guild balance (same funds as the bank). MobileScript.shopkeeperActBalance whispers: “Currently, your balance is <amount>.” The bank desk has a full balance transcript, but there is no separate shop-room balance help sample; the keeper whisper text below is from Java only (amount illustrative from the bank help ledger figure):

> balance
The armorer whispers to you, "Currently, your balance is 543."
>

For the full account ledger at a banker, see Banking Guild.

Handing goods to the keeper (auction), bidding (offer), auction / sale timers, listing fees, outbid refunds, wins, returns, and dumps are documented on Auction Law. help auction is the in-game help keyword for that market.

Builders create and save shop rows with @shop / @save shop under Creation Law — Shops. Players never use those commands — only the room commands above against a placed keeper.

  • player/shoplaw.txt
  • Last modified: 2026/09/23 22:22
  • by 127.0.0.1