forked from your-land-mirror/yl_speak_up
added yl_speak_up.get_variable_metadata for cleaner access to metadata
This commit is contained in:
parent
4f524f7fc1
commit
372a37f8e6
106
quest_api.lua
106
quest_api.lua
@ -94,22 +94,15 @@ yl_speak_up.del_quest_variable = function(owner_name, variable_name, force_delet
|
||||
-- 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
|
||||
local npc_users = yl_speak_up.get_variable_metadata(var_name, "used_by_npc")
|
||||
if(npc_users and #npc_users > 0) then
|
||||
return text.." could not be deleted.\nIt is used by "..tostring(#npc_users).." NPC."
|
||||
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
|
||||
local node_pos_users = yl_speak_up.get_variable_metadata(var_name, "used_by_node_pos")
|
||||
if(node_pos_users and #node_pos_users > 0) then
|
||||
return text.." could not be deleted.\nIt is used by "..tostring(#node_pos_users)..
|
||||
" node positions (quest)."
|
||||
end
|
||||
-- check if the variable has any values stored
|
||||
for k, v in pairs(var_data) do
|
||||
@ -487,8 +480,8 @@ yl_speak_up.get_fs_manage_variables = function(player, param)
|
||||
"you entered in the field to the left *write* access\n"..
|
||||
"to your variable.]"
|
||||
end
|
||||
local list_of_npc_users = ""
|
||||
local list_of_node_pos_users = ""
|
||||
local list_of_npc_users = "- none -"
|
||||
local list_of_node_pos_users = "- none -"
|
||||
-- expand name of variable k again
|
||||
local k_long = yl_speak_up.add_pname_to_var(k, pname)
|
||||
-- which npc and which node_pos use this variable? create a list for display
|
||||
@ -497,38 +490,17 @@ yl_speak_up.get_fs_manage_variables = function(player, param)
|
||||
if(k_long
|
||||
and yl_speak_up.player_vars[ k_long ]
|
||||
and yl_speak_up.player_vars[ k_long ][ "$META$"]) then
|
||||
local t = yl_speak_up.player_vars[ k_long ][ "$META$"]["used_by_npc" ]
|
||||
if(type(t) ~= "table") then
|
||||
t = {}
|
||||
local npc_users = yl_speak_up.get_variable_metadata(k_long, "used_by_npc")
|
||||
c1 = #npc_users
|
||||
if(npc_users and c1 > 0) then
|
||||
list_of_npc_users = minetest.formspec_escape(table.concat(npc_users, ", "))
|
||||
end
|
||||
for key, v in pairs(t or {}) do
|
||||
if(c1==0) then
|
||||
list_of_npc_users = minetest.formspec_escape(key)
|
||||
else
|
||||
list_of_npc_users = list_of_npc_users..", "..
|
||||
minetest.formspec_escape(key)
|
||||
end
|
||||
c1 = c1 + 1
|
||||
local node_pos_users = yl_speak_up.get_variable_metadata(k_long, "used_by_node_pos")
|
||||
c2 = #node_pos_users
|
||||
if(node_pos_users and c2 > 0) then
|
||||
list_of_node_pos_users = minetest.formspec_escape(table.concat(
|
||||
node_pos_users, ", "))
|
||||
end
|
||||
local t = yl_speak_up.player_vars[ k_long ][ "$META$"]["used_by_node_pos" ]
|
||||
if(type(t) ~= "table") then
|
||||
t = {}
|
||||
end
|
||||
for key, v in pairs(t or {}) do
|
||||
if(c2==0) then
|
||||
list_of_node_pos_users = minetest.formspec_escape(key)
|
||||
else
|
||||
list_of_node_pos_users = list_of_node_pos_users..", "..
|
||||
minetest.formspec_escape(key)
|
||||
end
|
||||
c2 = c2 + 1
|
||||
end
|
||||
end
|
||||
if(list_of_npc_users == "") then
|
||||
list_of_npc_users = "- none -"
|
||||
end
|
||||
if(list_of_node_pos_users == "") then
|
||||
list_of_node_pos_users = "- none -"
|
||||
end
|
||||
additional_buttons = "button[11.4,1.9;2.5,0.9;show_var_usage;Where is it used?]"..
|
||||
"tooltip[show_var_usage;Show which NPC use this variable in which context.]"..
|
||||
@ -799,10 +771,9 @@ yl_speak_up.update_stored_npc_data = function(n_id, dialog)
|
||||
-- make sure all variables have a metadata field
|
||||
for k, v in pairs(yl_speak_up.player_vars) do
|
||||
if( yl_speak_up.player_vars[ k ][ "$META$" ]
|
||||
and yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc) then
|
||||
if(type(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc) ~= "table") then
|
||||
yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc = {}
|
||||
end
|
||||
and yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc
|
||||
and type(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc) == "table"
|
||||
and yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc[ n_id ]) then
|
||||
-- delete old entries (the correct new ones will be set shortly after this)
|
||||
yl_speak_up.player_vars[ k ][ "$META$"].used_by_npc[ n_id ] = nil
|
||||
end
|
||||
@ -818,7 +789,11 @@ yl_speak_up.update_stored_npc_data = function(n_id, dialog)
|
||||
if(not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"] = { used_by_npc = {} }
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ "used_by_npc" ][ n_id ] = true
|
||||
if(not(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc)
|
||||
or type(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc) ~= "table") then
|
||||
yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc = {}
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"].used_by_npc[ n_id ] = true
|
||||
end
|
||||
for k, v in pairs(variables_e) do
|
||||
-- if the variable does not exist: create it
|
||||
@ -828,7 +803,11 @@ yl_speak_up.update_stored_npc_data = function(n_id, dialog)
|
||||
if(not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"] = { used_by_npc = {} }
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ "used_by_npc" ][ n_id ] = true
|
||||
if(not(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc)
|
||||
or type(yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc) ~= "table") then
|
||||
yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc = {}
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"].used_by_npc[ n_id ] = true
|
||||
end
|
||||
-- force writing the data
|
||||
yl_speak_up.save_quest_variables(true)
|
||||
@ -836,21 +815,22 @@ end
|
||||
|
||||
|
||||
-- which NPC do use this variable?
|
||||
yl_speak_up.get_npc_users_of_variable = function(var_name)
|
||||
yl_speak_up.get_variable_metadata = function(var_name, meta_name)
|
||||
-- no variable, or nothing stored? then it's not used by any NPC either
|
||||
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" ])
|
||||
or type(yl_speak_up.player_vars[ var_name ][ "$META$"][ "used_by_npc" ]) ~= "table") then
|
||||
or not(meta_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$"][ meta_name ])
|
||||
or type(yl_speak_up.player_vars[ var_name ][ "$META$"][ meta_name ]) ~= "table") then
|
||||
return {}
|
||||
end
|
||||
local npc_list = {}
|
||||
for n_id, v in pairs(yl_speak_up.player_vars[ var_name ][ "$META$"][ "used_by_npc" ]) do
|
||||
table.insert(npc_list, n_id)
|
||||
local meta_list = {}
|
||||
for k, v in pairs(yl_speak_up.player_vars[ var_name ][ "$META$"][ meta_name ]) do
|
||||
table.insert(meta_list, k)
|
||||
end
|
||||
table.sort(npc_list)
|
||||
return npc_list
|
||||
table.sort(meta_list)
|
||||
return meta_list
|
||||
end
|
||||
|
||||
|
||||
@ -863,7 +843,7 @@ yl_speak_up.get_list_of_usage_of_variable = function(var_name, pname, check_prec
|
||||
end
|
||||
-- which NPC (might be several) is using this variable?
|
||||
-- TODO: ..or if the player at least is owner of these NPC or has extended privs
|
||||
local npc_list = yl_speak_up.get_npc_users_of_variable(var_name)
|
||||
local npc_list = yl_speak_up.get_variable_metadata(var_name, "used_by_npc")
|
||||
-- list of all relevant preconditions, actions and effects
|
||||
local res = {}
|
||||
local count_read = 0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user