From 53e88697c0eb1d7b86b76e9397aef9ea75ae5a55 Mon Sep 17 00:00:00 2001
From: Pinya <800pin.ru@gmail.com>
Date: Wed, 27 Dec 2017 18:46:52 +0300
Subject: [PATCH] add Resurrection Indicator (LibResComm)
---
ElvUI/Libraries/oUF_Plugins/oUF_Plugins.xml | 1 +
.../LibResComm-1.0/LibResComm-1.0.lua | 419 ++++++++++++++++++
.../oUF_Plugins/oUF_ResComm/oUF_ResComm.lua | 163 +++++++
.../oUF_Plugins/oUF_ResComm/oUF_ResComm.xml | 4 +
ElvUI/Settings/Profile.lua | 3 +
ElvUI/media/textures/Raid-Icon-Rez.blp | Bin 0 -> 6660 bytes
.../unitframes/elements/load_elements.xml | 3 +-
.../unitframes/elements/resurrectionicon.lua | 24 +
ElvUI/modules/unitframes/groups/party.lua | 3 +
ElvUI/modules/unitframes/groups/raid.lua | 3 +
ElvUI/modules/unitframes/groups/raid40.lua | 3 +
ElvUI_Config/locales/chinese_config.lua | 2 +
ElvUI_Config/locales/english_config.lua | 2 +
ElvUI_Config/locales/french_config.lua | 2 +
ElvUI_Config/locales/german_config.lua | 2 +
ElvUI_Config/locales/korean_config.lua | 2 +
ElvUI_Config/locales/portuguese_config.lua | 2 +
ElvUI_Config/locales/russian_config.lua | 2 +
ElvUI_Config/locales/spanish_config.lua | 2 +
ElvUI_Config/locales/taiwanese_config.lua | 2 +
ElvUI_Config/unitframes.lua | 47 +-
21 files changed, 674 insertions(+), 17 deletions(-)
create mode 100644 ElvUI/Libraries/oUF_Plugins/oUF_ResComm/LibResComm-1.0/LibResComm-1.0.lua
create mode 100644 ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.lua
create mode 100644 ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.xml
create mode 100644 ElvUI/media/textures/Raid-Icon-Rez.blp
create mode 100644 ElvUI/modules/unitframes/elements/resurrectionicon.lua
diff --git a/ElvUI/Libraries/oUF_Plugins/oUF_Plugins.xml b/ElvUI/Libraries/oUF_Plugins/oUF_Plugins.xml
index 8475f3bff..7f8f9de85 100644
--- a/ElvUI/Libraries/oUF_Plugins/oUF_Plugins.xml
+++ b/ElvUI/Libraries/oUF_Plugins/oUF_Plugins.xml
@@ -8,5 +8,6 @@
+
\ No newline at end of file
diff --git a/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/LibResComm-1.0/LibResComm-1.0.lua b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/LibResComm-1.0/LibResComm-1.0.lua
new file mode 100644
index 000000000..8b2d200df
--- /dev/null
+++ b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/LibResComm-1.0/LibResComm-1.0.lua
@@ -0,0 +1,419 @@
+--[[
+ Name: LibResComm-1.0
+ Revision: $Revision: 91 $
+ Author(s): DathRarhek (Polleke) (polleke@gmail.com)
+ Documentation: http://www.wowace.com/index.php/LibResComm-1.0
+ SVN: svn://svn.wowace.com/wow/librescomm-1-0/mainline/trunk
+ Description: Keeps track of resurrection spells cast in the raid group
+ Dependencies: LibStub, CallbackHandler-1.0
+]]
+
+local MAJOR_VERSION = "LibResComm-1.0"
+local MINOR_VERSION = 90000 + tonumber(("$Revision: 92 $"):match("%d+"))
+
+local lib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
+if not lib then return end
+
+if lib.disable then
+ lib.disable()
+end
+
+------------------------------------------------------------------------
+-- Localization
+--
+
+local L = {
+ -- use global string for locale independence
+ CORPSE_OF = "^" .. CORPSE_TOOLTIP:gsub("%%s", "(.+)"),
+
+ -- needs to match return values from HasSoulstone()
+ ["Reincarnate"] = "Reincarnate",
+ ["Twisting Nether"] = "Twisting Nether",
+ ["Use Soulstone"] = "Use Soulstone",
+
+ -- sensible text to show
+ ["Soulstone"] = "Soulstone",
+}
+
+local LOCALE = GetLocale()
+if LOCALE == "deDE" then
+-- L["Reincarnate"] = "Reinkarnation"
+ L["Soulstone"] = "Seelenstein"
+-- L["Twisting Nether"] = "Wirbelnder Nether"
+-- L["Use Soulstone"] = "Seelenstein benutzen"
+elseif LOCALE == "esES" or LOCALE == "esMX" then
+-- L["Reincarnate"] = "Reencarnación"
+ L["Soulstone"] = "Piedra de alma"
+-- L["Twisting Nether"] = "Vacío Abisal"
+-- L["Use Soulstone"] = "Usar piedra de alma"
+elseif LOCALE == "frFR" then
+-- L["Reincarnate"] = "Réincarner"
+ L["Soulstone"] = "Pierre d'âme"
+-- L["Twisting Nether"] = "Néant distordu"
+-- L["Use Soulstone"] = "Utilisez Pierre d'âme"
+elseif LOCALE == "ruRU" then
+ L[CORPSE_OF] = "^" .. CORPSE_TOOLTIP:gsub("%|%S+%(%%s%)", "(.+)")
+
+-- L["Reincarnate"] = "Возродиться"
+ L["Soulstone"] = "Камень души"
+-- L["Twisting Nether"] = "Круговерть Пустоты"
+-- L["Use Soulstone"] = "Использование камня души"
+elseif LOCALE == "koKR" then
+-- L["Reincarnate"] = "윤회"
+ L["Soulstone"] = "영혼석"
+-- L["Twisting Nether"] = "뒤틀린 황천"
+-- L["Use Soulstone"] = "영혼석 사용"
+elseif LOCALE == "zhCN" then
+-- L["Reincarnate"] = "复生"
+ L["Soulstone"] = "灵魂石"
+-- L["Twisting Nether"] = "扭曲虚空"
+-- L["Use Soulstone"] = "使用灵魂石"
+elseif LOCALE == "zhTW" then
+-- L["Reincarnate"] = "復生效果"
+ L["Soulstone"] = "靈魂石"
+-- L["Twisting Nether"] = "扭曲虛空"
+-- L["Use Soulstone"] = "靈魂石復活效果"
+end
+
+local soulstoneToken = {
+ [L["Use Soulstone"]] = "SS",
+ [L["Reincarnate"]] = "RE",
+ [L["Twisting Nether"]] = "TN",
+}
+
+local soulstoneText = {
+ ["SS"] = L["Soulstone"],
+ ["RE"] = GetSpellInfo(20608), -- just use Reincarnation spell name
+ ["TN"] = L["Twisting Nether"],
+}
+
+------------------------------------------------------------------------
+-- Event frame
+--
+
+lib.eventFrame = lib.eventFrame or CreateFrame("Frame")
+lib.eventFrame:SetScript("OnEvent", function(this, event, ...)
+ this[event](this, ...)
+end)
+lib.eventFrame:UnregisterAllEvents()
+
+------------------------------------------------------------------------
+-- Embed CallbackHandler-1.0
+--
+
+if not lib.Callbacks then
+ lib.Callbacks = LibStub("CallbackHandler-1.0"):New(lib)
+end
+
+------------------------------------------------------------------------
+-- Locals
+--
+
+local playerName = UnitName("player")
+local _, playerClass = UnitClass("player")
+local isResser = (playerClass == "PRIEST") or (playerClass == "SHAMAN") or (playerClass == "PALADIN") or (playerClass == "DRUID")
+
+-- Last target name from UNIT_SPELLCAST_SENT
+local sentTargetName = nil
+
+-- Mouse down target
+local mouseDownTarget = nil
+local worldFrameHook = nil
+
+-- Battleground/Arena/Group Indicators
+local inBattlegroundOrArena = nil
+
+-- For tracking STOP messages
+local isCasting = nil
+
+-- Tracking resses
+local activeRes = {}
+
+local resSpell, combatResSpell -- avoid creating tables we're just going to discard immediately
+if playerClass == "DRUID" then
+ resSpell = GetSpellInfo(50769) -- Revive
+ combatResSpell = GetSpellInfo(20484) -- Rebirth
+elseif playerClass == "PALADIN" then
+ resSpell = GetSpellInfo(7328) -- Redemption
+elseif playerClass == "PRIEST" then
+ resSpell = GetSpellInfo(2006) -- Resurrection
+elseif playerClass == "SHAMAN" then
+ resSpell = GetSpellInfo(2008) -- Ancestral Spirit
+end
+
+------------------------------------------------------------------------
+-- Utilities
+--
+
+local function commSend(contents, distribution, target)
+ if not (oRA and oRA:HasModule("ParticipantPassive") and oRA:IsModuleActive("ParticipantPassive") or CT_RA_Stats) then
+ SendAddonMessage("CTRA", contents, distribution or (inBattlegroundOrArena and "BATTLEGROUND" or "RAID"), target)
+ end
+end
+
+------------------------------------------------------------------------
+-- Event Handlers
+--
+
+function lib.eventFrame:UNIT_SPELLCAST_SENT(unit, _, _, targetName)
+ sentTargetName = targetName:match("^([^%-]+)")
+end
+
+function lib.eventFrame:UNIT_SPELLCAST_START(unit, spellName)
+ if unit ~= "player" then return end
+ if spellName ~= resSpell and spellName ~= combatResSpell then return end
+
+ isCasting = true
+
+ local target = sentTargetName
+ if not sentTargetName or sentTargetName == UNKNOWN then
+ target = mouseDownTarget
+ end
+
+ if not target and GameTooltipTextLeft1:IsVisible() then
+ -- check tooltip in case of mouseover casting on a corpse whose spirit has been released
+ target = GameTooltipTextLeft1:GetText():match(L.CORPSE_OF)
+ end
+
+ if not target then
+ -- still nothing :(
+ return
+ end
+
+ local endTime = select(6, UnitCastingInfo(unit)) or (GetTime() + 10) * 1000
+ endTime = endTime / 1000
+
+ activeRes[playerName] = target
+
+ lib.Callbacks:Fire("ResComm_ResStart", playerName, endTime, target)
+ commSend(("RES %s"):format(target))
+end
+
+function lib.eventFrame:CHAT_MSG_ADDON(prefix, msg, distribution, sender)
+ if prefix ~= "CTRA" then return end
+ if sender == playerName then return end
+ sender = sender:match("^([^%-]+)")
+
+ local target
+ for cmd, targetName in msg:gmatch("(%a+)%s?([^#]*)") do
+ -- A lot of garbage can come in, make absolutely sure we have a decent message
+ if cmd == "RES" and targetName ~= "" and targetName ~= UNKNOWN then
+
+ local endTime = select(6, UnitCastingInfo(sender)) or (GetTime() + 10)*1000
+
+ if endTime and targetName then
+ endTime = endTime / 1000
+ activeRes[sender] = targetName
+ lib.Callbacks:Fire("ResComm_ResStart", sender, endTime, targetName)
+ end
+ elseif cmd == "RESNO" or cmd == "RESYES" then
+ if activeRes[sender] then
+ target = activeRes[sender]
+ activeRes[sender] = nil
+ end
+ lib.Callbacks:Fire("ResComm_ResEnd", sender, target, cmd == "RESYES" and true)
+ elseif cmd == "RESSED" then
+ if activeRes[sender] then
+ target = activeRes[sender]
+ activeRes[sender] = nil
+ end
+ lib.Callbacks:Fire("ResComm_Ressed", sender)
+ elseif cmd == "CANRES" then
+ lib.Callbacks:Fire("ResComm_CanRes", sender, targetName, targetName and soulstoneText[targetName]) -- send token and text with callback
+ elseif cmd == "NORESSED" then
+ lib.Callbacks:Fire("ResComm_ResExpired", sender)
+ end
+ end
+end
+
+function lib.eventFrame:UNIT_SPELLCAST_SUCCEEDED(unit, spellName)
+ if unit ~= "player" or not isCasting then return end
+
+ local target = activeRes[playerName]
+ if activeRes[playerName] then
+ activeRes[playerName] = nil
+ end
+
+ lib.Callbacks:Fire("ResComm_ResEnd", playerName, target, true)
+ commSend("RESYES")
+ isCasting = false
+end
+
+function lib.eventFrame:UNIT_SPELLCAST_STOP(unit, spellName)
+ if unit ~= "player" or not isCasting then return end
+
+ local target = activeRes[playerName]
+ if activeRes[playerName] then
+ activeRes[playerName] = nil
+ end
+
+ lib.Callbacks:Fire("ResComm_ResEnd", playerName, target, false)
+ commSend("RESNO")
+ isCasting = false
+end
+
+lib.eventFrame.UNIT_SPELLCAST_FAILED = lib.eventFrame.UNIT_SPELLCAST_STOP
+lib.eventFrame.UNIT_SPELLCAST_INTERRUPTED = lib.eventFrame.UNIT_SPELLCAST_STOP
+
+function lib.eventFrame:PLAYER_ENTERING_WORLD()
+ local it = select(2, IsInInstance())
+ inBattlegroundOrArena = (it == "pvp") or (it == "arena")
+end
+
+------------------------------------------------------------------------
+-- Public Functions
+
+--[[
+ IsUnitBeingRessed(unit)
+ Checks if a unit is being ressurected at that moment.
+ Arguments:
+ unit - string; name of a friendly player
+ Returns:
+ isBeingRessed - boolean; true when unit is being ressed, false otherwise
+ resser - string; name of the player ressing the unit
+]]--
+
+function lib:IsUnitBeingRessed(unit)
+ for resser, ressed in pairs(activeRes) do
+ if unit == ressed then
+ return true, resser
+ end
+ end
+ return false
+end
+
+------------------------------------------------------------------------
+-- Hooks
+--
+
+-- Credits to Ora2
+function lib:worldFrameOnMouseDown()
+ if GameTooltipTextLeft1:IsVisible() then
+ mouseDownTarget = GameTooltipTextLeft1:GetText():match(L.CORPSE_OF)
+ end
+end
+
+function lib:popupFuncRessed()
+ lib.Callbacks:Fire("ResComm_Ressed", playerName)
+ commSend("RESSED")
+end
+
+function lib:popupFuncCanRes()
+ local kind = HasSoulstone()
+ if not kind then return end
+
+ lib.Callbacks:Fire("ResComm_CanRes", playerName)
+ commSend("CANRES")
+
+ local token = soulstoneToken[kind]
+ if token then
+ -- send a second comm with a token representing the type of self-res available
+ commSend("CANRES " .. token)
+ end
+end
+
+function lib:popupFuncExpired()
+ lib.Callbacks:Fire("ResComm_ResExpired", playerName)
+ commSend("NORESSED")
+end
+
+function lib:noop()
+end
+
+------------------------------------------------------------------------
+-- Register events and hooks
+--
+
+function lib:start()
+ lib.eventFrame:RegisterEvent("CHAT_MSG_ADDON")
+
+ if isResser then
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_FAILED")
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_SENT")
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_START")
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_STOP")
+ lib.eventFrame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
+ end
+
+ lib.eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
+
+ worldFrameHook = WorldFrame:GetScript("OnMouseDown")
+ if not worldFrameHook then
+ worldFrameHook = lib.noop
+ end
+
+ WorldFrame:SetScript("OnMouseDown", function(...)
+ lib:worldFrameOnMouseDown()
+ worldFrameHook(...)
+ end)
+
+ local res = StaticPopupDialogs["RESURRECT"].OnShow
+ StaticPopupDialogs["RESURRECT"].OnShow = function(...)
+ lib:popupFuncRessed()
+ res(...)
+ end
+
+ local resNoSick = StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnShow
+ StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnShow = function(...)
+ lib:popupFuncRessed()
+ resNoSick(...)
+ end
+
+ local resNoTimer = StaticPopupDialogs["RESURRECT_NO_TIMER"].OnShow
+ StaticPopupDialogs["RESURRECT_NO_TIMER"].OnShow = function(...)
+ lib:popupFuncRessed()
+ resNoTimer(...)
+ end
+
+ local death = StaticPopupDialogs["DEATH"].OnShow
+ StaticPopupDialogs["DEATH"].OnShow = function(...)
+ lib:popupFuncCanRes()
+ death(...)
+ end
+
+ if not StaticPopupDialogs["RESURRECT"].OnCancel then
+ StaticPopupDialogs["RESURRECT"].OnCancel = function() lib:popupFuncExpired() end
+ else
+ local resurrect = StaticPopupDialogs["RESURRECT"].OnCancel
+ StaticPopupDialogs["RESURRECT"].OnCancel = function(...)
+ lib:popupFuncExpired()
+ resurrect(...)
+ end
+ end
+
+ if not StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnCancel then
+ StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnCancel = function() lib:popupFuncExpired() end
+ else
+ local resNoSick = StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnCancel
+ StaticPopupDialogs["RESURRECT_NO_SICKNESS"].OnCancel = function(...)
+ lib:popupFuncExpired()
+ resNoSick(...)
+ end
+ end
+
+ if not StaticPopupDialogs["RESURRECT_NO_TIMER"].OnCancel then
+ StaticPopupDialogs["RESURRECT_NO_TIMER"].OnCancel = function()
+ if not StaticPopup_FindVisible("DEATH") then lib:popupFuncExpired() end
+ end
+ else
+ local resNoTimer = StaticPopupDialogs["RESURRECT_NO_TIMER"].OnCancel
+ StaticPopupDialogs["RESURRECT_NO_TIMER"].OnCancel = function(...)
+ if not StaticPopup_FindVisible("DEATH") then lib:popupFuncExpired() end
+ resNoTimer(...)
+ end
+ end
+end
+
+------------------------------------------------------------------------
+-- Start library
+--
+
+lib.disable = function()
+ lib.worldFrameOnMouseDown = lib.noop
+ lib.popupFuncRessed = lib.noop
+ lib.popupFuncCanRes = lib.noop
+ lib.popupFuncExpired = lib.noop
+ lib.eventFrame:UnregisterAllEvents()
+end
+lib:start()
\ No newline at end of file
diff --git a/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.lua b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.lua
new file mode 100644
index 000000000..4a984407a
--- /dev/null
+++ b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.lua
@@ -0,0 +1,163 @@
+--[[
+# Element: Resurrect Indicator
+Handles the visibility and updating of an indicator based on the unit's incoming resurrect status.
+## Widget
+ResurrectIndicator - A `Texture` used to display if the unit has an incoming resurrect.
+## Notes
+A default texture will be applied if the widget is a Texture and doesn't have a texture or a color set.
+## Examples
+ -- Position and size
+ local ResurrectIndicator = self:CreateTexture(nil, "OVERLAY")
+ ResurrectIndicator:SetSize(16, 16)
+ ResurrectIndicator:SetPoint("TOPRIGHT", self)
+ -- Register it with oUF
+ self.ResurrectIndicator = ResurrectIndicator
+--]]
+
+local _, ns = ...
+local oUF = ns.oUF
+assert(oUF, "oUF_ResComm was unable to locate oUF install")
+
+local LRC = LibStub("LibResComm-1.0")
+
+local ipairs = ipairs
+
+local UnitIsDead = UnitIsDead
+local UnitIsGhost = UnitIsGhost
+local UnitName = UnitName
+
+local function Update(self, event, unit, succeeded)
+ if not unit or self.unit ~= unit then return end
+
+ local element = self.ResurrectIndicator
+
+ --[[ Callback: ResurrectIndicator:PreUpdate()
+ Called before the element has been updated.
+
+ * self - the ResurrectIndicator element
+ --]]
+ if element.PreUpdate then
+ element:PreUpdate()
+ end
+
+ local incomingResurrect
+ if UnitIsDead(unit) or UnitIsGhost(unit) then
+ if event == "ResComm_ResStart" or event == "ResComm_CanRes" or event == "ResComm_Ressed" or (event == "ResComm_ResEnd" and succeeded) then
+ if event ~= "ResComm_ResStart" then
+ element.ressed = true
+ end
+ element:Show()
+ incomingResurrect = true
+ elseif (event == "ResComm_ResEnd" and not succeeded and not element.ressed) or event == "ResComm_ResExpired" then
+ element:Hide()
+ element.ressed = nil
+ end
+ else
+ element:Hide()
+ end
+
+ --[[ Callback: ResurrectIndicator:PostUpdate(incomingResurrect)
+ Called after the element has been updated.
+
+ * self - the ResurrectIndicator element
+ * incomingResurrect - indicates if the unit has an incoming resurrection (boolean)
+ --]]
+ if element.PostUpdate then
+ return element:PostUpdate(incomingResurrect)
+ end
+end
+
+local function Path(self, ...)
+ --[[ Override: ResurrectIndicator.Override(self, event, unit)
+ Used to completely override the internal update function.
+
+ * self - the parent object
+ * event - the event triggering the update (string)
+ * unit - the unit accompanying the event (string)
+ --]]
+ return (self.ResurrectIndicator.Override or Update) (self, ...)
+end
+
+local function ForceUpdate(element)
+ return Path(element.__owner, "ForceUpdate", element.__owner.unit)
+end
+
+local function ResComm_Update(event, ...)
+ local sender, endTime, target, succeeded
+
+ if event == "ResComm_ResStart" then
+ sender, endTime, target = ...
+ elseif event == "ResComm_ResEnd" then
+ sender, target, succeeded = ...
+ else
+ target = ...
+ end
+
+ for _, frame in ipairs(oUF.objects) do
+ if frame.unit and frame.ResurrectIndicator and UnitName(frame.unit) == target then
+ Path(frame, event, frame.unit, succeeded)
+ end
+ end
+end
+
+local function tsize(t)
+ local i = 0
+ for _ in pairs(t) do
+ i = i + 1
+ end
+ return i
+end
+
+local enabledUF, enabled = {}
+local function ToggleCallbacks(toggle)
+ if toggle and not enabled and tsize(enabledUF) > 0 then
+ LRC.RegisterCallback("oUF_ResComm", "ResComm_CanRes", ResComm_Update)
+ LRC.RegisterCallback("oUF_ResComm", "ResComm_Ressed", ResComm_Update)
+ LRC.RegisterCallback("oUF_ResComm", "ResComm_ResExpired", ResComm_Update)
+ LRC.RegisterCallback("oUF_ResComm", "ResComm_ResStart", ResComm_Update)
+ LRC.RegisterCallback("oUF_ResComm", "ResComm_ResEnd", ResComm_Update)
+
+ enabled = true
+ elseif not toggle and enabled and tsize(enabledUF) == 0 then
+ LRC.UnregisterCallback("oUF_ResComm", "ResComm_CanRes")
+ LRC.UnregisterCallback("oUF_ResComm", "ResComm_Ressed")
+ LRC.UnregisterCallback("oUF_ResComm", "ResComm_ResExpired")
+ LRC.UnregisterCallback("oUF_ResComm", "ResComm_ResStart")
+ LRC.UnregisterCallback("oUF_ResComm", "ResComm_ResEnd")
+
+ enabled = nil
+ end
+end
+
+local function Enable(self)
+ local element = self.ResurrectIndicator
+ if element then
+ element.__owner = self
+ element.ForceUpdate = ForceUpdate
+
+ self:RegisterEvent("UNIT_HEALTH", Path)
+
+ if element:IsObjectType("Texture") and not element:GetTexture() then
+ element:SetTexture([[Interface\Icons\Spell_Holy_Resurrection]])
+ end
+
+ enabledUF[self] = true
+ ToggleCallbacks(true)
+
+ return true
+ end
+end
+
+local function Disable(self)
+ local element = self.ResurrectIndicator
+ if element then
+ element:Hide()
+
+ self:UnregisterEvent("UNIT_HEALTH", Path)
+
+ enabledUF[self] = nil
+ ToggleCallbacks(false)
+ end
+end
+
+oUF:AddElement("ResurrectIndicator", Path, Enable, Disable)
\ No newline at end of file
diff --git a/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.xml b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.xml
new file mode 100644
index 000000000..0e87af1cc
--- /dev/null
+++ b/ElvUI/Libraries/oUF_Plugins/oUF_ResComm/oUF_ResComm.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/ElvUI/Settings/Profile.lua b/ElvUI/Settings/Profile.lua
index ee3900a62..7b8221dc9 100644
--- a/ElvUI/Settings/Profile.lua
+++ b/ElvUI/Settings/Profile.lua
@@ -1793,6 +1793,7 @@ P["unitframe"] = {
["startFromCenter"] = false,
["showPlayer"] = true,
["healPrediction"] = false,
+ ["resurrect"] = true,
["colorOverride"] = "USE_DEFAULT",
["width"] = 184,
["height"] = 54,
@@ -1980,6 +1981,7 @@ P["unitframe"] = {
["sortDir"] = "ASC",
["showPlayer"] = true,
["healPrediction"] = false,
+ ["resurrect"] = true,
["colorOverride"] = "USE_DEFAULT",
["width"] = 80,
["height"] = 44,
@@ -2137,6 +2139,7 @@ P["unitframe"] = {
["sortDir"] = "ASC",
["showPlayer"] = true,
["healPrediction"] = false,
+ ["resurrect"] = true,
["colorOverride"] = "USE_DEFAULT",
["width"] = 80,
["height"] = 27,
diff --git a/ElvUI/media/textures/Raid-Icon-Rez.blp b/ElvUI/media/textures/Raid-Icon-Rez.blp
new file mode 100644
index 0000000000000000000000000000000000000000..1d956c2bd218f6d393cc83779cfde91b6d38cf8a
GIT binary patch
literal 6660
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
+
@@ -22,9 +23,9 @@
+
-
\ No newline at end of file
diff --git a/ElvUI/modules/unitframes/elements/resurrectionicon.lua b/ElvUI/modules/unitframes/elements/resurrectionicon.lua
new file mode 100644
index 000000000..b303cfac5
--- /dev/null
+++ b/ElvUI/modules/unitframes/elements/resurrectionicon.lua
@@ -0,0 +1,24 @@
+local E, L, V, P, G = unpack(select(2, ...))
+local UF = E:GetModule("UnitFrames")
+
+function UF:Construct_ResurrectionIcon(frame)
+ local tex = frame.RaisedElementParent.TextureParent:CreateTexture(nil, "OVERLAY")
+ tex:SetTexture([[Interface\AddOns\ElvUI\media\textures\Raid-Icon-Rez]])
+ tex:Size(30, 25)
+ tex:Point("CENTER", frame.Health.value, "CENTER")
+ tex:Hide()
+
+ return tex
+end
+
+function UF:Configure_ResurrectionIcon(frame)
+ if frame.db.resurrect then
+ if not frame:IsElementEnabled("ResurrectIndicator") then
+ frame:EnableElement("ResurrectIndicator")
+ end
+ else
+ if frame:IsElementEnabled("ResurrectIndicator") then
+ frame:DisableElement("ResurrectIndicator")
+ end
+ end
+end
\ No newline at end of file
diff --git a/ElvUI/modules/unitframes/groups/party.lua b/ElvUI/modules/unitframes/groups/party.lua
index 0f8f0e337..c7ff90c46 100644
--- a/ElvUI/modules/unitframes/groups/party.lua
+++ b/ElvUI/modules/unitframes/groups/party.lua
@@ -47,6 +47,7 @@ function UF:Construct_PartyFrames()
self.AuraWatch = UF:Construct_AuraWatch(self);
self.RaidDebuffs = UF:Construct_RaidDebuffs(self);
self.DebuffHighlight = UF:Construct_DebuffHighlight(self);
+ self.ResurrectIndicator = UF:Construct_ResurrectionIcon(self)
self.GroupRoleIndicator = UF:Construct_RoleIcon(self);
self.TargetGlow = UF:Construct_TargetGlow(self);
self.RaidRoleFramesAnchor = UF:Construct_RaidRoleFrames(self);
@@ -229,6 +230,8 @@ function UF:Update_PartyFrames(frame, db)
UF:Configure_DebuffHighlight(frame);
+ UF:Configure_ResurrectionIcon(frame)
+
UF:Configure_RoleIcon(frame);
UF:Configure_HealComm(frame);
diff --git a/ElvUI/modules/unitframes/groups/raid.lua b/ElvUI/modules/unitframes/groups/raid.lua
index 968479fbe..b06d9104d 100644
--- a/ElvUI/modules/unitframes/groups/raid.lua
+++ b/ElvUI/modules/unitframes/groups/raid.lua
@@ -33,6 +33,7 @@ function UF:Construct_RaidFrames()
self.AuraWatch = UF:Construct_AuraWatch(self);
self.RaidDebuffs = UF:Construct_RaidDebuffs(self);
self.DebuffHighlight = UF:Construct_DebuffHighlight(self);
+ self.ResurrectIndicator = UF:Construct_ResurrectionIcon(self)
self.GroupRoleIndicator = UF:Construct_RoleIcon(self);
self.RaidRoleFramesAnchor = UF:Construct_RaidRoleFrames(self);
self.TargetGlow = UF:Construct_TargetGlow(self);
@@ -196,6 +197,8 @@ function UF:Update_RaidFrames(frame, db)
UF:Configure_DebuffHighlight(frame);
+ UF:Configure_ResurrectionIcon(frame)
+
UF:Configure_RoleIcon(frame);
UF:Configure_HealComm(frame);
diff --git a/ElvUI/modules/unitframes/groups/raid40.lua b/ElvUI/modules/unitframes/groups/raid40.lua
index bc4017bdb..345158d6e 100644
--- a/ElvUI/modules/unitframes/groups/raid40.lua
+++ b/ElvUI/modules/unitframes/groups/raid40.lua
@@ -33,6 +33,7 @@ function UF:Construct_Raid40Frames()
self.AuraWatch = UF:Construct_AuraWatch(self);
self.RaidDebuffs = UF:Construct_RaidDebuffs(self);
self.DebuffHighlight = UF:Construct_DebuffHighlight(self);
+ self.ResurrectIndicator = UF:Construct_ResurrectionIcon(self)
self.GroupRoleIndicator = UF:Construct_RoleIcon(self);
self.RaidRoleFramesAnchor = UF:Construct_RaidRoleFrames(self);
self.TargetGlow = UF:Construct_TargetGlow(self);
@@ -197,6 +198,8 @@ function UF:Update_Raid40Frames(frame, db)
UF:Configure_DebuffHighlight(frame);
+ UF:Configure_ResurrectionIcon(frame)
+
UF:Configure_RoleIcon(frame);
UF:Configure_HealComm(frame);
diff --git a/ElvUI_Config/locales/chinese_config.lua b/ElvUI_Config/locales/chinese_config.lua
index c2b9b3f1a..f68936acf 100644
--- a/ElvUI_Config/locales/chinese_config.lua
+++ b/ElvUI_Config/locales/chinese_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = "移除技能ID或者名称"
L["Remove SpellID"] = "移除技能ID"
L["Rest Icon"] = "充分休息图标"
L["Restore Defaults"] = "恢复预设"
+L["Resurrection Indicator"] = true;
L["Right to Left"] = "右到左"
L["RL / ML Icons"] = "主坦克/主助理图标"
L["Role Icon"] = "角色定位图标"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "当单位是友
L["Sets the font instance's horizontal text alignment style."] = "设置字体实例的水平文本对齐方式"
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "在单位框架中显示即将回复的的预测治疗量, 过量治疗则以不同颜色显示"
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "显示其他玩家的光环"
L["Show Auras"] = "显示光环"
L["Show Dispellable Debuffs"] = "显示无法驱散的debuff"
diff --git a/ElvUI_Config/locales/english_config.lua b/ElvUI_Config/locales/english_config.lua
index 89c0293e7..55c0f2acf 100644
--- a/ElvUI_Config/locales/english_config.lua
+++ b/ElvUI_Config/locales/english_config.lua
@@ -1013,6 +1013,7 @@ L["Remove Spell ID or Name"] = true;
L["Remove SpellID"] = true;
L["Rest Icon"] = true;
L["Restore Defaults"] = true; --Also used in Media and ActionBars sections
+L["Resurrection Indicator"] = true;
L["Right to Left"] = true;
L["RL / ML Icons"] = true;
L["Role Icon"] = true;
@@ -1032,6 +1033,7 @@ L["Set the type of auras to show when a unit is friendly."] = true;
L["Sets the font instance's horizontal text alignment style."] = true;
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = true;
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = true;
L["Show Auras"] = true;
L["Show Dispellable Debuffs"] = true;
diff --git a/ElvUI_Config/locales/french_config.lua b/ElvUI_Config/locales/french_config.lua
index aa6efad97..4bc323e7c 100644
--- a/ElvUI_Config/locales/french_config.lua
+++ b/ElvUI_Config/locales/french_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = true;
L["Remove SpellID"] = "Supprimer l'identifiant d'un sort"
L["Rest Icon"] = "Icône reposé"
L["Restore Defaults"] = "Restaurer les paramètres par défaut" --Also used in Media and ActionBars sections
+L["Resurrection Indicator"] = true;
L["Right to Left"] = true;
L["RL / ML Icons"] = "Icônes RL / ML"
L["Role Icon"] = "Icône de rôle"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "Définir le type
L["Sets the font instance's horizontal text alignment style."] = "Réglages de l'alignement horizontal du texte de la police d'écriture."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "Affiche une barre sur la prédiction des soins à venir sur le cadre d'unité. Ainsi qu'une barre de couleur légèrement différente pour les soins entrants excédants."
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "N'importe quelle unité"
L["Show Auras"] = "Afficher les auras"
L["Show Dispellable Debuffs"] = true;
diff --git a/ElvUI_Config/locales/german_config.lua b/ElvUI_Config/locales/german_config.lua
index 6c0355214..2d8ab6c42 100644
--- a/ElvUI_Config/locales/german_config.lua
+++ b/ElvUI_Config/locales/german_config.lua
@@ -1025,6 +1025,7 @@ L["Remove Spell ID or Name"] = "Entferne Zauber ID oder Name"
L["Remove SpellID"] = "Entferne Zauber ID"
L["Rest Icon"] = "Ausgeruht-Symbol"
L["Restore Defaults"] = "Standard wiederherstellen" --Also used in General and ActionBars sections
+L["Resurrection Indicator"] = true;
L["Right to Left"] = "Rechts nach Links"
L["RL / ML Icons"] = "RL / ML Symbole"
L["Role Icon"] = "Rollensymbol"
@@ -1044,6 +1045,7 @@ L["Set the type of auras to show when a unit is friendly."] = "Wähle den Aurent
L["Sets the font instance's horizontal text alignment style."] = "Wähle die Schriftart Instanz horizontal zur Ausrichtung des Textes Stils."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "Zeige eingehende Heilung im Einheitenfenster. Zeigt eine etwas anders farbige Leiste für eingehende Überheilung."
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "Zeige Auren von anderen Spielern"
L["Show Auras"] = "Zeige Auren"
L["Show Dispellable Debuffs"] = "Zeige stehlbare Schwächungszauber"
diff --git a/ElvUI_Config/locales/korean_config.lua b/ElvUI_Config/locales/korean_config.lua
index 9a5d44d0f..488534a34 100644
--- a/ElvUI_Config/locales/korean_config.lua
+++ b/ElvUI_Config/locales/korean_config.lua
@@ -1072,6 +1072,7 @@ L["Remove Spell ID or Name"] = true;
L["Remove SpellID"] = "주문 ID 삭제"
L["Rest Icon"] = "휴식 아이콘"
L["Restore Defaults"] = "기본값 복원"
+L["Resurrection Indicator"] = true;
L["Right to Left"] = true;
L["RL / ML Icons"] = "공대장/전리품담당자 아이콘"
L["Role Icon"] = "역할 아이콘"
@@ -1091,6 +1092,7 @@ L["Set the type of auras to show when a unit is friendly."] = "해당 유닛이
L["Sets the font instance's horizontal text alignment style."] = "문자의 가로 정렬 방법을 결정합니다."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "생명력바에 예상 치유량을 표시합니다."
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "다른 유저가 걸어준 버프도 표시"
L["Show Auras"] = "오라아이콘 표시"
L["Show Dispellable Debuffs"] = true;
diff --git a/ElvUI_Config/locales/portuguese_config.lua b/ElvUI_Config/locales/portuguese_config.lua
index 7b053b93a..2a2953935 100644
--- a/ElvUI_Config/locales/portuguese_config.lua
+++ b/ElvUI_Config/locales/portuguese_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = true;
L["Remove SpellID"] = "Remover SpellID"
L["Rest Icon"] = "ìcone de descansar"
L["Restore Defaults"] = "Restaurar ao Padrão"
+L["Resurrection Indicator"] = true;
L["Right to Left"] = true;
L["RL / ML Icons"] = "Icons LR / MS"
L["Role Icon"] = "Ícone do papel"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "Define o tipo de
L["Sets the font instance's horizontal text alignment style."] = "Define o estilo de alinhamento horizontal da instância da fonte."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "Mostra a barra de predicção de cura no quadro de unidade. Também exibe uma barra com uma cor ligeiramente diferente para a predicção de sobrecura."
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "Mostrar Auras de outros Jogadores"
L["Show Auras"] = "Mostrar Auras"
L["Show Dispellable Debuffs"] = true;
diff --git a/ElvUI_Config/locales/russian_config.lua b/ElvUI_Config/locales/russian_config.lua
index 9dfbe24c6..ac7f3907e 100644
--- a/ElvUI_Config/locales/russian_config.lua
+++ b/ElvUI_Config/locales/russian_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = "Удалить ID или имя заклинан
L["Remove SpellID"] = "Удалить ID заклинания"
L["Rest Icon"] = "Иконка отдыха"
L["Restore Defaults"] = "Восстановить умолчания" --Also used in Media and ActionBars sections
+L["Resurrection Indicator"] = "Индикатор воскрещения"
L["Right to Left"] = "Справа налево"
L["RL / ML Icons"] = "Иконки лидера/ответственного"
L["Role Icon"] = "Иконка роли"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "Устанавл
L["Sets the font instance's horizontal text alignment style."] = "Устанавливает выравнивание текста по горизонтали"
L["Show"] = "Показать"
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "Отображать объем входящего исцеления на рамках. Также отображает немного иначе окрашенную полосу для избыточного исцеления."
+L["Show an incoming resurection."] = "Отображать входящее воскрещение."
L["Show Aura From Other Players"] = "Отображать чужие"
L["Show Auras"] = "Показать ауры"
L["Show Dispellable Debuffs"] = "Показывать развеиваемые дебаффы"
diff --git a/ElvUI_Config/locales/spanish_config.lua b/ElvUI_Config/locales/spanish_config.lua
index 4f5569af5..b02daec3b 100644
--- a/ElvUI_Config/locales/spanish_config.lua
+++ b/ElvUI_Config/locales/spanish_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = true;
L["Remove SpellID"] = "Eliminar ID de Hechizo"
L["Rest Icon"] = "Icono de Descanso"
L["Restore Defaults"] = "Restaurar por Defecto"
+L["Resurrection Indicator"] = true;
L["Right to Left"] = true;
L["RL / ML Icons"] = "Iconos LB / MD"
L["Role Icon"] = "Icono de Rol"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "Establece el tipo
L["Sets the font instance's horizontal text alignment style."] = "Establece la alineación horizontal del texto."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "Muestra una barra de predicción de sanación en el marco de unidad. También muestra una barra ligeramente coloreada para sobresanaciones recibidas."
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "Mostrar Auras de Otros Jugadores"
L["Show Auras"] = "Mostrar Auras"
L["Show Dispellable Debuffs"] = true;
diff --git a/ElvUI_Config/locales/taiwanese_config.lua b/ElvUI_Config/locales/taiwanese_config.lua
index 6e928233a..a8e860064 100644
--- a/ElvUI_Config/locales/taiwanese_config.lua
+++ b/ElvUI_Config/locales/taiwanese_config.lua
@@ -1024,6 +1024,7 @@ L["Remove Spell ID or Name"] = "移除技能ID或者名稱"
L["Remove SpellID"] = "移除技能ID"
L["Rest Icon"] = "充分休息圖示"
L["Restore Defaults"] = "恢復預設"
+L["Resurrection Indicator"] = true;
L["Right to Left"] = "右到左"
L["RL / ML Icons"] = "團隊隊長/裝備分配圖示"
L["Role Icon"] = "角色定位圖示"
@@ -1043,6 +1044,7 @@ L["Set the type of auras to show when a unit is friendly."] = "當單位是友
L["Sets the font instance's horizontal text alignment style."] = "設定橫向字體的對齊方式."
L["Show"] = true;
L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."] = "在單位框架中顯示即將回复的的預測治療量, 過量治療則以不同顏色顯示. "
+L["Show an incoming resurection."] = true;
L["Show Aura From Other Players"] = "顯示其他玩家的光環"
L["Show Auras"] = "顯示光環"
L["Show Dispellable Debuffs"] = "顯示無法驅散的debuff"
diff --git a/ElvUI_Config/unitframes.lua b/ElvUI_Config/unitframes.lua
index f9520bee3..01b12813e 100644
--- a/ElvUI_Config/unitframes.lua
+++ b/ElvUI_Config/unitframes.lua
@@ -862,9 +862,7 @@ local function GetOptionsTable_Castbar(hasTicks, updateFunc, groupName, numUnits
return config
end
-
local function GetOptionsTable_InformationPanel(updateFunc, groupName, numUnits)
-
local config = {
order = 4000,
type = "group",
@@ -4883,14 +4881,20 @@ E.Options.args.unitframe.args.party = {
desc = L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."],
type = "toggle",
},
+ resurrect = {
+ order = 6,
+ name = L["Resurrection Indicator"],
+ desc = L["Show an incoming resurection."],
+ type = "toggle",
+ },
threatStyle = {
type = "select",
- order = 6,
+ order = 7,
name = L["Threat Display Mode"],
values = threatValues,
},
colorOverride = {
- order = 7,
+ order = 8,
name = L["Class Color Override"],
desc = L["Override the default class color setting."],
type = "select",
@@ -4901,7 +4905,7 @@ E.Options.args.unitframe.args.party = {
},
},
orientation = {
- order = 8,
+ order = 9,
type = "select",
name = L["Frame Orientation"],
desc = L["Set the orientation of the UnitFrame."],
@@ -4913,7 +4917,7 @@ E.Options.args.unitframe.args.party = {
},
},
targetGlow = {
- order = 9,
+ order = 10,
type = "toggle",
name = L["Target Glow"],
},
@@ -5478,14 +5482,20 @@ E.Options.args.unitframe.args.raid = {
desc = L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."],
type = "toggle",
},
+ resurrect = {
+ order = 6,
+ name = L["Resurrection Indicator"],
+ desc = L["Show an incoming resurection."],
+ type = "toggle",
+ },
threatStyle = {
type = "select",
- order = 6,
+ order = 7,
name = L["Threat Display Mode"],
values = threatValues,
},
colorOverride = {
- order = 7,
+ order = 8,
name = L["Class Color Override"],
desc = L["Override the default class color setting."],
type = "select",
@@ -5496,7 +5506,7 @@ E.Options.args.unitframe.args.raid = {
},
},
orientation = {
- order = 8,
+ order = 9,
type = "select",
name = L["Frame Orientation"],
desc = L["Set the orientation of the UnitFrame."],
@@ -5508,7 +5518,7 @@ E.Options.args.unitframe.args.raid = {
},
},
targetGlow = {
- order = 9,
+ order = 10,
type = "toggle",
name = L["Target Glow"],
},
@@ -5895,14 +5905,20 @@ E.Options.args.unitframe.args.raid40 = {
desc = L["Show an incoming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals."],
type = "toggle",
},
+ resurrect = {
+ order = 6,
+ name = L["Resurrection Indicator"],
+ desc = L["Show an incoming resurection."],
+ type = "toggle",
+ },
threatStyle = {
type = "select",
- order = 6,
+ order = 7,
name = L["Threat Display Mode"],
values = threatValues,
},
colorOverride = {
- order = 7,
+ order = 8,
name = L["Class Color Override"],
desc = L["Override the default class color setting."],
type = "select",
@@ -5913,7 +5929,7 @@ E.Options.args.unitframe.args.raid40 = {
},
},
orientation = {
- order = 8,
+ order = 9,
type = "select",
name = L["Frame Orientation"],
desc = L["Set the orientation of the UnitFrame."],
@@ -5925,7 +5941,7 @@ E.Options.args.unitframe.args.raid40 = {
},
},
targetGlow = {
- order = 9,
+ order = 10,
type = "toggle",
name = L["Target Glow"],
},
@@ -6978,7 +6994,6 @@ for i = 1, 3 do
}
end
-
if P.unitframe.colors.classResources[E.myclass] then
E.Options.args.unitframe.args.generalOptionsGroup.args.allColorsGroup.args.classResourceGroup.args.spacer2 = {
order = 10,
@@ -7031,4 +7046,4 @@ function E:RefreshCustomTextsConfigs()
end
end
end
-E:RefreshCustomTextsConfigs()
+E:RefreshCustomTextsConfigs()
\ No newline at end of file