wow 30402 update libs + fix taint issue

This commit is contained in:
Sumsebrum 2023-07-15 14:31:46 +02:00
parent 8f4f153011
commit 117888cdb0
13 changed files with 122 additions and 91 deletions

1
.gitignore vendored
View File

@ -6,5 +6,6 @@ BuffLib
Ace-Libs Ace-Libs
Images_Raw Images_Raw
Gladdy_old Gladdy_old
DoNotCommit
untracked untracked
Gladdy_TW Gladdy_TW

View File

@ -13,7 +13,6 @@ local CreateFrame = CreateFrame
local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME local DEFAULT_CHAT_FRAME = DEFAULT_CHAT_FRAME
local IsAddOnLoaded = IsAddOnLoaded local IsAddOnLoaded = IsAddOnLoaded
local GetBattlefieldStatus = GetBattlefieldStatus local GetBattlefieldStatus = GetBattlefieldStatus
local IsActiveBattlefieldArena = IsActiveBattlefieldArena
local IsInInstance = IsInInstance local IsInInstance = IsInInstance
local GetNumArenaOpponents = GetNumArenaOpponents local GetNumArenaOpponents = GetNumArenaOpponents
local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"} local RELEASE_TYPES = { alpha = "Alpha", beta = "Beta", release = "Release"}
@ -433,23 +432,22 @@ end
function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index) function Gladdy:UPDATE_BATTLEFIELD_STATUS(_, index)
local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, isRankedArena, suspendedQueue, bool, queueType = GetBattlefieldStatus(index) local status, mapName, instanceID, levelRangeMin, levelRangeMax, teamSize, isRankedArena, suspendedQueue, bool, queueType = GetBattlefieldStatus(index)
local instanceType = select(2, IsInInstance()) local instanceType = select(2, IsInInstance())
Gladdy:Debug("INFO", "UPDATE_BATTLEFIELD_STATUS", instanceType, status, teamSize) self:Debug("INFO", "UPDATE_BATTLEFIELD_STATUS", instanceType, status, teamSize)
if ((instanceType == "arena" or GetNumArenaOpponents() > 0) and status == "active" and teamSize > 0) then if ((instanceType == "arena" or GetNumArenaOpponents() > 0) and status == "active" and teamSize > 0) then
self.curBracket = teamSize self.curBracket = teamSize
self:JoinedArena() self:JoinedArena()
elseif status == "active" then
if self.db.hideBlizzard == "always" then
self:BlizzArenaSetAlpha(0)
else
self:BlizzArenaSetAlpha(1)
end
end end
end end
function Gladdy:PLAYER_REGEN_ENABLED() function Gladdy:PLAYER_REGEN_ENABLED()
if self.showFrame then if self.showFrame then
self:UpdateFrame() self:InitFrames()
if self.startTest then
self:Test()
self.startTest = nil
end
self.frame:Show()
self:SendMessage("JOINED_ARENA")
self.showFrame = nil
end end
if self.hideFrame then if self.hideFrame then
self:Reset() self:Reset()
@ -481,8 +479,8 @@ function Gladdy:Reset()
for unit in pairs(self.buttons) do for unit in pairs(self.buttons) do
self:ResetUnit(unit) self:ResetUnit(unit)
end end
if Gladdy.db.hideBlizzard == "never" or Gladdy.db.hideBlizzard == "arena" then if self.db.hideBlizzard == "never" or self.db.hideBlizzard == "arena" then
Gladdy:BlizzArenaSetAlpha(1) self:BlizzArenaSetAlpha(1)
end end
end end
@ -525,6 +523,16 @@ end
--------------------------- ---------------------------
function Gladdy:JoinedArena() function Gladdy:JoinedArena()
if InCombatLockdown() then
self:Print("Gladdy frames show as soon as you leave combat")
self.showFrame = true
else
self:InitFrames()
end
end
function Gladdy:InitFrames()
self.showFrame = nil
if not self.curBracket then if not self.curBracket then
self.curBracket = 2 self.curBracket = 2
end end
@ -535,19 +543,21 @@ function Gladdy:JoinedArena()
end end
end end
if InCombatLockdown() then self:UpdateFrame()
Gladdy:Print("Gladdy frames show as soon as you leave combat") if self.startTest then
self.showFrame = true self:Test()
else self.startTest = nil
self:UpdateFrame()
self.frame:Show()
self:SendMessage("JOINED_ARENA")
end end
self.frame:Show()
self:SendMessage("JOINED_ARENA")
for i=1, self.curBracket do for i=1, self.curBracket do
self.buttons["arena" .. i]:SetAlpha(1) self.buttons["arena" .. i]:SetAlpha(1)
end end
if Gladdy.db.hideBlizzard == "arena" or Gladdy.db.hideBlizzard == "always" then if self.db.hideBlizzard == "arena" or self.db.hideBlizzard == "always" then
Gladdy:BlizzArenaSetAlpha(0) self:BlizzArenaSetAlpha(0)
else
self:BlizzArenaSetAlpha(1)
end end
end end

