Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Disabling Characters Controls Breaking?

Asked by 6 years ago
local MasterControl = require(game.Players.LocalPlayer:WaitForChild("PlayerScripts"):WaitForChild("ControlScript"):WaitForChild("MasterControl"))

MasterControl:Disable()
wait(3)
MasterControl:Enable()

This is inside a local script that is inside a part. When touched the part clones this script into the playergui and disables it. After 4 seconds (yes ik it says 3 but I need it to enable) the script destroys. Now this completely breaks the system, it makes your character walk backward while you can't control it.

1 answer

Log in to vote
1
Answered by 6 years ago
Edited 6 years ago

dude, rather than putting it inside the local script inside the individual part, do it inside

StarterPlayer > StarterPlayerScripts

and here's the code with some brief explanation

local Player = script.Parent.Parent --// Get the player as a variable
local Character = Player.Character
if not Character ~= nil then
    Character = Player.CharacterAdded:Wait() --// Wait for the character if the character doesn't exist yet
end
local Humanoid = Character:WaitForChild("Humanoid") 

local MasterControl = require(script.Parent:WaitForChild("ControlScript"):WaitForChild("MasterControl"))

local BodyParts = { --// The table of the character bodyparts that can activate the code
    "Right Leg";
    "Left Leg"
}

local ImmobilizeDuration = 3 --// The duration of the immobilization

local Immobilizer = function()
    for _, Part in next, BodyParts do --// Get all the names of the parts required to touch
        Character[Part].Touched:Connect(function(Touched) --// "Character[Part]" is when the script goes to the Character, 
            --// and inside the square brackets, the script will find the bodyparts the table has listed
            if Touched.Name == "disabler" and Humanoid:GetState() ~= Enum.HumanoidStateType.Dead then --// The legs touches a certain part
                --// AND checks if the character is not dead
                MasterControl:Disable()
                wait(ImmobilizeDuration)
                MasterControl:Enable()
            end
        end)
    end
end

Humanoid.Died:Connect(function() --// If you want to run this function again, better to add this
    --// Or else it won't work for the new character after death
    Character = Player.CharacterAdded:Wait() --// Waits for the new character to respawn
    Humanoid = Character:WaitForChild("Humanoid")
    Immobilizer() --// After waiting, run this code
end)

Immobilizer() --// For the first time without dying, this code will run

as you may notice, there has been some changes

Ad

Answer this question