Module:GetRandomCreature: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(title returns link to page)
mNo edit summary
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}
local cargo = mw.ext.cargo
local cargo = mw.ext.cargo
function p.main(frame)
local prefixes = ""
local infixes = ""
local postfixes = ""
local maxprefix
local minprefix
local maxinfix
local mininfix
local maxpostfix
local minpostfix
local titletemplate
local result = {}
local seed = frame.args.seed
if seed ~= nil and seed ~= ''then
math.randomseed(seed:gsub("%w",string.byte))
end
--[get cargo row]--
local tables= 'HeroNames'
local fields= 'Prefixes, MinPrefixAmount, MaxPrefixAmount,Infixes, MinInfixAmount,MaxInfixAmount,Postfixes ,MinPostfixAmount,MaxPostfixAmount,TitleTemplate'
local args= {
where= 'BaseType="Crab"'
}
result = cargo.query(tables,fields,args)
if not next(result) then
error('no base type of that kind found.')
end
--[get prefixes array]--
local resultstring = ''
resultstring = result[1]['Prefixes']
local prefixtable= {}
local i = 1
for j in string.gmatch(resultstring,"%s*(%w+),?%s*") do
prefixtable[i] = j
i= i+1
end
--[get infixes array]--
local resultstring = ''
resultstring = result[1]['Infixes']
local infixtable= {}
local i = 1
for j in string.gmatch(resultstring,"%s*(%w+),?%s*") do
infixtable[i] = j
i= i+1
end
--[get postfixes array]--
local resultstring = ''
resultstring = result[1]['Postfixes']
local postfixtable= {}
local i = 1
for j in string.gmatch(resultstring,"%s*(%w+),?%s*") do
postfixtable[i] = j
i= i+1
end
--[get min/maxprefix stuff]--
minprefix=result[1]['MinPrefixAmount']
maxprefix=result[1]['MaxPrefixAmount']
for i=1,math.random(minprefix,maxprefix) do
  prefixes = prefixes.. prefixtable[math.random(table.getn(prefixtable))]
end
mininfix=result[1]['MinInfixAmount']
maxinfix=result[1]['MaxInfixAmount']
for i=1,math.random(mininfix,maxinfix) do
  infixes = infixes.. infixtable[math.random(table.getn(infixtable))]
end
minpostfix=result[1]['MinPostfixAmount']
maxpostfix=result[1]['MaxPostfixAmount']
for i=1,math.random(minpostfix,maxpostfix) do
  postfixes = postfixes.. postfixtable[math.random(table.getn(postfixtable))]
end
--[title template]--
titletemplate=result[1]['TitleTemplate']
--[name fitting]--
local heroname= ((prefixes..infixes..postfixes):gsub("^%l", string.upper))
local a = string.gsub(titletemplate,'NAME',tostring(heroname))
local b = string.gsub(a,('BASETYPE'), 'crab')
return b
end


function p.a(seed)
function p.a(seed)
   math.randomseed(tonumber(seed))
   math.randomseed(tonumber(seed))
   local count = cargo.query('Characters=C, GeneralData=GD', 'TRIM(COUNT(C._pageName))=Number', {join='C._pageName=GD._pageName', where='C._pageNamespace="0" AND GD.Categories <> "Walls"'})[1]['Number']
   local count = cargo.query('Characters=C, GeneralData=GD', 'TRIM(COUNT(C._pageName))=Number', {join='C.ObjectID=GD.ObjectID', where='C._pageNamespace="0" AND (NOT GD.ParentObject WITHIN "Wall" AND NOT GD.PlainName LIKE "* door")'})[1]['Number']
   local offsetin = math.random(0 , tonumber(count))
   local offsetin = math.random(0 , tonumber(count)-2)
   local tables = 'Characters=C, GeneralData=GD'
   local tables = 'Characters=C, GeneralData=GD'
   local fields = 'GD.PlainName=Name, GD._pageName=Page'
   local fields = 'GD.PlainName=Name, GD._pageName=Page'
   local args ={join='C._pageName=GD._pageName', where='GD._pageNamespace="0" AND GD.Categories <> "Walls"', offset=offsetin,limit = 1}
   local args ={join='C._pageName=GD._pageName', where='GD._pageNamespace="0" AND (NOT GD.ParentObject WITHIN "Wall" AND NOT  GD.PlainName LIKE "* door")', offset=offsetin,limit = 1}
   local result = cargo.query(tables, fields, args)
   local result = cargo.query(tables, fields, args)
   if not next(result) then
   if not next(result) then
Line 105: Line 20:
end
end


function p.test(seed)
  return p.a(tostring(seed))
end
return p
return p

Latest revision as of 14:42, 27 July 2023

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

local p = {}
local cargo = mw.ext.cargo

function p.a(seed)
  math.randomseed(tonumber(seed))
  local count = cargo.query('Characters=C, GeneralData=GD', 'TRIM(COUNT(C._pageName))=Number', {join='C.ObjectID=GD.ObjectID', where='C._pageNamespace="0" AND (NOT GD.ParentObject WITHIN "Wall" AND NOT GD.PlainName LIKE "* door")'})[1]['Number']
  local offsetin = math.random(0 , tonumber(count)-2)
  local tables = 'Characters=C, GeneralData=GD'
  local fields = 'GD.PlainName=Name, GD._pageName=Page'
  local args ={join='C._pageName=GD._pageName', where='GD._pageNamespace="0" AND (NOT GD.ParentObject WITHIN "Wall" AND NOT  GD.PlainName LIKE "* door")', offset=offsetin,limit = 1}
  local result = cargo.query(tables, fields, args)
  if not next(result) then
    error('?????')
  end
  return '[[' .. result[1]['Page'] .. '|'.. result[1]['Name'] .. ']]'
end

function p.getRandomChara(frame)
  return p.a(frame.args.seed)
end

function p.test(seed)
  return p.a(tostring(seed))
end
return p