Module:Family
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Family/doc
local p = { }
local traits = require("Module:Traits")
local skills = require("Module:Skills")
local coromon = require("Module:Coromon")
local familyList = mw.loadData("Module:Family/List")
function p.getList ()
return familyList
end
function p.getFamily (name_or_id)
for k, v in pairs(familyList) do
if v["name"] == name_or_id or k == name_or_id then
return v
end
end
end
function p.getParam (frame)
local family = p.getFamily(frame.args[1] or frame.args["id"])
local param = frame.args[2] or frame.args["param"]
return family[param]
end
function p.getMonsterParam (f)
local id = f.args[1] or f.args["id"]
local slot = tonumber(f.args[2] or f.args["slot"])
local param = f.args[3] or f.args["param"]
local family = p.getFamily(id)
if family == nil then
return ""
end
local monsterInSlot = family.evos[slot]
if monsterInSlot == nil then
return ""
end
local mon = coromon.getCoromon(monsterInSlot.ID)
if mon == nil then
return ""
end
local data = mon[param]
return data
end
function p.getEvoParam (f)
local id = f.args[1] or f.args["id"]
local slot = tonumber(f.args[2] or f.args["slot"])
local param = f.args[3] or f.args["param"]
local family = p.getFamily(id)
if family == nil then
return ""
end
local monsterInSlot = family.evos[slot]
if monsterInSlot == nil then
return ""
end
return monsterInSlot[param]
end
function p.getAllEvos (f)
local id = f.args[1] or f.args["id"]
local separator = f.args[2] or ''
local family = p.getFamily(id)
local wikitext = ''
for k, v in pairs(family.evos) do
wikitext = wikitext .. '{{A|'.. v.ID .. '}}' .. separator
end
--return wikitext
return f:preprocess(wikitext)
end
function p.getAllEvosLocal (id)
local family = p.getFamily(id)
local wikitext = ''
for k, v in pairs(family.evos) do
wikitext = wikitext .. '{{A|'.. v.ID .. '}}'
end
return wikitext
end
function p.getSkillSet (f)
local id = f.args[1] or f.args["id"]
local family = p.getFamily(id)
local wikitext = '{{S|Start}}\n'
for k, v in pairs(family.skills) do
local stab = skills.getType({ args = {skill = v.name} }) == family.type
wikitext = wikitext .. '{{S|'.. v.name ..'|'.. v.level .. '|stab=' .. tostring(stab) ..'}}\n'
end
wikitext = wikitext .. '{{S|End}}'
return f:preprocess(wikitext)
end
function p.hasSkill (id, s)
local skill = skills.getSkillID({args={s}})
local family = p.getFamily(id)
for k, v in pairs(family.skills) do
if v.name == skill then
return true
end
end
return false
end
function p.getMonstersWithSkill (f)
local skill = skills.getSkillID(f)
local wikitext = '{{Learnset|Start}}\n'
for id, family in pairs(familyList) do
for _, s in pairs(family.skills) do
if s.name == skill then
wikitext = wikitext .. '{{Learnset|'.. id ..'|'.. s.level .. '}}\n'
end
end
end
wikitext = wikitext .. '{{Learnset|End}}'
--return wikitext
return f:preprocess(wikitext)
end
function p.getMonstersWithTrait (f)
local trait = traits.getTraitID(f)
local wikitext = '{{TraitSet|Start}}\n'
for id, family in pairs(familyList) do
local totalOdds = p.getTotalTraitOdds(family.traits)
for _, t in pairs(family.traits) do
--mw.logObject(s)
if t[1] == trait then
wikitext = wikitext .. '{{TraitSet|'.. id ..'|'.. string.format("%.2f", (t.odds/totalOdds)*100) .. '}}\n'
end
end
end
wikitext = wikitext .. '{{TraitSet|End}}'
--return wikitext
return f:preprocess(wikitext)
end
function p.getMonstersForListOfTraits (trait_id)
local wikitext = ''
for id, family in pairs(familyList) do
local totalOdds = p.getTotalTraitOdds(family.traits)
for _, t in pairs(family.traits) do
if t[1] == trait_id then
wikitext = wikitext .. '{{ListOfTraits/export|traitcoromon|coromon='.. p.getAllEvosLocal(id) ..'|odds='.. string.format("%.2f", (t.odds/totalOdds)*100) .. '}}\n'
end
end
end
return wikitext
end
function p.getTotalMonstersWithTrait(trait_id)
if familyList == nil then
error("familyList is nil. Make sure it is properly initialized.")
end
local sum = 0
for id, family in pairs(familyList) do
if family.traits == nil then
error("traits is nil for family with id: " .. tostring(id))
end
for _, t in pairs(family.traits) do
if t[1] == trait_id then
sum = sum + 1
end
end
end
return sum
end
function p.getTotalTraitOdds (traits)
local total = 0
for _, trait in pairs(traits) do
total = total + trait.odds
end
return total
end
function p.getTraitPool (f)
local id = f.args[1] or f.args["id"]
local family = p.getFamily(id)
local wikitext = '{{TraitList|Start}}\n'
local totalOdds = p.getTotalTraitOdds(family.traits)
for k, v in pairs(family.traits) do
mw.logObject(v)
if v[1] ~= nil then
wikitext = wikitext .. '{{TraitList|'.. v[1] ..'|odds='.. string.format("%.2f", (v.odds/totalOdds)*100) .. '}}\n'
end
end
wikitext = wikitext .. '{{TraitList|End}}'
return f:preprocess(wikitext)
end
return p