|
|
|
|
--imports
|
|
|
|
|
local WIM = WIM;
|
|
|
|
|
local _G = _G;
|
|
|
|
|
local PlaySoundFile = PlaySoundFile;
|
|
|
|
|
local SML = _G.LibStub:GetLibrary("LibSharedMedia-3.0");
|
|
|
|
|
local SOUND = SML.MediaType.SOUND;
|
|
|
|
|
local string = string;
|
|
|
|
|
local math = math;
|
|
|
|
|
local GetCVar = GetCVar;
|
|
|
|
|
local SetCVar = SetCVar;
|
|
|
|
|
|
|
|
|
|
--set namespace
|
|
|
|
|
setfenv(1, WIM);
|
|
|
|
|
|
|
|
|
|
db_defaults.sounds = {
|
|
|
|
|
whispers = {
|
|
|
|
|
msgin = true,
|
|
|
|
|
msgin_sml = "IM",
|
|
|
|
|
msgout = false,
|
|
|
|
|
msgout_sml = "IM",
|
|
|
|
|
friend = false,
|
|
|
|
|
friend_sml = "IM",
|
|
|
|
|
guild = false,
|
|
|
|
|
guild_sml = "IM",
|
|
|
|
|
bnet = false,
|
|
|
|
|
bnet_sml = "IM"
|
|
|
|
|
},
|
|
|
|
|
chat = {
|
|
|
|
|
msgin = true,
|
|
|
|
|
msgin_sml = "Chat Blip",
|
|
|
|
|
msgout = false,
|
|
|
|
|
msgout_sml = "Chat Blip",
|
|
|
|
|
|
|
|
|
|
guild_sml = "Chat Blip",
|
|
|
|
|
officer_sml = "Chat Blip",
|
|
|
|
|
party_sml = "Chat Blip",
|
|
|
|
|
raid_sml = "Chat Blip",
|
|
|
|
|
raidleader_sml = "Chat Blip",
|
|
|
|
|
battleground_sml = "Chat Blip",
|
|
|
|
|
battlegroundleader_sml = "Chat Blip",
|
|
|
|
|
say_sml = "Chat Blip",
|
|
|
|
|
world_sml = "Chat Blip",
|
|
|
|
|
custom_sml = "Chat Blip",
|
|
|
|
|
},
|
|
|
|
|
force_game_sound = false
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
local isGameSound = false; -- initial value. gets updated on module enabled/disabled & CVAR_UPDATE
|
|
|
|
|
local soundDelay = 1; -- how long to keep the sound enabled. (in seconds)
|
|
|
|
|
local soundFrame = _G.CreateFrame("Frame");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function enableGameSound()
|
|
|
|
|
if(db and db.force_game_sound) then
|
|
|
|
|
soundFrame.elapsed = 0;
|
|
|
|
|
soundFrame:Show();
|
|
|
|
|
SetCVar("Sound_EnableAllSound", "1");
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function disableGameSound()
|
|
|
|
|
soundFrame.elapsed = 0;
|
|
|
|
|
SetCVar("Sound_EnableAllSound", isGameSound and "1" or "0");
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- create frame to listen for settings changes and for timer events.
|
|
|
|
|
soundFrame:RegisterEvent("CVAR_UPDATE");
|
|
|
|
|
soundFrame:SetScript("OnEvent", function(self, event, var, val)
|
|
|
|
|
if(var == "ENABLE_SOUND") then
|
|
|
|
|
isGameSound = GetCVar("Sound_EnableAllSound") == "1" and true or false;
|
|
|
|
|
end
|
|
|
|
|
end);
|
|
|
|
|
soundFrame:SetScript("OnUpdate", function(self, elapsed)
|
|
|
|
|
self.elapsed = self.elapsed + elapsed;
|
|
|
|
|
if(self.elapsed > soundDelay) then
|
|
|
|
|
self:Hide();
|
|
|
|
|
disableGameSound();
|
|
|
|
|
end
|
|
|
|
|
end);
|
|
|
|
|
soundFrame:Hide();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function playSound(smlKey)
|
|
|
|
|
local path = SML:Fetch(SOUND, smlKey);
|
|
|
|
|
if path then
|
|
|
|
|
enableGameSound();
|
|
|
|
|
PlaySoundFile(path, "Master");
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--Whisper Sounds
|
|
|
|
|
local Sounds = CreateModule("Sounds", true);
|
|
|
|
|
|
|
|
|
|
function Sounds:VARIABLES_LOADED()
|
|
|
|
|
isGameSound = GetCVar("Sound_EnableAllSound") == "1" and true or false;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function safeName(user)
|
|
|
|
|
return string.lower(user or "")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Sound events
|
|
|
|
|
function Sounds:PostEvent_Whisper(...)
|
|
|
|
|
if(db and db.sounds.whispers.msgin) then
|
|
|
|
|
local msg, user = ...;
|
|
|
|
|
if(db.sounds.whispers.bnet and windows.active.whisper[safeName(user)].isBN) then
|
|
|
|
|
playSound(db.sounds.whispers.bnet_sml);
|
|
|
|
|
elseif(db.sounds.whispers.friend and lists.friends[user]) then
|
|
|
|
|
playSound(db.sounds.whispers.friend_sml);
|
|
|
|
|
elseif(db.sounds.whispers.guild and lists.guild[user]) then
|
|
|
|
|
playSound(db.sounds.whispers.guild_sml);
|
|
|
|
|
else
|
|
|
|
|
playSound(db.sounds.whispers.msgin_sml);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Sounds:PostEvent_WhisperInform(...)
|
|
|
|
|
if(db and db.sounds.whispers.msgout) then
|
|
|
|
|
playSound(db.sounds.whispers.msgout_sml);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--Chat Sounds
|
|
|
|
|
local ChatSounds = CreateModule("ChatSounds", true);
|
|
|
|
|
|
|
|
|
|
function ChatSounds:VARIABLES_LOADED()
|
|
|
|
|
isGameSound = GetCVar("Sound_EnableAllSound") == "1" and true or false;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Sound events
|
|
|
|
|
function ChatSounds:PostEvent_ChatMessage(event, ...)
|
|
|
|
|
local arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 = ...;
|
|
|
|
|
local isWorld = arg7 and arg7 > 0;
|
|
|
|
|
if(arg2 == _G.UnitName("player")) then
|
|
|
|
|
--message sent
|
|
|
|
|
if(db and db.sounds.chat.msgout) then
|
|
|
|
|
playSound(db.sounds.chat.msgout_sml);
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
--message received.
|
|
|
|
|
if(db and db.sounds.chat.msgin) then
|
|
|
|
|
local d = db.sounds.chat;
|
|
|
|
|
if(d.guild and event == "CHAT_MSG_GUILD") then
|
|
|
|
|
playSound(db.sounds.chat.guild_sml);
|
|
|
|
|
elseif(d.officer and event == "CHAT_MSG_OFFICER") then
|
|
|
|
|
playSound(db.sounds.chat.officer_sml);
|
|
|
|
|
elseif(d.party and (event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER")) then
|
|
|
|
|
playSound(db.sounds.chat.party_sml);
|
|
|
|
|
elseif(d.raidleader and event == "CHAT_MSG_RAID_LEADER") then
|
|
|
|
|
playSound(db.sounds.chat.raidleader_sml);
|
|
|
|
|
elseif(d.raid and (event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER")) then
|
|
|
|
|
playSound(db.sounds.chat.raid_sml);
|
|
|
|
|
elseif(d.raid and event == "CHAT_MSG_INSTANCE_CHAT_LEADER") then
|
|
|
|
|
playSound(db.sounds.chat.battlegroundleader_sml);
|
|
|
|
|
elseif(d.raid and (event == "CHAT_MSG_INSTANCE_CHAT" or event == "CHAT_MSG_INSTANCE_CHAT_LEADER")) then
|
|
|
|
|
playSound(db.sounds.chat.battleground_sml);
|
|
|
|
|
elseif(d.say and event == "CHAT_MSG_SAY") then
|
|
|
|
|
playSound(db.sounds.chat.say_sml);
|
|
|
|
|
elseif(event == "CHAT_MSG_CHANNEL" and isWorld) then
|
|
|
|
|
local channelName = string.split(" - ", arg9);
|
|
|
|
|
local noSound = db.chat["world"] and db.chat["world"].channelSettings and
|
|
|
|
|
db.chat["world"].channelSettings[channelName] and
|
|
|
|
|
db.chat["world"].channelSettings[channelName].noSound;
|
|
|
|
|
if(not noSound) then
|
|
|
|
|
if(d.world) then
|
|
|
|
|
playSound(db.sounds.chat.world_sml);
|
|
|
|
|
else
|
|
|
|
|
playSound(db.sounds.chat.msgin_sml);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif(event == "CHAT_MSG_CHANNEL") then
|
|
|
|
|
local channelName = string.split(" - ", arg9);
|
|
|
|
|
local noSound = db.chat["custom"] and db.chat["custom"].channelSettings and
|
|
|
|
|
db.chat["custom"].channelSettings[channelName] and
|
|
|
|
|
db.chat["custom"].channelSettings[channelName].noSound;
|
|
|
|
|
if(not noSound) then
|
|
|
|
|
if(d.custom) then
|
|
|
|
|
playSound(db.sounds.chat.custom_sml);
|
|
|
|
|
else
|
|
|
|
|
playSound(db.sounds.chat.msgin_sml);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
-- default sound
|
|
|
|
|
playSound(db.sounds.chat.msgin_sml);
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- import WIM's stock sounds into LibSharedMedia-3.0
|
|
|
|
|
SML:Register(SOUND, "IM", "Interface\\AddOns\\"..addonTocName.."\\Sounds\\wisp.ogg");
|
|
|
|
|
SML:Register(SOUND, "iChat In", "Interface\\AddOns\\"..addonTocName.."\\Sounds\\ichatIn.ogg");
|
|
|
|
|
SML:Register(SOUND, "iChat Out", "Interface\\AddOns\\"..addonTocName.."\\Sounds\\ichatOut.ogg");
|
|
|
|
|
SML:Register(SOUND, "Chat Blip", "Interface\\AddOns\\"..addonTocName.."\\Sounds\\chat.ogg");
|
|
|
|
|
|
|
|
|
|
--[[ Test Scrolling Dropdown menu.
|
|
|
|
|
for i=1,20 do
|
|
|
|
|
SML:Register(SOUND, "Test "..i, "Interface\\AddOns\\"..addonTocName.."\\Sounds\\ichatOut.mp3");
|
|
|
|
|
end
|
|
|
|
|
]]
|
|
|
|
|
|
|
|
|
|
-- This is a core module and must always be loaded...
|
|
|
|
|
Sounds.canDisable = false;
|
|
|
|
|
Sounds:Enable();
|
|
|
|
|
ChatSounds.canDisable = false;
|
|
|
|
|
ChatSounds:Enable();
|