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

Scripted a premium only cape. Non-premium user can still use it. Any fixes?

Asked by 3 years ago

I coded a cape script. I'm not that familiar with premium only scripting, but I tried making this cape premium only in the first lines. This didn't exactly work. Non premium users also have access to the cape. Any fixes?

-- this is my revised cape script
-- I put it in a local script in StarteGui


local specials = {"700000002", "scrapbun", 255137888, "Player1"} -- String for username, number for userid
local capeColor = BrickColor.new("Really black")
local capeLength = 5
local renderCap = 200 -- Stop rendering capes for players over 200 studs away
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local runServ = game:GetService("RunService")

if player.MembershipType ~= Enum.MembershipType.Premium then
    function canUseCape(player)
        return false
    end
end

if player.MembershipType == Enum.MembershipType.Premium then
    function canUseCape(player) --
        return true
    end

    function applyCape(char) -- Where all the magic happens
        if (game.Workspace.CurrentCamera.Capes:FindFirstChild("Cape" .. char.Name)) then
            game.Workspace.CurrentCamera.Capes["Cape" .. char.Name]:Destroy()
        end

        while (char and not char.Parent and not char:FindFirstChild("Torso")) do
            runServ.Heartbeat:wait()
        end

        if (not char or not char.Parent) then
            return "Uh oh!"
        end

        local cape = Instance.new("Model", game.Workspace.CurrentCamera.Capes)
        cape.Name = "Cape" .. char.Name

        local bits = {}
        local isShowing = true

        for x = 1, 10 do
            if (not bits[x]) then
                bits[x] = {}
            end

            for y = 1, capeLength / 0.2 do
                local p = Instance.new("Part", cape)
                p.FormFactor = "Custom"
                p.Size = Vector3.new(0.2, 0.2, 0.2)
                p.BrickColor = capeColor
                p.CanCollide = false
                p.Anchored = true
                p.Material = "Neon"

                bits[x][y] = p
            end
        end

        spawn(function() -- So noobs don't have to thread this themselves
            while (cape and cape.Parent and char and char:FindFirstChild("Torso") and char.Parent == game.Workspace) do
                if ((char:GetModelCFrame().p - game.Workspace.CurrentCamera.CoordinateFrame.p).magnitude <= 200) then
                    if (not isShowing) then
                        for x = 1, #bits do
                            for y = 1, #bits[x] do
                                bits[x][y].Transparency = 0
                            end
                        end

                        isShowing = true
                    end

                    for x = 1, #bits do
                        for y = 1, #bits[x] do
                            local bit, lastPos = bits[x][y], bits[x][y].CFrame - Vector3.new(0, 0.2, 0)
                            local bitTop = y > 1 and bits[x][y - 1] or nil
                            local cf

                            if (bitTop) then
                                local pos, lookAt = bitTop.CFrame * CFrame.new(0, 0, -0.1), lastPos.p
                                cf = CFrame.new(pos.p, lookAt) * CFrame.new(0, 0, -0.1)
                            else
                                local pos, lookAt = char.Torso.CFrame * CFrame.new(0, 1.1, 0.6) * CFrame.new(x * 0.2 - 1.1, (-y + 1) * 0.2 - 0.1, 0), lastPos.p
                                cf = CFrame.new(pos.p, lookAt) * CFrame.new(0, 0, -0.1)
                            end

                            bit.CFrame = cf
                        end
                    end
                elseif (isShowing) then
                    for x = 1, #bits do
                        for y = 1, #bits[x] do
                            bits[x][y].Transparency = 1
                        end
                    end

                    isShowing = false
                end

                runServ.RenderStepped:wait()
            end

            if (cape and cape.Parent) then
                cape:Destroy()
            end
        end)
    end

    function playerAdded(player)
        if (canUseCape(player)) then
            player.CharacterAdded:connect(function(char)
                applyCape(char)
            end)

            if (player.Character and player.Character.Parent == game.Workspace) then
                applyCape(player.Character)
            end
        end
    end

    if (game.Workspace.CurrentCamera:FindFirstChild("Capes")) then
        game.Workspace.CurrentCamera.Capes:ClearAllChildren()
    else
        Instance.new("Model", game.Workspace.CurrentCamera).Name = "Capes"
    end

    for i, player in pairs(game.Players:GetPlayers()) do
        playerAdded(player)
    end
end

game.Players.PlayerAdded:connect(playerAdded)

Answer this question