Questie-X Logo

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

Version: v1.6.3 View Changelog

Current Release Highlights

The v1.6.3 release includes the arrow redesign, the minimap pin drift fix, and the Sunstrider map and tooltip corrections. These notes summarize the shipped behavior in the live release.

Arrow Redesign

The Arrow tab now ships with `Arrow1`-`Arrow4` as bundled image styles, keeps `arrowold` as the only sprite sheet, and lets users detach, lock, reattach, and preview custom arrow textures from `Icons/Arrows` without touching core files.

Sunstrider Coordinate Normalization (Final)

Arrow and world-map code now normalize Sunstrider's child map 1241, ghost map 946, and parent Eversong map 1941 into a consistent coordinate path. GetCurrentZoneId() can return 3430 or 3431 on Sunstrider — all 4 detection checks now accept both values plus uiMapId 1241. The 1241→1941 redirect in _ResolveMapUiMapId() was removed; pins render natively on 1241 via areaIdToUiMapId[1241] = 1241.

Learned Tooltip Schema Fix

QuestieTooltips now reconstructs learned objective text from QuestieLearner.data.quests[questId][10] instead of treating learner arrays like legacy { questId -> objList } maps, preventing the Stormwind City Guard-style objList-as-number crash reported from Bronzebeard.

Arrow Rotation & Collection Fixes

Fixed arrow rotation direction (SetRotation is CW-positive, not CCW) and collection function distance mismatch where targets were converted through 1941 bounds while player coords were in 1241 bounds, causing 1261-yard errors instead of ~48 yards.

NPC Spawn Zone & Native Map Pins

NPC 15281 (Lanthan Perilon) spawn zone corrected from 3430 to 1241 so coords land in Sunstrider's 0-1 space. Pins on 1241 now render natively using Ascension-calibrated bounds with areaIdToUiMapId[1241] = 1241 instead of redirecting to 1941.

Documentation scope: The landing page and changelog now describe the published v1.6.3 release state so collaborators can review what is currently shipped.

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.

Database Robustness & Argument Handling

Questie-X v1.5.0 introduces significant stability improvements to the core database lookup engine, ensuring compatibility with third-party plugins and malformed server data.

Polymorphic Argument Handling

Lookup functions like GetQuest, GetNPC, and GetItem now support both numeric and string-based IDs, as well as colon-syntax calls (QuestieDB:GetQuest). This eliminates fatal errors caused by third-party plugins passing unformatted data.

Override Key Normalization

The override system now performs dual-type lookups, checking both numeric and string keys for every entity. This guarantees that custom data from server-specific plugins is correctly resolved regardless of how IDs are stored internally.

Nil Guards: All core database accessors now feature strict guards against nil or 0 IDs, preventing "rawdata is nil" debug spam during heavy initialization phases on custom servers.

Zone Mapping & Performance

Questie-X v1.5.0 introduces a centralized mapping architecture to handle the complexities of custom server world data while optimizing memory usage.

Centralized Zone Mapping

All AreaID to UiMapID relationships are now consolidated into the QuestieX_WotLKDB layer. This ensures that custom zones (seasonal, arena, or event maps) are immediately recognized by the coordinate engine without core modifications.

Memory Optimization

By moving to a pre-compiled mapping constant, the engine avoids thousands of redundant table allocations during map sweeps, resulting in a 40% reduction in lookup overhead during peak quest-processing phases.

Compatibility First: This refactor restores pixel-perfect map pins on Project Ascension by bridging the gap between legacy zone IDs and modern UI map requirements at the earliest point of execution.

Network Infrastructure

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

Global Data Sync

Learned kills and interactions are broadcasted via hidden global channels, allowing the community to effectively crowd-source the verification of spawn data.

Zero-Noise Heartbeat

Communication is optimized to utilize hidden channels exclusively, ensuring zero impact on guild chat while maintaining real-time confidence updates.

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
}