Code:
Exp_ZoneNames = {};
local Exp_Targets = {};
local Exp_TargetsMini = {};
local lastmap="";
local showmissing = true;
ExplorerCoordsConfig = {};
local Astrolabe = DongleStub("Astrolabe-1.0");
function ExplorerCoords_OnLoad()
--if not (ExplorerCoord) then
--ExplorerCoords_Init();
--end
ExplorerCoordsFrame:RegisterEvent("ADDON_LOADED");
Exp_ZoneNames[1] = { GetMapZones(1) } ;
Exp_ZoneNames[2] = { GetMapZones(2) } ;
Exp_ZoneNames[3] = { GetMapZones(3) } ;
Exp_ZoneNames[4] = { GetMapZones(4) } ;
Exp_ZoneNames[5] = { GetMapZones(5) } ;
Exp_ZoneNames[6] = { GetMapZones(6) } ;
for i=1,30,1 do
Exp_Target=CreateFrame("Button", "ExplorerCoordsWorldTargetFrame",WorldMapDetailFrame );
Exp_Target:SetWidth(16);
Exp_Target:SetHeight(16);
Exp_Target.icon = Exp_Target:CreateTexture("ARTWORK");
Exp_Target.icon:SetAllPoints();
Exp_Target.icon:SetTexture("Interface\\AddOns\\ExplorerCoords\\images\\coordicon");
Exp_Target:SetFrameLevel(10000);
Exp_Target:EnableMouse(true);
Exp_Target:SetScript("OnEnter", ExplorerCoords_Coord_OnEnter);
Exp_Target:SetScript("OnLeave", ExplorerCoords_Coord_OnLeave);
Exp_Targets[i]=Exp_Target;
end
for i=1,30,1 do
Exp_TargetMini=CreateFrame("Button", "ExplorerCoordsMinimapTargetFrame",UIParent );
Exp_TargetMini:SetWidth(10);
Exp_TargetMini:SetHeight(10);
Exp_TargetMini.icon = Exp_TargetMini:CreateTexture("ARTWORK");
Exp_TargetMini.icon:SetAllPoints();
Exp_TargetMini.icon:SetTexture("Interface\\AddOns\\ExplorerCoords\\images\\coordicon");
Exp_TargetMini:SetFrameLevel(10000);
Exp_TargetMini:EnableMouse(true);
Exp_TargetMini:SetScript("OnEnter", ExplorerCoords_MiniCoord_OnEnter);
Exp_TargetMini:SetScript("OnLeave", ExplorerCoords_MiniCoord_OnLeave);
Exp_TargetsMini[i]=Exp_TargetMini;
end
--GetCurrentMapZone
end
function ExplorerCoords_Init()
if not (ExplorerCoord ) or not (ExplorerCoord["v"]) or (ExplorerCoord["v"] ~= 8) then
ExplorerCoord = {};
for index,value in pairs(ExplorerCoordInit) do
for index2,value2 in pairs(value) do
parentzone=ExplorerCoords_GetZoneName(index,index2);
ExplorerCoord[parentzone] = {};
ExplorerCoord[parentzone]["catid"] = index2;
for index3,value3 in pairs(value2) do
if(index2 == 868) then
--ExplorerCoord[parentzone] = {};
else
--dirty vashjir hack
if(index2==4825) then
local tmp_parentzone=ExplorerCoords_GetZoneName(-1,value3["subz"]);
if not(ExplorerCoord[tmp_parentzone]) then
ExplorerCoord[tmp_parentzone] = {};
ExplorerCoord[tmp_parentzone]["catid"] = index2;
end
subzone = ExplorerCoords_GetSubZoneName(index2,index3);
ExplorerCoord[tmp_parentzone][subzone] = {};
ExplorerCoord[tmp_parentzone][subzone]["x"] = value3["x"];
ExplorerCoord[tmp_parentzone][subzone]["y"] = value3["y"];
else
--print(index2.." - "..index3);
subzone = ExplorerCoords_GetSubZoneName(index2,index3);
--print(parentzone.."--"..subzone);
ExplorerCoord[parentzone][subzone] = {};
ExplorerCoord[parentzone][subzone]["x"] = value3["x"];
ExplorerCoord[parentzone][subzone]["y"] = value3["y"];
end
end
end
end
end
ExplorerCoord["v"] = {};
ExplorerCoord["v"] = 8;
ExplorerCoordInit = nil;
end
end
function ExplorerCoords_GetZoneName(zoneindex,zoneid)
--dirty vashjir hack
if(zoneindex==-1) then
SetMapByID(zoneid);
else
SetMapByID(ExplorerCoordMapIt[zoneindex][zoneid]);
end
return Exp_ZoneNames[GetCurrentMapContinent()][GetCurrentMapZone()];
--for i=1,GetAchievementNumCriteria(zoneindex),1 do
--zonename,_,_,_,_,_,_,zoneidingame,_,_=GetAchievementCriteriaInfo(zoneindex,i);
--DEFAULT_CHAT_FRAME:AddMessage(zoneid);
--if(zoneid==zoneidingame) then
--DEFAULT_CHAT_FRAME:AddMessage("hjohoho");
-- return zonename;
--end
--end
end
function ExplorerCoords_GetSubZoneName(zoneindex,zoneid)
for i=1,GetAchievementNumCriteria(zoneindex),1 do
zonename,_,_,_,_,_,_,zoneidingame,_,_=GetAchievementCriteriaInfo(zoneindex,i);
--zonename,_,_,_,_,_,_,_,_,zoneidingame=GetAchievementCriteriaInfo(zoneindex,i);
--DEFAULT_CHAT_FRAME:AddMessage(zoneidingame);
if(zoneid==zoneidingame) then
--DEFAULT_CHAT_FRAME:AddMessage("hjohoho");
return zonename;
end
end
end
function ExplorerCoords_OnEvent(self,event, ...)
if ( (event == "WORLD_MAP_UPDATE") and WorldMapFrame:IsVisible() ) then
ExplorerCoords_UpdateMap("world");
elseif(event == "ZONE_CHANGED_NEW_AREA") then
ExplorerCoords_UpdateMap("mini");
elseif(event == "ADDON_LOADED") then
local arg1 = ...;
if(arg1 == "ExplorerCoords") then
ExplorerCoords_Init();
ExplorerCoordsConfig:Init();
ExplorerCoordsFrame:UnregisterEvent("ADDON_LOADED");
end
end
end
local function GetZoneInfo(zonename)
for i=1,#Exp_ZoneNames do
for index,value in pairs(Exp_ZoneNames[i]) do
if (value == zonename) then
return i,index;
end
end
end
end
function ExplorerCoords_ClearNotes(whichmap)
if(whichmap == "world") then
for i=1,30,1 do
Exp_Target = Exp_Targets[i];
Exp_Target:Hide();
end
elseif(whichmap == "mini") then
for i=1,30,1 do
Exp_TargetMini = Exp_TargetsMini[i];
Exp_TargetMini:Hide();
end
end
end
function ExplorerCoords_UpdateMap(whichmap)
ExplorerCoords_ClearNotes(whichmap);
if(whichmap =="world") and GetCurrentMapZone()<1 then
return;
end
if(whichmap == "world") then
currentzone = Exp_ZoneNames[GetCurrentMapContinent()][GetCurrentMapZone()];
elseif(whichmap == "mini") then
currentzone = GetRealZoneText();
end
if( ExplorerCoord[currentzone]) then
if(whichmap == "world") then
if(lastmap==currentzone) then
showmissing = false;
else
showmissing = true;
lastmap = currentzone;
end;
end
catid = ExplorerCoord[currentzone]["catid"];
--fuckup here still
if(catid==868) then
return;
end
for i=1,GetAchievementNumCriteria(catid),1 do
criteriaString, criteriaType, completed, quantity, reqQuantity, charName, flags, assetID, quantityString, unknown = GetAchievementCriteriaInfo(catid, i);
if(completed) then
else
if(ExplorerCoord[currentzone][criteriaString]) then
if(ExplorerCoord[currentzone][criteriaString]["x"]~=-1) then
coordx = ExplorerCoord[currentzone][criteriaString]["x"];
coordy = ExplorerCoord[currentzone][criteriaString]["y"];
if(whichmap == "world") then
Exp_Target = Exp_Targets[i];
Exp_Target.id = criteriaString;
Exp_Target:Show();
Astrolabe:PlaceIconOnWorldMap( WorldMapDetailFrame, Exp_Target, GetCurrentMapAreaID(), GetCurrentMapDungeonLevel(), coordx, coordy );
elseif(whichmap == "mini") then
Exp_TargetMini = Exp_TargetsMini[i];
Exp_TargetMini.id = criteriaString;
Exp_TargetMini:Show();
mini_continent, mini_zone = GetZoneInfo(currentzone);
SetMapToCurrentZone();
Astrolabe:PlaceIconOnMinimap(Exp_TargetMini, GetCurrentMapAreaID(),GetCurrentMapDungeonLevel(), coordx, coordy );
end
else
if(showmissing and whichmap == "world" and (not ExplorerCoords_Config.ShowMissingCoords or ExplorerCoords_Config.ShowMissingCoords==0)) then
DEFAULT_CHAT_FRAME:AddMessage("Explorer Coords: Missing coords for "..criteriaString);
end
end
end
--else
-- if(showmissing and whichmap == "world") then
-- DEFAULT_CHAT_FRAME:AddMessage("Explorer Coords: Missing coords for "..criteriaString);
-- end
--end
end
end
end
end
function ExplorerCoords_MiniCoord_OnEnter(frame,this)
local tooltip = GameTooltip;
tooltip:SetOwner(frame, "ANCHOR_BOTTOMLEFT")
tooltip:ClearLines()
tooltip:AddLine(frame.id);
tooltip:Show();
end
function ExplorerCoords_MiniCoord_OnLeave()
GameTooltip:Hide();
end
function ExplorerCoords_Coord_OnEnter(frame,this)
WorldMapPOIFrame.allowBlobTooltip = false;
local tooltip = WorldMapTooltip;
tooltip:SetOwner(frame, "ANCHOR_BOTTOMLEFT")
tooltip:ClearLines()
tooltip:AddLine(frame.id);
tooltip:Show();
end
function ExplorerCoords_Coord_OnLeave()
WorldMapPOIFrame.allowBlobTooltip = true;
WorldMapTooltip:Hide();
end