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

📄 quickequip.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 2 页
字号:
BINDING_HEADER_QUICKEQUIP_TITLE = "快速换装快捷键设置";
BINDING_NAME_QUICKEQUIP_SAVE1 = "设置1";
BINDING_NAME_QUICKEQUIP_SAVE2 = "设置2";
BINDING_NAME_QUICKEQUIP_SAVE3 = "设置3";
BINDING_NAME_QUICKEQUIP_SAVE4 = "设置4";
BINDING_NAME_QUICKEQUIP_SAVE5 = "设置5";
BINDING_NAME_QUICKEQUIP_SAVE6 = "设置6";
BINDING_NAME_QUICKEQUIP_PREV = "切换到上一个设置";
BINDING_NAME_QUICKEQUIP_NEXT = "切换到下一个设置";
BINDING_HEADER_EAE_TITLE = "自动换装按键" 

BINDING_NAME_EAE_SET1 = "套装 1" 
BINDING_NAME_EAE_SET2 = "套装 2" 
BINDING_NAME_EAE_SET3 = "套装 3" 
BINDING_NAME_EAE_SET4 = "套装 4" 
EAE_SAVE_CONFIRM = "该操作将覆盖以前的套装设置, 您确定吗?" 
EAE_HELP_SAVE_BTN_TITLE = "保存套装配置" 
EAE_HELP_SAVE_BTN_DESC = "将当前的装备配置保存到目前选择的套装1-4里。此操作会覆盖原有套装设置。" 
EAE_HELP_SET_BTN_TITLE = "选择套装" 
EAE_HELP_SET_BTN_DESC = "切换到套装 %s,如果该套装号里不存在,将不会有任何装备被切换。" 
EAE_MSG_ITEM_LOCKED = "无法更换到此套装, 请稍后再尝试."
EAE_MSG_SET_SAVED = "套装 %s 已保存.";
EAE_MSG_LOAD_SET = "切换到套装 %s";
EAE_MSG_ITEM_NOTEXISTS = "物品 |cffffffff[%s]|r 不存在或已更新, 建议您重新设定并保存.";
EAE_MSG_BAG_FULL = "背包已满,装备未能全部卸下。"

EAE_Slots = { 
	"HeadSlot", 
	"NeckSlot", 
	"ShoulderSlot", 
	"BackSlot", 
	"ChestSlot", 
	"ShirtSlot", 
	"TabardSlot", 
	"WristSlot", 
	"HandsSlot", 
	"WaistSlot", 
	"LegsSlot", 
	"FeetSlot", 
	"Finger0Slot", 
	"Finger1Slot", 
	"Trinket0Slot", 
	"Trinket1Slot", 
	"MainHandSlot", 
	"SecondaryHandSlot", 
	"RangedSlot", 
	"AmmoSlot", 
} 
QuickEquip = {};
QuickEquip_Enable = nil;
QuickEquip_Sava1 = {};
QuickEquip_Sava2 = {};
QuickEquip_Sava3 = {};
QuickEquip_Sava4 = {};
QuickEquip_Sava5 = {};
QuickEquip_Sava6 = {};
QuickEquip_Current = nil;

function QuickEquipFrame_OnLoad()


     --- RegisterForSave("Repair_Cost");

        
	this:RegisterEvent("VARIABLES_LOADED");   ---读取以往数据
	-- Init data

      EAE_Config = {}
      --------------------------gu2006-3-6-----------------------------------------------
        --如果用户自己设置了装备
	--则读出用户自己设置的装备
	--否则默认第一套装备
    
       
	if (not EAE_Config) then
	    EAE_Config = {}
            --setId = EAE_GetCurrentSetId();
	    --local numSetId = tonumber(setId) 
	   
	    --if ( not numSetId ) then 
            --    EAE_Config=EAE_GetPlayerEquipSet(setId);
	   -- else
	    --    EAE_Config=EAE_Config[EAE_PlayerId][numSetId]
	   -- end
	    
	end;

  ---------------------gu2006-3-6更新完毕----------------
    


	EAE_RealmName = GetCVar("realmName");
	if (not EAE_RealmName) then
		EAE_RealmName = "Enigma";
	end;
	EAE_PlayerName = UnitName("player");
	if (not EAE_PlayerName) then
		EAE_PlayerName = "Unknown";
	end;
	EAE_PlayerId = EAE_PlayerName .. "@" .. EAE_RealmName;
