empty variables can now be deleted
This commit is contained in:
parent
144eb53719
commit
4f524f7fc1
@ -994,7 +994,11 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields,
|
||||
-- show var usuage - but this time from the edit dialog for that precondition or effect
|
||||
elseif(fields.show_var_usage_edit_element and x_id) then
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
local element = dialog.n_dialogs[d_id].d_options[o_id][ element_list_name ][ x_id ]
|
||||
local element = nil
|
||||
-- x_id may be "new" and this may be the first element in element_list_name
|
||||
if(dialog.n_dialogs[d_id].d_options[o_id][ element_list_name ]) then
|
||||
element = dialog.n_dialogs[d_id].d_options[o_id][ element_list_name ][ x_id ]
|
||||
end
|
||||
if(not(element) or data.variable_name) then
|
||||
element = {}
|
||||
element[ id_prefix.."variable"] = data.variable_name
|
||||
@ -1019,16 +1023,12 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields,
|
||||
end
|
||||
-- allow to delete unused variables
|
||||
elseif(fields.delete_unused_variable) then
|
||||
-- try to delete the variable
|
||||
local res = yl_speak_up.del_quest_variable(pname, data.variable_name)
|
||||
local text = "Deleted successfully."
|
||||
if(not(res)) then
|
||||
text = "Error: Variable could not be deleted."
|
||||
end
|
||||
-- try to delete the variable (button comes from the show usage of variable formspec)
|
||||
local text = yl_speak_up.del_quest_variable(pname, data.variable_name, nil)
|
||||
yl_speak_up.show_fs(player, "msg", {
|
||||
input_to = "yl_speak_up:"..formspec_input_to,
|
||||
formspec = "size[8,2]"..
|
||||
"label[0.2,0.5;Trying to delete variable \""..
|
||||
formspec = "size[10,2]"..
|
||||
"label[0.2,0.0;Trying to delete variable \""..
|
||||
minetest.formspec_escape(tostring(data.variable_name))..
|
||||
"\":\n"..text.."]"..
|
||||
"button[1.5,1.5;2,0.9;back_from_error_msg;Back]"})
|
||||
|
@ -73,16 +73,55 @@ end
|
||||
|
||||
|
||||
-- accidentally created or no longer needed variables need to be deleted somehow
|
||||
yl_speak_up.del_quest_variable = function(owner_name, variable_name)
|
||||
local k = yl_speak_up.restore_complete_var_name(variable_name, owner_name)
|
||||
-- force_delete if set, the variable will be deleted no matter what; this is for
|
||||
-- manual maintenance and not used in this mod
|
||||
yl_speak_up.del_quest_variable = function(owner_name, variable_name, force_delete)
|
||||
if(not(owner_name) or not(variable_name)) then
|
||||
return false
|
||||
return " could not be deleted. Parameters mismatch."
|
||||
end
|
||||
local var_name = yl_speak_up.restore_complete_var_name(variable_name, owner_name)
|
||||
if(not(var_name) or not(yl_speak_up.player_vars[ var_name ])) then
|
||||
return text.." does not exist."
|
||||
end
|
||||
local text = "Variable \""..minetest.formspec_escape(var_name).."\""
|
||||
-- forcefully delete - even if the variable is still beeing used
|
||||
if(force_delete) then
|
||||
yl_speak_up.player_vars[ k ] = nil
|
||||
yl_speak_up.save_quest_variables(true)
|
||||
return text.." deleted by force."
|
||||
end
|
||||
-- check if the player really owns the variable: not that important because only unused
|
||||
-- variables can be deleted;
|
||||
-- check if the variable is used by an NPC
|
||||
local var_data = yl_speak_up.player_vars[ var_name ]
|
||||
if(var_data["$META$"] and var_data["$META$"]["used_by_npc" ]
|
||||
and type(var_data["$META$"]["used_by_npc" ]) == "table") then
|
||||
for k, v in pairs(var_data["$META$"]["used_by_npc" ]) do
|
||||
if(k) then
|
||||
return text.." could not be deleted.\nIt is used by at least one NPC."
|
||||
end
|
||||
end
|
||||
end
|
||||
-- check if the variable is used by a node position (for quests)
|
||||
if(var_data["$META$"] and var_data["$META$"]["used_by_node_pos" ]
|
||||
and type(var_data["$META$"]["used_by_node_pos" ]) == "table") then
|
||||
for k, v in pairs(var_data["$META$"]["used_by_node_pos" ]) do
|
||||
if(k) then
|
||||
return text.." could not be deleted.\nIt is used by at least one node pos."
|
||||
end
|
||||
end
|
||||
end
|
||||
-- check if the variable has any values stored
|
||||
for k, v in pairs(var_data) do
|
||||
if(k and k ~= "$META$") then
|
||||
return text.." could not be deleted.\nIt contains at least one stored value."
|
||||
end
|
||||
end
|
||||
-- actually delete the variable
|
||||
yl_speak_up.player_vars[ k ] = nil
|
||||
yl_speak_up.player_vars[ var_name ] = nil
|
||||
-- a variable was deleted - that deserves a forced save
|
||||
yl_speak_up.save_quest_variables(true)
|
||||
return true
|
||||
return text.." deleted successfully."
|
||||
end
|
||||
|
||||
|
||||
@ -256,8 +295,25 @@ yl_speak_up.input_fs_manage_variables = function(player, formname, fields)
|
||||
var_name = ""
|
||||
end
|
||||
|
||||
-- revoke read or write access to a variable
|
||||
|
||||
-- delete (empty) variable
|
||||
if(fields
|
||||
and ((fields.delete_variable and fields.delete_variable ~= "")
|
||||
or (fields.delete_unused_variable and fields.delete_unused_variable ~= ""))
|
||||
and var_name) then
|
||||
local text = yl_speak_up.del_quest_variable(pname, var_name, nil)
|
||||
yl_speak_up.show_fs(player, "msg", {
|
||||
input_to = "yl_speak_up:manage_variables",
|
||||
formspec = "size[10,2]"..
|
||||
"label[0.2,0.0;Trying to delete variable \""..
|
||||
minetest.formspec_escape(tostring(var_name))..
|
||||
"\":\n"..text.."]"..
|
||||
"button[1.5,1.5;2,0.9;back_from_msg;Back]"})
|
||||
|
||||
return
|
||||
|
||||
-- revoke read or write access to a variable
|
||||
elseif(fields
|
||||
and ((fields.revoke_player_var_read_access and fields.revoke_player_var_read_access ~= "")
|
||||
or (fields.revoke_player_var_write_access and fields.revoke_player_var_write_access ~= ""))
|
||||
and var_name) then
|
||||
@ -372,7 +428,6 @@ yl_speak_up.input_fs_manage_variables = function(player, formname, fields)
|
||||
yl_speak_up.show_fs(player, "manage_variables")
|
||||
return
|
||||
|
||||
-- TODO: delete variable
|
||||
-- a var name was selected in the dropdown list
|
||||
elseif(fields and fields.list_var_names and fields.list_var_names ~= "") then
|
||||
-- show the same formspec again, with a diffrent variable selected
|
||||
@ -402,7 +457,8 @@ yl_speak_up.get_fs_manage_variables = function(player, param)
|
||||
-- "Add variable:" is currently selected
|
||||
local additional_buttons = ""
|
||||
if(not(yl_speak_up.speak_to[pname].tmp_index_variable)
|
||||
or yl_speak_up.speak_to[pname].tmp_index_variable == 1) then
|
||||
or yl_speak_up.speak_to[pname].tmp_index_variable == 1
|
||||
or not(var_list[ yl_speak_up.speak_to[pname].tmp_index_variable - 1])) then
|
||||
yl_speak_up.speak_to[pname].tmp_index_variable = 1
|
||||
additional_buttons = "button[11.4,1.9;2.5,0.9;add_variable;Create variable]"..
|
||||
"tooltip[add_variable;Create a new varialbe with the name\n"..
|
||||
@ -785,7 +841,8 @@ yl_speak_up.get_npc_users_of_variable = function(var_name)
|
||||
if(not(var_name)
|
||||
or not(yl_speak_up.player_vars[ var_name ])
|
||||
or not(yl_speak_up.player_vars[ var_name ][ "$META$"])
|
||||
or not(yl_speak_up.player_vars[ var_name ][ "$META$"][ "used_by_npc" ])) then
|
||||
or not(yl_speak_up.player_vars[ var_name ][ "$META$"][ "used_by_npc" ])
|
||||
or type(yl_speak_up.player_vars[ var_name ][ "$META$"][ "used_by_npc" ]) ~= "table") then
|
||||
return {}
|
||||
end
|
||||
local npc_list = {}
|
||||
@ -875,7 +932,6 @@ yl_speak_up.get_list_of_usage_of_variable = function(var_name, pname, check_prec
|
||||
minetest.colorize("#55FF55", tostring(count_changed).." (Ef)fects")..
|
||||
".]")
|
||||
elseif(not(is_internal_var)) then
|
||||
-- TODO: make delete_unused_variable work
|
||||
table.insert(formspec,
|
||||
"button[0.2,30.6;56.6,1.2;delete_unused_variable;"..
|
||||
minetest.formspec_escape("Delete this unused variable \""..
|
||||
|
Loading…
Reference in New Issue
Block a user