17,105
edits
(_buildAstrologyConstellationTable: Include mastery level requirements against each star/set of modifiers) |
(Replace unorthodox use of GameData.getEntities() with Shared.shallowClone(); getFishTable: Amend layout of catch time columns) |
||
Line 58: | Line 58: | ||
function p.getSpecialFishingTable(frame) | function p.getSpecialFishingTable(frame) | ||
local totalWt, lootValue = 0, 0 | local totalWt, lootValue = 0, 0 | ||
local itemArray = | local itemArray = Shared.shallowClone(SkillData.Fishing.specialItems) | ||
for i, itemDef in ipairs(itemArray) do | for i, itemDef in ipairs(itemArray) do | ||
totalWt = totalWt + itemDef.weight | totalWt = totalWt + itemDef.weight | ||
Line 118: | Line 118: | ||
table.insert(resultPart, '!!XP!!Respawn Time!!Ore Value') | table.insert(resultPart, '!!XP!!Respawn Time!!Ore Value') | ||
local mineData = | local mineData = Shared.shallowClone(SkillData.Mining.rockData) | ||
table.sort(mineData, function(a, b) return a.level < b.level end) | table.sort(mineData, function(a, b) return a.level < b.level end) | ||
Line 191: | Line 191: | ||
function p.getFishTable(frame) | function p.getFishTable(frame) | ||
local recipeList = | local recipeList = Shared.shallowClone(SkillData.Fishing.fish) | ||
table.sort(recipeList, function(a, b) return a.level < b.level end) | table.sort(recipeList, function(a, b) return a.level < b.level end) | ||
Line 208: | Line 208: | ||
local resultPart = {} | local resultPart = {} | ||
table.insert(resultPart, '{| class="wikitable sortable stickyHeader"') | table.insert(resultPart, '{| class="wikitable sortable stickyHeader"') | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|- class="headerRow-0"') | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n!colspan="2" rowspan="2"|Fish\n!rowspan="2"|' .. Icons.Icon({'Fishing', type='skill', notext=true}) .. ' Level') | ||
table.insert(resultPart, '\ | table.insert(resultPart, '\n!colspan="3"|Catch Time\n!rowspan="2"|XP\n!rowspan="2"|Value\n!rowspan="2"|XP/s\n!rowspan="2"|GP/s') | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n!rowspan="2"|' .. Icons.Icon({'Cooking', type='skill', notext=true}) .. ' Level') | ||
table.insert(resultPart, '\n|- class="headerRow-1"\n!Min\n!Max\n!Avg') | |||
for i, recipe in ipairs(recipeList) do | for i, recipe in ipairs(recipeList) do | ||
local fish = Items.getItemByID(recipe.productId) | local fish = Items.getItemByID(recipe.productId) | ||
if fish ~= nil then | if fish ~= nil then | ||
local timeMin, timeMax = recipe.baseMinInterval / 1000, recipe.baseMaxInterval / 1000 | |||
local timeAvg = (timeMin + timeMax) / 2 | |||
local timeSortVal = (recipe.baseMinInterval + recipe.baseMaxInterval) / 2000 | local timeSortVal = (recipe.baseMinInterval + recipe.baseMaxInterval) / 2000 | ||
local timeStr = string.format("%.1fs - %.1fs", recipe.baseMinInterval / 1000, recipe.baseMaxInterval / 1000) | local timeStr = string.format("%.1fs - %.1fs", recipe.baseMinInterval / 1000, recipe.baseMaxInterval / 1000) | ||
Line 222: | Line 225: | ||
local cookStyle = (cookReq[recipe.productId] ~= nil and 'style="text-align:right" ' or 'class="table-na" ') | local cookStyle = (cookReq[recipe.productId] ~= nil and 'style="text-align:right" ' or 'class="table-na" ') | ||
local cookStr = cookReq[recipe.productId] or 'N/A' | local cookStr = cookReq[recipe.productId] or 'N/A' | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|-') | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|class="table-img"| ' .. Icons.Icon({fish.name, type='item', size='50', notext=true})) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|data-sort-value="'..fish.name..'"|'..Icons.getExpansionIcon(fish.id) .. Icons.Icon({fish.name, type='item', noicon=true})) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|style="text-align:right"| ' .. recipe.level) | ||
table.insert(resultPart, '\ | table.insert(resultPart, '\n|style="text-align:right" data-sort-value="' .. timeMin .. '"| ' .. string.format("%.1fs", timeMin)) | ||
table.insert(resultPart, '\ | table.insert(resultPart, '\n|style="text-align:right" data-sort-value="' .. timeMax .. '"| ' .. string.format("%.1fs", timeMax)) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|style="text-align:right" data-sort-value="' .. timeAvg .. '"| ' .. string.format("%.1fs", timeAvg)) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|style="text-align:right" data-sort-value="' .. recipe.baseExperience .. '"| ' .. Shared.formatnum(recipe.baseExperience)) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|data-sort-value="' .. fish.sellsFor .. '"| ' .. Icons.GP(fish.sellsFor)) | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|style="text-align:right"| ' .. Shared.round(XPs, 2, 2)) | ||
table.insert(resultPart, '\n|data-sort-value="' .. GPs .. '"|' .. Icons.GP(Shared.round(GPs, 2, 2))) | |||
table.insert(resultPart, '\n|' .. cookStyle .. 'data-sort-value="' .. cookSortVal .. '"| ' .. cookStr) | |||
end | end | ||
end | end | ||
table.insert(resultPart, ' | table.insert(resultPart, '\n|}') | ||
return table.concat(resultPart) | return table.concat(resultPart) | ||
end | end | ||
Line 318: | Line 323: | ||
table.insert(normalTxt, '!!Price!!colspan="2"|Chance') | table.insert(normalTxt, '!!Price!!colspan="2"|Chance') | ||
local lootTable = | local lootTable = Shared.shallowClone(npc.lootTable) | ||
--Then sort the loot table by weight | --Then sort the loot table by weight | ||
table.sort(lootTable, function(a, b) return a.weight > b.weight end) | table.sort(lootTable, function(a, b) return a.weight > b.weight end) | ||
Line 442: | Line 447: | ||
result = result..'\r\n|- class="headerRow-0"' | result = result..'\r\n|- class="headerRow-0"' | ||
result = result..'\r\n!colspan="2"|Name!!Area!!'..Icons.Icon({'Thieving', type='skill', notext=true})..' Level!!Experience!!Max Hit!!Perception!!GP!!Unique Drop' | result = result..'\r\n!colspan="2"|Name!!Area!!'..Icons.Icon({'Thieving', type='skill', notext=true})..' Level!!Experience!!Max Hit!!Perception!!GP!!Unique Drop' | ||
local npcArray = | local npcArray = Shared.shallowClone(SkillData.Thieving.npcs) | ||
table.sort(npcArray, function(a, b) return a.level < b.level end) | table.sort(npcArray, function(a, b) return a.level < b.level end) | ||
for i, npc in ipairs(npcArray) do | for i, npc in ipairs(npcArray) do |