View File

@ -1,5 +1,5 @@
## Title: Gladdy |cFFFF0000 game client not supported|r ## Title: Gladdy |cFFFF0000 game client not supported|r
## Version: 2.23-Release ## Version: 2.24-Release
## Notes: The most powerful arena AddOn for WoW Classic TBC/WotLK ## Notes: The most powerful arena AddOn for WoW Classic TBC/WotLK
## Author: XiconQoo, DnB_Junkee, Knall ## Author: XiconQoo, DnB_Junkee, Knall
## X-Email: contact me on discord Knall#1751 ## X-Email: contact me on discord Knall#1751

View File

@ -1,6 +1,6 @@
## Interface: 20504 ## Interface: 20504
## Title: Gladdy - TBC ## Title: Gladdy - TBC
## Version: 2.23-Release ## Version: 2.24-Release
## Notes: The most powerful arena AddOn for WoW 2.5.4 ## Notes: The most powerful arena AddOn for WoW 2.5.4
## Author: XiconQoo, DnB_Junkee, Knall ## Author: XiconQoo, DnB_Junkee, Knall
## X-Email: contact me on discord Knall#1751 ## X-Email: contact me on discord Knall#1751

View File

@ -1,7 +1,7 @@
## Interface: 30401 ## Interface: 30402
## Title: Gladdy - WotLK ## Title: Gladdy - WotLK
## Version: 2.23-Release ## Version: 2.24-Release
## Notes: The most powerful arena AddOn for WoW 3.4.0 ## Notes: The most powerful arena AddOn for WoW 3.4.2
## Author: XiconQoo, DnB_Junkee, Knall ## Author: XiconQoo, DnB_Junkee, Knall
## X-Email: contact me on discord Knall#1751 ## X-Email: contact me on discord Knall#1751
## X-Curse-Project-ID: 482332 ## X-Curse-Project-ID: 482332

View File

@ -1,13 +1,13 @@
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. --- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables.
-- @class file -- @class file
-- @name AceConfigDialog-3.0 -- @name AceConfigDialog-3.0
-- @release $Id: AceConfigDialog-3.0.lua 1292 2022-09-29 08:00:11Z nevcairiel $ -- @release $Id: AceConfigDialog-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $
local LibStub = LibStub local LibStub = LibStub
local gui = LibStub("AceGUI-3.0") local gui = LibStub("AceGUI-3.0")
local reg = LibStub("AceConfigRegistry-3.0") local reg = LibStub("AceConfigRegistry-3.0")
local MAJOR, MINOR = "AceConfigDialog-3.0", 85 local MAJOR, MINOR = "AceConfigDialog-3.0", 86
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
if not AceConfigDialog then return end if not AceConfigDialog then return end
@ -147,6 +147,7 @@ local stringIsLiteral = {
width = true, width = true,
image = true, image = true,
fontSize = true, fontSize = true,
tooltipHyperlink = true
} }
--Is Never a function or method --Is Never a function or method
@ -501,6 +502,14 @@ local function OptionOnMouseOver(widget, event)
local tooltip = AceConfigDialog.tooltip local tooltip = AceConfigDialog.tooltip
tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT") tooltip:SetOwner(widget.frame, "ANCHOR_TOPRIGHT")
local tooltipHyperlink = GetOptionsMemberValue("tooltipHyperlink", opt, options, path, appName)
if tooltipHyperlink then
tooltip:SetHyperlink(tooltipHyperlink)
tooltip:Show()
return
end
local name = GetOptionsMemberValue("name", opt, options, path, appName) local name = GetOptionsMemberValue("name", opt, options, path, appName)
local desc = GetOptionsMemberValue("desc", opt, options, path, appName) local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
local usage = GetOptionsMemberValue("usage", opt, options, path, appName) local usage = GetOptionsMemberValue("usage", opt, options, path, appName)

View File

