local H={wave=false;point=false;dance=true;dance2=true,dance3=true;laugh=false,cheer=false}math.randomseed(tick())function findExistingAnimationInSet(H,o)if H==nil or o==nil then return 0 end for M=1,H.count,1 do if H[M].anim.AnimationId==o.AnimationId then return M end end return 0 end function configureAnimationSet(H,o)if animTable[H]~=nil then for H,o in pairs(animTable[H].Connections)do o:Disconnect()end end animTable[H]={}animTable[H].count=0 animTable[H].totalWeight=0 animTable[H].Connections={}local M=true local W,J=pcall(function()M=(game:GetService("\083\116\097\114\116\101\114\080\108\097\121\101\114")).AllowCustomAnimations end)if not W then M=true end local L=script:FindFirstChild(H)if M and L~=nil then table.insert(animTable[H].Connections,L.ChildAdded:Connect(function(M)configureAnimationSet(H,o)end))table.insert(animTable[H].Connections,L.ChildRemoved:Connect(function(M)configureAnimationSet(H,o)end))local M=0 for W,J in pairs(L:GetChildren())do if J:IsA("\065\110\105\109\097\116\105\111\110")then local W=1 local L=J:FindFirstChild("\087\101\105\103\104\116")if L~=nil then W=L.Value end animTable[H].count=animTable[H].count+1 M=animTable[H].count animTable[H][M]={}animTable[H][M].anim=J animTable[H][M].weight=W animTable[H].totalWeight=animTable[H].totalWeight+animTable[H][M].weight table.insert(animTable[H].Connections,J.Changed:Connect(function(M)configureAnimationSet(H,o)end))table.insert(animTable[H].Connections,J.ChildAdded:Connect(function(M)configureAnimationSet(H,o)end))table.insert(animTable[H].Connections,J.ChildRemoved:Connect(function(M)configureAnimationSet(H,o)end))end end end if animTable[H].count<=0 then for o,M in pairs(o)do animTable[H][o]={}animTable[H][o].anim=Instance.new("\065\110\105\109\097\116\105\111\110")animTable[H][o].anim.Name=H animTable[H][o].anim.AnimationId=M.id animTable[H][o].weight=M.weight animTable[H].count=animTable[H].count+1 animTable[H].totalWeight=animTable[H].totalWeight+M.weight end end for H,o in pairs(animTable)do for H=1,o.count,1 do if PreloadedAnims[o[H].anim.AnimationId]==nil then Humanoid:LoadAnimation(o[H].anim)PreloadedAnims[o[H].anim.AnimationId]=true end end end end

local emoteNames = { wave = false, point = false, dance = true, dance2 = true, dance3 = true, laugh = false, cheer = false}

math.randomseed(tick())

function findExistingAnimationInSet(set, anim)
	if set == nil or anim == nil then
		return 0
	end
	
	for idx = 1, set.count, 1 do 
		if set[idx].anim.AnimationId == anim.AnimationId then
			return idx
		end
	end
	
	return 0
end

function configureAnimationSet(name, fileList)
	if (animTable[name] ~= nil) then
		for _, Connection in pairs(animTable[name].Connections) do
			Connection:Disconnect()
		end
	end
	animTable[name] = {}
	animTable[name].count = 0
	animTable[name].totalWeight = 0	
	animTable[name].Connections = {}

	local allowCustomAnimations = true

	local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
	if not success then
		allowCustomAnimations = true
	end

	-- check for config values
	local config = script:FindFirstChild(name)
	if (allowCustomAnimations and config ~= nil) then
		table.insert(animTable[name].Connections, config.ChildAdded:Connect(function(child) configureAnimationSet(name, fileList) end))
		table.insert(animTable[name].Connections, config.ChildRemoved:Connect(function(child) configureAnimationSet(name, fileList) end))
		
		local idx = 0
		for _, childPart in pairs(config:GetChildren()) do
			if (childPart:IsA("Animation")) then
				local newWeight = 1
				local weightObject = childPart:FindFirstChild("Weight")
				if (weightObject ~= nil) then
					newWeight = weightObject.Value
				end
				animTable[name].count = animTable[name].count + 1
				idx = animTable[name].count
				animTable[name][idx] = {}
				animTable[name][idx].anim = childPart
				animTable[name][idx].weight = newWeight
				animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
				table.insert(animTable[name].Connections, childPart.Changed:Connect(function(property) configureAnimationSet(name, fileList) end))
				table.insert(animTable[name].Connections, childPart.ChildAdded:Connect(function(property) configureAnimationSet(name, fileList) end))
				table.insert(animTable[name].Connections, childPart.ChildRemoved:Connect(function(property) configureAnimationSet(name, fileList) end))
			end
		end
	end
	
	-- fallback to defaults
	if (animTable[name].count <= 0) then
		for idx, anim in pairs(fileList) do
			animTable[name][idx] = {}
			animTable[name][idx].anim = Instance.new("Animation")
			animTable[name][idx].anim.Name = name
			animTable[name][idx].anim.AnimationId = anim.id
			animTable[name][idx].weight = anim.weight
			animTable[name].count = animTable[name].count + 1
			animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
		end
	end
	
	-- preload anims
	for i, animType in pairs(animTable) do
		for idx = 1, animType.count, 1 do
			if PreloadedAnims[animType[idx].anim.AnimationId] == nil then
				Humanoid:LoadAnimation(animType[idx].anim)
				PreloadedAnims[animType[idx].anim.AnimationId] = true
			end				
		end
	end
end
