vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
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
        })