vanilla-wow-addons – Rev 1
?pathlinks?
AceLoot = {}
-- German Localization
function AceLoot_Locals_deDE()
AceLoot.Const = {
CmdOptions = {
{ option = "mode",
desc = "Nur einmal positionieren.",
method = "Toggle",
}
},
Chat = {
Toggle = "Nur einmal positionieren."
}
}
ace:RegisterGlobals({
version = 2.0,
translation = "deDE",
ACEG_ON = "|cff00ff00An|r",
ACEG_OFF = "|cffff5050Aus|r",
})
end
-- English Localization
if not ace:LoadTranslation("AceLoot") then
AceLoot.Const = {
CmdOptions = {
{ option = "mode",
desc = "Only position once.",
method = "Toggle",
}
},
Chat = {
Toggle = "Only position once."
}
}
ace:RegisterGlobals({
version = 2.0,
ACEG_ON = "|cff00ff00On|r",
ACEG_OFF = "|cffff5050Off|r",
})
end
-- MainCode
local const = AceLoot.Const
AceLoot.Obj = AceAddon:new({
name = "AceLoot",
version = " a./R9." .. string.sub("$Revision: 3091 $", 12, -3),
releaseDate = string.sub("$Date: 2006-06-21 20:52:26 +0200 (Mi, 21 Jun 2006) $", 8, 17),
author = "Neriak",
email = "pk@neriak.de",
website = "http://neriak_x.wowinterface.com",
aceCompatible = 103,
category = ACE_CATEGORY_INTERFACE,
db = AceDatabase:new("AceLootDB"),
cmd = AceChatCmdClass:new({"/aceloot", "/al"},const.CmdOptions),
--[[---------------------------
Hooking and Event Registration
-----------------------------]]
Enable = function(self)
UIPanelWindows["LootFrame"] = nil
LootFrame:SetMovable(1)
LootFrame:SetFrameStrata("DIALOG")
LootFrame:SetScript("OnMouseUp", function () this:StopMovingOrSizing() end)
LootFrame:SetScript("OnMouseDown", function () this:StartMoving() end)
self:RegisterEvent("PLAYER_ENTERING_WORLD")
self:RegisterEvent("PLAYER_LEAVING_WORLD")
self:Reg()
end,
PLAYER_ENTERING_WORLD = function(self)
self:Reg()
end,
PLAYER_LEAVING_WORLD = function(self)
self:UnregisterEvent("LOOT_OPENED")
self:UnregisterEvent("LOOT_SLOT_CLEARED")
self:UnregisterEvent("LOOT_CLOSED")
self.registered = nil
end,
Reg = function(self)
if self.registered then self:debug("Events already registered") return end
self:RegisterEvent("LOOT_OPENED", "ItemUnderCursor")
self:RegisterEvent("LOOT_SLOT_CLEARED", "ItemUnderCursor")
self:RegisterEvent("LOOT_CLOSED")
self.registered = true
end,
--[[----------------------------------------------------
Main Function taken and improved from Telo's QuickLoot
------------------------------------------------------]]
ItemUnderCursor = function(self)
self:AutoClose()
if self.called then return end
self.called = nil
local x, y = GetCursorPosition()
local s = LootFrame:GetEffectiveScale()
x = x / s
y = y / s
for i = 1, LOOTFRAME_NUMBUTTONS, 1 do
local button = getglobal("LootButton"..i)
if button:IsVisible() then
x = x - 29
y = y + 66 + (40 * i)
self:LootFrame_SetPoint(x,y)
if self:IsOnce() then self.called = true return end
return
end
end
if LootFrameDownButton:IsVisible() then
x = x - 158
y = y + 223
self:LootFrame_SetPoint(x,y)
end
end,
LOOT_CLOSED = function(self)
self.called = nil
end,
-- code submitted by hshh on www.wowace.com
LootFrame_SetPoint = function(self, x, y)
local screenWidth = GetScreenWidth()
if (UIParent:GetWidth() > screenWidth) then screenWidth = UIParent:GetWidth() end
local screenHeight = GetScreenHeight()
-- LootFrame is set to 256 wide in the xml file, but is actually only 191 wide
-- This is based on calculation envolving the offset on the close button:
-- The height is always 256, which is the correct number.
local windowWidth = 191
local windowHeight = 256
if (x + windowWidth) > screenWidth then x = screenWidth - windowWidth end
if y > screenHeight then y = screenHeight end
if x < 0 then x = 0 end
if (y - windowHeight) < 0 then y = windowHeight end
LootFrame:ClearAllPoints()
LootFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", x, y)
end,
AutoClose = function(self)
if GetNumLootItems() == 0 then
HideUIPanel(LootFrame)
return
end
end,
IsOnce = function(self)
return self:Get("Once")
end,
Toggle = function(self)
self:Tog("Once", const.Chat.Toggle.." [%s]")
end,
Report = function(self)
self.cmd:report({
{text=const.Chat.Toggle, val= self:Get("Once") and 1 or 0, map = ACEG_MAP_ONOFF}
})
end
})
--[[------------------------
The End -> Register Object
--------------------------]]
AceLoot.Obj:RegisterForLoad()
-- The Util Functions
ace:RegisterFunctions(AceLoot.Obj,{
version= 1.3,
Get = function(self, var) if type(self) == "string" then ace:print("! ERROR: "..self) end
return self.db:get(self.profilePath, var) end,
Set = function(self, var, val) self.db:set(self.profilePath, var, val) end,
Tog = function(self, var, c) self.cmd:result(format(c, self.db:toggle(self.profilePath, var) and ACEG_ON or ACEG_OFF)) end
})