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.
138 lines
4.0 KiB
138 lines
4.0 KiB
local _, L = ...
|
|
local Events, API = L.frame, ImmersionAPI
|
|
----------------------------------
|
|
-- Events
|
|
----------------------------------
|
|
function Events:GOSSIP_SHOW(customGossipHandler)
|
|
self:HandleGossipOpenEvent(customGossipHandler)
|
|
end
|
|
|
|
function Events:GOSSIP_CLOSED(...)
|
|
API:CloseGossip(true, ...)
|
|
self:PlayOutro()
|
|
L.ClickedTitleCache = nil
|
|
end
|
|
|
|
function Events:QUEST_GREETING(...)
|
|
self:PlayIntro('QUEST_GREETING')
|
|
self:UpdateTalkingHead(API:GetUnitName('questnpc') or API:GetUnitName('npc'), API:GetGreetingText(), 'AvailableQuest')
|
|
end
|
|
|
|
function Events:QUEST_PROGRESS(...) -- special case, doesn't use QuestInfo
|
|
self:PlayIntro('QUEST_PROGRESS')
|
|
self:AddHint('CROSS', CONTINUE)
|
|
self:ToggleHintState('CROSS', API:IsQuestCompletable())
|
|
self:UpdateTalkingHead(API:GetTitleText(), API:GetProgressText(), API:IsQuestCompletable() and 'ActiveQuest' or 'IncompleteQuest')
|
|
local elements = self.TalkBox.Elements
|
|
local hasItems = elements:ShowProgress('Stone')
|
|
elements:UpdateBoundaries()
|
|
if hasItems then
|
|
local width, height = elements.Progress:GetSize()
|
|
-- Extra: 32 padding + 8 offset from talkbox + 8 px bottom offset
|
|
self.TalkBox:SetExtraOffset((height + 48) * L('elementscale'))
|
|
return
|
|
end
|
|
self:ResetElements()
|
|
end
|
|
|
|
function Events:QUEST_COMPLETE(...)
|
|
self:PlayIntro('QUEST_COMPLETE')
|
|
self:UpdateTalkingHead(API:GetTitleText(), API:GetRewardText(), 'ActiveQuest')
|
|
self:AddQuestInfo('QUEST_REWARD')
|
|
self:AddHint('CROSS', COMPLETE_QUEST)
|
|
end
|
|
|
|
function Events:QUEST_FINISHED(...)
|
|
API:CloseQuest(true)
|
|
self:PlayOutro()
|
|
-- if self:IsGossipAvailable(true) then
|
|
-- self:OnEvent('GOSSIP_SHOW')
|
|
-- self.TitleButtons:OnEvent('GOSSIP_SHOW')
|
|
-- end
|
|
end
|
|
|
|
function Events:QUEST_DETAIL(...)
|
|
if self:IsQuestAutoAccepted(...) then
|
|
self:PlayOutro()
|
|
return
|
|
end
|
|
self:PlayIntro('QUEST_DETAIL')
|
|
self:UpdateTalkingHead(API:GetTitleText(), API:GetQuestText(), 'AvailableQuest')
|
|
self:AddQuestInfo('QUEST_DETAIL')
|
|
self:AddHint('CROSS', ACCEPT)
|
|
end
|
|
|
|
|
|
function Events:QUEST_ITEM_UPDATE()
|
|
local questEvent = (self.lastEvent ~= 'QUEST_ITEM_UPDATE') and self.lastEvent or self.questEvent
|
|
self.questEvent = questEvent
|
|
|
|
if questEvent and self[questEvent] then
|
|
self[questEvent](self)
|
|
return questEvent
|
|
end
|
|
end
|
|
|
|
function Events:ITEM_TEXT_BEGIN()
|
|
local title = ItemTextGetItem()
|
|
local creator = ItemTextGetCreator()
|
|
if creator then
|
|
title = title .. ' (' .. FROM .. ' ' .. creator .. ')'
|
|
end
|
|
DoEmote('read')
|
|
self:RegisterEvent('PLAYER_STARTED_MOVING')
|
|
self:PlayIntro('ITEM_TEXT_BEGIN')
|
|
self:UpdateTalkingHead(title, '', 'TrainerGossip', 'player')
|
|
end
|
|
|
|
function Events:ITEM_TEXT_READY()
|
|
-- special case: pages need to be concatened together before displaying them.
|
|
-- each new page re-triggers this event, so keep changing page until we run out.
|
|
self.itemText = (self.itemText or '') .. '\n' .. (ItemTextGetText() or '')
|
|
if ItemTextHasNextPage() then
|
|
ItemTextNextPage()
|
|
return
|
|
end
|
|
-- set text directly instead of updating talking head
|
|
self.TalkBox.TextFrame.Text:SetText(self.itemText)
|
|
end
|
|
|
|
|
|
function Events:ITEM_TEXT_CLOSED()
|
|
local time = GetTime()
|
|
if not self.readEmoteCancelled and ( self.lastTextClosed ~= time ) then
|
|
DoEmote('read')
|
|
end
|
|
self.lastTextClosed = time
|
|
self.readEmoteCancelled = nil
|
|
self.itemText = nil
|
|
self:UnregisterEvent('PLAYER_STARTED_MOVING')
|
|
self:PlayOutro()
|
|
end
|
|
|
|
function Events:PLAYER_STARTED_MOVING()
|
|
self.readEmoteCancelled = true
|
|
return 'ITEM_TEXT_READY'
|
|
end
|
|
|
|
|
|
function Events:NAME_PLATE_UNIT_ADDED()
|
|
self.TalkBox:UpdateNameplateAnchor()
|
|
return self.lastEvent
|
|
end
|
|
|
|
function Events:NAME_PLATE_UNIT_REMOVED()
|
|
self.TalkBox:UpdateNameplateAnchor()
|
|
return self.lastEvent
|
|
end
|
|
|
|
function Events:SUPER_TRACKING_CHANGED()
|
|
self:PlaySuperTrackedQuestToast(ImmersionAPI:GetSuperTrackedQuestID())
|
|
return self.lastEvent
|
|
end
|
|
|
|
function Events:PLAYER_INTERACTION_MANAGER_FRAME_SHOW(type)
|
|
if API:ShouldCloseOnInteraction(type) then
|
|
self:ForceClose(false)
|
|
end
|
|
end
|