- Nicktag library update

This commit is contained in:
Tercio
2018-03-02 21:39:27 -03:00
parent f8c216ea0c
commit 58c325395d
4 changed files with 194 additions and 212 deletions
+185 -203
View File
@@ -4,7 +4,7 @@
-- NickTag:SetNickname (name) -> set the player nick name, after set nicktag will broadcast the nick over addon guild channel.
--
local major, minor = "NickTag-1.0", 9
local major, minor = "NickTag-1.0", 10
local NickTag, oldminor = LibStub:NewLibrary (major, minor)
if (not NickTag) then
@@ -48,7 +48,7 @@ end
local queue_send = {}
local last_queue = 0
local is_updating = false
NickTag.debug = false
NickTag.debug = true
local GetGuildRosterInfo = GetGuildRosterInfo
@@ -77,8 +77,8 @@ end
return target
end
function NickTag:Msg (text)
print ("|cFFFFFF00NickTag:|r",text)
function NickTag:Msg (text, text2)
print ("|cFFFFFF00NickTag:|r",text, text2 or "")
end
local enUS = LibStub("AceLocale-3.0"):NewLocale ("NickTag-1.0", "enUS", true)
@@ -86,6 +86,7 @@ end
enUS ["STRING_ERROR_1"] = "Your nickname is too long, max of 12 characters is allowed."
enUS ["STRING_ERROR_2"] = "Only letters and two spaces are allowed."
enUS ["STRING_ERROR_3"] = "You can't use the same letter three times consecutively, two spaces consecutively or more then two spaces."
enUS ["STRING_ERROR_4"] = "Name isn't a valid string."
enUS ["STRING_INVALID_NAME"] = "Invalid Name"
end
@@ -94,6 +95,7 @@ end
ptBR ["STRING_ERROR_1"] = "Seu apelido esta muito longo, o maximo permitido sao 12 caracteres."
ptBR ["STRING_ERROR_2"] = "Apenas letras, numeros e espacos sao permitidos no apelido."
ptBR ["STRING_ERROR_3"] = "Voce nao pode usar a mesma letra mais de 2 vezes consecutivas, dois espacos consecutivos ou mais de 2 espacos."
ptBR ["STRING_ERROR_4"] = "Nome nao eh uma string valida."
ptBR ["STRING_INVALID_NAME"] = "Nome Invalido"
end
@@ -210,8 +212,12 @@ end
------------------------------------------------------------------------------------------------------------------------------------------------------
--> send and receive functions
function NickTag:OnReceiveComm (_, data, _, source)
function NickTag:OnReceiveComm (prefix, data, channel, source)
if (not source) then
return
end
local _type, serial, arg3, name, realm, version = select (2, NickTag:Deserialize (data))
--> 0x1: received a full persona
@@ -219,47 +225,92 @@ end
local receivedPersona = arg3
version = name
if (serial ~= NickTag:GetSerial() and (version and version == minor)) then
if (not receivedPersona or type (receivedPersona) ~= "table") then
if (NickTag.debug) then
NickTag:Msg ("FULLPERSONA received but it's invalid ", source)
end
return
end
if (source ~= UnitName ("player") and (version and version == minor) and receivedPersona) then
local storedPersona = NickTag:GetNicknameTable (serial)
local storedPersona = NickTag:GetNicknameTable (source)
if (not storedPersona) then
storedPersona = NickTag:Create (serial)
storedPersona = NickTag:Create (source)
end
if (storedPersona [CONST_INDEX_REVISION] < receivedPersona [CONST_INDEX_REVISION]) then
storedPersona [CONST_INDEX_REVISION] = receivedPersona [CONST_INDEX_REVISION]
--> we need to check if the received nickname fit in our rules.
--local allowNickName = NickTag:CheckName (receivedPersona [CONST_INDEX_NICKNAME])
--if (allowNickName) then
-- storedPersona [CONST_INDEX_NICKNAME] = receivedPersona [CONST_INDEX_NICKNAME]
--else
--storedPersona [CONST_INDEX_NICKNAME] = LibStub ("AceLocale-3.0"):GetLocale ("NickTag-1.0")["STRING_INVALID_NAME"]
--end
local allowNickName = NickTag:CheckName (receivedPersona [CONST_INDEX_NICKNAME])
if (allowNickName) then
storedPersona [CONST_INDEX_NICKNAME] = receivedPersona [CONST_INDEX_NICKNAME]
else
storedPersona [CONST_INDEX_NICKNAME] = LibStub ("AceLocale-3.0"):GetLocale ("NickTag-1.0")["STRING_INVALID_NAME"]
end
storedPersona [CONST_INDEX_NICKNAME] = receivedPersona [CONST_INDEX_NICKNAME]
--> update the rest
storedPersona [CONST_INDEX_AVATAR_PATH] = receivedPersona [CONST_INDEX_AVATAR_PATH]
storedPersona [CONST_INDEX_AVATAR_TEXCOORD] = receivedPersona [CONST_INDEX_AVATAR_TEXCOORD]
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD] = receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD]
storedPersona [CONST_INDEX_BACKGROUND_PATH] = receivedPersona [CONST_INDEX_BACKGROUND_PATH]
storedPersona [CONST_INDEX_BACKGROUND_COLOR] = receivedPersona [CONST_INDEX_BACKGROUND_COLOR]
--avatar path
storedPersona [CONST_INDEX_AVATAR_PATH] = type (receivedPersona [CONST_INDEX_AVATAR_PATH]) == "string" and receivedPersona [CONST_INDEX_AVATAR_PATH] or ""
--avatar texcoord
if (type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD]) == "boolean") then
storedPersona [CONST_INDEX_AVATAR_TEXCOORD] = {0, 1, 0, 1}
elseif (type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD]) == "table") then
storedPersona [CONST_INDEX_AVATAR_TEXCOORD] = storedPersona [CONST_INDEX_AVATAR_TEXCOORD] or {}
storedPersona [CONST_INDEX_AVATAR_TEXCOORD][1] = type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][1]) == "number" and receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][1] or 0
storedPersona [CONST_INDEX_AVATAR_TEXCOORD][2] = type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][2]) == "number" and receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][2] or 1
storedPersona [CONST_INDEX_AVATAR_TEXCOORD][3] = type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][3]) == "number" and receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][3] or 0
storedPersona [CONST_INDEX_AVATAR_TEXCOORD][4] = type (receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][4]) == "number" and receivedPersona [CONST_INDEX_AVATAR_TEXCOORD][4] or 1
else
storedPersona [CONST_INDEX_AVATAR_TEXCOORD] = {0, 1, 0, 1}
end
--background texcoord
if (type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD]) == "boolean") then
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD] = {0, 1, 0, 1}
elseif (type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD]) == "table") then
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD] = storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD] or {}
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][1] = type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][1]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][1] or 0
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][2] = type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][2]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][2] or 1
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][3] = type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][3]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][3] or 0
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][4] = type (receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][4]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_TEXCOORD][4] or 1
else
storedPersona [CONST_INDEX_BACKGROUND_TEXCOORD] = {0, 1, 0, 1}
end
--background path
storedPersona [CONST_INDEX_BACKGROUND_PATH] = type (receivedPersona [CONST_INDEX_BACKGROUND_PATH]) == "string" and receivedPersona [CONST_INDEX_BACKGROUND_PATH] or ""
--background color
if (type (receivedPersona [CONST_INDEX_BACKGROUND_COLOR]) == "table") then
storedPersona [CONST_INDEX_BACKGROUND_COLOR] = storedPersona [CONST_INDEX_BACKGROUND_COLOR] or {}
storedPersona [CONST_INDEX_BACKGROUND_COLOR][1] = type (receivedPersona [CONST_INDEX_BACKGROUND_COLOR][1]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_COLOR][1] or 1
storedPersona [CONST_INDEX_BACKGROUND_COLOR][2] = type (receivedPersona [CONST_INDEX_BACKGROUND_COLOR][2]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_COLOR][2] or 1
storedPersona [CONST_INDEX_BACKGROUND_COLOR][3] = type (receivedPersona [CONST_INDEX_BACKGROUND_COLOR][3]) == "number" and receivedPersona [CONST_INDEX_BACKGROUND_COLOR][3] or 1
else
storedPersona [CONST_INDEX_BACKGROUND_COLOR] = {1, 1, 1}
end
end
end
--> 0x2: received a revision version from a guy which logon in the game
elseif (_type == CONST_COMM_LOGONREVISION) then
if (UnitName ("player") == name) then
if (UnitName ("player") == source) then
return
end
local receivedRevision = arg3
local storedPersona = NickTag:GetNicknameTable (serial)
local storedPersona = NickTag:GetNicknameTable (source)
if (NickTag.debug) then
NickTag:Msg ("LOGONREVISION from: " .. name .. " rev: " .. receivedRevision)
NickTag:Msg ("LOGONREVISION rev: " .. receivedRevision .. " source: " .. source)
end
if (type (version) ~= "number" or version ~= minor) then
@@ -267,41 +318,30 @@ end
end
if (not storedPersona or storedPersona [CONST_INDEX_REVISION] < receivedRevision) then
--> not sure how connected realms will work, but guess this will be fine
if (realm ~= GetRealmName()) then
name = name .. "-" .. realm
end
--> put in queue our request for receive a updated persona
NickTag:ScheduleTimer ("QueueRequest", math.random (10, 60), name)
NickTag:ScheduleTimer ("QueueRequest", math.random (10, 60), source)
if (NickTag.debug) then
NickTag:Msg ("LOGONREVISION from: " .. name .. " |cFFFF0000is out of date|r, queueing a request persona.")
NickTag:Msg ("LOGONREVISION from: " .. source .. " |cFFFF0000is out of date|r, queueing a request persona.")
end
else
if (NickTag.debug) then
NickTag:Msg ("LOGONREVISION from: " .. name .. " |cFF00FF00is up to date.")
NickTag:Msg ("LOGONREVISION from: " .. source .. " |cFF00FF00is up to date.")
end
end
--> 0x3: someone requested my persona, so i need to send to him
elseif (_type == CONST_COMM_REQUESTPERSONA) then
if (type (version) ~= "number" or version ~= minor) then
return
end
--> not sure how connected realms will work, but guess this will be fine
if (realm ~= GetRealmName()) then
name = name .. "-" .. realm
end
--> queue to send our persona for requested person
if (NickTag.debug) then
NickTag:Msg ("REQUESTPERSONA from: " .. name .. ", the request has been placed in queue.")
NickTag:Msg ("REQUESTPERSONA from: " .. source .. ", the request has been placed in queue.")
end
NickTag:QueueSend (name)
NickTag:QueueSend (source)
end
end
@@ -463,19 +503,14 @@ end
--> after logon, we send our revision, who needs update my persona will send 0x3 (request persona) to me and i send back 0x1 (send persona)
function NickTag:SendRevision()
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
end
local myPersona = NickTag:GetNicknameTable (battlegroup_serial)
local playerName = UnitName ("player")
local myPersona = NickTag:GetNicknameTable (playerName)
if (myPersona) then
if (NickTag.debug) then
NickTag:Msg ("SendRevision() -> SENT")
end
if (IsInGuild()) then
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_LOGONREVISION, battlegroup_serial, myPersona [CONST_INDEX_REVISION], UnitName ("player"), GetRealmName(), minor), "GUILD")
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_LOGONREVISION, 0, myPersona [CONST_INDEX_REVISION], UnitName ("player"), GetRealmName(), minor), "GUILD")
end
end
end
@@ -497,21 +532,19 @@ end
NickTag:Msg ("SendPersona() -> sent to " .. target)
end
end
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
end
--> auto change nickname if we have a invalid nickname
if (NickTag:GetNickname (UnitGUID ("player")) == LibStub ("AceLocale-3.0"):GetLocale ("NickTag-1.0")["STRING_INVALID_NAME"]) then
local nick_table = NickTag:GetNicknameTable (UnitGUID ("player"))
nick_table [CONST_INDEX_NICKNAME] = UnitName ("player")
if (NickTag:GetNickname (UnitName ("player")) == LibStub ("AceLocale-3.0"):GetLocale ("NickTag-1.0")["STRING_INVALID_NAME"]) then
local nickTable = NickTag:GetNicknameTable (UnitName ("player"))
if (nickTable) then
nickTable [CONST_INDEX_NICKNAME] = UnitName ("player")
end
end
if (target) then
--> was requested
if (IsInGuild()) then
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_FULLPERSONA, battlegroup_serial, NickTag:GetNicknameTable (battlegroup_serial), minor), "WHISPER", target)
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_FULLPERSONA, 0, NickTag:GetNicknameTable (UnitName ("player")), minor), "WHISPER", target)
end
else
--> updating my own persona
@@ -520,7 +553,7 @@ end
NickTag:IncRevision()
--> broadcast over guild channel
if (IsInGuild()) then
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_FULLPERSONA, battlegroup_serial, NickTag:GetNicknameTable (battlegroup_serial), minor), "GUILD")
NickTag:SendCommMessage ("NickTag", NickTag:Serialize (CONST_COMM_FULLPERSONA, 0, NickTag:GetNicknameTable (UnitName ("player")), minor), "GUILD")
end
end
end
@@ -531,15 +564,14 @@ end
--> reset cache
function NickTag:ResetCache()
local guid = UnitGUID ("player")
local playerName = UnitName ("player")
if (guid) then
local player = NickTag:GetNicknameTable (guid)
if (playerName) then
local player = NickTag:GetNicknameTable (playerName)
if (player and pool.last_version == minor) then
local serial = NickTag:GetSerial (guid)
for this_serial, _ in pairs (pool) do
if (this_serial ~= serial) then
pool [this_serial] = nil
for thisPlayerName, _ in pairs (pool) do
if (thisPlayerName ~= playerName) then
pool [thisPlayerName] = nil
end
end
--vardump (pool)
@@ -606,9 +638,13 @@ end
--> we need to keep game smooth checking and formating nicknames.
--> SetNickname and names comming from other player need to be check.
function NickTag:CheckName (name)
--> as nicktag only work internally in the guild, we think that is not necessary a work filter to avoid people using bad language.
if (type (name) ~= "string") then
return false, LibStub ("AceLocale-3.0"):GetLocale ("NickTag-1.0")["STRING_ERROR_4"] --> error 4 = name isn't a valid string
end
name = trim (name)
--> limit nickname to 12 characters, same as wow.
@@ -642,34 +678,33 @@ end
--> set the "player" nickname and schedule for send updated persona
function NickTag:SetNickname (name)
--> check data before
assert (type (name) == "string", "NickTag 'SetNickname' expects a string on #1 argument.")
--> check if the nickname is okey to allowed to use.
local okey, errortype = NickTag:CheckName (name)
if (not okey) then
if (NickTag.debug) then
NickTag:Msg ("SetNickname() invalid name ", name)
end
return false, errortype
end
--> here we format the text to match titles, e.g converts name like "JASON NICKSHOW" into "Jason Nickshow".
name = name:gsub ("(%a)([%w_']*)", titlecase)
--> get player serial, note that serials are unique between battlegroups and we are using serial instead of full GUID just for reduce memory usage,
--> e.g guids are strings with 18 characters, serials are 8 digits number (or 9).
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
end
local playerName = UnitName ("player")
--> get the full nick table.
local nick_table = NickTag:GetNicknameTable (battlegroup_serial)
if (not nick_table) then
nick_table = NickTag:Create (battlegroup_serial, true)
local nickTable = NickTag:GetNicknameTable (playerName)
if (not nickTable) then
nickTable = NickTag:Create (playerName, true)
end
--> change the nickname for the player nick table.
if (nick_table [CONST_INDEX_NICKNAME] ~= name) then
nick_table [CONST_INDEX_NICKNAME] = name
if (nickTable [CONST_INDEX_NICKNAME] ~= name) then
nickTable [CONST_INDEX_NICKNAME] = name
--> send the update for script which need it.
NickTag.callbacks:Fire ("NickTag_Update", CONST_INDEX_NICKNAME)
@@ -680,6 +715,11 @@ end
NickTag.send_scheduled = true
NickTag:ScheduleTimer ("SendPersona", 1)
end
else
if (NickTag.debug) then
NickTag:Msg ("SetNickname() name is the same on the pool ", name, nickTable [CONST_INDEX_NICKNAME])
end
end
return true
@@ -694,30 +734,27 @@ end
end
--> check data before
assert (texture and l and r and t and b, "NickTag 'SetAvatar' bad format. Usage NickTag:SetAvatar (texturepath [, L, R, T, B] or texturepath [, {L, R, T, B}])")
assert (texture and l and r and t and b, "NickTag 'SetNicknameAvatar' bad format. Usage NickTag:SetAvatar (texturepath [, L, R, T, B] or texturepath [, {L, R, T, B}])")
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
local playerName = UnitName ("player")
local nickTable = NickTag:GetNicknameTable (playerName)
if (not nickTable) then
nickTable = NickTag:Create (playerName, true)
end
local nick_table = NickTag:GetNicknameTable (battlegroup_serial)
if (not nick_table) then
nick_table = NickTag:Create (battlegroup_serial, true)
end
if (nick_table [CONST_INDEX_AVATAR_PATH] ~= texture) then
nick_table [CONST_INDEX_AVATAR_PATH] = texture
if (nickTable [CONST_INDEX_AVATAR_PATH] ~= texture) then
nickTable [CONST_INDEX_AVATAR_PATH] = texture
--> by default, CONST_INDEX_AVATAR_TEXCOORD comes as boolean false
if (type (nick_table [CONST_INDEX_AVATAR_TEXCOORD]) == "boolean") then
nick_table [CONST_INDEX_AVATAR_TEXCOORD] = {}
if (type (nickTable [CONST_INDEX_AVATAR_TEXCOORD]) == "boolean") then
nickTable [CONST_INDEX_AVATAR_TEXCOORD] = {}
end
nick_table [CONST_INDEX_AVATAR_TEXCOORD][1] = l
nick_table [CONST_INDEX_AVATAR_TEXCOORD][2] = r
nick_table [CONST_INDEX_AVATAR_TEXCOORD][3] = t
nick_table [CONST_INDEX_AVATAR_TEXCOORD][4] = b
nickTable [CONST_INDEX_AVATAR_TEXCOORD][1] = l
nickTable [CONST_INDEX_AVATAR_TEXCOORD][2] = r
nickTable [CONST_INDEX_AVATAR_TEXCOORD][3] = t
nickTable [CONST_INDEX_AVATAR_TEXCOORD][4] = b
NickTag.callbacks:Fire ("NickTag_Update", CONST_INDEX_AVATAR_PATH)
@@ -749,29 +786,26 @@ end
color = {1, 1, 1}
end
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
end
local playerName = UnitName ("player")
local nick_table = NickTag:GetNicknameTable (battlegroup_serial)
if (not nick_table) then
nick_table = NickTag:Create (battlegroup_serial, true)
local nickTable = NickTag:GetNicknameTable (playerName)
if (not nickTable) then
nickTable = NickTag:Create (playerName, true)
end
local need_sync = false
if (nick_table [CONST_INDEX_BACKGROUND_PATH] ~= path) then
nick_table [CONST_INDEX_BACKGROUND_PATH] = path
if (nickTable [CONST_INDEX_BACKGROUND_PATH] ~= path) then
nickTable [CONST_INDEX_BACKGROUND_PATH] = path
need_sync = true
end
if (nick_table [CONST_INDEX_BACKGROUND_TEXCOORD] ~= texcoord) then
nick_table [CONST_INDEX_BACKGROUND_TEXCOORD] = texcoord
if (nickTable [CONST_INDEX_BACKGROUND_TEXCOORD] ~= texcoord) then
nickTable [CONST_INDEX_BACKGROUND_TEXCOORD] = texcoord
need_sync = true
end
if (nick_table [CONST_INDEX_BACKGROUND_COLOR] ~= color) then
nick_table [CONST_INDEX_BACKGROUND_COLOR] = color
if (nickTable [CONST_INDEX_BACKGROUND_COLOR] ~= color) then
nickTable [CONST_INDEX_BACKGROUND_COLOR] = color
need_sync = true
end
@@ -787,162 +821,110 @@ end
return true
end
function NickTag:GetNickname (serial, default, silent)
function NickTag:GetNickname (playerName, default, silent)
if (not silent) then
assert (serial, "NickTag 'GetNickname' expects a number or string on #1 argument.")
assert (type (playerName) == "string", "NickTag 'GetNickname' expects a string or string on #1 argument.")
end
if (type (serial) == "string") then
serial = NickTag:GetSerial (serial, silent)
end
if (serial) then
local _table = pool [serial]
if (not _table) then
return default or nil
end
return _table [CONST_INDEX_NICKNAME] or default or nil
local _table = pool [playerName]
if (not _table) then
return default or nil
end
return _table [CONST_INDEX_NICKNAME] or default or nil
end
--> return the avatar and the texcoord.
function NickTag:GetNicknameAvatar (serial, default, silent)
function NickTag:GetNicknameAvatar (playerName, default, silent)
if (not silent) then
assert (serial, "NickTag 'GetAvatar' expects a number or string on #1 argument.")
assert (type (playerName) == "string", "NickTag 'GetNicknameAvatar' expects a string or string on #1 argument.")
end
if (type (serial) == "string") then
serial = NickTag:GetSerial (serial, silent)
end
local _table = pool [playerName]
if (serial) then
local _table = pool [serial]
if (not _table and default) then
return default, {0, 1, 0, 1}
elseif (not _table) then
return "", {0, 1, 0, 1}
end
return _table [CONST_INDEX_AVATAR_PATH] or default or "", _table [CONST_INDEX_AVATAR_TEXCOORD] or {0, 1, 0, 1}
if (not _table and default) then
return default, {0, 1, 0, 1}
elseif (not _table) then
return "", {0, 1, 0, 1}
end
return _table [CONST_INDEX_AVATAR_PATH] or default or "", _table [CONST_INDEX_AVATAR_TEXCOORD] or {0, 1, 0, 1}
end
function NickTag:GetNicknameBackground (serial, default_path, default_texcoord, default_color, silent)
function NickTag:GetNicknameBackground (playerName, default_path, default_texcoord, default_color, silent)
if (not silent) then
assert (serial, "NickTag 'GetNicknameBackground' expects a number or string on #1 argument.")
assert (type (playerName) == "string", "NickTag 'GetNicknameBackground' expects a string or string on #1 argument.")
end
if (type (serial) == "string") then
serial = NickTag:GetSerial (serial, silent)
end
if (serial) then
local _table = pool [serial]
if (not _table) then
return default_path, default_texcoord, default_color
end
return _table [CONST_INDEX_BACKGROUND_PATH] or default_path, _table [CONST_INDEX_BACKGROUND_TEXCOORD] or default_texcoord, _table [CONST_INDEX_BACKGROUND_COLOR] or default_color
else
local _table = pool [playerName]
if (not _table) then
return default_path, default_texcoord, default_color
end
return _table [CONST_INDEX_BACKGROUND_PATH] or default_path, _table [CONST_INDEX_BACKGROUND_TEXCOORD] or default_texcoord, _table [CONST_INDEX_BACKGROUND_COLOR] or default_color
end
--> get the full nicktag table
function NickTag:GetNicknameTable (serial, silent)
function NickTag:GetNicknameTable (playerName, silent)
--> check data before
if (not silent) then
assert (serial, "NickTag 'Get' expects a number on #1 argument.")
assert (type (playerName) == "string", "NickTag 'GetNicknameTable' expects a string on #1 argument.")
else
if (not serial) then
if (not playerName or type (playerName) ~= "string") then
return
end
end
if (type (serial) == "string") then
serial = NickTag:GetSerial (serial, silent)
if (not serial) then
return
end
end
return pool [serial]
return pool [playerName]
end
------------------------------------------------------------------------------------------------------------------------------------------------------
--> internal functions
--> create a empty nick table for the player
function NickTag:Create (serial, isSelf)
function NickTag:Create (playerName, isSelf)
--> check data before
assert (type (serial) == "number", "NickTag 'Create' expects a number on #1 argument.")
assert (type (playerName) == "string", "NickTag 'Create' expects a string on #1 argument.")
--> check if alredy exists
local alredy_have = pool [serial]
if (alredy_have) then
return alredy_have
local alredyHave = pool [playerName]
if (alredyHave) then
return alredyHave
end
--> create the table:
local n = { UnitName ("player"), --[1] player nickname
false, --[2] avatar texture path
false, --[3] avatar texture coord
false, --[4] background texture path
false, --[5] background texcoord
false, --[6] background color
1 --[7] revision
local newTable = {
UnitName ("player"), --[1] player nickname
false, --[2] avatar texture path
false, --[3] avatar texture coord
false, --[4] background texture path
false, --[5] background texcoord
false, --[6] background color
1 --[7] revision
}
--> if not my persona, set revision to 0, this make always get update after creation
if (not isSelf) then
n [CONST_INDEX_REVISION] = 0
newTable [CONST_INDEX_REVISION] = 0
end
pool [serial] = n
return n
pool [playerName] = newTable
return newTable
end
--> inc the revision of the player persona after update nick or avatar
function NickTag:IncRevision()
local battlegroup_serial = NickTag:GetSerial()
if (not battlegroup_serial) then
return
local playerName = UnitName ("player")
local nickTable = NickTag:GetNicknameTable (playerName)
if (not nickTable) then
nickTable = NickTag:Create (playerName, true)
end
local nick_table = NickTag:GetNicknameTable (battlegroup_serial)
if (not nick_table) then
nick_table = NickTag:Create (battlegroup_serial, true)
end
nick_table [CONST_INDEX_REVISION] = nick_table [CONST_INDEX_REVISION] + 1
nickTable [CONST_INDEX_REVISION] = nickTable [CONST_INDEX_REVISION] + 1
return true
end
--> convert GUID into serial number
--> convert GUID into serial number (deprecated, it uses player name - realm name)
function NickTag:GetSerial (serial, silent)
if (not serial) then
local guid = UnitGUID ("player")
if (not guid) then
return
end
serial = select ( 3, strsplit ( "-", guid ) )
else
if (not silent) then
assert (type (serial) == "string", "NickTag 'GetSerial' expects a GUID string on #1 parameter"..serial)
assert (string.len (serial) > 13, "NickTag 'GetSerial' expects a GUID string on #1 parameter")
else
if (type (serial) ~= "string") then
return
elseif (string.len (serial) < 14) then
return
end
end
serial = select ( 3, strsplit ( "-", serial ) )
end
if (not serial) then
return
end
return tonumber ("0x" .. serial)
return 0
end
--> choose avatar window
+1 -1
View File
@@ -3,7 +3,7 @@
_ = nil
_detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0")
_detalhes.build_counter = 5355
_detalhes.build_counter = 5373
_detalhes.userversion = "v7.3.5." .. _detalhes.build_counter
_detalhes.realversion = 129 --core version
_detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")"
+1 -1
View File
@@ -209,7 +209,7 @@
if (_bit_band (flag, OBJECT_TYPE_PLAYER) ~= 0) then
if (not _detalhes.ignore_nicktag) then
novo_objeto.displayName = _detalhes:GetNickname (serial, false, true) --> serial, default, silent
novo_objeto.displayName = _detalhes:GetNickname (nome, false, true) --> serial, default, silent
end
if (not novo_objeto.displayName) then
if (_detalhes.remove_realm_from_name) then
+7 -7
View File
@@ -4062,7 +4062,7 @@ function window:CreateFrame1()
_detalhes:Msg (errortext)
end
--> we call again here, because if not accepted the box return the previous value and if successful accepted, update the value for formated string.
local nick = _detalhes:GetNickname (UnitGUID ("player"), UnitName ("player"), true)
local nick = _detalhes:GetNickname (UnitName ("player"), UnitName ("player"), true)
frame1.nicknameEntry.text = nick
_G.DetailsOptionsWindow1AvatarNicknameLabel:SetText (nick)
@@ -4286,8 +4286,8 @@ function window:CreateFrame1()
--> avatar
local avatar = NickTag:GetNicknameAvatar (UnitGUID ("player"), NICKTAG_DEFAULT_AVATAR, true)
local background, cords, color = NickTag:GetNicknameBackground (UnitGUID ("player"), NICKTAG_DEFAULT_BACKGROUND, NICKTAG_DEFAULT_BACKGROUND_CORDS, {1, 1, 1, 1}, true)
local avatar = NickTag:GetNicknameAvatar (UnitName ("player"), NICKTAG_DEFAULT_AVATAR, true)
local background, cords, color = NickTag:GetNicknameBackground (UnitName ("player"), NICKTAG_DEFAULT_BACKGROUND, NICKTAG_DEFAULT_BACKGROUND_CORDS, {1, 1, 1, 1}, true)
frame1.avatarPreview.texture = avatar
frame1.avatarPreview2.texture = background
@@ -11946,7 +11946,7 @@ end --> if not window
_G.DetailsOptionsWindow5FixedTextColor.MyObject:SetColor (unpack (editing_instance.row_info.fixed_text_color))
_G.DetailsOptionsWindow1NicknameEntry.MyObject.text = _detalhes:GetNickname (UnitGUID ("player"), UnitName ("player"), true) or ""
_G.DetailsOptionsWindow1NicknameEntry.MyObject.text = _detalhes:GetNickname (UnitName ("player"), UnitName ("player"), true) or ""
_G.DetailsOptionsWindow1TTDropdown.MyObject:Select (_detalhes.time_type, true)
_G.DetailsOptionsWindow.MyObject.instance = instance
@@ -11986,8 +11986,8 @@ end --> if not window
window:Show()
local avatar = NickTag:GetNicknameAvatar (UnitGUID ("player"), NICKTAG_DEFAULT_AVATAR, true)
local background, cords, color = NickTag:GetNicknameBackground (UnitGUID ("player"), NICKTAG_DEFAULT_BACKGROUND, NICKTAG_DEFAULT_BACKGROUND_CORDS, {1, 1, 1, 1}, true)
local avatar = NickTag:GetNicknameAvatar (UnitName ("player"), NICKTAG_DEFAULT_AVATAR, true)
local background, cords, color = NickTag:GetNicknameBackground (UnitName ("player"), NICKTAG_DEFAULT_BACKGROUND, NICKTAG_DEFAULT_BACKGROUND_CORDS, {1, 1, 1, 1}, true)
_G.DetailsOptionsWindow1AvatarPreviewTexture.MyObject.texture = avatar
_G.DetailsOptionsWindow1AvatarPreviewTexture2.MyObject.texture = background
@@ -12002,7 +12002,7 @@ end --> if not window
_G.DetailsOptionsWindow1.HaveAvatar = false
end
local nick = _detalhes:GetNickname (UnitGUID ("player"), UnitName ("player"), true)
local nick = _detalhes:GetNickname (UnitName ("player"), UnitName ("player"), true)
_G.DetailsOptionsWindow1AvatarNicknameLabel:SetText (nick)
if (window.update_wallpaper_info) then