how about both
all of the behind-the-scenes instances that are responsible for this
the script within the player clone
local ContentProvider = game:GetService("ContentProvider")
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local CurrentAnimation = 0
local CharacterThing = nil
local FallBaseAnimation = Instance.new("Animation")
local StartR15Animation = Instance.new("Animation")
StartR15Animation.AnimationId = "rbxassetid://13054817280"
local StartR15Track = Humanoid:LoadAnimation(StartR15Animation)
local StartLoopR15Animation = Instance.new("Animation")
StartLoopR15Animation.AnimationId = "rbxassetid://13054821342"
local StartLoopR15Track = Humanoid:LoadAnimation(StartLoopR15Animation)
local LoopR15Animation = Instance.new("Animation")
LoopR15Animation.AnimationId = "rbxassetid://13054829432"
local LoopR15Track = Humanoid:LoadAnimation(LoopR15Animation)
local EndR15Animation = Instance.new("Animation")
EndR15Animation.AnimationId = "rbxassetid://13054848175"
local EndR15Track = Humanoid:LoadAnimation(EndR15Animation)
ContentProvider:PreloadAsync({StartR15Animation, StartLoopR15Animation, LoopR15Animation, EndR15Animation})
script.Parent.MorphinTime.OnInvoke = function(Appearance, ReceivedCharacter, FallAnimation)
Humanoid:ApplyDescription(Appearance)
FallBaseAnimation.AnimationId = FallAnimation
local FallBaseTrack = Humanoid:LoadAnimation(FallBaseAnimation)
FallBaseTrack:Play()
CharacterThing = ReceivedCharacter
end
script.Parent.AnimationChange.OnInvoke = function(ReceivedAnimation)
if ReceivedAnimation == 0 then
CurrentAnimation = 0
StartR15Track:Play()
StartR15Track.Stopped:Wait()
if CurrentAnimation == 0 then
StartR15Track:Stop()
StartLoopR15Track:Play()
end
elseif ReceivedAnimation == 1 then
CurrentAnimation = 1
StartR15Track:Stop()
StartLoopR15Track:Stop()
LoopR15Track:Play()
elseif ReceivedAnimation == 2 then
CurrentAnimation = 2
LoopR15Track:Stop()
EndR15Track:Play()
EndR15Track.Stopped:Wait()
CharacterThing.MakePlayerVisible:Fire()
end
end
the slip script itself
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local Player = game.Players:GetPlayerFromCharacter(Character)
local RigClone = nil
local RunningValue
local ParentParts = {}
local ThingsToIgnore = {}
for _,w in pairs(Character:GetDescendants()) do
if w.ClassName == "Part" or w.ClassName == "BasePart" or w.ClassName == "UnionOperation" or w.ClassName == "MeshPart" then
table.insert(ParentParts, w)
end
end
for i, v in pairs(ParentParts) do
table.insert(ThingsToIgnore, v)
end
Character.SlipEvent.Event:Connect(function()
game.ReplicatedStorage.DisableControls:FireClient(Player)
game.ReplicatedStorage.DisableShiftlock:FireClient(Player)
Character.BananaSlipBool.Value = true
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.9)
for _,w in pairs(ParentParts) do
if w.Name == "Head" then
w.face.Transparency = 1
end
w.Transparency = 1
end
RigClone.HumanoidRootPart.CFrame = Character.HumanoidRootPart.CFrame
RigClone.HumanoidRootPart.Anchored = false
RigClone.HumanoidRootPart.WeldConstraint.Part1 = Character.HumanoidRootPart
RigClone.AnimationChange:Invoke(0)
local BounceCount = 0
local BounceMultiplier = 1
local AntiGroundBounceTimer = 0.35
local AntiWallBounceTimer = 0.15
local ForwardVelocity = 50
local UpVelocity = 40
local GravityFactor = 0
local BounceType = false
RunningValue = nil
Character.HumanoidRootPart.BananaLinearVelocity.Enabled = true
while BounceMultiplier > 0.5 or BounceCount <= 4 do wait()
Character.HumanoidRootPart.BananaLinearVelocity.VectorVelocity = (Character.HumanoidRootPart.CFrame.LookVector * (ForwardVelocity * BounceMultiplier))
Character.HumanoidRootPart.BananaLinearVelocity.VectorVelocity = Vector3.new(Character.HumanoidRootPart.BananaLinearVelocity.VectorVelocity.X, Character.HumanoidRootPart.BananaLinearVelocity.VectorVelocity.Y + ((UpVelocity * BounceMultiplier) + GravityFactor), Character.HumanoidRootPart.BananaLinearVelocity.VectorVelocity.Z)
local HitASurface = false
local RayInstance = Ray.new(Character.HumanoidRootPart.Position, Vector3.new(0, -4.5, 0))
local Result = workspace:FindPartOnRayWithIgnoreList(RayInstance, ThingsToIgnore, false, true)
if Result ~= nil then
if Result.ClassName == "Part" or Result.ClassName == "BasePart" or Result.ClassName == "UnionOperation" or Result.ClassName == "MeshPart" then
if Result.Transparency >= 0.9 or Result.CanCollide == false then
table.insert(ThingsToIgnore, Result)
else
if AntiGroundBounceTimer <= 0 then
print(Result:GetFullName())
HitASurface = true
GravityFactor = 0
AntiGroundBounceTimer = 0.1
AntiWallBounceTimer = 0.1
BounceType = false
end
end
end
end
local RayInstance = Ray.new(Character.HumanoidRootPart.Position, Character.HumanoidRootPart.CFrame.LookVector.Unit * 3)
local Result = workspace:FindPartOnRayWithIgnoreList(RayInstance, ThingsToIgnore, false, true)
local RayInstance2 = Ray.new(Character.HumanoidRootPart.Position, -Character.HumanoidRootPart.CFrame.LookVector.Unit * 3)
local Result2 = workspace:FindPartOnRayWithIgnoreList(RayInstance2, ThingsToIgnore, false, true)
if Result ~= nil then
if Result.ClassName == "Part" or Result.ClassName == "BasePart" or Result.ClassName == "UnionOperation" or Result.ClassName == "MeshPart" then
if Result.Transparency >= 0.9 or Result.CanCollide == false then
table.insert(ThingsToIgnore, Result)
else
if AntiWallBounceTimer <= 0 then
print(Result:GetFullName())
HitASurface = true
if ForwardVelocity == 50 then
ForwardVelocity = -50
else
ForwardVelocity = 50
end
GravityFactor = 0
AntiGroundBounceTimer = 0.1
AntiWallBounceTimer = 0.1
BounceType = true
end
end
end
elseif Result2 ~= nil then
if Result2.ClassName == "Part" or Result2.ClassName == "BasePart" or Result2.ClassName == "UnionOperation" or Result2.ClassName == "MeshPart" then
if Result2.Transparency >= 0.9 or Result2.CanCollide == false then
table.insert(ThingsToIgnore, Result2)
else
if AntiWallBounceTimer <= 0 then
print(Result2:GetFullName())
HitASurface = true
if ForwardVelocity == 50 then
ForwardVelocity = -50
else
ForwardVelocity = 50
end
GravityFactor = 0
AntiGroundBounceTimer = 0.1
AntiWallBounceTimer = 0.1
BounceType = true
end
end
end
end
--Character.SightlineConfirmationPart.Size = Vector3.new(0.5, 0.5, 2)
--Character.SightlineConfirmationPart.CFrame = CFrame.new(Character.HumanoidRootPart.Position,Character.HumanoidRootPart.Position + Vector3.new(0,-2,0))
--Character.SightlineConfirmationPart2.Size = Vector3.new(0.5, 0.5, 2)
--Character.SightlineConfirmationPart2.CFrame = CFrame.new(Character.HumanoidRootPart.Position,Character.HumanoidRootPart.CFrame.LookVector.Unit * 2)
AntiGroundBounceTimer -= 0.01
AntiWallBounceTimer -= 0.01
GravityFactor -= 2
if GravityFactor <= -100 then
GravityFactor = -100
end
if HitASurface == true then
local SoundRNG = math.random(1,8)
if SoundRNG == 1 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 1
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.65)
elseif SoundRNG == 2 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 2
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
elseif SoundRNG == 3 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 3
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
elseif SoundRNG == 4 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 4
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
elseif SoundRNG == 5 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 5
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
elseif SoundRNG == 6 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 6
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 1.5)
elseif SoundRNG == 7 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 8
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
elseif SoundRNG == 8 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 9
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 0.5)
end
if BounceType == false then
BounceMultiplier -= 0.1
elseif BounceType == true then
BounceMultiplier -= 0.1
end
BounceCount += 1
if BounceCount == 1 then
RigClone.AnimationChange:Invoke(1)
end
end
end
local SoundRNG = math.random(1,3)
if SoundRNG == 1 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 10
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 1.5)
elseif SoundRNG == 2 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 12
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 1.8)
elseif SoundRNG == 3 then
local SlipSoundClone = Character.SlipSounds:Clone()
SlipSoundClone.Parent = Character
SlipSoundClone.TimePosition = 14
SlipSoundClone:Play()
game.Debris:AddItem(SlipSoundClone, 1.5)
end
RigClone.AnimationChange:Invoke(2)
Character.HumanoidRootPart.BananaLinearVelocity.Enabled = false
Character.BananaSlipBool.Value = false
local Value = game.ReplicatedStorage.RunActiveCheck:InvokeClient(Player)
if Value == false then
Humanoid.WalkSpeed = 16
elseif Value == true then
Humanoid.WalkSpeed = 50
end
game.ReplicatedStorage.EnableControls:FireClient(Player)
game.ReplicatedStorage.EnableShiftlock:FireClient(Player)
end)
Character.SetClone.Event:Connect(function(ReceivedClone)
RigClone = ReceivedClone
for _,w in pairs(RigClone:GetDescendants()) do
if w.ClassName == "Part" or w.ClassName == "BasePart" or w.ClassName == "UnionOperation" or w.ClassName == "MeshPart" then
table.insert(ThingsToIgnore, w)
end
end
end)
Character.MakePlayerVisible.Event:Connect(function()
RigClone.HumanoidRootPart.WeldConstraint.Part1 = nil
RigClone.HumanoidRootPart.Anchored = true
RigClone.HumanoidRootPart.CFrame = CFrame.new(308.65, 70.5, 715.886)
for _,w in pairs(ParentParts) do
if w.Name == "Head" then
w.face.Transparency = 0
w.Transparency = 0
elseif w.Name ~= "HumanoidRootPart" then
w.Transparency = 0
end
end
end)
and the ServerScriptService respawn script
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local R15SlipClone = nil
player.CharacterAdded:Connect(function(character)
game.ReplicatedStorage.EnableControls:FireClient(player)
local SlipSounds = game.ReplicatedStorage.SlipSounds:Clone()
SlipSounds.Parent = character
local SlipEvent = game.ReplicatedStorage.SlipEvent:Clone()
SlipEvent.Parent = character
local MakePlayerVisibleEvent = game.ReplicatedStorage.MakePlayerVisible:Clone()
MakePlayerVisibleEvent.Parent = character
local SetCloneEvent = game.ReplicatedStorage.SetClone:Clone()
SetCloneEvent.Parent = character
local SlipScript = game.ReplicatedStorage.RatherGoofySlipScript:Clone()
SlipScript.Parent = character
local BananaLinearVelocity = game.ReplicatedStorage.BananaLinearVelocity:Clone()
BananaLinearVelocity.Parent = character.HumanoidRootPart
local SlipAttachment = Instance.new("Attachment")
SlipAttachment.Name = "SlipAttachment"
SlipAttachment.Parent = character.HumanoidRootPart
SlipAttachment.Position = Vector3.new(0,0,-0.5)
SlipAttachment.Orientation = Vector3.new(0,90,0)
BananaLinearVelocity.Attachment0 = SlipAttachment
local BananaSlipBool = Instance.new("BoolValue")
BananaSlipBool.Name = "BananaSlipBool"
BananaSlipBool.Parent = character
--local SightlineConfirmationPart = game.ReplicatedStorage.SightlineConfirmationPart:Clone()
--SightlineConfirmationPart.Parent = character
--local SightlineConfirmationPart2 = game.ReplicatedStorage.SightlineConfirmationPart2:Clone()
--SightlineConfirmationPart2.Parent = character
if R15SlipClone ~= nil then
R15SlipClone:Destroy()
end
local Appearance = game:GetService("Players"):GetHumanoidDescriptionFromUserId(player.UserId)
R15SlipClone = game.ReplicatedStorage.R15SlipClone:Clone()
local AnimateScriptClone
if character:FindFirstChild("LowerTorso") then
AnimateScriptClone = character.Animate:Clone()
AnimateScriptClone.Parent = R15SlipClone
else
AnimateScriptClone = game.ReplicatedStorage.StockAnimateScriptForEmergencies:Clone()
AnimateScriptClone.Parent = R15SlipClone
end
R15SlipClone.Parent = workspace
R15SlipClone.Humanoid.DisplayName = character.Humanoid.DisplayName
R15SlipClone.MorphinTime:Invoke(Appearance, character, AnimateScriptClone.fall.FallAnim.AnimationId)
SetCloneEvent:Fire(R15SlipClone)
--game.Workspace.HideAndSeekLobbyHitbox.PlayerRespawnedServer:Fire(player)
end)
end)
and lastly a demonstration of it in action
if you need to know the specifics of anything then ask away