Questing Assistant
QuestingAssistantPlugin automates a narrow set of Quest Helper-guided quest
steps. It is registered in runelite-plugin.properties, uses config group
n3questingassistant, and is disabled by default.
The plugin does not invent quest logic. It reads the active Quest Helper quest
and step through a shared reflection layer under com.n3plugins.sdk.questhelper
and only acts when the resolved step shape is unambiguous.
Runtime gates
Every game tick, the plugin requires:
GameState.LOGGED_INenabled() == true- an actionable Quest Helper dialogue or supported target step
If any gate fails, the plugin does nothing and releases its input lock. When all gates pass, the plugin requests the input lock for that tick and lets the controller issue at most one supported helper action. It does not register with Break Handler and does not request PacketUtils account bootstrap.
Supported automation order
The controller resolves at most one action per tick in this order:
- Quest Helper-marked dialogue option through
DialogActions.chooseQuestHelperMarkedOption() - Dialogue continue through
DialogActions.continueSpace() - Walk near the Quest Helper step world point when an NPC/object target step is not directly reachable in the current scene/path context
- Talk-to on a Quest Helper
NpcStep - Direct object interact on a Quest Helper
ObjectStep - Item-on-object when the active object step has exactly one required inventory item and the step text starts with
use - Item-on-NPC when the active NPC step has exactly one required inventory item and the step text starts with
use - Item-on-item when the active item step exposes exactly two inventory item requirements
If the step is ambiguous, unsupported, or reflection cannot resolve a usable target, the plugin fails closed and does nothing.
NPC and object use-item steps resolve the nearest pathable Quest Helper target before issuing packets, matching the reachability check used before action selection. Packet queue failures are reported as action failures instead of being treated as successful item-on-object clicks.
Quest Helper data source
QuestHelperSnapshotReader looks for the official Quest Helper plugin, then
reads:
- selected quest
- current step / active step
- fallback sidebar panel step when
getCurrentStep()is null - step class name
- world point
- NPC ids
- object ids
- primary step text
- item requirements
- best-effort sidebar step index
The snapshot reader is shared with Walk Assistant and AutomationApi so the
suite has one Quest Helper reflection path instead of multiple plugin-local
versions.
Configuration
| Key | Default | Purpose |
|---|---|---|
enabled | false | Master enable for Questing Assistant |
autoDialogue | true | Handles Quest Helper option widgets and continue prompts |
autoNpcSteps | true | Handles talk-to NPC and supported item-on-NPC steps |
autoObjectSteps | true | Handles object interact and supported item-on-object steps |
autoItemSteps | true | Handles supported item-on-item steps |
debugLogging | false | Logs the controller decision each tick |
Deliberate limits
- No walker ticking or custom route engine; movement uses shared
NavigationActions.walkNear(...)/ PacketUtils-ownedWalker.tick() - No Break Handler registration or PacketUtils account-bootstrap requirement
- No banking, inventory preparation, or loadout management
- No puzzle solving or broad text-only guessing
- No action when multiple candidate required items exist for a step
- No action when Quest Helper is absent or its internals drift beyond the shared reflection reader
Related shared APIs
dialogue-helper.md-DialogActionsuse-item-actions.md-UseItemActionswalker.md- Quest Helper destination walkingautomation-api.md- workflow-level helper facade
Testing
.\gradlew.bat test --tests com.n3plugins.questingassistant.* --console plain
.\gradlew.bat test --tests com.n3plugins.sdk.questhelper.* --console plain
Focused tests cover controller priority, supported/unsupported step handling, Quest Helper widget parsing, shared reflection behavior, and the new item-on-NPC / item-on-object action overloads.