BorrowerAndLender = {} LibStub("AceTimer-3.0"):Embed(BorrowerAndLender) local LAM = LibStub:GetLibrary("LibAddonMenu-1.0") local originalLevel local inBank local control = ZO_OptionsWindow.controlTable[2][9] local currentWait = nil local settings local blacklist = { ["Lady Adima^F"] = true, ["Count Hosni at-Tura^M"] = true } function EndsWith(String,End) return End=='' or string.sub(String,-string.len(End))==End end local function Hush() SetSetting(control.system, control.settingId, 0) end local function SpeakUpLad() if currentWait then BorrowerAndLender:CancelTimer(currentWait) end currentWait = nil SetSetting(control.system, control.settingId, settings.defaultSoundLevel) end local function WhoAmI(eventCode, options) if EndsWith(ZO_ChatterOption1:GetText(), GetString(SI_INTERACT_OPTION_BANK)) then if currentWait then BorrowerAndLender:CancelTimer(currentWait) end currentWait = BorrowerAndLender:ScheduleTimer(SpeakUpLad, (#ZO_InteractWindowTargetAreaBodyText:GetText()/15) + 5) Hush() end end local function FilterNPC(eventCode, channel, npc, chat) if channel ~= CHAT_CHANNEL_MONSTER_SAY and channel ~= CHAT_CHANNEL_MONSTER_YELL then return end if blacklist[npc] then return end if not settings.chats[npc] then settings.chats[npc] = {} end if not settings.chats[npc][chat] then settings.chats[npc][chat] = 0 return end settings.chats[npc][chat] = settings.chats[npc][chat] + 1 if currentWait then BorrowerAndLender:CancelTimer(currentWait) end currentWait = BorrowerAndLender:ScheduleTimer(SpeakUpLad, (#chat/15) + 2) Hush() end local function BorrowerAndLenderLoaded(eventCode, addOnName) if(addOnName ~= "BorrowerAndLender") then return end local defaults = { chats = {}, defaultSoundLevel = control.currentChoice or control.value or 75, muteBank = true, muteAmbient = true } settings = ZO_SavedVars:New("BorrowerAndLender_Settings", 3, nil, defaults) local panel = LAM:CreateControlPanel("BAL", "Borrower And Lender") LAM:AddHeader(panel, "BAL_General", "Settings") LAM:AddSlider(panel, "defaultSound", "Set the standard voice over volume ", "Set this value to your standard voice over volume", 0, 100, 1, function() return settings.defaultSoundLevel end, function(value) settings.defaultSoundLevel = value end) LAM:AddCheckbox(panel, "muteBank", "Mute bank npcs", "Set this on to mute all bank NPCs from speaking", function() return settings.muteBank end, function(value) if value == false then EVENT_MANAGER:UnregisterForEvent("BALWho", EVENT_CHATTER_BEGIN) EVENT_MANAGER:UnregisterForEvent("BALTalk", EVENT_CHATTER_END) else EVENT_MANAGER:RegisterForEvent("BALWho", EVENT_CHATTER_BEGIN, WhoAmI) EVENT_MANAGER:RegisterForEvent("BALTalk", EVENT_CHATTER_END, SpeakUpLad) end settings.muteBank = value end) LAM:AddCheckbox(panel, "muteAmbient", "Mute ambient NPCs", "Mute passing npcs from repeated chats", function() return settings.muteAmbient end, function(value) if value == false then EVENT_MANAGER:UnregisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL) else EVENT_MANAGER:RegisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL, FilterNPC) end settings.muteAmbient = value end) if settings.muteBank then EVENT_MANAGER:RegisterForEvent("BALWho", EVENT_CHATTER_BEGIN, WhoAmI) EVENT_MANAGER:RegisterForEvent("BALTalk", EVENT_CHATTER_END, SpeakUpLad) end if settings.muteAmbient then EVENT_MANAGER:RegisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL, FilterNPC) end end function BorrowerAndLender:CommandHandler() settings.muteAmbient = not settings.muteAmbient if settings.muteAmbient == false then EVENT_MANAGER:UnregisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL) else EVENT_MANAGER:RegisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL, FilterNPC) end end ZO_CreateStringId("SI_BINDING_NAME_TOGGLE_BAL", "Toggle Ambient NPC Ignoring") EVENT_MANAGER:RegisterForEvent("BorrowerAndLenderLoaded", EVENT_ADD_ON_LOADED, BorrowerAndLenderLoaded)