diff --git a/Libs/NickTag-1.0/NickTag-1.0.lua b/Libs/NickTag-1.0/NickTag-1.0.lua index 9ff9ff79..beae21f8 100644 --- a/Libs/NickTag-1.0/NickTag-1.0.lua +++ b/Libs/NickTag-1.0/NickTag-1.0.lua @@ -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 diff --git a/boot.lua b/boot.lua index 2cd65a24..74cde06d 100644 --- a/boot.lua +++ b/boot.lua @@ -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 .. ")" diff --git a/classes/container_combatentes.lua b/classes/container_combatentes.lua index 45b4bd54..2a3db8a3 100644 --- a/classes/container_combatentes.lua +++ b/classes/container_combatentes.lua @@ -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 diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index 864e35db..05584805 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -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