Skip to content

Player Trading

Player trading shipped with protocol v30. It’s a direct player-to-player exchange of items and gold, a completely separate system from haggling with an LLM merchant (see Shops & economy).

In chat:

/trade <name>
  • The target gets an invite toast, using the same consent flow as /party — a 30 second TTL, up to 5 pending requests at once, and a declined request stays around until its TTL expires. Anyone on your /block list has their trade requests refused automatically.
  • Proximity isn’t just an entry condition — it’s a standing one. Moving out of range during a trade cancels the whole session. This keeps trading a visible, physical act and makes spamming invites from a distance pointless.
  • Each player can only have one trade session open at a time.

Clicking someone else’s laid-out stall does not open the player-trade window this page describes — that path never actually worked (the merchant class is operator-only, so no player stall ever existed to click). Protocol v68 removed it and replaced it with a consignment stall that actually does something: buy a Peddler’s Stall, use it to spread the same table an NPC lays with /lay_stall, and price bag items onto it. Customers just pay the marked price — no haggling, and none of the lock-then-confirm steps /trade uses.

  • The item is never consumed. Use it once to set up, use it again to pack up, the same toggle a tip hat uses.
  • Listed items stay in your bag as a soft reservation — selling, dropping, using, equipping, or trading them is blocked until they’re unlisted or sold, and you carry their weight the whole time. Up to 12 listings at once.
  • The Peddler’s Stall item holding the table up can’t itself be listed, sold, or dropped — selling it would leave a table with no way to fold back up.
  • Every sale burns a 5% sales tax off the seller’s take; the buyer still pays exactly the marked price.
  • The owner has to stay within 10 meters of the stall, or it packs itself up automatically — changing floor or logging out does too.
  • The owner can write a sign of up to 32 characters, always with their name underneath; /mute hides and blocks setting it, and a /block target’s sign is hidden only from the blocker.
  • NPCs never buy from a stall.

The whole design exists to stop the classic swap-it-at-the-last-second scam — showing a legendary weapon, then pulling it for a wooden sword the instant the other side clicks accept.

  • Each side goes through two stages: lock, then confirm. Changing the offer at any point resets both sides’ confirmations — once locked, the contents can’t move, so “confirmed” is guaranteed to mean “what you actually saw.”
  • Every offer change bumps a revision number. A confirm packet must carry the revision it saw, and the server refuses a confirm quoting a stale one — this closes the race where a click sent before a reset notice arrives could otherwise sneak through.
  • Offer state is sent as a full snapshot on every change, never a delta, so losing a single packet can’t leave the two sides’ screens permanently out of sync.

An item’s enchant level (+7 Iron Sword) is written directly into its name inside the trade window, and listed again on the confirmation screen. A +0 and a +7 look identical in icon and model — if the enchant number only showed up in a tooltip, someone rushing to close a deal would rarely check it. That’s the cleanest scam path there is, so the number is put in front of the player instead of relying on them to go looking for it.

  • Partial stacks are supported, through the same click-and-quantity input used elsewhere — not drag-and-drop.
  • A stack’s unit is item plus enchant level, so differently-enchanted copies of the same item never get merged into one line.
  • Gold uses the same free-form input as tipping a busker’s hat — 1g20s30c, 2s, or a bare number read as copper (see Music & the bard).
  • Before locking, Esc closes the trade window normally.
  • After locking, Esc does nothing — a trade that far along needs an explicit cancel button, so a reflexive keypress can’t blow up a negotiation that’s already serious.
  • Moving out of range, logging out or disconnecting, and dying all cancel the session immediately.
  • Combat does not cancel a trade — otherwise landing one hit on the other party would be enough to force a session closed, which is far too easy to grief with.
  • If both sides just go quiet, the window stays open until someone confirms or an idle timeout (on the order of minutes, refreshed by any activity) closes it.

Items on the table stay in your bag (soft reservation)

Section titled “Items on the table stay in your bag (soft reservation)”

Placing an item in the offer doesn’t move it out of your bag — it just gets flagged as softly reserved:

  • Selling, dropping, using, or equipping a reserved item is refused by the server for as long as the trade is open.
  • Bulk, definition-keyed actions like “sell all” or “drop all” are refused entirely while a trade is open, rather than trying to work around the reserved units — the error tells you to finish the trade first.
  • A laid-out busker’s hat counts as reserved too; pick it back up before trading it away.
  • A completed trade moves everything all at once, or not at all: if either side goes over their carry weight or their state changed after confirming, the whole trade aborts and both sides are told why. A successful trade is written to the database immediately — not on the usual periodic save — and only reported as a success once that write finishes. Both sides also get a private line in their chat log recording what changed hands.
  • Equipped items can’t be placed on the table — unequip first.
  • The three starting weapons — the Worn Iron Sword, Worn Torch, and Worn Mandolin — are explicitly marked untradeable, so free starting gear can’t be funneled between characters for gold.
  • There’s no minimum level restriction — trading is fully open, the same as trading with a merchant.
  • NPCs never take part in a player trade — the server refuses any trade request aimed at one outright, which also closes off leaking an NPC’s issued gear (like guard Karl’s spear) through the trade window.
  • A locked item can’t be placed on the trade table — unlock it first. See Item locks.