forked from Sokomine/yl_speak_up
added first temporary storing of previous quest steps
This commit is contained in:
parent
35506731bd
commit
d9208a1365
@ -59,6 +59,28 @@ end
|
||||
--]]
|
||||
|
||||
|
||||
-- helper function: find out if a quest step is required by other quest steps
|
||||
yl_speak_up.quest_step_get_required_for_steps = function(step_data)
|
||||
local required_for_steps = {}
|
||||
for s, d in pairs(step_data) do
|
||||
required_for_steps[s] = {}
|
||||
end
|
||||
for s, d in pairs(step_data) do
|
||||
if(s and d and d.one_step_required and type(d.one_step_required) == "table") then
|
||||
for i, s2 in ipairs(d.one_step_required) do
|
||||
table.insert(required_for_steps[s2], s)
|
||||
end
|
||||
end
|
||||
if(s and d and d.all_steps_required and type(d.all_steps_required) == "table") then
|
||||
for i, s2 in ipairs(d.all_steps_required) do
|
||||
table.insert(required_for_steps[s2], s)
|
||||
end
|
||||
end
|
||||
end
|
||||
return required_for_steps
|
||||
end
|
||||
|
||||
|
||||
yl_speak_up.input_fs_add_quest_steps = function(player, formname, fields)
|
||||
local pname = player:get_player_name()
|
||||
|
||||
@ -103,9 +125,56 @@ yl_speak_up.input_fs_add_quest_steps = function(player, formname, fields)
|
||||
work_step = liste[selected.row - 1]
|
||||
end
|
||||
end
|
||||
if(work_step) then
|
||||
-- minetest.chat_send_player("singleplayer","SELECTED: "..tostring(work_step)) -- TODO
|
||||
return
|
||||
|
||||
if(not(work_step)) then
|
||||
return -- TODO
|
||||
end
|
||||
local q_id = yl_speak_up.speak_to[pname].q_id
|
||||
-- TODO: check if the player can access that quest
|
||||
if(not(q_id)) then
|
||||
return yl_speak_up.show_fs(player, "manage_quests")
|
||||
end
|
||||
local quest = yl_speak_up.quests[q_id]
|
||||
if(not(quest)) then
|
||||
return yl_speak_up.show_fs(player, "manage_quests")
|
||||
end
|
||||
local step_data = quest.step_data
|
||||
if(not(step_data)) then
|
||||
return yl_speak_up.show_fs(player, "manage_quests")
|
||||
end
|
||||
local current_step = yl_speak_up.speak_to[pname].quest_step
|
||||
if(not(current_step) or not(step_data[current_step])) then
|
||||
return yl_speak_up.show_fs(player, "manage_quests")
|
||||
end
|
||||
local mode = ""
|
||||
if(pname and yl_speak_up.speak_to[pname] and yl_speak_up.speak_to[pname].quest_step_mode) then
|
||||
mode = yl_speak_up.speak_to[pname].quest_step_mode
|
||||
end
|
||||
|
||||
local required_for_steps = yl_speak_up.quest_step_get_required_for_steps(step_data)
|
||||
if(step_data[work_step]
|
||||
and step_data[work_step].one_step_required
|
||||
and #step_data[work_step].one_step_required < 1
|
||||
and step_data[work_step].all_steps_required
|
||||
and #step_data[work_step].all_steps_required < 1
|
||||
and #required_for_steps[work_step] < 1) then
|
||||
-- this quest step is definitely suited
|
||||
-- minetest.chat_send_player("singleplayer","SELECTED ok: "..tostring(work_step)) -- TODO
|
||||
if(mode == "add_to_one_needed") then
|
||||
if(not(yl_speak_up.quests[q_id].step_data[current_step].one_step_required)) then
|
||||
yl_speak_up.quests[q_id].step_data[current_step].one_step_required = {}
|
||||
end
|
||||
table.insert(yl_speak_up.quests[q_id].step_data[current_step].one_step_required, work_step)
|
||||
elseif(mode == "add_to_all_needed") then
|
||||
if(not(yl_speak_up.quests[q_id].step_data[current_step].all_steps_required)) then
|
||||
yl_speak_up.quests[q_id].step_data[current_step].all_steps_required = {}
|
||||
end
|
||||
table.insert(yl_speak_up.quests[q_id].step_data[current_step].all_steps_required, work_step)
|
||||
elseif(mode == "insert_after_prev_step") then
|
||||
elseif(mode == "insert_before_next_step") then
|
||||
return
|
||||
end
|
||||
return yl_speak_up.show_fs(player, "add_quest_steps")
|
||||
end
|
||||
|
||||
-- minetest.chat_send_player("singleplayer","FIELDS: "..minetest.serialize(fields))
|
||||
@ -173,23 +242,7 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param)
|
||||
|
||||
local step_data = quest.step_data
|
||||
-- find out if a quest step is required by other quest steps
|
||||
local required_for_steps = {}
|
||||
for s, d in pairs(step_data) do
|
||||
required_for_steps[s] = {}
|
||||
end
|
||||
for s, d in pairs(step_data) do
|
||||
if(s and d and d.one_step_required and type(d.one_step_required) == "table") then
|
||||
for i, s2 in ipairs(d.one_step_required) do
|
||||
table.insert(required_for_steps[s2], s)
|
||||
end
|
||||
end
|
||||
if(s and d and d.all_steps_required and type(d.all_steps_required) == "table") then
|
||||
for i, s2 in ipairs(d.all_steps_required) do
|
||||
table.insert(required_for_steps[s2], s)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local required_for_steps = yl_speak_up.quest_step_get_required_for_steps(step_data)
|
||||
|
||||
local formspec = {}
|
||||
table.insert(formspec, "size[12.5,17.3]")
|
||||
|
Loading…
Reference in New Issue
Block a user