Module:Sandbox/SkillTree: Difference between revisions

From Melvor Idle
No edit summary
(THIS SHIT IS EVIL!!!)
Line 70: Line 70:
     local nodes = {}
     local nodes = {}
      
      
     for _, skillData in pairs(GameData.skillData) do
     for skillName, skillData in pairs(GameData.skillData) do
         local skillTrees = skillData.skillTrees
         local skillTrees = skillData.skillTrees
         if skillTrees then
         if skillTrees then
             for _, skillTree in ipairs(skillTrees) do
             for _, skillTree in ipairs(skillTrees) do
                 for _, node in ipairs(GameData.getEntities(skillTree.nodes, checkFunc)) do
                 for _, node in ipairs(GameData.getEntities(skillTree.nodes, checkFunc)) do
                node.skillName = skillData.name
                    local nodeCopy = {}
                     table.insert(nodes, node)
                    for k, v in pairs(node) do
                        nodeCopy[k] = v
                    end
 
                    nodeCopy.skillName = skillName
 
                     table.insert(nodes, nodeCopy)
                 end
                 end
             end
             end

Revision as of 15:05, 30 August 2024

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

local p = {}

local Constants = require('Module:Constants')
local Num = require('Module:Number')
local Shared = require('Module:Shared')
local Common = require('Module:Common')
local GameData = require('Module:GameData')
local SkillData = GameData.skillData
local Modifiers = require('Module:Modifiers')
local Skills = require('Module:Skills')
local Items = require('Module:Items')
local Icons = require('Module:Icons')

local function deepPrint(tbl, indent)
    if not indent then indent = 0 end
    for k, v in pairs(tbl) do
        local formatting = string.rep("  ", indent) .. k .. ": "
        if type(v) == "table" then
            mw.log(formatting)
            deepPrint(v, indent + 1)
        else
            mw.log(formatting .. tostring(v))
        end
    end
end

function p.printAllSkillTrees()
    -- Iterate through all skills in GameData.skillData
    for skillName, skillData in pairs(GameData.skillData) do
        local skillTrees = skillData.skillTrees

        if skillTrees then
            mw.log("Skill Trees for " .. skillName .. ":")
            for _, skillTree in ipairs(skillTrees) do
                mw.log("------------------------------")
                mw.log("Skill Tree ID: " .. skillTree.id)
                mw.log("Skill Tree Name: " .. skillTree.name)
                mw.log("Points Available: " .. (skillTree.points or "N/A"))
                mw.log("Number of Nodes: " .. #skillTree.nodes)

                -- Print information for each node in the skill tree
                for _, node in ipairs(skillTree.nodes) do
                    mw.log("  Node ID: " .. node.id)
                    mw.log("  Node Name: " .. node.name)
                    mw.log("  Costs: " .. (node.costs.points or 0) .. " points")
                    mw.log("  Unlocked: " .. tostring(node.isUnlocked))

                    -- Print the node's modifiers
                    if node.modifiers then
                        mw.log("  Modifiers:")
                        deepPrint(node.modifiers, 2)
                    end

                    -- Print the node's parents (if any)
                    if node.parents then
                        mw.log("  Parents:")
                        for _, parentID in ipairs(node.parents) do
                            mw.log("    Parent Node ID: " .. parentID)
                        end
                    end
                end
            end
        else
            mw.log("No skill trees found for " .. skillName .. ".")
        end
    end
end

function p.getSkillTreeNodes(checkFunc)
    local nodes = {}
    
    for skillName, skillData in pairs(GameData.skillData) do
        local skillTrees = skillData.skillTrees
        if skillTrees then
            for _, skillTree in ipairs(skillTrees) do
                for _, node in ipairs(GameData.getEntities(skillTree.nodes, checkFunc)) do
                    local nodeCopy = {}
                    for k, v in pairs(node) do
                        nodeCopy[k] = v
                    end

                    nodeCopy.skillName = skillName

                    table.insert(nodes, nodeCopy)
                end
            end
        end
    end
    return nodes
end

return p