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)
At a shopkeeper
Commands that only work in a shop room against a keeper with Acts.SHOPKEEPER (elsewhere they print the “not here” style refusal from Command → Communication.cmdNotHere):
list— auctions and sales at this keepervalue— 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 statsbalance— ask the keeper for your bank balance (same guild funds)
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.
Typical shop flow
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
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.
Value
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
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
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.
Balance
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.
Auction and offers
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.
Immortal contrast
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.
Related
- Auction Law — list for sale, bid, lifecycle, fees, delivery
- Shopkeepers — shorter command demos
- Banking Guild — accounts and notes
- Postal Guild — receive auction wins / returns
- Game Law — economy hub
- Creation Law — Shops — immortal shop build