We are making an animation GUI for my game, and it features some animations that use models in them. The Model works in the animation editor, but we can't figure out how to spawn it in from a GUI button just for the animation, and then get rid of it after without it being bugged. We have managed to spawn it in but it is EXTREMELY buggy.
The model itself consists of 3 unions, and they are all welded together. A Motor6D is placed in the torso of our dummy, and part0 is welded to the HumanoidRoot, and part1 to a part within the model, which is also in the torso.
Here is the code for doing this
local animation = script.Animation1
local VectorZero = Vector3.new(0,0,0)
local localPlayer = script.Parent.Parent.Parent.Parent.Parent
local Character = localPlayer.Character
local Humanoid = Character:WaitForChild("Humanoid")
local hasSat = false
local CanEmote = true
local isAllowed = false
local isNoCollided = false
local isFalling = false
local hasBeenChecked = false
local isActive = false
local bypassed = require(game.ReplicatedStorage.drvkStuff)
local animation1
local chair
local allowedUsers =
{
"hwlq";
"drvk";
}
local function stopAnimationsTracks()
-- Get playing animations
local AnimationTracks = Humanoid:GetPlayingAnimationTracks()
-- Stop all playing animations
for i, track in pairs (AnimationTracks) do
track:Stop()
end
end
local function setupChair()
chair = game.ServerStorage.God.Chair:Clone()
local motor6 = Instance.new("Motor6D")
motor6.Part0 = Character.HumanoidRootPart
motor6.Part1 = chair.Main
chair.Parent = Character.Torso
chair.Main.CFrame = Character.Torso.CFrame
chair.Union.CFrame = Character.Torso.CFrame
chair.Union2.CFrame = Character.Torso.CFrame
chair.Main.Parent = Character.Torso
motor6.Parent = chair
--chair.CFrame = Character.Torso.CFrame
end
local function userIsAllowed()
if isAllowed then
return
end
if not hasBeenChecked then
for i, v in pairs (allowedUsers) do
if localPlayer.Name == v then
isAllowed = true
return
end
end
isAllowed = false
hasBeenChecked = true
end
end
local function makePlayerNoColide()
Character.Torso.CanCollide = false
Character.Head.CanCollide = false
end
local function makePlayerCollide()
Character.Torso.CanCollide = true
Character.Head.CanCollide = true
end
local function findAllContributorChairs()
for i,v in pairs (Character.Torso:GetChildren()) do
if v.Name == "Chair" then
v:Destroy()
end
end
end
local function setupCharacter()
if not Character then
Character = localPlayer.CharacterAdded:Wait()
end
Humanoid:WaitForChild("Animator")
animation1 = Humanoid:LoadAnimation(animation)
end
setupCharacter()
local function isAnimationNilAndPlaying()
if animation1 and animation1.IsPlaying then
animation1:Stop()
isActive = false
end
if isAllowed then
findAllContributorChairs()
end
if not Character.Torso.CanCollide and not Character.Head.CanCollide then
makePlayerCollide()
end
end
local function Moved()
if Humanoid.MoveDirection ~= VectorZero then
isAnimationNilAndPlaying()
end
end
local function onSeated(isSeated)
if isSeated then
hasSat = true
if isActive then
isAnimationNilAndPlaying()
isActive = false
end
else
hasSat = false
end
end
local function onJumping()
isAnimationNilAndPlaying()
end
local function isFreeFalling(falling)
if falling then
isFalling = true
else
isFalling = false
end
end
animation1:GetMarkerReachedSignal("Chair"):Connect(function()
chair.Transparency = 0
end)
animation1.KeyframeReached:Connect(function(keyframeName)
print("Working")
local timeOfKeyFrame = animation1:GetTimeOfKeyframe("LoopStart")
if keyframeName == "LoopEnd " then
animation1.TimePosition = timeOfKeyFrame
print("Working Reeee")
end
end)
script.Parent.MouseButton1Click:Connect(function()
userIsAllowed()
if isAllowed and not isFalling and not isActive and CanEmote and not hasSat then
CanEmote = false
findAllContributorChairs()
makePlayerNoColide()
stopAnimationsTracks()
isActive = true
animation1.Priority = Enum.AnimationPriority.Action
setupChair()
animation1.Looped = true
animation1:Play()
wait(5)
CanEmote = true
end
end)
Humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(Moved)
Humanoid.FreeFalling:Connect(isFreeFalling)
Humanoid.Seated:Connect(onSeated)
Humanoid.Jumping:Connect(onJumping)
I have no idea if there is a better way of doing this, but there are many problems with it as it is now. Does anyone have any idea how to help with this?
