import type { LanternWakeBox } from './lanternWake.js'; export declare const TOLL_ROAD_NAME = "The Toll Road"; export declare const TOLL_HOUSE_NAME = "The Ridge Toll House"; /** The outpost's ground, west of the Fishery road (x 788-796 is the verge and stays clear) and south of the cutting's west ridge (to z 480). */ export declare const TOLL_HOUSE: LanternWakeBox; /** The track from the outpost out to the road (surface only: no entity may stand within 4 of x 792). */ export declare const TOLL_HOUSE_LINK: { readonly minX: 787; readonly maxX: 791; readonly minZ: 489; readonly maxZ: 491; }; export type TollRoadProp = { id: string; kind: 'dreadmodel' | 'dreadprop' | 'campfire' | 'barrel' | 'logpile' | 'bountyboard'; style: string; x: number; z: number; scale?: number; }; /** The outpost's pieces: a cook's tent and fire, the Bounty Board on the track side, stores, benches and lanterns. */ export declare const TOLL_HOUSE_PIECES: readonly TollRoadProp[]; /** The signs. The Highstone, Webfen and Gullhook signs are the only things that join those places to this road. */ export declare const TOLL_ROAD_SIGNS: ReadonlyArray<{ id: string; x: number; z: number; text: string; }>; /** Standable tiles (teleport links, smokes). */ export declare const TOLL_ROAD_STANDS: { readonly house: { readonly x: 777; readonly z: 490; }; readonly road: { readonly x: 792; readonly z: 490; }; readonly stile: { readonly x: 816; readonly z: 470; }; readonly hollow: { readonly x: 836; readonly z: 485; }; readonly wagon: { readonly x: 800; readonly z: 436; }; readonly pond: { readonly x: 807; readonly z: 490; }; readonly hatch: { readonly x: 754; readonly z: 449; }; readonly cellar: { readonly x: number; readonly z: 551; }; }; export declare const TOLL_WARDEN_KIND = "tollwarden"; export declare const TOLL_WARDEN_NAME = "Toll-Warden Ansel Pike"; export declare const TOLL_WARDEN: { readonly id: "tr-warden"; readonly kind: "tollwarden"; readonly name: "Toll-Warden Ansel Pike"; readonly x: 779; readonly z: 489; readonly faceX: 786; readonly faceZ: 491; readonly leash: 1; }; export declare const RIDGE_INFORMER_KIND = "ridgeinformer"; export declare const RIDGE_INFORMER_NAME = "Whisper Pim"; export declare const RIDGE_INFORMER: { readonly id: "tr-informer"; readonly kind: "ridgeinformer"; readonly name: "Whisper Pim"; readonly x: 807; readonly z: 490; readonly faceX: 803; readonly faceZ: 488; readonly leash: 1; }; export declare function isTollRoadFolkKind(kind: string): boolean; /** What a click says when it is not a talk (never an attack). */ export declare const TOLL_ROAD_FOLK_LINES: Readonly>; export type RedcapCamp = { id: string; name: string; box: LanternWakeBox; /** The ground the camp holds: its footpads and archers rush anyone inside it (a box a little wider than the camp's). */ hold: LanternWakeBox; redcaps: ReadonlyArray<{ x: number; z: number; }>; archers: ReadonlyArray<{ x: number; z: number; }>; pieces: readonly TollRoadProp[]; }; /** Stile Camp: the toll camp, where the road's coin is counted. */ export declare const STILE_CAMP: RedcapCamp; /** Hollow Camp: the dip where the payroll was cached. */ export declare const HOLLOW_CAMP: RedcapCamp; export declare const REDCAP_CAMPS: readonly RedcapCamp[]; /** The camps' footpads and archers walk with these ids so a death, a respawn and the aggro tick can tell them from the yard's. */ export declare const TOLL_CAMP_ID_PREFIX = "trc-"; /** The camp whose hold a creature of this spawn tile belongs to, or null. */ export declare function redcapCampAt(x: number, z: number): RedcapCamp | null; /** True when the player stands inside the hold of the camp the creature (spawned at sx, sz) keeps. */ export declare function inOwnCampHold(sx: number, sz: number, px: number, pz: number): boolean; /** The wagon wreck at the road's east verge (dressing, not a quest prop): the trail starts beside it. */ export declare const PAYROLL_WAGON: { readonly id: "tr-payroll-wagon"; readonly kind: "dreadmodel"; readonly style: "fishcartwreck-e"; readonly x: 800; readonly z: 434; }; export type TollQuestProp = { id: string; x: number; z: number; style: string; }; export declare const TR_PROP: { readonly tally: "tolltally"; readonly tracks: "tolltracks"; readonly chest: "tollpayroll"; readonly drop: "tolldrop"; readonly book: "tollbook"; }; /** The three tally boards (quest 1): at the Toll House, east of the road by the pond, and at Stile Camp's gate. */ export declare const TR_TALLY_HOUSE: TollQuestProp; export declare const TR_TALLY_POND: TollQuestProp; export declare const TR_TALLY_STILE: TollQuestProp; export declare const TR_TALLIES: readonly TollQuestProp[]; /** The five sets of cart tracks, from the wagon to Hollow Camp (the trail skirts Stile Camp's north-east corner). Touch them in order. */ export declare const TR_TRACKS: readonly TollQuestProp[]; export declare const TR_TRACKS_ORDER: readonly string[]; /** The cached payroll in Hollow Camp: a strongbox by the tent (gives the satchel). */ export declare const TR_PAYROLL_CHEST: TollQuestProp; /** The dead drop by the pond: a hollow stump (gives the cellar key). */ export declare const TR_DEAD_DROP: TollQuestProp; /** The Captain's toll book on his table in the cellar hall (quest 4). */ export declare const TR_TOLL_BOOK: TollQuestProp; export declare const TOLL_ROAD_QUEST_PROPS: readonly TollQuestProp[]; /** The surface props (everything except the cellar's book, which the cellar's carve places underground). */ export declare const TOLL_ROAD_SURFACE_QUEST_PROPS: readonly TollQuestProp[]; /** The kit model a Toll Road quest prop draws with (CAPITAL_BUILDING_MODELS stand-ins), or null if not one of them. */ export declare function tollRoadPropModel(prop: string): string | null; export declare const TOLL_ROAD_QUEST_PROP_NAMES: Readonly>; /** What a prop says when no step wants it. */ export declare const TOLL_ROAD_PROP_IDLE_LINES: Readonly>; export declare const TOLL_ROAD_WRONG_TRACKS_NOTICE = "These are not the tracks you were following: the ruts here belong to a lighter cart. Go back to the wagon and pick the trail up again, in order."; export declare const PAYROLL_SATCHEL_KIND = "payrollsatchet"; export declare const CELLAR_KEY_KIND = "cellarkey"; export declare const TOLL_ROAD_QUEST_ITEM_KINDS: readonly string[]; export declare const TOLL_ROAD_QUEST_ITEM_NAMES: Readonly>; export declare const TOLL_ROAD_QUEST_ITEM_NOTES: Readonly>; /** The hatch in the Ridge yard (a `caveentrance`, kit stair model facing south; the standard gate asks Combat + the key) and where it lands you. */ export declare const RIDGE_CELLAR_MOUTH: { readonly x: 754; readonly z: 447; readonly style: "wlhaltstair-s"; }; export declare const RIDGE_CELLAR_OUTSIDE: { readonly x: 754; readonly z: 449; }; export declare const RIDGE_CELLAR_COMBAT_LEVEL = 22; export declare const CELLAR_CX: number; /** The rooms, south to north: the stair vestibule, the store room (guards), a short passage, the Captain's hall. Raw strip tiles. */ export declare const CELLAR_VESTIBULE: { readonly cx: number; readonly minZ: 547; readonly maxZ: 555; readonly halfW: 3; readonly floor: "stair-vestibule"; }; export declare const CELLAR_STORE: { readonly cx: number; readonly minZ: 536; readonly maxZ: 546; readonly halfW: 6; readonly floor: "guard-post"; readonly props: "guard-supplies"; }; export declare const CELLAR_PASSAGE: { readonly cx: number; readonly minZ: 532; readonly maxZ: 535; readonly halfW: 2; readonly floor: "worked-flagstone"; }; export declare const CELLAR_HALL: { readonly cx: number; readonly minZ: 514; readonly maxZ: 531; readonly halfW: 8; readonly floor: "worked-flagstone"; readonly props: "guard-supplies"; }; /** The way back up (the same kit stair, facing north, in the vestibule's south end) and where a player arrives. */ export declare const RIDGE_CELLAR_EXIT: { readonly x: number; readonly z: 556; readonly style: "wlhaltstair-n"; }; export declare const RIDGE_CELLAR_ENTRY: { readonly x: number; readonly z: 551; }; /** The whole cellar (for the aggro rule, the quest's reach step and the isLowerKingdoms mapping). */ export declare const RIDGE_CELLAR_BOX: { readonly minX: number; readonly maxX: number; readonly minZ: 512; readonly maxZ: 560; }; export declare function inRidgeCellar(x: number, z: number): boolean; /** The Captain's hall, where the quest's reach step lands. */ export declare const RIDGE_CELLAR_HALL_AREA: { readonly minX: number; readonly maxX: number; readonly minZ: 514; readonly maxZ: 531; }; /** Which end of the hatch a `caveentrance` is: 'down' the yard's hatch, 'up' the cellar's stair; null for anything else (the Forge Halt's stairs share the model). */ export type RidgeCellarDoor = 'down' | 'up'; export declare function ridgeCellarDoorEnd(style: string | undefined, x: number, z: number): RidgeCellarDoor | null; /** Which end of the hatch a `caveentrance` style is, by style alone (the client has no tile at hand; the kit stair's other style, -e, is the Forge Halt's). */ export declare function ridgeCellarStyleEnd(style: string | undefined): RidgeCellarDoor | null; export declare const RIDGE_CELLAR_DOWN_LABEL = "Lift the cellar hatch"; export declare const RIDGE_CELLAR_UP_LABEL = "Climb up to the Ridge yard"; export declare const RIDGE_CELLAR_DOWN_TEXT = "You lift the hatch and go down the cellar stair. Cold stone, lamp oil and a smell of old cheese and gun-metal. Somebody down here is counting."; export declare const RIDGE_CELLAR_UP_TEXT = "You climb up into the Ridge yard and the daylight. The Redcaps are still where you left them."; export declare const RIDGE_CELLAR_DOWN_TITLE = "The Ridge Cellar"; export declare const RIDGE_CELLAR_UP_TITLE = "The Ridge Yard"; /** The cellar's guards: the Ridge's own footpads and an archer in the store room, one archer in the hall. They hold the rooms they stand in. */ export declare const CELLAR_GUARD_ID_PREFIX = "trk-"; export declare const CELLAR_REDCAPS: ReadonlyArray<{ x: number; z: number; }>; export declare const CELLAR_ARCHERS: ReadonlyArray<{ x: number; z: number; }>; /** The Redcap Captain: a boss in the hall, one telegraphed blow (bossSignatures.ts `toll-cleave`), back after four minutes. */ export declare const REDCAP_CAPTAIN_KIND = "redcapcaptain"; export declare const REDCAP_CAPTAIN_NAME = "Redcap Captain Dorran Voss"; export declare const REDCAP_CAPTAIN: { readonly name: "Redcap Captain Dorran Voss"; readonly level: readonly [number, number]; readonly maxHit: 14; readonly healthFactor: 1.4; readonly respawnMs: 240000; readonly aggro: 7; readonly leash: 12; readonly x: number; readonly z: 522; readonly spawnLeash: 2; readonly text: "Captain Voss looks up from his book. \"The Ridge pays. It always pays. Who sent you, the guard or the sea?\""; readonly note: "Black Tom's captain, a heavy man in a red tabard who counts coin at a table in the cellar hall. Every fourth blow is a cleave, announced a full turn ahead and twice an ordinary hit: step out of his reach before it lands and it misses. Two footpads and an archer hold the store room before him."; }; export declare function isTollRoadHostileKind(kind: string): boolean; /** * The Redcaps send a patrol down the cutting four times a day, at fixed UTC times (06:20, 12:20, 18:20, 00:20), for twelve minutes each. * Read off the wall clock like the Passing Bay's raid: nothing rolled or stored, so every server agrees and a restart changes nothing. * The squad is a small copy of the Random World Events engine's stream (scaled levels, lighter than a lone creature of the level, never * respawning in place, leaving with the last player). */ export declare const REDCAP_PATROL: { readonly periodMs: number; /** Minutes past 00:00 UTC the first window opens at. */ readonly offsetMs: number; readonly durationMs: number; readonly kind: "redcap"; readonly archerKind: "redcaparcher"; readonly name: "Redcap patrol"; readonly levels: [number, number]; /** Alive at once with one player on the road, plus `perExtraPlayer` for each more (twice `cap` at most). */ readonly cap: 3; readonly perExtraPlayer: 1; /** One more every this long while the road has someone on it. */ readonly everyMs: 9000; readonly firstWave: 2; /** The patrol ignores anyone below this Combat (a newcomer passing through is left alone). */ readonly aggroCombat: 12; readonly aggroRadius: 7; readonly leashRadius: 40; readonly aggroText: "A Redcap patrol swings out across the road: \"Toll! Everyone pays the toll!\""; /** Every fourth raider is an archer. */ readonly archerEvery: 4; }; /** The strip of road the patrol keeps: the cutting between the two ridges (x 786-798) from the north end to the Toll House. */ export declare const REDCAP_PATROL_ZONE: { readonly minX: 786; readonly maxX: 798; readonly minZ: 436; readonly maxZ: 482; }; export declare function inRedcapPatrolZone(x: number, z: number): boolean; /** Where the squad forms: on the verge-side ground at the cutting's north mouth and the middle (NPCs, not map entities, so the verge rule does not apply). */ export declare const REDCAP_PATROL_NESTS: ReadonlyArray<{ x: number; z: number; }>; /** Patrol raiders felled, in one patrol, that earn the guard's thanks. */ export declare const REDCAP_PATROL_KILLS_TO_PAY = 4; /** The thanks (PLACEHOLDER): once per patrol per player who stood and fought and is still standing when it ends. */ export declare const REDCAP_PATROL_REWARD: { readonly coins: 220; readonly explorerXp: 300; }; export declare const REDCAP_PATROL_DIFFICULTY = 1; export declare const REDCAP_PATROL_ID_PREFIX = "rp-"; export declare const REDCAP_PATROL_TEXTS: { readonly start: "A Redcap patrol is marching the cutting! Hold the road with the guard until it breaks."; readonly endPaid: "The patrol breaks and runs for the ridge. Toll-Warden Pike's lads salute you from the Toll House."; readonly endPlain: "The Redcap patrol breaks and runs for the ridge."; readonly quiet: "A Redcap patrol is marching the cutting, but the Redcaps have no interest in someone so green. Keep to the verge."; readonly warn: "Toll-Warden Pike rings the Toll House bell: a Redcap patrol will march the cutting in a minute or so."; }; /** The Toll House bell rings this long before a window opens. */ export declare const REDCAP_PATROL_WARN_MS = 90000; export type RedcapPatrolWindow = { /** Which window this is, counted from the epoch (2026-01-01 00:00 UTC). */ slot: number; startMs: number; endMs: number; /** True while the patrol is out (now is inside the window). */ active: boolean; /** When the next window opens (the slot after this one when this one is over or is on). */ nextStartMs: number; }; /** The patrol window `nowMs` is in or the next one: a pure function of the clock. */ export declare function redcapPatrolWindow(nowMs: number): RedcapPatrolWindow; /** The slot whose window is open or the NEXT one to open (the slot the warning belongs to). */ export declare function redcapPatrolSlotAfter(nowMs: number): number; /** The Toll Road's lines (marked by the server, ids are the marks it writes; explorerLedger.ts section `road`). */ export declare const LEDGER_ROAD_LINES: readonly { id: string; label: string; }[]; export declare const TOLL_HOUSE_ZONE: { readonly id: "ridge-toll-house"; readonly label: "The Ridge Toll House"; readonly minX: number; readonly maxX: number; readonly minZ: number; readonly maxZ: number; }; export declare const REDCAP_CAMPS_ZONE: { readonly id: "redcap-camps"; readonly label: "The Redcap Camps"; readonly minX: number; readonly maxX: number; readonly minZ: number; readonly maxZ: number; }; //# sourceMappingURL=tollRoad.d.ts.map