Questie-X Logo

A universal WoW quest-helper with a plugin architecture for any private server.

Version: v1.3.1 View Changelog

QuestieLearner: Autonomous Data Engine

Questie-X introduces QuestieLearner, a zero-configuration autonomous engine that learns the world as you play. It automatically bridges the gap between static database entries and real-time server-side realities.

Autonomous Acquisition

Learns NPC spawns, Quest relationships, Object locations, and Item drops directly from combat logs and interaction events. No manual wiring or database entry required.

3.3.5a Coordinate Scaling

Implements a precision-first scaling logic that normalizes 3.3.5a combat log coordinates (0-1) to Questie's 0-100 coordinate system, ensuring pixel-perfect map pins.

Universal Cross-Link Engine

A bidirectional relationship engine that automatically stitches connections between learned entities. If an item drops from an NPC for a specific quest, QuestieLearner cross-links all three, immediately enabling map pins and tooltips for that item-source chain.

Data Integrity & Confidence

To ensure database quality in crowd-sourced environments, Questie-X implements a multi-tier verification model.

Match Count (mc) System

Every learned entry tracks its "Match Count". Data is promoted to Verified status once it reaches the user-defined confidence threshold (default: 2).

Stale Data Cleanup

A tiered pruning engine tracks "Last Seen" (ls) timestamps. Unconfirmed data is automatically aged out after 90 days, while Verified entries are protected from expiration.

Confidence Gating: Map pins and tooltips for learned data are gated by confidence settings, preventing "one-off" anomalies or visual clutter from unconfirmed spawns.

Network Infrastructure

Questie-X utilizes hidden communication channels to synchronize confidence metrics and learned data across the player base in real-time.

Ebonhold Database Architecture

To support custom servers without polluting the base WotLK database, Questie now implements a modular override system. This allows custom quests, NPCs, and objects to be defined in a safe namespace that persists across upstream updates.

1. Directory Structure

Database/Ebonhold/
├── EbonholdLoader.lua       # Main injection hook
├── Zones/
│   └── EbonholdZoneTables.lua # Custom AreaID/MapID mappings
└── Ebonhold/
    ├── EbonholdQuestDB.lua  # Custom Quest definitions
    └── EbonholdNpcDB.lua    # Custom NPC spawn overrides

2. Injection Methodology

The system hooks into QuestieDB:Initialize(). Instead of modifying QuestieDB.questData directly, it populates the override tables which are checked during quest retrieval.

-- EbonholdLoader.lua snippet
local function InjectOverrides()
    for id, data in pairs(EbonholdDB.questData) do
        QuestieDB.questDataOverrides[id] = data
    end
end

Custom Quest Implementation

For large-scale "kill count" quests (e.g., 75 Dragonkin), I utilize the killCreditObjective pattern. This allows a single quest objective to be mapped to a dynamic list of NPC IDs.

Developer Note: Using killCreditObjective (Index [10][5]) ensures that all participating NPC spawns appear on the map, but only one counter appears in the tracker.
-- Example implementation (EbonholdQuestDB.lua)
[50064] = {
    [1] = "Heart of the Dragonflights",
    [10] = {
        nil, nil, nil, nil,
        { -- killCreditObjective
            {
                { 26276, 26277, 26322, ... }, -- All NPC IDs
                26322,                       -- Root ID (Icon/Text)
                "Dragonkin slain"            -- Display Text
            }
        }
    },
    [30] = 30, -- Objective Count
}