📄 myinventory.lua
字号:
-- File: MyInventory.lua
--
-- Purpose: Functions for MyInventory WoW Window.
--
-- Author: Ramble - May, 2005
-- Svarten - MyInventory origional author.
--
-- Credits:
-- Sarf, for the original concept.
-- Telo, for LootLink which I love.
-- Kaitlin, for showing me how a good code should look.
-- Pan and Nirre, for testing Svarten's corrupt code during development.
-- -----------------------------------------------------------------
-- Vim command: :% s/^.* -LITE\({\_.\{-}}-LITE\)\=\(\s*-->\)\=$/
-- RegExp to remove Lite stuff: ^.* -LITE\({\_.\{-}}-LITE\)\=\(\s*-->\)\=$
-- This removes all lines ending in -LITE
--
-- And All Lines with a -LITE{ Starting line ended with
-- this at the end }-LITE
--
-- Also will work in XML so <!-- -LITE{
-- This works too
-- }-LITE -->
MyInventoryDEBUG = 0;
-- Global declarations {{{
-----------------------
-- Saved Configuration
-----------------------
MyInventoryProfile = {}
local PlayerName = nil;
-----------------------
-- Local Configuration
-----------------------
-- Constants {{{
MYINVENTORY_MAX_ID = 109;
MYINVENTORY_COLUMNS_MIN = 2;
MYINVENTORY_COLUMNS_MAX = 18;
MYINVENTORY_TOP_HEIGHT = 20;
MYINVENTORY_BOTTOM_HEIGHT = 16;
MYINVENTORY_FIRST_ITEM_OFFSET_X = 8;
MYINVENTORY_FIRST_ITEM_OFFSET_Y = -28;
MYINVENTORY_ITEM_OFFSET_X = 39;
MYINVENTORY_ITEM_OFFSET_Y = -39;
MyInventory_Loaded = nil;
MyInventory_Initialized = nil;
--}}}
-- Saved Between sessions:These are also the defaults
MyInventoryColumns = 8;
MyInventoryReplaceBags = 1;
MyInventoryBags = "11111";
MyInventoryGraphics = 0; -- -LITE
MyInventoryHighlightItems = 1;
MyInventoryHighlightBags = 1;
MyInventoryFreeze = 0;
-- Keep the window from closing with Close
-- These options are on the MI Window itself.
MyInventoryLock = 0; -- Lock the window in place
MyInventoryBagView = 1;
--Visibility
MyInventoryCount = 1;
MyInventoryBackground = 1;
MyInventoryShowTitle = 1;
MyInventoryCash = 1;
MyInventoryButtons = 1;
MyInventoryAIOIStyle = 0;
MyInventoryItemBorder = 1;
MyInventoryScale = 0.9; --tonumber(GetCVar("uiscale"));
-- Hooked functions {{{
MyInventory_Saved_ToggleBag = nil;
MyInventory_Saved_OpenBag = nil;
MyInventory_Saved_CloseBag = nil;
MyInventory_Saved_ToggleBackpack = nil;
MyInventory_Saved_CloseBackpack = nil;
MyInventory_Saved_OpenBackpack = nil;
MyInventory_Saved_OpenAllBags = nil;
MyInventory_Saved_CloseAllBags = nil;
MyInventory_Saved_BackpackButton_OnClick = nil;
MyInventory_Saved_LootFrame_OnShow = nil;
-- }}}
-- }}}
-- Loading {{{
function MyInventoryFrame_OnLoad() -- {{{
this:RegisterEvent("BAG_UPDATE");
this:RegisterEvent("BAG_UPDATE_COOLDOWN");
this:RegisterEvent("ITEM_LOCK_CHANGED");
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
MyInventory_Register();
MyInventory_Print(MYINVENTORY_MSG_LOADED);
end -- }}}
function MyInventory_InitializeProfile() --{{{
if MyInventory_Initialized == true then
return
end
if ( UnitName('player') ) then
PlayerName = UnitName('player').."|"..MyInventory_Trim(GetCVar("realmName"));
MyInventory_LoadSettings();
MyInventory_Print(format(MYINVENTORY_MSG_INIT_s,PlayerName));
MyInventory_Initialized = true;
MyInventoryFrame_UpdateLook();
MyInventory_SetFreeze();
end
end --}}}
function MyInventory_LoadSettings() --{{{
if ( MyInventoryProfile[PlayerName] == nil ) then
MyInventoryProfile[PlayerName] = {};
MyInventory_Print(format(MYINVENTORY_MSG_CREATE_s,PlayerName));
end
local MI_SoD = MyInventory_SavedOrDefault;
MyInventoryColumns = MI_SoD("Columns");
MyInventoryReplaceBags = MI_SoD("ReplaceBags");
MyInventoryFreeze = MI_SoD("Freeze");
MyInventoryLock = MI_SoD("Lock");
MyInventoryHighlightItems = MI_SoD("HighlightItems");
MyInventoryHighlightBags = MI_SoD("HighlightBags");
MyInventoryBagView = MI_SoD("BagView");
MyInventoryGraphics = MI_SoD("Graphics"); -- -LITE
MyInventoryBackground = MI_SoD("Background");
MyInventoryCount = MI_SoD("Count");
MyInventoryShowTitle = MI_SoD("ShowTitle");
MyInventoryCash = MI_SoD("Cash");
MyInventoryButtons = MI_SoD("Buttons");
MyInventoryScale = MI_SoD("Scale");
MyInventoryBags = MI_SoD("Bags");
MyInventoryAIOIStyle = MI_SoD("AIOIStyle");
MyInventoryItemBorder = MI_SoD("ItemBorder");
MyInventory_SetScale(tonumber(MyInventoryScale));
end -- }}}
function MyInventory_SavedOrDefault(varname) -- {{{
if PlayerName == nil or varname == nil then
MyInventory_DEBUG("ERR: nil value");
return nil;
end
if MyInventoryProfile[PlayerName][varname] == nil then -- Setting not set
MyInventoryProfile[PlayerName][varname] = getglobal("MyInventory"..varname); -- Load Default
end
return MyInventoryProfile[PlayerName][varname]; -- Return Setting.
end -- }}}
function MyInventory_Register() -- {{{
SlashCmdList["MYINVENTORYSLASHMAIN"] = MyInventory_ChatCommandHandler;
SLASH_MYINVENTORYSLASHMAIN1 = "/myinventory";
SLASH_MYINVENTORYSLASHMAIN2 = "/mi";
this:RegisterEvent("UNIT_NAME_UPDATE");
this:RegisterEvent("VARIABLES_LOADED");
end -- }}}
function MyInventory_MyAddonsRegister() -- {{{
if (myAddOnsFrame) then
myAddOnsList.MyInventory = {
name = MYINVENTORY_MYADDON_NAME,
description = MYINVENTORY_MYADDON_DESCRIPTION,
version = MYINVENTORY_MYADDON_VERSION,
category = MYADDONS_CATEGORY_INVENTORY,
frame = "MyInventoryFrame",
optionsframe = "MyInventoryOptionsFrame"
};
end
end -- }}}
-- }}}
-- Hooks functions. {{{
function MyInventory_Setup_Hooks(toggle) -- {{{
MyInventory_Saved_ToggleBag = ToggleBag;
ToggleBag = MyInventory_ToggleBag;
MyInventory_Saved_CloseBag = CloseBag;
CloseBag = MyInventory_CloseBag;
MyInventory_Saved_OpenBag = OpenBag;
OpenBag = MyInventory_OpenBag;
MyInventory_Saved_OpenAllBags = OpenAllBags;
OpenAllBags = MyInventory_OpenAllBags;
MyInventory_Saved_CloseAllBags = CloseAllBags;
CloseAllBags = MyInventory_CloseAllBags;
MyInventory_Saved_ToggleBackpack = ToggleBackpack;
ToggleBackpack = MyInventory_ToggleBackpack;
MyInventory_Saved_CloseBackpack = CloseBackpack;
CloseBackpack = MyInventory_CloseBackpack;
MyInventory_Saved_OpenBackpack = OpenBackpack;
OpenBackpack = MyInventory_OpenBackpack;
MyInventory_Saved_LootFrame_OnShow = LootFrame_OnShow;
LootFrame_OnShow = MyInventory_LootFrame_OnShow;
end -- }}}
-- Does things with the hooked function -- {{{
function MyInventory_LootFrame_OnShow()
MyInventory_Saved_LootFrame_OnShow();
LootFrame:Raise();
end
-- }}}
-- Toggling Bags/Backpack {{{
function MyInventory_ShouldOverrideBag(bag)
if ( (bag >= 0) and (bag <= 4) ) then
if strsub(MyInventoryBags,(1+bag),(1+bag)) == "1" then
return true;
else
return false
end
else
return false;
end
end
function MyInventory_ToggleBackpack()
MyInventory_DEBUG("ToggleBackpack called");
if ((MyInventoryReplaceBags == 1) and MyInventory_ShouldOverrideBag(0)) then
ToggleMyInventoryFrame();
return;
end
MyInventory_Saved_ToggleBackpack()
end
function MyInventory_ToggleBag(bag)
MyInventory_DEBUG("ToggleBag"..bag.." called");
if ((MyInventoryReplaceBags == 1) and MyInventory_ShouldOverrideBag(bag)) then
ToggleMyInventoryFrame();
return;
else
MyInventory_Saved_ToggleBag(bag);
end
end
function MyInventory_OpenBackpack()
MyInventory_DEBUG("Open Backpack called");
if ( MyInventoryReplaceBags == 1 ) then
OpenMyInventoryFrame();
return;
end
MyInventory_Saved_OpenBackpack()
end
function MyInventory_CloseBackpack()
MyInventory_DEBUG("Close Backpack called");
if ( MyInventoryReplaceBags == 1 and MyInventory_ShouldOverrideBag(0)) then
if ( MyInventoryFreeze == 0) then
CloseMyInventoryFrame();
end
return;
end
MyInventory_DEBUG("Default close");
MyInventory_Saved_CloseBackpack()
end
function MyInventory_CloseBag(bag)
MyInventory_DEBUG("Close Bag"..bag.." called");
if ((MyInventoryReplaceBags == 1) and MyInventory_ShouldOverrideBag(bag)) then
return;
else
MyInventory_Saved_CloseBag(bag);
end
end
function MyInventory_OpenBag(bag)
if ((MyInventoryReplaceBags == 1) and MyInventory_ShouldOverrideBag(bag)) then
return;
else
MyInventory_Saved_OpenBag(bag)
end
end
function MyInventory_OpenAllBags(forceOpen)
MyInventory_DEBUG("Open All Bags Called");
if ((MyInventoryReplaceBags == 1)) then
MyInventory_DEBUG("Replacing function");
-- OK, first determine if All bags are open, and if they are then close instead ::((
local bagsOpen=0;
local totalbags=0;
for i=0,4 do
if GetContainerNumSlots(i) > 0 then
totalbags=totalbags+1;
if MyInventoryFrame:IsVisible() and MyInventory_ShouldOverrideBag(i) then
bagsOpen = bagsOpen+1;
end
end
end
for i=1,NUM_CONTAINER_FRAMES,1 do
local containerFrame = getglobal("ContainerFrame"..i);
if containerFrame:IsVisible() then
bagsOpen=bagsOpen+1;
end
end
if totalbags==bagsOpen and not forceOpen then
CloseAllBags(1);
else
OpenMyInventoryFrame();
for i=0,4 do
if not MyInventory_ShouldOverrideBag(i) then
MyInventory_DEBUG("Opening bag "..i);
OpenBag(i);
end
end
end
return;
else
MyInventory_Saved_OpenAllBags(forceOpen);
end
end
function MyInventory_CloseAllBags(force)
MyInventory_DEBUG("Close All Bags Called");
if ((MyInventoryReplaceBags == 1)) then
MyInventory_DEBUG("Replacing function");
if MyInventoryFreeze==0 or force==1 then
CloseMyInventoryFrame();
end
for i=0,4 do
if not MyInventory_ShouldOverrideBag(i) then
CloseBag(i);
end
end
return
else
MyInventory_Saved_CloseAllBags(arg);
end
end
-- }}}
-- }}}
-- Options {{{
-- Slash commands {{{
function MyInventory_ChatCommandHandler(msg) -- {{{
if ( ( not msg ) or ( strlen(msg) <= 0 ) ) then
MyInventory_Print(MYINVENTORY_CHAT_COMMAND_USAGE);
return;
end
local commandName, params = MyInventory_Extract_NextParameter(msg);
if ( ( commandName ) and ( strlen(commandName) > 0 ) ) then
commandName = string.lower(commandName);
else
commandName = "";
end
if ( (strfind(commandName, "show")) or (strfind(commandName, "toggle")) ) then
ToggleMyInventoryFrame();
elseif ( strfind(commandName, "config") or strfind(commandName, "option") ) then
MyInventoryOptionsFrame:Show();
elseif ( strfind(commandName, "replace") ) then
MyInventory_Toggle_Option("ReplaceBags");
elseif ( strfind(commandName, "freeze") ) then
MyInventory_Toggle_Option("Freeze");
elseif ( strfind(commandName, "aioi") ) then
MyInventory_Toggle_Option("AIOIStyle", nil, nil, 1);
elseif ( strfind(commandName, "lock") ) then
MyInventory_Toggle_Option("Lock",nil,nil,1);
elseif ( strfind(commandName, "cash") or strfind(commandName, "money")) then
MyInventory_Toggle_Option("Cash",nil,nil,1);
elseif ( strfind(commandName, "button") ) then
MyInventory_Toggle_Option("Buttons",nil,nil,1);
elseif ( strfind(commandName, "title") ) then
MyInventory_Toggle_Option("ShowTitle",nil,nil,1);
elseif ( strfind(commandName, "count") or strfind(commandName, "slot")) then
MyInventory_Toggle_Option("Count",nil,nil,1);
elseif ( strfind(commandName, "graphic") or strfind(commandName, "art") ) then -- -LITE
MyInventory_Toggle_Option("Graphics",nil,nil,1); -- -LITE
elseif ( strfind(commandName, "back") ) then
MyInventory_Toggle_Option("Background",nil,nil,1);
elseif ( strfind(commandName, "bagview") ) then
MyInventory_Toggle_Option("BagView",nil,nil,1);
elseif ( strfind(commandName, "quality") ) then
MyInventory_Toggle_Option("ItemBorder",nil,nil,1);
elseif ( strfind(commandName, "col") ) then
cols, params = MyInventory_Extract_NextParameter(params);
if cols then
MyInventoryFrame_SetColumns(cols);
end
elseif ( strfind(commandName, "scale") ) then
scale, params = MyInventory_Extract_NextParameter(params);
if tonumber(scale) and tonumber(scale) >= 0.5 and tonumber(scale) <= 1.5 then
MyInventory_SetScale(scale);
else
MyInventory_Print("MyInventory: Scale is at "..MyInventoryScale);
end
elseif ( strfind(commandName, "resetpos") ) then
MyInventoryAnchorFrame:ClearAllPoints();
MyInventoryAnchorFrame:SetPoint("BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", 0, 50);
MyInventoryFrame:ClearAllPoints();
MyInventoryFrame:SetPoint("BOTTOMRIGHT", "MyInventoryAnchorFrame", "BOTTOMRIGHT");
else
MyInventory_Print(MYINVENTORY_CHAT_COMMAND_USAGE);
return;
end
end -- }}}
function MyInventory_Extract_NextParameter(msg) -- {{{
local params = msg;
local command = params;
local index = strfind(command, " ");
if ( index ) then
command = strsub(command, 1, index-1);
params = strsub(params, index+1);
else
params = "";
end
return command, params;
end -- }}}
-- }}}
function MyInventory_Toggle_Option(option, value, quiet, updateLook) -- {{{
if value == nil then
if getglobal("MyInventory"..option) == 1 then
value = 0;
else
value = 1;
end
end
setglobal("MyInventory"..option, value);
MyInventoryProfile[PlayerName][option] = value;
if not quiet or quiet ~= 1 then
local chat_message;
local globalName = "MYINVENTORY_CHAT_"..string.upper(option);
if value == 0 then
globalName = globalName.."OFF";
else
globalName = globalName.."ON";
end
chat_message = getglobal(globalName);
if ( chat_message ) then
MyInventory_Print(MYINVENTORY_CHAT_PREFIX..chat_message);
else
MyInventory_DEBUG("ERROR: No global "..globalName);
end
end
if MyInventoryBagView == 1 and MyInventoryColumns < 5 then
MyInventoryFrame_SetColumns(5);
end
if updateLook and updateLook == 1 then
MyInventoryFrame_UpdateLook();
end
if option=="Freeze" then
MyInventory_SetFreeze()
elseif option=="ReplaceBags" then
MyInventory_SetReplace();
elseif option=="Graphics" then -- -LITE
MyInventoryFrame_Update(); -- -LITE
elseif option=="ItemBorder" then
MyInventoryFrame_Update();
end
end -- }}}
function MyInventory_SetFreeze() -- {{{
if MyInventoryFreeze == 0 then
tinsert(UISpecialFrames, "MyInventoryFrame"); -- Esc Closes Inventory
else
for key, value in UISpecialFrames do
if value == "MyInventoryFrame" then
table.remove(UISpecialFrames, key);
end
end
end
end -- }}}
function MyInventory_SetReplace() -- {{{
if MyInventoryReplaceBags==1 then
for i=0,4 do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -