Module:NameGenerator: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
fixed the naming table to go with the move
templates are no longer "titletemplates"
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local cargo = mw.ext.cargo


function p.main(frame)
function p.main(frame)
Line 15: Line 14:
local maxpostfix
local maxpostfix
local minpostfix
local minpostfix
local titletemplate
local template
local result = {}
local result = {}
local seed = frame.args.seed
local seed = frame.args.seed
Line 75: Line 74:


local b
local b
local templatetable = naming[style]['TitleTemplates']
local templatetable = naming[style]['Templates']
if templatetable ~= nil then
if templatetable ~= nil then
  local titletemplate = templatetable[math.random(table.getn(templatetable))]
  local template = templatetable[math.random(table.getn(templatetable))]
  local varstable = defaultvars
  local varstable = defaultvars
  if naming[style]['TemplateVars'] ~= nil then
  if naming[style]['TemplateVars'] ~= nil then
Line 92: Line 91:
   
   
  for var, values in pairs(varstable) do
  for var, values in pairs(varstable) do
   titletemplate = titletemplate:gsub(var, values[math.random(table.getn(values))])
   template = template:gsub(var, values[math.random(table.getn(values))])
  end
  end
  b = titletemplate
  b = template
else
else
  b = heroname
  b = heroname

Latest revision as of 03:57, 7 January 2025

Documentation for this module may be created at Module:NameGenerator/doc

local p = {}

function p.main(frame)
local namingtable = require'Module:NameGenerator/NamingTable'
local naming = namingtable.naming
local defaultvars = namingtable.defaultvars
local prefixes = ""
local infixes = ""
local postfixes = ""
local maxprefix
local minprefix
local maxinfix
local mininfix
local maxpostfix
local minpostfix
local template
local result = {}
local seed = frame.args.seed
local style = frame.args.style:lower()

if seed ~= nil and seed ~= ''then
 math.randomseed(seed:gsub("%w",string.byte))
end

local prefixtable = naming[style]['Prefixes']
local infixtable = naming[style]['Infixes']
local postfixtable = naming[style]['Postfixes']
local hyphenationchance = naming[style]['HyphenationChance'] or 0
local twonamechance = naming[style]['TwoNameChance'] or 0
minprefix=naming[style]['MinPrefixAmount']
maxprefix=naming[style]['MaxPrefixAmount']
local namecount
if math.random(0, 100) < twonamechance then
 namecount = 2
else
 namecount = 1
end
local heroname = ''
for i = 1,namecount do
 prefixes = ''
 infixes = ''
 postfixes = ''
 --[get min/maxprefix stuff]--
 for i=1,math.random(minprefix,maxprefix) do
   prefixes = prefixes.. prefixtable[math.random(table.getn(prefixtable))]
   if math.random(0, 100) < hyphenationchance then
    prefixes = prefixes .. '-'
   end
 end

 mininfix=naming[style]['MinInfixAmount']
 maxinfix=naming[style]['MaxInfixAmount']
 for i=1,math.random(mininfix,maxinfix) do
   infixes = infixes.. infixtable[math.random(table.getn(infixtable))]
   if math.random(0, 100) < hyphenationchance then
    infixes = infixes .. '-'
   end
 end
 minpostfix=naming[style]['MinPostfixAmount']
 maxpostfix=naming[style]['MaxPostfixAmount']
 for i=1,math.random(minpostfix,maxpostfix) do
   postfixes = postfixes.. postfixtable[math.random(table.getn(postfixtable))]
   if math.random(0, 100) < hyphenationchance then
    postfixes = postfixes .. '-'
   end
 end


 --[name fitting]--
 heroname = heroname .. ((prefixes..infixes..postfixes):gsub("^%l", string.upper):gsub("-$", '')) .. ' '
end
heroname = heroname:gsub("%s*$", '')
--[title template]--

local b
local templatetable = naming[style]['Templates']
if templatetable ~= nil then
 local template = templatetable[math.random(table.getn(templatetable))]
 local varstable = defaultvars
 if naming[style]['TemplateVars'] ~= nil then
  for k,v in pairs(naming[style]['TemplateVars']) do
   varstable[k] = v
  end
 end
 if varstable == nil then
  varstable = {}
 end
 varstable['%*Name%*'] = { heroname }
 varstable['%*Rings%*'] = { 'Three-ringed', 'Four-ringed', 'Five-ringed', 'Seven-ringed', 'Eight-ringed', 'Nine-ringed', 'Twelve-ringed'}
 -- not gonna bother doing every number in the 1d10+2 range and don't know how to handle that automatically
 
 for var, values in pairs(varstable) do
  template = template:gsub(var, values[math.random(table.getn(values))])
 end
 b = template
else
 b = heroname
end 

return b
end

return p