You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Build destination-driven, map-derived navigation that selects efficient cross-floor routes and performs transitions through normal game mechanics. Callers provide a destination, not a hand-authored sequence of stairs, ladders, tools, or portals.
Current Baseline
Shared directed topology covers the loaded map and supports exact, range, and alternative destination goals.
Capability-aware routing indexes walk-on floor changes, ladders, rope and shovel transitions, ordinary map teleports, and declared ordinary/level/house doors. Door access follows the resolved action and live restrictions; windows expose no passage (Derive traversable doors from registered action semantics #200).
Dynamic same-floor segments use normal creature pathfinding. Static topology narrows global search before bounded tile planning.
Detailed planning uses a 1,024-tile endpoint margin and a 100000-node cap.
Known shovel passages retain a stable topology identity across open/closed states. Travel and hunt routes walk through open passages without a shovel or use and verify a shovel on closed passages (Resolve shovel passages from their live open or closed state #203).
Complete approved hunt routes are retained for execution. Displacement, blocked steps, failed transitions, or a replan request discard approval and require complete revalidation.
Registered NPC travel competes with static routes. Eligible non-opaque offers retain loaded dialogue, fare, level/premium requirements, destination verification, and protected future fares/recovery funds. Local approach routing resolves the moving provider’s interaction range.
Merged Let stuck bots fight adjacent attackers without chasing #193 replaces timed transit defense/breakout with shared movement-failure state. After failed movement, the bot may fight one adjacent attacker without chasing or requiring proof that killing it opens a route. It prefers the intended-step attacker, otherwise the easiest survivable fight, and retains that target until passage opens, the target dies/leaves reach, safety changes, or the workflow is interrupted. Passive blockers and genuinely unreachable destinations remain distinct.
Movement, item use, use-with, doors, and transitions execute through normal game APIs and action delays.
Delivered Work
Index walk-on stairs and holes from floor-change metadata and actual destinations.
Index and execute ladders.
Index and execute rope spots and rope holes when the bot has a rope.
Index and execute shovel holes when the bot has a shovel, including closed/open dynamic state.
Index and execute ordinary teleports whose destination is available from loaded map state.
Traverse ordinary unlocked doors through normal movement/use behavior.
Cost walking segments and transitions so a cross-floor route can beat a longer same-floor route.
Cache static navigation topology and bound per-decision planning work.
Verify transition outcomes and provide bounded retry, replan, and terminal behavior.
Replace hardcoded Rookgaard transition checkpoints with destination-driven planning and retain the route as regression coverage.
Demonstrate ordinary dynamic-blocker reliability beyond the deterministic Svargrond fixture. Merged Fix playerbot routing around blocked approaches #198 excludes blocked approaches, rejects forbidden exact goals early, distinguishes search-budget exhaustion from unreachability for paid fallback, and bounds fare/safety rejection recovery. The fixture reaches its destination on foot without NPC travel.
Reuse or expose authoritative datapack transition semantics instead of copying rope, hole, ladder, and tool item-ID lists into playerbot navigation.
Support locked doors and key matching, vocation/premium gates, and quest/storage-backed access.
Integrate eligible registered, non-opaque NPC travel with hunt/depot routing, normal dialogue/payment, and arrival verification.
Extend transport to unsupported NPC-mediated gates, schedules, opaque/custom conditions or actions, and remaining boat/carpet/steamship/mine-cart semantics. Registered-offer support does not imply complete transport coverage.
Support stateful and consumable transitions, including scarab-coin, carried/equipped-item, one-way, timed, and mutable-world requirements.
Support additional elevation and obstacle mechanics such as levitate, parcel stacks, pickaxes, and machetes where loaded semantics can be exposed safely.
Represent satisfiable missing requirements as sub-objectives without retrying unsupported transitions.
Complete focused transition fixtures for the remaining supported classes.
Door actions publish per-item closed/open pairs and supported access behavior from authoritative Lua tables. Navigation preserves unique-ID → action-ID → item-ID override precedence; unannotated overrides inherit no passage permission.
Validate opening targets against loaded metadata, preserve live level/house checks, execute normal actions, and verify that the whole tile becomes enterable.
Windows expose no passage. Unknown transitions remain unsupported; planning does not guess from names or adjacent IDs, parse Lua source, or execute unknown actions speculatively.
Passage descriptions follow action registration/reload lifetime and topology invalidation.
Cover ordinary/level doors, locked/quest/house restrictions, overrides, windows, reloads, and a real route that rejects a window shortcut.
Entry points: server/data/scripts/actions/others/{doors,windows}.lua, server/src/actions.{h,cpp}, luascript.cpp, and playerbotnavigation.cpp / playerbottopology.cpp. Locked/key, quest/storage, vocation, and premium access remain outside the supported passage contract.
Route Contract
Derive static walkable regions and transition candidates from loaded map and shared datapack semantics. Search a capability-aware graph globally, then execute local segments and transitions through normal Game, movement, item-use, spell, and interaction APIs. Verify every transition and replan after obstruction, map-state change, displacement, or failed requirement.
A mapped transition is not necessarily usable. Inventory, level, vocation, storage, combat/PZ state, keys, money, and other requirements can change availability or cost.
Every long-term edge must report source, expected destination, directionality, cost, current availability and reason, ordered activation protocol, required state, consumed resources, changed state, success verification, partial-activation recovery, and whether a missing requirement is impossible, temporary, or satisfiable through another objective.
Regression Contract
Route to supplied hunting and service destinations and back with map-derived transitions.
Prefer a cross-floor route when its estimated cost is lower.
Report missing tools and requirements instead of retrying blindly.
Replan in bounds from the actual position after a blocked segment or failed transition.
On restart, discard transient paths and reconstruct navigation from persisted objective and player state.
Goal
Build destination-driven, map-derived navigation that selects efficient cross-floor routes and performs transitions through normal game mechanics. Callers provide a destination, not a hand-authored sequence of stairs, ladders, tools, or portals.
Current Baseline
100000-node cap.Delivered Work
Remaining Work
Define encounter-aware movement using visible threats and permitted memory (Define playerbot perception and memory beyond visible targets #84), coordinated with combat tactics (Build reusable playerbot combat targeting and tactics #54) and retreat (Playerbot survival: healing, retreat, and recovery #38). Cover travel, patrol, target approach, and corpse collection. Deferred; do not implement static spawn exclusion zones as the final solution. See evidence and agreed scope.
Recheck the historical Folda narrow-corridor/respawn failure against the shared movement fallback merged in Let stuck bots fight adjacent attackers without chasing #193. The original incident used the superseded timed breakout; do not restore or extend that mechanism. Preserve runtime evidence, related tactics Build reusable playerbot combat targeting and tactics #54. Focused movement-fallback evidence does not establish all passive-blocker cases.
Demonstrate ordinary dynamic-blocker reliability beyond the deterministic Svargrond fixture. Merged Fix playerbot routing around blocked approaches #198 excludes blocked approaches, rejects forbidden exact goals early, distinguishes search-budget exhaustion from unreachability for paid fallback, and bounds fare/safety rejection recovery. The fixture reaches its destination on foot without NPC travel.
Reuse or expose authoritative datapack transition semantics instead of copying rope, hole, ladder, and tool item-ID lists into playerbot navigation.
Support locked doors and key matching, vocation/premium gates, and quest/storage-backed access.
Integrate eligible registered, non-opaque NPC travel with hunt/depot routing, normal dialogue/payment, and arrival verification.
Extend transport to unsupported NPC-mediated gates, schedules, opaque/custom conditions or actions, and remaining boat/carpet/steamship/mine-cart semantics. Registered-offer support does not imply complete transport coverage.
Support stateful and consumable transitions, including scarab-coin, carried/equipped-item, one-way, timed, and mutable-world requirements.
Support additional elevation and obstacle mechanics such as levitate, parcel stacks, pickaxes, and machetes where loaded semantics can be exposed safely.
Represent satisfiable missing requirements as sub-objectives without retrying unsupported transitions.
Complete focused transition fixtures for the remaining supported classes.
Door passage contract
Delivered by #200:
Entry points:
server/data/scripts/actions/others/{doors,windows}.lua,server/src/actions.{h,cpp},luascript.cpp, andplayerbotnavigation.cpp/playerbottopology.cpp. Locked/key, quest/storage, vocation, and premium access remain outside the supported passage contract.Route Contract
Derive static walkable regions and transition candidates from loaded map and shared datapack semantics. Search a capability-aware graph globally, then execute local segments and transitions through normal
Game, movement, item-use, spell, and interaction APIs. Verify every transition and replan after obstruction, map-state change, displacement, or failed requirement.A mapped transition is not necessarily usable. Inventory, level, vocation, storage, combat/PZ state, keys, money, and other requirements can change availability or cost.
Every long-term edge must report source, expected destination, directionality, cost, current availability and reason, ordered activation protocol, required state, consumed resources, changed state, success verification, partial-activation recovery, and whether a missing requirement is impossible, temporary, or satisfiable through another objective.
Regression Contract
Constraints
Related: #22, #51, #148, #160.