Module:Sandbox/Skills/Cartography: Difference between revisions

no edit summary
(Fixed testDiscoveryRewards)
No edit summary
 
(13 intermediate revisions by 2 users not shown)
Line 16: Line 16:
end
end
return nil
return nil
end
function p.getPointOfInterestByXY(X, Y)
local hex = p.getHexByXY(X, Y)
if hex == nil then
return nil
end
for i, POI in pairs(SkillData.Cartography.worldMaps[1].pointsOfInterest) do
if (POI.coords.q == hex.coordinates.q and
    POI.coords.r == hex.coordinates.r) then
return POI
end
end
return hex
end
end


Line 125: Line 139:
end
end
return rewardTable
return rewardTable
end
function p.sortPOIByCoords(array)
table.sort(array, function(a, b)
local aX, aY = p.convertAxialToXY(a.coords)
local bX, bY = p.convertAxialToXY(b.coords)
if aX ~= bX then
return aX < bX
else
return aY < bY
end
end)
return array
end
end


Line 137: Line 164:
table.insert(POIs, POI)
table.insert(POIs, POI)
end
end
 
table.sort(POIs, function(a, b)
POIs = p.sortPOIByCoords(POIs)
local aX, aY = p.convertAxialToXY(a.coords)
local bX, bY = p.convertAxialToXY(b.coords)
if aX ~= bX then
return aX < bX
else
return aY < bY
end
end)
for i, POI in pairs(POIs) do
for i, POI in pairs(POIs) do
Line 203: Line 222:
end
end


function p._getDiscoveryRewardsTable(item)
function p._getDiscoveryRewardsTable(items)
local POIs = {}
local POIs = {}
for i, POI in pairs(SkillData.Cartography.worldMaps[1].pointsOfInterest) do
for i, POI in pairs(SkillData.Cartography.worldMaps[1].pointsOfInterest) do
if POI.discoveryRewards ~= nil and POI.discoveryRewards.items ~= nil then
if POI.discoveryRewards ~= nil and POI.discoveryRewards.items ~= nil then
for i, reward in pairs(POI.discoveryRewards.items) do
for i, reward in pairs(POI.discoveryRewards.items) do
if reward.id == item.id then
for j, item in ipairs(items) do
table.insert(POIs, POI)
if reward.id == item.id then
table.insert(POIs, POI)
break
end
end
end
end
end
Line 215: Line 237:
end
end


table.sort(POIs, function(a, b)
POIs = p.sortPOIByCoords(POIs)
local aX, aY = p.convertAxialToXY(a.coords)
local bX, bY = p.convertAxialToXY(b.coords)
if aX ~= bX then
return aX < bX
else
return aY < bY
end
end)


-- Build the table
-- Build the table
local resultTable = mw.html.create('table')
local resultTable = mw.html.create('table')
resultTable:addClass('wikitable'):addClass('sortable')
resultTable:addClass('wikitable sortable')
resultTable:tag('tr'):addClass('headerRow-0')
resultTable:tag('tr'):addClass('headerRow-0')
:tag('th'):wikitext('Point of Interest'):done()
:tag('th'):wikitext('Point of Interest')
:tag('th'):wikitext('X'):done()
:tag('th'):wikitext('X')
:tag('th'):wikitext('Y'):done()
:tag('th'):wikitext('Y')
:tag('th'):wikitext('Requirements'):done()
:tag('th'):wikitext('Requirements')
:tag('th'):wikitext('Discovery Rewards'):done()
:tag('th'):wikitext('Discovery Rewards')


for _, POI in ipairs(POIs) do
for _, POI in ipairs(POIs) do
Line 249: Line 263:


function p.getDiscoveryRewardsTable(frame)
function p.getDiscoveryRewardsTable(frame)
local itemName = frame.args ~= nil and frame.args[1] or frame
local itemNames = frame.args ~= nil and frame.args[1] or frame
local item = Items.getItem(itemName)
local items = {}
if item == nil then
for itemName in string.gmatch(itemNames, "[^,]*") do
return Shared.printError('No item named "' .. itemName .. '" exists in the data module')
item = Items.getItem(itemName)
if item ~= nil then
table.insert(items, item)
end
end
if #items == nil then
return Shared.printError('No items found for with names: "' .. itemNames .. '"')
end
end
return '==POI Discovery Rewards==\n' .. p._getDiscoveryRewardsTable(item)
return '==POI Discovery Rewards==\n' .. p._getDiscoveryRewardsTable(items)
end
end


Line 263: Line 283:
if POI.discoveryRewards ~= nil and POI.discoveryRewards.items ~= nil then
if POI.discoveryRewards ~= nil and POI.discoveryRewards.items ~= nil then
local item = Items.getItemByID(POI.discoveryRewards.items[1].id)
local item = Items.getItemByID(POI.discoveryRewards.items[1].id)
table.insert(testTable, p._getDiscoveryRewardsTable(item))
table.insert(testTable, p._getDiscoveryRewardsTable({item}))
end
end
end
end
return table.concat(testTable)
return table.concat(testTable)
end
function p.hex(frame)
-- Default behavior, when no coords supplied
if (frame == nil or frame.args['x'] == nil or frame.args['y'] == nil) then
return 'Hex'
end
local X = tonumber(frame.args['x'])
local Y = tonumber(frame.args['y'])
if X == nil or Y == nil then
return '<invalid XY format>'
end
local hex = p.getPointOfInterestByXY(X, Y)
-- nil means coord is invalid
if hex == nil then
return '<invalid XY coord>'
end
local notext = frame.args['notext'] or false
local noicon = frame.args['noicon'] or false
local nolink = frame.args['nolink'] or false
local coords = '<span>(' .. X .. ',' .. Y .. ')</span>'
-- Valid, but not a POI
if hex['id'] == nil or noicon then
return coords
end
-- Valid POI
local poi_icon = Icons.Icon({hex['name'], type='poi', notext=notext or nil, nolink=nolink or nil, size='25'})
return '<span>' .. poi_icon .. ' ' .. coords .. '</span>'
end
end


432

edits