Skip to content

Commit

Permalink
Added support for NEW "Supertracking" System when use "the Native" Wa…
Browse files Browse the repository at this point in the history
…ypoint System (completely unimportant if you use TomTom!)

This however needs some tuning and improvements for "Hubs" and Instances that are "not existtant" on any Map like "Tazavesh, the Veiled Market" or "The Eternal Palace"...
Everything else should work fine now!

fixed "again" new changed Settings Page...

Blizzard...
Maybe it's time to Fix OLD bugs instead of add and change features over and over again?! ^^
  • Loading branch information
fuba82 committed Aug 14, 2024
1 parent 0ca6ca2 commit 51decd5
Show file tree
Hide file tree
Showing 5 changed files with 230 additions and 114 deletions.
83 changes: 44 additions & 39 deletions IPAConfig.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,101 +5,106 @@ _G["InstancePortalsAdv"] = IPA
local eventFrame = CreateFrame("FRAME")
eventFrame:RegisterEvent("PLAYER_LOGIN")

IPASettings = IPASettings or {}

local SettingsRegistered = false

function IPA:CreateSettings()
if SettingsRegistered then return end

local function OnSettingChanged(_, setting, value)
local variable = setting:GetVariable();
IPASettings["options"][variable] = value;
end
IPASettings = IPASettings and IPASettings.options and IPASettings or IPA.DefaultSettings

local categoryMain = Settings.RegisterVerticalLayoutCategory("|rInstance Portals |cff0080ffAdvanced|r");
categoryMain.ID = addonName


local function OnSettingChanged(setting, value)
-- This callback will be invoked whenever a setting is modified.
local variable = setting:GetVariable();
IPASettings["options"][variable] = value;
end

-- pinsOnContinentMap
do
local name = "Pins on Continent Map"
local variable = "pinsOnContinentMap"
local variable = addonName.."_pinsOnContinentMap"
local tooltip = "Enable or Disable Dungeon Entrance Pins on the Continent Map"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value
local variableTbl = IPASettings["options"]
local variableKey = "pinsOnContinentMap"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or true

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end

-- useWaypointsZone
do
local name = "Waypoints on Zone Map"
local variable = "useWaypointsZone"
local variable = addonName.."_useWaypointsZone"
local tooltip = "Enable or Disable Waypoint Feature on Zone Maps\n\n|r|cffff0000Warning!|r\nThis will also disable the \"native\" Waypoint function added in TWW!"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value
local variableTbl = IPASettings["options"]
local variableKey = "useWaypointsZone"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or true

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end

-- useWaypointsContient
do
local name = "Waypoints on Continent Map"
local variable = "useWaypointsContient"
local variable = addonName.."_useWaypointsContient"
local tooltip = "Enable or Disable the Feature to add a Waypoint when click on a Dungeon Entrace Pin on the Contient Map"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value
local variableTbl = IPASettings["options"]
local variableKey = "useWaypointsContient"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or true

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end


if IsAddOnLoaded("TomTom") then
if C_AddOns and C_AddOns.IsAddOnLoaded("TomTom") then
-- useTomTomZone
do
local name = "Use TomTom for Zone Map"
local variable = "useTomTomZone"
local variable = addonName.."_useTomTomZone"
local tooltip = "Enable or Disable TomTom as Waypoint System for Zone Map\n\n\Enabled: Use TomTom\nDisabled: Use Native"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value

local variableTbl = IPASettings["options"]
local variableKey = "useTomTomZone"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or false

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end

-- useTomTomContinent
do
local name = "Use TomTom for Continent Map"
local variable = "useTomTomContinent"
local variable = addonName.."_useTomTomContinent"
local tooltip = "Enable or Disable TomTom as Waypoint System for Continent Map\n\n\Enabled: Use TomTom\nDisabled: Use Native"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value
local variableTbl = IPASettings["options"]
local variableKey = "useTomTomContinent"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or false

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end
end

-- debug
do
local name = "Debug Mode"
local variable = "debug"
local variable = addonName.."_debug"
local tooltip = "Enable or Disable Dubug Mode\n\n\|r|cffff0000Warning!|r\nThis can overload your Chat!"
local value = IPASettings["options"][variable]
local defaultValue = value == nil and true or value
local variableTbl = IPASettings["options"]
local variableKey = "debug"
local defaultValue = IPA.DefaultSettings["options"][variableKey] or true

local setting = Settings.RegisterAddOnSetting(categoryMain, name, variable, type(defaultValue), defaultValue)
Settings.SetOnValueChangedCallback(variable, OnSettingChanged)
local setting = Settings.RegisterAddOnSetting(categoryMain, variable, variableKey, variableTbl, Settings.VarType.Boolean, name, defaultValue)
setting:SetValueChangedCallback(OnSettingChanged)
Settings.CreateCheckbox(categoryMain, setting, tooltip)
end

Expand Down
76 changes: 60 additions & 16 deletions IPACore.lua
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
local addonName, IPA = ...

