LUA - модификатор сдвига OnUpdate

Я кое-что меняю в аддоне для World of Warcraft, написанном на Lua. Существует простая логическая переменная, которая определяет, будут ли показаны некоторые «все» кадры или только определенный.

Итак, когда = true, будут отображаться только определенные кадры, когда = false, будут показаны все кадры.

Я хочу сделать модификатор с клавишей Shift, чтобы показывать все кадры при нажатии клавиши Shift и снова скрывать их, когда Shift освобождается.

if IsShiftKeyDown() then
    cfg.aura.onlyShowPlayer = false
else
    cfg.aura.onlyShowPlayer = true
end

Это мое очень простое решение, которое работает. Проблема здесь в том, что он работает только при запуске скрипта. Вы видите в WoW каждый раз, когда загружается интерфейс, он запускает скрипт, если не указано иное. Это не очень эффективно, потому что я отправил бы своего пользователя на экран загрузки.

OnUpdate должен исправить мою проблему здесь, которая будет запускать этот конкретный код каждый раз, когда кадр будет отображаться, что очень удобно, и это то, чего я хочу достичь.

Так вот что я сделал

local function onUpdate(self,elapsed)
   if IsShiftKeyDown() then
     cfg.aura.onlyShowPlayer = false
   else
     cfg.aura.onlyShowPlayer = true
   end 
end

local shiftdebuffs = CreateFrame("frame")
shiftdebuffs:SetScript("OnUpdate", onUpdate)

Моя проблема сейчас в том, что он не работает. Я новичок в материалах onUpdate и только скопировал его из другого аддона, который я сделал, и он работал нормально. Правильно, он идет прямо к = false, что, я думаю, происходит только потому, что это значение по умолчанию.

Спасибо за помощь


person gempir    schedule 03.10.2014    source источник


Ответы (1)


Правильно, он идет прямо к = false, что, я думаю, происходит только потому, что это значение по умолчанию.

Нет, в операторе if нет ветки "по умолчанию". Чтобы элемент управления попал в ветку then, условие должно оцениваться как true. Нужно проверить логику, но если скрипт выполнил cfg.aura.onlyShowPlayer = false, значит IsShiftKeyDown() оценивалось как true.

person Paul Kulchenko    schedule 03.10.2014
comment
Я не рассказал вам остальную часть сценария, так что да, это действительно по умолчанию. Потому что он проверяет, является ли cfg.aura.onlyShowPlayer истинным/ложным, и имеет другое действие if/else. Как я уже сказал, я только редактирую этот аддон, поэтому я не хотел вносить прямые изменения. - person gempir; 04.10.2014