Module:Skills/Archaeology: Difference between revisions

m
Fixed shop link
(Undo revision 64450 by BasChana (talk))
Tag: Undo
m (Fixed shop link)
 
(17 intermediate revisions by 3 users not shown)
Line 6: Line 6:


local Shared = require('Module:Shared')
local Shared = require('Module:Shared')
local Common = require('Module:Common')
local Constants = require('Module:Constants')
local Constants = require('Module:Constants')
local GameData = require('Module:GameData')
local GameData = require('Module:GameData')
Line 33: Line 34:
end
end
return nil
return nil
end
function p._getArtefactType(item)
if item.isArtefact then
if item.isGenericArtefact then
return 'Generic'
elseif item.validSlots ~= nil then
local searchSlots = { 'Consumable', 'Gem' }
for i, slotID in ipairs(searchSlots) do
if Shared.contains(item.validSlots, slotID) then
return Common.getEquipmentSlotLink(slotID)
end
end
end
return 'Other'
end
end
end


Line 42: Line 59:
local result = {}
local result = {}
table.insert(result, '{|class="wikitable sortable" id="itemdrops"')
table.insert(result, '{|class="wikitable sortable" id="itemdrops"')
table.insert(result, '\r\n!Item!!Qty')
table.insert(result, '\r\n!Item!!Type!!Qty')
table.insert(result, '!!Price!!colspan="2"|Chance')
table.insert(result, '!!Price!!colspan="2"|Chance')
local lootTable = Shared.shallowClone(digSite.artefacts[string.lower(size)])
local lootTable = Shared.shallowClone(digSite.artefacts[string.lower(size)])
local lootValue = 0
local lootValue = 0
local plusOneMinimumRefinementValue = 0
local doubleConsumableRefinementValue = 0
local totalWt = 0
local totalWt = 0
for i, row in ipairs(lootTable) do
for i, row in ipairs(lootTable) do
Line 65: Line 84:
for i, row in ipairs(lootTable) do
for i, row in ipairs(lootTable) do
local thisItem = Items.getItemByID(row.itemID)
local thisItem = Items.getItemByID(row.itemID)
if thisItem ~= nil then
if thisItem ~= nil then
Line 71: Line 91:
table.insert(result, '\r\n|-\r\n|Unknown Item[[Category:Pages with script errors]]')
table.insert(result, '\r\n|-\r\n|Unknown Item[[Category:Pages with script errors]]')
end
end
table.insert(result, '||' .. p._getArtefactType(thisItem) .. '')
table.insert(result, '||style="text-align:right" data-sort-value="'..row.maxQuantity..'"|')
table.insert(result, '||style="text-align:right" data-sort-value="'..row.maxQuantity..'"|')
if row.maxQuantity > row.minQuantity then
if row.maxQuantity > row.minQuantity then
table.insert(result, Shared.formatnum(row.minQuantity) .. ' - ')
table.insert(result, Shared.formatnum(row.minQuantity) .. ' - ')
end
end
table.insert(result, Shared.formatnum(row.maxQuantity))
table.insert(result, Shared.formatnum(row.maxQuantity))
 
-- Adding price columns
--Adding price columns
local itemPrice = 0
local itemPrice = 0
if thisItem == nil then
if thisItem == nil then
Line 90: Line 110:
end
end
end
end
 
-- Getting the drop chance
--Getting the drop chance
local dropChance = (row.weight / totalWt)
local dropChance = (row.weight / totalWt)
if dropChance < 100 then
if dropChance < 100 then
Line 104: Line 123:
local fmt = (dropChance < 0.10 and '%.2g') or '%.2f'
local fmt = (dropChance < 0.10 and '%.2g') or '%.2f'
table.insert(result, 'style="text-align:right"|'..string.format(fmt, dropChance * 100)..'%')
table.insert(result, 'style="text-align:right"|'..string.format(fmt, dropChance * 100)..'%')
lootValue = lootValue + (dropChance * 0.01 * thisItem.sellsFor * ((row.minQuantity + row.maxQuantity)/ 2))
-- Setting average gp values with various parameters
local artefactAvgValue = dropChance * thisItem.sellsFor * ((row.minQuantity + row.maxQuantity) / 2)
lootValue = lootValue + artefactAvgValue
plusOneMinimumRefinementValue = plusOneMinimumRefinementValue + (dropChance * thisItem.sellsFor)
-- Checking if item is a consumable, then adding its value a second time
        if Items._canItemUseSlot(thisItem, 'Consumable') then
            doubleConsumableRefinementValue = doubleConsumableRefinementValue + artefactAvgValue
        end
end
end
table.insert(result, '\r\n|}')
table.insert(result, '\r\n|}')
table.insert(result, '\r\nThe average value of one action is '..Icons.GP(Shared.round(lootValue, 2, 0))..'.')
table.insert(result, '\r\nThe average value of one action is '..Icons.GP(Shared.round(lootValue, 2, 0))..', ')
table.insert(result, 'increasing to '..Icons.GP(Shared.round(lootValue + plusOneMinimumRefinementValue, 2, 0))..' when the +1 Minimum Items refinement is active.')
if doubleConsumableRefinementValue > 0 then
table.insert(result, '\r\n\r\nThe average value of one action with the x2 Consumables refinement is '..Icons.GP(Shared.round(lootValue + doubleConsumableRefinementValue, 2, 0))..'.')
end
return table.concat(result, '')
return table.concat(result, '')
Line 177: Line 207:
return table.concat(resultArray, '')
return table.concat(resultArray, '')
end
function p._getMuseumRewards(reward)
local rewardTable = {}
local equipment = nil
if reward.gp ~= nil then
table.insert(rewardTable, Icons.GP(reward.gp))
end
if reward.items ~= nil then
for _, reward in ipairs(reward.items) do
local item = Items.getItemByID(reward.id)
table.insert(rewardTable, Icons.Icon({item.name, type='item', qty=reward.quantity}))
if item.category == 'Archaeology' then
equipment = item.name
end
end
end
if reward.modifiers ~= nil then
for modifier, value in pairs(reward.modifiers) do
table.insert(rewardTable, Constants._getModifierText(modifier, value, true))
end
end
if equipment ~= nil then
table.insert(rewardTable, 'Unlocks the ability to purchase '..equipment..' from the '..Icons.Icon({'Shop'}))
end
return rewardTable
end
function p.getMuseumRewardsTable(frame)
-- Build the table
local resultTable = mw.html.create('table')
resultTable:addClass('wikitable sortable lighttable')
resultTable:tag('tr'):addClass('headerRow-0')
:tag('th'):wikitext('Donations')
:tag('th'):wikitext('Rewards')
for _, reward in ipairs(SkillData.Archaeology.museumRewards) do
local tr = mw.html.create('tr')
tr:tag('td'):wikitext(reward.museumCount)
tr:tag('td'):wikitext(table.concat(p._getMuseumRewards(reward), '<br/>'))
resultTable:node(tr)
end
return tostring(resultTable)
end
end


return p
return p
570

edits