forked from your-land-mirror/yl_speak_up
allow to remove quest steps from the lists of requirements
This commit is contained in:
parent
d9208a1365
commit
0204f38a46
@ -84,24 +84,43 @@ end
|
||||
yl_speak_up.input_fs_add_quest_steps = function(player, formname, fields)
|
||||
local pname = player:get_player_name()
|
||||
|
||||
if(not(pname) or not(yl_speak_up.speak_to[pname])) then
|
||||
if(not(fields) or not(pname) or not(yl_speak_up.speak_to[pname])) then
|
||||
return
|
||||
end
|
||||
if(fields and fields.back_from_error_msg) then
|
||||
if(fields.back_from_error_msg) then
|
||||
yl_speak_up.show_fs(player, "add_quest_steps")
|
||||
return
|
||||
end
|
||||
if(fields and fields.back) then
|
||||
if(fields.back) then
|
||||
if(yl_speak_up.speak_to[pname].quest_step) then
|
||||
yl_speak_up.show_fs(player, "manage_quest_steps", yl_speak_up.speak_to[pname].quest_step)
|
||||
return
|
||||
end
|
||||
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
|
||||
yl_speak_up.quests[q_id].step_data = {}
|
||||
end
|
||||
-- other values needed later on
|
||||
local current_step = yl_speak_up.speak_to[pname].quest_step
|
||||
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
|
||||
|
||||
-- has a quest step be selected?
|
||||
local work_step = nil
|
||||
if(fields and fields.add_step and fields.add_quest_step) then
|
||||
local q_id = yl_speak_up.speak_to[pname].q_id
|
||||
if(fields.add_step and fields.add_quest_step) then
|
||||
-- create a new quest step
|
||||
local new_step = fields.add_quest_step:trim()
|
||||
-- a new one shall be created
|
||||
local res = yl_speak_up.quest_step_add_quest_step(pname, q_id, new_step)
|
||||
@ -117,39 +136,40 @@ yl_speak_up.input_fs_add_quest_steps = function(player, formname, fields)
|
||||
-- this will also be set if the quest step exists already; this is fine so far
|
||||
work_step = new_step
|
||||
|
||||
elseif(fields.add_from_available and pname and yl_speak_up.speak_to[pname]
|
||||
elseif(fields.add_from_available
|
||||
and yl_speak_up.speak_to[pname].available_quest_steps) then
|
||||
-- selected a quest step from the list of available steps offered
|
||||
local liste = yl_speak_up.speak_to[pname].available_quest_steps
|
||||
local selected = minetest.explode_table_event(fields.add_from_available)
|
||||
if(selected and selected.row and selected.row > 1 and selected.row <= #liste + 1) then
|
||||
work_step = liste[selected.row - 1]
|
||||
end
|
||||
|
||||
elseif(fields.delete_from_one_step_required and current_step and step_data[current_step]) then
|
||||
-- remove a quest step from the list (from one step required)
|
||||
local selected = minetest.explode_table_event(fields.delete_from_one_step_required)
|
||||
local liste = (step_data[current_step].one_step_required or {})
|
||||
if(selected and selected.row and selected.row > 1 and selected.row <= #liste + 1) then
|
||||
table.remove(yl_speak_up.quests[q_id].step_data[current_step].one_step_required, selected.row-1)
|
||||
end
|
||||
return yl_speak_up.show_fs(player, "add_quest_steps")
|
||||
|
||||
elseif(fields.delete_from_all_steps_required and current_step and step_data[current_step]) then
|
||||
-- remove a quest step from the lists (from all steps required)
|
||||
local selected = minetest.explode_table_event(fields.delete_from_all_steps_required)
|
||||
local liste = (step_data[current_step].all_steps_required or {})
|
||||
if(selected and selected.row and selected.row > 1 and selected.row <= #liste + 1) then
|
||||
table.remove(yl_speak_up.quests[q_id].step_data[current_step].all_steps_required, selected.row-1)
|
||||
end
|
||||
return yl_speak_up.show_fs(player, "add_quest_steps")
|
||||
end
|
||||
|
||||
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]
|
||||
@ -332,13 +352,31 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param)
|
||||
y_pos = 8.3
|
||||
end
|
||||
|
||||
-- TODO: temporary!
|
||||
-- some quest steps may not be available/may not make sense
|
||||
local not_available = {}
|
||||
if(current_step and step_data[current_step]) then
|
||||
-- steps that are already required
|
||||
for i, s in ipairs(step_data[current_step].one_step_required or {}) do
|
||||
not_available[s] = true
|
||||
end
|
||||
for i, s in ipairs(step_data[current_step].all_steps_required or {}) do
|
||||
not_available[s] = true
|
||||
end
|
||||
-- steps that directly require this quest step here
|
||||
for i, s in ipairs(required_for_steps[current_step] or {}) do
|
||||
not_available[s] = true
|
||||
end
|
||||
end
|
||||
-- build a list of candidates
|
||||
local available_steps = {}
|
||||
for k, v in pairs(step_data) do
|
||||
table.insert(available_steps, k)
|
||||
if(not(not_available[k])) then
|
||||
table.insert(available_steps, k)
|
||||
end
|
||||
end
|
||||
table.sort(available_steps)
|
||||
yl_speak_up.speak_to[pname].available_quest_steps = available_steps
|
||||
|
||||
table.insert(formspec, "label[0.2,")
|
||||
table.insert(formspec, tostring(y_pos))
|
||||
table.insert(formspec, ";or select an existing quest step from the list below:]")
|
||||
@ -353,6 +391,5 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param)
|
||||
"\t(A) that (a)ll need to be achieved for this quest step\n"..
|
||||
"\t(U) that require/(u)se this quest step in some form]")
|
||||
|
||||
-- TODO: write before which quest step we want to insert (if that is what is selected)
|
||||
return table.concat(formspec, "")
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user