From a2d680eda8bc6d19da287ddacfdf7f3ba67f0911 Mon Sep 17 00:00:00 2001 From: Athozus Date: Sun, 17 Dec 2023 22:31:17 +0100 Subject: [PATCH] Add support for shared settings --- storage.lua | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/storage.lua b/storage.lua index ec52933..fb69f11 100644 --- a/storage.lua +++ b/storage.lua @@ -393,24 +393,33 @@ function mail.extractMaillists(receivers_string, maillists_owner) return receivers end -function mail.get_setting_default_value(setting_name) - return mail.settings[setting_name].default +function mail.get_setting_default_value(key) + return mail.settings[key].default end -function mail.get_setting(playername, setting_name) +function mail.get_setting(playername, key) local entry = mail.get_storage_entry(playername) - if entry.settings[setting_name] ~= nil then - return entry.settings[setting_name] - else - return mail.get_setting_default_value(setting_name) + local value = mail.get_setting_default_value(key) + if entry.settings[key] ~= nil then + value = entry.settings[key] end + + if mail.settings[key].sync then -- in case this setting is shared with another mod + value = mail.settings[key].sync(playername, key) -- get new value + mail.set_setting(playername, key, value, false) -- update the setting in mail storage and don't transfer it again + end + + return value end -- add or update a setting -function mail.set_setting(playername, key, value) +function mail.set_setting(playername, key, value, not_transfer) local entry = mail.get_storage_entry(playername) entry.settings[key] = value mail.set_storage_entry(playername, entry) + if not not_transfer and mail.settings[key].transfer then -- in case this setting is shared with another mod + mail.settings[key].transfer(playername, key, value) + end end function mail.reset_settings(playername)