#Will I run into any problems?

1 messages · Page 1 of 1 (latest)

jade bronze
#

This is a character/ability selection system, should i do something else or is this fine?

local testModule = {}

local function getScriptFolders(player)
    local bendingFolder = game:GetService("StarterPlayer").StarterPlayerScripts.bendingHandler
    return {
        earthFolder = bendingFolder:WaitForChild("earthFolder"),
        fireFolder = bendingFolder:WaitForChild("fireFolder"),
        waterFolder = bendingFolder:WaitForChild("waterFolder"),
        airFolder = bendingFolder:WaitForChild("airFolder"),
    }
end

local function enableFolderOnly(player, folderToEnableName)
    local folders = getScriptFolders(player)

    for name, folder in pairs(folders) do
        for _, obj in ipairs(folder:GetDescendants()) do
            if obj:IsA("LocalScript") then
                obj.Enabled = (name == folderToEnableName)
            end
        end
    end
end

function testModule.Test1(player)
    enableFolderOnly(player, "earthFolder")
end

function testModule.Test2(player)
    enableFolderOnly(player, "fireFolder")
end

function testModule.Test3(player)
    enableFolderOnly(player, "waterFolder")
end

function testModule.Test4(player)
    enableFolderOnly(player, "airFolder") 
end

return testModule
stray mortar
#

too much isssues

#

modifying StarterPlayerScripts will affect all players globally

#

scripts enabled/disabled this way dont properly reset on character respawn

#

no cleanup when players leave

#

localscripts in StarterPlayerScripts are copied to each player individually

#
local testModule = {}
local Players = game:GetService("Players")

local function getAbilityScripts()
    local bendingFolder = game:GetService("ServerStorage").AbilityScripts
    return {
        earthFolder = bendingFolder:FindFirstChild("earthFolder"),
        fireFolder = bendingFolder:FindFirstChild("fireFolder"),
        waterFolder = bendingFolder:FindFirstChild("waterFolder"),
        airFolder = bendingFolder:FindFirstChild("airFolder"),
    }
end

local function clearPlayerAbilities(player)
    local playerScripts = player:WaitForChild("PlayerScripts")
    local existingAbilities = playerScripts:FindFirstChild("CurrentAbilities")
    if existingAbilities then
        existingAbilities:Destroy()
    end
end

local function givePlayerAbility(player, abilityType)
    clearPlayerAbilities(player)
    
    local folders = getAbilityScripts()
    local selectedFolder = folders[abilityType .. "Folder"]
    
    if selectedFolder then
        local playerScripts = player:WaitForChild("PlayerScripts")
        local abilityClone = selectedFolder:Clone()
        abilityClone.Name = "CurrentAbilities"
        abilityClone.Parent = playerScripts
    end
end

function testModule.Test1(player)
    givePlayerAbility(player, "earth")
end

function testModule.Test2(player)
    givePlayerAbility(player, "fire")
end

function testModule.Test3(player)
    givePlayerAbility(player, "water")
end

function testModule.Test4(player)
    givePlayerAbility(player, "air")
end

Players.PlayerRemoving:Connect(function(player)
    clearPlayerAbilities(player)
end)

return testModule
supple lakeBOT
#

studio** You are now Level 6! **studio

stray mortar
#

use this

jade bronze
#

in what way is this better/clears up the issues?

stray mortar
#

dont forget to change some stuff , like abilityclone name etc

jade bronze
#

not saying itsnot just tryna understand what you did

stray mortar