<?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%3ASeedPackValue</id>
	<title>Module:SeedPackValue - 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%3ASeedPackValue"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:SeedPackValue&amp;action=history"/>
	<updated>2026-05-03T03:28:48Z</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:SeedPackValue&amp;diff=34236&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local p = {}  local ask = mw.smw.ask local decode = mw.text.jsonDecode local html = mw.html  local avgDropVal = require(&#039;Module:Average drop value&#039;).totalval local coins = require(&#039;Module:Coins&#039;)._amount local commas = require(&#039;Module:Addcommas&#039;)._add local default = require(&#039;Module:Paramtest&#039;).default_to local yesNo = require(&#039;Module:Yesno&#039;) local prices = mw.loadJsonData(&#039;Module:GEPrices/data.json&#039;)  sortKey = {--allotment &quot;Potato seed&quot;, &quot;Onion seed&quot;, &quot;Cabbage seed...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:SeedPackValue&amp;diff=34236&amp;oldid=prev"/>
		<updated>2024-10-15T23:51:08Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}  local ask = mw.smw.ask local decode = mw.text.jsonDecode local html = mw.html  local avgDropVal = require(&amp;#039;Module:Average drop value&amp;#039;).totalval local coins = require(&amp;#039;Module:Coins&amp;#039;)._amount local commas = require(&amp;#039;Module:Addcommas&amp;#039;)._add local default = require(&amp;#039;Module:Paramtest&amp;#039;).default_to local yesNo = require(&amp;#039;Module:Yesno&amp;#039;) local prices = mw.loadJsonData(&amp;#039;Module:GEPrices/data.json&amp;#039;)  sortKey = {--&lt;a href=&quot;/index.php?title=Allotment&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Allotment (page does not exist)&quot;&gt;allotment&lt;/a&gt; &amp;quot;Potato seed&amp;quot;, &amp;quot;Onion seed&amp;quot;, &amp;quot;Cabbage seed...&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 ask = mw.smw.ask&lt;br /&gt;
local decode = mw.text.jsonDecode&lt;br /&gt;
local html = mw.html&lt;br /&gt;
&lt;br /&gt;
local avgDropVal = require(&amp;#039;Module:Average drop value&amp;#039;).totalval&lt;br /&gt;
local coins = require(&amp;#039;Module:Coins&amp;#039;)._amount&lt;br /&gt;
local commas = require(&amp;#039;Module:Addcommas&amp;#039;)._add&lt;br /&gt;
local default = require(&amp;#039;Module:Paramtest&amp;#039;).default_to&lt;br /&gt;
local yesNo = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local prices = mw.loadJsonData(&amp;#039;Module:GEPrices/data.json&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
sortKey = {--[[allotment]] &amp;quot;Potato seed&amp;quot;, &amp;quot;Onion seed&amp;quot;, &amp;quot;Cabbage seed&amp;quot;, &amp;quot;Tomato seed&amp;quot;, &amp;quot;Sweetcorn seed&amp;quot;, &amp;quot;Strawberry seed&amp;quot;, &amp;quot;Watermelon seed&amp;quot;, &amp;quot;Snape grass seed&amp;quot;, --[[flower]] &amp;quot;Marigold seed&amp;quot;, &amp;quot;Rosemary seed&amp;quot;, &amp;quot;Nasturtium seed&amp;quot;, &amp;quot;Woad seed&amp;quot;, &amp;quot;Limpwurt seed&amp;quot;, --[[herb]] &amp;quot;Guam seed&amp;quot;, &amp;quot;Marrentill seed&amp;quot;, &amp;quot;Tarromin seed&amp;quot;, &amp;quot;Harralander seed&amp;quot;, &amp;quot;Ranarr seed&amp;quot;, &amp;quot;Toadflax seed&amp;quot;, &amp;quot;Irit seed&amp;quot;, &amp;quot;Avantoe seed&amp;quot;, &amp;quot;Kwuarm seed&amp;quot;, &amp;quot;Snapdragon seed&amp;quot;, &amp;quot;Cadantine seed&amp;quot;, &amp;quot;Lantadyme seed&amp;quot;, &amp;quot;Dwarf weed seed&amp;quot;, &amp;quot;Torstol seed&amp;quot;, --[[hops]] &amp;quot;Barley seed&amp;quot;, &amp;quot;Hammerstone seed&amp;quot;, &amp;quot;Asgarnian seed&amp;quot;, &amp;quot;Jute seed&amp;quot;, &amp;quot;Yanillian seed&amp;quot;, &amp;quot;Krandorian seed&amp;quot;, &amp;quot;Wildblood seed&amp;quot;, --[[bush]] &amp;quot;Redberry seed&amp;quot;, &amp;quot;Cadavaberry seed&amp;quot;, &amp;quot;Dwellberry seed&amp;quot;, &amp;quot;Jangerberry seed&amp;quot;, &amp;quot;Whiteberry seed&amp;quot;, &amp;quot;Poison ivy seed&amp;quot;, --[[tree]] &amp;quot;Acorn&amp;quot;, &amp;quot;Willow seed&amp;quot;, &amp;quot;Maple seed&amp;quot;, &amp;quot;Yew seed&amp;quot;, &amp;quot;Magic seed&amp;quot;, --[[fruit tree]] &amp;quot;Apple tree seed&amp;quot;, &amp;quot;Banana tree seed&amp;quot;, &amp;quot;Orange tree seed&amp;quot;, &amp;quot;Curry tree seed&amp;quot;, &amp;quot;Pineapple seed&amp;quot;, &amp;quot;Papaya tree seed&amp;quot;, &amp;quot;Palm tree seed&amp;quot;, &amp;quot;Dragonfruit tree seed&amp;quot;, --[[cactus]] &amp;quot;Cactus seed&amp;quot;, &amp;quot;Potato cactus seed&amp;quot;, --[[hardwood]] &amp;quot;Teak seed&amp;quot;, &amp;quot;Mahogany seed&amp;quot;, --[[special single patches]] &amp;quot;Redwood tree seed&amp;quot;, &amp;quot;Mushroom spore&amp;quot;, &amp;quot;Belladonna seed&amp;quot;, &amp;quot;Calquat tree seed&amp;quot;, &amp;quot;Celastrus seed&amp;quot;, &amp;quot;Hespori seed&amp;quot;, &amp;quot;Spirit seed&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
-- Lows are calculated&lt;br /&gt;
local packTierRolls = {&lt;br /&gt;
	{&lt;br /&gt;
		total = 6,&lt;br /&gt;
		medium = {&lt;br /&gt;
			low = 1,&lt;br /&gt;
			high = 3,&lt;br /&gt;
		},&lt;br /&gt;
		high = {&lt;br /&gt;
			low = 0,&lt;br /&gt;
			high = 0,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		total = 7,&lt;br /&gt;
		medium = {&lt;br /&gt;
			low = 2,&lt;br /&gt;
			high = 3,&lt;br /&gt;
		},&lt;br /&gt;
		high = (1/11),&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		total = 8,&lt;br /&gt;
		medium = {&lt;br /&gt;
			low = 2,&lt;br /&gt;
			high = 4,&lt;br /&gt;
		},&lt;br /&gt;
		high = {&lt;br /&gt;
			low = 0,&lt;br /&gt;
			high = 1,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		total = 9,&lt;br /&gt;
		medium = {&lt;br /&gt;
			low = 3,&lt;br /&gt;
			high = 5,&lt;br /&gt;
		},&lt;br /&gt;
		high = {&lt;br /&gt;
			low = 1,&lt;br /&gt;
			high = 2,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		total = 10,&lt;br /&gt;
		medium = {&lt;br /&gt;
			low = 4,&lt;br /&gt;
			high = 6,&lt;br /&gt;
		},&lt;br /&gt;
		high = {&lt;br /&gt;
			low = 1,&lt;br /&gt;
			high = 3,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local taskDifficultyCount = {&lt;br /&gt;
	easy = {&lt;br /&gt;
		total = 31,&lt;br /&gt;
		tiers = { 11, 12, 8, 0,	0 },&lt;br /&gt;
	},&lt;br /&gt;
	medium = {&lt;br /&gt;
		total = 22,&lt;br /&gt;
		tiers = { 0, 4, 10, 8, 0 },&lt;br /&gt;
	},&lt;br /&gt;
	hard = {&lt;br /&gt;
		total = 18,&lt;br /&gt;
		tiers = { 0, 0, 3, 8, 7 },&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function averageRolls(high, low)&lt;br /&gt;
	return high - ((high - low) / 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function avgTierRolls(num)&lt;br /&gt;
	local tierRolls = packTierRolls[num]&lt;br /&gt;
	&lt;br /&gt;
	local high = 0&lt;br /&gt;
	if(type(tierRolls.high) == &amp;#039;table&amp;#039;) then&lt;br /&gt;
		high = averageRolls(tierRolls.high.high, tierRolls.high.low)&lt;br /&gt;
	else&lt;br /&gt;
		high = tierRolls.high or 0&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local medium = averageRolls(tierRolls.medium.high, tierRolls.medium.low) or 0&lt;br /&gt;
	local low = (tierRolls.total - high - medium) or 0&lt;br /&gt;
	&lt;br /&gt;
	return { low = low, medium = medium, high = high }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function difficultyRolls(type)&lt;br /&gt;
	local low, medium, high = 0, 0, 0&lt;br /&gt;
	&lt;br /&gt;
	local tierTaskTotal = taskDifficultyCount[type].total&lt;br /&gt;
	local tiersTable = taskDifficultyCount[type].tiers&lt;br /&gt;
&lt;br /&gt;
	for tierNum, tierTaskCount in ipairs(tiersTable) do&lt;br /&gt;
		local avgRollCount = avgTierRolls(tierNum)&lt;br /&gt;
		high = high + ((tierTaskCount / tierTaskTotal) * avgRollCount.high)&lt;br /&gt;
		medium = medium + ((tierTaskCount / tierTaskTotal) * avgRollCount.medium)&lt;br /&gt;
		low = low + ((tierTaskCount / tierTaskTotal) * avgRollCount.low)&lt;br /&gt;
	end&lt;br /&gt;
	return { low = low, medium = medium, high = high }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function createRow(seedTable)&lt;br /&gt;
	local priceText = nil&lt;br /&gt;
	local profitText = nil&lt;br /&gt;
	local cellClass = nil&lt;br /&gt;
	local cellCss = nil&lt;br /&gt;
	if(seedTable.price == nil) then&lt;br /&gt;
		priceText = &amp;#039;&amp;lt;small&amp;gt;N/A&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
		profitText = &amp;#039;&amp;lt;small&amp;gt;N/A&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
		cellClass = &amp;#039;table-na nohighlight&amp;#039;&lt;br /&gt;
		cellCss = &amp;#039;text-align:center&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		priceText = coins(seedTable.price)&lt;br /&gt;
		profitText = coins(seedTable.profit)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[File:&amp;#039; .. seedTable.name .. &amp;#039;_5.png|link=|&amp;#039; .. seedTable.name .. &amp;#039;]]&amp;#039;):done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[&amp;#039; .. seedTable.name .. &amp;#039;]]&amp;#039;):done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):wikitext(priceText):addClass(cellClass):cssText(cellCss):done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;quot;%.3f&amp;quot;, seedTable.quantityOutput)):done()&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;):wikitext(profitText):addClass(cellClass):cssText(cellCss):done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function createTable(ret, tier, difficulty, useSpiritSeed, useHesporiSeed)&lt;br /&gt;
	local wikitable = html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;wikitable sortable align-center-1 align-center-2 align-center-3 align-center-4 align-center-5&amp;#039;)&lt;br /&gt;
	wikitable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Seed&amp;#039;):attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;):done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Price&amp;#039;):done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Quantity&amp;#039;):done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Value&amp;#039;):done()&lt;br /&gt;
	&lt;br /&gt;
	for _,v in ipairs(sortKey) do&lt;br /&gt;
		wikitable:node(createRow(ret.seedsCalculated[v]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	ret[&amp;#039;wikitable&amp;#039;] = tostring(wikitable) .. &amp;#039;\n\nThe average expected value of &amp;#039; .. (tier and &amp;#039;Tier &amp;#039; .. tier or &amp;#039;&amp;#039;) .. &amp;#039; seed packs &amp;#039; .. (difficulty and &amp;#039;from &amp;#039; .. difficulty .. &amp;#039; Farming contracts&amp;#039; or &amp;#039;&amp;#039;) .. &amp;#039; is &amp;#039; .. coins(string.format(&amp;quot;%.2f&amp;quot;, ret.totalProfit)) .. &amp;#039; coins.&amp;#039;&lt;br /&gt;
	if(tier == nil or tier &amp;gt; 1) then&lt;br /&gt;
		ret.wikitable = ret.wikitable .. ((useSpiritSeed and ret.spiritSeedProfit &amp;gt; 0) and &amp;#039;\n\nTrading in spirits seeds for tier 5 seed packs increases the profit by &amp;#039;.. coins(string.format(&amp;quot;%.2f&amp;quot;, ret.spiritSeedProfit)) .. &amp;#039; coins.&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
		ret.wikitable = ret.wikitable .. ((useHesporiSeed and ret.hesporiSeedProfit &amp;gt; 0) and &amp;#039;\n\nPlanting hespori seeds and killing hespori increases the average profit by &amp;#039;.. coins(string.format(&amp;quot;%.2f&amp;quot;, ret.hesporiSeedProfit)) .. &amp;#039; coins.&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
		ret.wikitable = ret.wikitable .. ((useSpiritSeed or useHesporiSeed) and &amp;#039;\n\nThese increase the profit&amp;#039; .. ((useSpiritSeed and useHesporiSeed) and &amp;#039; by &amp;#039; .. coins(string.format(&amp;quot;%.2f&amp;quot;, ret.spiritSeedProfit + ret.hesporiSeedProfit)) or &amp;#039;&amp;#039;) .. &amp;#039; to &amp;#039; .. coins(string.format(&amp;quot;%.2f&amp;quot;, ret.totalProfit + ret.spiritSeedProfit + ret.hesporiSeedProfit)) .. &amp;#039; coins.&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return ret.wikitable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function calc(tables, rolls)&lt;br /&gt;
	local seedsCalculated = {}&lt;br /&gt;
	local totalProfit = 0&lt;br /&gt;
	local totalSpiritSeeds = 0&lt;br /&gt;
	local totalHesporiSeeds = 0&lt;br /&gt;
	for level, seedTable in pairs(tables) do&lt;br /&gt;
		for _, drop in ipairs(seedTable) do&lt;br /&gt;
			local item = drop[&amp;#039;Dropped item&amp;#039;]&lt;br /&gt;
			seedsCalculated[item] = {}&lt;br /&gt;
			seedsCalculated[item][&amp;#039;name&amp;#039;] = item&lt;br /&gt;
			seedsCalculated[item][&amp;#039;price&amp;#039;] = prices[item]&lt;br /&gt;
			&lt;br /&gt;
			local numer, divis = string.match(drop[&amp;#039;Rarity&amp;#039;], &amp;#039;([%d%.]+)/([%d%.]+)&amp;#039;)&lt;br /&gt;
			if((numer ~= nil) and (divis ~= nil)) then&lt;br /&gt;
	            seedsCalculated[item][&amp;#039;rarityValue&amp;#039;] = numer/divis&lt;br /&gt;
	        else&lt;br /&gt;
	            seedsCalculated[item][&amp;#039;rarityValue&amp;#039;] = expr(rarity)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			seedsCalculated[item][&amp;#039;quantityAvg&amp;#039;] = drop[&amp;#039;Quantity High&amp;#039;] - ((drop[&amp;#039;Quantity High&amp;#039;] - drop[&amp;#039;Quantity Low&amp;#039;]) / 2)&lt;br /&gt;
			seedsCalculated[item][&amp;#039;quantityOutput&amp;#039;] = rolls[level] * seedsCalculated[item].quantityAvg * seedsCalculated[item].rarityValue&lt;br /&gt;
			seedsCalculated[item][&amp;#039;profit&amp;#039;] = ((seedsCalculated[item].price ~= nil) and (seedsCalculated[item].quantityOutput * seedsCalculated[item].price) or 0)&lt;br /&gt;
			seedsCalculated[item][&amp;#039;totalWithoutSpiritSeed&amp;#039;] = seedsCalculated[item].profit or 0&lt;br /&gt;
			&lt;br /&gt;
			totalProfit = totalProfit + (seedsCalculated[item].profit or 0)&lt;br /&gt;
			if(item == &amp;#039;Spirit seed&amp;#039;) then&lt;br /&gt;
				totalSpiritSeeds = totalSpiritSeeds + seedsCalculated[item].quantityOutput&lt;br /&gt;
			end&lt;br /&gt;
			if(item == &amp;#039;Hespori seed&amp;#039;) then&lt;br /&gt;
				totalHesporiSeeds = totalHesporiSeeds + seedsCalculated[item].quantityOutput&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
		seedsCalculated = seedsCalculated,&lt;br /&gt;
		totalProfit = totalProfit,&lt;br /&gt;
		totalSpiritSeeds = totalSpiritSeeds,&lt;br /&gt;
		totalHesporiSeeds = totalHesporiSeeds,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSeedDropTables()&lt;br /&gt;
	local query = {&lt;br /&gt;
		&amp;quot;[[-Has subobject::Seed pack]]&amp;quot;,&lt;br /&gt;
		&amp;quot;?=#-&amp;quot;,&lt;br /&gt;
		&amp;quot;?Drop JSON#-&amp;quot;,&lt;br /&gt;
		limit = 500,&lt;br /&gt;
		offset = 0,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local t1 = os.clock()&lt;br /&gt;
    local smwData = ask(query)&lt;br /&gt;
    local t2 = os.clock()&lt;br /&gt;
&lt;br /&gt;
	assert(smwData ~= nil and #smwData &amp;gt; 0, &amp;#039;SMW query failed  to find seed pack drops&amp;#039;)&lt;br /&gt;
	mw.log(string.format(&amp;#039;SMW: entries %d, time elapsed: %.3f ms.&amp;#039;, #smwData, (t2 - t1) * 1000))&lt;br /&gt;
&lt;br /&gt;
	local low, medium, high = {}, {}, {}&lt;br /&gt;
    for _, drop in ipairs(smwData) do&lt;br /&gt;
    	local json = decode(drop[&amp;quot;Drop JSON&amp;quot;])&lt;br /&gt;
    	local str = string.lower(json[&amp;#039;Dropped from&amp;#039;])&lt;br /&gt;
        if(str == &amp;#039;seed pack#low seed&amp;#039;) then&lt;br /&gt;
        	table.insert(low, json)&lt;br /&gt;
        elseif(str == &amp;#039;seed pack#medium seed&amp;#039;) then&lt;br /&gt;
        	table.insert(medium, json)&lt;br /&gt;
        elseif(str == &amp;#039;seed pack#high seed&amp;#039;) then&lt;br /&gt;
        	table.insert(high, json)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
	return { low = low, medium = medium, high = high }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, frameArgs)&lt;br /&gt;
	local filter = string.lower(default(args[1], &amp;#039;&amp;#039;))&lt;br /&gt;
	local tier = (packTierRolls[tonumber(filter:sub(-1))] and tonumber(filter:sub(-1)) or nil)&lt;br /&gt;
	local difficulty = (taskDifficultyCount[filter] and filter or nil)&lt;br /&gt;
	&lt;br /&gt;
	local useSpiritSeed = yesNo(default(args.spiritseed, false))&lt;br /&gt;
&lt;br /&gt;
	local displayTable = yesNo(default(args[&amp;#039;table&amp;#039;] or frameArgs[&amp;#039;table&amp;#039;], false))&lt;br /&gt;
&lt;br /&gt;
	local useHesporiSeed = yesNo(default(args.hespori, false))&lt;br /&gt;
	local hesporiValue = (useHesporiSeed and avgDropVal(&amp;#039;Hespori&amp;#039;, nil, nil, nil, nil, nil, false) or 0)&lt;br /&gt;
&lt;br /&gt;
	local seedTables = p.getSeedDropTables()&lt;br /&gt;
	&lt;br /&gt;
	local tier5Data = {}&lt;br /&gt;
	if(useSpiritSeed) then&lt;br /&gt;
		tier5Data = calc(seedTables, avgTierRolls(5))&lt;br /&gt;
		tier5Data[&amp;#039;spiritSeedProfit&amp;#039;] = 0&lt;br /&gt;
		local spiritSeedPerPack = tier5Data.seedsCalculated[&amp;#039;Spirit seed&amp;#039;].quantityOutput&lt;br /&gt;
		local result = 1&lt;br /&gt;
		while(result &amp;gt;= 1) do&lt;br /&gt;
			result = spiritSeedPerPack * tier5Data.totalProfit&lt;br /&gt;
			tier5Data[&amp;#039;spiritSeedProfit&amp;#039;] = tier5Data.spiritSeedProfit + result&lt;br /&gt;
			spiritSeedPerPack = spiritSeedPerPack * tier5Data.seedsCalculated[&amp;#039;Spirit seed&amp;#039;].quantityOutput&lt;br /&gt;
		end&lt;br /&gt;
		-- This is effectively a short-circuit to avoid additional processing&lt;br /&gt;
		if(tier == 5) then&lt;br /&gt;
			tier5Data[&amp;#039;hesporiSeedProfit&amp;#039;] = tier5Data.totalHesporiSeeds * hesporiValue&lt;br /&gt;
			if(displayTable) then&lt;br /&gt;
				return createTable(tier5Data, tier, difficulty, useSpiritSeed, useHesporiSeed)&lt;br /&gt;
			else&lt;br /&gt;
				return tier5Data.totalProfit + tier5Data.spiritSeedProfit + tier5Data.hesporiSeedProfit&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	if(taskDifficultyCount[difficulty] ~= nil) then&lt;br /&gt;
		ret = calc(seedTables, difficultyRolls(difficulty))&lt;br /&gt;
	elseif(packTierRolls[tier] ~= nil) then&lt;br /&gt;
		ret = calc(seedTables, avgTierRolls(tier))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	ret[&amp;#039;spiritSeedProfit&amp;#039;] = (useSpiritSeed and (ret.totalSpiritSeeds * (tier5Data.spiritSeedProfit + tier5Data.totalProfit)) or 0)&lt;br /&gt;
	ret[&amp;#039;hesporiSeedProfit&amp;#039;] = ret.totalHesporiSeeds * hesporiValue&lt;br /&gt;
	&lt;br /&gt;
	if(displayTable) then&lt;br /&gt;
		return createTable(ret, tier, difficulty, useSpiritSeed, useHesporiSeed)&lt;br /&gt;
	else&lt;br /&gt;
		return ret.totalProfit + ret.spiritSeedProfit + ret.hesporiSeedProfit&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ DEBUG&lt;br /&gt;
mw.log(p._main({&amp;#039;1&amp;#039;,[&amp;#039;spiritseed&amp;#039;]=&amp;#039;No&amp;#039;,[&amp;#039;Hespori&amp;#039;]=&amp;#039;Yes&amp;#039;,[&amp;#039;table&amp;#039;]=&amp;#039;Yes&amp;#039;}))&lt;br /&gt;
mw.log(p._main({&amp;#039;1&amp;#039;,[&amp;#039;spiritseed&amp;#039;]=&amp;#039;Yes&amp;#039;,[&amp;#039;Hespori&amp;#039;]=&amp;#039;No&amp;#039;,[&amp;#039;table&amp;#039;]=&amp;#039;No&amp;#039;}))&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local frameArgs = frame.args&lt;br /&gt;
	--mw.logObject(args)&lt;br /&gt;
	return p._main(args, frameArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>