diff --git a/fs_add_quest_steps.lua b/fs_add_quest_steps.lua index 4b4255a..16aa6c7 100644 --- a/fs_add_quest_steps.lua +++ b/fs_add_quest_steps.lua @@ -62,12 +62,54 @@ 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 + return + end + if(fields and fields.back_from_error_msg) then + yl_speak_up.show_fs(player, "add_quest_steps") + return + end if(fields and fields.back) then - if(pname and yl_speak_up.speak_to[pname] and yl_speak_up.speak_to[pname].quest_step) 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 + + -- 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 + 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) + if(res ~= "OK") then + yl_speak_up.show_fs(player, "msg", { + input_to = "yl_speak_up:add_quest_steps", + formspec = "size[9,2]".. + "label[0.2,0.0;Error:\n".. + minetest.formspec_escape(minetest.wrap_text(res,80)).."]".. + "button[1.5,1.5;2,0.9;back_from_error_msg;Back]"}) + return res + end + -- 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] + and yl_speak_up.speak_to[pname].available_quest_steps) then + 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 + end + if(work_step) then +-- minetest.chat_send_player("singleplayer","SELECTED: "..tostring(work_step)) -- TODO + return + end + +-- minetest.chat_send_player("singleplayer","FIELDS: "..minetest.serialize(fields)) + -- TODO: implement end @@ -90,6 +132,7 @@ yl_speak_up.quest_step_list_show_table = function(formspec, table_specs, liste, "color;text,align=left".. -- name of quest step "]table[") table.insert(formspec, table_specs) + table.insert(formspec,"#FFFFFF,(O),#FFFFFF,(A),#FFFFFF,(U),#FFFFFF,Name of step:,") local tmp = {} for i, s in ipairs(liste or {}) do local d = data[s] @@ -149,7 +192,7 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param) local formspec = {} - table.insert(formspec, "size[12.5,16]") + table.insert(formspec, "size[12.5,17.3]") -- add back button table.insert(formspec, "button[8,0;2,0.7;back;Back]") -- show which quest we're working at @@ -242,6 +285,7 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param) table.insert(available_steps, k) 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:]") @@ -249,6 +293,12 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param) "0.2,"..tostring(y_pos + 0.2)..";12.0,6.0;add_from_available;", available_steps, step_data, required_for_steps) + table.insert(formspec, "label[0.2,") + table.insert(formspec, tostring(y_pos + 6.5)) + table.insert(formspec, ";Legend: The numbers show the amount of quest steps...\n".. + "\t(O) from which (o)ne needs to be achieved for this quest step\n".. + "\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, "")