You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
8.8 KiB
277 lines
8.8 KiB
local _, Cell = ...
|
|
local L = Cell.L
|
|
local F = Cell.funcs
|
|
|
|
local LBW = LibStub:GetLibrary("LibBadWords")
|
|
local Comm = LibStub:GetLibrary("AceComm-3.0")
|
|
|
|
-----------------------------------------
|
|
-- shared
|
|
-----------------------------------------
|
|
local sendChannel
|
|
local function UpdateSendChannel()
|
|
if IsInGroup(LE_PARTY_CATEGORY_INSTANCE) then
|
|
sendChannel = "INSTANCE_CHAT"
|
|
elseif IsInRaid() then
|
|
sendChannel = "RAID"
|
|
else
|
|
sendChannel = "PARTY"
|
|
end
|
|
end
|
|
|
|
-----------------------------------------
|
|
-- nickname
|
|
-----------------------------------------
|
|
Cell.vars.nicknames = {}
|
|
Cell.vars.nicknameCustoms = {}
|
|
Cell.vars.nicknameBlacklist = {}
|
|
|
|
function F.GetNickname(shortname, fullname)
|
|
local name
|
|
if Cell.vars.nicknameCustomEnabled then
|
|
name = Cell.vars.nicknameCustoms[fullname] or
|
|
Cell.vars.nicknameCustoms[shortname] or
|
|
Cell.vars.nicknames[fullname] or
|
|
Cell.vars.nicknames[shortname] or
|
|
shortname
|
|
else
|
|
name = Cell.vars.nicknames[fullname] or
|
|
Cell.vars.nicknames[shortname] or
|
|
shortname
|
|
end
|
|
return name or _G.UNKNOWNOBJECT
|
|
end
|
|
|
|
local nic_check, nic_send
|
|
|
|
local function Update(b)
|
|
b.indicators.nameText:UpdateName()
|
|
end
|
|
|
|
local function UpdateName(who)
|
|
F.Debug("|cFF69A000UpdateName:|r|cFF696969", who, Cell.vars.nicknames[who], Cell.vars.nicknameCustoms[who])
|
|
-- update name
|
|
local handled = F.HandleUnitButton("name", who, Update)
|
|
if not handled then
|
|
if strfind(who, "-") then
|
|
who = F.ToShortName(who)
|
|
else
|
|
who = who.."-"..GetNormalizedRealmName()
|
|
end
|
|
F.HandleUnitButton("name", who, Update)
|
|
end
|
|
-- update quickAssist
|
|
local unit = Cell.vars.names[who]
|
|
if unit and Cell.unitButtons.quickAssist.units[unit] then
|
|
Cell.unitButtons.quickAssist.units[unit].nameText:UpdateName()
|
|
end
|
|
end
|
|
|
|
local function CheckNicknames()
|
|
if IsInGroup() then
|
|
if CellDB["nicknames"]["sync"] then
|
|
if nic_check then nic_check:Cancel() end
|
|
nic_check = C_Timer.NewTimer(random(3), function()
|
|
UpdateSendChannel()
|
|
Comm:SendCommMessage("CELL_CNIC", "chk", sendChannel, nil, "ALERT")
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function CheckSelf()
|
|
Cell.vars.nicknames[Cell.vars.playerNameShort] = Cell.vars.playerNickname
|
|
UpdateName(Cell.vars.playerNameShort)
|
|
|
|
-- update preview buttons
|
|
if CellLayoutsPreviewButton then
|
|
CellLayoutsPreviewButton.indicators.nameText:UpdateName()
|
|
end
|
|
if CellIndicatorsPreviewButton then
|
|
CellIndicatorsPreviewButton.indicators.nameText:UpdateName()
|
|
end
|
|
if CellRaidDebuffsPreviewButton then
|
|
CellRaidDebuffsPreviewButton.indicators.nameText:UpdateName()
|
|
end
|
|
if CellGlowsPreviewButton then
|
|
CellGlowsPreviewButton.indicators.nameText:UpdateName()
|
|
end
|
|
end
|
|
|
|
-- events -----------------------------
|
|
local nickname = CreateFrame("Frame")
|
|
nickname:SetScript("OnEvent", function(self, event, ...)
|
|
self[event](self, ...)
|
|
end)
|
|
|
|
nickname:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
|
|
function nickname:PLAYER_ENTERING_WORLD()
|
|
nickname:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
|
Cell.Fire("UpdateNicknames")
|
|
end
|
|
|
|
function nickname:GROUP_ROSTER_UPDATE()
|
|
CheckNicknames()
|
|
end
|
|
---------------------------------------
|
|
|
|
local function UpdateNicknames(which, value1, value2)
|
|
F.Debug("|cFF80FF00UpdateNicknames:|r", which, value1, value2)
|
|
-- init
|
|
if not which then
|
|
Cell.vars.playerNickname = CellDB["nicknames"]["mine"] ~= "" and CellDB["nicknames"]["mine"] or nil
|
|
Cell.vars.nicknameCustomEnabled = CellDB["nicknames"]["custom"]
|
|
CheckSelf()
|
|
|
|
if CellDB["nicknames"]["sync"] then
|
|
CheckNicknames()
|
|
nickname:RegisterEvent("GROUP_ROSTER_UPDATE")
|
|
end
|
|
|
|
-- customs
|
|
wipe(Cell.vars.nicknameCustoms)
|
|
for _, v in ipairs(CellDB["nicknames"]["list"]) do
|
|
local playerName, nickname = strsplit(":", v, 2)
|
|
if playerName and nickname then
|
|
Cell.vars.nicknameCustoms[playerName] = nickname
|
|
if CellDB["nicknames"]["custom"] then
|
|
UpdateName(playerName)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- blacklist
|
|
wipe(Cell.vars.nicknameBlacklist)
|
|
for _, name in ipairs(CellDB["nicknames"]["blacklist"]) do
|
|
Cell.vars.nicknameBlacklist[name] = true
|
|
end
|
|
|
|
-- enable/disable sync
|
|
elseif which == "sync" then
|
|
if CellDB["nicknames"]["sync"] then
|
|
CheckNicknames()
|
|
nickname:RegisterEvent("GROUP_ROSTER_UPDATE")
|
|
else
|
|
-- clear all except mine
|
|
F.RemoveElementsExceptKeys(Cell.vars.nicknames, Cell.vars.playerNameShort)
|
|
nickname:UnregisterEvent("GROUP_ROSTER_UPDATE")
|
|
|
|
if nic_check then nic_check:Cancel() end
|
|
-- disabled, notify others
|
|
UpdateSendChannel()
|
|
Comm:SendCommMessage("CELL_NIC", "CELL_NONE", sendChannel)
|
|
|
|
-- update all
|
|
F.IterateAllUnitButtons(function(b)
|
|
b.indicators.nameText:UpdateName()
|
|
end, true)
|
|
end
|
|
|
|
-- player changed nickname
|
|
elseif which == "mine" then
|
|
Cell.vars.playerNickname = CellDB["nicknames"]["mine"] ~= "" and CellDB["nicknames"]["mine"] or nil
|
|
|
|
-- update self
|
|
CheckSelf()
|
|
|
|
-- notify others
|
|
if IsInGroup() and CellDB["nicknames"]["sync"] then
|
|
UpdateSendChannel()
|
|
Comm:SendCommMessage("CELL_NIC", Cell.vars.playerNickname or "CELL_NONE", sendChannel)
|
|
end
|
|
|
|
-- customs
|
|
elseif which == "custom" then
|
|
Cell.vars.nicknameCustomEnabled = CellDB["nicknames"]["custom"]
|
|
-- update now
|
|
for playerName in pairs(Cell.vars.nicknameCustoms) do
|
|
UpdateName(playerName)
|
|
end
|
|
|
|
-- list
|
|
elseif which == "list-add" or which == "list-update" then
|
|
Cell.vars.nicknameCustoms[value1] = value2
|
|
UpdateName(value1)
|
|
elseif which == "list-delete" then
|
|
Cell.vars.nicknameCustoms[value1] = nil
|
|
UpdateName(value1)
|
|
|
|
-- blacklist
|
|
elseif which == "blacklist-add" then
|
|
Cell.vars.nicknameBlacklist[value1] = true
|
|
Cell.vars.nicknames[value1] = nil
|
|
Cell.vars.nicknames[F.ToShortName(value1)] = nil
|
|
UpdateName(value1)
|
|
elseif which == "blacklist-delete" then
|
|
Cell.vars.nicknameBlacklist[value1] = nil
|
|
-- no request
|
|
end
|
|
end
|
|
Cell.RegisterCallback("UpdateNicknames", "UpdateNicknames", UpdateNicknames)
|
|
|
|
-- check nickname received
|
|
Comm:RegisterComm("CELL_CNIC", function(prefix, message, channel, sender)
|
|
-- others send chk before you, no need to send chk again
|
|
if nic_check then nic_check:Cancel() end
|
|
|
|
if nic_send then nic_send:Cancel() end
|
|
nic_send = C_Timer.NewTimer(3, function()
|
|
UpdateSendChannel()
|
|
if CellDB["nicknames"]["sync"] then
|
|
Comm:SendCommMessage("CELL_NIC", Cell.vars.playerNickname or "CELL_NONE", sendChannel)
|
|
else
|
|
Comm:SendCommMessage("CELL_NIC", "CELL_NONE", sendChannel)
|
|
end
|
|
end)
|
|
end)
|
|
|
|
-- nickname received
|
|
Comm:RegisterComm("CELL_NIC", function(prefix, message, channel, sender)
|
|
if sender == Cell.vars.playerNameShort then return end
|
|
|
|
if CellDB["nicknames"]["sync"] then
|
|
if not string.find(sender, "-") then
|
|
sender = sender .. "-" .. GetNormalizedRealmName()
|
|
end
|
|
|
|
if message == "CELL_NONE" or Cell.vars.nicknameBlacklist[sender] or LBW.ContainsBadWords(message) then
|
|
Cell.vars.nicknames[sender] = nil
|
|
else
|
|
Cell.vars.nicknames[sender] = message
|
|
end
|
|
UpdateName(sender)
|
|
end
|
|
end)
|
|
|
|
-----------------------------------------
|
|
-- NickTag
|
|
-----------------------------------------
|
|
local f = CreateFrame("Frame")
|
|
f:RegisterEvent("PLAYER_LOGIN")
|
|
f:SetScript("OnEvent", function()
|
|
f:UnregisterAllEvents()
|
|
|
|
if not CELL_NICKTAG_ENABLED then return end
|
|
|
|
local nickTag = LibStub:GetLibrary("NickTag-1.0", true)
|
|
if nickTag then
|
|
Cell.NickTag = nickTag
|
|
|
|
local function UpdateAll()
|
|
-- update all
|
|
F.IterateAllUnitButtons(function(b)
|
|
b.indicators.nameText:UpdateName()
|
|
end, true)
|
|
end
|
|
|
|
local timer
|
|
nickTag:RegisterCallback("NickTag_Update", function()
|
|
if timer then
|
|
timer:Cancel()
|
|
timer = nil
|
|
end
|
|
timer = C_Timer.NewTimer(3, UpdateAll)
|
|
end)
|
|
end
|
|
end)
|