Module:Creature Mutation Query: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 24: Line 24:


result= doQuery(mutation)
result= doQuery(mutation)
return format(result["_pageName"], mutation, result["cost"], result["type"], level, ego)
if result ~= nil then
 
  return format(result["_pageName"], mutation, result["cost"], result["type"], level, ego)
else
  return format(mutation, mutation, nil, "", level, ego)
end
end
end


Line 83: Line 86:
    
    
   return formatResult(page, name, formattedLevel, modifier, isMental)
   return formatResult(page, name, formattedLevel, modifier, isMental)
end
function p.test()
a= doQuery("Night Vision")
return format(a["_pageName"], "Night Vision", a["cost"], a["type"], 1, 18)
end
end


return p
return p

Latest revision as of 01:16, 1 June 2023


local util_args = require('Module:Args Utility')
local util_cargo = require('Module:Cargo Utility')

local p = {}

function p.main() 
local mutation = ""
local ego = 16  --[default, is 0 modifier]
local level = 1
local isDefect = false
local isMental = false

frame=mw.getCurrentFrame()
if frame.args ~= nil and frame.args ~= '' then
	if frame.args[1] ~= nil and frame.args[1] ~= '' then
		mutation = mw.text.trim(frame:preprocess(frame.args[1]))
		level = tonumber(mw.text.trim(frame:preprocess(frame.args[2])))
    end
    if frame.args[3] ~= nil and frame.args[3] ~= '' then
		ego = tonumber(mw.text.trim(frame:preprocess(frame.args[3])))
	end
end


result= doQuery(mutation)
if result ~= nil then
  return format(result["_pageName"], mutation, result["cost"], result["type"], level, ego)
else
  return format(mutation, mutation, nil, "", level, ego)
end
end

function doQuery(mutation)
    local query = {
		tables = { 'Mutations' },
		fields = {'Cost, Type, _pageName'},
		where = '(_pageNamespace="14" OR _pageNamespace="0") AND _pageName="' .. mutation..'"',
		limit= '1'
	}
-- Try to find a mutation with this name, if not, just return the name unlinked.
    result = util_cargo.queryAndCast(query)
    if not next(result) then
        return nil
    else return result[1]
    end
end

function formatBonus(modifier)
    if modifier > 0 then
       c = "00c420\">+"
    elseif modifier < 0 then
       c= "d74200\">"
return '<span style = \"color:#"=' .. c .. tostring(modifier) .. '</span>'
    end
end

function formatResult(page, name, formattedLevel, modifier, showBonus)
  parentheses ='<b><span style="color:#b1c9c3;">&nbsp;(</span><span style="color:#"' .. formattedLevel
  if showBonus then
        parentheses = parentheses .. formatBonus(modifier)
  end
  parentheses = parentheses .. '</span><span style="color:#b1c9c3;">)</span></b>'
-- formatting
local mutationString = mw.html.create('div')
mutationString
  :addClass('qud-mutation-entry')
:wikitext('[[' .. name.. '|'.. page .. parentheses .. ']]')
   return mutationString
end


function format(page, name, cost, type, level, ego)
    local isDefect = false
    local isMental = false
    if type ~= nil then
      isDefect = string.match(type,"defect") ~= nil
      isMental = string.match(type,"Mental") ~= nil
    end
    local modifier = math.floor((ego-16)/2)
    local parentheses = ""
  if isDefect then
      formattedLevel ='a64a2e;">D'
  elseif (cost == nil or cost > 1) then
      formattedLevel = '77bfcf;">' .. level
  end
  
  return formatResult(page, name, formattedLevel, modifier, isMental)
end

return p