<?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%3AWintertodt_supply_crate</id>
	<title>Module:Wintertodt supply crate - 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%3AWintertodt_supply_crate"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Wintertodt_supply_crate&amp;action=history"/>
	<updated>2026-05-16T07:02:33Z</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:Wintertodt_supply_crate&amp;diff=35228&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local geprice = require(&#039;Module:Exchange&#039;)._price local coins = require(&#039;Module:Coins&#039;)._amount  local p = {}  local items = {}  items.crafting = { 	{name=&quot;Uncut diamond&quot;, minQty=1, maxQty=3, lowRoll=10, highRoll=120}, 	{name=&quot;Uncut ruby&quot;, minQty=2, maxQty=4, lowRoll=50, highRoll=140}, 	{name=&quot;Uncut emerald&quot;, minQty=1, maxQty=3, lowRoll=90, highRoll=160}, 	{name=&quot;Uncut sapphire&quot;, minQty=1, maxQty=3, lowRoll=255, highRoll=255}, }  items.herblore = { 	{name=&quot;Grimy torstol&quot;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Wintertodt_supply_crate&amp;diff=35228&amp;oldid=prev"/>
		<updated>2024-10-16T23:13:24Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local geprice = require(&amp;#039;Module:Exchange&amp;#039;)._price local coins = require(&amp;#039;Module:Coins&amp;#039;)._amount  local p = {}  local items = {}  items.crafting = { 	{name=&amp;quot;Uncut diamond&amp;quot;, minQty=1, maxQty=3, lowRoll=10, highRoll=120}, 	{name=&amp;quot;Uncut ruby&amp;quot;, minQty=2, maxQty=4, lowRoll=50, highRoll=140}, 	{name=&amp;quot;Uncut emerald&amp;quot;, minQty=1, maxQty=3, lowRoll=90, highRoll=160}, 	{name=&amp;quot;Uncut sapphire&amp;quot;, minQty=1, maxQty=3, lowRoll=255, highRoll=255}, }  items.herblore = { 	{name=&amp;quot;Grimy torstol&amp;quot;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&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;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local items = {}&lt;br /&gt;
&lt;br /&gt;
items.crafting = {&lt;br /&gt;
	{name=&amp;quot;Uncut diamond&amp;quot;, minQty=1, maxQty=3, lowRoll=10, highRoll=120},&lt;br /&gt;
	{name=&amp;quot;Uncut ruby&amp;quot;, minQty=2, maxQty=4, lowRoll=50, highRoll=140},&lt;br /&gt;
	{name=&amp;quot;Uncut emerald&amp;quot;, minQty=1, maxQty=3, lowRoll=90, highRoll=160},&lt;br /&gt;
	{name=&amp;quot;Uncut sapphire&amp;quot;, minQty=1, maxQty=3, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.herblore = {&lt;br /&gt;
	{name=&amp;quot;Grimy torstol&amp;quot;, minQty=1, maxQty=3, lowRoll=-70, highRoll=40},&lt;br /&gt;
	{name=&amp;quot;Grimy dwarf weed&amp;quot;, minQty=2, maxQty=4, lowRoll=-50, highRoll=50},&lt;br /&gt;
	{name=&amp;quot;Grimy lantadyme&amp;quot;, minQty=2, maxQty=4, lowRoll=-30, highRoll=60},&lt;br /&gt;
	{name=&amp;quot;Grimy cadantine&amp;quot;, minQty=2, maxQty=4, lowRoll=-10, highRoll=70},&lt;br /&gt;
	{name=&amp;quot;Grimy kwuarm&amp;quot;, minQty=2, maxQty=4, lowRoll=10, highRoll=85},&lt;br /&gt;
	{name=&amp;quot;Grimy avantoe&amp;quot;, minQty=3, maxQty=5, lowRoll=20, highRoll=100},&lt;br /&gt;
	{name=&amp;quot;Grimy irit leaf&amp;quot;, minQty=3, maxQty=5, lowRoll=30, highRoll=115},&lt;br /&gt;
	{name=&amp;quot;Grimy ranarr weed&amp;quot;, minQty=1, maxQty=3, lowRoll=10, highRoll=170},&lt;br /&gt;
	{name=&amp;quot;Grimy tarromin&amp;quot;, minQty=3, maxQty=6, lowRoll=70, highRoll=-20},&lt;br /&gt;
	{name=&amp;quot;Grimy marrentill&amp;quot;, minQty=3, maxQty=6, lowRoll=100, highRoll=-30},&lt;br /&gt;
	{name=&amp;quot;Grimy guam leaf&amp;quot;, minQty=3, maxQty=6, lowRoll=170, highRoll=-40},&lt;br /&gt;
	{name=&amp;quot;Grimy harralander&amp;quot;, minQty=3, maxQty=6, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.farming = {&lt;br /&gt;
	{name=&amp;quot;Spirit seed&amp;quot;, minQty=1, maxQty=1, lowRoll=-20, highRoll=5},&lt;br /&gt;
	{name=&amp;quot;Dwarf weed seed&amp;quot;, minQty=1, maxQty=3, lowRoll=-60, highRoll=25},&lt;br /&gt;
	{name=&amp;quot;Lantadyme seed&amp;quot;, minQty=1, maxQty=3, lowRoll=-60, highRoll=30},&lt;br /&gt;
	{name=&amp;quot;Cadantine seed&amp;quot;, minQty=1, maxQty=3, lowRoll=-40, highRoll=40},&lt;br /&gt;
	{name=&amp;quot;Snapdragon seed&amp;quot;, minQty=1, maxQty=3, lowRoll=-15, highRoll=60},&lt;br /&gt;
	{name=&amp;quot;Yew seed&amp;quot;, minQty=1, maxQty=2, lowRoll=-10, highRoll=70},&lt;br /&gt;
	{name=&amp;quot;Snape grass seed&amp;quot;, minQty=3, maxQty=7, lowRoll=-8, highRoll=78},&lt;br /&gt;
	{name=&amp;quot;Kwuarm seed&amp;quot;, minQty=1, maxQty=3, lowRoll=-10, highRoll=80},&lt;br /&gt;
	{name=&amp;quot;Ranarr seed&amp;quot;, minQty=1, maxQty=3, lowRoll=0, highRoll=110},&lt;br /&gt;
	{name=&amp;quot;Avantoe seed&amp;quot;, minQty=1, maxQty=3, lowRoll=0, highRoll=130},&lt;br /&gt;
	{name=&amp;quot;Watermelon seed&amp;quot;, minQty=3, maxQty=7, lowRoll=-10, highRoll=180},&lt;br /&gt;
	{name=&amp;quot;Irit seed&amp;quot;, minQty=1, maxQty=3, lowRoll=0, highRoll=170},&lt;br /&gt;
	{name=&amp;quot;Teak seed&amp;quot;, minQty=1, maxQty=2, lowRoll=10, highRoll=160},&lt;br /&gt;
	{name=&amp;quot;Maple seed&amp;quot;, minQty=1, maxQty=2, lowRoll=15, highRoll=190},&lt;br /&gt;
	{name=&amp;quot;Mahogany seed&amp;quot;, minQty=1, maxQty=2, lowRoll=20, highRoll=190},&lt;br /&gt;
	{name=&amp;quot;Toadflax seed&amp;quot;, minQty=1, maxQty=3, lowRoll=20, highRoll=190},&lt;br /&gt;
	{name=&amp;quot;Banana tree seed&amp;quot;, minQty=1, maxQty=2, lowRoll=30, highRoll=180},&lt;br /&gt;
	{name=&amp;quot;Willow seed&amp;quot;, minQty=1, maxQty=2, lowRoll=60, highRoll=120},&lt;br /&gt;
	{name=&amp;quot;Harralander seed&amp;quot;, minQty=1, maxQty=3, lowRoll=80, highRoll=-150},&lt;br /&gt;
	{name=&amp;quot;Tarromin seed&amp;quot;, minQty=1, maxQty=3, lowRoll=150, highRoll=-150},&lt;br /&gt;
	{name=&amp;quot;Acorn&amp;quot;, minQty=1, maxQty=1, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.woodcutting = {&lt;br /&gt;
	{name=&amp;quot;Magic logs&amp;quot;, minQty=10, maxQty=20, lowRoll=-60, highRoll=60},&lt;br /&gt;
	{name=&amp;quot;Yew logs&amp;quot;, minQty=10, maxQty=20, lowRoll=-50, highRoll=90},&lt;br /&gt;
	{name=&amp;quot;Mahogany logs&amp;quot;, minQty=10, maxQty=20, lowRoll=-40, highRoll=130},&lt;br /&gt;
	{name=&amp;quot;Maple logs&amp;quot;, minQty=10, maxQty=20, lowRoll=0, highRoll=160},&lt;br /&gt;
	{name=&amp;quot;Teak logs&amp;quot;, minQty=10, maxQty=20, lowRoll=30, highRoll=200},&lt;br /&gt;
	{name=&amp;quot;Willow logs&amp;quot;, minQty=10, maxQty=20, lowRoll=120, highRoll=100},&lt;br /&gt;
	{name=&amp;quot;Oak logs&amp;quot;, minQty=10, maxQty=20, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.mining = {&lt;br /&gt;
	{name=&amp;quot;Runite ore&amp;quot;, minQty=1, maxQty=2, lowRoll=-60, highRoll=40},&lt;br /&gt;
	{name=&amp;quot;Adamantite ore&amp;quot;, minQty=2, maxQty=3, lowRoll=-50, highRoll=80},&lt;br /&gt;
	{name=&amp;quot;Mithril ore&amp;quot;, minQty=3, maxQty=5, lowRoll=-20, highRoll=140},&lt;br /&gt;
	{name=&amp;quot;Gold ore&amp;quot;, minQty=8, maxQty=11, lowRoll=0, highRoll=160},&lt;br /&gt;
	{name=&amp;quot;Coal&amp;quot;, minQty=10, maxQty=14, lowRoll=0, highRoll=180},&lt;br /&gt;
	{name=&amp;quot;Pure essence&amp;quot;, minQty=20, maxQty=70, lowRoll=40, highRoll=190},&lt;br /&gt;
	{name=&amp;quot;Silver ore&amp;quot;, minQty=10, maxQty=12, lowRoll=140, highRoll=10},&lt;br /&gt;
	{name=&amp;quot;Limestone&amp;quot;, minQty=2, maxQty=7, lowRoll=200, highRoll=-20},&lt;br /&gt;
	{name=&amp;quot;Iron ore&amp;quot;, minQty=5, maxQty=15, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.fishing = {&lt;br /&gt;
	{name=&amp;quot;Raw shark&amp;quot;, minQty=6, maxQty=11, lowRoll=-60, highRoll=80},&lt;br /&gt;
	{name=&amp;quot;Raw swordfish&amp;quot;, minQty=6, maxQty=11, lowRoll=-50, highRoll=100},&lt;br /&gt;
	{name=&amp;quot;Raw lobster&amp;quot;, minQty=6, maxQty=11, lowRoll=-20, highRoll=130},&lt;br /&gt;
	{name=&amp;quot;Raw tuna&amp;quot;, minQty=6, maxQty=11, lowRoll=10, highRoll=160},&lt;br /&gt;
	{name=&amp;quot;Raw salmon&amp;quot;, minQty=6, maxQty=11, lowRoll=40, highRoll=180},&lt;br /&gt;
	{name=&amp;quot;Raw anchovies&amp;quot;, minQty=6, maxQty=11, lowRoll=160, highRoll=0},&lt;br /&gt;
	{name=&amp;quot;Raw trout&amp;quot;, minQty=6, maxQty=11, lowRoll=255, highRoll=255},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
items.other = {&lt;br /&gt;
	{name=&amp;quot;Coins&amp;quot;, minQty=2000, maxQty=4999, chance=5/25, price=1},&lt;br /&gt;
	{name=&amp;quot;Dynamite&amp;quot;, minQty=3, maxQty=5, chance=1/25, price=geprice(&amp;quot;Dynamite&amp;quot;)},&lt;br /&gt;
	{name=&amp;quot;Saltpetre&amp;quot;, minQty=3, maxQty=5, chance=1/25, price=geprice(&amp;quot;Saltpetre&amp;quot;)},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.interpolate(skillLevel, lowRoll, highRoll)&lt;br /&gt;
	local unclamped = math.floor(lowRoll + (highRoll - lowRoll) * (skillLevel - 1) / 98)&lt;br /&gt;
	return math.min(math.max(unclamped+1, 0), 256)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	&lt;br /&gt;
	local skills = {&lt;br /&gt;
		crafting = tonumber(args.crafting),&lt;br /&gt;
		farming = tonumber(args.farming),&lt;br /&gt;
		fishing = tonumber(args.fishing),&lt;br /&gt;
		herblore = tonumber(args.herblore),&lt;br /&gt;
		mining = tonumber(args.mining),&lt;br /&gt;
		woodcutting = tonumber(args.woodcutting),&lt;br /&gt;
	}&lt;br /&gt;
	return p._main(tonumber(args.points), skills, &lt;br /&gt;
		args.hasPhoenix==&amp;#039;yes&amp;#039;, args.magicEligible==&amp;#039;yes&amp;#039;,&lt;br /&gt;
		args.torstolEligible==&amp;#039;yes&amp;#039;, args.sellPyro==&amp;#039;yes&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeLine(name, minQty, maxQty, chancePerRoll, rolls, price)&lt;br /&gt;
	local expectedCount = rolls * chancePerRoll * (minQty + maxQty) / 2&lt;br /&gt;
	local qtyRange = tostring(minQty)&lt;br /&gt;
	if minQty ~= maxQty then&lt;br /&gt;
		qtyRange = tostring(minQty) .. &amp;#039;-&amp;#039; .. tostring(maxQty)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local displayName = name&lt;br /&gt;
	if name == &amp;quot;Pyromancer hood&amp;quot; then&lt;br /&gt;
		displayName = &amp;quot;Pyromancer outfit|Pyromancer outfit piece&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;[[File:&amp;#039; .. name .. &amp;#039;.png|link=&amp;#039; .. name .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;[[&amp;#039; .. displayName .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(qtyRange)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(coins(price))&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&amp;#039;%.3f%%&amp;#039;, 100 * chancePerRoll))&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&amp;#039;%.3f&amp;#039;, expectedCount))&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:wikitext(coins(tostring(price * expectedCount) .. &amp;#039;/ 1&amp;#039;))&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function p._main(points, skills, hasPhoenix, magicEligible, torstolEligible, sellPyro)&lt;br /&gt;
	if points &amp;lt; 500 then&lt;br /&gt;
		return &amp;quot;You can&amp;#039;t get rewards with less than 500 points.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local rolls = 1 + points / 500&lt;br /&gt;
&lt;br /&gt;
	local uniquesExpectation = 0&lt;br /&gt;
	local uniquesTable = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
	uniquesTable:addClass(&amp;#039;wikitable sortable align-center-1 align-left-2 align-left-3&amp;#039;):css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local header = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Item&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Quantity&amp;lt;br/&amp;gt;(per roll)&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Price&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Chance&amp;lt;br/&amp;gt;(per roll)&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Expected&amp;lt;br/&amp;gt;(per run)&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Expected value&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	uniquesTable:node(header)&lt;br /&gt;
&lt;br /&gt;
	local totalProbability = 1.0&lt;br /&gt;
	if not hasPhoenix then&lt;br /&gt;
		uniquesTable:node(makeLine(&amp;quot;Phoenix&amp;quot;, 1, 1, 1/5000, rolls, 0))&lt;br /&gt;
		totalProbability = totalProbability * (1 - 1/5000)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	uniquesTable:node(makeLine(&amp;quot;Dragon axe&amp;quot;, 1, 1, 1/10000 * totalProbability, rolls, geprice(&amp;quot;Dragon axe&amp;quot;)))&lt;br /&gt;
	uniquesExpectation = uniquesExpectation + 1/10000 * totalProbability * rolls * geprice(&amp;quot;Dragon axe&amp;quot;)&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/10000)&lt;br /&gt;
&lt;br /&gt;
	uniquesTable:node(makeLine(&amp;quot;Tome of fire (empty)&amp;quot;, 1, 1, 1/1000 * totalProbability, rolls, geprice(&amp;quot;Tome of fire (empty)&amp;quot;)))&lt;br /&gt;
	uniquesExpectation = uniquesExpectation + 1/1000 * totalProbability * rolls * geprice(&amp;quot;Tome of fire (empty)&amp;quot;)&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/1000)&lt;br /&gt;
	&lt;br /&gt;
	if magicEligible then&lt;br /&gt;
		uniquesTable:node(makeLine(&amp;quot;Magic seed&amp;quot;, 1, 1, 1/150 * totalProbability, rolls, geprice(&amp;quot;Magic seed&amp;quot;)))&lt;br /&gt;
		uniquesExpectation = uniquesExpectation + 1/150 * totalProbability * rolls * geprice(&amp;quot;Magic seed&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		uniquesTable:node(makeLine(&amp;quot;Warm gloves&amp;quot;, 1, 1, 1/150 * totalProbability, rolls, 0))&lt;br /&gt;
	end&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/150)&lt;br /&gt;
	&lt;br /&gt;
	if torstolEligible then&lt;br /&gt;
		uniquesTable:node(makeLine(&amp;quot;Torstol seed&amp;quot;, 2, 3, 1/150 * totalProbability, rolls, geprice(&amp;quot;Torstol seed&amp;quot;)))&lt;br /&gt;
		uniquesExpectation = uniquesExpectation + 1/150 * totalProbability * rolls * geprice(&amp;quot;Torstol seed&amp;quot;) * 2.5&lt;br /&gt;
	else&lt;br /&gt;
		uniquesTable:node(makeLine(&amp;quot;Bruma torch&amp;quot;, 1, 1, 1/150 * totalProbability, rolls, 0))&lt;br /&gt;
	end&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/150)&lt;br /&gt;
	&lt;br /&gt;
	local pyroPrice = 0&lt;br /&gt;
	if sellPyro then&lt;br /&gt;
		pyroPrice = geprice(&amp;quot;Burnt page&amp;quot;) * 50&lt;br /&gt;
	end&lt;br /&gt;
	uniquesTable:node(makeLine(&amp;quot;Pyromancer hood&amp;quot;, 1, 1, 1/150 * totalProbability, rolls, pyroPrice))&lt;br /&gt;
	uniquesExpectation = uniquesExpectation + 1/150 * totalProbability * rolls * pyroPrice&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/150)&lt;br /&gt;
	&lt;br /&gt;
	uniquesTable:node(makeLine(&amp;quot;Burnt page&amp;quot;, 7, 29, 1/45 * totalProbability, rolls, geprice(&amp;quot;Burnt page&amp;quot;)))&lt;br /&gt;
	uniquesExpectation = uniquesExpectation + 1/45 * totalProbability * rolls * geprice(&amp;quot;Burnt page&amp;quot;) * 18&lt;br /&gt;
	totalProbability = totalProbability * (1 - 1/45)&lt;br /&gt;
&lt;br /&gt;
	uniquesTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, 6)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Total:&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
			:wikitext(coins(tostring(uniquesExpectation) .. &amp;#039;/1&amp;#039;))&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	local resourcesTable = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
	resourcesTable:addClass(&amp;#039;wikitable sortable align-center-1 align-left-2 align-left-3&amp;#039;):css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
		:node(header)&lt;br /&gt;
	&lt;br /&gt;
	local resourcesExpectation = 0&lt;br /&gt;
	for skill, skillLevel in pairs(skills) do&lt;br /&gt;
		local remainingProbability = 1.0&lt;br /&gt;
		for _, item in ipairs(items[skill]) do&lt;br /&gt;
			local subchance = p.interpolate(skillLevel, item.lowRoll, item.highRoll) / 256&lt;br /&gt;
			local chancePerRoll = remainingProbability * subchance&lt;br /&gt;
			remainingProbability = remainingProbability - chancePerRoll&lt;br /&gt;
			chancePerRoll = chancePerRoll * totalProbability&lt;br /&gt;
			&lt;br /&gt;
			local price = 0&lt;br /&gt;
			if item.name ~= &amp;#039;Spirit seed&amp;#039; then&lt;br /&gt;
				price = geprice(item.name)&lt;br /&gt;
			end&lt;br /&gt;
			local expectedCount = chancePerRoll * rolls * 3/25 * (item.minQty + item.maxQty) / 2&lt;br /&gt;
			resourcesExpectation = resourcesExpectation + expectedCount * price&lt;br /&gt;
			&lt;br /&gt;
			local row = makeLine(item.name, item.minQty, item.maxQty, chancePerRoll * 3/25, rolls, price)&lt;br /&gt;
			resourcesTable:node(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, item in ipairs(items.other) do&lt;br /&gt;
		local expectedCount = (item.minQty + item.maxQty) / 2 * item.chance&lt;br /&gt;
		resourcesExpectation = resourcesExpectation + expectedCount * item.price&lt;br /&gt;
		local row = makeLine(item.name, item.minQty, item.maxQty, item.chance, rolls, item.price)&lt;br /&gt;
		resourcesTable:node(row)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	resourcesTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, 6)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Total:&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;,&amp;#039;right&amp;#039;)&lt;br /&gt;
			:wikitext(coins(tostring(resourcesExpectation) .. &amp;#039;/1&amp;#039;))&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	local rollsLine = &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; &lt;br /&gt;
	.. tostring(points) &lt;br /&gt;
	.. &amp;quot;&amp;#039;&amp;#039;&amp;#039; points in Wintertodt will give you in average &amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	.. string.format(&amp;#039;%.3f&amp;#039;, rolls) &lt;br /&gt;
	.. &amp;quot;&amp;#039;&amp;#039;&amp;#039; rewards added to your reward pile. Ignoring untradeables, the total expected value of a run is &amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	.. coins(uniquesExpectation + resourcesExpectation)&lt;br /&gt;
	.. &amp;quot;&amp;#039;&amp;#039;&amp;#039; coins.&amp;quot;&lt;br /&gt;
	mw.log(rollsLine .. &amp;#039;\n\n==Uniques==\n&amp;#039; .. tostring(uniquesTable) .. &amp;#039;\n\n==Resources==\n&amp;#039; .. tostring(resourcesTable))&lt;br /&gt;
	return rollsLine .. &amp;#039;\n\n==Uniques==\n&amp;#039; .. tostring(uniquesTable) .. &amp;#039;\n\n==Resources==\n&amp;#039; .. tostring(resourcesTable)&lt;br /&gt;
		&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>