end
function EAE_SavePlayerEquipSet(setId) 
	local index, value; 
	local equipSet = EAE_GetPlayerEquipSet(setId);
	for index, value in EAE_Slots do 
		local itemName, itemLinkId = EAE_GetItemInfo("inventory", value);
		if ( itemName and itemLinkId ) then
			equipSet[value] = {name = itemName, link = itemLinkId};
		else
			equipSet[value] = {name = nil, link = nil};
		end 
	end
	--DEFAULT_CHAT_FRAME:AddMessage(string.format(EAE_MSG_SET_SAVED, setId), 1, 0.75 , 0);
end 
function QuickEquipFrame_OnEvent(event)
	if ( event == "VARIABLES_LOADED" ) then
		setId = EAE_GetCurrentSetId();
		if ( not setId or setId == 0 ) then
			EAE_SetCurrentSetId(1);
			EAE_SavePlayerEquipSet(1); 
			QuickEquipButton1:SetChecked(1);
		else 
			
			--------------------------2006-3-6------------------
			--MFC.IO.print("change equipment"..setId);

                        if (not EAE_Config) then
			  EAE_LoadPlayerEquipSet(setId,0);

                        end
                         --------------------------2006-3-6更新完毕------------------

			local objSetButton = getglobal("QuickEquipButton"..setId);
			objSetButton:SetChecked(1);
		end;
		QuickEquip_Current = setId;
		if ( QuickEquip_Enable == 0 ) then
			QuickEquipFrame:Hide();
		end
	end
	QuickEquip_Register();
	--------------------------2006-3-6------------------
	--QuickEquipSave_OnQuery();
	--------------------------2006-3-7更新完毕-----------
end

function QuickEquip_Register()
	gLim_RegisterButton (
		"Quick Equip",
		"快速换装",
		"Interface\\AddOns\\QuickEquip\\Icon",
		function()
			gLimModSecBookShowConfig("gLimQuickEquip");
		end,
		2,
		4
	);
	gLim_RegisterConfigClass(
		"gLimQuickEquip",
		"Quick Equip",
		"黑眼圈"
	);
	gLim_RegisterConfigSection(
		"gLim_QuickEquip_Section",
		"快速换装",
		"设置快速换装",
		nil,
		"gLimQuickEquip"
	);
	gLim_RegisterConfigCheckBox(
		"gLim_QuickEquip_Enable",
		"允许快速换装(支持脱衣)",
		"允许快速切换装备,主副手武器对调,脱光衣服",
		QuickEquip_Enable,
		QuickEquip_Enabler,
		"gLimQuickEquip"
	);
	gLim_RegisterConfigButton(
		"gLim_QuickEquip_ClearAll",
		"清除所有装备设置",
		"清空当前人物所有装备设置",
		"清除",
		QuickEquip_ClearAll,
		"gLimQuickEquip"
	);

	gLim_RegisterConfigButton(
		"gLim_QuickEquip_Binding",
		"为快速换装绑定快捷键",
		"绑定快捷键",
		"按键绑定",
		function ()
			gLimKeyBinding("HEADER_QUICKEQUIP_TITLE");
			gLimConfigSubFrame:Hide();
		end,
		"gLimQuickEquip"
	);
end

function QuickEquip_Load(arg1)
	local new = getglobal("QuickEquip_Sava"..arg1);
	local old = getglobal("QuickEquip_Sava"..QuickEquip_Current);
	local itemList = QuickEquip_GetBagItemInfo();
	for slot, item in new do
		if ( item and item ~= old[slot] ) then
			for index, value in itemList do
				if ( value.name == item ) then
					PickupContainerItem(value.bagID, value.itemID);
					local id;
					local itemName;
					id, itemName = GetInventorySlotInfo(slot);
					PickupInventoryItem(id);
				end
			end
		end
	end
	QuickEquip_Current = arg1;
	QuickEquip.Current = arg1;
end
function EAE_GetItemInfo(itemType, ...) 
	if ( itemType == "container" ) then 
		--arg1, 2 for bagId, slotId
		local itemLink = GetContainerItemLink(arg[1], arg[2]) 
		return EAE_GetItemInfoByLink(itemLink) 
	elseif ( itemType == "inventory" ) then
		--arg1 for slotName
		local itemLink = GetInventoryItemLink("player", GetInventorySlotInfo(arg[1])) 
		return EAE_GetItemInfoByLink(itemLink) 
	end 
end
function EAE_GetItemInfoByLink(itemLink) 
	local itemName, itemLinkId;
	if ( not itemLink or type(itemLink) ~= "string" ) then 
		return;
	end 
	for itemLinkId, itemName in string.gfind(itemLink,"|H(item:%d+:%d+:%d+:%d+)|h%[([^]]+)%]|h|r$") do 
		if (itemLinkId and itemName) then 
			return itemName, itemLinkId;
		end 
	end 
