View difference between Paste ID: Nf7Sxrnr and tUbs7PV8
SHOW: | | - or go back to the newest paste.
1
local Players=game:service'Players'
2
local Player=Players.LocalPlayer
3
local Char=Player.Character
4
local parts={};
5
local skipvotes=0
6
local prefix='!'
7
local Width,Height,Gen,Div,Cap=.1,.1,100,70,12
8
local animspd=.75
9
wait(.05)
10
11
function rainb(hue)
12
    local section = hue % 1 * 3
13
    local secondary = 0.5 * math.pi * (section % 1)
14
    if section < 1 then
15
        return Color3.new(1, 1 - math.cos(secondary), 1 - math.sin(secondary))
16
    elseif section < 2 then
17
        return Color3.new(1 - math.sin(secondary), 1, 1 - math.cos(secondary))
18
    else
19
        return Color3.new(1 - math.cos(secondary), 1 - math.sin(secondary), 1)
20
    end
21
end
22
23
pcall(function()
24
	Char.SaVisualizer:Destroy()
25
	Char.HumanoidRootPart.Sound:Destroy()
26
end)
27
28
script.Name = 'SaVisualizer'
29
30
local Modl=Instance.new('Model', script)
31
local HumanoidRootPart=Char:WaitForChild'HumanoidRootPart'
32
local fp=CFrame.new(0,6,0)*CFrame.Angles(-math.rad(5),0,0)
33
local S=Instance.new('Sound',HumanoidRootPart)
34
S.Looped=true
35
S.Volume=1
36
S.EmitterSize=40
37
local lrs=game:service'RunService'.RenderStepped
38
39
--[[
40
local bl=Instance.new('Part')
41
bl.Anchored=true
42
bl.Size=Vector3.new(Width,Height,.2)
43
bl.Material='SmoothPlastic'
44
bl.Color=Color3.new(1,1,1)
45
bl.Transparency=0
46
bl.CanCollide=false
47
bl.Anchored=true
48
bl.CFrame=fp*CFrame.new(0,Height*3,0)
49
local bm=Instance.new('SpecialMesh',bl)
50
bl.MeshType='Sphere'
51
bl.Parent=nil
52
--]]
53
54
local Generated=false
55
local first=true
56
function AddParts(Number)
57
	local up=1
58
	if first then
59
		up=0
60
		first=false
61
	end
62
	local nparts=#parts
63
	Generated=false
64
	for i = 0,math.floor(tonumber(Number)) do
65
		local p=Instance.new('Part')
66
		p.Anchored=true
67
		p.Size=Vector3.new(Width,Height,.2)
68
		p.Material='SmoothPlastic'
69
		p.Color=Color3.new(1,1,1)
70
		p.Transparency=0
71
		p.CanCollide=false
72
		p.Anchored=true
73
		p.CFrame=fp*CFrame.new(0,Height*3,0)
74
		local bm=Instance.new('SpecialMesh',p)
75
		bm.MeshId='rbxasset://fonts/rightarm.mesh'
76
		bm.TextureId='rbxassetid://215418209'
77
		p.Parent=Modl
78
		--warn(nparts+i)
79
		parts[(nparts+up)+i]=p
80
		game.ItemChanged:wait()
81
	end
82
	Generated=true
83
end
84
85
function RmvParts(Number)
86
	if Generated then
87
		local nparts=#parts
88
		warn(nparts)
89
		for i = 0, Number do
90
			local n=nparts-i
91
			local per=parts[n]
92
			parts[n]=nil
93
			per:Destroy()
94
			lrs:wait()
95
		end
