Toggle search
Search
Toggle menu
Notifications
Toggle personal menu
Editing
Module:Spawn table
From WoopMC
Views
Read
Edit
View history
associated-pages
Module
Discussion
More actions
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local i18n = { processArgsModule = 'Module:ProcessArgs', editionsTemplate = 'Template:Editions', mobColumn = 'Mob', chanceColumn = 'Spawn chance ' ..mw.getCurrentFrame():expandTemplate{title='Tip', args={Info='Chance to spawn relative to other mobs in the category.'}}, groupSizeColumn = 'Group size ' ..mw.getCurrentFrame():expandTemplate{title='Tip', args={Info='Number of mobs the game tries to spawn per attempt.'}} } local spawnData = {} -- contains mob spawn info local groupArgs = { ['passive'] = 'Passive category', ['hostile'] = 'Hostile category ' ..mw.getCurrentFrame():expandTemplate{title='Tip', args={Info='Slimes spawn rates only applies inside slime chunks, below layer 40. They can also spawn in swamp biomes between layers 50 and 70 in light levels of 7 or less, with these layers tending to be near the surface.'}}, ['water'] = 'Water category', ['watercreature'] = 'Water creature category', ['ambient'] = 'Ambient category', ['waterambient'] = 'Water ambient category', ['underground'] = 'Underground water creature category', ['axolotl'] = 'Axolotl category' } local hasNotes = false -- parses input arguments into spawnData table local function parseInput(args) for argName in pairs(groupArgs) do local groupArg = args[argName] if groupArg then local currentGroup = {} local totalWeight = 0 currentGroup.mobs = {} groupArg = groupArg .. '\n' -- allow last line to be matched like the rest -- parse input of group parameter for line in mw.ustring.gmatch(groupArg, '[^\r\n]+[\r\n]') do -- split on newline local parsedLine = {} for key, value in mw.ustring.gmatch(line, '([%a]+)%s*=%s*(.-)%s*[,\r\n]') do if value ~= '' then parsedLine[key:lower()] = value end end --parsedLine.mob = mw.ustring.match(line, '^%s*(.-)%s*,') parsedLine.note = mw.ustring.match(line, 'note=%s*(.-)%s*[\r\n]') local currentMob = {} -- convert weight to number; becomes nil if conversion fails if parsedLine.weight then weightNum = tonumber(parsedLine.weight) -- if converted to number successfully if weightNum then currentMob.weight = weightNum totalWeight = totalWeight + weightNum end end if parsedLine.size then currentMob.size = parsedLine.size end if parsedLine.note then hasNotes = true currentMob.note = parsedLine.note end if parsedLine.notename then currentMob.notename = parsedLine.notename end if parsedLine.mob then currentMob.mob = parsedLine.mob table.insert(currentGroup.mobs, currentMob) end end currentGroup.totalWeight = totalWeight spawnData[argName] = currentGroup end end end -- takes root <table> html object and adds table body using info in spawnData local function addTableBody(tableRoot, numberOfColumns) local frame = mw.getCurrentFrame() local groupNumber = 1 for groupArg, groupTable in pairs(spawnData) do local groupHeader = mw.html.create('tr') groupHeader:tag('th') :attr('colspan', numberOfColumns) :wikitext(groupArgs[groupArg]) tableRoot:node(groupHeader) for _, mobData in ipairs(groupTable.mobs) do local tableRow = mw.html.create('tr') local mobCellText = mobData.mob tableRow:tag('td') :css('text-align', 'left') :css('font-weight', 'normal') :wikitext(mobCellText) tableRow:tag('td') :css('text-align', 'center') :wikitext('<sup>' .. mobData.weight .. '</sup>⁄<sub>' .. groupTable.totalWeight .. '</sub>') tableRow:tag('td') :css('text-align', 'center') :wikitext(mobData.size) tableRoot:node(tableRow) end end end -- function called from template function p.mobSpawnTable(frame) local args = frame if frame == mw.getCurrentFrame() then args = require(i18n.processArgsModule).merge( true ) else frame = mw.getCurrentFrame() end parseInput(args) local columns = {i18n.mobColumn, i18n.chanceColumn, i18n.groupSizeColumn} -- local biome = string.lower(args.biome or mw.title.getCurrentTitle().text) -- may be useful if Cargo functionality is added local tableRoot = mw.html.create('table'):attr('class', 'wikitable') local titleStr = args.title if args.edition then local editionStr = frame:expandTemplate{title=i18n.editionsTemplate, args={args.edition}} if titleStr then titleStr = titleStr .. ' in ' .. editionStr else titleStr = 'In ' .. editionStr end end if titleStr then tableRoot :tag('caption') :wikitext(titleStr) end local colHeaders = mw.html.create('tr') for _, value in pairs(columns) do colHeaders:tag('th'):wikitext(value) end tableRoot:node(colHeaders) addTableBody(tableRoot, #columns) local outputWikitext = tostring(tableRoot) if hasNotes then outputWikitext = outputWikitext .. '\n\n' .. frame:extensionTag{name='references', args={group='note'}} end return outputWikitext end return p
Summary:
Please note that all contributions to WoopMC may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
WoopMC:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)