fix(arrow): Sunstrider zoneId 3431, rotation CW, collection distance, native map pins

- zoneId detection: accept 3430 OR 3431 OR uiMapId 1241 (4 locations)
- SetRotation is CW-positive: rotAngle=relative (was -relative)
- Collection functions: override target->1241 when player on Sunstrider
- NPC 15281: spawn zone 1241 (not 3430) for correct coord space
- _ResolveMapUiMapId: removed 1241->1941 redirect
- zoneDB: added areaIdToUiMapId[1241]=1241
- Updated CHANGELOG, README, docs
This commit is contained in:
Xurkon
2026-05-21 19:22:40 -05:00
parent 7f99e7228d
commit 24ed0f48b3
19 changed files with 1170 additions and 469 deletions
+6 -2
View File
@@ -693,7 +693,9 @@ function QuestieDB.GetSuppressedNPCs(zoneId)
local threshold = ld.settings.minConfidencePins or 2
local npcId, entry = next(ld.npcs)
while npcId do
if entry.mc and entry.mc >= threshold and entry[7] and entry[7][zoneId] then
-- Support both old format ([4]=spawns) and new format ([7]=spawns)
local spawns = entry[7] or entry[4]
if entry.mc and entry.mc >= threshold and spawns and spawns[zoneId] then
suppressed[npcId] = true
end
npcId, entry = next(ld.npcs, npcId)
@@ -713,7 +715,9 @@ function QuestieDB.GetSuppressedObjects(zoneId)
local threshold = ld.settings.minConfidencePins or 2
local objId, entry = next(ld.objects)
while objId do
if entry.mc and entry.mc >= threshold and entry[4] and entry[4][zoneId] then
-- Support both old format ([4]=spawns) and new format ([7]=spawns)
local spawns = entry[4] or entry[7]
if entry.mc and entry.mc >= threshold and spawns and spawns[zoneId] then
suppressed[objId] = true
end
objId, entry = next(ld.objects, objId)
+18 -5
View File
@@ -62,25 +62,38 @@ local UiMapIdOverrides = {
-- Sunstrider Isle overrides (separate from Northshire since they're different Ascension realms)
ZoneDB.private.uiMapIdToAreaId = ZoneDB.private.uiMapIdToAreaId or {}
ZoneDB.private.uiMapIdToAreaId[1241] = 3430
ZoneDB.private.uiMapIdToAreaId[946] = 3430 -- Ghost map for Sunstrider Isle (different zone than Northshire's 946)
-- 946 is a ghost/transition map. On Horde (Sunstrider), it resolves to areaId 3430.
-- On Alliance (Northshire), it resolves to areaId 12 (Elwynn). The AscensionDB
-- zone table handles both via runtime loading; we set the default here for
-- the Sunstrider case since that's where pins break without it.
ZoneDB.private.uiMapIdToAreaId[946] = 3430
-- Reverse mapping: areaId → uiMapId for GetUiMapIdByAreaId lookups.
-- Northshire Valley (areaId 668) uses uiMapId 1238.
ZoneDB.private.areaIdToUiMapId[668] = 1238
areaIdToUiMapId[668] = 1238
-- Eversong Woods (areaId 3430) maps to the Eversong Woods map (uiMapId 1941).
-- Sunstrider Isle (uiMapId 1241) is a child map that shares Eversong's coordinate space.
-- Pins for zone 3430 render on map 1941 and appear on map 1241 via ZONE_REDIRECT visibility.
-- Sunstrider Isle (areaId 3431) is a subzone of Eversong Woods — same map (1941).
-- Sunstrider Isle (uiMapId 1241) is a child map of Eversong Woods.
-- Pins for zones 3430 and 3431 render on map 1941 (Eversong).
-- Pins for zone 1241 render on map 1241 (Sunstrider) using Ascension-calibrated bounds.
ZoneDB.private.areaIdToUiMapId[3430] = 1941
areaIdToUiMapId[3430] = 1941
ZoneDB.private.areaIdToUiMapId[3431] = 1941
areaIdToUiMapId[3431] = 1941
-- Allow drawing pins directly on Sunstrider Isle (uiMapId 1241) via areaId 1241.
ZoneDB.private.areaIdToUiMapId[1241] = 1241
areaIdToUiMapId[1241] = 1241
-- Also populate the cache so the fast path works without a lazy lookup.
if uiMapIdToAreaIdCache[1238] == nil then
uiMapIdToAreaIdCache[1238] = 668
end
-- Sunstrider Isle uiMapId 1241 → areaId 3431 (subzone, not parent 3430).
-- Questie resolves 3431→3430 via GetParentZoneId() automatically when needed.
if uiMapIdToAreaIdCache[1241] == nil then
uiMapIdToAreaIdCache[1241] = 3430
uiMapIdToAreaIdCache[1241] = 3431
end
if uiMapIdToAreaIdCache[946] == nil then
uiMapIdToAreaIdCache[946] = 3430 -- Ghost map for Sunstrider Isle (different zone than Northshire's 946)
uiMapIdToAreaIdCache[946] = 3430
end
local parentZoneToSubZone = {} -- Generated
local zoneMap = {} -- Generated