vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Enchantrix v3.6.1 (Platypus)
$Id: Enchantrix.lua 859 2006-05-11 13:35:49Z aradan $
By Norganna
http://enchantrix.org/
This is an addon for World of Warcraft that add a list of what an item
disenchants into to the items that you mouse-over in the game.
License:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program(see GLP.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
]]
-- Local functions
local addonLoaded
local onLoad
local pickupInventoryItemHook
local pickupContainerItemHook
local onEvent
Enchantrix.Version = "3.6.1"
if (Enchantrix.Version == "<".."%version%>") then
Enchantrix.Version = "3.5.DEV"
end
local DisenchantEvent = {}
-- This function differs from onLoad in that it is executed
-- after variables have been loaded.
function addonLoaded(hookArgs, event, addOnName)
if (event ~= "ADDON_LOADED") or (string.lower(addOnName) ~= "enchantrix") then
return
end
Stubby.UnregisterEventHook("ADDON_LOADED", "Enchantrix")
-- Call AddonLoaded for other objects
Enchantrix.Storage.AddonLoaded() -- Sets up saved variables so should be called first
Enchantrix.Barker.AddonLoaded()
Enchantrix.Command.AddonLoaded()
Enchantrix.Config.AddonLoaded()
Enchantrix.Locale.AddonLoaded()
Enchantrix.Tooltip.AddonLoaded()
Enchantrix.Revision = Enchantrix.Util.GetRevision("$Revision: 859 $")
for name, obj in pairs(Enchantrix) do
if type(obj) == "table" then
Enchantrix.Revision = math.max(Enchantrix.Revision, Enchantrix.Util.GetRevision(obj.Revision))
end
end
Stubby.RegisterAddOnHook("Auctioneer", "Enchantrix", Enchantrix.Command.AuctioneerLoaded);
-- Register disenchant detection hooks
Stubby.RegisterFunctionHook("PickupContainerItem", 400, pickupContainerItemHook)
Stubby.RegisterFunctionHook("PickupInventoryItem", 400, pickupInventoryItemHook)
Stubby.RegisterEventHook("SPELLCAST_START", "Enchantrix", onEvent)
Stubby.RegisterEventHook("SPELLCAST_STOP", "Enchantrix", onEvent)
Stubby.RegisterEventHook("SPELLCAST_FAILED", "Enchantrix", onEvent)
Stubby.RegisterEventHook("SPELLCAST_INTERRUPTED", "Enchantrix", onEvent)
Stubby.RegisterEventHook("LOOT_OPENED", "Enchantrix", onEvent)
local vstr = string.format("%s-%d", Enchantrix.Version, Enchantrix.Revision)
Enchantrix.Util.ChatPrint(string.format(_ENCH('FrmtWelcome'), vstr), 0.8, 0.8, 0.2)
Enchantrix.Util.ChatPrint(_ENCH('FrmtCredit'), 0.6, 0.6, 0.1)
end
-- Register our temporary command hook with stubby
function onLoad()
Stubby.RegisterBootCode("Enchantrix", "CommandHandler", [[
local function cmdHandler(msg)
local i,j, cmd, param = string.find(string.lower(msg), "^([^ ]+) (.+)$")
if (not cmd) then cmd = string.lower(msg) end
if (not cmd) then cmd = "" end
if (not param) then param = "" end
if (cmd == "load") then
if (param == "") then
Stubby.Print("Manually loading Enchantrix...")
LoadAddOn("Enchantrix")
elseif (param == "always") then
Stubby.Print("Setting Enchantrix to always load for this character")
Stubby.SetConfig("Enchantrix", "LoadType", param)
LoadAddOn("Enchantrix")
elseif (param == "never") then
Stubby.Print("Setting Enchantrix to never load automatically for this character (you may still load manually)")
Stubby.SetConfig("Enchantrix", "LoadType", param)
else
Stubby.Print("Your command was not understood")
end
else
Stubby.Print("Enchantrix is currently not loaded.")
Stubby.Print(" You may load it now by typing |cffffffff/enchantrix load|r")
Stubby.Print(" You may also set your loading preferences for this character by using the following commands:")
Stubby.Print(" |cffffffff/enchantrix load always|r - Enchantrix will always load for this character")
Stubby.Print(" |cffffffff/enchantrix load never|r - Enchantrix will never load automatically for this character (you may still load it manually)")
end
end
SLASH_ENCHANTRIX1 = "/enchantrix"
SLASH_ENCHANTRIX2 = "/enchant"
SLASH_ENCHANTRIX3 = "/enx"
SlashCmdList["ENCHANTRIX"] = cmdHandler
]]);
Stubby.RegisterBootCode("Enchantrix", "Triggers", [[
if Stubby.GetConfig("Enchantrix", "LoadType") == "always" then
LoadAddOn("Enchantrix")
else
Stubby.Print("]].._ENCH('MesgNotloaded')..[[")
end
]]);
SLASH_ENCHANTRIX1 = "/enchantrix";
SLASH_ENCHANTRIX2 = "/enchant";
SLASH_ENCHANTRIX3 = "/enx";
SlashCmdList["ENCHANTRIX"] = function(msg) Enchantrix.Command.HandleCommand(msg) end
Stubby.RegisterEventHook("ADDON_LOADED", "Enchantrix", addonLoaded)
end
function pickupInventoryItemHook(funcArgs, retVal, slot)
-- Remember last activated item
if slot then
DisenchantEvent.spellTarget = GetInventoryItemLink("player", slot)
end
end
function pickupContainerItemHook(funcArgs, retVal, bag, slot)
-- Remember last activated item
if bag and slot then
DisenchantEvent.spellTarget = GetContainerItemLink(bag, slot)
end
end
function onEvent(funcVars, event, spellName, spellDuration)
if event == "SPELLCAST_START" then
if spellName == _ENCH('ArgSpellname') then
DisenchantEvent.started = DisenchantEvent.spellTarget
DisenchantEvent.finished = nil
DisenchantEvent.startTime = GetTime()
DisenchantEvent.spellDuration = spellDuration / 1000 -- Convert ms to s
else
DisenchantEvent.started = nil
DisenchantEvent.finished = nil
end
return
end
if (event == "SPELLCAST_FAILED") or (event == "SPELLCAST_INTERRUPTED") then
DisenchantEvent.started = nil
DisenchantEvent.finished = nil
return
end
if event == "SPELLCAST_STOP" then
DisenchantEvent.finished = DisenchantEvent.started
DisenchantEvent.started = nil
return
end
if event == "LOOT_OPENED" then
if DisenchantEvent.finished then
-- Make sure loot windows opens within a few seconds from expected spell completion time
-- Normal range of lootLatency appears to be around -0.1 - 0.7s
local lootLatency = GetTime() - (DisenchantEvent.startTime + DisenchantEvent.spellDuration)
if (lootLatency > -1) and (lootLatency < 2) then
Enchantrix.Util.ChatPrint(string.format(_ENCH("FrmtFound"), DisenchantEvent.finished))
local sig = Enchantrix.Util.GetSigFromLink(DisenchantEvent.finished)
for i = 1, GetNumLootItems(), 1 do
if LootSlotIsItem(i) then
local icon, name, quantity, rarity = GetLootSlotInfo(i)
local link = GetLootSlotLink(i)
Enchantrix.Util.ChatPrint(string.format(" %s x%d", link, quantity))
-- Save result
local reagentID = Enchantrix.Util.GetItemIdFromLink(link)
if reagentID then
Enchantrix.Storage.SaveDisenchant(sig, reagentID, quantity)
end
end
end
end
end
DisenchantEvent.started = nil
DisenchantEvent.finished = nil
return
end
end
-- Execute on load
onLoad()