📄 quickequip.lua
字号:
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 + -