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 weapons = {'Hammerfist','Throwing Stones','Stone Slab Shield', |
|||
-- other parameters are determined by subqueries of chained pages |
|||
'Stone Mace','Stone Discs','War Hammer', |
|||
local query = { |
|||
'Bolas','Stone Chunk Shield','Double Headed Hammer', |
|||
'[[Activity JSON::~*]]', |
|||
'Throwing Clubs','Great Stone Mace',' Polished Stone Shield', |
|||
'? = name', |
|||
'Throwing Hammers','Great Hammer','Sling'} |
|||
'?Activity JSON = activityJSON', |
|||
'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='[[' .. jtem .. ' (' .. item .. ')]]'}) |
|||
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 |
|||
item.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 |
|||
item.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 |
|||
item.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 |
||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Activity KP #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
-- sort the results by recipe level |
|||
item.KP = query[1].data |
|||
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 |
end |
||
if lvl1 == nil then |
|||
local query = mw.smw.ask(item.pagename .. '|?Recipe output #- = data|mainlabel=-') |
|||
return false -- Both empty, equivalent |
|||
if type(query)=='table' then |
|||
item.output = query[1].data |
|||
end |
end |
||
return lvl1 < lvl2 -- normal comparison |
|||
local query = mw.smw.ask(item.pagename .. '|?Name #- = data|mainlabel=-') |
|||
end) |
|||
if type(query)=='table' then |
|||
item.name = query[1].data |
|||
return resultsScreened |
|||
end |
|||
end |
|||
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 59: | ||
: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 71: | ||
: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(allWeapons) do |
|||
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() |
|||
end |
|||
return out |
|||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(allWeapons, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
|||
function p.stones() |
|||
local variants = {'Coarse','Rugged','Fine','Sturdy','Perfect'} |
|||
local stones ={'Flint','Basalt','Andesite','Granite','Deathstone'} |
|||
local allStones = {} |
|||
for i,item in ipairs(variants) do |
|||
for j,jtem in ipairs(stones) do |
|||
table.insert(allStones,{pagename='[[' .. item .. ' ' .. jtem .. ' (Etched)]]',resource='[[' .. item .. ' ' .. jtem .. ']]'}) |
|||
end |
|||
end |
|||
for i, item in ipairs(results) do |
|||
local row = out:tag('tr') |
|||
for i,item in ipairs(allStones) do |
|||
--level |
|||
:tag('td') |
|||
local query = mw.smw.ask(item.pagename .. '|?Uses facility #- = data|mainlabel=-') |
|||
:wikitext(item.name) |
|||
if type(query)=='table' then |
|||
item.facility = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Activity XP #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
item.XP = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Activity duration #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
item.duration = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Activity KP #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
item.KP = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Recipe output #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
item.output = query[1].data |
|||
end |
|||
local query = mw.smw.ask(item.pagename .. '|?Name #- = data|mainlabel=-') |
|||
if type(query)=='table' then |
|||
item.name = query[1].data |
|||
end |
|||
end |
|||
local out = mw.html.create('table') |
|||
:addClass('wikitable sortable') |
|||
:tag('tr') |
|||
:tag('th') |
|||
:wikitext('Page') |
|||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext(' |
:wikitext('Item') |
||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext(' |
:wikitext('Resource') |
||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext( |
:wikitext('Recipe Output') |
||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext( |
:wikitext('Facility') |
||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext( |
:wikitext('XP') |
||
:done() |
:done() |
||
:tag(' |
:tag('th') |
||
:wikitext( |
:wikitext('KP') |
||
:done() |
|||
:tag('th') |
|||
:wikitext('duration') |
|||
:done() |
:done() |
||
-- :tag('td') |
|||
-- :wikitext(item.duration) |
|||
-- :done() |
|||
-- :tag('td') |
|||
-- :wikitext(item.XPperHour) |
|||
-- :done() |
|||
:done() |
:done() |
||
end |
|||
for i,item in ipairs(allStones) do |
|||
local row = out:tag('tr') |
|||
:tag('td') |
|||
:wikitext(item.pagename) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.name) |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(item.resource) |
|||
: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() |
|||
end |
|||
return out |
return out |
||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(allWeapons, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
end |
||