From a172f72c0a8ada8ea833cd476976ed6979b9b85c Mon Sep 17 00:00:00 2001 From: bi Date: Wed, 20 Jun 2018 00:26:33 +0300 Subject: [PATCH] VMF Mod Data: updated external change protection --- .../core/mutators/mutators_manager.lua | 2 +- .../mods/vmf/modules/core/toggling.lua | 2 +- vmf/scripts/mods/vmf/modules/vmf_mod_data.lua | 32 ++++++++++++++----- .../mods/vmf/modules/vmf_mod_manager.lua | 8 ++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/vmf/scripts/mods/vmf/modules/core/mutators/mutators_manager.lua b/vmf/scripts/mods/vmf/modules/core/mutators/mutators_manager.lua index b56b156..d3aa78a 100644 --- a/vmf/scripts/mods/vmf/modules/core/mutators/mutators_manager.lua +++ b/vmf/scripts/mods/vmf/modules/core/mutators/mutators_manager.lua @@ -338,7 +338,7 @@ local function initialize_mutator_config(mutator, _raw_config) end if raw_config.short_title == "" then raw_config.short_title = nil end - rawset(mutator._data, "mutator_config", {}) + vmf.set_internal_data(mutator, "mutator_config", {}) local config = mutator:get_internal_data("mutator_config") diff --git a/vmf/scripts/mods/vmf/modules/core/toggling.lua b/vmf/scripts/mods/vmf/modules/core/toggling.lua index 4d40d2b..c236545 100644 --- a/vmf/scripts/mods/vmf/modules/core/toggling.lua +++ b/vmf/scripts/mods/vmf/modules/core/toggling.lua @@ -8,7 +8,7 @@ local _disabled_mods = vmf:get("disabled_mods_list") or {} vmf.set_mod_state = function (mod, is_enabled, initial_call) - rawset(mod._data, "is_enabled", is_enabled) + vmf.set_internal_data(mod, "is_enabled", is_enabled) if is_enabled then mod:enable_all_hooks() diff --git a/vmf/scripts/mods/vmf/modules/vmf_mod_data.lua b/vmf/scripts/mods/vmf/modules/vmf_mod_data.lua index 90401bb..4c060b3 100644 --- a/vmf/scripts/mods/vmf/modules/vmf_mod_data.lua +++ b/vmf/scripts/mods/vmf/modules/vmf_mod_data.lua @@ -1,19 +1,35 @@ +-- ##################################################################################################################### +-- ##### Local functions ############################################################################################### +-- ##################################################################################################################### + +local function set_internal_data(mod, key, value) + getmetatable(mod._data).__index[key] = value +end + +-- ##################################################################################################################### +-- ##### VMFMod (not API) ############################################################################################## +-- ##################################################################################################################### + -- Defining VMFMod class. VMFMod = class(VMFMod) -- Creating mod data table when object of VMFMod class is created. function VMFMod:init(mod_name) - self._data = {} - setmetatable(self._data, { + if mod_name == "VMF" then + self.set_internal_data = set_internal_data + end + + self._data = setmetatable({}, { + __index = {}, __newindex = function(t_, k) self:warning("Attempt to change internal mod data value (\"%s\"). Changing internal mod data is forbidden.", k) end }) - rawset(self._data, "name", mod_name) - rawset(self._data, "readable_name", mod_name) - rawset(self._data, "is_enabled", true) - rawset(self._data, "is_togglable", false) - rawset(self._data, "is_mutator", false) + set_internal_data(self, "name", mod_name) + set_internal_data(self, "readable_name", mod_name) + set_internal_data(self, "is_enabled", true) + set_internal_data(self, "is_togglable", false) + set_internal_data(self, "is_mutator", false) end -- ##################################################################################################################### @@ -55,7 +71,7 @@ function VMFMod:is_enabled() return self._data.is_enabled end function VMFMod:is_togglable() - return self._data.is_togglable + return self._data.is_togglable end function VMFMod:is_mutator() return self._data.is_mutator diff --git a/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua b/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua index 0376590..9171698 100644 --- a/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua +++ b/vmf/scripts/mods/vmf/modules/vmf_mod_manager.lua @@ -109,11 +109,11 @@ function vmf.initialize_mod_data(mod, mod_data) end if mod_data.name then - rawset(mod._data, "readable_name", mod_data.name) + vmf.set_internal_data(mod, "readable_name", mod_data.name) end - rawset(mod._data, "description", mod_data.description) - rawset(mod._data, "is_togglable", mod_data.is_togglable or mod_data.is_mutator) - rawset(mod._data, "is_mutator", mod_data.is_mutator) + vmf.set_internal_data(mod, "description", mod_data.description) + vmf.set_internal_data(mod, "is_togglable", mod_data.is_togglable or mod_data.is_mutator) + vmf.set_internal_data(mod, "is_mutator", mod_data.is_mutator) if mod_data.is_mutator then vmf.register_mod_as_mutator(mod, mod_data.mutator_settings)