local StarterGui = game:GetService("StarterGui")
StarterGui:SetCoreGuiEnabled("Backpack", false)
--Services
local UIS = game:GetService("UserInputService")
local Replicated = game:GetService("ReplicatedStorage")
local RunServ = game:GetService("RunService")
--Hierarchy
local Assets = Replicated:WaitForChild("Assets")
local Arms = Assets:WaitForChild("Arms")
local Anims = Assets:WaitForChild("Animations")
local Events = Assets:WaitForChild("Events")
local Weapons = Assets:WaitForChild("Weapons")
local Modules = Assets:WaitForChild("Modules")
local WeaponData = require(Modules:FindFirstChild("WeaponData"))
--Variables
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local cam = workspace.CurrentCamera
local RawUnpack = unpack
local weaponAnimPlaying
--Tables
local toRemove = {"LeftArm", "RightArm", "LeftSleeve", "RightSleeve"}
local clientloadedAnimations, serverloadedAnimations = {}, {}
local weaponGuide = {"Primary", "Secondary", "Tactical"}
player.CameraMaxZoomDistance = 10
player.CameraMinZoomDistance = 10
--Functions
local function Weld(base, part) --(BasePart, Part)
local w = Instance.new("Motor6D", base)
w.C1 = part.CFrame:toObjectSpace(base.CFrame)
w.Part0 = base
w.Part1 = part
return w
end
local function EquipArms()
if player.Character and player.Character:FindFirstChild("Humanoid") then
for i,v in pairs(toRemove) do
if player.Character:FindFirstChild(v) then
player.Character[v].Transparency = 1
end
end
local clonedArms = Arms.ViewModelArms:Clone()
clonedArms.Name = "ViewModelArms"
clonedArms.Parent = cam
clonedArms.HumanoidRootPart.CFrame = player.Character.HumanoidRootPart.CFrame
local w = Weld(player.Character.HumanoidRootPart, clonedArms.HumanoidRootPart)
w.Name = "RootMotor"
end
end
local function GetAnimation(anim, tbl)
for i,v in pairs(tbl) do
if i == anim then
return v
end
end
end
local function PlayAnimation(anim)
GetAnimation(anim, serverloadedAnimations):Play()
GetAnimation(anim, clientloadedAnimations):Play()
end
local function LoadAnimations(tbl)
if player.Character and player.Character:FindFirstChild("Humanoid") and player.Character:FindFirstChild("Humanoid") ~= nil then
for i,v in pairs(Anims:GetChildren()) do
for x,d in pairs(v:GetChildren()) do
if tbl == clientloadedAnimations then
clientloadedAnimations[d] = cam:WaitForChild("ViewModelArms"):WaitForChild("AnimationController"):LoadAnimation(d) --ViewModelArms
elseif tbl == serverloadedAnimations then
serverloadedAnimations[d] = player.Character:WaitForChild("Humanoid"):LoadAnimation(d) --RealArms
end
end
end
end
end
local function EquipGun(target, data)
if weaponAnimPlaying ~= nil then
GetAnimation(weaponAnimPlaying, clientloadedAnimations):Stop()
GetAnimation(weaponAnimPlaying, serverloadedAnimations):Stop()
end
for i,v in pairs(cam["ViewModelArms"]:GetChildren()) do
if Weapons:FindFirstChild(v.Name) then
v:Destroy()
end
end
local gunName, gunSkin = player["Data"]["Equipped"].Value, player["Data"]["Equipped"]["Skin"].Value
if gunName ~= nil and gunName ~= "" then
local gunModel = Weapons:FindFirstChild(gunName)
if gunModel and gunModel ~= nil then
local clonedGun = gunModel:Clone()
clonedGun.PrimaryPart.CFrame = cam["ViewModelArms"].RightArm.CFrame*CFrame.new(WeaponData.Hold[gunName][1])*WeaponData.Hold[gunName][2]
Weld(cam["ViewModelArms"].RightArm, clonedGun.PrimaryPart)
clonedGun.Parent = cam.ViewModelArms
PlayAnimation(Anims[gunName].Hold) --this is where the animation is played at
weaponAnimPlaying = Anims[gunName].Hold
end
end
end
--Events
Events.EquipLoadout.OnClientEvent:connect(function(target, ...)
EquipArms()
clientloadedAnimations = {}
LoadAnimations(clientloadedAnimations)--weaponAnimPlaying
EquipGun(target, ...)
end)
--Other
repeat wait() until player and player.Character
LoadAnimations(serverloadedAnimations)
That code is in a localscript in StarterGui.
When I equip a gun I want a 'Hold' animation to play to a set of ViewModelArms (has an AnimationController in it) and the player's character's Humanoid. When I run the script and print some things, it says the animation in fact IS playing in both the Humanoid and AnimationController, yet I only see it visually playing in 1 of them. How is this come and how can I make it play to both? Thanks for help!
