You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
9.0 KiB

local PA = _G.ProjectAzilroka
local QS = PA:NewModule('QuestSounds', 'AceEvent-3.0', 'AceTimer-3.0')
PA.QS = QS
QS.Title = PA.ACL['|cFF16C3F2Quest|r|cFFFFFFFFSounds|r']
QS.Description = PA.ACL['Audio for Quest Progress & Completions.']
QS.Authors = 'Azilroka'
QS.Credits = 'Yoco'
QS.isEnabled = false
local PlaySoundFile = PlaySoundFile
local PlaySound = PlaySound
function QS:CountCompletedObjectives()
local Objectives = C_QuestLog.GetQuestObjectives(QS.QuestID)
local Completed, Total = 0, #Objectives
for _, objective in ipairs(Objectives) do
if objective.finished then
Completed = Completed + 1
end
end
return Completed, Total
end
function QS:SetQuest(index)
QS.QuestID = index
QS:ScheduleTimer('CheckQuest', .5)
end
function QS:ResetSoundPlayback()
QS.IsPlaying = false
end
function QS:PlaySoundFile(file)
QS.QuestID = nil
if QS.IsPlaying or not file or file == '' then
return
end
QS.IsPlaying = true
if QS.db.UseSoundID then
PlaySound(tonumber(file))
else
PlaySoundFile(PA.LSM:Fetch('sound', file))
end
QS:ScheduleTimer('ResetSoundPlayback', QS.db.Throttle)
end
function QS:CheckQuest()
if not QS.QuestID then return end
if PA.Retail and C_QuestLog.ReadyForTurnIn(QS.QuestID) then
QS:ResetSoundPlayback()
if QS.db.UseSoundID then
QS:PlaySoundFile(QS.db.QuestCompleteID)
else
QS:PlaySoundFile(QS.db.QuestComplete)
end
else
QS.ObjectivesCompleted, QS.ObjectivesTotal = QS:CountCompletedObjectives(QS.QuestID)
if QS.ObjectivesCompleted > QS.ObjectivesTotal then
if QS.db.UseSoundID then
QS:PlaySoundFile(QS.db.ObjectiveCompleteID)
else
QS:PlaySoundFile(QS.db.ObjectiveComplete)
end
else
if QS.db.UseSoundID then
QS:PlaySoundFile(QS.db.ObjectiveProgressID)
else
QS:PlaySoundFile(QS.db.ObjectiveProgress)
end
end
end
end
function QS:UNIT_QUEST_LOG_CHANGED(_, unit)
if unit ~= 'player' then return end
QS:ScheduleTimer('CheckQuest', 1)
end
function QS:QUEST_WATCH_UPDATE(_, questID)
QS:SetQuest(questID)
end
function QS:RegisterSounds()
if PA.Classic then
PA.LSM:Register('sound', 'You Will Die!', 'Sound/Creature/CThun/CThunYouWillDIe.ogg')
PA.LSM:Register('sound', 'Gong Quest Complete', 'Sound/Doodad/G_GongTroll01.ogg')
PA.LSM:Register('sound', 'Creature Quest Complete', 'Sound/Creature/Chicken/ChickenDeathA.ogg')
PA.LSM:Register('sound', 'Creature Objective Complete', 'Sound/Creature/Frog/FrogFootstep2.ogg')
PA.LSM:Register('sound', 'Creature Objective Progress', 'Sound/Creature/Crab/CrabWoundC.ogg')
PA.LSM:Register('sound', 'Peon Quest Complete', 'Sound/Creature/Peon/PeonBuildingComplete1.ogg')
PA.LSM:Register('sound', 'Peon Objective Complete', 'Sound/Creature/Peon/PeonReady1.ogg')
PA.LSM:Register('sound', 'Peon Objective Progress', 'Sound/Creature/Peasant/PeasantWhat3.ogg')
PA.LSM:Register('sound', 'QuestGuru Quest Complete', 'Sound/Interface/levelup2.ogg')
PA.LSM:Register('sound', 'QuestGuru Objective Complete', 'Sound/Interface/AuctionWindowClose.ogg')
PA.LSM:Register('sound', 'QuestGuru Objective Progress', 'Sound/Interface/AuctionWindowOpen.ogg')
else
PA.LSM:Register('sound', 'Rubber Ducky', 566121)
PA.LSM:Register('sound', 'Cartoon FX', 566543)
PA.LSM:Register('sound', 'Explosion', 566982)
PA.LSM:Register('sound', 'Shing!', 566240)
PA.LSM:Register('sound', 'Wham!', 566946)
PA.LSM:Register('sound', 'Simon Chime', 566076)
PA.LSM:Register('sound', 'War Drums', 567275)
PA.LSM:Register('sound', 'Cheer', 567283)
PA.LSM:Register('sound', 'Humm', 569518)
PA.LSM:Register('sound', 'Short Circuit', 568975)
PA.LSM:Register('sound', 'Fel Portal', 569215)
PA.LSM:Register('sound', 'Fel Nova', 568582)
PA.LSM:Register('sound', 'You Will Die!', 546633)
PA.LSM:Register('sound', 'Gong Quest Complete', 565564)
PA.LSM:Register('sound', 'Gong Objective Complete', 565515)
PA.LSM:Register('sound', 'Gong Objective Progress', 569179)
PA.LSM:Register('sound', 'Wacky Quest Complete', 566877)
PA.LSM:Register('sound', 'Wacky Objectives Complete', 567381)
PA.LSM:Register('sound', 'Wacky Objective Progress', 566877)
PA.LSM:Register('sound', 'Creature Quest Complete', 546068)
PA.LSM:Register('sound', 'Creature Objective Complete', 549326)
PA.LSM:Register('sound', 'Creature Objective Progress', 546421)
PA.LSM:Register('sound', 'Peon Quest Complete', 558132)
PA.LSM:Register('sound', 'Peon Objective Complete', 558137)
PA.LSM:Register('sound', 'Peon Objective Progress', 558127)
PA.LSM:Register('sound', 'QuestGuru Quest Complete', 567478)
PA.LSM:Register('sound', 'QuestGuru Objective Complete', 567499)
PA.LSM:Register('sound', 'QuestGuru Objective Progress', 567482)
end
end
function QS:GetOptions()
local QuestSounds = PA.ACH:Group(QS.Title, QS.Description, nil, nil, function(info) return QS.db[info[#info]] end, function(info, value) QS.db[info[#info]] = value end)
PA.Options.args.QuestSounds = QuestSounds
QuestSounds.args.Description = PA.ACH:Description(QS.Description, 0)
QuestSounds.args.Enable = PA.ACH:Toggle(PA.ACL['Enable'], nil, 1, nil, nil, nil, nil, function(info, value) QS.db[info[#info]] = value if (not QS.isEnabled) then QS:Initialize() else _G.StaticPopup_Show('PROJECTAZILROKA_RL') end end)
QuestSounds.args.General = PA.ACH:Group(PA.ACL['General'], nil, 2)
QuestSounds.args.General.inline = true
QuestSounds.args.General.args.Throttle = PA.ACH:Range(PA.ACL['Throttle'], nil, nil, { min = 1, max = 30, step = 1})
QuestSounds.args.General.args.LSM = PA.ACH:Group(PA.ACL['Sound by LSM'], nil, 1, nil, nil, nil, function() return QS.db.UseSoundID end)
QuestSounds.args.General.args.LSM.args.QuestComplete = PA.ACH:SharedMediaSound('Quest Complete', nil, 1)
QuestSounds.args.General.args.LSM.args.ObjectiveComplete = PA.ACH:SharedMediaSound('Objective Complete', nil, 2)
QuestSounds.args.General.args.LSM.args.ObjectiveProgress = PA.ACH:SharedMediaSound('Objective Progress', nil, 3)
QuestSounds.args.General.args.ID = PA.ACH:Group(PA.ACL['Sound by SoundID'], nil, 2, nil, function(info) return tostring(QS.db[info[#info]]) end, function(info, value) QS.db[info[#info]] = tonumber(value) end, function() return (not QS.db.UseSoundID) end)
QuestSounds.args.General.args.ID.args.UseSoundID = PA.ACH:Toggle(PA.ACL['Use Sound ID'], nil, 0, nil, nil, nil, function(info) return QS.db[info[#info]] end, function(info, value) QS.db[info[#info]] = value end, false)
QuestSounds.args.General.args.ID.args.QuestCompleteID = PA.ACH:Input('Quest Complete Sound ID', nil, 1)
QuestSounds.args.General.args.ID.args.ObjectiveCompleteID = PA.ACH:Input('Objective Complete Sound ID', nil, 2)
QuestSounds.args.General.args.ID.args.ObjectiveProgressID = PA.ACH:Input('Objective Progress Sound ID', nil, 3)
QuestSounds.args.AuthorHeader = PA.ACH:Header(PA.ACL['Authors:'], -4)
QuestSounds.args.Authors = PA.ACH:Description(QS.Authors, -3, 'large')
QuestSounds.args.CreditsHeader = PA.ACH:Header(PA.ACL['Image Credits:'], -2)
QuestSounds.args.Credits = PA.ACH:Description(QS.Credits, -1, 'large')
end
function QS:BuildProfile()
QS:RegisterSounds()
PA.Defaults.profile.QuestSounds = {
Enable = true,
Throttle = 3,
QuestComplete = 'Peon Quest Complete',
ObjectiveComplete = 'Peon Objective Complete',
ObjectiveProgress = 'Peon Objective Progress',
UseSoundID = false,
QuestCompleteID = PA.MyFaction == 'Alliance' and 61525 or 95834,
ObjectiveCompleteID = 6573,
ObjectiveProgressID = 9873,
}
end
function QS:Initialize()
QS.db = PA.db.QuestSounds
if QS.db.Enable ~= true then
return
end
local KT = _G.LibStub('AceAddon-3.0'):GetAddon('!KalielsTracker', true)
if KT and KT.db.profile.soundQuest then
_G.StaticPopupDialogs.PROJECTAZILROKA.text = 'Kaliels Tracker Quest Sound and QuestSounds will make double sounds. Which one do you want to disable?|n|n(This does not disable Kaliels Tracker)'
_G.StaticPopupDialogs.PROJECTAZILROKA.button1 = 'KT Quest Sound'
_G.StaticPopupDialogs.PROJECTAZILROKA.button2 = 'Quest Sounds'
_G.StaticPopupDialogs.PROJECTAZILROKA.OnAccept = function()
KT.db.profile.soundQuest = false
_G.ReloadUI()
end
_G.StaticPopupDialogs.PROJECTAZILROKA.OnCancel = function() QS.db.Enable = false end
_G.StaticPopup_Show('PROJECTAZILROKA')
return
end
if PA:IsAddOnEnabled('QuestGuruSounds', PA.MyName) then
_G.StaticPopupDialogs.PROJECTAZILROKA.text = 'QuestGuru Sounds and QuestSounds will make double sounds. Which one do you want to disable?'
_G.StaticPopupDialogs.PROJECTAZILROKA.button1 = 'KT Quest Sound'
_G.StaticPopupDialogs.PROJECTAZILROKA.button2 = 'Quest Sounds'
_G.StaticPopupDialogs.PROJECTAZILROKA.OnAccept = function() _G.DisableAddOn('QuestGuruSounds') _G.ReloadUI() end
_G.StaticPopupDialogs.PROJECTAZILROKA.OnCancel = function() QS.db.Enable = false end
_G.StaticPopup_Show('PROJECTAZILROKA')
return
end
QS.isEnabled = true
QS.ObjectivesComplete = 0
QS.ObjectivesTotal = 0
QS.IsPlaying = false
QS:RegisterEvent('UNIT_QUEST_LOG_CHANGED')
QS:RegisterEvent('QUEST_WATCH_UPDATE')
end