forked from your-land-mirror/yl_speak_up
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
|
-- 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
|
elseif(fields.show_var_usage_edit_element and x_id) then
|
||||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
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
|
if(not(element) or data.variable_name) then
|
||||||
element = {}
|
element = {}
|
||||||
element[ id_prefix.."variable"] = data.variable_name
|
element[ id_prefix.."variable"] = data.variable_name
|
||||||
@ -1019,16 +1023,12 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields,
|
|||||||
end
|
end
|
||||||
-- allow to delete unused variables
|
-- allow to delete unused variables
|
||||||
elseif(fields.delete_unused_variable) then
|
elseif(fields.delete_unused_variable) then
|
||||||
-- try to delete the variable
|
-- try to delete the variable (button comes from the show usage of variable formspec)
|
||||||
local res = yl_speak_up.del_quest_variable(pname, data.variable_name)
|
local text = yl_speak_up.del_quest_variable(pname, data.variable_name, nil)
|
||||||
local text = "Deleted successfully."
|
|
||||||
if(not(res)) then
|
|
||||||
text = "Error: Variable could not be deleted."
|
|
||||||
end
|
|
||||||
yl_speak_up.show_fs(player, "msg", {
|
yl_speak_up.show_fs(player, "msg", {
|
||||||
input_to = "yl_speak_up:"..formspec_input_to,
|
input_to = "yl_speak_up:"..formspec_input_to,
|
||||||
formspec = "size[8,2]"..
|
formspec = "size[10,2]"..
|
||||||
"label[0.2,0.5;Trying to delete variable \""..
|
"label[0.2,0.0;Trying to delete variable \""..
|
||||||
minetest.formspec_escape(tostring(data.variable_name))..
|
minetest.formspec_escape(tostring(data.variable_name))..
|
||||||
"\":\n"..text.."]"..
|
"\":\n"..text.."]"..
|
||||||
"button[1.5,1.5;2,0.9;back_from_error_msg;Back]"})
|
"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
|
-- accidentally created or no longer needed variables need to be deleted somehow
|
||||||
yl_speak_up.del_quest_variable = function(owner_name, variable_name)
|
-- force_delete if set, the variable will be deleted no matter what; this is for
|
||||||
local k = yl_speak_up.restore_complete_var_name(variable_name, owner_name)
|
-- 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
|
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
|
end
|
||||||
-- actually delete the variable
|
-- 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
|
-- a variable was deleted - that deserves a forced save
|
||||||
yl_speak_up.save_quest_variables(true)
|
yl_speak_up.save_quest_variables(true)
|
||||||
return true
|
return text.." deleted successfully."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -256,8 +295,25 @@ yl_speak_up.input_fs_manage_variables = function(player, formname, fields)
|
|||||||
var_name = ""
|
var_name = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
-- revoke read or write access to a variable
|
|
||||||
|
-- delete (empty) variable
|
||||||
if(fields
|
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 ~= "")
|
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 ~= ""))
|
or (fields.revoke_player_var_write_access and fields.revoke_player_var_write_access ~= ""))
|
||||||
and var_name) then
|
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")
|
yl_speak_up.show_fs(player, "manage_variables")
|
||||||
return
|
return
|
||||||
|
|
||||||
-- TODO: delete variable
|
|
||||||
-- a var name was selected in the dropdown list
|
-- a var name was selected in the dropdown list
|
||||||
elseif(fields and fields.list_var_names and fields.list_var_names ~= "") then
|
elseif(fields and fields.list_var_names and fields.list_var_names ~= "") then
|
||||||
-- show the same formspec again, with a diffrent variable selected
|
-- 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
|
-- "Add variable:" is currently selected
|
||||||
local additional_buttons = ""
|
local additional_buttons = ""
|
||||||
if(not(yl_speak_up.speak_to[pname].tmp_index_variable)
|
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
|
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]"..
|
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"..
|
"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)
|
if(not(var_name)
|
||||||
or not(yl_speak_up.player_vars[ 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$"])
|
||||||
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 {}
|
return {}
|
||||||
end
|
end
|
||||||
local npc_list = {}
|
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")..
|
minetest.colorize("#55FF55", tostring(count_changed).." (Ef)fects")..
|
||||||
".]")
|
".]")
|
||||||
elseif(not(is_internal_var)) then
|
elseif(not(is_internal_var)) then
|
||||||
-- TODO: make delete_unused_variable work
|
|
||||||
table.insert(formspec,
|
table.insert(formspec,
|
||||||
"button[0.2,30.6;56.6,1.2;delete_unused_variable;"..
|
"button[0.2,30.6;56.6,1.2;delete_unused_variable;"..
|
||||||
minetest.formspec_escape("Delete this unused variable \""..
|
minetest.formspec_escape("Delete this unused variable \""..
|
||||||
|
Loading…
Reference in New Issue
Block a user