Module:Family

From Coromon Wiki
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