Module:HabSiteInvicta: Difference between revisions
From Terra Invicta Official Wiki
Llamageddon (talk | contribs) Test draft |
Llamageddon (talk | contribs) mNo edit summary |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 70: | Line 70: | ||
---@return wiki table of HabSites | ---@return wiki table of HabSites | ||
function HabSiteLister.ListHabSites(mode, specificSpaceBody, restrictInner, restrictOuter) | function HabSiteLister.ListHabSites(mode, specificSpaceBody, restrictInner, restrictOuter) | ||
local returnString = '{| | local returnString = '{| style="margin-left: auto; margin-right: auto; text-align:center;"' | ||
returnString = returnString .. '\n|-' | returnString = returnString .. '\n|-' | ||
returnString = returnString .. | returnString = returnString .. "\n! Site Name<ref>Site resource numbers are median values of possible rolls. ''Note: 0 still has 50% roll chance for positive value.''</ref>" | ||
returnString = returnString .. '\n!' .. IconModule.Icon({args={'water'}}) | returnString = returnString .. '\n!' .. IconModule.Icon({args={'water'}}) | ||
returnString = returnString .. '\n!' .. IconModule.Icon({args={'volatiles'}}) | returnString = returnString .. '\n!' .. IconModule.Icon({args={'volatiles'}}) | ||
| Line 87: | Line 87: | ||
returnString = returnString .. '\n| style="text-align:left;" |' .. (HabSiteNames['TIHabSiteTemplate.displayName.' .. rowID] or rowID) | returnString = returnString .. '\n| style="text-align:left;" |' .. (HabSiteNames['TIHabSiteTemplate.displayName.' .. rowID] or rowID) | ||
local miningProfileID = row['miningProfileName'] | |||
local modifyBySize = MiningProfileData[miningProfileID]['modifyBySize'] | local modifyBySize = MiningProfileData[miningProfileID]['modifyBySize'] | ||
local waterMean = tonumber(MiningProfileData[miningProfileID]['water_mean']) | local waterMean = tonumber(MiningProfileData[miningProfileID]['water_mean']) | ||
Latest revision as of 23:21, 17 December 2025
Documentation for this module may be created at Module:HabSiteInvicta/doc
---
---This is a variation of Module:HabSiteLister which imitates the format of the site list seen in the game.
---
---@module HabSiteLister
local HabSiteLister = {}
--region Dependencies
local IconModule = require('Module:Icon')
local HabSiteData = mw.loadData('Module:CSVReader/HabSite')
local MiningProfileData = mw.loadData('Module:CSVReader/MiningProfile')
local SpaceBodyData = mw.loadData('Module:CSVReader/SpaceBody')
local SpaceBodyMiningData = mw.loadData('Module:SpaceBodyLister/Mining')
local HabSiteNames = mw.loadData('Module:ENReader/HabSite')
local MiningProfileNames = mw.loadData('Module:ENReader/MiningProfile')
local SpaceBodyNames = mw.loadData('Module:ENReader/SpaceBody')
--endregion
--region Private constants
local floor = math.floor
local round = function(num, decimals)
local mult = 10^(decimals or 0)
return floor(num * mult + 0.5) / mult
end
local outerEffects = {
Effect_ExploreJupiter = true,
Effect_ExploreSaturn = true,
Effect_ExploreOuterPlanets = true,
Effect_ExploreKuiperBelt = true
}
--endregion
--region Private member variables
--none
--endregion
--region Private methods
--endregion
--region Public methods
function HabSiteLister.ListMedians()
return HabSiteLister.ListHabSites(1)
end
function HabSiteLister.ListTopMeans()
return HabSiteLister.ListHabSites(2)
end
--- Example Usage: {{#invoke:HabSiteLister|ListSpecific|mode=1|specificSpaceBody=Mercury}}
function HabSiteLister.ListSpecific(frame)
local mode = tonumber(frame.args['mode'])
local specificSpaceBody = frame.args['specificSpaceBody']
local restrictInner = frame.args['restrictInner']
local restrictOuter = frame.args['restrictOuter']
return HabSiteLister.ListHabSites(mode,specificSpaceBody,restrictInner,restrictOuter)
end
---@param mode int what to display
---- 1: Medians
---- 2: Top 50% Means
---@param specificSpaceBody which space body to focus on. Use nil value to show all.
---@param restrictInner do not show outer solar system space bodies
---@param restrictOuter do not show inner solar system space bodies
---@return wiki table of HabSites
function HabSiteLister.ListHabSites(mode, specificSpaceBody, restrictInner, restrictOuter)
local returnString = '{| style="margin-left: auto; margin-right: auto; text-align:center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. "\n! Site Name<ref>Site resource numbers are median values of possible rolls. ''Note: 0 still has 50% roll chance for positive value.''</ref>"
returnString = returnString .. '\n!' .. IconModule.Icon({args={'water'}})
returnString = returnString .. '\n!' .. IconModule.Icon({args={'volatiles'}})
returnString = returnString .. '\n!' .. IconModule.Icon({args={'metals'}})
returnString = returnString .. '\n!' .. IconModule.Icon({args={'nobles'}})
returnString = returnString .. '\n!' .. IconModule.Icon({args={'fissiles'}})
returnString = returnString .. '\n|-'
for rowID, row in pairs(HabSiteData) do
local spaceBodyID = row['parentBodyName'] or ''
if (not specificSpaceBody or specificSpaceBody == '' or specificSpaceBody == spaceBodyID)
and (not restrictInner or restrictInner == '' or not outerEffects[SpaceBodyData[spaceBodyID]['effectToExplore']])
and (not restrictOuter or restrictOuter == '' or outerEffects[SpaceBodyData[spaceBodyID]['effectToExplore']]) then
returnString = returnString .. '\n| style="text-align:left;" |' .. (HabSiteNames['TIHabSiteTemplate.displayName.' .. rowID] or rowID)
local miningProfileID = row['miningProfileName']
local modifyBySize = MiningProfileData[miningProfileID]['modifyBySize']
local waterMean = tonumber(MiningProfileData[miningProfileID]['water_mean'])
local waterWidth = tonumber(MiningProfileData[miningProfileID]['water_width'])
local waterMin = tonumber(MiningProfileData[miningProfileID]['water_min'])
local waterJump = tonumber(MiningProfileData[miningProfileID]['water_jump'])
if waterMean == 0 and waterWidth == 0 then
returnString = returnString .. '\n| '
elseif not modifyBySize or modifyBySize ~= 'true' then
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(waterMean)
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(waterMean + waterWidth * ((1 / (1 - waterJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
else
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(round(waterMean * SpaceBodyMiningData[spaceBodyID]['modifierA'],3))
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(waterMean * SpaceBodyMiningData[spaceBodyID]['modifierA'] + waterWidth * ((1 / (1 - waterJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
end
local volatilesMean = tonumber(MiningProfileData[miningProfileID]['volatiles_mean'])
local volatilesWidth = tonumber(MiningProfileData[miningProfileID]['volatiles_width'])
local volatilesMin = tonumber(MiningProfileData[miningProfileID]['volatiles_min'])
local volatilesJump = tonumber(MiningProfileData[miningProfileID]['volatiles_jump'])
if volatilesMean == 0 and volatilesWidth == 0 then
returnString = returnString .. '\n| '
elseif not modifyBySize or modifyBySize ~= 'true' then
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(volatilesMean)
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(volatilesMean + volatilesWidth * ((1 / (1 - volatilesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
else
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(round(volatilesMean * SpaceBodyMiningData[spaceBodyID]['modifierA'],3))
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(volatilesMean * SpaceBodyMiningData[spaceBodyID]['modifierA'] + volatilesWidth * ((1 / (1 - volatilesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
end
local metalsMean = tonumber(MiningProfileData[miningProfileID]['metals_mean'])
local metalsWidth = tonumber(MiningProfileData[miningProfileID]['metals_width'])
local metalsMin = tonumber(MiningProfileData[miningProfileID]['metals_min'])
local metalsJump = tonumber(MiningProfileData[miningProfileID]['metals_jump'])
if metalsMean == 0 and metalsWidth == 0 then
returnString = returnString .. '\n| '
elseif not modifyBySize or modifyBySize ~= 'true' then
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(metalsMean)
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(metalsMean + metalsWidth * ((1 / (1 - metalsJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
else
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(round(metalsMean * SpaceBodyMiningData[spaceBodyID]['modifierB'],3))
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(metalsMean * SpaceBodyMiningData[spaceBodyID]['modifierB'] + metalsWidth * ((1 / (1 - metalsJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
end
local noblesMean = tonumber(MiningProfileData[miningProfileID]['nobles_mean'])
local noblesWidth = tonumber(MiningProfileData[miningProfileID]['nobles_width'])
local noblesMin = tonumber(MiningProfileData[miningProfileID]['nobles_min'])
local noblesJump = tonumber(MiningProfileData[miningProfileID]['nobles_jump'])
if noblesMean == 0 and noblesWidth == 0 then
returnString = returnString .. '\n| '
elseif not modifyBySize or modifyBySize ~= 'true' then
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(noblesMean)
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(noblesMean + noblesWidth * ((1 / (1 - noblesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
else
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(round(noblesMean * SpaceBodyMiningData[spaceBodyID]['modifierB'],3))
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(noblesMean * SpaceBodyMiningData[spaceBodyID]['modifierB'] + noblesWidth * ((1 / (1 - noblesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
end
local fissilesMean = tonumber(MiningProfileData[miningProfileID]['fissiles_mean'])
local fissilesWidth = tonumber(MiningProfileData[miningProfileID]['fissiles_width'])
local fissilesMin = tonumber(MiningProfileData[miningProfileID]['fissiles_min'])
local fissilesJump = tonumber(MiningProfileData[miningProfileID]['fissiles_jump'])
if fissilesMean == 0 and fissilesWidth == 0 then
returnString = returnString .. '\n| '
elseif not modifyBySize or modifyBySize ~= 'true' then
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(fissilesMean)
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(fissilesMean + fissilesWidth * ((1 / (1 - fissilesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
else
if mode == 1 then
returnString = returnString .. '\n| ' .. tostring(round(fissilesMean * SpaceBodyMiningData[spaceBodyID]['modifierB'],3))
elseif mode == 2 then
returnString = returnString .. '\n| ' .. tostring(round(fissilesMean * SpaceBodyMiningData[spaceBodyID]['modifierB'] + fissilesWidth * ((1 / (1 - fissilesJump)) - 1),3))
else
returnString = returnString .. '\n| '
end
end
returnString = returnString .. '\n|-'
end
end
returnString = returnString .. '\n|}'
return returnString
end
--endregion
return HabSiteLister


