<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://deadlock.wiki/Module:MiscData?action=history&amp;feed=atom</id>
	<title>Module:MiscData - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://deadlock.wiki/Module:MiscData?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:MiscData?action=history"/>
	<updated>2026-09-14T08:24:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://deadlock.wiki/Module:MiscData?diff=73910&amp;oldid=prev</id>
		<title>Gammaton32: Created page with &quot;local p = {}  -- Load data and utility modules local misc_data = mw.loadJsonData(&quot;Data:MiscData.json&quot;) local util_module = require(&#039;Module:Utilities&#039;)  -- returns the entire data table for Misc data, used by other Lua modules function p.get_misc_data(name)     if not name or name == &#039;&#039; then         return nil     end     return misc_data[name] end  -- Retrieves a specific stat value for Misc. Handles both simple and nested calls. -- {{#invoke:MiscData|get_misc_var|MISC_K...&quot;</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:MiscData?diff=73910&amp;oldid=prev"/>
		<updated>2026-05-27T16:02:10Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}  -- Load data and utility modules local misc_data = mw.loadJsonData(&amp;quot;Data:MiscData.json&amp;quot;) local util_module = require(&amp;#039;Module:Utilities&amp;#039;)  -- returns the entire data table for Misc data, used by other Lua modules function p.get_misc_data(name)     if not name or name == &amp;#039;&amp;#039; then         return nil     end     return misc_data[name] end  -- Retrieves a specific stat value for Misc. Handles both simple and nested calls. -- {{#invoke:MiscData|get_misc_var|MISC_K...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Load data and utility modules&lt;br /&gt;
local misc_data = mw.loadJsonData(&amp;quot;Data:MiscData.json&amp;quot;)&lt;br /&gt;
local util_module = require(&amp;#039;Module:Utilities&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- returns the entire data table for Misc data, used by other Lua modules&lt;br /&gt;
function p.get_misc_data(name)&lt;br /&gt;
    if not name or name == &amp;#039;&amp;#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    return misc_data[name]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Retrieves a specific stat value for Misc. Handles both simple and nested calls.&lt;br /&gt;
-- {{#invoke:MiscData|get_misc_var|MISC_KEY|STAT_KEY_1|STAT_KEY_2|...|SIG_FIGS}}&lt;br /&gt;
p.get_misc_var = function(frame)&lt;br /&gt;
    -- Safer argument handling for both live and debug environments&lt;br /&gt;
    local args = {}&lt;br /&gt;
    if frame.getParent then&lt;br /&gt;
        local parent_args = frame:getParent().args&lt;br /&gt;
        for k, v in pairs(parent_args) do args[k] = v end&lt;br /&gt;
    end&lt;br /&gt;
    -- Direct args from #invoke or the debug table overwrite parent args&lt;br /&gt;
    for k, v in pairs(frame.args) do args[k] = v end&lt;br /&gt;
&lt;br /&gt;
    local misc_name = args[1] and mw.text.trim(args[1]) or nil&lt;br /&gt;
    if not misc_name or misc_name == &amp;#039;&amp;#039; then&lt;br /&gt;
        return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Misc name not provided.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local misc = misc_data[misc_name]&lt;br /&gt;
    if not misc then&lt;br /&gt;
        return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: misc &amp;quot;&amp;#039; .. misc_name .. &amp;#039;&amp;quot; not found.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local current_value = misc&lt;br /&gt;
    local last_key_index = 1&lt;br /&gt;
    local path = {misc_name} -- Track the path for better error messages&lt;br /&gt;
&lt;br /&gt;
    -- Traverse through the arguments to find the nested value&lt;br /&gt;
    for i = 2, #args do&lt;br /&gt;
        local key = args[i] and mw.text.trim(args[i]) or nil&lt;br /&gt;
        if not key or key == &amp;#039;&amp;#039; then break end&lt;br /&gt;
&lt;br /&gt;
        -- Check if this might be the sig_figs argument (numeric on a non-table)&lt;br /&gt;
        if tonumber(key) and type(current_value) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if type(current_value) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Invalid path at &amp;quot;&amp;#039; .. table.concat(path, &amp;#039;.&amp;#039;) .. &amp;#039;&amp;quot;. Tried to index a &amp;#039; .. type(current_value) .. &amp;#039; value.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- Try string key first&lt;br /&gt;
        local next_value = current_value[key]&lt;br /&gt;
        &lt;br /&gt;
        -- If nil, try numeric key&lt;br /&gt;
        if next_value == nil then&lt;br /&gt;
            local num_key = tonumber(key)&lt;br /&gt;
            if num_key then&lt;br /&gt;
                next_value = current_value[num_key]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if next_value == nil then&lt;br /&gt;
            return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Key &amp;quot;&amp;#039; .. key .. &amp;#039;&amp;quot; not found in path &amp;quot;&amp;#039; .. table.concat(path, &amp;#039;.&amp;#039;) .. &amp;#039;&amp;quot;.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        current_value = next_value&lt;br /&gt;
        table.insert(path, key)&lt;br /&gt;
        last_key_index = i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Handle sig_figs if provided&lt;br /&gt;
    local sig_figs_arg = args[last_key_index + 1]&lt;br /&gt;
    local sig_figs = sig_figs_arg and tonumber(mw.text.trim(sig_figs_arg)) or nil&lt;br /&gt;
    &lt;br /&gt;
    if sig_figs then&lt;br /&gt;
        if type(current_value) ~= &amp;quot;number&amp;quot; then&lt;br /&gt;
            return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Cannot apply sig_figs to non-numeric value at &amp;quot;&amp;#039; .. table.concat(path, &amp;#039;.&amp;#039;) .. &amp;#039;&amp;quot; (type: &amp;#039; .. type(current_value) .. &amp;#039;).&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        current_value = util_module.round_to_sig_fig(current_value, sig_figs)&lt;br /&gt;
        if current_value == nil then&lt;br /&gt;
            return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Rounding failed for value at &amp;quot;&amp;#039; .. table.concat(path, &amp;#039;.&amp;#039;) .. &amp;#039;&amp;quot;.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Convert tables/booleans to strings for display&lt;br /&gt;
    if type(current_value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Path &amp;quot;&amp;#039; .. table.concat(path, &amp;#039;.&amp;#039;) .. &amp;#039;&amp;quot; points to a table/object. Specify a deeper path to get a value.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    elseif type(current_value) == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
        return tostring(current_value)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return current_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Gammaton32</name></author>
	</entry>
</feed>