Как перенести ID предмета из игры [World of Warcraft 1.13.3] в мой аддон? - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу получить идентификатор элемента, щелкнув по нему указателем мыши с клавишей-модификатором или идентификатор элемента под указателем мыши, щелкнув по клавише клавиатуры.

Или как еще можно получить Идентификатор выбранного элемента в моем аддоне?

Я нашел документацию:

https://wowwiki.fandom.com/wiki/Using_bindings.xml_to_create_key_bindings_for_your_addon

https://wow.gamepedia.com/API_Frame_SetPropagateKeyboardInput

Но я не понимаю, как решить мою проблему.

1 Ответ

0 голосов
/ 14 февраля 2020

Возможно, есть лучшие способы сделать это, например, отображать информацию во всплывающей подсказке при наведении мыши, но вот простое решение, которое в основном делает то, что вы просили: отображение элемента и его идентификатора в окне чата, когда вы shift-click.

Это решение создает слушателя, который проверяет, когда вы впервые открываете свои сумки. Затем он прикрепляет код к каждому слоту в вашей открытой сумке, говоря ему печатать информацию при нажатии Shift. Когда этот код печатается в слотах в вашей последней сумке, он также говорит слушателю прекратить работу, чтобы не тратить ресурсы ЦП.

local listener = CreateFrame("Frame");
listener:SetScript("OnEvent", function()
    for bag=1, 5 do
        for slot=1, GetContainerNumSlots(bag-1) do
            local frame = _G["ContainerFrame" .. bag .. "Item" .. slot];
            if (frame and not frame.isHooked) then
                frame.isHooked = true;
                frame:HookScript("PreClick", function()
                    if (IsShiftKeyDown()) then
                        local itemLink, __, __, itemID = select(7, GetContainerItemInfo(bag - 1, frame:GetID()));
                        if (itemID) then
                            print(itemLink .. " " .. itemID);
                        end
                    end
                end);
                if(bag == 5) then
                    -- stops this from continuing to execute after all bags have been openned at least once.
                    listener:UnregisterEvent("BAG_UPDATE");
                end
            end
        end
    end
end);
listener:RegisterEvent("BAG_UPDATE");

Ссылки:

...