interactionUtil = interactionUtil or {} -- Makes a table that returns the value of the provided getter function when it is given the key as an argument, -- and it caches this result, such that the getter function is only called once per key. function interactionUtil.makeTableCache(getterFunc) local obj = {} obj.cache = {} local mt = { __index = function(table, key) if obj.cache[key] == nil then obj.cache[key] = getterFunc(key) end return obj.cache[key] end } setmetatable(obj, mt) return obj end -- Makes a nested cache with the a handler container being the first level, and a variable name for the second level. -- This is done to avoid fetching the same variables from char_vars multiple times during the same NPC interaction function interactionUtil.makeContainerVarCache(player) return interactionUtil.makeTableCache(function(container) return interactionUtil.makeTableCache(function(varname) return container:getVar(player, varname) end) end) end