⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myinventory.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 3 页
字号:
-- 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 + -