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 1: | Line 1: | ||
p = {} |
|||
require('strict') |
|||
require('Module:Mw.html extension') |
|||
local param = require( 'Module:Paramtest' ) |
|||
local currency = require('Module:Currency') |
|||
local lang = mw.getContentLanguage() |
|||
local xpdata = mw.loadData('Module:Experience/data') |
|||
function p.main(args) |
|||
local p = {} |
|||
-- non dynamic module, no inputs |
|||
function p.main() |
|||
local variants = {'Basic','Moderate','Fine','Strong','Superior','Perfect'} |
|||
-- returns only directly needed parameter needed for the row, |
|||
local rocks ={'flint','basalt','andesite','granite','deathstone'} |
|||
-- other parameters are determined by subqueries of chained pages |
|||
local weapons = {'Hammerfist','Throwing Stones','Stone Slab Shield', |
|||
local query = { |
|||
'Stone Mace','Stone Discs','War Hammer', |
|||
'[[Activity JSON::~*]]', |
|||
'Bolas','Stone Chunk Shield','Double Headed Hammer', |
|||
'? = name', |
|||
'Throwing Clubs','Great Stone Mace',' Polished Stone Shield', |
|||
'?Activity JSON = activityJSON', |
|||
'Throwing Hammers','Great Hammer','Sling'} |
|||
'limit = 1500' |
|||
} |
|||
local results = mw.smw.ask(query) |
|||
local allWeapons = {} |
|||
results = p.screenResults(results) |
|||
for i,item in ipairs(variants) do |
|||
for j,jtem in ipairs(weapons) do |
|||
table.insert(allWeapons,{pagename='[[' .. weapons[j] .. ' (' .. variants[i] .. ')]]'}) |
|||
end |
|||
end |
|||
return p.displayTable(results) |
|||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
|||
-- goes through a list of results and culls the ones which are not needed for this table |
|||
function p.screenResults(results) |
|||
local resultsScreened = {} |
|||
-- iterate through products |
|||
for _, item in ipairs(results) do |
|||
for i,item in ipairs(allWeapons) do |
|||
-- if theres only one activity, wrap in table |
|||
if type(item.activityJSON)=='string' then |
|||
local query = mw.smw.ask(item.pagename .. '|?Uses facility #- = data|mainlabel=-') |
|||
item.activityJSON = { item.activityJSON } |
|||
if type(query)=='table' then |
|||
allWeapons[i].facility = query[1].data |
|||
end |
end |
||
local query = mw.smw.ask(item.pagename .. '|?Activity XP #- = data|mainlabel=-') |
|||
for j,json in ipairs(item.activityJSON) do |
|||
if type(query)=='table' then |
|||
allWeapons[i].XP = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Activity duration #- = data|mainlabel=-') |
|||
local activityJSON = mw.text.jsonDecode(json) |
|||
if type(query)=='table' then |
|||
allWeapons[i].duration = query[1].data |
|||
local itemNew = {} |
|||
itemNew.name = item.name |
|||
itemNew.XP = activityJSON.xp |
|||
itemNew.lvl = activityJSON.level |
|||
itemNew.profession = activityJSON.profession |
|||
itemNew.duration = activityJSON.duration |
|||
itemNew.product = activityJSON.output[1].name |
|||
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) |
|||
end |
|||
end |
end |
||
local query = mw.smw.ask(item.pagename .. '|?Activity KP #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
allWeapons[i].KP = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Recipe output #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
allWeapons[i].output = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Name #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
allWeapons[i].name = query[1].data |
|||
end |
|||
end |
end |
||
-- sort the results by recipe level |
|||
table.sort(resultsScreened, function(item1, item2) |
|||
local lvl1 = item1.lvl |
|||
local lvl2 = item2.lvl |
|||
if (lvl1 == nil) ~= (lvl2 == nil) then --one of two are empty |
|||
return lvl2 == nil -- true if lvl2 is nil but not lvl1, false if lvl1 is nil but not lvl2 |
|||
end |
|||
if lvl1 == nil then |
|||
return false -- Both empty, equivalent |
|||
end |
|||
return lvl1 < lvl2 -- normal comparison |
|||
end) |
|||
return resultsScreened |
|||
end |
|||
-- make the table |
|||
function p.displayTable(results) |
|||
local out = mw.html.create('table') |
local out = mw.html.create('table') |
||
:addClass('wikitable sortable') |
:addClass('wikitable sortable') |
||
Line 103: | Line 60: | ||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('Item') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('Recipe Output') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('Facility') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
Line 115: | Line 72: | ||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('KP') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('duration') |
||
:done() |
:done() |
||
-- :tag('th') |
|||
-- :wikitext('Duration') |
|||
-- :done() |
|||
-- :tag('th') |
|||
-- :wikitext('XP/hr') |
|||
-- :done() |
|||
:done() |
:done() |
||
for i, item in ipairs(results) do |
|||
local row = out:tag('tr') |
|||
for i,item in ipairs(allWeapons) do |
|||
--level |
|||
:tag(' |
local row = out:tag('tr') |
||
: |
:tag('td') |
||
:wikitext(item.pagename) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.name) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.output) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.facility) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.XP) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.KP) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.duration) |
|||
:done() |
|||
:done() |
:done() |
||
:tag('td') |
|||
:wikitext('[[' .. item.product .. ']]') |
|||
:done() |
:done() |
||
end |
|||
:tag('td') |
|||
:wikitext('[[' .. item.profession .. ']]') |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.lvl) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.XP) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.fitXP) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.productSellPrice) |
|||
:done() |
|||
-- :tag('td') |
|||
-- :wikitext(item.duration) |
|||
-- :done() |
|||
-- :tag('td') |
|||
-- :wikitext(item.XPperHour) |
|||
-- :done() |
|||
:done() |
|||
end |
|||
return out |
return out |
||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(allWeapons, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
end |
||