forked from your-land-mirror/yl_speak_up
support changes to o_sort
This commit is contained in:
parent
f88ef64f7f
commit
a7d9ab5eb2
@ -2123,6 +2123,44 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields)
|
||||
return result
|
||||
end
|
||||
|
||||
-- ignore entries to o_sort if they are not a number
|
||||
if(fields[ "edit_option_o_sort"]
|
||||
and tonumber(fields[ "edit_option_o_sort"])
|
||||
and fields.o_id and dialog.n_dialogs[d_id].d_options[fields.o_id]) then
|
||||
local o_id = fields.o_id
|
||||
local new_nr = tonumber(fields[ "edit_option_o_sort"])
|
||||
local old_nr = tonumber(dialog.n_dialogs[d_id].d_options[o_id].o_sort)
|
||||
-- if the nr is -1 (do not show) then we are done already: nothing to do
|
||||
if(old_nr == new_nr) then
|
||||
-- -1: do not list as option/answer (but still store and keep it)
|
||||
elseif(new_nr == -1 and old_nr ~= -1) then
|
||||
dialog.n_dialogs[d_id].d_options[o_id].o_sort = "-1"
|
||||
table.insert(yl_speak_up.npc_was_changed[ n_id ],
|
||||
"Dialog "..d_id..": Option "..tostring(o_id).." was set to -1 (do not list).")
|
||||
else
|
||||
-- get the old sorted list
|
||||
local sorted_list = yl_speak_up.get_sorted_options(dialog.n_dialogs[d_id].d_options)
|
||||
-- negative numbers are not shown
|
||||
local entries_shown_list = {}
|
||||
for i, o in ipairs(sorted_list) do
|
||||
local n = tonumber(dialog.n_dialogs[d_id].d_options[o].o_sort)
|
||||
if(n and n > 0 and o ~= o_id) then
|
||||
table.insert(entries_shown_list, o)
|
||||
end
|
||||
end
|
||||
-- insert the entry at the new position and let lua do the job
|
||||
table.insert(entries_shown_list, new_nr, o_id)
|
||||
-- take the indices from that new list as new sort values and store them;
|
||||
-- this has the side effect that duplicate entries get sorted out as well
|
||||
for i, o in ipairs(entries_shown_list) do
|
||||
dialog.n_dialogs[d_id].d_options[o].o_sort = tostring(i)
|
||||
end
|
||||
-- store that there was a cahnge
|
||||
table.insert(yl_speak_up.npc_was_changed[ n_id ],
|
||||
"Dialog "..d_id..": Option "..tostring(o_id).." was moved to position "..
|
||||
tostring(new_nr)..".")
|
||||
end
|
||||
end
|
||||
|
||||
-- changes to options are not possible if there are none
|
||||
if(dialog.n_dialogs[ d_id ].d_options) then
|
||||
@ -2302,8 +2340,6 @@ minetest.register_on_player_receive_fields(
|
||||
return
|
||||
end
|
||||
|
||||
-- TODO: allow change of o_sort, make button delete work, (add button save?)
|
||||
|
||||
-- handles changes to o_text_when_prerequisites_met, target dialog, adding of a new dialog
|
||||
local result = yl_speak_up.edit_mode_apply_changes(pname, fields)
|
||||
-- if a new option was added or the target dialog of this one changed, display the right new option
|
||||
|
Loading…
Reference in New Issue
Block a user