added yl_speak_up.set_variable_metadata for cleaner setting of metadata

This commit is contained in:
Sokomine 2021-07-31 20:53:53 +02:00
parent 372a37f8e6
commit 9856842074

View File

@ -646,27 +646,34 @@ end
-- if true: grant access -- if true: grant access
-- returns true if the variable was found -- returns true if the variable was found
yl_speak_up.manage_access_to_quest_variable = function(k, pname, grant_to_pname, what_to_grant, do_grant) yl_speak_up.manage_access_to_quest_variable = function(k, pname, grant_to_pname, what_to_grant, do_grant)
k = yl_speak_up.add_pname_to_var(k, pname)
-- grant or revoke priv
if(not(do_grant)) then
do_grant = nil
end
-- only read and write access can be granted -- only read and write access can be granted
if(not(what_to_grant) or (what_to_grant ~= "read_access" and what_to_grant ~= "write_access")) then if(not(what_to_grant) or (what_to_grant ~= "read_access" and what_to_grant ~= "write_access")) then
return false return false
end end
return yl_speak_up.set_variable_metadata(k, pname, what_to_grant, grant_to_pname, do_grant)
end
-- a more general way of setting metadata for variables
yl_speak_up.set_variable_metadata = function(k, pname, meta_name, entry_name, new_value)
k = yl_speak_up.add_pname_to_var(k, pname)
-- delete/unset
if(not(new_value)) then
new_value = nil
end
-- the variable needs to exist -- the variable needs to exist
if(not(yl_speak_up.player_vars[ k ])) then if(not(yl_speak_up.player_vars[ k ])) then
return false return false
end end
-- make sure all the necessary tables exist -- make sure all the necessary tables exist
if(not(yl_speak_up.player_vars[ k ][ "$META$" ])) then if( not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
yl_speak_up.player_vars[ k ][ "$META$"] = { what_to_grant = {} } yl_speak_up.player_vars[ k ][ "$META$" ] = { meta_name = {} }
end end
if(not(yl_speak_up.player_vars[ k ][ "$META$" ][ what_to_grant ])) then if( not(yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ])
yl_speak_up.player_vars[ k ][ "$META$" ][ what_to_grant ] = {} or type(yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ]) ~= "table") then
yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ] = {}
end end
yl_speak_up.player_vars[ k ][ "$META$"][ what_to_grant ][ grant_to_pname ] = do_grant yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ][ entry_name ] = new_value
yl_speak_up.save_quest_variables(true) yl_speak_up.save_quest_variables(true)
return true return true
end end
@ -768,46 +775,20 @@ yl_speak_up.update_stored_npc_data = function(n_id, dialog)
last_modified = os.date(), last_modified = os.date(),
} }
-- make sure all variables have a metadata field -- delete all old entries that are not longer needed
for k, v in pairs(yl_speak_up.player_vars) do for k, v in pairs(yl_speak_up.player_vars) do
if( yl_speak_up.player_vars[ k ][ "$META$" ] if(not(variables_p[ k ]) and not(variables_e[ k ])) then
and yl_speak_up.player_vars[ k ][ "$META$" ].used_by_npc yl_speak_up.set_variable_metadata(k, pname, "used_by_npc", n_id, false)
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 end
end end
-- save in the variables' metadata which NPC uses it -- save in the variables' metadata which NPC uses it
-- (this is what we're mostly after - know which variable is used in which NPC) -- (this is what we're mostly after - know which variable is used in which NPC)
for k, v in pairs(variables_p) do for k, v in pairs(variables_p) do
-- if the variable does not exist: create it yl_speak_up.set_variable_metadata(k, pname, "used_by_npc", n_id, true)
if(not(yl_speak_up.player_vars[ k ])) then
yl_speak_up.player_vars[ k ] = {}
end
if(not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
yl_speak_up.player_vars[ k ][ "$META$"] = { used_by_npc = {} }
end
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 end
for k, v in pairs(variables_e) do for k, v in pairs(variables_e) do
-- if the variable does not exist: create it yl_speak_up.set_variable_metadata(k, pname, "used_by_npc", n_id, true)
if(not(yl_speak_up.player_vars[ k ])) then
yl_speak_up.player_vars[ k ] = {}
end
if(not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
yl_speak_up.player_vars[ k ][ "$META$"] = { used_by_npc = {} }
end
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 end
-- force writing the data -- force writing the data
yl_speak_up.save_quest_variables(true) yl_speak_up.save_quest_variables(true)