Make functions respect entry aliases

This commit is contained in:
Wuzzy 2016-08-31 20:24:42 +02:00
parent 56fbc5b9aa
commit 3275815d3b

View File

@ -46,6 +46,7 @@ end
-- Marks a particular entry as viewed by a certain player, which also -- Marks a particular entry as viewed by a certain player, which also
-- automatically reveals it -- automatically reveals it
function doc.mark_entry_as_viewed(playername, category_id, entry_id) function doc.mark_entry_as_viewed(playername, category_id, entry_id)
local entry, entry_id = doc.get_entry(category_id, entry_id)
if doc.data.players[playername].stored_data.viewed[category_id] == nil then if doc.data.players[playername].stored_data.viewed[category_id] == nil then
doc.data.players[playername].stored_data.viewed[category_id] = {} doc.data.players[playername].stored_data.viewed[category_id] = {}
doc.data.players[playername].stored_data.viewed_count[category_id] = 0 doc.data.players[playername].stored_data.viewed_count[category_id] = 0
@ -61,6 +62,7 @@ end
-- Marks a particular entry as revealed/unhidden by a certain player -- Marks a particular entry as revealed/unhidden by a certain player
function doc.mark_entry_as_revealed(playername, category_id, entry_id) function doc.mark_entry_as_revealed(playername, category_id, entry_id)
local entry, entry_id = doc.get_entry(category_id, entry_id)
if doc.data.players[playername].stored_data.revealed[category_id] == nil then if doc.data.players[playername].stored_data.revealed[category_id] == nil then
doc.data.players[playername].stored_data.revealed[category_id] = {} doc.data.players[playername].stored_data.revealed[category_id] = {}
doc.data.players[playername].stored_data.revealed_count[category_id] = 0 doc.data.players[playername].stored_data.revealed_count[category_id] = 0
@ -75,6 +77,7 @@ end
-- Returns true if the specified entry has been viewed by the player -- Returns true if the specified entry has been viewed by the player
function doc.entry_viewed(playername, category_id, entry_id) function doc.entry_viewed(playername, category_id, entry_id)
local entry, entry_id = doc.get_entry(category_id, entry_id)
if doc.data.players[playername].stored_data.viewed[category_id] == nil then if doc.data.players[playername].stored_data.viewed[category_id] == nil then
return false return false
else else
@ -84,6 +87,7 @@ end
-- Returns true if the specified entry is hidden from the player -- Returns true if the specified entry is hidden from the player
function doc.entry_revealed(playername, category_id, entry_id) function doc.entry_revealed(playername, category_id, entry_id)
local entry, entry_id = doc.get_entry(category_id, entry_id)
local hidden = doc.data.categories[category_id].entries[entry_id].hidden local hidden = doc.data.categories[category_id].entries[entry_id].hidden
if doc.data.players[playername].stored_data.revealed[category_id] == nil then if doc.data.players[playername].stored_data.revealed[category_id] == nil then
return not hidden return not hidden
@ -109,7 +113,8 @@ function doc.get_entry_definition(category_id, entry_id)
if not doc.entry_exists(category_id, entry_id) then if not doc.entry_exists(category_id, entry_id) then
return nil return nil
end end
return doc.data.categories[category_id].entries[entry_id] local entry, _ = doc.get_entry(category_id, entry_id)
return entry
end end
-- Opens the main documentation formspec for the player -- Opens the main documentation formspec for the player
@ -141,6 +146,7 @@ function doc.show_entry(playername, category_id, entry_id, ignore_hidden)
minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories()) minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories())
return return
end end
local entry, entry_id = doc.get_entry(category_id, entry_id)
if ignore_hidden or doc.entry_revealed(playername, category_id, entry_id) then if ignore_hidden or doc.entry_revealed(playername, category_id, entry_id) then
local playerdata = doc.data.players[playername] local playerdata = doc.data.players[playername]
playerdata.category = category_id playerdata.category = category_id
@ -345,7 +351,19 @@ Sorry, access to the requested entry has been denied; this entry is secret. You
return formstring return formstring
end end
-- Returns the entry definition and true entry ID of an entry, taking aliases into account
function doc.get_entry(category_id, entry_id)
local category = doc.data.categories[category_id]
local entry = category.entries[entry_id]
local resolved_entry_id = entry_id
if entry == nil then
resolved_entry_id = doc.data.categories[category_id].entry_aliases[entry_id]
if resolved_entry_id ~= nil then
entry = category.entries[resolved_entry_id]
end
end
return entry, resolved_entry_id
end
function doc.generate_entry_list(cid, playername) function doc.generate_entry_list(cid, playername)
local formstring local formstring
@ -499,14 +517,7 @@ function doc.formspec_entry(category_id, entry_id)
else else
local category = doc.data.categories[category_id] local category = doc.data.categories[category_id]
local entry = category.entries[entry_id] local entry = doc.get_entry(category_id, entry_id)
-- Check if entry has an alias
if entry == nil then
local resolved_alias = doc.data.categories[category_id].entry_aliases[entry_id]
if resolved_alias ~= nil then
entry = category.entries[resolved_alias]
end
end
formstring = "label[0,0;Help > "..category.def.name.." > "..entry.name.."]" formstring = "label[0,0;Help > "..category.def.name.." > "..entry.name.."]"
formstring = formstring .. category.def.build_formspec(entry.data) formstring = formstring .. category.def.build_formspec(entry.data)