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

How can I make it so everyone gets the parts from the script, always?

Asked by 5 years ago
Edited 5 years ago

Whenever I use a toggle command script to disable and enable this script, it always works with people who recently join AFTER the script is enabled. The toggle command script works, but the other script doesn't work post-enabling.

The toggle command loads the character after the toggling, which should cause the parts to spawn inside the torso, but they don't. The issue is that they spawn for newer players who join after the command turns the script on.

Here's the script I currently have that gets toggled:

P.PlayerAdded:Connect(function(Player)
    Player.CharacterAdded:Connect(function(Character)
        local Humanoid = Character:WaitForChild'Humanoid'
        local Torso = Character:WaitForChild'Torso'


        local TouchedTable = {
            {'TopRight', false, CFrame.new(Size.X/2, Size.Y/2, -Size.Z/2)};
            {'TopRight', false, CFrame.new(Size.X/2, Size.Y/2, -Size.Z/2)};
            {'BottomRight', false, CFrame.new(-Size.X/2, Size.Y/2, Size.Z/2)};
            {'BottomRight', false, CFrame.new(-Size.X/2, Size.Y/2, Size.Z/2)};
        }

        local Flinging = false
        local Swimming = false


        local function Weld(Part0, Part1, C0, Parent)
            local W = Instance.new('Weld', Parent)
            W.Part0 = Part0
            W.Part1 = Part1
            W.C0 = C0
        end

        local function getSurface(position, object)
            local surfaces = {
                back = object.CFrame * CFrame.new(0, 0, object.Size.Z);
                front = object.CFrame * CFrame.new(0, 0, -object.Size.Z);
                top = object.CFrame * CFrame.new(0, object.Size.Y, 0);
                bottom = object.CFrame * CFrame.new(0, -object.Size.Y, 0);
                right = object.CFrame * CFrame.new(object.Size.X, 0, 0);
                left = object.CFrame * CFrame.new(-object.Size.X, 0, 0);
            }
            local surface = "back"
            for side, cframe in pairs (surfaces) do
                surface = ((position - cframe.p).magnitude > (position - surfaces[surface].p).magnitude and surface or side)
            end
            return surface
        end

        local function Fling(Hit)
            if (TouchedTable[1] or TouchedTable[2]) and not (Flinging) then
                Flinging = true
                local Direction
                local Surface = getSurface(Torso.Position, Hit)
                if (Surface == 'front') then
                    Direction = Hit.CFrame.lookVector * 500
                elseif (Surface == 'back') then
                    Direction = Hit.CFrame.lookVector * -500
                elseif (Surface == 'right') then
                    Direction = Hit.CFrame.rightVector * 500
                elseif (Surface == 'left') then
                    Direction = Hit.CFrame.rightVector * -500
                elseif (Surface == 'top') then
                    Direction = Hit.CFrame.upVector * 500
                elseif (Surface == 'bottom') then
                    Direction = Hit.CFrame.upVector * -500
                end
                local Force = Instance.new('BodyVelocity')
                Force.MaxForce = Vector3.new(40000, 0, 40000)
                Force.P = 99999
                Force.Velocity = Direction
                Force.Parent = Torso
                wait(VelocityTime[math.random(1, #VelocityTime)])
                Force:Destroy()
                wait(FlingAgainWait)
                Flinging = false
            end
        end


        Humanoid.StateChanged:Connect(function(old, new)
            if (new == Enum.HumanoidStateType.Swimming) then
                if not (Swimming) then
                    Swimming = true
                end
            else
                if (Swimming) then
                    Swimming = false
                end
            end
        end)

        for _ = 1, 4, 1 do
            local PClone = Part:Clone()
            PClone.Parent = Torso
            PClone.Name = TouchedTable[_][1]
            Weld(Torso, PClone, TouchedTable[_][3], Torso)
            PClone.Touched:Connect(function(h)
                if (h.ClassName ~= 'Part') or
                    (h == Torso) or
                    (h.Parent == Character) or
                    (h.Parent.Parent == Character) or
                    (h.CanCollide == false) or
                    (Humanoid.Health <= 0) or
                    (Swimming) or
                    (Flinging) or
                    (game.Players:GetPlayerFromCharacter(h.Parent)) or
                    (game.Players:GetPlayerFromCharacter(h.Parent.Parent)) then
                    return
                end
                if not (TouchedTable[_][2]) then
                    TouchedTable[_][2] = true
                    Fling(h)
                    wait(PartDebounceWait)
                    TouchedTable[_][2] = false
                end
            end)
        end
    end)
end)

Answer this question