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)