end 
function QuickEquip_Save(arg1)
	--[[
	for item, value in slotInfo do
		local id;
		local itemName;
		id, itemName = GetInventorySlotInfo(value);
		local hasItem, hasCooldown = QuickEquipTooltip:SetInventoryItem("player", id);
		local var = getglobal("QuickEquip_Sava"..arg1);
		if (var == nil) then
			return;
		end
		if ( hasItem ) then
			local name = QuickEquipTooltipTextLeft1:GetText();
			var[value] = name;
			local string = value.." = "..name;
		else
			var[value] = nil;
		end
	end
	]]
	local index, value; 
	local equipSet = EAE_GetPlayerEquipSet(arg1);
	for index, value in EAE_Slots do 
		local itemName, itemLinkId = EAE_GetItemInfo("inventory", value);
		if ( itemName and itemLinkId ) then
			equipSet[value] = {name = itemName, link = itemLinkId};
		else
			equipSet[value] = {name = nil, link = nil};
		end 
	end
	DEFAULT_CHAT_FRAME:AddMessage(string.format(EAE_MSG_SET_SAVED, arg1), 1, 0.75 , 0);
end

function EAE_GetPlayerEquipSet(setId) 
	local numSetId = tonumber(setId) 
	if ( not numSetId ) then 
		return
	end 
	if ( not EAE_Config[EAE_PlayerId][numSetId] ) then 
		EAE_Config[EAE_PlayerId][numSetId] = {} 
	end 
	return EAE_Config[EAE_PlayerId][numSetId] 
end 

function QuickEquip_GetBagItemInfo()
	local itemlist = {};

	for id=0, NUM_BAG_FRAMES, 1 do
		local bagframe;
		local unusedframe;
		local size = GetContainerNumSlots(id);
		for j=1, NUM_CONTAINER_FRAMES, 1 do
			local frame = getglobal("ContainerFrame"..j);
			local frameid = frame:GetID();
			if(frameid == id) then
				bagframe = frame;
				break;
			end
			if(not frame:IsVisible()) then
			  unusedframe = frame;
			end
		end
		if(not bagframe and unusedframe) then
			frame = unusedframe;
			frame:SetID(id);
		else
			frame = bagframe;
		end
		local name = frame:GetName();
		for j = size, 1, -1 do
			local itemButton = getglobal(name.."Item"..j);
			local texture, itemCount, locked, quality, readable = GetContainerItemInfo(id, j);
			QuickEquipTooltip:SetBagItem(id,j);
			local itemname = QuickEquipTooltipTextLeft1:GetText();
			local item = {};
			item.name = itemname;
			item.bagID = id;
			item.itemID = j;
			table.insert(itemlist, item);
		end
	end

	return itemlist;
end

function QuickEquipButton_OnClick(arg1)
	--判断当前鼠标是不是在拾取东西.或者是玩家已经挂掉了.
	if (CursorHasItem() or UnitIsDeadOrGhost("player")) then
		return;
	end;
	QuickEquipButton1:SetChecked(nil);
	QuickEquipButton2:SetChecked(nil);
	QuickEquipButton3:SetChecked(nil);
	QuickEquipButton4:SetChecked(nil);
	local chk = getglobal("QuickEquipButton"..arg1);
	chk:SetChecked(1);
	if ( QuickEquip_Current ~= arg1 ) then
		--QuickEquip_Load(arg1);
		EAE_LoadPlayerEquipSet(arg1, 1);
	end
	QuickEquip_Current = arg1;
end
function EAE_IsSlotEqual(slot1, slot2) 
	return (slot1.type == slot2.type and slot1.bagId == slot2.bagId and slot1.slotId == slot2.slotId) 
end 
function EAE_MustPickUp(srcSlot, dstSlot, setId)
	if (srcSlot.type == "container") then 
		-- if source slot is in container, return true (from container to inventory);
		return 1;
	else
		if (EAE_IsSlotEqual(srcSlot, dstSlot)) then 
			-- if source slot equals to destination slot, return false (no pickup needed);
			return;
		end
		return 1;
	end
end

function EAE_GetPlayerItems()
	-- Generate a dataset, index is item linkid, value is item's slotinfo
	EAE_PlayerItems = {};
	local bagIndex; 
	for bagIndex = 0, NUM_CONTAINER_FRAMES, 1 do 
		local slotIndex; 
		for slotIndex = 1, GetContainerNumSlots(bagIndex), 1 do 
			local itemName, itemLinkId = EAE_GetItemInfo("container", bagIndex, slotIndex); 
			if (itemName and itemLinkId) then 
				local slot = {}; 
				slot.type = "container"; 
				slot.bagId = bagIndex; 
				slot.slotId = slotIndex; 
				if (EAE_PlayerItems[itemLinkId]) then

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -