Back to Home

ESO Lua File v101050

ingame/zo_quest/rumormanager.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
ZO_RumorManager = ZO_InitializingCallbackObject:Subclass()
function ZO_RumorManager:Initialize()
    RUMOR_MANAGER = self
    self.rumorData = {}
end
function ZO_RumorManager:RegisterForEvents()
    local function OnRumorsUpdated()
        self:RefreshAll()
    end
    EVENT_MANAGER:RegisterForEvent("RumorManager", EVENT_RUMORS_UPDATED, OnRumorsUpdated)
    local function OnSingleRumorUpdated(event, rumorId)
        self:RefreshRumor(rumorId)
    end
    EVENT_MANAGER:RegisterForEvent("RumorManager", EVENT_RUMOR_UPDATED, OnSingleRumorUpdated)
    if EVENT_RUMOR_DATA_CHANGED then
        EVENT_MANAGER:RegisterForEvent("RumorManager", EVENT_RUMOR_DATA_CHANGED, function() self:RebuildRumors() end)
    end
end
function ZO_RumorManager:RumorIterator(filterFunctions)
    return ZO_FilteredNonContiguousTableIterator(self.rumorData, filterFunctions)
end
function ZO_RumorManager:RumorTypeRumorIterator(rumorType, filterFunctions)
    local function IsRumorType(rumorData)
        return rumorData:IsRumorType(rumorType)
    end
    local combinedFilterFunctions = {IsRumorType}
    if filterFunctions then
        ZO_CombineNumericallyIndexedTables(combinedFilterFunctions, filterFunctions)
    end
    return self:RumorIterator(combinedFilterFunctions)
end
function ZO_RumorManager:HasMatchingRumor(matchingFunctions)
    for index, rumorData in RUMOR_MANAGER:RumorIterator(matchingFunctions) do
        return true
    end
    return false
end
function ZO_RumorManager:DoesRumorTypeHaveMatchingRumor(rumorType, matchingFunctions)
    for index, rumorData in RUMOR_MANAGER:RumorTypeRumorIterator(rumorType, matchingFunctions) do
        return true
    end
    return false
end
function ZO_RumorManager:ClearRumors()
    ZO_ClearTable(self.rumorData)
end
function ZO_RumorManager:GetRumorData(rumorId)
    return self.rumorData[rumorId]
end
function ZO_RumorManager:GetOrCreateRumorData(rumorId)
    if rumorId and rumorId ~= 0 then
        local rumorData = self:GetRumorData(rumorId)
        if not rumorData then
            rumorData = ZO_RumorData:New(rumorId)
            self.rumorData[rumorId] = rumorData
        end
        return rumorData
    end
end
function ZO_RumorManager:RefreshRumor(rumorId)
    local rumorData = self:GetRumorData(rumorId)
    if rumorData then
        -- TODO Rumors: Refresh rumorData
        self:FireCallbacks("SingleRumorUpdated", rumorData)
    else
        internalassert(false, string.format("Invalid rumorId (%s)", tostring(rumorId) or "nil"))
    end
end
function ZO_RumorManager:RefreshAll()
    for _, rumorData in self:RumorIterator() do
        -- TODO Rumors: Refresh rumorData
    end
    self:FireCallbacks("RumorsUpdated")
end
function ZO_RumorManager:RebuildRumors()
    self:ClearRumors()
    local numRumors = GetNumRumors()
    for rumorIndex = 1, numRumors do
        local rumorId = GetRumorIdAtIndex(rumorIndex)
        self:GetOrCreateRumorData(rumorIndex)
    end
    self:FireCallbacks("RumorsUpdated")
end
function ZO_RumorManager:ConfirmAbandonRumor(rumorId)
    local rumorData = self:GetRumorData(rumorId)
    if not rumorData then
        return
    end
    local rumorName = rumorData:GetDisplayName()
    rumorName = ZO_WHITE:Colorize(rumorName)
    ZO_Dialogs_ShowPlatformDialog("ABANDON_RUMOR", {rumorId = rumorId}, {mainTextParams = {rumorName}})
end
ZO_RumorManager:New()