17,101
edits
(Use Thieving drop chances from game data instead of hard-coded values) |
(Move functions to Module:Skills; Move Farming functions from Module:Skills) |
||
Line 9: | Line 9: | ||
local Items = require('Module:Items') | local Items = require('Module:Items') | ||
local Icons = require('Module:Icons') | local Icons = require('Module:Icons') | ||
local Skills = require('Module:Skills') | |||
local ItemSourceTables = require('Module:Items/SourceTables') | |||
function p.getAxeTable(frame) | function p.getAxeTable(frame) | ||
Line 357: | Line 336: | ||
result = result..'\r\n|}' | result = result..'\r\n|}' | ||
return result | return result | ||
end | end | ||
Line 530: | Line 449: | ||
areaTxt = areaTxt..'The chance of receiving an Area Unique drop is tripled if the 95% Thieving Mastery Pool checkpoint is active.' | areaTxt = areaTxt..'The chance of receiving an Area Unique drop is tripled if the 95% Thieving Mastery Pool checkpoint is active.' | ||
local area = | local area = Skills.getThievingNPCArea(npc) | ||
areaTxt = areaTxt..'\r\n{|class="wikitable sortable"' | areaTxt = areaTxt..'\r\n{|class="wikitable sortable"' | ||
areaTxt = areaTxt..'\r\n!Item!!Qty' | areaTxt = areaTxt..'\r\n!Item!!Qty' | ||
Line 574: | Line 493: | ||
function p.getThievingNPCLootTables(frame) | function p.getThievingNPCLootTables(frame) | ||
local npcName = frame.args ~= nil and frame.args[1] or frame | local npcName = frame.args ~= nil and frame.args[1] or frame | ||
local npc = | local npc = Skills.getThievingNPC(npcName) | ||
if npc == nil then | if npc == nil then | ||
return "ERROR: Invalid Thieving NPC "..npcName.."[[Category:Pages with script errors]]" | return "ERROR: Invalid Thieving NPC "..npcName.."[[Category:Pages with script errors]]" | ||
Line 593: | Line 512: | ||
result = result..'||'..Icons.Icon({npc.name, type='thieving', noicon=true}) | result = result..'||'..Icons.Icon({npc.name, type='thieving', noicon=true}) | ||
local area = | local area = Skills.getThievingNPCArea(npc) | ||
result = result..'||'..area.name | result = result..'||'..area.name | ||
result = result..'||'..Icons._SkillReq('Thieving', npc.level) | result = result..'||'..Icons._SkillReq('Thieving', npc.level) | ||
Line 671: | Line 590: | ||
end | end | ||
function p. | function p._getFarmingTable(category) | ||
local | local seedList = {} | ||
if category == 'Allotment' or category == 'Herb' or category == 'Tree' then | |||
seedList = Items.getItems(function(item) return item.tier == category end) | |||
else | |||
return 'ERROR: Invalid farming category. Please choose Allotment, Herb, or Tree' | |||
end | |||
local | local result = '{|class="wikitable sortable stickyHeader"' | ||
result = result..'\r\n|- class="headerRow-0"' | |||
result = result..'\r\n!colspan=2|Seeds!!'..Icons.Icon({'Farming', type='skill', notext=true})..' Level' | |||
result = result..'!!XP!!Growth Time!!Seed Value' | |||
if category == 'Allotment' then | |||
result = result..'!!colspan="2"|Crop!!Crop Healing!!Crop Value' | |||
elseif category == 'Herb' then | |||
result = result..'!!colspan="2"|Herb!!Herb Value' | |||
elseif category == 'Tree' then | |||
result = result..'!!colspan="2"|Logs!!Log Value' | |||
end | |||
result = result..'!!Seed Sources' | |||
table.sort(seedList, function(a, b) return a.farmingLevel < b.farmingLevel end) | |||
for i, seed in pairs(seedList) do | |||
result = result..'\r\n|-' | |||
result = result..'\r\n|'..Icons.Icon({seed.name, type='item', size='50', notext=true})..'||[['..seed.name..']]' | |||
result = result..'||'..seed.farmingLevel..'||'..Shared.formatnum(seed.farmingXP) | |||
result = result..'||data-sort-value="'..seed.timeToGrow..'"|'..Shared.timeString(seed.timeToGrow, true) | |||
result = result..'||data-sort-value="'..seed.sellsFor..'"|'..Icons.GP(seed.sellsFor) | |||
local crop = Items.getItemByID(seed.grownItemID) | |||
result = result..'||'..Icons.Icon({crop.name, type='item', size='50', notext=true})..'||[['..crop.name..']]' | |||
if category == 'Allotment' then | |||
result = result..'||'..Icons.Icon({'Hitpoints', type='skill', notext=true})..' '..(crop.healsFor * 10) | |||
end | end | ||
result = result..'||data-sort-value="'..crop.sellsFor..'"|'..Icons.GP(crop.sellsFor) | |||
result = result..'||'..ItemSourceTables._getItemSources(seed) | |||
end | end | ||
result = result..'\r\n|}' | |||
return result | |||
end | |||
function p.getFarmingTable(frame) | |||
local category = frame.args ~= nil and frame.args[1] or frame | |||
return p._getFarmingTable(category) | |||
end | |||
function p.getFarmingFoodTable(frame) | |||
local result = '{| class="wikitable sortable stickyHeader"' | |||
result = result..'\r\n|- class="headerRow-0"' | |||
result = result..'\r\n!colspan="2"|Crop!!'..Icons.Icon({"Farming", type="skill", notext=true})..' Level' | |||
result = result..'!!Healing!!Value' | |||
local itemArray = Items.getItems(function(item) return item.grownItemID ~= nil end) | |||
table.sort(itemArray, function(a, b) return a.farmingLevel < b.farmingLevel end) | |||
if | for i, item in Shared.skpairs(itemArray) do | ||
local crop = Items.getItemByID(item.grownItemID) | |||
if crop.healsFor ~= nil and crop.healsFor > 0 then | |||
result = result..'\r\n|-' | |||
result = result..'\r\n|'..Icons.Icon({crop.name, type='item', notext='true', size='50'})..'||[['..crop.name..']]' | |||
result = result..'||style="text-align:right;"|'..item.farmingLevel | |||
result = result..'||style="text-align:right" data-sort-value="'..crop.healsFor..'"|'..Icons.Icon({"Hitpoints", type="skill", notext=true})..' '..(crop.healsFor * 10) | |||
result = result..'||style="text-align:right" data-sort-value="'..crop.sellsFor..'"|'..Icons.GP(crop.sellsFor) | |||
end | end | ||
end | end | ||
result = result..'\r\n|}' | |||
return | return result | ||
end | end | ||
function p.getFarmingPlotTable(frame) | |||
local areaName = frame.args ~= nil and frame.args[1] or frame | |||
local patches = nil | |||
for i, area in Shared.skpairs(SkillData.Farming.Patches) do | |||
if area.areaName == areaName then | |||
patches = area.patches | |||
function p. | break | ||
local | |||
end | end | ||
end | end | ||
if | if patches == nil then | ||
return "ERROR: Invalid area name.[[Category:Pages with script errors]]" | |||
end | end | ||
local | local result = '{|class="wikitable"' | ||
result = result..'\r\n!Plot!!'..Icons.Icon({'Farming', type='skill', notext=true})..' Level!!Cost' | |||
for | |||
for i, patch in Shared.skpairs(patches) do | |||
result = result..'\r\n|-\r\n|'..i | |||
result = result..'||style="text-align:right;" data-sort-value="' .. patch.level .. '"|'..patch.level | |||
if patch.cost == 0 then | |||
result = result..'||Free' | |||
else | |||
result = result..'||style="text-align:right;" data-sort-value="'..patch.cost..'"|'..Icons.GP(patch.cost) | |||
end | end | ||
end | end | ||
result = result..'\r\n|}' | |||
return result | |||
end | end | ||
Line 822: | Line 714: | ||
result = result..'||'..table.concat(skillIconArray, '<br/>') | result = result..'||'..table.concat(skillIconArray, '<br/>') | ||
local standModsRaw = | local standModsRaw = Skills._buildAstrologyModifierArray(cons, maxModifier, true, false, false, false) | ||
local standMods = {} | local standMods = {} | ||
--Building the list of Standard modifiers: | --Building the list of Standard modifiers: | ||
Line 831: | Line 723: | ||
--Building the list of all Unique Modifiers | --Building the list of all Unique Modifiers | ||
local uModsRaw = | local uModsRaw = Skills._buildAstrologyModifierArray(cons, maxModifier, false, true, false, false) | ||
local uMods = {} | local uMods = {} | ||
for j, modifier in ipairs(uModsRaw) do | for j, modifier in ipairs(uModsRaw) do |