local DefaultSettings = {
IPA.DefaultSettings = {
options = {
debug = false,
pinsOnContinentMap = true,
useWaypointsContient = true,
useWaypointsZone = true,
useTomTomZone = true,
useTomTomContinent = true,
useTomTomZone = false,
useTomTomContinent = false,
},
version = 2,
version = 3,
}

local function CreateDatabase()
if (not IPASettings) or (IPASettings == nil) then IPASettings = DefaultSettings end
if (not IPASettings) or (IPASettings == nil) then IPASettings = IPA.DefaultSettings end
end

local function ReCreateDatabase()
IPASettings = DefaultSettings
IPASettings = IPA.DefaultSettings
end

function IPAUIPrintDebug(debugtext, force)
Expand All @@ -31,6 +31,16 @@ if not IPASettings then
IPAUIPrintDebug("Database: Create default Database because empty")
end

-- check if "value {v}" already exists in "table {t}"
function InstancePortalAdv_tableContains(t, v)
for _, item in ipairs(t) do
if item == v then
return true
end
end
return false
end

function InstancePortalAdvUI_OnLoad(self)
--LoadAddOn("Blizzard_WorldMap")
self:RegisterEvent("PLAYER_ENTERING_WORLD")
Expand All @@ -41,11 +51,17 @@ end

function InstancePortalAdvUI_OnEvent(event, arg1)
if event == "PLAYER_ENTERING_WORLD" then
if IPASettings and IPASettings.version and IPASettings.version < DefaultSettings.version then
-- do something if "Database Version" is an older version and maybe need attention?!
IPAUIPrintDebug("Old Database found, Instance Portal Advanced Settings will resetted!", true)
IPAUIPrintDebug("Use the NEW Settings Page at \"Options >> AddOns\" from now on.", true)
ReCreateDatabase()
if IPASettings then
if not (IPASettings.version) then
IPAUIPrintDebug("Settings Error Instance Portal Advanced Settings will resetted!", true)
IPAUIPrintDebug("Use the NEW Settings Page at \"Options >> AddOns\" from now on.", true)
ReCreateDatabase()
elseif IPASettings.version and IPASettings.version < IPA.DefaultSettings.version then
-- do something if "Database Version" is an older version and maybe need attention?!
IPAUIPrintDebug("Old Database found, Instance Portal Advanced Settings will resetted!", true)
IPAUIPrintDebug("Use the NEW Settings Page at \"Options >> AddOns\" from now on.", true)
ReCreateDatabase()
end
end
end
end
Expand Down Expand Up @@ -77,9 +93,9 @@ function IPAUIGetEntranceInfoForMapID(mapID, i)
end

if hubName then
entranceInfo = {};

entranceInfo["areaPoiID"] = C_AreaPoiInfo.GetAreaPOIForMap(mapID)[0];
local entranceInfo = {};
entranceInfo["areaPoiID"] = 0
entranceInfo["position"] = CreateVector2D(x, y);
entranceInfo["name"] = hubName;

Expand Down Expand Up @@ -113,6 +129,19 @@ function IPAUIGetEntranceInfoForMapID(mapID, i)
entranceInfo["journalInstanceID"] = 0;
entranceInfo["hub"] = 1;
entranceInfo["factionWhitelist"] = factionWhitelist;

local mapChildren = C_Map.GetMapChildrenInfo(mapID, Enum.UIMapType.Zone) -- get current map children

for _, childMapInfo in ipairs(mapChildren) do -- enum "current" map for children
if childMapInfo and childMapInfo.mapID then
local dungeonEntrances = C_EncounterJournal.GetDungeonEntrancesForMap(childMapInfo.mapID);
for _, dungeonEntranceInfo in ipairs(dungeonEntrances) do -- enum "dungeonEntrances"
if dungeonEntranceInfo.journalInstanceID == subInstanceMapIDs[1] then
entranceInfo["areaPoiID"] = dungeonEntranceInfo.areaPoiID -- use FIRST instanceID for Supertracking!
end
end
end
end

IPAUIPrintDebug("Hub: " .. entranceInfo["name"]);

Expand All @@ -127,9 +156,10 @@ function IPAUIGetEntranceInfoForMapID(mapID, i)

local tier = desired_IPAUIInstanceMapDB[subInstanceMapIDs[m]][4]

entranceInfo = {};
local entranceInfo = {};

entranceInfo["areaPoiID"] = C_AreaPoiInfo.GetAreaPOIForMap(mapID)[0];

entranceInfo["areaPoiID"] = 0
entranceInfo["position"] = CreateVector2D(x, y);
if (type == 1) then
entranceInfo["atlasName"] = "Dungeon";
Expand All @@ -150,6 +180,20 @@ function IPAUIGetEntranceInfoForMapID(mapID, i)
entranceInfo["tier"] = tier;
entranceInfo["hub"] = 0;
entranceInfo["factionWhitelist"] = factionWhitelist;

--print(tostring(mapID))
local mapChildren = C_Map.GetMapChildrenInfo(mapID, Enum.UIMapType.Zone) -- get current map children

for _, childMapInfo in ipairs(mapChildren) do -- enum "current" map for children
if childMapInfo and childMapInfo.mapID then
local dungeonEntrances = C_EncounterJournal.GetDungeonEntrancesForMap(childMapInfo.mapID);
for _, dungeonEntranceInfo in ipairs(dungeonEntrances) do -- enum "dungeonEntrances"
if dungeonEntranceInfo.journalInstanceID == instanceID then
entranceInfo["areaPoiID"] = dungeonEntranceInfo.areaPoiID
end
end
end
end

IPAUIPrintDebug("Instance: " .. entranceInfo["name"].." id:"..instanceID);

Expand Down
Loading

0 comments on commit 51decd5

Please sign in to comment.