1
0
Bifurcation 0
Ce dépôt a été archivé le 2020-03-15. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
questhelperredux/QuestHelper/routing_hidden.lua

140 lignes
4.3 KiB
Lua

local GetTime = QuestHelper_GetTime
QuestHelper_File["routing_hidden.lua"] = "4.0.1.$svnversion$"
QuestHelper_Loadtime["routing_hidden.lua"] = GetTime()
local NodeChainIgnored = {
name = "routing_core_internal_node_ignored",
no_exception = true,
no_disable = true,
friendly_reason = QHText("DEPENDS_ON"),
}
function QH_PopulateHidden(menu)
local part_of_cluster = {}
local ignore_reasons = {}
QH_Route_TraverseClusters(
function (clust)
local igcount = {}
for _, v in ipairs(clust) do
part_of_cluster[v] = true
QH_Route_IgnoredReasons_Node(v, function (reason)
igcount[reason] = (igcount[reason] or 0) + 1
end)
end
QH_Route_IgnoredReasons_Cluster(clust, function (reason)
igcount[reason] = #clust
end)
for k, v in pairs(igcount) do
if not ignore_reasons[clust[1]] then ignore_reasons[clust[1]] = {} end
table.insert(ignore_reasons[clust[1]], {reason = k, partial = (v ~= #clust), items = clust})
end
if not ignore_reasons[clust[1]] then
if QH_Route_Ignored_Cluster(clust) then
ignore_reasons[clust[1]] = {{reason = NodeChainIgnored, partial = false, items = clust}} -- hmm what
end
end
end
)
QH_Route_TraverseNodes(
function (node)
if part_of_cluster[node] then return end
QH_Route_IgnoredReasons_Node(node, function(reason)
if not ignore_reasons[node] then ignore_reasons[node] = {} end
table.insert(ignore_reasons[node], {reason = reason, partial = false, items = {node}})
end)
end
)
local ignore_sorty = {}
for k, v in pairs(ignore_reasons) do
table.insert(ignore_sorty, {objective = k, ignores = v})
end
table.sort(ignore_sorty, function (a, b)
if a.objective.type_quest and b.objective.type_quest then
--if a.objective.type_quest.level ~= b.objective.type_quest.level then return a.objective.type_quest.level < b.objective.type_quest.level end
return a.objective.type_quest.title < b.objective.type_quest.title
elseif a.objective.type_quest then return true
elseif b.objective.type_quest then return false
else
-- meh
return false
end
end)
-- we'll sort this eventually
for _, v in ipairs(ignore_sorty) do
local ignored = QuestHelper:CreateMenuItem(menu, v.objective.hidden_desc or v.objective.map_desc[1])
local ignored_menu = QuestHelper:CreateMenu()
ignored:SetSubmenu(ignored_menu)
local no_exception = false
for _, ign in ipairs(v.ignores) do
if ign.reason.no_exception then
no_exception = true
end
end
if not no_exception then
local show = QuestHelper:CreateMenuItem(ignored_menu, QHText("HIDDEN_SHOW"))
show:SetFunction(function ()
for _, ign in ipairs(v.ignores) do
for _, v in ipairs(ign.items) do
ign.reason:AddException(v)
end
end
QH_Route_Filter_Rescan() -- DO IT ALL
end)
else
local show = QuestHelper:CreateMenuItem(ignored_menu, QHText("HIDDEN_SHOW_NO"))
end
for _, ign in ipairs(v.ignores) do
local thisitem = QuestHelper:CreateMenuItem(ignored_menu, ign.reason.friendly_reason)
if not ign.reason.no_exception or not ign.reason.no_disable then
local deign_menu = QuestHelper:CreateMenu()
thisitem:SetSubmenu(deign_menu)
if not ign.reason.no_exception then
local exception = QuestHelper:CreateMenuItem(deign_menu, QHText("HIDDEN_EXCEPTION"))
exception:SetFunction(function ()
for _, v in ipairs(ign.items) do
ign.reason:AddException(v)
end
QH_Route_Filter_Rescan(ign.reason.name)
end)
end
if not ign.reason.no_disable then
local disable = QuestHelper:CreateMenuItem(deign_menu, QHFormat("DISABLE_FILTER", ign.reason.friendly_name))
disable:SetFunction(function () ign.reason:Disable() QH_Route_Filter_Rescan(ign.reason.name) end)
end
end
end
end
end
function QH_Hidden_Menu()
local menu = QuestHelper:CreateMenu()
QuestHelper:CreateMenuTitle(menu, QHText("HIDDEN_TITLE"))
QH_PopulateHidden(menu)
menu:ShowAtCursor()
end