Editing Module:Sandbox/User:Alsang
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 4: | Line 4: | ||
local currency = require('Module:Currency') |
local currency = require('Module:Currency') |
||
local lang = mw.getContentLanguage() |
local lang = mw.getContentLanguage() |
||
local xpdata = mw.loadData('Module:Experience/data') |
|||
local p = {} |
local p = {} |
||
Line 14: | Line 13: | ||
-- other parameters are determined by subqueries of chained pages |
-- other parameters are determined by subqueries of chained pages |
||
local query = { |
local query = { |
||
'[[Rotten Tree Stump||Rotting Log (Hopeport)||Rock Pool||Scrap Metal Bin]]', |
|||
'[[Activity JSON::~*]]', |
|||
'? = name', |
|||
'?Activity JSON = activityJSON', |
'?Activity JSON = activityJSON', |
||
' |
'?#- = name', |
||
'limit = 500' |
|||
} |
} |
||
local results = mw.smw.ask(query) |
local results = mw.smw.ask(query) |
||
results = p.screenResults(results) |
results = p.screenResults(results) |
||
results = p.formatResults(results) |
|||
return p.displayTable(results) |
return p.displayTable(results) |
||
Line 28: | Line 29: | ||
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>' |
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>' |
||
end |
|||
-- makes the html for the cells containing currency directly |
|||
-- Replaces nil with an "unknown" cell |
|||
local function currency_cell(amount) |
|||
if not amount then |
|||
return mw.html.create('td') |
|||
:addClass('table-bg-gray') |
|||
:css{ ['text-align'] = 'center' } |
|||
:attr{ colspan = '10' } |
|||
:wikitext("''unknown''") |
|||
:done() |
|||
end |
|||
return currency._cell(amount, { html = 'yes' }) |
|||
end |
end |
||
Line 44: | Line 59: | ||
for j,json in ipairs(item.activityJSON) do |
for j,json in ipairs(item.activityJSON) do |
||
-- if string.find(json,'Branches') or string.find(json,'Split') then |
|||
local activityJSON = mw.text.jsonDecode(json) |
|||
local activityJSON = mw.text.jsonDecode(json) |
|||
local itemNew = {} |
local itemNew = {} |
||
itemNew.name = item.name |
itemNew.name = item.name |
||
itemNew.XP = activityJSON.xp |
itemNew.XP = activityJSON.xp |
||
itemNew.lvl = activityJSON.level |
itemNew.lvl = activityJSON.level |
||
itemNew. |
itemNew.duration = activityJSON.duration and tonumber(activityJSON.duration) |
||
itemNew.duration = activityJSON.duration |
|||
itemNew.product = activityJSON.output[1].name |
itemNew.product = activityJSON.output[1].name |
||
itemNew.activityJSON = json |
|||
itemNew.XPperHour = itemNew.XP and tonumber(itemNew.XP) and itemNew.duration and tonumber(itemNew.duration) and tonumber(itemNew.XP) * 3600 / tonumber(itemNew.duration) |
|||
itemNew.fitXP = xpdata.knowledge[itemNew.lvl]*4*0.0005 |
|||
if itemNew.lvl>=200 then |
|||
itemNew.fitXP = itemNew.fitXP * 4 |
|||
end |
|||
itemNew.fitXP = math.floor(itemNew.fitXP * 100 ) / 100 |
|||
local query = mw.smw.ask('[[Sold item::' .. itemNew.product .. ']][[Shop sell price::!~N/A]]|?Shop sell price=data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
-- price is returned as a number |
|||
itemNew.productSellPrice = tonumber(query[1].data)*0.005 |
|||
else |
|||
-- will return nil if the item is not in a shop, or if it is in a shop but can only be sold to the shop |
|||
itemNew.productSellPrice = nil |
|||
end |
|||
table.insert(resultsScreened,itemNew) |
table.insert(resultsScreened,itemNew) |
||
end |
-- end |
||
end |
end |
||
end |
end |
||
Line 92: | Line 89: | ||
return resultsScreened |
return resultsScreened |
||
end |
|||
-- do calculations and determine strings to go in cells |
|||
function p.formatResults(results) |
|||
-- iterate through products |
|||
for _, item in ipairs(results) do |
|||
item.givesCoins = string.find(item.product,'Split') |
|||
-- profit from selling the items |
|||
if not item.givesCoins then |
|||
-- protection against missing parameters |
|||
item.product = item.product or '' |
|||
-- query is: there is a shop object page that has this item AND has buy price cannot be "N/A" |
|||
local query = mw.smw.ask('[[Sold item::' .. item.product .. ']][[Shop sell price::!~N/A]]|?Shop sell price=data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
-- price is returned as a number |
|||
item.coins = tonumber(query[1].data)*0.005 or 0 |
|||
else |
|||
-- will return nil if the item is not in a shop, or if it is in a shop but can only be sold to the shop |
|||
item.coins = 0 |
|||
end |
|||
end |
|||
-- no downtime for passives |
|||
item.productPerHour = item.duration and 1 / item.duration * 3600 |
|||
-- properties per hour |
|||
item.XPPerHour = item.XP and item.productPerHour and math.floor(item.XP * item.productPerHour) |
|||
item.coinsPerHour = item.coins and item.productPerHour and math.floor(item.coins * item.productPerHour) |
|||
end |
|||
return results |
|||
end |
end |
||
Line 100: | Line 134: | ||
:tag('tr') |
:tag('tr') |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('[[File:Forager small icon.png|15px]] Level') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:attr{ colspan = '2' } |
|||
:wikitext('Forager node') |
|||
:done() |
|||
:tag('th') |
|||
:attr{ colspan = '3' } |
|||
:wikitext('Product') |
:wikitext('Product') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('Quantity/hr') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
: |
:attr{ colspan = '10' } |
||
:wikitext('Profit/hr') |
|||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
Line 115: | Line 155: | ||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('XP/hr') |
||
:done() |
:done() |
||
:tag('th') |
|||
:wikitext('sell price<br>per action') |
|||
:done() |
|||
-- :tag('th') |
|||
-- :wikitext('Duration') |
|||
-- :done() |
|||
-- :tag('th') |
|||
-- :wikitext('XP/hr') |
|||
-- :done() |
|||
:done() |
:done() |
||
local unknown_value_cell = mw.html.create('td') |
|||
:addClass('table-bg-gray') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext("''unknown''") |
|||
for i, item in ipairs(results) do |
for i, item in ipairs(results) do |
||
Line 132: | Line 168: | ||
--level |
--level |
||
:IF(item.lvl) |
|||
:tag('td') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext(item.lvl) |
|||
:done() |
|||
:ELSE() |
|||
:node(unknown_value_cell) |
|||
:END() |
|||
-- activity |
|||
:tag('td') |
:tag('td') |
||
:css{ ['border-right'] = '0', ['text-align'] = 'right', ['max-width'] = '100px' } |
|||
:wikitext(item.name) |
|||
:attr{ ['data-sort-value'] = item.name } |
|||
:wikitext(' [[File:' .. item.name .. '.png|link=' .. item.name .. '|30x30px]]') |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:addClass('plinkt-link no-border') |
|||
:wikitext('[[' .. item.product .. ']]') |
|||
:wikitext('[[' .. item.name .. ']]') |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:css{ ['border-right'] = '0', ['text-align'] = 'right' } |
|||
:wikitext('[[' .. item.profession .. ']]') |
|||
:attr{ ['data-sort-value'] = item.product } |
|||
:wikitext('0.005 × ') |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:css{ ['border-right'] = '0', ['text-align'] = 'center', ['max-width'] = '100px' } |
|||
:wikitext(item.lvl) |
|||
:addClass('plinkt-link no-border') |
|||
:wikitext('[[File:' .. item.product .. '.png|link=' .. item.product .. '|30x30px]]') |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:addClass('plinkt-link no-border') |
|||
:wikitext(item.XP) |
|||
:wikitext('[[' .. item.product .. ']]') |
|||
:done() |
:done() |
||
-- products per hour (items) |
|||
:tag('td') |
:tag('td') |
||
:css{ ['text-align'] = 'right' } |
|||
:wikitext(item.fitXP) |
|||
:wikitext('0.9 × [[File:' .. item.product .. '.png|link=' .. item.product .. '|30x30px]]') |
|||
:done() |
:done() |
||
:tag('td') |
|||
-- profit per hour (coins) |
|||
:wikitext(item.productSellPrice) |
|||
:node(currency_cell(item.coinsPerHour)) |
|||
:done() |
|||
-- :tag('td') |
|||
-- XP |
|||
-- :wikitext(item.duration) |
|||
:IF(item.XP) |
|||
:tag('td') |
|||
:wikitext(item.XP and lang:formatNum(tonumber(item.XP))) |
|||
:done() |
|||
:ELSE() |
|||
:node(unknown_value_cell) |
|||
:END() |
|||
-- XP per hour |
|||
:IF(item.XPPerHour) |
|||
:tag('td') |
|||
:wikitext(item.XPPerHour and lang:formatNum(tonumber(item.XPPerHour))) |
|||
:done() |
|||
:ELSE() |
|||
:node(unknown_value_cell) |
|||
:END() |
|||
:done() |
:done() |