WORLD OF WARCRAFT

Тема: Оптимизация аддона  (Прочитано 1598 раз)

0 Пользователей и 1 Гость просматривают эту тему.

bodyka

  • Завсегдатай
  • **
  • Сообщений: 195

  • Варкрафт: +
    • Имя: Badb
    • Класс: HolyPally
    • Сервер: Howling Fjord
Оптимизация аддона
« : 22 Июня, 2018, 16:44:05 »
  • Рейтинг:0 (+0 | 0)


Давным давно на просторах интернета был найден аддон который меняет формат отображаемого хп
DEFAULT_CHAT_FRAME:AddMessage("Health.lua was successfully loaded.")
--Хелсы(%)+знач
PF=CreateFrame("Frame")
 function sh(hp,hpm)
 local a
 if hp<1 then return b end
 if hp<10000 then a=hp end
 if hp>10000 then a=(hp-mod(hp,100))/1000 a=a.."k" end --if hp>10k
 if hp>100000 then a=(hp-mod(hp,1000))/1000 a=a.."k" end --if hp>100k
 if hp>1000000 then a=(hp-mod(hp,10000))/1000000 a=a.."m" end --if hp>1M
 if hp>10000000 then a=(hp-mod(hp,1000000))/1000000 a=a.."m" end --if hp>10M
 if hp>1000000000 then a=(hp-mod(hp,100000000))/1000000000 a=a.."b" end --if hp>1B
 if hp>10000000000 then a=(hp-mod(hp,1000000000))/1000000000 a=a.."b" end --if hp>10B

 a = a.." | "..format("%.0f", ((hp/hpm)*100)).."%"
 return a
 end
 
pf2={"Player", "Target", "Focus","Pet"}
PF:SetScript("OnUpdate", function()
 for _,u in ipairs(pf2) do
  _G[u.."FrameHealthBar"].TextString:SetText(sh(UnitHealth(u),UnitHealthMax(u)))
  _G[u.."FrameManaBar"].TextString:SetText(sh(UnitPower(u),UnitPowerMax(u)))
  end
 end)
 
Сразу оговорюсь, я нечего не понимаю в программировании поэтому и прошу помощи.
Недавно заметил что аддон жрет довольно много по сравнению с другими.
Google подсказал что это из-за события OnUpdate так, как оно вызывается каждый кадр. На анг wowwiki написано что UnitHealth это тоже событие которое вызывается при изменении хп. Вопрос каким образом можно изменить формат напрямую без вызова OnUpdate ?

Ragnarex

  • Новичок
  • *
  • Сообщений: 1
  • Совокот в сапогах

  • Варкрафт: +
    • Имя: Рагнарекс
    • Класс: Друид
    • Сервер: Дракономор
Re: Оптимизация аддона
« Ответ #1 : 28 Июля, 2018, 12:41:04 »
  • Рейтинг:4 (+4 | 0)
Да, логичнее переключиться на событие изменения хп.

Делается это так:
Нужно зарегистрировать событие:
PF:RegisterEvent("UNIT_HEALTH")
И немного модифицировать callback:
PF:SetScript("OnEvent",
  function(self,event,unit)
    if (event == "UNIT_HEALTH") then
      //выполняемый код
    end
  end)

Хочу заметить, что событие UNIT_HEALTH уже содержит параметр unit, который можно использовать вместо перебора значений в массиве
pf2={"Player", "Target", "Focus","Pet"}
Угрозы, обещания и добрые намерения — ничто из этого не является действием.

 

закрыть