<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AOurania_Altar_Table</id>
	<title>Module:Ourania Altar Table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AOurania_Altar_Table"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Ourania_Altar_Table&amp;action=history"/>
	<updated>2026-05-05T16:28:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Ourania_Altar_Table&amp;diff=35073&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local p = {}  local geprice = require(&#039;Module:Exchange&#039;)._price local coins = require(&#039;Module:Coins&#039;)._amount local chart = require(&#039;Module:Chart data&#039;)  local rune_order = {     &quot;Soul&quot;, &quot;Blood&quot;, &quot;Death&quot;, &quot;Law&quot;, &quot;Nature&quot;, &quot;Astral&quot;, &quot;Chaos&quot;, &quot;Cosmic&quot;,      &quot;Body&quot;, &quot;Fire&quot;, &quot;Earth&quot;, &quot;Water&quot;, &quot;Mind&quot;, &quot;Air&quot; }  local rune_exp = {     Air = 5,     Mind = 5.5,     Water = 6,     Earth = 6.5,     Fire = 7,     Body = 7.5,     Cosmic = 8,     Chaos = 8.5,     Astral = 8.7,     Nat...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Ourania_Altar_Table&amp;diff=35073&amp;oldid=prev"/>
		<updated>2024-10-16T23:12:49Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}  local geprice = require(&amp;#039;Module:Exchange&amp;#039;)._price local coins = require(&amp;#039;Module:Coins&amp;#039;)._amount local chart = require(&amp;#039;Module:Chart data&amp;#039;)  local rune_order = {     &amp;quot;Soul&amp;quot;, &amp;quot;Blood&amp;quot;, &amp;quot;Death&amp;quot;, &amp;quot;Law&amp;quot;, &amp;quot;Nature&amp;quot;, &amp;quot;Astral&amp;quot;, &amp;quot;Chaos&amp;quot;, &amp;quot;Cosmic&amp;quot;,      &amp;quot;Body&amp;quot;, &amp;quot;Fire&amp;quot;, &amp;quot;Earth&amp;quot;, &amp;quot;Water&amp;quot;, &amp;quot;Mind&amp;quot;, &amp;quot;Air&amp;quot; }  local rune_exp = {     Air = 5,     Mind = 5.5,     Water = 6,     Earth = 6.5,     Fire = 7,     Body = 7.5,     Cosmic = 8,     Chaos = 8.5,     Astral = 8.7,     Nat...&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;
local geprice = require(&amp;#039;Module:Exchange&amp;#039;)._price&lt;br /&gt;
local coins = require(&amp;#039;Module:Coins&amp;#039;)._amount&lt;br /&gt;
local chart = require(&amp;#039;Module:Chart data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local rune_order = {&lt;br /&gt;
    &amp;quot;Soul&amp;quot;, &amp;quot;Blood&amp;quot;, &amp;quot;Death&amp;quot;, &amp;quot;Law&amp;quot;, &amp;quot;Nature&amp;quot;, &amp;quot;Astral&amp;quot;, &amp;quot;Chaos&amp;quot;, &amp;quot;Cosmic&amp;quot;, &lt;br /&gt;
    &amp;quot;Body&amp;quot;, &amp;quot;Fire&amp;quot;, &amp;quot;Earth&amp;quot;, &amp;quot;Water&amp;quot;, &amp;quot;Mind&amp;quot;, &amp;quot;Air&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local rune_exp = {&lt;br /&gt;
    Air = 5,&lt;br /&gt;
    Mind = 5.5,&lt;br /&gt;
    Water = 6,&lt;br /&gt;
    Earth = 6.5,&lt;br /&gt;
    Fire = 7,&lt;br /&gt;
    Body = 7.5,&lt;br /&gt;
    Cosmic = 8,&lt;br /&gt;
    Chaos = 8.5,&lt;br /&gt;
    Astral = 8.7,&lt;br /&gt;
    Nature = 9,&lt;br /&gt;
    Law = 9.5,&lt;br /&gt;
    Death = 10,&lt;br /&gt;
    Blood = 10.5,&lt;br /&gt;
    Soul = 11&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local thresholds = {&lt;br /&gt;
	[&amp;quot;1-9&amp;quot;] = {&lt;br /&gt;
		Soul = 2,&lt;br /&gt;
        Blood = 7,&lt;br /&gt;
        Death = 15,&lt;br /&gt;
        Law = 30,&lt;br /&gt;
        Nature = 60,&lt;br /&gt;
        Astral = 105,&lt;br /&gt;
        Chaos = 165,&lt;br /&gt;
        Cosmic = 250,&lt;br /&gt;
        Body = 400,&lt;br /&gt;
        Fire = 700,&lt;br /&gt;
        Earth = 1300,&lt;br /&gt;
        Water = 2500,&lt;br /&gt;
        Mind = 5000,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;10-19&amp;quot;] = {&lt;br /&gt;
		Soul = 3,&lt;br /&gt;
        Blood = 9,&lt;br /&gt;
        Death = 21,&lt;br /&gt;
        Law = 45,&lt;br /&gt;
        Nature = 85,&lt;br /&gt;
        Astral = 145,&lt;br /&gt;
        Chaos = 225,&lt;br /&gt;
        Cosmic = 400,&lt;br /&gt;
        Body = 1000,&lt;br /&gt;
        Fire = 2200,&lt;br /&gt;
        Earth = 4600,&lt;br /&gt;
        Water = 6700,&lt;br /&gt;
        Mind = 8500,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;20-29&amp;quot;] = {&lt;br /&gt;
		Soul = 8,&lt;br /&gt;
        Blood = 23,&lt;br /&gt;
        Death = 55,&lt;br /&gt;
        Law = 110,&lt;br /&gt;
        Nature = 220,&lt;br /&gt;
        Astral = 430,&lt;br /&gt;
        Chaos = 850,&lt;br /&gt;
        Cosmic = 1650,&lt;br /&gt;
        Body = 3250,&lt;br /&gt;
        Fire = 4750,&lt;br /&gt;
        Earth = 6150,&lt;br /&gt;
        Water = 7500,&lt;br /&gt;
        Mind = 8800,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;30-39&amp;quot;] = {&lt;br /&gt;
		Soul = 20,&lt;br /&gt;
        Blood = 60,&lt;br /&gt;
        Death = 120,&lt;br /&gt;
        Law = 250,&lt;br /&gt;
        Nature = 500,&lt;br /&gt;
        Astral = 1000,&lt;br /&gt;
        Chaos = 2000,&lt;br /&gt;
        Cosmic = 4000,&lt;br /&gt;
        Body = 5300,&lt;br /&gt;
        Fire = 6500,&lt;br /&gt;
        Earth = 7600,&lt;br /&gt;
        Water = 8500,&lt;br /&gt;
        Mind = 9300,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;40-49&amp;quot;] = {&lt;br /&gt;
		Soul = 40,&lt;br /&gt;
        Blood = 120,&lt;br /&gt;
        Death = 240,&lt;br /&gt;
        Law = 500,&lt;br /&gt;
        Nature = 1000,&lt;br /&gt;
        Astral = 2000,&lt;br /&gt;
        Chaos = 4000,&lt;br /&gt;
        Cosmic = 5500,&lt;br /&gt;
        Body = 6500,&lt;br /&gt;
        Fire = 7300,&lt;br /&gt;
        Earth = 8050,&lt;br /&gt;
        Water = 8750,&lt;br /&gt;
        Mind = 9400,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;50-59&amp;quot;] = {&lt;br /&gt;
		Soul = 80,&lt;br /&gt;
        Blood = 250,&lt;br /&gt;
        Death = 600,&lt;br /&gt;
        Law = 1300,&lt;br /&gt;
        Nature = 2650,&lt;br /&gt;
        Astral = 4150,&lt;br /&gt;
        Chaos = 5250,&lt;br /&gt;
        Cosmic = 6250,&lt;br /&gt;
        Body = 7000,&lt;br /&gt;
        Fire = 7700,&lt;br /&gt;
        Earth = 8350,&lt;br /&gt;
        Water = 8950,&lt;br /&gt;
        Mind = 9500,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;60-69&amp;quot;] = {&lt;br /&gt;
		Soul = 100,&lt;br /&gt;
        Blood = 300,&lt;br /&gt;
        Death = 700,&lt;br /&gt;
        Law = 1500,&lt;br /&gt;
        Nature = 3050,&lt;br /&gt;
        Astral = 4450,&lt;br /&gt;
        Chaos = 5500,&lt;br /&gt;
        Cosmic = 6450,&lt;br /&gt;
        Body = 7200,&lt;br /&gt;
        Fire = 7900,&lt;br /&gt;
        Earth = 8500,&lt;br /&gt;
        Water = 9050,&lt;br /&gt;
        Mind = 9550,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;70-79&amp;quot;] = {&lt;br /&gt;
		Soul = 200,&lt;br /&gt;
        Blood = 700,&lt;br /&gt;
        Death = 1700,&lt;br /&gt;
        Law = 3500,&lt;br /&gt;
        Nature = 5000,&lt;br /&gt;
        Astral = 6200,&lt;br /&gt;
        Chaos = 7100,&lt;br /&gt;
        Cosmic = 7800,&lt;br /&gt;
        Body = 8300,&lt;br /&gt;
        Fire = 8700,&lt;br /&gt;
        Earth = 9100,&lt;br /&gt;
        Water = 9400,&lt;br /&gt;
        Mind = 9700,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;80-89&amp;quot;] = {&lt;br /&gt;
		Soul = 400,&lt;br /&gt;
        Blood = 1000,&lt;br /&gt;
        Death = 2450,&lt;br /&gt;
        Law = 3900,&lt;br /&gt;
        Nature = 5250,&lt;br /&gt;
        Astral = 6300,&lt;br /&gt;
        Chaos = 7100,&lt;br /&gt;
        Cosmic = 7800,&lt;br /&gt;
        Body = 8400,&lt;br /&gt;
        Fire = 9300,&lt;br /&gt;
        Earth = 9600,&lt;br /&gt;
        Water = 9800,&lt;br /&gt;
        Mind = 9900,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;90-98&amp;quot;] = {&lt;br /&gt;
		Soul = 650,&lt;br /&gt;
        Blood = 1650,&lt;br /&gt;
        Death = 3300,&lt;br /&gt;
        Law = 4750,&lt;br /&gt;
        Nature = 6100,&lt;br /&gt;
        Astral = 7100,&lt;br /&gt;
        Chaos = 7800,&lt;br /&gt;
        Cosmic = 8400,&lt;br /&gt;
        Body = 8900,&lt;br /&gt;
        Fire = 9300,&lt;br /&gt;
        Earth = 9600,&lt;br /&gt;
        Water = 9800,&lt;br /&gt;
        Mind = 9900,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
        },&lt;br /&gt;
	[&amp;quot;99+&amp;quot;] = {&lt;br /&gt;
		Soul = 900,&lt;br /&gt;
        Blood = 2200,&lt;br /&gt;
        Death = 3750,&lt;br /&gt;
        Law = 5200,&lt;br /&gt;
        Nature = 6550,&lt;br /&gt;
        Astral = 7500,&lt;br /&gt;
        Chaos = 8100,&lt;br /&gt;
        Cosmic = 8600,&lt;br /&gt;
        Body = 9000,&lt;br /&gt;
        Fire = 9300,&lt;br /&gt;
        Earth = 9600,&lt;br /&gt;
        Water = 9800,&lt;br /&gt;
        Mind = 9900,&lt;br /&gt;
        Air = 10000&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local total_range = 10001 -- +1 as range is 0-indexed &lt;br /&gt;
&lt;br /&gt;
function calculate_chances(thresholds, total_range)&lt;br /&gt;
    local chances = {}&lt;br /&gt;
    for level_range, level_thresholds in pairs(thresholds) do&lt;br /&gt;
        chances[level_range] = {}&lt;br /&gt;
        local last_threshold = -1 -- Start from -1 because the range is 0-indexed&lt;br /&gt;
        for _, element in ipairs(rune_order) do&lt;br /&gt;
            local threshold = level_thresholds[element]&lt;br /&gt;
            local range = threshold - last_threshold&lt;br /&gt;
            local percentage = (range / total_range) * 100&lt;br /&gt;
            chances[level_range][element] = percentage&lt;br /&gt;
            last_threshold = threshold&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return chances&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function format_chances(chances)&lt;br /&gt;
    local table = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;wikitable sortable autosort=1,a align-center-2&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    -- Create header row&lt;br /&gt;
    local header_row = table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    header_row:tag(&amp;#039;th&amp;#039;):wikitext(string.format(&amp;#039;[[File:Runecraft_icon.png]] &amp;lt;br/&amp;gt; Level&amp;#039;)):done()&lt;br /&gt;
    for _, element in ipairs(rune_order) do&lt;br /&gt;
        header_row:tag(&amp;#039;th&amp;#039;):wikitext((string.format(&amp;#039;[[File:%s rune.png|%s rune]] &amp;lt;br/&amp;gt; [[%s rune|%s]]&amp;#039;, element, element, element, element))):done()&lt;br /&gt;
    end&lt;br /&gt;
	header_row:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;XP/Ess&amp;#039;):done()&lt;br /&gt;
	header_row:tag(&amp;#039;th&amp;#039;):wikitext(string.format(&amp;#039;XP/Ess&amp;lt;br/&amp;gt;(Daeyalt)&amp;#039;)):done()&lt;br /&gt;
	header_row:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Profit/Ess&amp;#039;):done()&lt;br /&gt;
&lt;br /&gt;
    -- Create data rows&lt;br /&gt;
    for level_range, element_chances in pairs(chances) do&lt;br /&gt;
        local row = table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
        row:tag(&amp;#039;th&amp;#039;):wikitext(level_range):done()&lt;br /&gt;
        local level_range_ess_value = 0&lt;br /&gt;
        local level_range_ess_xp = 0&lt;br /&gt;
        local level_range_daeyalt_xp = 0&lt;br /&gt;
        for _, element in ipairs(rune_order) do&lt;br /&gt;
            local percentage = element_chances[element]&lt;br /&gt;
            local price = geprice(string.format(&amp;#039;%s rune&amp;#039;, element))&lt;br /&gt;
            local experience = rune_exp[element]&lt;br /&gt;
            if type(percentage) == &amp;quot;number&amp;quot; then&lt;br /&gt;
				local value = (percentage / 100) * price&lt;br /&gt;
				local exp = (percentage / 100) * (1.7 * experience)&lt;br /&gt;
				local dae = (percentage / 100) * (1.5 * 1.7 * experience)&lt;br /&gt;
				level_range_ess_value = level_range_ess_value + value&lt;br /&gt;
				level_range_ess_xp = level_range_ess_xp + exp&lt;br /&gt;
				level_range_daeyalt_xp = level_range_daeyalt_xp + dae&lt;br /&gt;
                row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;%.2f%%&amp;#039;, percentage)):done()&lt;br /&gt;
            else&lt;br /&gt;
                row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;N/A&amp;#039;):done()&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;%.2f&amp;#039;, level_range_ess_xp)):done()&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;%.2f&amp;#039;, level_range_daeyalt_xp)):done()&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(coins(level_range_ess_value)):done()&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return tostring(table)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function convertToChartJSFormat(chances)&lt;br /&gt;
    local chart_data = {&lt;br /&gt;
        labels = {},&lt;br /&gt;
        datasets = {}&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for i, rune in ipairs(rune_order) do&lt;br /&gt;
        table.insert(chart_data.datasets, {&lt;br /&gt;
            label = rune .. &amp;quot; rune&amp;quot;,&lt;br /&gt;
            data = {},&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for level_range, rune_chances in pairs(chances) do&lt;br /&gt;
        table.insert(chart_data.labels, level_range)&lt;br /&gt;
        for i, rune in ipairs(rune_order) do&lt;br /&gt;
            local chance = rune_chances[rune] or 0&lt;br /&gt;
            table.insert(chart_data.datasets[i].data, chance)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return chart_data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function stacked_bar()&lt;br /&gt;
    local chances = calculate_chances(thresholds, total_range)&lt;br /&gt;
    local chart_data = convertToChartJSFormat(chances)&lt;br /&gt;
   -- chart_data.color = chart.colorPallets.orange[3]&lt;br /&gt;
    local plot = chart.newChart{ &lt;br /&gt;
        type = &amp;quot;bar&amp;quot;,&lt;br /&gt;
        data = chart_data,&lt;br /&gt;
        options = {&lt;br /&gt;
        	--colorPallet = chart.colorPallets.qualitative,&lt;br /&gt;
            responsive = true,&lt;br /&gt;
            maintainAspectRatio = false,&lt;br /&gt;
            plugins = {&lt;br /&gt;
                legend = { position = &amp;#039;top&amp;#039; },&lt;br /&gt;
                tooltip = { mode = &amp;#039;index&amp;#039;, intersect = false }&lt;br /&gt;
            },&lt;br /&gt;
            scales = {&lt;br /&gt;
                x = { stacked = true },&lt;br /&gt;
                y = { &lt;br /&gt;
                    stacked = true, &lt;br /&gt;
                    beginAtZero = true,&lt;br /&gt;
                    max = 100,&lt;br /&gt;
                    ticks = {&lt;br /&gt;
                        callback = function(value)&lt;br /&gt;
                            return value .. &amp;#039;%&amp;#039;&lt;br /&gt;
                        end&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
   -- plot.options.colorPallet = chart.colorPallets.qualitative&lt;br /&gt;
    plot.data.color = chart.colorPallets.green[3]&lt;br /&gt;
	return plot&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.chancetable(frame)&lt;br /&gt;
    local chances = calculate_chances(thresholds, total_range)&lt;br /&gt;
    return format_chances(chances)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.chart(frame)&lt;br /&gt;
    return stacked_bar()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>