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