@ -8,10 +8,10 @@
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName". -- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
-- @class file -- @class file
-- @name AceConfigRegistry-3.0 -- @name AceConfigRegistry-3.0
-- @release $Id: AceConfigRegistry-3.0.lua 1207 2019-06-23 12:08:33Z nevcairiel $ -- @release $Id: AceConfigRegistry-3.0.lua 1296 2022-11-04 18:50:10Z nevcairiel $
local CallbackHandler = LibStub("CallbackHandler-1.0") local CallbackHandler = LibStub("CallbackHandler-1.0")
local MAJOR, MINOR = "AceConfigRegistry-3.0", 20 local MAJOR, MINOR = "AceConfigRegistry-3.0", 21
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR) local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
if not AceConfigRegistry then return end if not AceConfigRegistry then return end
@ -83,6 +83,7 @@ local basekeys={
dialogHidden=optmethodbool, dialogHidden=optmethodbool,
dropdownHidden=optmethodbool, dropdownHidden=optmethodbool,
cmdHidden=optmethodbool, cmdHidden=optmethodbool,
tooltipHyperlink=optstringfunc,
icon=optstringnumberfunc, icon=optstringnumberfunc,
iconCoords=optmethodtable, iconCoords=optmethodtable,
handler=opttable, handler=opttable,

View File

@ -40,8 +40,8 @@
-- end -- end
-- @class file -- @class file
-- @name AceDB-3.0.lua -- @name AceDB-3.0.lua
-- @release $Id: AceDB-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ -- @release $Id: AceDB-3.0.lua 1306 2023-06-23 14:55:09Z nevcairiel $
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 27 local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 28
local AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR) local AceDB = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR)
if not AceDB then return end -- No upgrade needed if not AceDB then return end -- No upgrade needed
@ -260,7 +260,7 @@ local factionrealmKey = factionKey .. " - " .. realmKey
local localeKey = GetLocale():lower() local localeKey = GetLocale():lower()
local regionTable = { "US", "KR", "EU", "TW", "CN" } local regionTable = { "US", "KR", "EU", "TW", "CN" }
local regionKey = regionTable[GetCurrentRegion()] local regionKey = regionTable[GetCurrentRegion()] or GetCurrentRegionName() or "TR"
local factionrealmregionKey = factionrealmKey .. " - " .. regionKey local factionrealmregionKey = factionrealmKey .. " - " .. regionKey
-- Actual database initialization function -- Actual database initialization function

View File

