This commit is contained in:
Wouters Dorian 2015-07-25 11:26:45 +02:00
parent 64a87f4d14
commit 7225027879
3 changed files with 82 additions and 68 deletions

View File

@ -19,23 +19,27 @@ local function compute_tasks(playername, questname, nocallback)
if task.requires == nil then
plr_task.visible = true
else
plr_task.visible = false
local was_visible = task.visible
local final_enabler = ""
for _, enabler_name in ipairs(task.requires) do
if type(enabler_name) == "table" then
plr_task.visible = true
for _, subena_name in ipairs(plr_task[enabler_name]) do
for _, subena_name in ipairs(plr_quest[enabler_name]) do
local plr_subena = plr_task[subena_name]
if not plr_subena.visible or not plr_subena.finished then
if plr_task.visible and plr_subena and (not plr_subena.visible or not plr_subena.finished) then
plr_task.visible = false
break
end
end
else
plr_task.visible = plr_task[enabler_name].finished
if plr_quest[enabler_name] then
plr_task.visible = plr_quest[enabler_name].finished or false
else
plr_task.visible = true
end
end
if plr_task.visible then
final_enabler = enabler
final_enabler = enabler_name
break
end
end
@ -50,17 +54,16 @@ local function compute_tasks(playername, questname, nocallback)
if type(disabler) == "table" then
plr_task.disabled = true
for _, subdis_name in ipairs(disabler) do
local plr_subdis = plr_task[subdis_name]
if plr_subdis.visible and plr_subdis.finished then
plr_task.disabled = false
break
local plr_subdis = plr_quest[subdis_name]
if not plr_task.disabled and plr_subdis.visible and plr_subdis.finished then
plr_task.disabled = true
end
end
else
plr_task.disabled = plr_task[disabler_name].finished
plr_task.disabled = plr_quest[disabler_name].finished
end
if plr_task.disabled then
final_disabler = disabler
final_disabler = disabler_name
break
end
end
@ -313,6 +316,7 @@ function quests.update_quest_task(playername, questname, taskname, value)
-- Check for quest completion
local all_tasks_finished = true
for taskname, task in pairs(quest.tasks) do
local plr_task = plr_quest[taskname]
if plr_task.visible and not plr_task.disabled and not plr_task.finished then
all_tasks_finished = false
end

View File

@ -29,6 +29,7 @@ function quests.create_formspec(playername, tab, integrated)
for questname,questspecs in pairs(questlist) do
if not questspecs.finished then
local quest = quests.registered_quests[questname]
if quest then -- Quest might have been deleted
local queststring = quest.title
if quest.simple then
if questspecs.count and questspecs.count > 1 then
@ -48,6 +49,7 @@ function quests.create_formspec(playername, tab, integrated)
no_quests = false
end
end
end
local formspec = ""
if not integrated then
formspec = formspec .. "size[7,9]"
@ -56,12 +58,13 @@ function quests.create_formspec(playername, tab, integrated)
if no_quests then
formspec = formspec .. "label[0.25,0.25;" .. S("There are no quests in this category.") .. "]"
else
formspec = formspec .. "textlist[0.25,0.25;6.5,6.5;quests_questlist;"..table.concat(queststringlist, ",") .. ";1;false]"
formspec = formspec .. "textlist[0.25,0.25;6.5,6;quests_questlist;"..table.concat(queststringlist, ",") .. ";1;false]"
end
if quests.formspec_lists[playername].tab == "1" then
formspec = formspec .."button[0.25,7;3,.7;quests_abort;" .. S("Abort quest") .. "]"
formspec = formspec .."button[0.25,7.1;3,.7;quests_abort;" .. S("Abort quest") .. "]" ..
"checkbox[.25,6.2;quests_show_quest_in_hud;" .. S("Show in HUD") .. ";" .. "false" .. "]"
end
formspec = formspec .. "button[3.75,7;3,.7;quests_config;" .. S("Configure") .. "]"..
formspec = formspec .. "button[3.75,7.1;3,.7;quests_config;" .. S("Configure") .. "]"..
"button[.25,8;3,.7;quests_info;" .. S("Info") .. "]"..
"button_exit[3.75,8;3,.7;quests_exit;" .. S("Exit") .. "]"
return formspec
@ -145,11 +148,15 @@ function quests.create_info(playername, questname, taskid, integrated)
local taskidlist = {}
local taskstringlist = {}
for taskname, task in pairs(quest.tasks) do
local plr_task = quests.active_quests[playername][questname][taskname]
local plr_task = nil
if quests.active_quests[playername] and quests.active_quests[playername][questname] then
plr_task = quests.active_quests[playername][questname][taskname]
end
if not plr_task or (plr_task and plr_task.visible) then
-- not plr_task => quest is finished, display all tasks
table.insert(taskidlist, taskname)
local color = ""
local suffix = ""
if plr_task then
if plr_task.finished then
color = "#00BB00"
@ -157,8 +164,9 @@ function quests.create_info(playername, questname, taskid, integrated)
if plr_task.disabled then
color = "#AAAAAA"
end
suffix = " - " .. quests.round(plr_task.value, 2) .. "/" .. task.max
end
table.insert(taskstringlist, color .. task.title .. " - " .. quests.round(plr_task.value, 2) .. "/" .. task.max)
table.insert(taskstringlist, color .. task.title .. suffix)
end
end
local task = false
@ -311,8 +319,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.quest_info_tasklist then
local event = minetest.explode_textlist_event(fields.quest_info_tasklist)
if event.type == "CHG" then
if formname == "quests:questlog" then
minetest.show_formspec(playername, "quests:info", quests.create_info(playername, quests.formspec_lists[playername].list[quests.formspec_lists[playername].id]), event.index, false)
if formname == "quests:info" then
minetest.show_formspec(playername, "quests:info", quests.create_info(playername, quests.formspec_lists[playername].list[quests.formspec_lists[playername].id], event.index, false))
else
quests.formspec_lists[playername].taskid = event.index
unified_inventory.set_inventory_formspec(player, "quests_info")
@ -320,7 +328,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end
if fields.quests_info_abort then
if (quests.formspec_lists[playername].id == nil) then
if quests.formspec_lists[playername].id == nil then
return
end
quests.abort_quest(playername, quests.formspec_lists[playername].list[quests.formspec_lists[playername].id])

View File

@ -150,6 +150,7 @@ function quests.update_hud(playername)
for questname,questspecs in pairs(quests.active_quests[playername]) do
if not visible[questname] then
local quest = quests.registered_quests[questname]
if quest then -- Quest might have been deleted
if quest.simple then
local id = player:hud_add({ hud_elem_type = "text",
alignment = { x=1, y= 1 },
@ -190,6 +191,7 @@ function quests.update_hud(playername)
end
end
end
end
if quests.hud[playername].autohide then
if (next(quests.active_quests[playername]) == nil) then