forked from your-land-mirror/yl_speak_up
master #11
@ -26,13 +26,26 @@ yl_speak_up.player_vars = {}
|
||||
-- store when player_vars was last saved to disc
|
||||
yl_speak_up.player_vars_last_save_time = 0
|
||||
|
||||
-- do not save this data every time it's changed - reduce disk writes
|
||||
yl_speak_up.quest_var_saving_pending = 0
|
||||
|
||||
-- save the data to disc; either if force_save is set or enough time has passed
|
||||
yl_speak_up.save_quest_variables = function(force_save)
|
||||
if(not(force_save)
|
||||
and (yl_speak_up.player_vars_last_save_time + yl_speak_up.player_vars_min_save_time >
|
||||
math.floor(minetest.get_us_time()/1000000))) then
|
||||
if(not(force_save)) then
|
||||
if(yl_speak_up.quest_var_saving_pending > minetest.get_us_time()) then
|
||||
-- we are waiting a bit, hoping to catch more changes before next write
|
||||
return
|
||||
end
|
||||
if(yl_speak_up.player_vars_min_save_time < 10) then
|
||||
yl_speak_up.player_vars_min_save_time = 10
|
||||
end
|
||||
-- save in yl_speak_up.player_vars_min_save_time seconds
|
||||
yl_speak_up.quest_var_saving_pending = minetest.get_us_time() +
|
||||
yl_speak_up.player_vars_min_save_time * 1000000
|
||||
core.after(yl_speak_up.player_vars_min_save_time, yl_speak_up.save_quest_variables, true)
|
||||
return
|
||||
end
|
||||
yl_speak_up.quest_var_saving_pending = 0
|
||||
local json = minetest.write_json( yl_speak_up.player_vars )
|
||||
-- actually store it on disk
|
||||
minetest.safe_file_write(yl_speak_up.worldpath..yl_speak_up.player_vars_save_file..".json", json)
|
||||
@ -185,6 +198,10 @@ yl_speak_up.set_quest_variable_value = function(player_name, variable_name, new_
|
||||
if(new_value ~= nil) then
|
||||
new_value = tostring(new_value)
|
||||
end
|
||||
-- no need to change anything if the value is unchanged
|
||||
if(yl_speak_up.player_vars[ k ][ player_name ] == new_value) then
|
||||
return true
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ player_name ] = new_value
|
||||
-- a quest variable was changed - save that to disc (but no need to force it)
|
||||
yl_speak_up.save_quest_variables(false)
|
||||
@ -363,28 +380,42 @@ yl_speak_up.set_variable_metadata = function(k, pname, meta_name, entry_name, ne
|
||||
if(not(yl_speak_up.player_vars[ k ])) then
|
||||
return false
|
||||
end
|
||||
changed = nil
|
||||
-- make sure all the necessary tables exist
|
||||
if( not(yl_speak_up.player_vars[ k ][ "$META$" ])) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$" ] = { meta_name = {} }
|
||||
changed = true
|
||||
end
|
||||
|
||||
-- var_type (the type of the variable) is a single string
|
||||
if(meta_name == "var_type") then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] = new_value
|
||||
if(yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] ~= new_value) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] = new_value
|
||||
changed = true
|
||||
end
|
||||
elseif(meta_name == "default_value") then
|
||||
-- reset default value to nil with empty string:
|
||||
if(new_value == "") then
|
||||
new_value = nil
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] = new_value
|
||||
if(yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] ~= new_value) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ] = new_value
|
||||
changed = true
|
||||
end
|
||||
else
|
||||
if( not(yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ])
|
||||
or type(yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ]) ~= "table") then
|
||||
yl_speak_up.player_vars[ k ][ "$META$" ][ meta_name ] = {}
|
||||
changed = true
|
||||
end
|
||||
if(yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ][ entry_name ] ~= new_values) then
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ][ entry_name ] = new_value
|
||||
changed = true
|
||||
end
|
||||
yl_speak_up.player_vars[ k ][ "$META$"][ meta_name ][ entry_name ] = new_value
|
||||
end
|
||||
yl_speak_up.save_quest_variables(true)
|
||||
if(changed) then
|
||||
yl_speak_up.save_quest_variables(true)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user