96
		warn(#parts)
97
	end
98
end
99
100
function Sound(Id)
101
	skipvotes=0
102
	S:Stop()
103
	S.SoundId='rbxassetid://'..Id
104
	S:Play()
105
end
106
--326631346
107
function OnChat(P, Message)
108
	m=Message:lower()
109
	if m:sub(0,#prefix+3)== prefix..'snd' and P==Player then
110
		local id=tonumber(m:sub(6))
111
		print(id)
112
		local snd=Sound(id)
113
	elseif m:sub(0,#prefix+3)== prefix..'add' and P==Player then
114
		local num=tonumber(m:sub(6))
115
		warn(num)
116
		AddParts(num)
117
	elseif m:sub(0,#prefix+3)== prefix..'rmv' and P==Player then
118
		local num=tonumber(m:sub(6))
119
		warn(num)
120
		RmvParts(num)
121
	elseif m:sub(0,#prefix+3)== prefix..'spd' and P==Player then
122
		local num=tonumber(m:sub(6))
123
		warn(num)
124
		animspd=num or .8
125
	elseif m:sub(0,#prefix+4)== prefix..'stop' and P==Player then
126
		S:Pause()
127
	elseif m:sub(0,#prefix+6)== prefix..'replay' and P==Player then
128
		--S:Stop()
129
		S:Play()
130
	elseif m:sub(0,#prefix+4)== prefix..'play' and P==Player then
131
		S:Resume()
132
	elseif m:sub(0,#prefix+5)== prefix..'vskip' then
133
		skipvotes=skipvotes+1
134
		if skipvotes>= math.floor(Players.NumPlayers/3) then
135
			skipvotes=0
136
			S:Stop()
137
		end
138
	end
139
end
140
141
function Connect(P)
142
	P.Chatted:connect(function(Message)
143
		OnChat(P, Message)
144
	end)
145
end
146
147
function HandleParts(Plb_l,Clr,Spd)
148
	for index, Part in next, parts do
149
		local neg=-(Width*index)+(Width*(#parts/2))
150
		Part.CFrame=Part.CFrame:lerp(CFrame.Angles(0,0,0)*fp*CFrame.new(neg,Height*5,0),.1)
151
		if Generated then
152
			Part.Anchored=true
153
			if index==0 then
154
				Part.Mesh.VertexColor=Part.Mesh.VertexColor:lerp(Vector3.new(Clr.r,Clr.g,Clr.b),.6)
155
				Part.Mesh.Scale=Part.Mesh.Scale:lerp(Vector3.new(Width+.1,.1+Plb_l,.01),Spd/3.5)
156
			elseif index ~= 0 then
157
				spawn(function()
158
					wait(((index/200)*1.1))
159
					--Part.Mesh.VertexColor=parts[index-1].Mesh.VertexColor
160
					Part.Mesh.VertexColor=Part.Mesh.VertexColor:lerp(parts[index-1].Mesh.VertexColor,.6)
161
				end)
162
				Part.Mesh.Scale=Part.Mesh.Scale:lerp(Vector3.new(Width+.1,parts[index-1].Mesh.Scale.Y,.01),Spd)
163
			end
164
		end
165
	end
166
end
167
168
lrs:connect(function()
169
	local Color = rainb(tick()/20)
170
	local Var=S.PlaybackLoudness
171
	--local Spd = .15+((.15*100)/Var)
172
	--warn(Spd,(.85*100)/Var)
173
	--if Spd > .75 then
174
	--	Spd=.7
175
	--end
176
	if not S.IsPlaying or S.SoundId=='rbxassetid://0' then
177
		local mul=200
178
		Var=(mul-.1)+math.sin(tick()*2)*mul
179
		--print(Var)
180
	end
181
	HandleParts(Var/Div,Color,animspd)
182
end)
183
184
Players.PlayerAdded:connect(function(P)
185
	Connect(P)
186
end)
187
188
for Index, P in next, Players:GetPlayers() do
189
	Connect(P)
190
end
191-
--485859421
191+
--154432290
192
AddParts(Gen)
193-
Sound(326087110)--265675215//337053183//244769293
193+
Sound(154432290)--154432290//154432290//154432290