local P={wave=false;point=false;dance=true,dance2=true;dance3=true,laugh=false;cheer=false}local l=false local L={}local y,d=pcall(function()l=(UserSettings()):IsUserFeatureEnabled("\085\115\101\114\080\114\101\108\111\097\100\065\110\105\109\097\116\105\111\110\115")end)if not y then l=false end math.randomseed(tick())function findExistingAnimationInSet(P,l)if P==nil or l==nil then return 0 end for L=1,P.count,1 do if P[L].anim.AnimationId==l.AnimationId then return L end end return 0 end function configureAnimationSet(P,y)if animTable[P]~=nil then for P,l in pairs(animTable[P].connections)do l:disconnect()end end animTable[P]={}animTable[P].count=0 animTable[P].totalWeight=0 animTable[P].connections={}local d=true local c=false local X,H=pcall(function()c=(UserSettings()):IsUserFeatureEnabled("\085\115\101\114\065\108\108\111\119\068\105\115\097\098\108\101\067\117\115\116\111\109\065\110\105\109\115\050")end)if c then local P,l=pcall(function()d=(game:GetService("\083\116\097\114\116\101\114\080\108\097\121\101\114")).AllowCustomAnimations end)if not P then d=true end end local k=script:FindFirstChild(P)if d and k~=nil then table.insert(animTable[P].connections,k.ChildAdded:connect(function(l)configureAnimationSet(P,y)end))table.insert(animTable[P].connections,k.ChildRemoved:connect(function(l)configureAnimationSet(P,y)end))local l=0 for L,d in pairs(k:GetChildren())do if d:IsA("\065\110\105\109\097\116\105\111\110")then local L=1 local c=d:FindFirstChild("\087\101\105\103\104\116")if c~=nil then L=c.Value end animTable[P].count=animTable[P].count+1 l=animTable[P].count animTable[P][l]={}animTable[P][l].anim=d animTable[P][l].weight=L animTable[P].totalWeight=animTable[P].totalWeight+animTable[P][l].weight table.insert(animTable[P].connections,d.Changed:connect(function(l)configureAnimationSet(P,y)end))table.insert(animTable[P].connections,d.ChildAdded:connect(function(l)configureAnimationSet(P,y)end))table.insert(animTable[P].connections,d.ChildRemoved:connect(function(l)configureAnimationSet(P,y)end))end end end if animTable[P].count<=0 then for l,L in pairs(y)do animTable[P][l]={}animTable[P][l].anim=Instance.new("\065\110\105\109\097\116\105\111\110")animTable[P][l].anim.Name=P animTable[P][l].anim.AnimationId=L.id animTable[P][l].weight=L.weight animTable[P].count=animTable[P].count+1 animTable[P].totalWeight=animTable[P].totalWeight+L.weight end end if l then for P,l in pairs(animTable)do for P=1,l.count,1 do if L[l[P].anim.AnimationId]==nil then Humanoid:LoadAnimation(l[P].anim)L[l[P].anim.AnimationId]=true end end end end end

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

local PreloadAnimsUserFlag = false
local PreloadedAnims = {}
local successPreloadAnim, msgPreloadAnim = pcall(function()
	PreloadAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserPreloadAnimations")
end)
if not successPreloadAnim then
	PreloadAnimsUserFlag = false
end

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 AllowDisableCustomAnimsUserFlag = false

	local success, msg = pcall(function()
		AllowDisableCustomAnimsUserFlag = UserSettings():IsUserFeatureEnabled("UserAllowDisableCustomAnims2")
	end)

	if AllowDisableCustomAnimsUserFlag then
		local success, msg = pcall(function() allowCustomAnimations = game:GetService("StarterPlayer").AllowCustomAnimations end)
		if not success then
			allowCustomAnimations = true
		end
	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
	if PreloadAnimsUserFlag then
		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
end
