Module:Sandbox/User:Alsang: Difference between revisions

From Brighter Shores Wiki
Jump to navigation Jump to search
Content added Content deleted
No edit summary
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
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')


local p = {}
local p = {}


function p.gathererPages1()
-- non dynamic module, no inputs
local queryString = '[[Variant of::Globeplant||Dandelion||Apple||Haleberries||Chestnut||Catkin||Clover||Snake Scale||Orchid||Dock Leaf||Sage||Thistle]]'
function p.main()
return p.main(queryString)
end
-- returns only directly needed parameter needed for the row,
-- other parameters are determined by subqueries of chained pages
local query = {
'[[Activity JSON::~*]]',
'? = name',
'?Activity JSON = activityJSON',
'limit = 1500'
}
local results = mw.smw.ask(query)
results = p.screenResults(results)


function p.gathererPages2()
return p.displayTable(results)
local queryString = '[[Variant of::Bone Spike||Femur Shard||Goat Horn||Rams Horn]]'
return p.main(queryString)
--for debugging
end
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>'


function p.gathererPages3()
local queryString = '[[Variant of::Leek||Bitterfruit||Tangfruit]]'
return p.main(queryString)
end
end


function p.main(queryString)
-- goes through a list of results and culls the ones which are not needed for this table

function p.screenResults(results)
local resultsScreened = {}
local query = {
queryString,
'? #- = name',
'?Profession Level A = level',
'?Variant of #-= variant',
'sort = Variant of,Profession Level A',
'limit = 500'
}
local results = mw.smw.ask(query)
for _,page in ipairs(results) do
-- iterate through products
if string.find(page.name,'Mine') then
for _, item in ipairs(results) do
page.node = page.name
page.nodevar = page.variant
-- if theres only one activity, wrap in table
else
if type(item.activityJSON)=='string' then
page.node = page.name .. ' (skill node)'
item.activityJSON = { item.activityJSON }
page.nodevar = page.variant .. ' (skill node)'
end
end
local result = mw.smw.ask('[['..page.node..']]|?Activity JSON = data')
page.JSON = (result and result[1] and result[1].data) or ''
for j,json in ipairs(item.activityJSON) do
if type(page.JSON)=='table' then
page.JSON = table.concat(page.JSON,'<br>')
local activityJSON = mw.text.jsonDecode(json)
if activityJSON.duration and tonumber(activityJSON.duration)==20 then
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
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')
:tag('tr')
:tag('tr')
:tag('th')
:tag('th')
:wikitext('Page')
:wikitext('Variant')
:done()
:done()
:tag('th')
:tag('th')
:wikitext('Product')
:wikitext('Node Variant')
:done()
:tag('th')
:wikitext('Profession')
:done()
:done()
:tag('th')
:tag('th')
Line 112: Line 57:
:done()
:done()
:tag('th')
:tag('th')
:wikitext('XP')
:wikitext('Page')
:done()
:done()
:tag('th')
:tag('th')
:wikitext('0.0005 of levelup XP')
:wikitext('Node')
:done()
:done()
:tag('th')
:tag('th')
:wikitext('sell price<br>per action')
:wikitext('Node JSON')
:done()
:done()
-- :tag('th')
-- :wikitext('Duration')
-- :done()
-- :tag('th')
-- :wikitext('XP/hr')
-- :done()
:done()
:done()


Line 133: Line 72:
--level
--level
:tag('td')
:tag('td')
:wikitext(item.name)
:wikitext('[['..item.variant..']]')
:done()
:done()
:tag('td')
:tag('td')
:wikitext('[[' .. item.product .. ']]')
:wikitext('[['..item.nodevar..']]')
:done()
:done()
:tag('td')
:tag('td')
:wikitext('[[' .. item.profession .. ']]')
:wikitext(item.level)
:done()
:done()
:tag('td')
:tag('td')
:wikitext(item.lvl)
:wikitext('[['..item.name..']]')
:done()
:done()
:tag('td')
:tag('td')
:wikitext(item.XP)
:wikitext('[['..item.node..']]')
:done()
:done()
:tag('td')
:tag('td')
:wikitext(item.fitXP)
:wikitext(item.JSON)
:done()
:done()
:tag('td')
:wikitext(item.productSellPrice)
:done()
-- :tag('td')
-- :wikitext(item.duration)
-- :done()
-- :tag('td')
-- :wikitext(item.XPperHour)
-- :done()

:done()
end
end
return out


return out
end
end



Latest revision as of 16:27, 23 December 2024

Module documentation
This documentation is transcluded from Module:Sandbox/User:Alsang/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Sandbox/User:Alsang/doc. [edit]
Module:Sandbox/User:Alsang's function main is invoked by Template:Sandbox/User:Alsang.

local p = {}

function p.gathererPages1()
	local queryString = '[[Variant of::Globeplant||Dandelion||Apple||Haleberries||Chestnut||Catkin||Clover||Snake Scale||Orchid||Dock Leaf||Sage||Thistle]]'
	return p.main(queryString)
end

function p.gathererPages2()
	local queryString = '[[Variant of::Bone Spike||Femur Shard||Goat Horn||Rams Horn]]'
	return p.main(queryString)
end

function p.gathererPages3()
	local queryString = '[[Variant of::Leek||Bitterfruit||Tangfruit]]'
	return p.main(queryString)
end

function p.main(queryString)

	local query = {
		queryString,
		'? #- = name',
		'?Profession Level A = level',
		'?Variant of #-= variant',
		'sort = Variant of,Profession Level A',
		'limit = 500'
	}
	local results = mw.smw.ask(query)
	
	for _,page in ipairs(results) do
		if string.find(page.name,'Mine') then
			page.node = page.name
			page.nodevar = page.variant
		else
			page.node = page.name .. ' (skill node)'
			page.nodevar = page.variant .. ' (skill node)'
		end
		local result = mw.smw.ask('[['..page.node..']]|?Activity JSON = data')
		page.JSON = (result and result[1] and result[1].data) or ''
		if type(page.JSON)=='table' then
			page.JSON = table.concat(page.JSON,'<br>')
		end
	end
	
	local out = mw.html.create('table')
		:addClass('wikitable sortable')
		:tag('tr')
			:tag('th')
				:wikitext('Variant')
			:done()
			:tag('th')
				:wikitext('Node Variant')
			:done()
			:tag('th')
				:wikitext('Level')
			:done()
			:tag('th')
				:wikitext('Page')
			:done()
			:tag('th')
				:wikitext('Node')
			:done()
			:tag('th')
				:wikitext('Node JSON')
			:done()
		:done()

	for i, item in ipairs(results) do
		local row = out:tag('tr')
		
			--level
			:tag('td')
				:wikitext('[['..item.variant..']]')
			:done()
			:tag('td')
				:wikitext('[['..item.nodevar..']]')
			:done()
			:tag('td')
				:wikitext(item.level)
			:done()
			:tag('td')
				:wikitext('[['..item.name..']]')
			:done()
			:tag('td')
				:wikitext('[['..item.node..']]')
			:done()
			:tag('td')
				:wikitext(item.JSON)
			:done()
			
	end
	
	return out

end

return p