docs(wiki,sdk): shop-page coordinates, decoy-furnace learning, disconnectAfter doc

From the GLM 5.3 zero-score run analysis (rs-bench2 2026-08-14):

- generate-shops.ts now emits a Coordinates row from owner NPC map
  spawns, so agents can walk to a shop instead of sweeping the area
  name (Dommik wild-goose chase). 105/117 pages gain coordinates.
- learnings/smithing.md sample used the bare nearest-name furnace
  match that selects the inert decoy loc; now uses {withOption}.
- runner.ts disconnectAfter docstring claimed default false; the
  actual default is true for runner-opened connections, which is
  what tears down a shared MCP client.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
max bittkerandClaude Fable 5 committed 2026-08-14 18:04:16 -04:00
1 parent a868401408
commit 2ae032c998
108 files changed
+223 -9

No files matched your search

+7 -6
View File
@@ -6,16 +6,17 @@ Bronze bars require **1 copper ore + 1 tin ore** smelted at a furnace.
### How to Smelt
Some furnace variants expose a `Smelt` option and others require using ore on
the furnace. Inspect `optionsWithIndex` first; using ore on the furnace is the
Some furnace spots pair the real furnace with an inert, option-less decoy loc
one tile away — a bare name match can pick the decoy and smelt nothing, with no
error. Use `{withOption}` to get the real one. Using ore on the furnace is the
portable low-level fallback:
```typescript
const state = sdk.getState();
if (!state) throw new Error('No world state');
const copper = state.inventory.find(i => /copper ore/i.test(i.name));
const furnace = state.nearbyLocs.find(l => /furnace/i.test(l.name));
if (!copper || !furnace) throw new Error('Copper ore and a nearby furnace are required');
const furnace = sdk.findNearbyLoc(/furnace/i, { withOption: /smelt/i });
if (!copper || !furnace) throw new Error('Copper ore and a usable nearby furnace are required');
await sdk.sendUseItemOnLoc(copper.slot, furnace.x, furnace.z, furnace.id);
await sdk.waitForCondition(
next => next.inventory.some(item => /bronze bar/i.test(item.name)),
@@ -31,8 +32,8 @@ await sdk.waitForCondition(
### Furnace Locations
| Location | Coordinates | Furnace IDs | Notes |
|----------|-------------|-------------|-------|
| Lumbridge furnace | (3225, 3256) | 2785, 2781 | Right next to spawn, reliable.
| Al Kharid furnace | (3273, 3184) | 2785, 2781 | Needs 10gp toll gate.
| Lumbridge furnace | (3225, 3256) | 2785, 2781 | Right next to spawn, reliable. 2781 has `Smelt`; 2785 is a decoy.
| Al Kharid furnace | (3273, 3184) | 2785, 2781 | Needs 10gp toll gate. 2781 has `Smelt`; 2785 is a decoy.
### Anvil Locations
+7 -1
View File
@@ -32,7 +32,13 @@ export interface RunOptions {
connection?: { bot: BotActions; sdk: BotSDK };
/** Connect if not connected (default: true) */
autoConnect?: boolean;
/** Disconnect when done (default: false) */
/**
* Disconnect the bot when the script finishes (default: true when the
* runner opened the connection itself, false when one was passed via
* `connection`). Pass `false` to keep the connection alive after the
* script exits — e.g. when an MCP server or another process shares this
* bot and a disconnect would leave it stale.
*/
disconnectAfter?: boolean;
/**
* Print a short state summary after execution (default: true) -
+104 -2
View File
@@ -200,6 +200,73 @@ interface ObjInfo {
cost: number;
}
// ─── Parser: Pack File + Map Spawns (mirrors generate-npcs.ts) ───────────────
interface SpawnLocation {
globalX: number;
globalZ: number;
level: number;
}
function parseNpcPackIdToName(content: string): Map<number, string> {
const idToName = new Map<number, string>();
for (const line of content.split('\n')) {
const eqIdx = line.indexOf('=');
if (eqIdx === -1) continue;
const id = parseInt(line.slice(0, eqIdx));
const name = line.slice(eqIdx + 1).trim();
if (!isNaN(id) && name) idToName.set(id, name);
}
return idToName;
}
function parseMapSpawns(
mapsDir: string,
npcIdToName: Map<number, string>
): Map<string, SpawnLocation[]> {
const spawns = new Map<string, SpawnLocation[]>();
const mapFiles = readdirSync(mapsDir).filter(f => f.endsWith('.jm2'));
for (const file of mapFiles) {
const match = file.match(/^m(\d+)_(\d+)\.jm2$/);
if (!match) continue;
const mapX = parseInt(match[1]);
const mapZ = parseInt(match[2]);
const content = readFileSync(join(mapsDir, file), 'utf-8');
const npcSectionStart = content.indexOf('==== NPC ====');
if (npcSectionStart === -1) continue;
const afterNpc = content.slice(npcSectionStart + '==== NPC ===='.length);
const nextSection = afterNpc.indexOf('====');
const npcBlock = nextSection === -1 ? afterNpc : afterNpc.slice(0, nextSection);
for (const line of npcBlock.split('\n')) {
const trimmed = line.trim();
if (!trimmed) continue;
// Format: level localX localZ: npcID
const m = trimmed.match(/^(\d+)\s+(\d+)\s+(\d+):\s*(\d+)$/);
if (!m) continue;
const level = parseInt(m[1]);
const localX = parseInt(m[2]);
const localZ = parseInt(m[3]);
const npcId = parseInt(m[4]);
const configName = npcIdToName.get(npcId);
if (!configName) continue;
if (!spawns.has(configName)) spawns.set(configName, []);
spawns.get(configName)!.push({
globalX: mapX * 64 + localX,
globalZ: mapZ * 64 + localZ,
level,
});
}
}
return spawns;
}
function parseObjConfigsFull(content: string): Map<string, ObjInfo> {
const items = new Map<string, ObjInfo>();
let currentName = '';
@@ -354,6 +421,16 @@ function main() {
}
console.log(` Loaded ${objData.size} items`);
// ─── Step 3b: Owner NPC spawn coordinates ───────────────────────────
console.log('\nStep 3b: Loading owner NPC spawn coordinates...');
const npcIdToName = parseNpcPackIdToName(
readFileSync(join(CONTENT_DIR, 'pack', 'npc.pack'), 'utf-8')
);
const npcSpawns = parseMapSpawns(join(CONTENT_DIR, 'maps'), npcIdToName);
console.log(` Map spawns: ${npcSpawns.size} NPCs with spawn data`);
// ─── Step 4: Build shop pages ───────────────────────────────────────
console.log('\nStep 4: Building shop pages...');
@@ -396,7 +473,7 @@ function main() {
const fileName = `${slug}.md`;
const filePath = join(SHOP_DIR, fileName);
const md = generateShopMarkdown(page, objData);
const md = generateShopMarkdown(page, objData, npcSpawns);
writeFileSync(filePath, md);
pageIndex.push({ name: page.shopTitle, file: fileName, location: page.location });
@@ -414,7 +491,11 @@ function main() {
// ─── Generate Markdown ───────────────────────────────────────────────────────
function generateShopMarkdown(page: ShopPage, objData: Map<string, ObjInfo>): string {
function generateShopMarkdown(
page: ShopPage,
objData: Map<string, ObjInfo>,
npcSpawns: Map<string, SpawnLocation[]>,
): string {
const lines: string[] = [];
const primaryOwner = page.owners[0];
@@ -442,6 +523,27 @@ function generateShopMarkdown(page: ShopPage, objData: Map<string, ObjInfo>): st
}
lines.push(`| **Location** | ${page.location} |`);
// Owner spawn coordinates, so agents can walk straight to the shop
// instead of guessing from the area name alone.
const coordParts: string[] = [];
for (const owner of page.owners) {
const spawns = npcSpawns.get(owner.npcConfigName);
if (!spawns || spawns.length === 0) continue;
const samples = new Set<string>();
for (const spawn of spawns) {
const floor = spawn.level > 0 ? ` L${spawn.level}` : '';
samples.add(`(${spawn.globalX}, ${spawn.globalZ})${floor}`);
}
const sorted = [...samples].sort();
const overflow = sorted.length > 6 ? `, +${sorted.length - 6} more` : '';
const label = page.owners.length > 1 ? `${owner.npcDisplayName}: ` : '';
coordParts.push(`${label}${sorted.slice(0, 6).join(', ')}${overflow}`);
}
if (coordParts.length > 0) {
lines.push(`| **Coordinates** | ${coordParts.join('; ')} |`);
}
lines.push(`| **Type** | ${page.isGeneralStore ? 'General Store' : 'Specialty Shop'} |`);
lines.push('');
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Armour salesman](../npcs/armour-salesman.md) |
| **Location** | Minigames |
| **Coordinates** | (2667, 3436) |
| **Type** | Specialty Shop |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Aemad](../npcs/aemad.md), [Kortan](../npcs/kortan.md) |
| **Location** | East Ardougne |
| **Coordinates** | Aemad: (2613, 3294); Kortan: (2615, 3292) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Al Kharid |
| **Coordinates** | Shop keeper: (3316, 3184); Shop assistant: (3316, 3182) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Baker](../npcs/baker.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2654, 3311), (2669, 3310) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fur trader](../npcs/fur-trader.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2666, 3295) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gem merchant](../npcs/gem-merchant.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2669, 3303) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Silver merchant](../npcs/silver-merchant.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2658, 3316) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Spice seller](../npcs/spice-seller.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2658, 3296) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Arhein](../npcs/arhein.md) |
| **Location** | Catherby |
| **Coordinates** | (2803, 3430) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md) |
| **Location** | Combat Training Camp |
| **Coordinates** | (2514, 3385) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Aubury](../npcs/aubury.md) |
| **Location** | Varrock |
| **Coordinates** | (3253, 3402) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Tribal Weapon Salesman](../npcs/tribal-weapon-salesman.md) |
| **Location** | Minigames |
| **Coordinates** | (2661, 3419) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Noterazzo](../npcs/noterazzo.md) |
| **Location** | Wilderness |
| **Coordinates** | (3025, 3701) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Barker](../npcs/barker.md) |
| **Location** | Canifis |
| **Coordinates** | (3499, 3506) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Bedabin Nomad](../npcs/bedabin-nomad.md) |
| **Location** | Desert |
| **Coordinates** | (3159, 3042), (3160, 3039), (3163, 3035), (3169, 3030), (3172, 3031), (3173, 3035), +2 more |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Betty](../npcs/betty.md) |
| **Location** | Port Sarim |
| **Coordinates** | (3012, 3259) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Barman](../npcs/barman.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2417, 3498) L1, (2482, 3487) L1, (2482, 3489) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Bob](../npcs/bob.md) |
| **Location** | Lumbridge |
| **Coordinates** | (3232, 3203) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Bolkoy](../npcs/bolkoy.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2527, 3161) L1 |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Brian](../npcs/brian.md) |
| **Location** | Port Sarim |
| **Coordinates** | (3028, 3250) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Wistan](../npcs/wistan.md) |
| **Location** | Quests |
| **Coordinates** | (2928, 3546) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Candle maker](../npcs/candle-maker.md) |
| **Location** | Catherby |
| **Coordinates** | (2800, 3439) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Cassie](../npcs/cassie.md) |
| **Location** | Falador |
| **Coordinates** | (2979, 3383) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Ogre trader](../npcs/ogre-trader.md) |
| **Location** | Yanille |
| **Coordinates** | (2518, 3035) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Bow and Arrow salesman](../npcs/bow-and-arrow-salesman.md) |
| **Location** | Minigames |
| **Coordinates** | (2673, 3434) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Davon](../npcs/davon.md) |
| **Location** | Brimhaven |
| **Coordinates** | (2803, 3152) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Diango](../npcs/diango.md) |
| **Location** | Draynor Village |
| **Coordinates** | (3079, 3250) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Dommik](../npcs/dommik.md) |
| **Location** | Al Kharid |
| **Coordinates** | (3322, 3194) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Drogo dwarf](../npcs/drogo-dwarf.md) |
| **Location** | Falador |
| **Coordinates** | (3036, 9846) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Dwarf](../npcs/dwarf.md) |
| **Location** | Falador |
| **Coordinates** | (2993, 9828) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Edgeville |
| **Coordinates** | Shop keeper: (3080, 3511); Shop assistant: (3081, 3511) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Falador |
| **Coordinates** | Shop keeper: (2957, 3386); Shop assistant: (2955, 3389) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fancy dress shop owner](../npcs/fancy-dress-shop-owner.md) |
| **Location** | Varrock |
| **Coordinates** | (3281, 3398) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fernahei](../npcs/fernahei.md) |
| **Location** | Shilo Village |
| **Coordinates** | (2870, 2972) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Rometti](../npcs/rometti.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2482, 3510) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Roachey](../npcs/roachey.md) |
| **Location** | Skill Fishing |
| **Coordinates** | (2596, 3400) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Flynn](../npcs/flynn.md) |
| **Location** | Falador |
| **Coordinates** | (2951, 3386) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Wydin](../npcs/wydin.md) |
| **Location** | Port Sarim |
| **Coordinates** | (3014, 3204) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fish monger](../npcs/fish-monger.md) |
| **Location** | Quests |
| **Coordinates** | (2646, 3675) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fur trader](../npcs/fur-trader.md) |
| **Location** | Quests |
| **Coordinates** | (2640, 3675) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Frenita](../npcs/frenita.md) |
| **Location** | Yanille |
| **Coordinates** | (2566, 3098) |
| **Type** | Specialty Shop |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Frincos](../npcs/frincos.md) |
| **Location** | Entrana |
| **Coordinates** | (2808, 3342) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Heckel Funch](../npcs/heckel-funch.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2493, 3488) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gaius](../npcs/gaius.md) |
| **Location** | Taverley |
| **Coordinates** | (2885, 3449) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gem trader](../npcs/gem-trader.md) |
| **Location** | Al Kharid |
| **Coordinates** | (3288, 3212) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fidelio](../npcs/fidelio.md) |
| **Location** | Canifis |
| **Coordinates** | (3475, 3497) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gerrant](../npcs/gerrant.md) |
| **Location** | Port Sarim |
| **Coordinates** | (3013, 3225) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gnome Waiter](../npcs/gnome-waiter.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2448, 3503) L1, (2450, 3503) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Hudo](../npcs/hudo.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2448, 3509) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Ogre merchant](../npcs/ogre-merchant.md) |
| **Location** | Yanille |
| **Coordinates** | (2528, 3048) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Grum](../npcs/grum.md) |
| **Location** | Port Sarim |
| **Coordinates** | (3013, 3248) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Gulluck](../npcs/gulluck.md) |
| **Location** | Tree Gnome Stronghold |
| **Coordinates** | (2468, 3487) L2 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Helemos](../npcs/helemos.md) |
| **Location** | Heroes' Guild |
| **Coordinates** | (2894, 3510) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Harry](../npcs/harry.md) |
| **Location** | Catherby |
| **Coordinates** | (2834, 3445) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Peksa](../npcs/peksa.md) |
| **Location** | Barbarian Village |
| **Coordinates** | (3076, 3429) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Herquin](../npcs/herquin.md) |
| **Location** | Falador |
| **Coordinates** | (2944, 3334) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Hickton](../npcs/hickton.md) |
| **Location** | Catherby |
| **Coordinates** | (2822, 3442) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Horvik](../npcs/horvik.md) |
| **Location** | Varrock |
| **Coordinates** | (3229, 3438) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Irksol](../npcs/irksol.md) |
| **Location** | Zanaris |
| **Coordinates** | (3247, 9589) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Jakut](../npcs/jakut.md) |
| **Location** | Zanaris |
| **Coordinates** | (3252, 9572) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Jatix](../npcs/jatix.md) |
| **Location** | Taverley |
| **Coordinates** | (2899, 3427) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Jiminua](../npcs/jiminua.md) |
| **Location** | Karamja |
| **Coordinates** | (2767, 3122) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Karamja |
| **Coordinates** | Shop keeper: (2902, 3146); Shop assistant: (2902, 3150) |
| **Type** | General Store |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Zambo](../npcs/zambo.md) |
| **Location** | Karamja |
| **Coordinates** | (2925, 3143) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2641, 3171), (2655, 3152) |
| **Type** | General Store |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fionella](../npcs/fionella.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2725, 3378) L1 |
| **Type** | General Store |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Siegfried Erkle](../npcs/siegfried-erkle.md) |
| **Location** | East Ardougne |
| **Coordinates** | (2725, 3381) L2 |
| **Type** | Specialty Shop |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Louie legs](../npcs/louie-legs.md) |
| **Location** | Al Kharid |
| **Coordinates** | (3316, 3175) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Lowe](../npcs/lowe.md) |
| **Location** | Varrock |
| **Coordinates** | (3232, 3423) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Lumbridge |
| **Coordinates** | Shop keeper: (3209, 3247); Shop assistant: (3212, 3247) |
| **Type** | General Store |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Lundail](../npcs/lundail.md) |
| **Location** | Mage Arena |
| **Coordinates** | (2534, 4719) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Chamber guardian](../npcs/chamber-guardian.md) |
| **Location** | Mage Arena |
| **Coordinates** | (2508, 4696) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Magic Store owner](../npcs/magic-store-owner.md) |
| **Location** | Yanille |
| **Coordinates** | (2595, 3087) L1 |
| **Type** | Specialty Shop |
## Stock
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Nulodion](../npcs/nulodion.md) |
| **Location** | Quests |
| **Coordinates** | (3011, 3453) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Nurmof](../npcs/nurmof.md) |
| **Location** | Falador |
| **Coordinates** | (2998, 9844) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Obli](../npcs/obli.md) |
| **Location** | Shilo Village |
| **Coordinates** | (2824, 2959) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Oziach](../npcs/oziach.md) |
| **Location** | Edgeville |
| **Coordinates** | (3069, 3517) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Quartermaster](../npcs/quartermaster.md) |
| **Location** | Quests |
| **Coordinates** | (2194, 3140) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Ranael](../npcs/ranael.md) |
| **Location** | Al Kharid |
| **Coordinates** | (3316, 3164) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Thora the Barkeep](../npcs/thora-the-barkeep.md) |
| **Location** | Quests |
| **Coordinates** | (2662, 3673) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Rimmington |
| **Coordinates** | Shop keeper: (2947, 3216); Shop assistant: (2948, 3216) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Rommik](../npcs/rommik.md) |
| **Location** | Rimmington |
| **Coordinates** | (2946, 3205) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Rufus](../npcs/rufus.md) |
| **Location** | Canifis |
| **Coordinates** | (3507, 3496) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Scavvo](../npcs/scavvo.md) |
| **Location** | Varrock |
| **Coordinates** | (3191, 3351) L1 |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shantay](../npcs/shantay.md) |
| **Location** | Desert |
| **Coordinates** | (3304, 3123) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fadli](../npcs/fadli.md) |
| **Location** | Minigames |
| **Coordinates** | (3383, 3269) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Sigmund The Merchant](../npcs/sigmund-the-merchant.md) |
| **Location** | Quests |
| **Coordinates** | (2641, 3680) |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Skulgrimen](../npcs/skulgrimen.md) |
| **Location** | Quests |
| **Coordinates** | (2663, 3694) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Tamayu](../npcs/tamayu.md) |
| **Location** | Quests |
| **Coordinates** | (2800, 3057) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Jossik](../npcs/jossik.md) |
| **Location** | Quests |
| **Coordinates** | (2509, 3639) L1 |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Alfonse the waiter](../npcs/alfonse-the-waiter.md) |
| **Location** | Brimhaven |
| **Coordinates** | (2793, 3188) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Tostig](../npcs/tostig.md), [Sam](../npcs/sam.md), [Rachael](../npcs/rachael.md) |
| **Location** | Quests |
| **Coordinates** | Tostig: (2906, 3537); Sam: (2201, 4942); Rachael: (2207, 4958) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Thessalia](../npcs/thessalia.md) |
| **Location** | Varrock |
| **Coordinates** | (3204, 3417) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Tiadeche](../npcs/tiadeche.md) |
| **Location** | Quests |
| **Coordinates** | (2781, 3057) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Fat tony](../npcs/fat-tony.md) |
| **Location** | Wilderness |
| **Coordinates** | (3036, 3707) |
| **Type** | Specialty Shop |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Valaine](../npcs/valaine.md) |
| **Location** | Varrock |
| **Coordinates** | (3193, 3361) L1 |
| **Type** | General Store |
## Stock
+1
View File
@@ -4,6 +4,7 @@
|---|---|
| **Owner** | [Shop keeper](../npcs/shop-keeper.md), [Shop assistant](../npcs/shop-assistant.md) |
| **Location** | Varrock |
| **Coordinates** | Shop keeper: (3218, 3415); Shop assistant: (3217, 3411) |
| **Type** | General Store |
## Stock
Loaded 100 of 108 files, more files were not shown because too many files have changed in this diff. Show more