Module:Lava shard chart
Documentation for this module may be created at Module:Lava shard chart/doc
local chart = require( 'Module:Chart data' )
local p = {}
function interp(low, high, level)
local value = math.floor(low*(99-level)/98 + high*(level-1)/98 + 0.5) + 1
return math.min(math.max(value / 256, 0), 1)
end
function p._calculateDataSets(args)
local dataSets = {}
local data = {}
local dataBoost = {}
local shards3, shards4, shards5, shards6
local roll1, roll2, roll3
for x = 1, 99 do
roll1 = interp(101, 301, x)
roll2 = interp(58, 251, x)
roll3 = interp(-14, 254, x)
shards3 = (1-roll1) * (1-roll2) * (1-roll3) -- need to miss all rolls
shards4 = roll1 * (1-roll2) * (1-roll3) + roll2 * (1-roll1) * (1-roll3) + roll3 * (1-roll1) * (1-roll2) -- need to hit one roll
shards5 = roll1 * roll2 * (1-roll3) + roll2 * roll3 * (1-roll1) + roll1 * roll3 * (1-roll2) -- need to hit two rolls
shards6 = roll1 * roll2 * roll3 -- need to hit all three rolls
shardsTot = 3 * shards3 + 4 * shards4 + 5 * shards5 + 6 * shards6
shardsTotBoost = 4 * shards3 + 6 * shards4 + 7 * shards5 + 9 * shards6
table.insert(data, {x=x, y=shardsTot})
table.insert(dataBoost, {x=x, y=shardsTotBoost})
end
table.insert(dataSets, {
data = {},
label = 'Standard',
borderDash = {5, 5},
borderCapStyle = 'round',
pointRadius = 0,
baseColor = 'brown',
pointStyleImg = 'Lava scale.png',
})
table.insert(dataSets, {
data = data,
label = 'Standard',
borderDash = {},
borderCapStyle = 'round',
pointRadius = 0,
baseColor = 'brown',
})
table.insert(dataSets, {})
table.insert(dataSets, {
data = {},
label = 'Hard Wilderness Diary',
borderDash = {5, 5},
borderCapStyle = 'round',
pointRadius = 0,
baseColor = 'teal',
pointStyleImg = 'Wilderness sword 3.png',
})
table.insert(dataSets, {
data = dataBoost,
label = 'Hard Wilderness Diary',
borderDash = {},
borderCapStyle = 'round',
pointRadius = 0,
baseColor = 'teal',
})
table.insert(dataSets, {})
return dataSets
end
function p.main(frame)
local args = frame:getParent().args
return p._main(args)
end
function p._main(args)
local plot = chart.newChart{ type = 'scatter' }
:setTitle( args.label )
:setDimensions( '540px', '400px', '540px', '400px', true )
:setXLabel( args.xlabel or 'Level' )
:setYLabel( args.ylabel or 'Success rate' )
:setXLimits( nil, nil, 1 )
:setYLimits( nil, nil, 1 )
:setTitle('Average yield')
:setXLabel('Herblore level')
:setYLabel('Lava scale shards')
:setTooltipFormat('harvestLives')
:setDatasetsPerGroup(3)
local dataSets = p._calculateDataSets(args)
for i, dataSet in ipairs(dataSets) do
plot:newDataSet(dataSet)
end
return plot
end
return p