-- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- local _detalhes = _G._detalhes local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) local _ _detalhes.network = {} ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> local pointers local _UnitName = UnitName local _GetRealmName = GetRealmName local _select = select local _table_wipe = table.wipe local _math_min = math.min local _string_gmatch = string.gmatch local _pairs = pairs ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> constants DETAILS_PREFIX_NETWORK = "DTLS" local CONST_HIGHFIVE_REQUEST = "HI" local CONST_HIGHFIVE_DATA = "HF" local CONST_VERSION_CHECK = "CV" local CONST_ITEMLEVEL_DATA = "IL" local CONST_WIPE_CALL = "WI" local CONST_GUILD_SYNC = "GS" local CONST_CLOUD_REQUEST = "CR" local CONST_CLOUD_FOUND = "CF" local CONST_CLOUD_DATARQ = "CD" local CONST_CLOUD_DATARC = "CE" local CONST_CLOUD_EQUALIZE = "EQ" local CONST_CLOUD_SHAREDATA = "SD" local CONST_PVP_ENEMY = "PP" local CONST_ROGUE_SR = "SR" --soul rip from akaari's soul (LEGION ONLY) DETAILS_PREFIX_COACH = "CO" --coach feature DETAILS_PREFIX_TBC_DATA = "BC" --tbc data _detalhes.network.ids = { ["HIGHFIVE_REQUEST"] = CONST_HIGHFIVE_REQUEST, ["HIGHFIVE_DATA"] = CONST_HIGHFIVE_DATA, ["VERSION_CHECK"] = CONST_VERSION_CHECK, ["ITEMLEVEL_DATA"] = CONST_ITEMLEVEL_DATA, ["CLOUD_REQUEST"] = CONST_CLOUD_REQUEST, ["CLOUD_FOUND"] = CONST_CLOUD_FOUND, ["CLOUD_DATARQ"] = CONST_CLOUD_DATARQ, ["CLOUD_DATARC"] = CONST_CLOUD_DATARC, ["CLOUD_EQUALIZE"] = CONST_CLOUD_EQUALIZE, ["WIPE_CALL"] = CONST_WIPE_CALL, ["GUILD_SYNC"] = CONST_GUILD_SYNC, ["PVP_ENEMY"] = CONST_PVP_ENEMY, ["MISSDATA_ROGUE_SOULRIP"] = CONST_ROGUE_SR, --soul rip from akaari's soul (LEGION ONLY) ["CLOUD_SHAREDATA"] = CONST_CLOUD_SHAREDATA, ["COACH_FEATURE"] = DETAILS_PREFIX_COACH, --ask the raid leader is the coach is enbaled ["TBC_DATA"] = DETAILS_PREFIX_TBC_DATA, --get basic information about the player } local plugins_registred = {} local temp = {} ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> comm functions ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> item level function _detalhes:SendCharacterData() --> only send if in group if (not IsInGroup() and not IsInRaid()) then return end if (DetailsFramework.IsTimewalkWoW()) then if (DetailsFramework.IsTBCWow()) then --detect my spec end return end --> check the player level local playerLevel = UnitLevel ("player") if (not playerLevel) then return elseif (playerLevel < 60) then return end --> delay to sent information again if (_detalhes.LastPlayerInfoSync and _detalhes.LastPlayerInfoSync+10 > GetTime()) then --do not send info if recently sent return end --> get player item level local overall, equipped = GetAverageItemLevel() --> get player talents local talents = {} for i = 1, 7 do for o = 1, 3 do local talentID, name, texture, selected, available = GetTalentInfo (i, o, 1) if (selected) then tinsert (talents, talentID) break end end end --> get the spec ID local spec = DetailsFramework.GetSpecialization() local currentSpec if (spec) then local specID = DetailsFramework.GetSpecializationInfo (spec) if (specID and specID ~= 0) then currentSpec = specID end end --> get the character serial number local serial = UnitGUID ("player") if (IsInRaid()) then _detalhes:SendRaidData (CONST_ITEMLEVEL_DATA, serial, equipped, talents, currentSpec) if (_detalhes.debug) then _detalhes:Msg ("(debug) sent ilevel data to Raid") end elseif (IsInGroup()) then _detalhes:SendPartyData (CONST_ITEMLEVEL_DATA, serial, equipped, talents, currentSpec) if (_detalhes.debug) then _detalhes:Msg ("(debug) sent ilevel data to Party") end end _detalhes.LastPlayerInfoSync = GetTime() end function _detalhes.network.ItemLevel_Received (player, realm, core_version, serial, itemlevel, talents, spec) _detalhes:IlvlFromNetwork (player, realm, core_version, serial, itemlevel, talents, spec) end --high five function _detalhes.network.HighFive_Request() return _detalhes:SendRaidData (CONST_HIGHFIVE_DATA, _detalhes.userversion) end function _detalhes.network.HighFive_DataReceived (player, realm, core_version, user_version) if (_detalhes.sent_highfive and _detalhes.sent_highfive + 30 > GetTime()) then _detalhes.users [#_detalhes.users+1] = {player, realm, (user_version or "") .. " (" .. core_version .. ")"} end end function _detalhes.network.Update_VersionReceived (player, realm, core_version, build_number) if (_detalhes.debug) then _detalhes:Msg ("(debug) received version alert ", build_number) end if (_detalhes.streamer_config.no_alerts) then return end build_number = tonumber (build_number) if (not _detalhes.build_counter or not _detalhes.lastUpdateWarning or not build_number) then return end if (build_number > _detalhes.build_counter) then if (time() > _detalhes.lastUpdateWarning + 72000) then local lower_instance = _detalhes:GetLowerInstanceNumber() if (lower_instance) then lower_instance = _detalhes:GetInstance (lower_instance) if (lower_instance) then lower_instance:InstanceAlert ("Update Available!", {[[Interface\GossipFrame\AvailableQuestIcon]], 16, 16, false}, _detalhes.update_warning_timeout, {_detalhes.OpenUpdateWindow}) end end _detalhes:Msg (Loc ["STRING_VERSION_AVAILABLE"]) _detalhes.lastUpdateWarning = time() end end end function _detalhes.network.Cloud_Request (player, realm, core_version, ...) --deprecated | need to remove if (true) then return end if (_detalhes.debug) then _detalhes:Msg ("(debug)", player, _detalhes.host_of, _detalhes:CaptureIsAllEnabled(), core_version == _detalhes.realversion) end if (player ~= _detalhes.playername) then if (not _detalhes.host_of and _detalhes:CaptureIsAllEnabled() and core_version == _detalhes.realversion) then if (realm ~= _GetRealmName()) then player = player .."-"..realm end _detalhes.host_of = player if (_detalhes.debug) then _detalhes:Msg ("(debug) sent 'okey' answer for a cloud parser request.") end _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (_detalhes.network.ids.CLOUD_FOUND, _UnitName ("player"), _GetRealmName(), _detalhes.realversion), "WHISPER", player) end end end function _detalhes.network.Cloud_Found (player, realm, core_version, ...) --deprecated | need to remove if (true) then return end if (_detalhes.host_by) then return end if (realm ~= _GetRealmName()) then player = player .."-"..realm end _detalhes.host_by = player if (_detalhes.debug) then _detalhes:Msg ("(debug) cloud found for disabled captures.") end _detalhes.cloud_process = _detalhes:ScheduleRepeatingTimer ("RequestCloudData", 10) _detalhes.last_data_requested = _detalhes._tempo end function _detalhes.network.Cloud_DataRequest (player, realm, core_version, ...) --deprecated | need to remove if (true) then return end if (not _detalhes.host_of) then return end local atributo, subatributo = player, realm local data local atributo_name = _detalhes:GetInternalSubAttributeName (atributo, subatributo) if (atributo == 1) then data = _detalhes.atributo_damage:RefreshWindow ({}, _detalhes.tabela_vigente, nil, { key = atributo_name, modo = _detalhes.modos.group }) elseif (atributo == 2) then data = _detalhes.atributo_heal:RefreshWindow ({}, _detalhes.tabela_vigente, nil, { key = atributo_name, modo = _detalhes.modos.group }) elseif (atributo == 3) then data = _detalhes.atributo_energy:RefreshWindow ({}, _detalhes.tabela_vigente, nil, { key = atributo_name, modo = _detalhes.modos.group }) elseif (atributo == 4) then data = _detalhes.atributo_misc:RefreshWindow ({}, _detalhes.tabela_vigente, nil, { key = atributo_name, modo = _detalhes.modos.group }) else return end if (data) then local export = temp local container = _detalhes.tabela_vigente [atributo]._ActorTable for i = 1, _math_min (6, #container) do local actor = container [i] if (actor.grupo) then export [#export+1] = {actor.nome, actor [atributo_name]} end end if (_detalhes.debug) then _detalhes:Msg ("(debug) requesting data from the cloud.") end _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_CLOUD_DATARC, atributo, atributo_name, export), "WHISPER", _detalhes.host_of) _table_wipe (temp) end end function _detalhes.network.Cloud_DataReceived (player, realm, core_version, ...) --deprecated | need to remove if (true) then return end local atributo, atributo_name, data = player, realm, core_version local container = _detalhes.tabela_vigente [atributo] if (_detalhes.debug) then _detalhes:Msg ("(debug) received data from the cloud.") end for i = 1, #data do local _this = data [i] local name = _this [1] local actor = container:PegarCombatente (nil, name) if (not actor) then if (IsInRaid()) then for i = 1, GetNumGroupMembers() do if (name:find ("-")) then --> other realm local nname, server = _UnitName ("raid"..i) if (server and server ~= "") then nname = nname.."-"..server end if (nname == name) then actor = container:PegarCombatente (UnitGUID ("raid"..i), name, 0x514, true) break end else if (_UnitName ("raid"..i) == name) then actor = container:PegarCombatente (UnitGUID ("raid"..i), name, 0x514, true) break end end end elseif (IsInGroup()) then for i = 1, GetNumGroupMembers()-1 do if (name:find ("-")) then --> other realm local nname, server = _UnitName ("party"..i) if (server and server ~= "") then nname = nname.."-"..server end if (nname == name) then actor = container:PegarCombatente (UnitGUID ("party"..i), name, 0x514, true) break end else if (_UnitName ("party"..i) == name or _detalhes.playername == name) then actor = container:PegarCombatente (UnitGUID ("party"..i), name, 0x514, true) break end end end end end if (actor) then actor [atributo_name] = _this [2] container.need_refresh = true else if (_detalhes.debug) then _detalhes:Msg ("(debug) actor not found on cloud data received", name, atributo_name) end end end end function _detalhes.network.Cloud_Equalize (player, realm, core_version, data) --deprecated | need to remove if (true) then return end if (not _detalhes.in_combat) then if (core_version ~= _detalhes.realversion) then return end _detalhes:MakeEqualizeOnActor (player, realm, data) end end function _detalhes.network.Wipe_Call (player, realm, core_version, ...) local chr_name = Ambiguate(player, "none") if (UnitIsGroupLeader (chr_name)) then if (UnitIsInMyGuild (chr_name)) then _detalhes:CallWipe() end end end --received an entire segment data from a user that is sharing with the 'player' function _detalhes.network.Cloud_SharedData (player, realm, core_version, data) if (core_version ~= _detalhes.realversion) then if (core_version > _detalhes.realversion) then --_detalhes:Msg ("your Details! is out dated and cannot perform the action, please update it.") end return false end end function _detalhes.network.TBCData(player, realm, coreVersion, data) if (not IsInRaid() and not IsInGroup()) then return end local LibDeflate = _G.LibStub:GetLibrary("LibDeflate") local dataCompressed = LibDeflate:DecodeForWoWAddonChannel(data) local dataSerialized = LibDeflate:DecompressDeflate(dataCompressed) local dataTable = {Details:Deserialize(dataSerialized)} tremove(dataTable, 1) local dataTable = dataTable[1] local playerRole = dataTable[1] local spec = dataTable[2] local itemLevel = dataTable[3] local talents = dataTable[4] local guid = dataTable[5] --[=[ print("Details! Received TBC Comm Data:") print("From:", player) print("spec:", spec) print("role:", playerRole) print("item level:", itemLevel) print("guid:", guid) --]=] if (guid) then _detalhes.cached_talents[guid] = talents if (spec and spec ~= 0) then _detalhes.cached_specs[guid] = spec end _detalhes.cached_roles[guid] = playerRole _detalhes.item_level_pool[guid] = { name = player, ilvl = itemLevel, time = time() } end end --"CIEA" Coach Is Enabled Ask (client > server) --"CIER" Coach Is Enabled Response (server > client) --"CCS" Coach Combat Start (client > server) function _detalhes.network.Coach(player, realm, core_version, msgType, data) if (not IsInRaid()) then return end if (_detalhes.debug) then print("Details Coach Received Comm", player, realm, core_version, msgType, data) end local sourcePlayer = Ambiguate(player, "none") local playerName = UnitName("player") if (playerName == sourcePlayer) then if (_detalhes.debug) then print("Details Coach Received Comm | RETURN | playerName == sourcePlayer", playerName , sourcePlayer) end return end if (msgType == "CIEA") then --Is Coach Enabled Ask (regular player asked to raid leader) Details.Coach.Server.CoachIsEnabled_Answer(sourcePlayer) elseif (msgType == "CIER") then --Coach Is Enabled Response (regular player received a raid leader response) local isEnabled = data Details.Coach.Client.CoachIsEnabled_Response(isEnabled, sourcePlayer) elseif (msgType == "CCS") then --Coach Combat Start (raid assistant told the raid leader a combat started) Details.Coach.Server.CombatStarted() elseif (msgType == "CCE") then --Coach Combat End (raid assistant told the raid leader a combat ended) Details.Coach.Server.CombatEnded() elseif (msgType == "CS") then --Coach Start (raid leader notifying other members of the group) if (_detalhes.debug) then print("Details Coach received 'CE' a new coach is active, coach name:", sourcePlayer) end Details.Coach.Client.EnableCoach(sourcePlayer) elseif (msgType == "CE") then --Coach End (raid leader notifying other members of the group) Details.Coach.Client.CoachEnd() elseif (msgType == "CDT") then --Coach Data (a player in the raid sent to raid leader combat data) if (Details.Coach.Server.IsEnabled()) then --update the current combat with new information Details.packFunctions.DeployPackedCombatData(data) end elseif (msgType == "CDD") then --Coach Death (a player in the raid sent to raid leader his death log) if (Details.Coach.Server.IsEnabled()) then Details.Coach.Server.AddPlayerDeath(sourcePlayer, data) end end end --guild sync R = someone pressed the sync button --guild sync L = list of fights IDs --guild sync G = requested a list of encounters --guild sync A = received missing encounters, add them function _detalhes.network.GuildSync (player, realm, core_version, type, data) local chr_name = Ambiguate(player, "none") if (UnitName ("player") == chr_name) then return end if (core_version ~= _detalhes.realversion) then if (core_version > _detalhes.realversion) then --_detalhes:Msg ("your Details! is out dated and cannot perform the action, please update it.") end return false end if (type == "R") then --RoS - somebody requested IDs of stored encounters _detalhes.LastGuildSyncDataTime1 = _detalhes.LastGuildSyncDataTime1 or 0 --build our table and send to the player if (_detalhes.LastGuildSyncDataTime1 > GetTime()) then --return false end local IDs = _detalhes.storage:GetIDsToGuildSync() if (IDs and IDs [1]) then local from = UnitName ("player") local realm = GetRealmName() _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_GUILD_SYNC, from, realm, _detalhes.realversion, "L", IDs), "WHISPER", chr_name) end _detalhes.LastGuildSyncDataTime1 = GetTime() + 60 return true elseif (type == "L") then --RoC - the player received the IDs list and send back which IDs he doesn't have local MissingIDs = _detalhes.storage:CheckMissingIDsToGuildSync (data) if (MissingIDs and MissingIDs [1]) then local from = UnitName ("player") local realm = GetRealmName() _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_GUILD_SYNC, from, realm, _detalhes.realversion, "G", MissingIDs), "WHISPER", chr_name) end return true elseif (type == "G") then --RoS - the 'server' send the encounter dps table to the player which requested local EncounterData = _detalhes.storage:BuildEncounterDataToGuildSync (data) if (EncounterData and EncounterData [1]) then local task = C_Timer.NewTicker (4, function (task) task.TickID = task.TickID + 1 local data = task.EncounterData [task.TickID] if (not data) then task:Cancel() return end local from = UnitName ("player") local realm = GetRealmName() --todo: need to check if the target is still online _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_GUILD_SYNC, from, realm, _detalhes.realversion, "A", data), "WHISPER", task.Target) if (_detalhes.debug) then _detalhes:Msg ("(debug) [RoS-EncounterSync] send-task sending data #" .. task.TickID .. ".") end end) task.TickID = 0 task.EncounterData = EncounterData task.Target = chr_name end return true elseif (type == "A") then --RoC - the player received the dps table and should now add it to the db _detalhes.storage:AddGuildSyncData (data, player) return true end end function _detalhes.network.HandleMissData (player, realm, core_version, data) -- [1] - container -- [2] - spellid -- [3] - spell total -- [4] - spell counter core_version = tonumber (core_version) or 0 if (core_version ~= _detalhes.realversion) then if (core_version > _detalhes.realversion) then _detalhes:Msg ("your Details! is out dated and cannot communicate with other players.") end return end if (type (player) ~= "string") then return end local playerName = _detalhes:GetCLName (player) if (playerName) then _detalhes.HandleMissData (playerName, data) end end function _detalhes.network.ReceivedEnemyPlayer (player, realm, core_version, data) -- ["PVP_ENEMY"] = CONST_PVP_ENEMY, end _detalhes.network.functions = { [CONST_HIGHFIVE_REQUEST] = _detalhes.network.HighFive_Request, [CONST_HIGHFIVE_DATA] = _detalhes.network.HighFive_DataReceived, [CONST_VERSION_CHECK] = _detalhes.network.Update_VersionReceived, [CONST_ITEMLEVEL_DATA] = _detalhes.network.ItemLevel_Received, [CONST_CLOUD_REQUEST] = _detalhes.network.Cloud_Request, [CONST_CLOUD_FOUND] = _detalhes.network.Cloud_Found, [CONST_CLOUD_DATARQ] = _detalhes.network.Cloud_DataRequest, [CONST_CLOUD_DATARC] = _detalhes.network.Cloud_DataReceived, [CONST_CLOUD_EQUALIZE] = _detalhes.network.Cloud_Equalize, [CONST_WIPE_CALL] = _detalhes.network.Wipe_Call, [CONST_GUILD_SYNC] = _detalhes.network.GuildSync, [CONST_ROGUE_SR] = _detalhes.network.HandleMissData, --soul rip from akaari's soul (LEGION ONLY) [CONST_PVP_ENEMY] = _detalhes.network.ReceivedEnemyPlayer, [DETAILS_PREFIX_COACH] = _detalhes.network.Coach, --coach feature [DETAILS_PREFIX_TBC_DATA] = _detalhes.network.TBCData } ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> register comm function _detalhes:CommReceived (commPrefix, data, channel, source) local prefix, player, realm, dversion, arg6, arg7, arg8, arg9 = _select (2, _detalhes:Deserialize (data)) player = source if (_detalhes.debug) then _detalhes:Msg ("(debug) network received:", prefix, "length:", string.len (data)) end --event _detalhes:SendEvent ("COMM_EVENT_RECEIVED", nil, string.len (data), prefix, player, realm, dversion, arg6, arg7, arg8, arg9) --print ("comm received", prefix, _detalhes.network.functions [prefix]) local func = _detalhes.network.functions [prefix] if (func) then --todo: this call should be safe func (player, realm, dversion, arg6, arg7, arg8, arg9) else func = plugins_registred [prefix] --print ("plugin comm?", func, player, realm, dversion, arg6, arg7, arg8, arg9) if (func) then --todo: this call should be safe func (player, realm, dversion, arg6, arg7, arg8, arg9) else if (_detalhes.debug) then _detalhes:Msg ("comm prefix not found:", prefix) end end end end _detalhes:RegisterComm ("DTLS", "CommReceived") --> hook the send comm message so we can trigger events when sending data --> this adds overhead, but easily catches all outgoing comm messages hooksecurefunc (Details, "SendCommMessage", function (context, addonPrefix, serializedData, channel) --unpack data local prefix, player, realm, dversion, arg6, arg7, arg8, arg9 = _select (2, _detalhes:Deserialize (serializedData)) --send the event _detalhes:SendEvent ("COMM_EVENT_SENT", nil, string.len (serializedData), prefix, player, realm, dversion, arg6, arg7, arg8, arg9) end) function _detalhes:RegisterPluginComm (prefix, func) assert (type (prefix) == "string" and string.len (prefix) >= 2 and string.len (prefix) <= 4, "RegisterPluginComm expects a string with 2-4 characters on #1 argument.") assert (type (func) == "function" or (type (func) == "string" and type (self [func]) == "function"), "RegisterPluginComm expects a function or function name on #2 argument.") assert (plugins_registred [prefix] == nil, "Prefix " .. prefix .. " already in use 1.") assert (_detalhes.network.functions [prefix] == nil, "Prefix " .. prefix .. " already in use 2.") if (type (func) == "string") then plugins_registred [prefix] = self [func] else plugins_registred [prefix] = func end return true end function _detalhes:UnregisterPluginComm (prefix) plugins_registred [prefix] = nil return true end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> send functions function _detalhes:GetChannelId (channel) for id = 1, GetNumDisplayChannels() do local name, _, _, room_id = GetChannelDisplayInfo (id) if (name == channel) then return room_id end end end --[ function _detalhes.parser_functions:CHAT_MSG_CHANNEL (...) local message, _, _, _, _, _, _, _, channelName = ... if (channelName == "Details") then local prefix, data = strsplit ("_", message, 2) local func = plugins_registred [prefix] if (func) then func (_select (2, _detalhes:Deserialize (data))) else if (_detalhes.debug) then _detalhes:Msg ("comm prefix not found:", prefix) end end end end --]] function _detalhes:SendPluginCommMessage(prefix, channel, ...) if (channel == "RAID") then if (IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and IsInInstance()) then _detalhes:SendCommMessage (prefix, _detalhes:Serialize (self.__version, ...), "INSTANCE_CHAT") else _detalhes:SendCommMessage (prefix, _detalhes:Serialize (self.__version, ...), "RAID") end elseif (channel == "PARTY") then if (IsInGroup(LE_PARTY_CATEGORY_INSTANCE) and IsInInstance()) then _detalhes:SendCommMessage(prefix, _detalhes:Serialize (self.__version, ...), "INSTANCE_CHAT") else _detalhes:SendCommMessage(prefix, _detalhes:Serialize (self.__version, ...), "PARTY") end else _detalhes:SendCommMessage(prefix, _detalhes:Serialize (self.__version, ...), channel) end return true end --> send as function _detalhes:SendRaidDataAs(type, player, realm, ...) if (not realm) then --> check if realm is already inside player name for _name, _realm in _string_gmatch(player, "(%w+)-(%w+)") do if (_realm) then player = _name realm = _realm end end end if (not realm) then --> doesn't have realm at all, so we assume the actor is in same realm as player realm = _GetRealmName() end _detalhes:SendCommMessage(DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, player, realm, _detalhes.realversion, ...), "RAID") end function _detalhes:SendHomeRaidData(type, ...) if (IsInRaid(LE_PARTY_CATEGORY_HOME) and IsInInstance()) then _detalhes:SendCommMessage(DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName("player"), _GetRealmName(), _detalhes.realversion, ...), "RAID") end end function _detalhes:SendRaidData (type, ...) local isInInstanceGroup = IsInRaid (LE_PARTY_CATEGORY_INSTANCE) if (isInInstanceGroup) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName("player"), _GetRealmName(), _detalhes.realversion, ...), "INSTANCE_CHAT") if (_detalhes.debug) then _detalhes:Msg ("(debug) sent comm to INSTANCE raid group") end else _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName("player"), _GetRealmName(), _detalhes.realversion, ...), "RAID") if (_detalhes.debug) then _detalhes:Msg ("(debug) sent comm to LOCAL raid group") end end end function _detalhes:SendPartyData (type, ...) local isInInstanceGroup = IsInGroup (LE_PARTY_CATEGORY_INSTANCE) if (isInInstanceGroup) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName ("player"), _GetRealmName(), _detalhes.realversion, ...), "INSTANCE_CHAT") if (_detalhes.debug) then _detalhes:Msg ("(debug) sent comm to INSTANCE party group") end else _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName ("player"), _GetRealmName(), _detalhes.realversion, ...), "PARTY") if (_detalhes.debug) then _detalhes:Msg ("(debug) sent comm to LOCAL party group") end end end function _detalhes:SendRaidOrPartyData (type, ...) if (IsInRaid()) then _detalhes:SendRaidData (type, ...) elseif (IsInGroup()) then _detalhes:SendPartyData (type, ...) end end function _detalhes:SendGuildData (type, ...) if not IsInGuild() then return end --> fix from Tim@WoWInterface _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (type, _UnitName ("player"), _GetRealmName(), _detalhes.realversion, ...), "GUILD") end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> cloud function _detalhes:SendCloudRequest() _detalhes:SendRaidData (_detalhes.network.ids.CLOUD_REQUEST) end function _detalhes:ScheduleSendCloudRequest() _detalhes:ScheduleTimer ("SendCloudRequest", 1) end function _detalhes:RequestCloudData() _detalhes.last_data_requested = _detalhes._tempo if (not _detalhes.host_by) then return end for index = 1, #_detalhes.tabela_instancias do local instancia = _detalhes.tabela_instancias [index] if (instancia.ativa) then local atributo = instancia.atributo if (atributo == 1 and not _detalhes:CaptureGet ("damage")) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_CLOUD_DATARQ, atributo, instancia.sub_atributo), "WHISPER", _detalhes.host_by) break elseif (atributo == 2 and (not _detalhes:CaptureGet ("heal") or _detalhes:CaptureGet ("aura"))) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_CLOUD_DATARQ, atributo, instancia.sub_atributo), "WHISPER", _detalhes.host_by) break elseif (atributo == 3 and not _detalhes:CaptureGet ("energy")) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_CLOUD_DATARQ, atributo, instancia.sub_atributo), "WHISPER", _detalhes.host_by) break elseif (atributo == 4 and not _detalhes:CaptureGet ("miscdata")) then _detalhes:SendCommMessage (DETAILS_PREFIX_NETWORK, _detalhes:Serialize (CONST_CLOUD_DATARQ, atributo, instancia.sub_atributo), "WHISPER", _detalhes.host_by) break end end end end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> update function _detalhes:CheckVersion (send_to_guild) if (IsInRaid()) then _detalhes:SendRaidData (_detalhes.network.ids.VERSION_CHECK, _detalhes.build_counter) elseif (IsInGroup()) then _detalhes:SendPartyData (_detalhes.network.ids.VERSION_CHECK, _detalhes.build_counter) end if (send_to_guild) then _detalhes:SendGuildData (_detalhes.network.ids.VERSION_CHECK, _detalhes.build_counter) end end