local DAS = DailyAutoShare function DAS.GetArrayEntry(array, key) if nil == array or nil == key then return end if nil ~= array[key] then return array[key] end for i=1, #array do if array[i] == key then return array[i] end end end function DAS.SetChatListenerStatus(status) DAS.channelTypes[CHAT_CHANNEL_SAY ] = status DAS.channelTypes[CHAT_CHANNEL_YELL] = status DAS.channelTypes[CHAT_CHANNEL_ZONE] = status and not DAS.GetWhisperOnly() DAS.channelTypes[CHAT_CHANNEL_WHISPER] = status end -- DAS_STATUS_COMPLETE = 0, -- DAS_STATUS_OPEN = 1, -- DAS_STATUS_ACTIVE = 2, -- DAS_STATUS_TRACKED = 3 local refreshedRecently = false function refreshQuestLogs(forceOverride) forceOverride = forceOverride or DAS.questCacheNeedsRefresh or DAS.QuestIndexTable == {} or DAS.QuestNameTable == {} if forceOverride then refreshedRecently = false end if refreshedRecently then return end DAS.questCacheNeedsRefresh = false DAS.QuestIndexTable = {} DAS.QuestNameTable = {} for i=1, 25 do if IsValidQuestIndex(i) then journalQuestName, _, _, _, _, _, tracked = GetJournalQuestInfo(i) journalQuestName = zo_strformat(journalQuestName) DAS.QuestIndexTable[i] = journalQuestName DAS.QuestNameTable[journalQuestName] = i end end DAS.RefreshFullBingoString() zo_callLater(function() refreshedRecently = false end, 5000) end DAS.RefreshQuestLogs = refreshQuestLogs function DAS.TryDisableAutoShare(fromName, messageText) if type(messageText) ~= "string" then return false end if (DAS.IsMatch(messageText, GetUnitName(UNITTAG_PLAYER)) or (DAS.IsMatch(messageText, DAS.GetBingoStringFromQuestName():gsub("+", "")) and DAS.IsMatch(messageText "sharing"))) then DAS.SetAutoShare(false) end end local typeTable = "table" local function hookupKeyValuePair(zoneId, key, value, best) if type(key) == typeTable then for _, actualKey in ipairs(key) do hookupKeyValuePair(zoneId, actualKey, value, best) end elseif type(value) == typeTable then local best = value[1] for _, actualValue in ipairs(value) do hookupKeyValuePair(zoneId, key, actualValue, best) end else DAS.bingo[zoneId][value] = key if not best then return end DAS.bingoFallback[zoneId][value] = best end end function DAS.makeBingoTable(zoneId, tbl) DAS.bingo[zoneId] = {} DAS.bingoFallback[zoneId] = {} for key, value in pairs(tbl) do hookupKeyValuePair(zoneId, key, value) end return DAS.bingo[zoneId] end local alreadySharing = false local questQueue = {} local function shareQuestQueue() if #questQueue == 0 then alreadySharing = false return end alreadySharing = true local questIndex = table.remove(questQueue, 1) ShareQuest(questIndex) zo_callLater(shareQuestQueue, DAS.GetQuestShareDelay()) end function DAS.TryShareActiveDaily() if not DAS.GetAutoShare() then return end for _, journalIndex in pairs(DAS.activeZoneQuests) do if not table.contains(questQueue, journalIndex) then table.insert(questQueue, journalIndex) end end if not alreadySharing then shareQuestQueue() end -- local zoneQuests = DAS.GetZoneQuests(zoneId) -- local activeQuestIndices = {} -- local questLabel -- for i=1, #DAS.labels do -- questLabel = DAS.labels[i] -- if (questLabel.dataQuestState == DAS_STATUS_ACTIVE) then -- table.insert(activeQuestIndices, questLabel.dataJournalIndex) -- end -- end -- for _, questIndex in ipairs(activeQuestIndices) do -- if IsValidQuestIndex(questIndex) and not table.contains(questQueue, questIndex) then -- table.insert(questQueue, questIndex) -- end -- end -- if not alreadySharing then -- shareQuestQueue() -- end end local function EscapeString(text) if nil == text then return "" end -- escape brackets text = text:gsub('%(', ''):gsub('%)', '') text = text:gsub('%[', ''):gsub('%]', '') -- escape dots text = text:gsub('%.', '%%.') -- escape % text = text:gsub("%%", "%%%%") -- escape dashes text = text:gsub("-", "") return text or "" end function DAS.IsMatch(param1, param2) string1 = EscapeString(tostring(param1):lower()) string2 = EscapeString(tostring(param2):lower()) if #string1 == 0 or #string2 == 0 then return false end return string.match(string1, string2) or string.match(string2, string2) or string1 == string2 end function DAS.FindInList(array, item) if nil == item then return false end for _,v in pairs(array) do if v == item then return true end if tostring(v):match(tostring(item)) then return true end end return false end function DAS.TryTriggerAutoAcceptInvite() if DAS.GetAutoAcceptInviteInterval() > 0 then DAS.SetAutoAcceptInvite(true) zo_callLater(DAS.SetAutoAcceptInvite, DAS.GetAutoAcceptInviteInterval()*1000) end end function DAS.OpenDailyPresent() local numCompleted = NonContiguousCount(DAS.GetShareableLog()) local numOpen = NonContiguousCount(DAS.GetZoneQuests()) if (numCompleted < numOpen) then return true end for entry, data in pairs(DAS.GetShareableLog()) do if not data["completed"] then return true end end return false end function DAS.HasActiveDaily() return #DAS.GetActiveQuestNames() > 0 end