📄 gatherer.lua
字号:
-- Enable/Disable event processing for zoning
if (event == "PLAYER_ENTERING_WORLD" ) then
this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF"); -- standard gathering event
this:RegisterEvent("UI_ERROR_MESSAGE"); -- event added for impossible to gather item
this:RegisterEvent("CHAT_MSG_LOOT"); -- event added for fishing node
Gatherer_InWorld = true;
elseif (event == "PLAYER_LEAVING_WORLD" ) then
this:UnregisterEvent("CHAT_MSG_SPELL_SELF_BUFF"); -- standard gathering event
this:UnregisterEvent("UI_ERROR_MESSAGE"); -- event added for impossible to gather item
this:UnregisterEvent("CHAT_MSG_LOOT"); -- event added for fishing node
Gatherer_InWorld = false;
-- process loot received message for fishing node trigger
elseif (strfind(event, "CHAT_MSG_LOOT")) then
local _, _, fishItem = string.find(arg1, GATHERER_ReceivesLoot );
local gfishTooltip = Gatherer_ExtractItemFromTooltip()
if ( fishItem and not UnitExists("mouseover") ) then
Gatherer_ReadBuff(event, fishItem, gfishTooltip);
end
-- process event to record, normally not possible gather (low/inexistant skill)
elseif (strfind(event, "UI_ERROR_MESSAGE")) then
-- process gather error message
-- need to be in standard gather range to get the correct message to process.
if (arg1 and
(strfind(arg1, GATHERER_REQUIRE.." "..OLD_TRADE_HERBALISM) or strfind(arg1, GATHERER_NOSKILL.." "..OLD_TRADE_HERBALISM) or
strfind(arg1, GATHERER_REQUIRE.." "..TRADE_MINING) or strfind(arg1, GATHERER_NOSKILL.." "..TRADE_MINING))) then
Gatherer_ReadBuff(event);
end
-- process chatmessages
elseif (strfind(event, "CHAT_MSG")) then
Gatherer_ReadBuff(event);
-- process tooltips text for 1.12
elseif (strfind(event, "SPELLCAST_START")) then
-- ChatFrame1:AddMessage("DEBUG |cffffffffEvent :|r "..event.." => "..arg1);
if ( arg1 and (arg1 == GATHER_HERBALISM or arg1 == TRADE_MINING or arg1 == TRADE_OPENING or arg1 =="") ) then
Gatherer_currentNode = GameTooltipTextLeft1:GetText();
Gatherer_currentAction = arg1;
-- ChatFrame1:AddMessage("DEBUG |cffffffffarg1 :|r "..GATHER_HERBALISM.."and "..TRADE_OPENING);
--ChatFrame1:AddMessage("DEBUG Current node: "..Gatherer_currentNode);
Gatherer_RecordFlag=1;
end
elseif (strfind(event, "SPELLCAST_STOP") and Gatherer_RecordFlag==1) then
Gatherer_ReadBuff(event);
Gatherer_currentNode=nil;
elseif (strfind(event, "SPELLCAST_STOP") and Gatherer_RecordFlag==0) then
Gatherer_currentNode=nil;
Gatherer_RecordFlag = 0;
elseif (strfind(event, "SPELLCAST_FAILED")) then
Gatherer_RecordFlag = 0;
elseif (event == "WORLD_MAP_UPDATE") then
if (WorldMapFrame:IsVisible()) then
local serverTime = GetTime();
if (GatherConfig.mapMinder == true and Gatherer_MapOpen == false) then
-- Enhancement to open to last opened map if we were there less than a minute ago
-- Otherwise, go to the player's current position
local startContinent, startZone;
if (Gatherer_CloseMap and (serverTime - Gatherer_CloseMap.time < GatherConfig.minderTime)) then
startContinent = Gatherer_CloseMap.continent;
startZone = Gatherer_CloseMap.zone;
else
startContinent, startZone = Gatherer_GetCurrentZone();
end
Gatherer_MapOpen = true;
if ( GetCurrentMapContinent()>0 and startZone and startZone > 0 ) then
SetMapZoom(startContinent, startZone);
end
end
Gatherer_MapOpen = true;
local mapContinent = GetCurrentMapContinent();
local mapZone = GetCurrentMapZone();
Gatherer_CloseMap = { continent = mapContinent, zone = mapZone, time = GetTime() };
GatherMain_Draw();
elseif (Gatherer_MapOpen) then
Gatherer_MapOpen = false;
Gatherer_ChangeMap();
GatherMain_Draw();
end
elseif ( event == "CLOSE_WORLD_MAP") then
-- never called apparently
Gatherer_MapOpen = false;
Gatherer_ChangeMap()
GatherMain_Draw();
elseif( event == "ADDON_LOADED") then
if ( myAddOnsFrame_Register ) then
-- myAddons Support
GathererDetails["name"] = "Gatherer";
GathererDetails["version"] = GATHERER_VERSION;
GathererDetails["author"] = "Norganna";
GathererDetails["website"] = "http://gathereraddon.com";
GathererDetails["category"] = MYADDONS_CATEGORY_PROFESSIONS;
GathererDetails["frame"] = "Gatherer";
GathererDetails["optionsframe"] = "GathererUI_DialogFrame";
-- Register the addon in myAddOns
if(myAddOnsFrame_Register) then
myAddOnsFrame_Register(GathererDetails, GathererHelp);
end
end
if (arg1 and string.lower(arg1) == "gatherer") then
GATHERER_LOADED = true;
Gatherer_OnUpdate(0, true);
Gatherer_Print("Gatherer v"..GATHERER_VERSION.." -- Loaded!");
GatherConfig.useMinimap = GatherConfig.useMinimap or true;
GatherConfig.useMainmap = GatherConfig.useMainmap or true;
if (GatherConfig.useMainmap == true) then
Gatherer_WorldMapDisplay:SetText("Hide Items");
else
Gatherer_WorldMapDisplay:SetText("Show Items");
end
GatherConfig.iconSet = GatherConfig.iconSet or "shaded";
GatherConfig.number = GatherConfig.number or 10;
GatherConfig.maxDist = GatherConfig.maxDist or 20;
GatherConfig.fadeDist = GatherConfig.fadeDist or 40;
GatherConfig.fadePerc = GatherConfig.fadePerc or 80;
GatherConfig.miniIconDist = GatherConfig.miniIconDist or 40;
GatherConfig.minderTime = GatherConfig.minderTime or 5;
GatherConfig.rareOre = GatherConfig.rareOre or 0;
GatherConfig.logInfo = GatherConfig.logInfo or "on";
if (not GatherConfig.mapMinder) then GatherConfig.mapMinder = false; end;
if (not GatherConfig.users) then
GatherConfig.users = {};
end
if (not Gather_Player) then Gather_Player = playerName; end
if (not GatherConfig.users ) then GatherConfig.users = {}; end;
if (not GatherConfig.users[Gather_Player]) then GatherConfig.users[Gather_Player] = {}; end
if (not GatherConfig.users[Gather_Player].filterRecording ) then
GatherConfig.users[Gather_Player].filterRecording = {};
end
-- Warning at logon on Gatherer Version number change to check for localization zone change (commented, not needed in 1.12)
--if ( GetLocale() == "deDE" and (not GatherConfig.Version or (GatherConfig.Version and GatherConfig.Version ~= GATHERER_VERSION ))) then
-- StaticPopup_Show("GATHERER_VERSION_DIALOG");
--end
-- record current version number in order to identify the data for backup utilities
GatherConfig.Version = GATHERER_VERSION;
-- Get values for World Map once for all
Gatherer_WorldMapDetailFrameWidth = WorldMapDetailFrame:GetWidth();
Gatherer_WorldMapDetailFrameHeight = WorldMapDetailFrame:GetHeight();
Gatherer_WorldMapPlayerFrameLevel = WorldMapPlayer:GetFrameLevel();
-- New backup format allows the user to permenantly save their data
-- in an automatically restoring file "GatherBase.lua"
-- All data in this file will be loaded "under" the saved data every
-- time the addon loads so that in the event of a savedVariables wipe
-- the next time they run WoW, their data will be back to the last
-- backed up point. (This utility will appear in a later version of
-- Gatherer as a Java applet)
if (GatherItemBase ~= nil) then
for c, cd in GatherItems do
for z, zd in cd do
for n,nd in zd do
for i,id in nd do
local matched = 0;
local max = 0;
for j,jd in GatherItemBase[c][z][n] do
if (math.abs(id.x- jd.y) < 0.05) then
matched = j;
end
max = j;
end
if (matched > 0) then
GatherItemBase[c][z][n][matched] = id;
else
GatherItemBase[c][z][n][max+1] = id;
end
end
end
end
end
GatherItems = GatherItemBase;
end
end
elseif ( event == "PLAYER_LOGIN" ) then
if ( GatherConfig ) then
local useMinimap = "Off";
if (GatherConfig.useMinimap) then useMinimap = "On"; end
local useMainmap = "Off";
if (GatherConfig.useMainmap) then useMainmap = "On"; end
local mapMinder = "Off";
if (GatherConfig.mapMinder) then mapMinder = "On"; end
local minderTime = "5s";
if (GatherConfig.minderTime) then minderTime = GatherConfig.minderTime.."s"; end
if (not GathererLogInfoDisplayed and GatherConfig.logInfo and GatherConfig.logInfo == "on" ) then
Gatherer_Print("[Player: "..Gather_Player..", Theme: "..GatherConfig.iconSet..", Mainmap: "..useMainmap..", Minimap: "..useMinimap..", MaxDist: "..GatherConfig.maxDist.." units, NoteCount: "..GatherConfig.number..", Fade: "..GatherConfig.fadePerc.."% at "..GatherConfig.fadeDist.." units, IconDist: "..GatherConfig.miniIconDist.."px on minimap, MapMinder: "..mapMinder.." ("..minderTime.."), Filters: herbs="..Gatherer_GetFilterVal("herbs")..", mining="..Gatherer_GetFilterVal("mining")..", treasure="..Gatherer_GetFilterVal("treasure").."]");
GathererLogInfoDisplayed=true;
end
end
elseif ( event == "LEARNED_SPELL_IN_TAB" or event == "SPELLS_CHANGED" ) then
local numSkills = tonumber(GetNumSkillLines());
if ( GetNumSkillLines() > 0 ) then
Gatherer_GetSkills();
end
elseif ( event == "SKILL_LINES_CHANGED" ) then
local numSkills = tonumber(GetNumSkillLines());
if ( GetNumSkillLines() > 0 ) then
Gatherer_GetSkills();
end
else
Gatherer_ChatPrint("Gatherer Unknown event: "..event);
end
end
-- *************************************************************************
-- Filter related functions
function Gatherer_SetFilter(type, value)
if (not Gather_Player) then return; end
if (not GatherConfig.users) then GatherConfig.users = {}; end
if (not GatherConfig.users[Gather_Player]) then GatherConfig.users[Gather_Player] = {}; end
if (not GatherConfig.users[Gather_Player].filters) then GatherConfig.users[Gather_Player].filters = {}; end
GatherConfig.users[Gather_Player].filters[type] = value;
end
function Gatherer_GetFilterVal(type)
if (not Gather_Player) then return "off"; end
if (not GatherConfig.users) then GatherConfig.users = {}; end
if (not GatherConfig.users[Gather_Player]) then GatherConfig.users[Gather_Player] = {}; end
if (not GatherConfig.users[Gather_Player].filters) then GatherConfig.users[Gather_Player].filters = {}; end
value = GatherConfig.users[Gather_Player].filters[type];
if (not value) then return "auto"; end
return value;
end
function Gatherer_GetFilter(filter)
local value = Gatherer_GetFilterVal(filter);
local filterVal = false;
if (value == "on") then
filterVal = true;
elseif (value == "off") then
filterVal = false;
elseif (value == "auto") then
if (filter == "treasure") then
filterVal = true;
end
if (not GatherSkills) then
filterVal = true;
end
if ((GatherSkills[filter]) and (GatherSkills[filter] > 0)) then
filterVal = true;
end
end
return filterVal;
end
function Gatherer_GetSkills()
local GatherExpandedHeaders = {};
local i, j;
if ( not GatherSkills ) then GatherSkills = {}; end;
Gatherer:UnregisterEvent("SKILL_LINES_CHANGED");
-- search the skill tree for gathering skills
for i=0, GetNumSkillLines(), 1 do
local skillName, header, isExpanded, skillRank, _, _, _, _, _, _, _, _ = GetSkillLineInfo(i);
-- expand the header if necessary
if ( header and not isExpanded ) then
GatherExpandedHeaders[i] = skillName;
end
end
ExpandSkillHeader(0);
for i=1, GetNumSkillLines(), 1 do
local skillName, header, _, skillRank, _, _, _, _, _, _, _, _ = GetSkillLineInfo(i);
-- check for the skill name
if (skillName and not header) then
if (skillName == TRADE_HERBALISM) then
GatherSkills.herbs = skillRank;
elseif (skillName == TRADE_MINING) then
GatherSkills.mining = skillRank;
end
end
-- once we got both, no need to look the rest
if ( GatherSkills.herbs and GatherSkills.mining ) then
break;
end
end
-- close headers expanded during search process
for i=0, GetNumSkillLines() do
local skillName, header, isExpanded, _, _, _, _, _, _, _, _, _ = GetSkillLineInfo(i);
for j in GatherExpandedHeaders do
if ( header and skillName == GatherExpandedHeaders[j] ) then
CollapseSkillHeader(i);
GatherExpandedHeaders[j] = nil;
end
end
end
end
-- *************************************************************************
-- Update related functions
function Gatherer_TimeCheck(timeDelta)
if (not GatherNotes) then
GatherNotes = { timeDiff=0, checkDiff=0 };
else
GatherNotes.checkDiff = GatherNotes.checkDiff + timeDelta;
if (GatherNotes.checkDiff > GATHERNOTE_CHECK_INTERVAL) then
GatherNotes.checkDiff = 0;
Gatherer_OnUpdate(0,true);
end
end
end
function Gatherer_OnUpdate(timeDelta, force)
if (not GATHERER_LOADED) then
Gatherer_Print("Gatherer not loaded");
return;
end
if (Gatherer_InWorld == false ) then
return;
end
if (not GatherConfig.useMinimap) then
Gatherer_HideAll();
return;
end
local recalculate = false;
local needsUpdate = false;
if (not GatherNotes) then
GatherNotes = { timeDiff=0, checkDiff=0 };
needsUpdate = true;
else
GatherNotes.timeDiff = GatherNotes.timeDiff + timeDelta;
if (GatherNotes.timeDiff > GATHERNOTE_UPDATE_INTERVAL) then
needsUpdate = true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -