Module:Sandbox/User:Jakesterwars/Skill pet calc

Module documentation
This documentation is transcluded from Template:Module sandbox/doc. [edit] [history] [purge]
Module:Sandbox/User:Jakesterwars/Skill pet calc requires Module:Addcommas.
Module:Sandbox/User:Jakesterwars/Skill pet calc requires Module:Skill calc/Helpers.

This module is a sandbox for Jakesterwars. It can be used to test changes to existing modules, prototype new modules, or just experimenting with lua features.

Invocations of this sandbox should be kept in userspace; if the module is intended for use in other namespaces, it should be moved out of the sandbox into a normal module and template.

This default documentation can be overridden by creating the /doc subpage of this module, as normal.

local p = {}

local commas = require('Module:Addcommas')._add
local helpers = require('Module:Skill calc/Helpers')

local pets = {
	['Baby chinchompa'] = {
		['Grey chinchompa'] = { base = 131395, level = 53 },
		['Red chinchompa'] = { base = 98373, level = 63 },
		['Black chinchompa'] = { base = 82758, level = 73 }
	},
	['Beaver'] = {
		['Achey'] = { base = 317647, level = 1 },
		['Regular'] = { base = 317647, level = 1 },
		['Oak'] = { base = 361146, level = 15 },
		['Willow'] = { base = 289286, level = 30 },
		['Teak'] = { base = 264336, level = 35 },
		['Juniper'] = { base = 360000, level = 42 },
		['Maple'] = { base = 221918, level = 45 },
		['Hollow'] = { base = 214367, level = 45 },
		['Mahogany'] = { base = 220623, level = 50 },
		['Arctic pine'] = { base = 145758, level = 54 },
		['Yew'] = { base = 145013, level = 60 },
		['Blisterwood'] = { base = 289286, level = 62 },
		['Sulliusceps'] = { base = 343000, level = 65 },
		['Magic'] = { base = 72321, level = 75 },
		['Redwood'] = { base = 72321, level = 90 },
	},
	['Giant squirrel'] = {
		['Gnome Stronghold'] = { base = 35609, level = 1 },
		['Agility Pyramid'] = { base = 9901, level = 30 },
		['Penguin'] = { base = 9779, level = 30 },
		['Barbarian Outpost'] = { base = 44376, level = 35 },
		['Brimhaven Agility Arena'] = { base = 26404, level = 1 },
		['Ape Atoll'] = { base = 37720, level = 48 },
		['Wilderness'] = { base = 34666, level = 52 },
		['Werewolf'] = { base = 32597, level = 60 },
		['Dorgesh-Kaan'] = { base = 10561, level = 70 },
		['Prifddinas'] = { base = 25146, level = 75 },
		['Draynor Village Rooftop'] = { base = 33005, level = 10 },
		['Al Kharid Rooftop'] = { base = 26648, level = 20 },
		['Varrock Rooftop'] = { base = 24410, level = 30 },
		['Canifis Rooftop'] = { base = 36842, level = 40 },
		['Falador Rooftop'] = { base = 26806, level = 50 },
		['Seers\' Village Rooftop'] = { base = 35205, level = 60 },
		['Pollnivneach Rooftop'] = { base = 33422, level = 70 },
		['Rellekka Rooftop'] = { base = 31063, level = 80 },
		['East Ardougne Rooftop'] = { base = 34440, level = 90 },
	},
	['Heron'] = {
		['Shrimps'] = { base = 435165, level = 1 },
		['Anchovies'] = { base = 435165, level = 15 },
		['Karambwanji'] = { base = 443697, level = 5 },
		['Sardine'] = { base = 443697, level = 5 },
		['Herring'] = { base = 443697, level = 10 },
		['Big net fishing'] = { base = 382609, level = 16 },
		['Trout'] = { base = 461808, level = 20 },
		['Salmon'] = { base = 461808, level = 30 },
		['Pike'] = { base = 305792, level = 25 },
		['Rainbow fish'] = { base = 137739, level = 38 },
		['Tuna'] = { base = 128885, level = 35 },
		['Swordfish'] = { base = 128885, level = 50 },
		['Lobster'] = { base = 116129, level = 40 },
		['Aerial fishing'] = { base = 636833, level = 43 },
		['Monkfish'] = { base = 138583, level = 62 },
		['Karambwan'] = { base = 170874, level = 65 },
		['Heavy rod fishing'] = { base = 426954, level = 48 },
		['Shark'] = { base = 82243, level = 76 },
		['Infernal eel'] = { base = 160000, level = 80 },
		['Anglerfish'] = { base = 78649, level = 82 },
		['Minnow'] = { base = 977778, level = 82 },
		['Dark crab'] = { base = 149434, level = 85 },
		['Sacred eel'] = { base = 99000, level = 87 },
		['Fishing Trawler'] = { base = 5000, level = 15 },
	},
	['Rift guardian'] = {
		['Blood rune'] = { base = 804984, level = 77 },
		['Soul rune'] = { base = 782999, level = 90 },
		['Ourania Altar'] = { base = 1487213, level = 1 },
		['Everything else'] = { base = 1795758, level = 1 },
	},
	['Rock golem'] = {
		['Clay'] = { base = 741600, level = 1 },
		['Copper'] = { base = 741600, level = 1 },
		['Tin'] = { base = 741600, level = 1 },
		['Blurite'] = { base = 741600, level = 10 },
		['Limestone'] = { base = 741600, level = 10 },
		['Iron'] = { base = 741600, level = 15 },
		['Barronite rocks'] = { base = 741600, level = 14 },
		['Silver'] = { base = 741600, level = 20 },
		['Calcified rocks'] = { base = 741600, level = 41 },
		['Coal'] = { base = 290640, level = 30 },
		['Sandstone'] = { base = 741600, level = 35 },
		['Gold'] = { base = 296640, level = 40 },
		['Gem'] = { base = 211886, level = 40 },
		['Granite'] = { base = 741600, level = 45 },
		['Ash pile'] = { base = 741600, level = 22 },
		['Volcanic sulphur'] = { base = 710000, level = 42 },
		['Volcanic Mine'] = { base = 60000, level = 50 },
		['Mithril'] = { base = 148320, level = 55 },
		['Lovakite'] = { base = 245562, level = 65 },
		['Adamantite'] = { base = 59328, level = 70 },
		['Runite'] = { base = 42377, level = 85 },
		['Amethyst crystal'] = { base = 46350, level = 92 },
		['Blast mine'] = { base = 123600, level = 43 },
		['Motherlode Mine'] = { base = 247200, level = 30 },
		['Crashed Star (size 1)'] = { base = 521550, level = 10 },
		['Crashed Star (size 2)'] = { base = 521550, level = 20 },
		['Crashed Star (size 3)'] = { base = 521550, level = 30 },
		['Crashed Star (size 4)'] = { base = 521550, level = 40 },
		['Crashed Star (size 5)'] = { base = 521550, level = 50 },
		['Crashed Star (size 6)'] = { base = 521550, level = 60 },
		['Crashed Star (size 7)'] = { base = 521550, level = 70 },
		['Crashed Star (size 8)'] = { base = 521550, level = 80 },
		['Crashed Star (size 9)'] = { base = 521550, level = 90 },
	},
	['Rocky'] = {
		['Vegetable stall'] = { base = 206777, level = 2 },
		['Cake stall'] = { base = 124066, level = 5 },
		['Crafting stall'] = { base = 47718, level = 5 },
		['Monkey general stall'] = { base = 47718, level = 5 },
		['Silk stall'] = { base = 68926, level = 20 },
		['Wine stall'] = { base = 36490, level = 22 },
		['Fruit stall'] = { base = 124066, level = 25 },
		['Seed stall'] = { base = 36490, level = 27 },
		['Fur stall'] = { base = 36490, level = 35 },
		['Fish stall'] = { base = 36490, level = 42 },
		['Crossbow stall'] = { base = 36490, level = 49 },
		['Silver stall'] = { base = 36490, level = 50 },
		['Magic stall'] = { base = 36490, level = 65 },
		['Scimitar stall'] = { base = 36490, level = 65 },
		['Spice stall'] = { base = 36490, level = 65 },
		['Gem stall'] = { base = 36490, level = 75 },
		['Sorceress\'s Garden'] = { base = 10339, level = 1 },
		['Watchman'] = { base = 134625, level = 65 },
		['Paladin'] = { base = 127056, level = 70 },
		['Gnome'] = { base = 108718, level = 75 },
		['Hero'] = { base = 99175, level = 80 },
		['Elf'] = { base = 99175, level = 85 },
		['TzHaar-Hur'] = { base = 176743, level = 90 },
		['Remaining pickpockets'] = { base = 257211, level = 1 },
		['Pyramid Plunder (Room 1)'] = { base = 41355, level = 21 },
		['Pyramid Plunder (Room 2)'] = { base = 29540, level = 31 },
		['Pyramid Plunder (Room 3)'] = { base = 25847, level = 41 },
		['Pyramid Plunder (Room 4)'] = { base = 20678, level = 51 },
		['Pyramid Plunder (Room 5)'] = { base = 20678, level = 61 },
		['Pyramid Plunder (Room 6)'] = { base = 20678, level = 71 },
		['Pyramid Plunder (Room 7)'] = { base = 10339, level = 81 },
		['Pyramid Plunder (Room 8)'] = { base = 6893, level = 91 },
	},
	['Tangleroot'] = {
		['Potato'] = { base = 281040, level = 1 },
		['Marigolds'] = { base = 281040, level = 2 },
		['Barley'] = { base = 112416, level = 3 },
		['Hammerstone hops'] = { base = 112416, level = 4 },
		['Onion'] = { base = 281040, level = 5 },
		['Cabbage'] = { base = 281040, level = 7 },
		['Asgarnian hops'] = { base = 89933, level = 8 },
		['Guam'] = { base = 98364, level = 9 },
		['Redberries'] = { base = 44966, level = 10 },
		['Rosemary'] = { base = 281040, level = 11 },
		['Tomato'] = { base = 281040, level = 12 },
		['Jute fibre'] = { base = 89933, level = 13 },
		['Marrentill'] = { base = 98364, level = 14 },
		['Oak tree'] = { base = 22483, level = 15 },
		['Yanillian hops'] = { base = 74944, level = 16 },
		['Tarromin'] = { base = 98364, level = 19 },
		['Sweetcorn'] = { base = 224832, level = 20 },
		['Krandorian hops'] = { base = 64238, level = 21 },
		['Cadava berries'] = { base = 37472, level = 22 },
		['Giant seaweed'] = { base = 7500, level = 23 },
		['Nasturtiums'] = { base = 281040, level = 24 },
		['Woad leaf'] = { base = 281040, level = 25 },
		['Limpwurt root'] = { base = 224832, level = 26 },
		['Harralander'] = { base = 98364, level = 26 },
		['Apple tree'] = { base = 9000, level = 27 },
		['Wildblood hops'] = { base = 56208, level = 28 },
		['Goutweed'] = { base = 98364, level = 29 },
		['Willow tree'] = { base = 16059, level = 30 },
		['Strawberry'] = { base = 187360, level = 31 },
		['Ranarr'] = { base = 98364, level = 32 },
		['Banana tree'] = { base = 9000, level = 33 },
		['Tithe Farm'] = { base = 7494389, level = 34 },
		['Teak tree'] = { base = 5000, level = 35 },
		['Dwellberries'] = { base = 32119, level = 36 },
		['Grapes'] = { base = 385426, level = 36 },
		['Toadflax'] = { base = 98364, level = 38 },
		['Orange tree'] = { base = 9000, level = 39 },
		['Curry tree'] = { base = 9000, level = 42 },
		['Irit'] = { base = 98364, level = 44 },
		['Maple tree'] = { base = 14052, level = 45 },
		['Watermelon'] = { base = 160594, level = 47 },
		['Jangerberries'] = { base = 28104, level = 48 },
		['Avantoe'] = { base = 98364, level = 50 },
		['Pineapple plant'] = { base = 9000, level = 51 },
		['Mushroom'] = { base = 7500, level = 53 },
		['Cactus'] = { base = 7000, level = 55 },
		['Mahogany tree'] = { base = 5000, level = 55 },
		['Kwuarm'] = { base = 98364, level = 56 },
		['Papaya tree'] = { base = 9000, level = 57 },
		['White lily'] = { base = 281040, level = 58 },
		['White berries'] = { base = 28104, level = 59 },
		['Yew tree'] = { base = 11242, level = 60 },
		['Snape grass'] = { base = 173977, level = 61 },
		['Snapdragon'] = { base = 98364, level = 62 },
		['Cave nightshade'] = { base = 8000, level = 63 },
		['Potato cactus'] = { base = 160594, level = 64 },
		['Hespori'] = { base = 7000, level = 65 },
		['Cadantine'] = { base = 98364, level = 67 },
		['Palm tree'] = { base = 9000, level = 68 },
		['Poison ivy berries'] = { base = 28104, level = 70 },
		['Calquat tree'] = { base = 6000, level = 72 },
		['Lantadyme'] = { base = 98364, level = 73 },
		['Crystal tree'] = { base = 9000, level = 74 },
		['Magic tree'] = { base = 9368, level = 75 },
		['Dwarf weed'] = { base = 98364, level = 79 },
		['Dragonfruit tree'] = { base = 9000, level = 81 },
		['Spirit tree'] = { base = 5000, level = 83 },
		['Celastrus tree'] = { base = 9000, level = 85 },
		['Torstol'] = { base = 98364, level = 85 },
		['Redwood tree'] = { base = 5000, level = 90 },
	}
}

function p.main(frame)
	local args = frame:getParent().args
	local level = args.level
	local pet = args.pet
	local actionsPerHour = args.actionsPerHour or 1
	local petData = pets[pet]
	
	local ret = mw.html.create('table'):addClass('wikitable sortable sticky-header align-center-2 align-center-3 align-center-4 autosort=2,a')
	ret:tag('tr')
		:tag('th'):wikitext('Method')
		:tag('th'):wikitext('Level')
		:tag('th'):wikitext('Chance per action')
		:tag('th'):wikitext('Chance per hour<br />with APH')
	
	for i, v in next, petData, nil do
		ret:node(make_row(v, i, level, actionsPerHour))
	end
	
	return tostring(ret)
end

function make_row(data, method, level, actionsPerHour)
	local doNotCalculate = ({ Minnow = true, ['Fishing Trawler'] = true })[method]
	local chancePerAction = doNotCalculate and data.base or tonumber(data.base) - (tonumber(level) * 25)
	local chancePerHour = helpers.jagexFloor(1/(1-math.pow(1-1/chancePerAction, actionsPerHour)), 2)
	
	return mw.html.create('tr')
		:tag('td'):wikitext(method):done()
		:tag('td'):wikitext(data.level):done()
		:tag('td'):attr('data-sort-value', 1/chancePerAction):wikitext('1/' .. commas(chancePerAction)):done()
		:tag('td'):attr('data-sort-value', 1/chancePerHour):wikitext('1/' .. commas(chancePerHour)):done()
end

return p