display adding quest locations

This commit is contained in:
Sokomine 2023-09-30 13:16:30 +02:00
parent 2183c1af32
commit 36ed71ae56
2 changed files with 31 additions and 8 deletions

View File

@ -131,7 +131,7 @@ yl_speak_up.input_fs_add_quest_steps = function(player, formname, fields)
local mode = yl_speak_up.speak_to[pname].quest_step_mode
if(fields.back) then
-- go back to quest overview
if(mode and mode == "manage_quest_npcs") then
if(mode and (mode == "manage_quest_npcs" or mode == "manage_quest_locations")) then
return yl_speak_up.show_fs(player, "manage_quests")
end
return yl_speak_up.show_fs(player, "manage_quest_steps", current_step)
@ -365,7 +365,8 @@ yl_speak_up.quest_npc_show_table = function(formspec, table_specs, liste, step_d
-- the n_id of the NPC
table.insert(tmp, "#AAFFAA")
if(is_location_list) then
table.insert(tmp, n_id) -- this already encodes the position
-- this already encodes the position but contains , and ()
table.insert(tmp, minetest.formspec_escape(n_id))
else
table.insert(tmp, "n_"..minetest.formspec_escape(n_id))
end
@ -403,8 +404,7 @@ yl_speak_up.quest_get_location_candidate_list = function(pname, quest_location_l
and table.indexof(quest_location_liste or {}, n_id) == -1
-- and only those that the player can edit
and (v.owner == pname or (v.may_edit and v.may_edit[pname]))) then
table.insert(location_list, k)
minetest.chat_send_player("singleplayer", "candidate: "..tostring(n_id))
table.insert(location_list, n_id)
end
end
table.sort(location_list)
@ -442,6 +442,8 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param)
local add_what = "Add a new quest step named:"
if(mode == "manage_quest_npcs") then
add_what = "Add the NPC with n_<id>:"
elseif(mode == "manage_quest_locations") then
add_what = "Add a location by entering its ID directly:"
end
local formspec = {}
@ -537,17 +539,36 @@ yl_speak_up.get_fs_add_quest_steps = function(player, param)
yl_speak_up.quest_npc_show_table(formspec,
"0.2,0.2;17.0,3.0;delete_from_npc_list;",
res.quest.npcs or {},
step_data)
step_data, false)
table.insert(formspec, "label[0.2,3.4;(Click on an entry to delete it from the list above.)]")
local available_npcs = yl_speak_up.quest_get_npc_candidate_list(pname, res.quest.npcs or {})
yl_speak_up.speak_to[pname].list_available = available_npcs
table.insert(formspec, "label[0.2,4.4;or select an NPC from the list below:]")
yl_speak_up.quest_npc_show_table(formspec,
"0.2,4.6;17.0,6.0;add_to_npc_list;",
available_npcs or {}, step_data)
available_npcs or {}, step_data, false)
table.insert(formspec, "label[0.2,10.8;Used: Shows in how many quest steps this NPC is used.]")
table.insert(formspec, "container_end[]")
y_pos = 4.2
return table.concat(formspec, "")
-- which locations may contribute to the quest?
elseif(mode == "manage_quest_locations") then
table.insert(formspec, "container[0,3.3;18,6]")
table.insert(formspec, "label[0.2,0;so that the location "..
minetest.colorize("#9999FF", "may contribute")..
" to the quest like these locations:]")
yl_speak_up.quest_npc_show_table(formspec,
"0.2,0.2;17.0,3.0;delete_from_location_list;",
res.quest.locations or {},
step_data, true)
table.insert(formspec, "label[0.2,3.4;(Click on an entry to delete it from the list above.)]")
local available_locations = yl_speak_up.quest_get_location_candidate_list(pname, res.quest.locations or {})
yl_speak_up.speak_to[pname].list_available = available_locations
table.insert(formspec, "label[0.2,4.4;or select a location from the list below:]")
yl_speak_up.quest_npc_show_table(formspec,
"0.2,4.6;17.0,6.0;add_to_location_list;",
available_locations or {}, step_data, true)
table.insert(formspec, "label[0.2,10.8;Used: Shows in how many quest steps this location is used.]")
table.insert(formspec, "container_end[]")
return table.concat(formspec, "")
end

View File

@ -51,8 +51,10 @@ yl_speak_up.input_fs_manage_quests = function(player, formname, fields)
end
-- show and edit NPCs that may contribute
if(fields and fields.edit_npcs) then
if( fields and fields.edit_npcs) then
return yl_speak_up.show_fs(player, "add_quest_steps", "manage_quest_npcs")
elseif(fields and fields.edit_locations) then
return yl_speak_up.show_fs(player, "add_quest_steps", "manage_quest_locations")
end
-- show a particular quest step from the start/unconnected/end list?