@ -1,7 +1,7 @@
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. --- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles.
-- @class file -- @class file
-- @name AceDBOptions-3.0 -- @name AceDBOptions-3.0
-- @release $Id: AceDBOptions-3.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ -- @release $Id: AceDBOptions-3.0.lua 1304 2023-05-19 19:50:10Z nevcairiel $
local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15 local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15
local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR) local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR)
@ -84,25 +84,25 @@ elseif LOCALE == "frFR" then
L["reset_desc"] = "Réinitialise le profil actuel au cas où votre configuration est corrompue ou si vous voulez tout simplement faire table rase." L["reset_desc"] = "Réinitialise le profil actuel au cas où votre configuration est corrompue ou si vous voulez tout simplement faire table rase."
L["reset_sub"] = "Réinitialise le profil actuel avec les paramètres par défaut." L["reset_sub"] = "Réinitialise le profil actuel avec les paramètres par défaut."
elseif LOCALE == "koKR" then elseif LOCALE == "koKR" then
L["choose"] = "저장 중인 프로필" L["choose"] = "기존 프로필"
L["choose_desc"] = "입력창에 새로운 이름을 입력하거나 저장 중인 프로필 중 하나를 선택하여 새로운 프로필을 만들 수 있습니다." L["choose_desc"] = "편집 상자에 이름을 입력하여 새로운 프로필을 만들거나 이미 존재하는 프로필 중 하나를 선택할 수 있습니다."
L["choose_sub"] = "현재 이용할 수 있는 프로필 중 하나를 선택합니다." L["choose_sub"] = "현재 이용할 수 있는 프로필 중 하나를 선택합니다."
L["copy"] = "복사해오기" L["copy"] = "복사해 올 프로필"
L["copy_desc"] = "현재 사용 중인 프로필에 선택한 프로필의 설정을 복사합니다." L["copy_desc"] = "기존 프로필의 설정을 현재 활성화된 프로필로 복사합니다."
L["current"] = "현재 프로필:" L["current"] = "현재 프로필:"
L["default"] = "기본값" L["default"] = "기본값"
L["delete"] = "프로필 삭제" L["delete"] = "프로필 삭제"
L["delete_confirm"] = "정말로 선택한 프로필을 삭제할까요?" L["delete_confirm"] = "선택한 프로필을 삭제하시겠습니까?"
L["delete_desc"] = "저장 공간 절약과 SavedVariables 파일의 정리를 위해 데이터베이스에서 사용하지 않는 프로필을 삭제하세요." L["delete_desc"] = "데이터베이스에서 기존 프로필과 사용하지 않는 프로필을 삭제하여 공간을 절약하고 SavedVariables 파일을 정리합니다."
L["delete_sub"] = "데이터베이스 프로필을 삭제합니다." L["delete_sub"] = "데이터베이스에서 프로필을 삭제합니다."
L["intro"] = "활성 데이터베이스 프로필을 변경할 수 있고, 각 캐릭터 별로 다른 설정을 할 수 있습니다." L["intro"] = "활성 데이터베이스 프로필을 변경할 수 있으며, 모든 캐릭터마다 서로 다른 설정을 지정할 수 있습니다."
L["new"] = "새로운 프로필" L["new"] = "새로운 프로필"
L["new_sub"] = "새로운 프로필을 만듭니다." L["new_sub"] = "비어 있는 프로필을 새로 만듭니다."
L["profiles"] = "프로필" L["profiles"] = "프로필"
L["profiles_sub"] = "프로필 관리" L["profiles_sub"] = "프로필 관리"
L["reset"] = "프로필 초기화" L["reset"] = "프로필 재설정"
L["reset_desc"] = "설정이 깨졌거나 처음부터 다시 설정을 원하는 경우, 현재 프로필을 기본값으로 초기화하세요." L["reset_desc"] = "구성이 손상되었거나 처음부터 다시 시작하고 싶은 경우 현재 프로필을 기본값으로 재설정하세요."
L["reset_sub"] = "현재 프로필을 기본값으로 초기화합니다" L["reset_sub"] = "현재 프로필을 기본값으로 재설정합니다"
elseif LOCALE == "esES" or LOCALE == "esMX" then elseif LOCALE == "esES" or LOCALE == "esMX" then
L["choose"] = "Perfiles existentes" L["choose"] = "Perfiles existentes"
L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes." L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes."
@ -166,31 +166,31 @@ elseif LOCALE == "zhCN" then
elseif LOCALE == "ruRU" then elseif LOCALE == "ruRU" then
L["choose"] = "Существующие профили" L["choose"] = "Существующие профили"
L["choose_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей." L["choose_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей."
L["choose_sub"] = "Выбор одиного из уже доступных профилей" L["choose_sub"] = "Выбор одного из уже доступных профилей."
L["copy"] = "Скопировать из" L["copy"] = "Скопировать из"
L["copy_desc"] = "Скопировать настройки из выбранного профиля в активный." L["copy_desc"] = "Копирование настроек из выбранного профиля в активный."
L["current"] = "Текущий профиль:" L["current"] = "Текущий профиль:"
L["default"] = "По умолчанию" L["default"] = "По умолчанию"
L["delete"] = "Удалить профиль" L["delete"] = "Удалить профиль"
L["delete_confirm"] = "Вы уверены, что вы хотите удалить выбранный профиль?" L["delete_confirm"] = "Вы уверены, что хотите удалить выбранный профиль?"
L["delete_desc"] = "Удалить существующий и неиспользуемый профиль из БД для сохранения места, и очистить SavedVariables файл." L["delete_desc"] = "Удаление существующего и неиспользуемого профиля из базы данных для сохранения места, и очистка файла SavedVariables."
L["delete_sub"] = "Удаление профиля из БД" L["delete_sub"] = "Удаление профиля из базы данных."
L["intro"] = "Изменяя активный профиль, вы можете задать различные настройки модификаций для каждого персонажа." L["intro"] = "Изменяя активный профиль, Вы можете задать разные настройки для каждого персонажа."
L["new"] = "Новый" L["new"] = "Новый"
L["new_sub"] = "Создать новый чистый профиль" L["new_sub"] = "Создание нового чистого профиля."
L["profiles"] = "Профили" L["profiles"] = "Профили"
L["profiles_sub"] = "Управление профилями" L["profiles_sub"] = "Управление профилями"
L["reset"] = "Сброс профиля" L["reset"] = "Сбросить профиль"
L["reset_desc"] = "Сбросить текущий профиль к стандартным настройкам, если ваша конфигурация испорчена или вы хотите настроить всё заново." L["reset_desc"] = "Сброс текущего профиля к стандартным настройкам, если Ваша конфигурация испорчена или Вы хотите настроить все заново."
L["reset_sub"] = "Сброс текущего профиля на стандартный" L["reset_sub"] = "Сброс текущего профиля на стандартный"
elseif LOCALE == "itIT" then elseif LOCALE == "itIT" then
L["choose"] = "Profili Esistenti" L["choose"] = "Profili Esistenti"
L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili già esistenti." L["choose_desc"] = "Puoi creare un nuovo profilo digitando il nome della casella di testo, oppure scegliendone uno tra i profili già esistenti."
L["choose_sub"] = "Seleziona uno dei profili attualmente disponibili." L["choose_sub"] = "Seleziona uno dei profili attualmente disponibili."
L["copy"] = "Copia Da" L["copy"] = "Copia Da"
L["copy_desc"] = "Copia le impostazioni da un profilo esistente, nel profilo attivo in questo momento." L["copy_desc"] = "Copia le impostazioni da un profilo esistente nel profilo attivo in questo momento."
L["current"] = "Profilo Attivo:" L["current"] = "Profilo Attivo:"
L["default"] = "Standard" L["default"] = "Predefinito"
L["delete"] = "Cancella un Profilo" L["delete"] = "Cancella un Profilo"
L["delete_confirm"] = "Sei sicuro di voler cancellare il profilo selezionato?" L["delete_confirm"] = "Sei sicuro di voler cancellare il profilo selezionato?"
L["delete_desc"] = "Cancella i profili non utilizzati dal database per risparmiare spazio e mantenere puliti i file di configurazione SavedVariables." L["delete_desc"] = "Cancella i profili non utilizzati dal database per risparmiare spazio e mantenere puliti i file di configurazione SavedVariables."

View File

@ -1,5 +1,5 @@
--[[ $Id: CallbackHandler-1.0.lua 1284 2022-09-25 09:15:30Z nevcairiel $ ]] --[[ $Id: CallbackHandler-1.0.lua 1298 2022-12-12 15:10:10Z nevcairiel $ ]]
local MAJOR, MINOR = "CallbackHandler-1.0", 7 local MAJOR, MINOR = "CallbackHandler-1.0", 8
local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
if not CallbackHandler then return end -- No upgrade needed if not CallbackHandler then return end -- No upgrade needed
@ -7,21 +7,16 @@ if not CallbackHandler then return end -- No upgrade needed
local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end} local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
-- Lua APIs -- Lua APIs
local error = error local securecallfunction, error = securecallfunction, error
local setmetatable, rawget = setmetatable, rawget local setmetatable, rawget = setmetatable, rawget
local next, select, pairs, type, tostring = next, select, pairs, type, tostring local next, select, pairs, type, tostring = next, select, pairs, type, tostring
local xpcall = xpcall
local function errorhandler(err)
return geterrorhandler()(err)
end
local function Dispatch(handlers, ...) local function Dispatch(handlers, ...)
local index, method = next(handlers) local index, method = next(handlers)
if not method then return end if not method then return end
repeat repeat
xpcall(method, errorhandler, ...) securecallfunction(method, ...)
index, method = next(handlers, index) index, method = next(handlers, index)
until not method until not method
end end

View File

@ -9,7 +9,7 @@ License: MIT
--- DRList-1.0 --- DRList-1.0
-- @module DRList-1.0 -- @module DRList-1.0
local MAJOR, MINOR = "DRList-1.0", 49 -- Don't forget to change this in Spells.lua aswell! local MAJOR, MINOR = "DRList-1.0", 54 -- Don't forget to change this in Spells.lua aswell!
local Lib = assert(LibStub, MAJOR .. " requires LibStub."):NewLibrary(MAJOR, MINOR) local Lib = assert(LibStub, MAJOR .. " requires LibStub."):NewLibrary(MAJOR, MINOR)
if not Lib then return end -- already loaded if not Lib then return end -- already loaded
@ -30,7 +30,7 @@ L["TAUNTS"] = "Taunts"
L["FEARS"] = "Fears" L["FEARS"] = "Fears"
L["RANDOM_ROOTS"] = "Random roots" L["RANDOM_ROOTS"] = "Random roots"
L["RANDOM_STUNS"] = "Random stuns" L["RANDOM_STUNS"] = "Random stuns"
L["OPENER_STUN"] = "Opener Stuns" L["OPENER_STUN"] = "Opener stuns"
L["HORROR"] = "Horrors" L["HORROR"] = "Horrors"
L["SCATTERS"] = "Scatters" L["SCATTERS"] = "Scatters"
L["SLEEPS"] = GetSpellInfo(1090) or "Sleep" L["SLEEPS"] = GetSpellInfo(1090) or "Sleep"
@ -62,8 +62,7 @@ elseif locale == "frFR" then
L["STUNS"] = "Etourdissements" L["STUNS"] = "Etourdissements"
L["TAUNTS"] = "Provocations" L["TAUNTS"] = "Provocations"
elseif locale == "itIT" then elseif locale == "itIT" then
-- Categories --@localization(locale="itIT", namespace="Categories", format="lua_additive_table", handle-unlocalized="ignore")@
elseif locale == "koKR" then elseif locale == "koKR" then
L["DISORIENTS"] = "방향 감각 상실" L["DISORIENTS"] = "방향 감각 상실"
L["INCAPACITATES"] = "행동 불가" L["INCAPACITATES"] = "행동 불가"
@ -72,8 +71,7 @@ elseif locale == "koKR" then
L["SILENCES"] = "침묵" L["SILENCES"] = "침묵"
L["STUNS"] = "기절" L["STUNS"] = "기절"
elseif locale == "ptBR" then elseif locale == "ptBR" then
-- Categories --@localization(locale="ptBR", namespace="Categories", format="lua_additive_table", handle-unlocalized="ignore")@
elseif locale == "ruRU" then elseif locale == "ruRU" then
L["DISARMS"] = "Разоружение" L["DISARMS"] = "Разоружение"
L["DISORIENTS"] = "Дезориентация" L["DISORIENTS"] = "Дезориентация"
@ -137,24 +135,24 @@ Lib.gameExpansion = ({
-- How long it takes for a DR to expire, in seconds. -- How long it takes for a DR to expire, in seconds.
Lib.resetTimes = { Lib.resetTimes = {
retail = { retail = {
["default"] = 18.5, -- 18 sec + 0.5 latency ["default"] = 18.5, -- static 18 sec + 0.5 latency
["npc"] = 23, -- Against mobs it seems to last slightly longer, depending on server load ["npc"] = 21, -- Against mobs it seems to last slightly longer, depending on server load
["knockback"] = 10.5, -- Knockbacks are immediately immune and only DRs for 10s ["knockback"] = 10.5, -- Knockbacks are immediately immune and only DRs for 10s
}, },
classic = { classic = {
["default"] = 20, -- dynamic between 15 and 20s ["default"] = 20, -- dynamic between 15 and 20s
["npc"] = 23, ["npc"] = 21,
}, },
tbc = { tbc = {
["default"] = 20, -- dynamic between 15 and 20s ["default"] = 20, -- dynamic between 15 and 20s
["npc"] = 23, ["npc"] = 21,
}, },
wotlk = { wotlk = {
["default"] = 20, -- dynamic between 15 and 20s ["default"] = 20, -- dynamic between 15 and 20s
["npc"] = 23, ["npc"] = 21,
}, },
} }
@ -221,13 +219,12 @@ Lib.categoryNames = {
} }
-- Categories that have DR against normal mobs. -- Categories that have DR against normal mobs.
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories, -- Note that for retail some special mobs have DR on all categories,
-- see UnitClassification() and UnitIsQuestBoss(). -- see UnitClassification() and UnitIsQuestBoss().
Lib.categoriesPvE = { Lib.categoriesPvE = {
retail = { retail = {
["taunt"] = L.TAUNTS, -- Lib.categoryNames.retail.taunt ["taunt"] = L.TAUNTS,
["stun"] = L.STUNS, ["stun"] = L.STUNS,
["root"] = L.ROOTS,
}, },
classic = { classic = {
@ -294,9 +291,9 @@ function Lib:GetCategories()
return Lib.categoryNames[Lib.gameExpansion] return Lib.categoryNames[Lib.gameExpansion]
end end
--- Get table of all categories that DRs in PvE only. --- Get table of all categories that DRs in PvE.
-- Key is unlocalized name used for API functions, value is localized name used for UI. -- Key is unlocalized name used for API functions, value is localized name used for UI.
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories, -- Note that for retail some special mobs have DR on all categories,
-- see UnitClassification() and UnitIsQuestBoss(). -- see UnitClassification() and UnitIsQuestBoss().
-- Tip: you can combine :GetPvECategories() and :IterateSpellsByCategory() to get spellIDs only for PvE aswell. -- Tip: you can combine :GetPvECategories() and :IterateSpellsByCategory() to get spellIDs only for PvE aswell.
-- @treturn table {string=string} -- @treturn table {string=string}
@ -339,7 +336,7 @@ function Lib:GetCategoryLocalization(category)
end end
--- Check if a category has DR against mobs. --- Check if a category has DR against mobs.
-- Note that this is only for normal mobs on retail. Special mobs or pets have DR on all categories, -- Note that for retail some special mobs have DR on all categories, you need to check for this yourself;
-- see UnitClassification() and UnitIsQuestBoss(). -- see UnitClassification() and UnitIsQuestBoss().
-- @tparam string category Unlocalized category name -- @tparam string category Unlocalized category name
-- @treturn bool -- @treturn bool
@ -380,7 +377,6 @@ do
--- Iterate through the spells of a given category. --- Iterate through the spells of a given category.
-- @tparam string category Unlocalized category name -- @tparam string category Unlocalized category name
-- @usage for spellID in DRList:IterateSpellsByCategory("root") do print(spellID) end -- @usage for spellID in DRList:IterateSpellsByCategory("root") do print(spellID) end
-- @warning Slow function, do not use for frequent combat related stuff unless you cache results.
-- @return Iterator function -- @return Iterator function
function Lib:IterateSpellsByCategory(category) function Lib:IterateSpellsByCategory(category)
assert(Lib.categoryNames[Lib.gameExpansion][category], "invalid category") assert(Lib.categoryNames[Lib.gameExpansion][category], "invalid category")
@ -393,6 +389,6 @@ Lib.GetCategoryName = Lib.GetCategoryLocalization
Lib.IsPVE = Lib.IsPvECategory Lib.IsPVE = Lib.IsPvECategory
Lib.NextDR = Lib.GetNextDR Lib.NextDR = Lib.GetNextDR
Lib.GetSpellCategory = Lib.GetCategoryBySpellID Lib.GetSpellCategory = Lib.GetCategoryBySpellID
Lib.IterateSpells = Lib.IterateSpellsByCategory
Lib.RESET_TIME = Lib.resetTimes[Lib.gameExpansion].default Lib.RESET_TIME = Lib.resetTimes[Lib.gameExpansion].default
Lib.pveDR = Lib.categoriesPvE Lib.pveDR = Lib.categoriesPvE
Lib.IterateSpells = function(cat) if cat then return Lib.IterateSpellsByCategory(cat) else return next, Lib.spellList end end

View File

@ -1,6 +1,10 @@
## Interface: 100002 ## Interface: 100105
## Interface-Classic: 11403
## Interface-BCC: 20504
## Interface-Wrath: 30402
## IconTexture: Interface\Icons\Spell_nature_heavypolymorph1
## Title: Lib: DRList-1.0 ## Title: Lib: DRList-1.0
## Version: v1.3.8 ## Version: @project-version@
## X-Category: Library ## X-Category: Library
## X-License: MIT ## X-License: MIT
## X-Curse-Project-ID: 315757 ## X-Curse-Project-ID: 315757
@ -11,3 +15,11 @@ libs\LibStub\LibStub.lua
#@end-no-lib-strip@ #@end-no-lib-strip@
DRList-1.0.xml DRList-1.0.xml
#@do-not-package@
tests\engine.lua
tests\test-retail.lua
tests\test-classic.lua
tests\test-tbc.lua
tests\test-wotlk.lua
#@end-do-not-package@

View File

@ -1,4 +1,4 @@
local MAJOR, MINOR = "DRList-1.0", 49 -- Don't forget to change this in DRList-1.0.lua aswell! local MAJOR, MINOR = "DRList-1.0", 54 -- Don't forget to change this in DRList-1.0.lua aswell!
local Lib = LibStub(MAJOR) local Lib = LibStub(MAJOR)
if Lib.spellListVersion and Lib.spellListVersion >= MINOR then if Lib.spellListVersion and Lib.spellListVersion >= MINOR then
return return
@ -17,7 +17,7 @@ if Lib.gameExpansion == "retail" then
[1513] = "disorient", -- Scare Beast [1513] = "disorient", -- Scare Beast
[31661] = "disorient", -- Dragon's Breath [31661] = "disorient", -- Dragon's Breath
[198909] = "disorient", -- Song of Chi-ji [198909] = "disorient", -- Song of Chi-ji
[202274] = "disorient", -- Incendiary Brew [202274] = "disorient", -- Hot Trub
[105421] = "disorient", -- Blinding Light [105421] = "disorient", -- Blinding Light
[10326] = "disorient", -- Turn Evil [10326] = "disorient", -- Turn Evil
[205364] = "disorient", -- Dominate Mind [205364] = "disorient", -- Dominate Mind
@ -26,6 +26,7 @@ if Lib.gameExpansion == "retail" then
[226943] = "disorient", -- Mind Bomb [226943] = "disorient", -- Mind Bomb
[2094] = "disorient", -- Blind [2094] = "disorient", -- Blind
[118699] = "disorient", -- Fear [118699] = "disorient", -- Fear
[130616] = "disorient", -- Fear (Horrify)
[5484] = "disorient", -- Howl of Terror [5484] = "disorient", -- Howl of Terror
[261589] = "disorient", -- Seduction (Grimoire of Sacrifice) [261589] = "disorient", -- Seduction (Grimoire of Sacrifice)
[6358] = "disorient", -- Seduction (Succubus) [6358] = "disorient", -- Seduction (Succubus)
@ -85,6 +86,7 @@ if Lib.gameExpansion == "retail" then
[47476] = "silence", -- Strangulate [47476] = "silence", -- Strangulate
[204490] = "silence", -- Sigil of Silence [204490] = "silence", -- Sigil of Silence
-- [78675] = "silence", -- Solar Beam (has no DR) -- [78675] = "silence", -- Solar Beam (has no DR)
[410065] = "silence", -- Reactive Resin
[202933] = "silence", -- Spider Sting [202933] = "silence", -- Spider Sting
[356727] = "silence", -- Spider Venom [356727] = "silence", -- Spider Venom
[354831] = "silence", -- Wailing Arrow 1 [354831] = "silence", -- Wailing Arrow 1
@ -169,6 +171,7 @@ if Lib.gameExpansion == "retail" then
[64695] = "root", -- Earthgrab (Totem effect) [64695] = "root", -- Earthgrab (Totem effect)
-- [356738] = "root", -- Earth Unleashed (doesn't seem to DR) -- [356738] = "root", -- Earth Unleashed (doesn't seem to DR)
[285515] = "root", -- Surge of Power [285515] = "root", -- Surge of Power
[199042] = "root", -- Thunderstruck (Protection PvP Talent)
--[356356] = "root", -- Warbringer TODO: has DR? --[356356] = "root", -- Warbringer TODO: has DR?
[39965] = "root", -- Frost Grenade (Item) [39965] = "root", -- Frost Grenade (Item)
[75148] = "root", -- Embersilk Net (Item) [75148] = "root", -- Embersilk Net (Item)
@ -176,6 +179,8 @@ if Lib.gameExpansion == "retail" then
[268966] = "root", -- Hooked Deep Sea Net (Item) [268966] = "root", -- Hooked Deep Sea Net (Item)
[209749] = "disarm", -- Faerie Swarm (Balance Honor Talent) [209749] = "disarm", -- Faerie Swarm (Balance Honor Talent)
[407032] = "disarm", -- Sticky Tar Bomb 1
[407031] = "disarm", -- Sticky Tar Bomb 2
[207777] = "disarm", -- Dismantle [207777] = "disarm", -- Dismantle
[233759] = "disarm", -- Grapple Weapon [233759] = "disarm", -- Grapple Weapon
[236077] = "disarm", -- Disarm [236077] = "disarm", -- Disarm
@ -528,6 +533,7 @@ elseif Lib.gameExpansion == "wotlk" then
[9853] = "root", -- Entangling Roots (Rank 6) [9853] = "root", -- Entangling Roots (Rank 6)
[26989] = "root", -- Entangling Roots (Rank 7) [26989] = "root", -- Entangling Roots (Rank 7)
[53308] = "root", -- Entangling Roots (Rank 8) [53308] = "root", -- Entangling Roots (Rank 8)
[65857] = "root", -- Entangling Roots (Rank 8) (TODO: Not sure which ID is correct)
[19975] = "root", -- Nature's Grasp (Rank 1) [19975] = "root", -- Nature's Grasp (Rank 1)
[19974] = "root", -- Nature's Grasp (Rank 2) [19974] = "root", -- Nature's Grasp (Rank 2)
[19973] = "root", -- Nature's Grasp (Rank 3) [19973] = "root", -- Nature's Grasp (Rank 3)
@ -535,7 +541,8 @@ elseif Lib.gameExpansion == "wotlk" then
[19971] = "root", -- Nature's Grasp (Rank 5) [19971] = "root", -- Nature's Grasp (Rank 5)
[19970] = "root", -- Nature's Grasp (Rank 6) [19970] = "root", -- Nature's Grasp (Rank 6)
[27010] = "root", -- Nature's Grasp (Rank 7) [27010] = "root", -- Nature's Grasp (Rank 7)
[53312] = "root", -- Nature's Grasp (Rank 8) [53313] = "root", -- Nature's Grasp (Rank 8)
[66070] = "root", -- Nature's Grasp (Rank 8) (TODO: Not sure which ID is correct)
[50245] = "root", -- Pin (Rank 1) [50245] = "root", -- Pin (Rank 1)
[53544] = "root", -- Pin (Rank 2) [53544] = "root", -- Pin (Rank 2)
[53545] = "root", -- Pin (Rank 3) [53545] = "root", -- Pin (Rank 3)
@ -549,6 +556,7 @@ elseif Lib.gameExpansion == "wotlk" then
[10230] = "root", -- Frost Nova (Rank 4) [10230] = "root", -- Frost Nova (Rank 4)
[27088] = "root", -- Frost Nova (Rank 5) [27088] = "root", -- Frost Nova (Rank 5)
[42917] = "root", -- Frost Nova (Rank 6) [42917] = "root", -- Frost Nova (Rank 6)
[64695] = "root", -- Earthgrab
[39965] = "root", -- Frost Grenade (Item) [39965] = "root", -- Frost Grenade (Item)
[63685] = "root", -- Freeze (Frost Shock) [63685] = "root", -- Freeze (Frost Shock)
[55536] = "root", -- Frostweave Net (Item) [55536] = "root", -- Frostweave Net (Item)
@ -626,7 +634,6 @@ elseif Lib.gameExpansion == "wotlk" then
[27067] = "counterattack", -- Counterattack 4 [27067] = "counterattack", -- Counterattack 4
[48998] = "counterattack", -- Counterattack 5 [48998] = "counterattack", -- Counterattack 5
[48999] = "counterattack", -- Counterattack 6 [48999] = "counterattack", -- Counterattack 6
--Storm, Earth and Fire has no DR
} }
elseif Lib.gameExpansion == "classic" then elseif Lib.gameExpansion == "classic" then