📄 gatherer.lua
字号:
end
end
if (force) then
needsUpdate = true;
recalculate = true;
end
if (needsUpdate) then
GatherNotes.timeDiff = 0;
-- Find the closest gathers
local continent, zone = Gatherer_GetCurrentZone();
if ((continent == 0) or (zone == 0)) then
Gatherer_HideAll();
return;
end
local inCity = GatherMap_InCity;
local zoomLevel = Minimap:GetZoom();
local px, py = Gatherer_PlayerPos();
if ((px == 0) and (py == 0)) then
return;
end
local xMovement = 0; if (ClosestGathers and ClosestGathers.px) then xMovement = math.abs(ClosestGathers.px - px); end
local yMovement = 0; if (ClosestGathers and ClosestGathers.py) then yMovement = math.abs(ClosestGathers.py - py); end
if (not ClosestGathers
or ClosestGathers.playerC ~= continent
or ClosestGathers.playerZ ~= zone
or xMovement + yMovement > 0.01) then
recalculate = true;
end
local displayNumber = 10;
if (GatherConfig.number and GatherConfig.number > 0) then
displayNumber = GatherConfig.number;
end
local playerDeltaX = 0;
local playerDeltaY = 0;
if (recalculate == true) then
ClosestGathers = {};
ClosestGathers = Gatherer_FindClosest(displayNumber);
if (ClosestGathers.count > 0) then
ClosestGathers.inCity = inCity;
ClosestGathers.zoomLevel = zoomLevel;
ClosestGathers.scaleX, ClosestGathers.scaleY = Gatherer_GetMapScale(continent, zone, inCity, zoomLevel);
end
else
if ((inCity ~= ClosestGathers.inCity) or (zoomLevel ~= ClosestGathers.zoomLevel)) then
ClosestGathers.inCity = inCity;
ClosestGathers.zoomLevel = zoomLevel;
ClosestGathers.scaleX, ClosestGathers.scaleY = Gatherer_GetMapScale(continent, zone, inCity, zoomLevel);
end
local absX, absY = Gatherer_AbsCoord(continent, zone, px, py);
playerDeltaX = ClosestGathers.playerX - absX;
playerDeltaY = ClosestGathers.playerY - absY;
end
local maxPos = 0;
if (ClosestGathers and ClosestGathers.count > 0) then
local closestPos, closestGather, closestID;
local currentPos = 1;
for closestPos, closestGather in ClosestGathers.items do
local skip_node = 0;
if ( currentPos > GatherConfig.number ) then skip_node =1; end
if ( skip_node == 0 ) then
-- need to position and label the corresponding button
local gatherNote = getglobal("GatherNote"..currentPos);
local gatherNoteTexture = getglobal("GatherNote"..currentPos.."Texture");
local itemDeltaX = closestGather.deltax+playerDeltaX;
local itemDeltaY = closestGather.deltay+playerDeltaY;
local offsX, offsY, gDist = Gatherer_MiniMapPos(itemDeltaX, itemDeltaY, ClosestGathers.scaleX, ClosestGathers.scaleY);
gatherNote:SetPoint("CENTER", Minimap, "CENTER", offsX, -offsY);
local iconSet = GatherConfig.iconSet;
local iDist = GatherConfig.miniIconDist;
if (not iconSet) then iconSet = "shaded"; end
if (not iDist) then iDist = 38; end
local _, _, sDist = Gatherer_MiniMapPos(iDist/10000, 0, ClosestGathers.scaleX, ClosestGathers.scaleY);
if ((iDist > 0) and (gDist > (math.floor(sDist)-1))) then
iconSet = "iconic";
end
local fadeDist = GatherConfig.fadeDist / 1000;
local fadePerc = GatherConfig.fadePerc / 100;
local alpha = 1.0;
local objDist = Gatherer_Pythag(itemDeltaX, itemDeltaY);
if ((fadeDist > 0) and (fadePerc > 0)) then
local distRatio = objDist / fadeDist ;
alpha = 1.0 - (math.min(1.0, math.max(0.0, distRatio)) * fadePerc);
end
local textureType = closestGather.item.gtype;
local textureIcon = closestGather.item.icon;
if ( type(textureType) == "number" ) then
textureType = Gather_DB_TypeIndex[textureType];
end
if ( type(textureIcon) == "number" ) then
textureIcon = Gatherer_GetDB_IconIndex(textureIcon, textureType);
end
if (not textureIcon) then textureIcon = "default"; end;
if (GatherConfig.iconSet == "iconshade" )
then
iconSet="iconic";
if ( gDist < (math.floor(sDist)-1) )
then
alpha=0.4;
end
end
if (not Gather_IconSet[iconSet]) then iconSet = "shaded"; end
if (not Gather_IconSet[iconSet][textureType]) then textureType = "Default"; end
local selectedTexture = Gather_IconSet[iconSet][textureType][textureIcon];
if (not selectedTexture) then
selectedTexture = Gather_IconSet[iconSet][textureType]["default"];
end
gatherNoteTexture:SetTexture(selectedTexture);
gatherNote:SetFrameLevel(MiniMapTrackingFrame:GetFrameLevel());
gatherNote:SetAlpha(alpha);
-- Added to allow hiding if under min distance
if ( GatherConfig.NoIconOnMinDist ~= nil and GatherConfig.NoIconOnMinDist == 1 ) then
if ( gDist < (math.floor(sDist)-1) ) then
gatherNote:Hide();
else
gatherNote:Show();
end
elseif ( (not GatherConfig.NoIconOnMinDist or GatherConfig.NoIconOnMinDist == 0) and GatherConfig.alphaUnderMinIcon and gDist < (math.floor(sDist)-1) ) then
if ( GatherConfig.iconSet and GatherConfig.iconSet ~= "iconshade" ) then
gatherNote:SetAlpha(GatherConfig.alphaUnderMinIcon / 100);
end
gatherNote:Show();
else
gatherNote:Show();
end
if (currentPos > maxPos) then maxPos = currentPos; end
currentPos = currentPos + 1;
end
skip_node = 0;
end
end
while (maxPos < GATHERER_MAXNUMNOTES) do
maxPos = maxPos+1;
local gatherNote = getglobal("GatherNote"..maxPos);
if ( gatherNote:IsShown() ) then
gatherNote:Hide();
end
end
end
end
-- *************************************************************************
-- UI related functions
function Gatherer_OnClick() -- function changed to be able to ping through the MiniNote (mostly direct copy) (only change: this -> Minimap)
local x, y = GetCursorPosition();
if ( Minimap.GetEffectiveScale ~= nil ) then
x = x / Minimap:GetEffectiveScale();
y = y / Minimap:GetEffectiveScale();
else
x = x / Minimap:GetScale();
y = y / Minimap:GetScale();
end
local cx, cy = Minimap:GetCenter();
x = x + CURSOR_OFFSET_X - cx;
y = y + CURSOR_OFFSET_Y - cy;
if ( sqrt(x * x + y * y) < (Minimap:GetWidth() / 2) ) then
Minimap:PingLocation(x, y);
end
end
-- *************************************************************************
-- Display functions
function Gatherer_HideAll()
local mmPos = 0;
while (mmPos < GATHERER_MAXNUMNOTES) do
mmPos = mmPos+1;
local gatherNote = getglobal("GatherNote"..mmPos);
gatherNote:Hide();
end
end
function Gatherer_CreateNoteObject(noteNumber)
local button;
local overlayFrameNumber = math.floor((noteNumber - 1000) / 100 + 1);
if(getglobal("GatherMain"..noteNumber)) then
button = getglobal("GatherMain"..noteNumber);
else
--Gatherer_Print("DEBUG create id "..noteNumber.." frame ".. overlayFrameNumber);
button = CreateFrame("Button" ,"GatherMain"..noteNumber, getglobal("GathererMapOverlayFrame"..overlayFrameNumber), "GatherMainTemplate");
button:SetID(noteNumber);
end
return button;
end
function GatherMain_Draw()
local lastUnused = 1000;
local maxNotes = 1600;
local gatherName, gatherData;
-- prevent the function from running twice at the same time.
if (Gatherer_UpdateWorldMap == 0 ) then return; end;
Gatherer_UpdateWorldMap = 0;
if ((Gatherer_MapOpen) and (GatherConfig.useMainmap)) then
local mapContinent = GetCurrentMapContinent();
local mapZone = GetCurrentMapZone();
if ((mapContinent > 0) and (mapZone > 0) and (GatherItems[mapContinent]) and (GatherItems[mapContinent][mapZone])) then
for gatherName, gatherData in GatherItems[mapContinent][mapZone] do
local gatherType = "Default";
local specificType = "";
local allowed = true;
local minSetSkillLevel = 0;
local idx_count=0;
local userConfig = GatherConfig.users[Gather_Player];
specificType = Gatherer_FindOreType(gatherName);
if (specificType) then -- Ore
gatherType = 2;
allowed = Gatherer_GetFilter("mining");
else
specificType = Gatherer_FindTreasureType(gatherName);
if (specificType ) then -- Treasure
gatherType = 0;
allowed = Gatherer_GetFilter("treasure");
else
specificType = Gatherer_FindFishType(gatherName);
if ( specificType ) then -- Treasure Fish
gatherType = 0;
allowed = Gatherer_GetFilter("treasure");
else
-- Herb
specificType = gatherName;
gatherType = 1;
allowed = Gatherer_GetFilter("herbs");
end
end
end
if (not specificType) then
specificType = "default";
end
-- extra filtering options
if (userConfig) then
if ( userConfig.interested and userConfig.interested[gatherType] ) then
for interest_index in userConfig.interested[gatherType] do
idx_count= idx_count +1;
end
end
if( gatherType == 2 ) then -- Ore
minSetSkillLevel = userConfig.minSetOreSkill;
if ( not minSetSkillLevel ) then minSetSkillLevel = -1; end
elseif ( gatherType == 1 ) then -- Herb
minSetSkillLevel = userConfig.minSetHerbSkill;
if ( not minSetSkillLevel ) then minSetSkillLevel = -1; end
end
if ( allowed == true and Gather_SkillLevel[specificType] and
minSetSkillLevel > 0 and
(minSetSkillLevel > Gather_SkillLevel[specificType] or
(GatherConfig.rareOre == 1 and Gather_SkillLevel[Gather_RareMatch[specificType]] and
Gather_SkillLevel[specificType] < Gather_SkillLevel[Gather_RareMatch[specificType]] and
minSetSkillLevel > Gather_SkillLevel[Gather_RareMatch[specificType]] ))
) then
allowed = false;
end
end
if ((allowed == true) and
((userConfig == nil) or
(userConfig.interested == nil) or (idx_count == 0) or userConfig.interested[gatherType] == nil or
(userConfig.interested[gatherType][specificType] == true or
(GatherConfig.rareOre == 1 and userConfig.interested[gatherType][Gather_RareMatch[specificType]])
)
)
) then
for hPos, gatherInfo in gatherData do
local convertedGatherType="";
local numGatherType, numGatherIcon;
if ( lastUnused > 1000 and lastUnused < maxNotes and mod(lastUnused, 100) == 0 )
then
local overlayFrameNumber = math.floor((lastUnused - 1000 )/100 + 1);
getglobal("GathererMapOverlayFrame"..overlayFrameNumber):Show();
elseif (lastUnused < 1100 and not GathererMapOverlayFrame1:IsShown() )
then
GathererMapOverlayFrame1:Show();
end
if ((gatherInfo.x) and (gatherInfo.y) and (gatherInfo.x>0) and (gatherInfo.y>0) and (lastUnused <= maxNotes)) then
local mainNote = Gatherer_CreateNoteObject(lastUnused);
-- getglobal("GatherMain"..lastUnused);
local mnX,mnY;
mnX = gatherInfo.x / 100 * Gatherer_WorldMapDetailFrameWidth;
mnY = -gatherInfo.y / 100 * Gatherer_WorldMapDetailFrameHeight;
if ( GatherConfig and GatherConfig.IconAlpha ~= nil ) then
mainNote:SetAlpha(GatherConfig.IconAlpha / 100);
else
mainNote:SetAlpha(0.8);
end
mainNote:SetPoint("CENTER", "GathererMapOverlayFrame", "TOPLEFT", mnX, mnY);
if ( GatherConfig and GatherConfig.ToggleWorldNotes and GatherConfig.ToggleWorldNotes == 1)
then
mainNote.toolTip = Gatherer_GetMenuName(gatherName);
else
mainNote.toolTip = Gatherer_GetMenuName(specificType);
end
if ( type(gatherType) == "number" ) then
convertedGatherType = Gather_DB_TypeIndex[gatherType];
numGatherType = gatherType
else
convertedGatherType = gatherType;
numGatherType = Gather_DB_TypeIndex[gatherType];
end
if (not Gather_IconSet["iconic"][convertedGatherType]) then
gatherType = "Default";
else
gatherType = convertedGatherType;
end
if ( type(specificType) == "number" ) then
specificType = Gatherer_GetDB_IconIndex(specificType, convertedGatherType);
end
local texture = Gather_IconSet["iconic"][convertedGatherType][specificType];
if (not texture) then
texture = Gather_IconSet["iconic"][gatherType]["default"];
end
if ( gatherInfo.gtype == "Default" or gatherInfo.gtype == 3 ) then
texture = Gather_IconSet["iconic"]["Default"]["default"];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -