Skip to main content

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:

  1. GameState.LOGGED_IN
  2. enabled() == true
  3. 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:

  1. Quest Helper-marked dialogue option through DialogActions.chooseQuestHelperMarkedOption()
  2. Dialogue continue through DialogActions.continueSpace()
  3. Walk near the Quest Helper step world point when an NPC/object target step is not directly reachable in the current scene/path context
  4. Talk-to on a Quest Helper NpcStep
  5. Direct object interact on a Quest Helper ObjectStep
  6. Item-on-object when the active object step has exactly one required inventory item and the step text starts with use
  7. Item-on-NPC when the active NPC step has exactly one required inventory item and the step text starts with use
  8. 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

KeyDefaultPurpose
enabledfalseMaster enable for Questing Assistant
autoDialoguetrueHandles Quest Helper option widgets and continue prompts
autoNpcStepstrueHandles talk-to NPC and supported item-on-NPC steps
autoObjectStepstrueHandles object interact and supported item-on-object steps
autoItemStepstrueHandles supported item-on-item steps
debugLoggingfalseLogs the controller decision each tick

Deliberate limits

  • No walker ticking or custom route engine; movement uses shared NavigationActions.walkNear(...) / PacketUtils-owned Walker.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

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.