SHOW:
|
|
- or go back to the newest paste.
1 | if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end | |
2 | local Player,Mouse,mouse,UserInputService,ContextActionService = owner | |
3 | do | |
4 | print("FE Compatibility code by Mokiros") | |
5 | script.Parent = Player.Character | |
6 | ||
7 | --RemoteEvent for communicating | |
8 | local Event = Instance.new("RemoteEvent") | |
9 | Event.Name = "UserInput_Event" | |
10 | ||
11 | --Fake event to make stuff like Mouse.KeyDown work | |
12 | local function fakeEvent() | |
13 | local t = {_fakeEvent=true,Connect=function(self,f)self.Function=f end} | |
14 | t.connect = t.Connect | |
15 | return t | |
16 | end | |
17 | ||
18 | --Creating fake input objects with fake variables | |
19 | local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()} | |
20 | local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()} | |
21 | local CAS = {Actions={},BindAction=function(self,name,fun,touch,...) | |
22 | CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil | |
23 | end} | |
24 | --Merged 2 functions into one by checking amount of arguments | |
25 | CAS.UnbindAction = CAS.BindAction | |
26 | ||
27 | --This function will trigger the events that have been :Connect()'ed | |
28 | local function te(self,ev,...) | |
29 | local t = m[ev] | |
30 | if t and t._fakeEvent and t.Function then | |
31 | t.Function(...) | |
32 | end | |
33 | end | |
34 | m.TrigEvent = te | |
35 | UIS.TrigEvent = te | |
36 | ||
37 | Event.OnServerEvent:Connect(function(plr,io) | |
38 | if plr~=Player then return end | |
39 | if io.isMouse then | |
40 | m.Target = io.Target | |
41 | m.Hit = io.Hit | |
42 | else | |
43 | local b = io.UserInputState == Enum.UserInputState.Begin | |
44 | if io.UserInputType == Enum.UserInputType.MouseButton1 then | |
45 | return m:TrigEvent(b and "Button1Down" or "Button1Up") | |
46 | end | |
47 | for _,t in pairs(CAS.Actions) do | |
48 | for _,k in pairs(t.Keys) do | |
49 | if k==io.KeyCode then | |
50 | t.Function(t.Name,io.UserInputState,io) | |
51 | end | |
52 | end | |
53 | end | |
54 | m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower()) | |
55 | UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false) | |
56 | end | |
57 | end) | |
58 | Event.Parent = NLS([==[ | |
59 | local Player = owner | |
60 | local Event = script:WaitForChild("UserInput_Event") | |
61 | ||
62 | local UIS = game:GetService("UserInputService") | |
63 | local input = function(io,a) | |
64 | if a then return end | |
65 | --Since InputObject is a client-side instance, we create and pass table instead | |
66 | Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState}) | |
67 | end | |
68 | UIS.InputBegan:Connect(input) | |
69 | UIS.InputEnded:Connect(input) | |
70 | ||
71 | local Mouse = Player:GetMouse() | |
72 | local h,t | |
73 | --Give the server mouse data 30 times every second, but only if the values changed | |
74 | --If player is not moving their mouse, client won't fire events | |
75 | while wait(1/30) do | |
76 | if h~=Mouse.Hit or t~=Mouse.Target then | |
77 | h,t=Mouse.Hit,Mouse.Target | |
78 | Event:FireServer({isMouse=true,Target=t,Hit=h}) | |
79 | end | |
80 | end]==],Player.Character) | |
81 | Mouse,mouse,UserInputService,ContextActionService = m,m,UIS,CAS | |
82 | end | |
83 | ||
84 | ||
85 | --Converted with ttyyuu12345's model to script plugin v4 | |
86 | function sandbox(var,func) | |
87 | local env = getfenv(func) | |
88 | local newenv = setmetatable({},{ | |
89 | __index = function(self,k) | |
90 | if k=="script" then | |
91 | return var | |
92 | else | |
93 | return env[k] | |
94 | end | |
95 | end, | |
96 | }) | |
97 | setfenv(func,newenv) | |
98 | return func | |
99 | end | |
100 | print("e - kill-teleport, q - oii hate skids") | |
101 | function swait(num) | |
102 | if num == 0 or num == nil then | |
103 | game:service("RunService").Stepped:wait(0) | |
104 | else | |
105 | for i = 0, num do | |
106 | game:service("RunService").Stepped:wait(0) | |
107 | end | |
108 | end | |
109 | end | |
110 | EffectModel = Instance.new("Model", cha) | |
111 | Effects = { | |
112 | Block = { | |
113 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay, Type) | |
114 | local prt = CFuncs.Part.Create(EffectModel, "SmoothPlastic", 0, 0, brickcolor, "Effect", Vector3.new()) | |
115 | prt.Anchored = true | |
116 | prt.CFrame = cframe | |
117 | local msh = CFuncs.Mesh.Create("BlockMesh", prt, "", "", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
118 | game:GetService("Debris"):AddItem(prt, 10) | |
119 | if Type == 1 or Type == nil then | |
120 | table.insert(Effects, { | |
121 | prt, | |
122 | "Block1", | |
123 | delay, | |
124 | x3, | |
125 | y3, | |
126 | z3, | |
127 | msh | |
128 | }) | |
129 | elseif Type == 2 then | |
130 | table.insert(Effects, { | |
131 | prt, | |
132 | "Block2", | |
133 | delay, | |
134 | x3, | |
135 | y3, | |
136 | z3, | |
137 | msh | |
138 | }) | |
139 | else | |
140 | table.insert(Effects, { | |
141 | prt, | |
142 | "Block3", | |
143 | delay, | |
144 | x3, | |
145 | y3, | |
146 | z3, | |
147 | msh | |
148 | }) | |
149 | end | |
150 | end | |
151 | }, | |
152 | Sphere = { | |
153 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
154 | local prt = CFuncs.Part.Create(EffectModel, "Neon", 0, 0, brickcolor, "Effect", Vector3.new()) | |
155 | prt.Anchored = true | |
156 | prt.CFrame = cframe | |
157 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "Sphere", "", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
158 | game:GetService("Debris"):AddItem(prt, 10) | |
159 | table.insert(Effects, { | |
160 | prt, | |
161 | "Cylinder", | |
162 | delay, | |
163 | x3, | |
164 | y3, | |
165 | z3, | |
166 | msh | |
167 | }) | |
168 | end | |
169 | }, | |
170 | Cylinder = { | |
171 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
172 | local prt = CFuncs.Part.Create(EffectModel, "SmoothPlastic", 0, 0, brickcolor, "Effect", Vector3.new()) | |
173 | prt.Anchored = true | |
174 | prt.CFrame = cframe | |
175 | local msh = CFuncs.Mesh.Create("CylinderMesh", prt, "", "", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
176 | game:GetService("Debris"):AddItem(prt, 10) | |
177 | table.insert(Effects, { | |
178 | prt, | |
179 | "Cylinder", | |
180 | delay, | |
181 | x3, | |
182 | y3, | |
183 | z3, | |
184 | msh | |
185 | }) | |
186 | end | |
187 | }, | |
188 | Wave = { | |
189 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
190 | local prt = CFuncs.Part.Create(EffectModel, "Neon", 0, 0, brickcolor, "Effect", Vector3.new()) | |
191 | prt.Anchored = true | |
192 | prt.CFrame = cframe | |
193 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "FileMesh", "rbxassetid://0", Vector3.new(0, 0, 0), Vector3.new(x1 / 60, y1 / 60, z1 / 60)) | |
194 | Cso("158037267", tors, 10, 1) | |
195 | wait(0,35) | |
196 | game:GetService("Debris"):AddItem(prt, 10) | |
197 | table.insert(Effects, { | |
198 | prt, | |
199 | "Cylinder", | |
200 | delay, | |
201 | x3 / 60, | |
202 | y3 / 60, | |
203 | z3 / 60, | |
204 | msh | |
205 | }) | |
206 | end | |
207 | }, | |
208 | Ring = { | |
209 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
210 | local prt = CFuncs.Part.Create(EffectModel, "SmoothPlastic", 0, 0, brickcolor, "Effect", Vector3.new()) | |
211 | prt.Anchored = true | |
212 | prt.CFrame = cframe | |
213 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "FileMesh", "rbxassetid://3270017", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
214 | game:GetService("Debris"):AddItem(prt, 10) | |
215 | table.insert(Effects, { | |
216 | prt, | |
217 | "Cylinder", | |
218 | delay, | |
219 | x3, | |
220 | y3, | |
221 | z3, | |
222 | msh | |
223 | }) | |
224 | end | |
225 | }, | |
226 | Break = { | |
227 | Create = function(brickcolor, cframe, x1, y1, z1) | |
228 | local prt = CFuncs.Part.Create(EffectModel, "Neon", 0, 0, brickcolor, "Effect", Vector3.new(0.5, 0.5, 0.5)) | |
229 | prt.Anchored = true | |
230 | prt.CFrame = cframe * CFrame.fromEulerAnglesXYZ(math.random(-50, 50), math.random(-50, 50), math.random(-50, 50)) | |
231 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "Sphere", "", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
232 | local num = math.random(10, 50) / 1000 | |
233 | game:GetService("Debris"):AddItem(prt, 10) | |
234 | table.insert(Effects, { | |
235 | prt, | |
236 | "Shatter", | |
237 | num, | |
238 | prt.CFrame, | |
239 | math.random() - math.random(), | |
240 | 0, | |
241 | math.random(50, 100) / 100 | |
242 | }) | |
243 | end | |
244 | }, | |
245 | Spiral = { | |
246 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
247 | local prt = CFuncs.Part.Create(EffectModel, "SmoothPlastic", 0, 0, brickcolor, "Effect", Vector3.new()) | |
248 | prt.Anchored = true | |
249 | prt.CFrame = cframe | |
250 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "FileMesh", "rbxassetid://1051557", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
251 | game:GetService("Debris"):AddItem(prt, 10) | |
252 | table.insert(Effects, { | |
253 | prt, | |
254 | "Cylinder", | |
255 | delay, | |
256 | x3, | |
257 | y3, | |
258 | z3, | |
259 | msh | |
260 | }) | |
261 | end | |
262 | }, | |
263 | Push = { | |
264 | Create = function(brickcolor, cframe, x1, y1, z1, x3, y3, z3, delay) | |
265 | local prt = CFuncs.Part.Create(EffectModel, "SmoothPlastic", 0, 0, brickcolor, "Effect", Vector3.new()) | |
266 | prt.Anchored = true | |
267 | prt.CFrame = cframe | |
268 | local msh = CFuncs.Mesh.Create("SpecialMesh", prt, "FileMesh", "rbxassetid://437347603", Vector3.new(0, 0, 0), Vector3.new(x1, y1, z1)) | |
269 | game:GetService("Debris"):AddItem(prt, 10) | |
270 | table.insert(Effects, { | |
271 | prt, | |
272 | "Cylinder", | |
273 | delay, | |
274 | x3, | |
275 | y3, | |
276 | z3, | |
277 | msh | |
278 | }) | |
279 | end | |
280 | } | |
281 | } | |
282 | CFuncs = { | |
283 | Part = { | |
284 | Create = function(Parent, Material, Reflectance, Transparency, BColor, Name, Size) | |
285 | local Part = Create("Part")({ | |
286 | Parent = Parent, | |
287 | Reflectance = Reflectance, | |
288 | Transparency = Transparency, | |
289 | CanCollide = false, | |
290 | Locked = true, | |
291 | BrickColor = BrickColor.new(tostring(BColor)), | |
292 | Name = Name, | |
293 | Size = Size, | |
294 | Material = Material | |
295 | }) | |
296 | RemoveOutlines(Part) | |
297 | return Part | |
298 | end | |
299 | }, | |
300 | Mesh = { | |
301 | Create = function(Mesh, Part, MeshType, MeshId, OffSet, Scale) | |
302 | local Msh = Create(Mesh)({ | |
303 | Parent = Part, | |
304 | Offset = OffSet, | |
305 | Scale = Scale | |
306 | }) | |
307 | if Mesh == "SpecialMesh" then | |
308 | Msh.MeshType = MeshType | |
309 | Msh.MeshId = MeshId | |
310 | end | |
311 | return Msh | |
312 | end | |
313 | }, | |
314 | Mesh = { | |
315 | Create = function(Mesh, Part, MeshType, MeshId, OffSet, Scale) | |
316 | local Msh = Create(Mesh)({ | |
317 | Parent = Part, | |
318 | Offset = OffSet, | |
319 | Scale = Scale | |
320 | }) | |
321 | if Mesh == "SpecialMesh" then | |
322 | Msh.MeshType = MeshType | |
323 | Msh.MeshId = MeshId | |
324 | end | |
325 | return Msh | |
326 | end | |
327 | }, | |
328 | Weld = { | |
329 | Create = function(Parent, Part0, Part1, C0, C1) | |
330 | local Weld = Create("Weld")({ | |
331 | Parent = Parent, | |
332 | Part0 = Part0, | |
333 | Part1 = Part1, | |
334 | C0 = C0, | |
335 | C1 = C1 | |
336 | }) | |
337 | return Weld | |
338 | end | |
339 | }, | |
340 | Sound = { | |
341 | Create = function(id, par, vol, pit) | |
342 | coroutine.resume(coroutine.create(function() | |
343 | local S = Create("Sound")({ | |
344 | Volume = vol, | |
345 | Pitch = pit or 1, | |
346 | SoundId = id, | |
347 | Parent = par or workspace | |
348 | }) | |
349 | wait() | |
350 | S:play() | |
351 | game:GetService("Debris"):AddItem(S, 6) | |
352 | end)) | |
353 | end | |
354 | }, | |
355 | ParticleEmitter = { | |
356 | Create = function(Parent, Color1, Color2, LightEmission, Size, Texture, Transparency, ZOffset, Accel, Drag, LockedToPart, VelocityInheritance, EmissionDirection, Enabled, LifeTime, Rate, Rotation, RotSpeed, Speed, VelocitySpread) | |
357 | local fp = Create("ParticleEmitter")({ | |
358 | Parent = Parent, | |
359 | Color = ColorSequence.new(Color1, Color2), | |
360 | LightEmission = LightEmission, | |
361 | Size = Size, | |
362 | Texture = Texture, | |
363 | Transparency = Transparency, | |
364 | ZOffset = ZOffset, | |
365 | Acceleration = Accel, | |
366 | Drag = Drag, | |
367 | LockedToPart = LockedToPart, | |
368 | VelocityInheritance = VelocityInheritance, | |
369 | EmissionDirection = EmissionDirection, | |
370 | Enabled = Enabled, | |
371 | Lifetime = LifeTime, | |
372 | Rate = Rate, | |
373 | Rotation = Rotation, | |
374 | RotSpeed = RotSpeed, | |
375 | Speed = Speed, | |
376 | VelocitySpread = VelocitySpread | |
377 | }) | |
378 | return fp | |
379 | end | |
380 | } | |
381 | } | |
382 | function Cso(ID, PARENT, VOLUME, PITCH) | |
383 | local NSound = nil | |
384 | coroutine.resume(coroutine.create(function() | |
385 | NSound = IT("Sound", PARENT) | |
386 | NSound.Volume = VOLUME | |
387 | NSound.Pitch = PITCH | |
388 | NSound.SoundId = "http://www.roblox.com/asset/?id="..ID | |
389 | swait() | |
390 | NSound:play() | |
391 | game:GetService("Debris"):AddItem(NSound, 50) | |
392 | end)) | |
393 | return NSound | |
394 | end | |
395 | function chafunc(text, color) | |
396 | local char = owner.Character | |
397 | local chat = coroutine.wrap(function() | |
398 | if char:FindFirstChild("TalkingBillBoard") ~= nil then | |
399 | char:FindFirstChild("TalkingBillBoard"):destroy() | |
400 | end | |
401 | local naeeym2 = Instance.new("BillboardGui", char) | |
402 | naeeym2.Size = UDim2.new(0, 100, 0, 40) | |
403 | naeeym2.StudsOffset = Vector3.new(0, 3, 0) | |
404 | naeeym2.Adornee = hed | |
405 | naeeym2.Name = "TalkingBillBoard" | |
406 | local tecks2 = Instance.new("TextLabel", naeeym2) | |
407 | tecks2.BackgroundTransparency = 1 | |
408 | tecks2.BorderSizePixel = 0 | |
409 | tecks2.Text = "" | |
410 | tecks2.Font = "Fantasy" | |
411 | tecks2.TextSize = 30 | |
412 | tecks2.TextStrokeTransparency = 0 | |
413 | tecks2.TextColor3 = color | |
414 | tecks2.TextStrokeColor3 = Color3.new(232, 186, 200) | |
415 | tecks2.Size = UDim2.new(1, 0, 0.5, 0) | |
416 | local tecks3 = Instance.new("TextLabel", naeeym2) | |
417 | tecks3.BackgroundTransparency = 1 | |
418 | tecks3.BorderSizePixel = 0 | |
419 | tecks3.Text = "" | |
420 | tecks3.Font = "Fantasy" | |
421 | tecks3.TextSize = 30 | |
422 | tecks3.TextStrokeTransparency = 0 | |
423 | tecks3.TextColor3 = Color3.new(0, 0, 0) | |
424 | tecks3.TextStrokeColor3 = color | |
425 | tecks3.Size = UDim2.new(1, 0, 0.5, 0) | |
426 | coroutine.resume(coroutine.create(function() | |
427 | while true do | |
428 | swait(1) | |
429 | tecks2.Position = UDim2.new(0, math.random(-5, 5), 0, math.random(-5, 5)) | |
430 | tecks3.Position = UDim2.new(0, math.random(-5, 5), 0, math.random(-5, 5)) | |
431 | tecks2.Rotation = math.random(-5, 5) | |
432 | tecks3.Rotation = math.random(-5, 5) | |
433 | end | |
434 | end)) | |
435 | for i = 1, string.len(text) do | |
436 | tecks2.Text = string.sub(text, 1, i) | |
437 | tecks3.Text = string.sub(text, 1, i) | |
438 | swait(1) | |
439 | end | |
440 | wait(1) | |
441 | local randomrot = math.random(1, 2) | |
442 | if randomrot == 1 then | |
443 | for i = 1, 50 do | |
444 | swait() | |
445 | tecks2.Rotation = tecks2.Rotation - 0.75 | |
446 | tecks2.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
447 | tecks2.TextTransparency = tecks2.TextTransparency + 0.04 | |
448 | tecks3.Rotation = tecks2.Rotation + 0.75 | |
449 | tecks3.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
450 | tecks3.TextTransparency = tecks2.TextTransparency + 0.04 | |
451 | end | |
452 | elseif randomrot == 2 then | |
453 | for i = 1, 50 do | |
454 | swait() | |
455 | tecks2.Rotation = tecks2.Rotation + 0.75 | |
456 | tecks2.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
457 | tecks2.TextTransparency = tecks2.TextTransparency + 0.04 | |
458 | tecks3.Rotation = tecks2.Rotation - 0.75 | |
459 | tecks3.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
460 | tecks3.TextTransparency = tecks2.TextTransparency + 0.04 | |
461 | end | |
462 | end | |
463 | naeeym2:Destroy() | |
464 | end) | |
465 | chat() | |
466 | end | |
467 | ||
468 | cors = {} | |
469 | mas = Instance.new("Model",game:GetService("Lighting")) | |
470 | Model0 = Instance.new("Model") | |
471 | Part1 = Instance.new("Part") | |
472 | Decal2 = Instance.new("Decal") | |
473 | Sound3 = Instance.new("Sound") | |
474 | Sound4 = Instance.new("Sound") | |
475 | Sound5 = Instance.new("Sound") | |
476 | Sound6 = Instance.new("Sound") | |
477 | Sound7 = Instance.new("Sound") | |
478 | Sound8 = Instance.new("Sound") | |
479 | Sound9 = Instance.new("Sound") | |
480 | Sound10 = Instance.new("Sound") | |
481 | Sound11 = Instance.new("Sound") | |
482 | CylinderMesh12 = Instance.new("CylinderMesh") | |
483 | Part13 = Instance.new("Part") | |
484 | Decal14 = Instance.new("Decal") | |
485 | Motor6D15 = Instance.new("Motor6D") | |
486 | Motor6D16 = Instance.new("Motor6D") | |
487 | Motor6D17 = Instance.new("Motor6D") | |
488 | Motor6D18 = Instance.new("Motor6D") | |
489 | Motor6D19 = Instance.new("Motor6D") | |
490 | Part20 = Instance.new("Part") | |
491 | Part21 = Instance.new("Part") | |
492 | Part22 = Instance.new("Part") | |
493 | Part23 = Instance.new("Part") | |
494 | Humanoid24 = Instance.new("Humanoid") | |
495 | Part25 = Instance.new("Part") | |
496 | Motor6D26 = Instance.new("Motor6D") | |
497 | Script27 = Instance.new("Script") | |
498 | LocalScript28 = Instance.new("LocalScript") | |
499 | LocalScript29 = Instance.new("LocalScript") | |
500 | StringValue30 = Instance.new("StringValue") | |
501 | Animation31 = Instance.new("Animation") | |
502 | NumberValue32 = Instance.new("NumberValue") | |
503 | Animation33 = Instance.new("Animation") | |
504 | NumberValue34 = Instance.new("NumberValue") | |
505 | StringValue35 = Instance.new("StringValue") | |
506 | Animation36 = Instance.new("Animation") | |
507 | StringValue37 = Instance.new("StringValue") | |
508 | Animation38 = Instance.new("Animation") | |
509 | StringValue39 = Instance.new("StringValue") | |
510 | Animation40 = Instance.new("Animation") | |
511 | StringValue41 = Instance.new("StringValue") | |
512 | Animation42 = Instance.new("Animation") | |
513 | StringValue43 = Instance.new("StringValue") | |
514 | Animation44 = Instance.new("Animation") | |
515 | StringValue45 = Instance.new("StringValue") | |
516 | Animation46 = Instance.new("Animation") | |
517 | StringValue47 = Instance.new("StringValue") | |
518 | Animation48 = Instance.new("Animation") | |
519 | Script49 = Instance.new("Script") | |
520 | BodyColors50 = Instance.new("BodyColors") | |
521 | Model0.Name = "oii" | |
522 | Model0.Parent = mas | |
523 | Part1.Name = "Head" | |
524 | Part1.Parent = Model0 | |
525 | Part1.CFrame = CFrame.new(13.7936363, 4.50001431, -22.1235237, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
526 | Part1.Orientation = Vector3.new(0, -6.40999985, 0) | |
527 | Part1.Position = Vector3.new(13.7936363, 4.50001431, -22.1235237) | |
528 | Part1.Rotation = Vector3.new(0, -6.40999985, 0) | |
529 | Part1.Color = Color3.new(0.803922, 0, 0) | |
530 | Part1.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
531 | Part1.Size = Vector3.new(2, 1, 1) | |
532 | Part1.BrickColor = BrickColor.new("Really red") | |
533 | Part1.Locked = true | |
534 | Part1.TopSurface = Enum.SurfaceType.Smooth | |
535 | Part1.brickColor = BrickColor.new("Really red") | |
536 | Part1.FormFactor = Enum.FormFactor.Symmetric | |
537 | Part1.formFactor = Enum.FormFactor.Symmetric | |
538 | Decal2.Name = "face" | |
539 | Decal2.Parent = Part1 | |
540 | Decal2.Texture = "rbxasset://textures/face.png" | |
541 | Sound3.Name = "GettingUp" | |
542 | Sound3.Parent = Part1 | |
543 | Sound3.MaxDistance = 150 | |
544 | Sound3.EmitterSize = 5 | |
545 | Sound3.MinDistance = 5 | |
546 | Sound3.SoundId = "rbxasset://sounds/action_get_up.mp3" | |
547 | Sound3.Volume = 0.64999997615814 | |
548 | Sound4.Name = "Died" | |
549 | Sound4.Parent = Part1 | |
550 | Sound4.MaxDistance = 150 | |
551 | Sound4.EmitterSize = 5 | |
552 | Sound4.MinDistance = 5 | |
553 | Sound4.SoundId = "rbxasset://sounds/uuhhh.mp3" | |
554 | Sound4.Volume = 0.64999997615814 | |
555 | Sound5.Name = "FreeFalling" | |
556 | Sound5.Parent = Part1 | |
557 | Sound5.Looped = true | |
558 | Sound5.TimePosition = 0.52838909903676 | |
559 | Sound5.MaxDistance = 150 | |
560 | Sound5.EmitterSize = 5 | |
561 | Sound5.MinDistance = 5 | |
562 | Sound5.SoundId = "rbxasset://sounds/action_falling.mp3" | |
563 | Sound5.Volume = 0 | |
564 | Sound6.Name = "Jumping" | |
565 | Sound6.Parent = Part1 | |
566 | Sound6.MaxDistance = 150 | |
567 | Sound6.EmitterSize = 5 | |
568 | Sound6.MinDistance = 5 | |
569 | Sound6.SoundId = "rbxasset://sounds/action_jump.mp3" | |
570 | Sound6.Volume = 0.64999997615814 | |
571 | Sound7.Name = "Landing" | |
572 | Sound7.Parent = Part1 | |
573 | Sound7.MaxDistance = 150 | |
574 | Sound7.EmitterSize = 5 | |
575 | Sound7.MinDistance = 5 | |
576 | Sound7.SoundId = "rbxasset://sounds/action_jump_land.mp3" | |
577 | Sound7.Volume = 1 | |
578 | Sound8.Name = "Splash" | |
579 | Sound8.Parent = Part1 | |
580 | Sound8.MaxDistance = 150 | |
581 | Sound8.EmitterSize = 5 | |
582 | Sound8.MinDistance = 5 | |
583 | Sound8.SoundId = "rbxasset://sounds/impact_water.mp3" | |
584 | Sound8.Volume = 0.64999997615814 | |
585 | Sound9.Name = "Running" | |
586 | Sound9.Parent = Part1 | |
587 | Sound9.Looped = true | |
588 | Sound9.TimePosition = 1.7229757305085 | |
589 | Sound9.MaxDistance = 150 | |
590 | Sound9.EmitterSize = 5 | |
591 | Sound9.MinDistance = 5 | |
592 | Sound9.Pitch = 1.8500000238419 | |
593 | Sound9.PlaybackSpeed = 1.8500000238419 | |
594 | Sound9.SoundId = "rbxasset://sounds/action_footsteps_plastic.mp3" | |
595 | Sound9.Volume = 0.64999997615814 | |
596 | Sound10.Name = "Swimming" | |
597 | Sound10.Parent = Part1 | |
598 | Sound10.Looped = true | |
599 | Sound10.MaxDistance = 150 | |
600 | Sound10.EmitterSize = 5 | |
601 | Sound10.MinDistance = 5 | |
602 | Sound10.Pitch = 1.6000000238419 | |
603 | Sound10.PlaybackSpeed = 1.6000000238419 | |
604 | Sound10.SoundId = "rbxasset://sounds/action_swim.mp3" | |
605 | Sound10.Volume = 0.64999997615814 | |
606 | Sound11.Name = "Climbing" | |
607 | Sound11.Parent = Part1 | |
608 | Sound11.Looped = true | |
609 | Sound11.MaxDistance = 150 | |
610 | Sound11.EmitterSize = 5 | |
611 | Sound11.MinDistance = 5 | |
612 | Sound11.SoundId = "rbxasset://sounds/action_footsteps_plastic.mp3" | |
613 | Sound11.Volume = 0.64999997615814 | |
614 | CylinderMesh12.Parent = Part1 | |
615 | CylinderMesh12.Scale = Vector3.new(1.29999995, 1.29999995, 1.29999995) | |
616 | Part13.Name = "Torso" | |
617 | Part13.Parent = Model0 | |
618 | Part13.CFrame = CFrame.new(13.7936363, 3.00001407, -22.1235237, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
619 | Part13.Orientation = Vector3.new(0, -6.40999985, 0) | |
620 | Part13.Position = Vector3.new(13.7936363, 3.00001407, -22.1235237) | |
621 | Part13.Rotation = Vector3.new(0, -6.40999985, 0) | |
622 | Part13.Color = Color3.new(1, 1, 0) | |
623 | Part13.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
624 | Part13.Size = Vector3.new(2, 2, 1) | |
625 | Part13.BrickColor = BrickColor.new("New Yeller") | |
626 | Part13.LeftParamA = 0 | |
627 | Part13.LeftParamB = 0 | |
628 | Part13.LeftSurface = Enum.SurfaceType.Weld | |
629 | Part13.Locked = true | |
630 | Part13.RightParamA = 0 | |
631 | Part13.RightParamB = 0 | |
632 | Part13.RightSurface = Enum.SurfaceType.Weld | |
633 | Part13.brickColor = BrickColor.new("New Yeller") | |
634 | Part13.FormFactor = Enum.FormFactor.Symmetric | |
635 | Part13.formFactor = Enum.FormFactor.Symmetric | |
636 | Decal14.Name = "roblox" | |
637 | Decal14.Parent = Part13 | |
638 | Motor6D15.Name = "Right Shoulder" | |
639 | Motor6D15.Parent = Part13 | |
640 | Motor6D15.MaxVelocity = 0.10000000149012 | |
641 | Motor6D15.C0 = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0) | |
642 | Motor6D15.C1 = CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0) | |
643 | Motor6D15.Part0 = Part13 | |
644 | Motor6D15.Part1 = Part21 | |
645 | Motor6D15.part1 = Part21 | |
646 | Motor6D16.Name = "Left Shoulder" | |
647 | Motor6D16.Parent = Part13 | |
648 | Motor6D16.MaxVelocity = 0.10000000149012 | |
649 | Motor6D16.C0 = CFrame.new(-1, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0) | |
650 | Motor6D16.C1 = CFrame.new(0.5, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0) | |
651 | Motor6D16.Part0 = Part13 | |
652 | Motor6D16.Part1 = Part20 | |
653 | Motor6D16.part1 = Part20 | |
654 | Motor6D17.Name = "Right Hip" | |
655 | Motor6D17.Parent = Part13 | |
656 | Motor6D17.MaxVelocity = 0.10000000149012 | |
657 | Motor6D17.C0 = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0) | |
658 | Motor6D17.C1 = CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0) | |
659 | Motor6D17.Part0 = Part13 | |
660 | Motor6D17.Part1 = Part23 | |
661 | Motor6D17.part1 = Part23 | |
662 | Motor6D18.Name = "Left Hip" | |
663 | Motor6D18.Parent = Part13 | |
664 | Motor6D18.MaxVelocity = 0.10000000149012 | |
665 | Motor6D18.C0 = CFrame.new(-1, -1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0) | |
666 | Motor6D18.C1 = CFrame.new(-0.5, 1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0) | |
667 | Motor6D18.Part0 = Part13 | |
668 | Motor6D18.Part1 = Part22 | |
669 | Motor6D18.part1 = Part22 | |
670 | Motor6D19.Name = "Neck" | |
671 | Motor6D19.Parent = Part13 | |
672 | Motor6D19.MaxVelocity = 0.10000000149012 | |
673 | Motor6D19.C0 = CFrame.new(0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0) | |
674 | Motor6D19.C1 = CFrame.new(0, -0.5, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0) | |
675 | Motor6D19.Part0 = Part13 | |
676 | Motor6D19.Part1 = Part1 | |
677 | Motor6D19.part1 = Part1 | |
678 | Part20.Name = "Left Arm" | |
679 | Part20.Parent = Model0 | |
680 | Part20.CFrame = CFrame.new(12.3029995, 3.00001407, -22.2908611, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
681 | Part20.Orientation = Vector3.new(0, -6.40999985, 0) | |
682 | Part20.Position = Vector3.new(12.3029995, 3.00001407, -22.2908611) | |
683 | Part20.Rotation = Vector3.new(0, -6.40999985, 0) | |
684 | Part20.Color = Color3.new(0.803922, 0, 0) | |
685 | Part20.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
686 | Part20.Size = Vector3.new(1, 2, 1) | |
687 | Part20.BrickColor = BrickColor.new("Really red") | |
688 | Part20.CanCollide = false | |
689 | Part20.Locked = true | |
690 | Part20.brickColor = BrickColor.new("Really red") | |
691 | Part20.FormFactor = Enum.FormFactor.Symmetric | |
692 | Part20.formFactor = Enum.FormFactor.Symmetric | |
693 | Part21.Name = "Right Arm" | |
694 | Part21.Parent = Model0 | |
695 | Part21.CFrame = CFrame.new(15.2842731, 3.00001407, -21.9561863, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
696 | Part21.Orientation = Vector3.new(0, -6.40999985, 0) | |
697 | Part21.Position = Vector3.new(15.2842731, 3.00001407, -21.9561863) | |
698 | Part21.Rotation = Vector3.new(0, -6.40999985, 0) | |
699 | Part21.Color = Color3.new(0.803922, 0, 0) | |
700 | Part21.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
701 | Part21.Size = Vector3.new(1, 2, 1) | |
702 | Part21.BrickColor = BrickColor.new("Really red") | |
703 | Part21.CanCollide = false | |
704 | Part21.Locked = true | |
705 | Part21.brickColor = BrickColor.new("Really red") | |
706 | Part21.FormFactor = Enum.FormFactor.Symmetric | |
707 | Part21.formFactor = Enum.FormFactor.Symmetric | |
708 | Part22.Name = "Left Leg" | |
709 | Part22.Parent = Model0 | |
710 | Part22.CFrame = CFrame.new(13.2967577, 1.00001407, -22.1793022, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
711 | Part22.Orientation = Vector3.new(0, -6.40999985, 0) | |
712 | Part22.Position = Vector3.new(13.2967577, 1.00001407, -22.1793022) | |
713 | Part22.Rotation = Vector3.new(0, -6.40999985, 0) | |
714 | Part22.Color = Color3.new(1, 1, 0) | |
715 | Part22.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
716 | Part22.Size = Vector3.new(1, 2, 1) | |
717 | Part22.BottomSurface = Enum.SurfaceType.Smooth | |
718 | Part22.BrickColor = BrickColor.new("New Yeller") | |
719 | Part22.CanCollide = false | |
720 | Part22.Locked = true | |
721 | Part22.brickColor = BrickColor.new("New Yeller") | |
722 | Part22.FormFactor = Enum.FormFactor.Symmetric | |
723 | Part22.formFactor = Enum.FormFactor.Symmetric | |
724 | Part23.Name = "Right Leg" | |
725 | Part23.Parent = Model0 | |
726 | Part23.CFrame = CFrame.new(14.2905149, 1.00001407, -22.0677452, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
727 | Part23.Orientation = Vector3.new(0, -6.40999985, 0) | |
728 | Part23.Position = Vector3.new(14.2905149, 1.00001407, -22.0677452) | |
729 | Part23.Rotation = Vector3.new(0, -6.40999985, 0) | |
730 | Part23.Color = Color3.new(1, 1, 0) | |
731 | Part23.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
732 | Part23.Size = Vector3.new(1, 2, 1) | |
733 | Part23.BottomSurface = Enum.SurfaceType.Smooth | |
734 | Part23.BrickColor = BrickColor.new("New Yeller") | |
735 | Part23.CanCollide = false | |
736 | Part23.Locked = true | |
737 | Part23.brickColor = BrickColor.new("New Yeller") | |
738 | Part23.FormFactor = Enum.FormFactor.Symmetric | |
739 | Part23.formFactor = Enum.FormFactor.Symmetric | |
740 | Humanoid24.Parent = Model0 | |
741 | Humanoid24.LeftLeg = Part22 | |
742 | Humanoid24.RightLeg = Part23 | |
743 | Humanoid24.Torso = Part25 | |
744 | Part25.Name = "HumanoidRootPart" | |
745 | Part25.Parent = Model0 | |
746 | Part25.CFrame = CFrame.new(13.7936363, 3.00001407, -22.1235237, 0.993757904, 0, -0.111558832, 0, 1, 0, 0.111558832, 0, 0.993757904) | |
747 | Part25.Orientation = Vector3.new(0, -6.40999985, 0) | |
748 | Part25.Position = Vector3.new(13.7936363, 3.00001407, -22.1235237) | |
749 | Part25.Rotation = Vector3.new(0, -6.40999985, 0) | |
750 | Part25.Transparency = 1 | |
751 | Part25.Velocity = Vector3.new(5.33474325e-42, 0, -4.77520478e-41) | |
752 | Part25.Size = Vector3.new(2, 2, 1) | |
753 | Part25.BottomSurface = Enum.SurfaceType.Smooth | |
754 | Part25.CanCollide = false | |
755 | Part25.LeftParamA = 0 | |
756 | Part25.LeftParamB = 0 | |
757 | Part25.Locked = true | |
758 | Part25.RightParamA = 0 | |
759 | Part25.RightParamB = 0 | |
760 | Part25.TopSurface = Enum.SurfaceType.Smooth | |
761 | Part25.FormFactor = Enum.FormFactor.Symmetric | |
762 | Part25.formFactor = Enum.FormFactor.Symmetric | |
763 | Motor6D26.Name = "RootJoint" | |
764 | Motor6D26.Parent = Part25 | |
765 | Motor6D26.MaxVelocity = 0.10000000149012 | |
766 | Motor6D26.C0 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0) | |
767 | Motor6D26.C1 = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0) | |
768 | Motor6D26.Part0 = Part25 | |
769 | Motor6D26.Part1 = Part13 | |
770 | Motor6D26.part1 = Part13 | |
771 | Script27.Name = "Sound" | |
772 | Script27.Parent = Model0 | |
773 | table.insert(cors,sandbox(Script27,function() | |
774 | --[[ | |
775 | Author: @spotco | |
776 | This script creates sounds which are placed under the character head. | |
777 | These sounds are used by the "LocalSound" script. | |
778 | ||
779 | To modify this script, copy it to your "StarterPlayer/StarterCharacterScripts" folder keeping the same script name ("Sound"). | |
780 | The default Sound script loaded for every character will then be replaced with your copy of the script. | |
781 | ]]-- | |
782 | ||
783 | function CreateNewSound(name, id, looped, pitch, parent) | |
784 | local sound = Instance.new("Sound") | |
785 | sound.SoundId = id | |
786 | sound.Name = name | |
787 | sound.archivable = false | |
788 | sound.Parent = parent | |
789 | sound.Pitch = pitch | |
790 | sound.Looped = looped | |
791 | ||
792 | sound.MinDistance = 5 | |
793 | sound.MaxDistance = 150 | |
794 | sound.Volume = 0.65 | |
795 | ||
796 | return sound | |
797 | end | |
798 | ||
799 | local head = script.Parent:FindFirstChild("Head") | |
800 | if head == nil then | |
801 | error("Sound script parent has no child Head.") | |
802 | return | |
803 | end | |
804 | ||
805 | ||
806 | CreateNewSound("GettingUp", "rbxasset://sounds/action_get_up.mp3", false, 1, head) | |
807 | CreateNewSound("Died", "rbxasset://sounds/uuhhh.mp3", false, 1, head) | |
808 | CreateNewSound("FreeFalling", "rbxasset://sounds/action_falling.mp3", true, 1, head) | |
809 | CreateNewSound("Jumping", "rbxasset://sounds/action_jump.mp3", false, 1, head) | |
810 | CreateNewSound("Landing", "rbxasset://sounds/action_jump_land.mp3", false, 1, head) | |
811 | CreateNewSound("Splash", "rbxasset://sounds/impact_water.mp3", false, 1, head) | |
812 | CreateNewSound("Running", "rbxasset://sounds/action_footsteps_plastic.mp3", true, 1.85, head) | |
813 | CreateNewSound("Swimming", "rbxasset://sounds/action_swim.mp3", true, 1.6, head) | |
814 | CreateNewSound("Climbing", "rbxasset://sounds/action_footsteps_plastic.mp3", true, 1, head) | |
815 | end)) | |
816 | LocalScript28.Name = "LocalSound" | |
817 | LocalScript28.Parent = Script27 | |
818 | table.insert(cors,sandbox(LocalScript28,function() | |
819 | --[[ | |
820 | Author: @spotco | |
821 | This script runs locally for the player of the given humanoid. | |
822 | This script triggers humanoid sound play/pause actions locally. | |
823 | ||
824 | The Playing/TimePosition properties of Sound objects bypass FilteringEnabled, so this triggers the sound | |
825 | immediately for the player and is replicated to all other players. | |
826 | ||
827 | This script is optimized to reduce network traffic through minimizing the amount of property replication. | |
828 | ]]-- | |
829 | ||
830 | --All sounds are referenced by this ID | |
831 | local SFX = { | |
832 | Died = 0; | |
833 | Running = 1; | |
834 | Swimming = 2; | |
835 | Climbing = 3, | |
836 | Jumping = 4; | |
837 | GettingUp = 5; | |
838 | FreeFalling = 6; | |
839 | FallingDown = 7; | |
840 | Landing = 8; | |
841 | Splash = 9; | |
842 | } | |
843 | ||
844 | local Humanoid = nil | |
845 | local Head = nil | |
846 | ||
847 | --SFX ID to Sound object | |
848 | local Sounds = {} | |
849 | ||
850 | do | |
851 | local Figure = script.Parent.Parent | |
852 | Head = Figure:WaitForChild("Head") | |
853 | while not Humanoid do | |
854 | for _,NewHumanoid in pairs(Figure:GetChildren()) do | |
855 | if NewHumanoid:IsA("Humanoid") then | |
856 | Humanoid = NewHumanoid | |
857 | break | |
858 | end | |
859 | end | |
860 | Figure.ChildAdded:wait() | |
861 | end | |
862 | ||
863 | Sounds[SFX.Died] = Head:WaitForChild("Died") | |
864 | Sounds[SFX.Running] = Head:WaitForChild("Running") | |
865 | Sounds[SFX.Swimming] = Head:WaitForChild("Swimming") | |
866 | Sounds[SFX.Climbing] = Head:WaitForChild("Climbing") | |
867 | Sounds[SFX.Jumping] = Head:WaitForChild("Jumping") | |
868 | Sounds[SFX.GettingUp] = Head:WaitForChild("GettingUp") | |
869 | Sounds[SFX.FreeFalling] = Head:WaitForChild("FreeFalling") | |
870 | Sounds[SFX.Landing] = Head:WaitForChild("Landing") | |
871 | Sounds[SFX.Splash] = Head:WaitForChild("Splash") | |
872 | end | |
873 | ||
874 | local Util | |
875 | Util = { | |
876 | ||
877 | --Define linear relationship between (pt1x,pt2x) and (pt2x,pt2y). Evaluate this at x. | |
878 | YForLineGivenXAndTwoPts = function(x,pt1x,pt1y,pt2x,pt2y) | |
879 | --(y - y1)/(x - x1) = m | |
880 | local m = (pt1y - pt2y) / (pt1x - pt2x) | |
881 | --float b = pt1.y - m * pt1.x; | |
882 | local b = (pt1y - m * pt1x) | |
883 | return m * x + b | |
884 | end; | |
885 | ||
886 | --Clamps the value of "val" between the "min" and "max" | |
887 | Clamp = function(val,min,max) | |
888 | return math.min(max,math.max(min,val)) | |
889 | end; | |
890 | ||
891 | --Gets the horizontal (x,z) velocity magnitude of the given part | |
892 | HorizontalSpeed = function(Head) | |
893 | local hVel = Head.Velocity + Vector3.new(0,-Head.Velocity.Y,0) | |
894 | return hVel.magnitude | |
895 | end; | |
896 | ||
897 | --Gets the vertical (y) velocity magnitude of the given part | |
898 | VerticalSpeed = function(Head) | |
899 | return math.abs(Head.Velocity.Y) | |
900 | end; | |
901 | ||
902 | --Setting Playing/TimePosition values directly result in less network traffic than Play/Pause/Resume/Stop | |
903 | --If these properties are enabled, use them. | |
904 | Play = function(sound) | |
905 | if sound.TimePosition ~= 0 then | |
906 | sound.TimePosition = 0 | |
907 | end | |
908 | if not sound.IsPlaying then | |
909 | sound.Playing = true | |
910 | end | |
911 | end; | |
912 | Pause = function(sound) | |
913 | if sound.IsPlaying then | |
914 | sound.Playing = false | |
915 | end | |
916 | end; | |
917 | Resume = function(sound) | |
918 | if not sound.IsPlaying then | |
919 | sound.Playing = true | |
920 | end | |
921 | end; | |
922 | Stop = function(sound) | |
923 | if sound.IsPlaying then | |
924 | sound.Playing = false | |
925 | end | |
926 | if sound.TimePosition ~= 0 then | |
927 | sound.TimePosition = 0 | |
928 | end | |
929 | end; | |
930 | } | |
931 | ||
932 | do | |
933 | -- List of all active Looped sounds | |
934 | local playingLoopedSounds = {} | |
935 | ||
936 | -- Last seen Enum.HumanoidStateType | |
937 | local activeState = nil | |
938 | ||
939 | -- Verify and set that "sound" is in "playingLoopedSounds". | |
940 | function setSoundInPlayingLoopedSounds(sound) | |
941 | for i=1, #playingLoopedSounds do | |
942 | if playingLoopedSounds[i] == sound then | |
943 | return | |
944 | end | |
945 | end | |
946 | table.insert(playingLoopedSounds,sound) | |
947 | end | |
948 | ||
949 | -- Stop all active looped sounds except parameter "except". If "except" is not passed, all looped sounds will be stopped. | |
950 | function stopPlayingLoopedSoundsExcept(except) | |
951 | for i=#playingLoopedSounds,1,-1 do | |
952 | if playingLoopedSounds[i] ~= except then | |
953 | Util.Pause(playingLoopedSounds[i]) | |
954 | table.remove(playingLoopedSounds,i) | |
955 | end | |
956 | end | |
957 | end | |
958 | ||
959 | -- Table of Enum.HumanoidStateType to handling function | |
960 | local stateUpdateHandler = { | |
961 | [Enum.HumanoidStateType.Dead] = function() | |
962 | stopPlayingLoopedSoundsExcept() | |
963 | local sound = Sounds[SFX.Died] | |
964 | Util.Play(sound) | |
965 | end; | |
966 | ||
967 | [Enum.HumanoidStateType.RunningNoPhysics] = function() | |
968 | stateUpdated(Enum.HumanoidStateType.Running) | |
969 | end; | |
970 | ||
971 | [Enum.HumanoidStateType.Running] = function() | |
972 | local sound = Sounds[SFX.Running] | |
973 | stopPlayingLoopedSoundsExcept(sound) | |
974 | ||
975 | if Util.HorizontalSpeed(Head) > 0.5 then | |
976 | Util.Resume(sound) | |
977 | setSoundInPlayingLoopedSounds(sound) | |
978 | else | |
979 | stopPlayingLoopedSoundsExcept() | |
980 | end | |
981 | end; | |
982 | ||
983 | [Enum.HumanoidStateType.Swimming] = function() | |
984 | if activeState ~= Enum.HumanoidStateType.Swimming and Util.VerticalSpeed(Head) > 0.1 then | |
985 | local splashSound = Sounds[SFX.Splash] | |
986 | splashSound.Volume = Util.Clamp( | |
987 | Util.YForLineGivenXAndTwoPts( | |
988 | Util.VerticalSpeed(Head), | |
989 | 100, 0.28, | |
990 | 350, 1), | |
991 | 0,1) | |
992 | Util.Play(splashSound) | |
993 | end | |
994 | ||
995 | do | |
996 | local sound = Sounds[SFX.Swimming] | |
997 | stopPlayingLoopedSoundsExcept(sound) | |
998 | Util.Resume(sound) | |
999 | setSoundInPlayingLoopedSounds(sound) | |
1000 | end | |
1001 | end; | |
1002 | ||
1003 | [Enum.HumanoidStateType.Climbing] = function() | |
1004 | local sound = Sounds[SFX.Climbing] | |
1005 | if Util.VerticalSpeed(Head) > 0.1 then | |
1006 | Util.Resume(sound) | |
1007 | stopPlayingLoopedSoundsExcept(sound) | |
1008 | else | |
1009 | stopPlayingLoopedSoundsExcept() | |
1010 | end | |
1011 | setSoundInPlayingLoopedSounds(sound) | |
1012 | end; | |
1013 | ||
1014 | [Enum.HumanoidStateType.Jumping] = function() | |
1015 | if activeState == Enum.HumanoidStateType.Jumping then | |
1016 | return | |
1017 | end | |
1018 | stopPlayingLoopedSoundsExcept() | |
1019 | local sound = Sounds[SFX.Jumping] | |
1020 | Util.Play(sound) | |
1021 | end; | |
1022 | ||
1023 | [Enum.HumanoidStateType.GettingUp] = function() | |
1024 | stopPlayingLoopedSoundsExcept() | |
1025 | local sound = Sounds[SFX.GettingUp] | |
1026 | Util.Play(sound) | |
1027 | end; | |
1028 | ||
1029 | [Enum.HumanoidStateType.Freefall] = function() | |
1030 | if activeState == Enum.HumanoidStateType.Freefall then | |
1031 | return | |
1032 | end | |
1033 | local sound = Sounds[SFX.FreeFalling] | |
1034 | sound.Volume = 0 | |
1035 | stopPlayingLoopedSoundsExcept() | |
1036 | end; | |
1037 | ||
1038 | [Enum.HumanoidStateType.FallingDown] = function() | |
1039 | stopPlayingLoopedSoundsExcept() | |
1040 | end; | |
1041 | ||
1042 | [Enum.HumanoidStateType.Landed] = function() | |
1043 | stopPlayingLoopedSoundsExcept() | |
1044 | if Util.VerticalSpeed(Head) > 75 then | |
1045 | local landingSound = Sounds[SFX.Landing] | |
1046 | landingSound.Volume = Util.Clamp( | |
1047 | Util.YForLineGivenXAndTwoPts( | |
1048 | Util.VerticalSpeed(Head), | |
1049 | 50, 0, | |
1050 | 100, 1), | |
1051 | 0,1) | |
1052 | Util.Play(landingSound) | |
1053 | end | |
1054 | end; | |
1055 | ||
1056 | [Enum.HumanoidStateType.Seated] = function() | |
1057 | stopPlayingLoopedSoundsExcept() | |
1058 | end; | |
1059 | } | |
1060 | ||
1061 | -- Handle state event fired or OnChange fired | |
1062 | function stateUpdated(state) | |
1063 | if stateUpdateHandler[state] ~= nil then | |
1064 | stateUpdateHandler[state]() | |
1065 | end | |
1066 | activeState = state | |
1067 | end | |
1068 | ||
1069 | Humanoid.Died:connect( function() stateUpdated(Enum.HumanoidStateType.Dead) end) | |
1070 | Humanoid.Running:connect( function() stateUpdated(Enum.HumanoidStateType.Running) end) | |
1071 | Humanoid.Swimming:connect( function() stateUpdated(Enum.HumanoidStateType.Swimming) end) | |
1072 | Humanoid.Climbing:connect( function() stateUpdated(Enum.HumanoidStateType.Climbing) end) | |
1073 | Humanoid.Jumping:connect( function() stateUpdated(Enum.HumanoidStateType.Jumping) end) | |
1074 | Humanoid.GettingUp:connect( function() stateUpdated(Enum.HumanoidStateType.GettingUp) end) | |
1075 | Humanoid.FreeFalling:connect( function() stateUpdated(Enum.HumanoidStateType.Freefall) end) | |
1076 | Humanoid.FallingDown:connect( function() stateUpdated(Enum.HumanoidStateType.FallingDown) end) | |
1077 | ||
1078 | -- required for proper handling of Landed event | |
1079 | Humanoid.StateChanged:connect(function(old, new) | |
1080 | stateUpdated(new) | |
1081 | end) | |
1082 | ||
1083 | ||
1084 | function onUpdate(stepDeltaSeconds, tickSpeedSeconds) | |
1085 | local stepScale = stepDeltaSeconds / tickSpeedSeconds | |
1086 | do | |
1087 | local sound = Sounds[SFX.FreeFalling] | |
1088 | if activeState == Enum.HumanoidStateType.Freefall then | |
1089 | if Head.Velocity.Y < 0 and Util.VerticalSpeed(Head) > 75 then | |
1090 | Util.Resume(sound) | |
1091 | ||
1092 | --Volume takes 1.1 seconds to go from volume 0 to 1 | |
1093 | local ANIMATION_LENGTH_SECONDS = 1.1 | |
1094 | ||
1095 | local normalizedIncrement = tickSpeedSeconds / ANIMATION_LENGTH_SECONDS | |
1096 | sound.Volume = Util.Clamp(sound.Volume + normalizedIncrement * stepScale, 0, 1) | |
1097 | else | |
1098 | sound.Volume = 0 | |
1099 | end | |
1100 | else | |
1101 | Util.Pause(sound) | |
1102 | end | |
1103 | end | |
1104 | ||
1105 | do | |
1106 | local sound = Sounds[SFX.Running] | |
1107 | if activeState == Enum.HumanoidStateType.Running then | |
1108 | if Util.HorizontalSpeed(Head) < 0.5 then | |
1109 | Util.Pause(sound) | |
1110 | end | |
1111 | end | |
1112 | end | |
1113 | end | |
1114 | ||
1115 | local lastTick = tick() | |
1116 | local TICK_SPEED_SECONDS = 0.25 | |
1117 | while true do | |
1118 | onUpdate(tick() - lastTick,TICK_SPEED_SECONDS) | |
1119 | lastTick = tick() | |
1120 | wait(TICK_SPEED_SECONDS) | |
1121 | end | |
1122 | end | |
1123 | ||
1124 | end)) | |
1125 | LocalScript29.Name = "Animate" | |
1126 | LocalScript29.Parent = Model0 | |
1127 | table.insert(cors,sandbox(LocalScript29,function() | |
1128 | function waitForChild(parent, childName) | |
1129 | local child = parent:findFirstChild(childName) | |
1130 | if child then return child end | |
1131 | while true do | |
1132 | child = parent.ChildAdded:wait() | |
1133 | if child.Name==childName then return child end | |
1134 | end | |
1135 | end | |
1136 | ||
1137 | local Figure = script.Parent | |
1138 | local Torso = waitForChild(Figure, "Torso") | |
1139 | local RightShoulder = waitForChild(Torso, "Right Shoulder") | |
1140 | local LeftShoulder = waitForChild(Torso, "Left Shoulder") | |
1141 | local RightHip = waitForChild(Torso, "Right Hip") | |
1142 | local LeftHip = waitForChild(Torso, "Left Hip") | |
1143 | local Neck = waitForChild(Torso, "Neck") | |
1144 | local Humanoid = waitForChild(Figure, "Humanoid") | |
1145 | local pose = "Standing" | |
1146 | ||
1147 | local currentAnim = "" | |
1148 | local currentAnimInstance = nil | |
1149 | local currentAnimTrack = nil | |
1150 | local currentAnimKeyframeHandler = nil | |
1151 | local currentAnimSpeed = 1.0 | |
1152 | local animTable = {} | |
1153 | local animNames = { | |
1154 | idle = { | |
1155 | { id = "http://www.roblox.com/asset/?id=180435571", weight = 9 }, | |
1156 | { id = "http://www.roblox.com/asset/?id=180435792", weight = 1 } | |
1157 | }, | |
1158 | walk = { | |
1159 | { id = "http://www.roblox.com/asset/?id=180426354", weight = 10 } | |
1160 | }, | |
1161 | run = { | |
1162 | { id = "run.xml", weight = 10 } | |
1163 | }, | |
1164 | jump = { | |
1165 | { id = "http://www.roblox.com/asset/?id=125750702", weight = 10 } | |
1166 | }, | |
1167 | fall = { | |
1168 | { id = "http://www.roblox.com/asset/?id=180436148", weight = 10 } | |
1169 | }, | |
1170 | climb = { | |
1171 | { id = "http://www.roblox.com/asset/?id=180436334", weight = 10 } | |
1172 | }, | |
1173 | sit = { | |
1174 | { id = "http://www.roblox.com/asset/?id=178130996", weight = 10 } | |
1175 | }, | |
1176 | toolnone = { | |
1177 | { id = "http://www.roblox.com/asset/?id=182393478", weight = 10 } | |
1178 | }, | |
1179 | toolslash = { | |
1180 | { id = "http://www.roblox.com/asset/?id=129967390", weight = 10 } | |
1181 | -- { id = "slash.xml", weight = 10 } | |
1182 | }, | |
1183 | toollunge = { | |
1184 | { id = "http://www.roblox.com/asset/?id=129967478", weight = 10 } | |
1185 | }, | |
1186 | wave = { | |
1187 | { id = "http://www.roblox.com/asset/?id=128777973", weight = 10 } | |
1188 | }, | |
1189 | point = { | |
1190 | { id = "http://www.roblox.com/asset/?id=128853357", weight = 10 } | |
1191 | }, | |
1192 | dance1 = { | |
1193 | { id = "http://www.roblox.com/asset/?id=182435998", weight = 10 }, | |
1194 | { id = "http://www.roblox.com/asset/?id=182491037", weight = 10 }, | |
1195 | { id = "http://www.roblox.com/asset/?id=182491065", weight = 10 } | |
1196 | }, | |
1197 | dance2 = { | |
1198 | { id = "http://www.roblox.com/asset/?id=182436842", weight = 10 }, | |
1199 | { id = "http://www.roblox.com/asset/?id=182491248", weight = 10 }, | |
1200 | { id = "http://www.roblox.com/asset/?id=182491277", weight = 10 } | |
1201 | }, | |
1202 | dance3 = { | |
1203 | { id = "http://www.roblox.com/asset/?id=182436935", weight = 10 }, | |
1204 | { id = "http://www.roblox.com/asset/?id=182491368", weight = 10 }, | |
1205 | { id = "http://www.roblox.com/asset/?id=182491423", weight = 10 } | |
1206 | }, | |
1207 | laugh = { | |
1208 | { id = "http://www.roblox.com/asset/?id=129423131", weight = 10 } | |
1209 | }, | |
1210 | cheer = { | |
1211 | { id = "http://www.roblox.com/asset/?id=129423030", weight = 10 } | |
1212 | }, | |
1213 | } | |
1214 | local dances = {"dance1", "dance2", "dance3"} | |
1215 | ||
1216 | -- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote | |
1217 | local emoteNames = { wave = false, point = false, dance1 = true, dance2 = true, dance3 = true, laugh = false, cheer = false} | |
1218 | ||
1219 | function configureAnimationSet(name, fileList) | |
1220 | if (animTable[name] ~= nil) then | |
1221 | for _, connection in pairs(animTable[name].connections) do | |
1222 | connection:disconnect() | |
1223 | end | |
1224 | end | |
1225 | animTable[name] = {} | |
1226 | animTable[name].count = 0 | |
1227 | animTable[name].totalWeight = 0 | |
1228 | animTable[name].connections = {} | |
1229 | ||
1230 | -- check for config values | |
1231 | local config = script:FindFirstChild(name) | |
1232 | if (config ~= nil) then | |
1233 | -- print("Loading anims " .. name) | |
1234 | table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end)) | |
1235 | table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end)) | |
1236 | local idx = 1 | |
1237 | for _, childPart in pairs(config:GetChildren()) do | |
1238 | if (childPart:IsA("Animation")) then | |
1239 | table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end)) | |
1240 | animTable[name][idx] = {} | |
1241 | animTable[name][idx].anim = childPart | |
1242 | local weightObject = childPart:FindFirstChild("Weight") | |
1243 | if (weightObject == nil) then | |
1244 | animTable[name][idx].weight = 1 | |
1245 | else | |
1246 | animTable[name][idx].weight = weightObject.Value | |
1247 | end | |
1248 | animTable[name].count = animTable[name].count + 1 | |
1249 | animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight | |
1250 | -- print(name .. " [" .. idx .. "] " .. animTable[name][idx].anim.AnimationId .. " (" .. animTable[name][idx].weight .. ")") | |
1251 | idx = idx + 1 | |
1252 | end | |
1253 | end | |
1254 | end | |
1255 | ||
1256 | -- fallback to defaults | |
1257 | if (animTable[name].count <= 0) then | |
1258 | for idx, anim in pairs(fileList) do | |
1259 | animTable[name][idx] = {} | |
1260 | animTable[name][idx].anim = Instance.new("Animation") | |
1261 | animTable[name][idx].anim.Name = name | |
1262 | animTable[name][idx].anim.AnimationId = anim.id | |
1263 | animTable[name][idx].weight = anim.weight | |
1264 | animTable[name].count = animTable[name].count + 1 | |
1265 | animTable[name].totalWeight = animTable[name].totalWeight + anim.weight | |
1266 | -- print(name .. " [" .. idx .. "] " .. anim.id .. " (" .. anim.weight .. ")") | |
1267 | end | |
1268 | end | |
1269 | end | |
1270 | ||
1271 | -- Setup animation objects | |
1272 | ||
1273 | function chatfunc(text, color) | |
1274 | local cha = Torso | |
1275 | local chat = coroutine.wrap(function() | |
1276 | if cha:FindFirstChild("TalkingBillBoard") ~= nil then | |
1277 | cha:FindFirstChild("TalkingBillBoard"):destroy() | |
1278 | end | |
1279 | local naeeym2 = Instance.new("BillboardGui", cha) | |
1280 | naeeym2.Size = UDim2.new(0, 100, 0, 40) | |
1281 | naeeym2.StudsOffset = Vector3.new(0, 3, 0) | |
1282 | naeeym2.Adornee = hed | |
1283 | naeeym2.Name = "TalkingBillBoard" | |
1284 | local tecks2 = Instance.new("TextLabel", naeeym2) | |
1285 | tecks2.BackgroundTransparency = 1 | |
1286 | tecks2.BorderSizePixel = 0 | |
1287 | tecks2.Text = "" | |
1288 | tecks2.Font = "Fantasy" | |
1289 | tecks2.TextSize = 30 | |
1290 | tecks2.TextStrokeTransparency = 0 | |
1291 | tecks2.TextColor3 = color | |
1292 | tecks2.TextStrokeColor3 = Color3.new(232, 186, 200) | |
1293 | tecks2.Size = UDim2.new(1, 0, 0.5, 0) | |
1294 | local tecks3 = Instance.new("TextLabel", naeeym2) | |
1295 | tecks3.BackgroundTransparency = 1 | |
1296 | tecks3.BorderSizePixel = 0 | |
1297 | tecks3.Text = "" | |
1298 | tecks3.Font = "Fantasy" | |
1299 | tecks3.TextSize = 30 | |
1300 | tecks3.TextStrokeTransparency = 0 | |
1301 | tecks3.TextColor3 = Color3.new(0, 0, 0) | |
1302 | tecks3.TextStrokeColor3 = color | |
1303 | tecks3.Size = UDim2.new(1, 0, 0.5, 0) | |
1304 | coroutine.resume(coroutine.create(function() | |
1305 | while true do | |
1306 | swait(1) | |
1307 | tecks2.Position = UDim2.new(0, math.random(-5, 5), 0, math.random(-5, 5)) | |
1308 | tecks3.Position = UDim2.new(0, math.random(-5, 5), 0, math.random(-5, 5)) | |
1309 | tecks2.Rotation = math.random(-5, 5) | |
1310 | tecks3.Rotation = math.random(-5, 5) | |
1311 | end | |
1312 | end)) | |
1313 | for i = 1, string.len(text) do | |
1314 | tecks2.Text = string.sub(text, 1, i) | |
1315 | tecks3.Text = string.sub(text, 1, i) | |
1316 | swait(1) | |
1317 | end | |
1318 | wait(1) | |
1319 | local randomrot = math.random(1, 2) | |
1320 | if randomrot == 1 then | |
1321 | for i = 1, 50 do | |
1322 | swait() | |
1323 | tecks2.Rotation = tecks2.Rotation - 0.75 | |
1324 | tecks2.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
1325 | tecks2.TextTransparency = tecks2.TextTransparency + 0.04 | |
1326 | tecks3.Rotation = tecks2.Rotation + 0.75 | |
1327 | tecks3.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
1328 | tecks3.TextTransparency = tecks2.TextTransparency + 0.04 | |
1329 | end | |
1330 | elseif randomrot == 2 then | |
1331 | for i = 1, 50 do | |
1332 | swait() | |
1333 | tecks2.Rotation = tecks2.Rotation + 0.75 | |
1334 | tecks2.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
1335 | tecks2.TextTransparency = tecks2.TextTransparency + 0.04 | |
1336 | tecks3.Rotation = tecks2.Rotation - 0.75 | |
1337 | tecks3.TextStrokeTransparency = tecks2.TextStrokeTransparency + 0.04 | |
1338 | tecks3.TextTransparency = tecks2.TextTransparency + 0.04 | |
1339 | end | |
1340 | end | |
1341 | naeeym2:Destroy() | |
1342 | end) | |
1343 | chat() | |
1344 | end | |
1345 | ||
1346 | function Eviscerate(dude) | |
1347 | cam = game.Workspace.CurrentCamera | |
1348 | CF = CFrame.new | |
1349 | angles = CFrame.Angles | |
1350 | attack = false | |
1351 | Euler = CFrame.fromEulerAnglesXYZ | |
1352 | Rad = math.rad | |
1353 | IT = Instance.new | |
1354 | BrickC = BrickColor.new | |
1355 | Cos = math.cos | |
1356 | Acos = math.acos | |
1357 | Sin = math.sin | |
1358 | Asin = math.asin | |
1359 | Abs = math.abs | |
1360 | Mrandom = math.random | |
1361 | Floor = math.floor | |
1362 | if dude.Name ~= cha then | |
1363 | local bgf = IT("BodyGyro", dude.Head) | |
1364 | bgf.CFrame = bgf.CFrame * CFrame.fromEulerAnglesXYZ(Rad(-10), 0, 0) | |
1365 | local val = IT("BoolValue", dude) | |
1366 | val.Name = "IsHit" | |
1367 | local ds = coroutine.wrap(function() | |
1368 | dude:WaitForChild("Head"):BreakJoints() | |
1369 | wait(0.5) | |
1370 | target = nil | |
1371 | coroutine.resume(coroutine.create(function() | |
1372 | for i, v in pairs(dude:GetChildren()) do | |
1373 | if v:IsA("Accessory") then | |
1374 | v:Destroy() | |
1375 | end | |
1376 | if v:IsA("Humanoid") then | |
1377 | v:Destroy() | |
1378 | end | |
1379 | if v:IsA("CharacterMesh") then | |
1380 | v:Destroy() | |
1381 | end | |
1382 | if v:IsA("Model") then | |
1383 | v:Destroy() | |
1384 | end | |
1385 | if v:IsA("Part") or v:IsA("MeshPart") then | |
1386 | for x, o in pairs(v:GetChildren()) do | |
1387 | if o:IsA("Decal") then | |
1388 | o:Destroy() | |
1389 | end | |
1390 | end | |
1391 | coroutine.resume(coroutine.create(function() | |
1392 | v.Material = "Neon" | |
1393 | v.CanCollide = false | |
1394 | local PartEmmit1 = IT("ParticleEmitter", v) | |
1395 | PartEmmit1.LightEmission = 1 | |
1396 | PartEmmit1.Texture = "rbxassetid://0" | |
1397 | PartEmmit1.Color = ColorSequence.new(maincolor.Color) | |
1398 | PartEmmit1.Rate = 150 | |
1399 | PartEmmit1.Lifetime = NumberRange.new(1) | |
1400 | PartEmmit1.Size = NumberSequence.new({ | |
1401 | NumberSequenceKeypoint.new(0, 0.75, 0), | |
1402 | NumberSequenceKeypoint.new(1, 0, 0) | |
1403 | }) | |
1404 | PartEmmit1.Transparency = NumberSequence.new({ | |
1405 | NumberSequenceKeypoint.new(0, 0, 0), | |
1406 | NumberSequenceKeypoint.new(1, 1, 0) | |
1407 | }) | |
1408 | PartEmmit1.Speed = NumberRange.new(0, 0) | |
1409 | PartEmmit1.VelocitySpread = 30000 | |
1410 | PartEmmit1.Rotation = NumberRange.new(-500, 500) | |
1411 | PartEmmit1.RotSpeed = NumberRange.new(-500, 500) | |
1412 | local BodPoss = IT("BodyPosition", v) | |
1413 | BodPoss.P = 3000 | |
1414 | BodPoss.D = 1000 | |
1415 | BodPoss.maxForce = Vector3.new(50000000000, 50000000000, 50000000000) | |
1416 | BodPoss.position = v.Position + Vector3.new(Mrandom(-15, 15), Mrandom(-15, 15), Mrandom(-15, 15)) | |
1417 | v.Color = maincolor.Color | |
1418 | coroutine.resume(coroutine.create(function() | |
1419 | for i = 0, 49 do | |
1420 | swait(1) | |
1421 | v.Transparency = v.Transparency + 0.08 | |
1422 | end | |
1423 | wait(0.5) | |
1424 | PartEmmit1.Enabled = false | |
1425 | wait(3) | |
1426 | v:Destroy() | |
1427 | dude:Destroy() | |
1428 | end)) | |
1429 | end)) | |
1430 | end | |
1431 | end | |
1432 | end)) | |
1433 | end) | |
1434 | ds() | |
1435 | end | |
1436 | end | |
1437 | ||
1438 | function FindNearestHead(Position, Distance, SinglePlayer) | |
1439 | if SinglePlayer then | |
1440 | return Distance > (SinglePlayer.Torso.CFrame.p - Position).magnitude | |
1441 | end | |
1442 | local List = {} | |
1443 | for i, v in pairs(workspace:GetChildren()) do | |
1444 | if v:IsA("Model") and v:findFirstChild("Head") and v ~= cha and Distance >= (v.Head.Position - Position).magnitude then | |
1445 | table.insert(List, v) | |
1446 | end | |
1447 | end | |
1448 | return List | |
1449 | end | |
1450 | function scriptChildModified(child) | |
1451 | local fileList = animNames[child.Name] | |
1452 | if (fileList ~= nil) then | |
1453 | configureAnimationSet(child.Name, fileList) | |
1454 | end | |
1455 | end | |
1456 | ||
1457 | script.ChildAdded:connect(scriptChildModified) | |
1458 | script.ChildRemoved:connect(scriptChildModified) | |
1459 | ||
1460 | ||
1461 | for name, fileList in pairs(animNames) do | |
1462 | configureAnimationSet(name, fileList) | |
1463 | end | |
1464 | ||
1465 | -- ANIMATION | |
1466 | ||
1467 | -- declarations | |
1468 | local toolAnim = "None" | |
1469 | local toolAnimTime = 0 | |
1470 | ||
1471 | local jumpAnimTime = 0 | |
1472 | local jumpAnimDuration = 0.3 | |
1473 | ||
1474 | local toolTransitionTime = 0.1 | |
1475 | local fallTransitionTime = 0.3 | |
1476 | local jumpMaxLimbVelocity = 0.75 | |
1477 | ||
1478 | -- functions | |
1479 | ||
1480 | function stopAllAnimations() | |
1481 | local oldAnim = currentAnim | |
1482 | ||
1483 | -- return to idle if finishing an emote | |
1484 | if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then | |
1485 | oldAnim = "idle" | |
1486 | end | |
1487 | ||
1488 | currentAnim = "" | |
1489 | currentAnimInstance = nil | |
1490 | if (currentAnimKeyframeHandler ~= nil) then | |
1491 | currentAnimKeyframeHandler:disconnect() | |
1492 | end | |
1493 | ||
1494 | if (currentAnimTrack ~= nil) then | |
1495 | currentAnimTrack:Stop() | |
1496 | currentAnimTrack:Destroy() | |
1497 | currentAnimTrack = nil | |
1498 | end | |
1499 | return oldAnim | |
1500 | end | |
1501 | ||
1502 | function setAnimationSpeed(speed) | |
1503 | if speed ~= currentAnimSpeed then | |
1504 | currentAnimSpeed = speed | |
1505 | currentAnimTrack:AdjustSpeed(currentAnimSpeed) | |
1506 | end | |
1507 | end | |
1508 | ||
1509 | function keyFrameReachedFunc(frameName) | |
1510 | if (frameName == "End") then | |
1511 | ||
1512 | local repeatAnim = currentAnim | |
1513 | -- return to idle if finishing an emote | |
1514 | if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then | |
1515 | repeatAnim = "idle" | |
1516 | end | |
1517 | ||
1518 | local animSpeed = currentAnimSpeed | |
1519 | playAnimation(repeatAnim, 0.0, Humanoid) | |
1520 | setAnimationSpeed(animSpeed) | |
1521 | end | |
1522 | end | |
1523 | ||
1524 | -- Preload animations | |
1525 | function playAnimation(animName, transitionTime, humanoid) | |
1526 | ||
1527 | local roll = math.random(1, animTable[animName].totalWeight) | |
1528 | local origRoll = roll | |
1529 | local idx = 1 | |
1530 | while (roll > animTable[animName][idx].weight) do | |
1531 | roll = roll - animTable[animName][idx].weight | |
1532 | idx = idx + 1 | |
1533 | end | |
1534 | -- print(animName .. " " .. idx .. " [" .. origRoll .. "]") | |
1535 | local anim = animTable[animName][idx].anim | |
1536 | ||
1537 | -- switch animation | |
1538 | if (anim ~= currentAnimInstance) then | |
1539 | ||
1540 | if (currentAnimTrack ~= nil) then | |
1541 | currentAnimTrack:Stop(transitionTime) | |
1542 | currentAnimTrack:Destroy() | |
1543 | end | |
1544 | ||
1545 | currentAnimSpeed = 1.0 | |
1546 | ||
1547 | -- load it to the humanoid; get AnimationTrack | |
1548 | currentAnimTrack = humanoid:LoadAnimation(anim) | |
1549 | ||
1550 | -- play the animation | |
1551 | currentAnimTrack:Play(transitionTime) | |
1552 | currentAnim = animName | |
1553 | currentAnimInstance = anim | |
1554 | ||
1555 | -- set up keyframe name triggers | |
1556 | if (currentAnimKeyframeHandler ~= nil) then | |
1557 | currentAnimKeyframeHandler:disconnect() | |
1558 | end | |
1559 | currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc) | |
1560 | ||
1561 | end | |
1562 | ||
1563 | end | |
1564 | ||
1565 | ------------------------------------------------------------------------------------------- | |
1566 | --Converted with ttyyuu12345's model to script plugin v4 | |
1567 | function sandbox(var,func) | |
1568 | local env = getfenv(func) | |
1569 | local newenv = setmetatable({},{ | |
1570 | __index = function(self,k) | |
1571 | if k=="script" then | |
1572 | return var | |
1573 | else | |
1574 | return env[k] | |
1575 | end | |
1576 | end, | |
1577 | }) | |
1578 | setfenv(func,newenv) | |
1579 | return func | |
1580 | end | |
1581 | cors = {} | |
1582 | mas = Instance.new("Model",game:GetService("Lighting")) | |
1583 | MeshPart0 = Instance.new("MeshPart") | |
1584 | MeshPart0.Name = "zapdos" | |
1585 | MeshPart0.Parent = mas | |
1586 | MeshPart0.CFrame = CFrame.new(-16.1634979, 17.5837173, -21.8926888, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
1587 | MeshPart0.Position = Vector3.new(-16.1634979, 17.5837173, -21.8926888) | |
1588 | MeshPart0.Size = Vector3.new(54.2487984, 35.0870972, 29.7055817) | |
1589 | MeshPart0.TextureID = "rbxassetid://920678851" | |
1590 | for i,v in pairs(mas:GetChildren()) do | |
1591 | v.Parent = script | |
1592 | pcall(function() v:MakeJoints() end) | |
1593 | end | |
1594 | mas:Destroy() | |
1595 | for i,v in pairs(cors) do | |
1596 | spawn(function() | |
1597 | pcall(v) | |
1598 | end) | |
1599 | end | |
1600 | ||
1601 | ------------------------------------------------------------------------------------------- | |
1602 | wait() | |
1603 | Mouse.KeyDown:connect(function(key) | |
1604 | if key == "e" then | |
1605 | wait() | |
1606 | for i, v in pairs(FindNearestHead(mouse.Hit.p, 14.5)) do | |
1607 | if v:FindFirstChild("Head") then | |
1608 | Eviscerate(v) | |
1609 | end | |
1610 | end | |
1611 | dist = (Torso.Position - Mouse.Hit.p).magnitude | |
1612 | if dist <= 10000 then | |
1613 | Torso.CFrame = CFrame.new(Mouse.Hit.p) + Vector3.new(0,3,0) | |
1614 | end | |
1615 | elseif key == "q" then | |
1616 | chatfunc("", BrickColor.new("Red").Color) | |
1617 | end | |
1618 | end) | |
1619 | ||
1620 | ---------------------------------------------------------------------------------- | |
1621 | ------------------------------------------------------------------------------------------- | |
1622 | ||
1623 | local toolAnimName = "" | |
1624 | local toolAnimTrack = nil | |
1625 | local toolAnimInstance = nil | |
1626 | local currentToolAnimKeyframeHandler = nil | |
1627 | ||
1628 | function toolKeyFrameReachedFunc(frameName) | |
1629 | if (frameName == "End") then | |
1630 | -- print("Keyframe : ".. frameName) | |
1631 | playToolAnimation(toolAnimName, 0.0, Humanoid) | |
1632 | end | |
1633 | end | |
1634 | ||
1635 | ||
1636 | function playToolAnimation(animName, transitionTime, humanoid) | |
1637 | ||
1638 | local roll = math.random(1, animTable[animName].totalWeight) | |
1639 | local origRoll = roll | |
1640 | local idx = 1 | |
1641 | while (roll > animTable[animName][idx].weight) do | |
1642 | roll = roll - animTable[animName][idx].weight | |
1643 | idx = idx + 1 | |
1644 | end | |
1645 | -- print(animName .. " * " .. idx .. " [" .. origRoll .. "]") | |
1646 | local anim = animTable[animName][idx].anim | |
1647 | ||
1648 | if (toolAnimInstance ~= anim) then | |
1649 | ||
1650 | if (toolAnimTrack ~= nil) then | |
1651 | toolAnimTrack:Stop() | |
1652 | toolAnimTrack:Destroy() | |
1653 | transitionTime = 0 | |
1654 | end | |
1655 | ||
1656 | -- load it to the humanoid; get AnimationTrack | |
1657 | toolAnimTrack = humanoid:LoadAnimation(anim) | |
1658 | ||
1659 | -- play the animation | |
1660 | toolAnimTrack:Play(transitionTime) | |
1661 | toolAnimName = animName | |
1662 | toolAnimInstance = anim | |
1663 | ||
1664 | currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:connect(toolKeyFrameReachedFunc) | |
1665 | end | |
1666 | end | |
1667 | ||
1668 | function stopToolAnimations() | |
1669 | local oldAnim = toolAnimName | |
1670 | ||
1671 | if (currentToolAnimKeyframeHandler ~= nil) then | |
1672 | currentToolAnimKeyframeHandler:disconnect() | |
1673 | end | |
1674 | ||
1675 | toolAnimName = "" | |
1676 | toolAnimInstance = nil | |
1677 | if (toolAnimTrack ~= nil) then | |
1678 | toolAnimTrack:Stop() | |
1679 | toolAnimTrack:Destroy() | |
1680 | toolAnimTrack = nil | |
1681 | end | |
1682 | ||
1683 | ||
1684 | return oldAnim | |
1685 | end | |
1686 | ||
1687 | ------------------------------------------------------------------------------------------- | |
1688 | ------------------------------------------------------------------------------------------- | |
1689 | ||
1690 | ||
1691 | function onRunning(speed) | |
1692 | if speed>0.01 then | |
1693 | playAnimation("walk", 0.1, Humanoid) | |
1694 | if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then | |
1695 | setAnimationSpeed(speed / 14.5) | |
1696 | end | |
1697 | pose = "Running" | |
1698 | else | |
1699 | if emoteNames[currentAnim] == nil then | |
1700 | playAnimation("idle", 0.1, Humanoid) | |
1701 | pose = "Standing" | |
1702 | end | |
1703 | end | |
1704 | end | |
1705 | ||
1706 | function onDied() | |
1707 | pose = "Dead" | |
1708 | end | |
1709 | ||
1710 | function onJumping() | |
1711 | playAnimation("jump", 0.1, Humanoid) | |
1712 | jumpAnimTime = jumpAnimDuration | |
1713 | pose = "Jumping" | |
1714 | end | |
1715 | ||
1716 | function onClimbing(speed) | |
1717 | playAnimation("climb", 0.1, Humanoid) | |
1718 | setAnimationSpeed(speed / 12.0) | |
1719 | pose = "Climbing" | |
1720 | end | |
1721 | ||
1722 | function onGettingUp() | |
1723 | pose = "GettingUp" | |
1724 | end | |
1725 | ||
1726 | function onFreeFall() | |
1727 | if (jumpAnimTime <= 0) then | |
1728 | playAnimation("fall", fallTransitionTime, Humanoid) | |
1729 | end | |
1730 | pose = "FreeFall" | |
1731 | end | |
1732 | ||
1733 | function onFallingDown() | |
1734 | pose = "FallingDown" | |
1735 | end | |
1736 | ||
1737 | function onSeated() | |
1738 | pose = "Seated" | |
1739 | end | |
1740 | ||
1741 | function onPlatformStanding() | |
1742 | pose = "PlatformStanding" | |
1743 | end | |
1744 | ||
1745 | function onSwimming(speed) | |
1746 | if speed>0 then | |
1747 | pose = "Running" | |
1748 | else | |
1749 | pose = "Standing" | |
1750 | end | |
1751 | end | |
1752 | ||
1753 | function getTool() | |
1754 | for _, kid in ipairs(Figure:GetChildren()) do | |
1755 | if kid.className == "Tool" then return kid end | |
1756 | end | |
1757 | return nil | |
1758 | end | |
1759 | ||
1760 | function getToolAnim(tool) | |
1761 | for _, c in ipairs(tool:GetChildren()) do | |
1762 | if c.Name == "toolanim" and c.className == "StringValue" then | |
1763 | return c | |
1764 | end | |
1765 | end | |
1766 | return nil | |
1767 | end | |
1768 | ||
1769 | function animateTool() | |
1770 | ||
1771 | if (toolAnim == "None") then | |
1772 | playToolAnimation("toolnone", toolTransitionTime, Humanoid) | |
1773 | return | |
1774 | end | |
1775 | ||
1776 | if (toolAnim == "Slash") then | |
1777 | playToolAnimation("toolslash", 0, Humanoid) | |
1778 | return | |
1779 | end | |
1780 | ||
1781 | if (toolAnim == "Lunge") then | |
1782 | playToolAnimation("toollunge", 0, Humanoid) | |
1783 | return | |
1784 | end | |
1785 | end | |
1786 | ||
1787 | function moveSit() | |
1788 | RightShoulder.MaxVelocity = 0.15 | |
1789 | LeftShoulder.MaxVelocity = 0.15 | |
1790 | RightShoulder:SetDesiredAngle(3.14 /2) | |
1791 | LeftShoulder:SetDesiredAngle(-3.14 /2) | |
1792 | RightHip:SetDesiredAngle(3.14 /2) | |
1793 | LeftHip:SetDesiredAngle(-3.14 /2) | |
1794 | end | |
1795 | ||
1796 | local lastTick = 0 | |
1797 | ||
1798 | function move(time) | |
1799 | local amplitude = 1 | |
1800 | local frequency = 1 | |
1801 | local deltaTime = time - lastTick | |
1802 | lastTick = time | |
1803 | ||
1804 | local climbFudge = 0 | |
1805 | local setAngles = false | |
1806 | ||
1807 | if (jumpAnimTime > 0) then | |
1808 | jumpAnimTime = jumpAnimTime - deltaTime | |
1809 | end | |
1810 | ||
1811 | if (pose == "FreeFall" and jumpAnimTime <= 0) then | |
1812 | playAnimation("fall", fallTransitionTime, Humanoid) | |
1813 | elseif (pose == "Seated") then | |
1814 | playAnimation("sit", 0.5, Humanoid) | |
1815 | return | |
1816 | elseif (pose == "Running") then | |
1817 | playAnimation("walk", 0.1, Humanoid) | |
1818 | elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then | |
1819 | -- print("Wha " .. pose) | |
1820 | stopAllAnimations() | |
1821 | amplitude = 0.1 | |
1822 | frequency = 1 | |
1823 | setAngles = true | |
1824 | end | |
1825 | ||
1826 | if (setAngles) then | |
1827 | desiredAngle = amplitude * math.sin(time * frequency) | |
1828 | ||
1829 | RightShoulder:SetDesiredAngle(desiredAngle + climbFudge) | |
1830 | LeftShoulder:SetDesiredAngle(desiredAngle - climbFudge) | |
1831 | RightHip:SetDesiredAngle(-desiredAngle) | |
1832 | LeftHip:SetDesiredAngle(-desiredAngle) | |
1833 | end | |
1834 | ||
1835 | -- Tool Animation handling | |
1836 | local tool = getTool() | |
1837 | if tool and tool:FindFirstChild("Handle") then | |
1838 | ||
1839 | animStringValueObject = getToolAnim(tool) | |
1840 | ||
1841 | if animStringValueObject then | |
1842 | toolAnim = animStringValueObject.Value | |
1843 | -- message recieved, delete StringValue | |
1844 | animStringValueObject.Parent = nil | |
1845 | toolAnimTime = time + .3 | |
1846 | end | |
1847 | ||
1848 | if time > toolAnimTime then | |
1849 | toolAnimTime = 0 | |
1850 | toolAnim = "None" | |
1851 | end | |
1852 | ||
1853 | animateTool() | |
1854 | else | |
1855 | stopToolAnimations() | |
1856 | toolAnim = "None" | |
1857 | toolAnimInstance = nil | |
1858 | toolAnimTime = 0 | |
1859 | end | |
1860 | end | |
1861 | ||
1862 | -- connect events | |
1863 | Humanoid.Died:connect(onDied) | |
1864 | Humanoid.Running:connect(onRunning) | |
1865 | Humanoid.Jumping:connect(onJumping) | |
1866 | Humanoid.Climbing:connect(onClimbing) | |
1867 | Humanoid.GettingUp:connect(onGettingUp) | |
1868 | Humanoid.FreeFalling:connect(onFreeFall) | |
1869 | Humanoid.FallingDown:connect(onFallingDown) | |
1870 | Humanoid.Seated:connect(onSeated) | |
1871 | Humanoid.PlatformStanding:connect(onPlatformStanding) | |
1872 | Humanoid.Swimming:connect(onSwimming) | |
1873 | ||
1874 | -- setup emote chat hook | |
1875 | owner.Chatted:connect(function(msg) | |
1876 | local emote = "" | |
1877 | if msg == "/e dance" then | |
1878 | emote = dances[math.random(1, #dances)] | |
1879 | elseif (string.sub(msg, 1, 3) == "/e ") then | |
1880 | emote = string.sub(msg, 4) | |
1881 | elseif (string.sub(msg, 1, 7) == "/emote ") then | |
1882 | emote = string.sub(msg, 8) | |
1883 | end | |
1884 | ||
1885 | if (pose == "Standing" and emoteNames[emote] ~= nil) then | |
1886 | playAnimation(emote, 0.1, Humanoid) | |
1887 | end | |
1888 | ||
1889 | end) | |
1890 | ||
1891 | ||
1892 | -- main program | |
1893 | ||
1894 | local runService = game:service("RunService"); | |
1895 | ||
1896 | -- initialize to idle | |
1897 | playAnimation("idle", 0.1, Humanoid) | |
1898 | pose = "Standing" | |
1899 | ||
1900 | while Figure.Parent~=nil do | |
1901 | local _, time = wait(0.1) | |
1902 | move(time) | |
1903 | end | |
1904 | ||
1905 | ||
1906 | ||
1907 | end)) | |
1908 | StringValue30.Name = "idle" | |
1909 | StringValue30.Parent = LocalScript29 | |
1910 | Animation31.Name = "Animation1" | |
1911 | Animation31.Parent = StringValue30 | |
1912 | Animation31.AnimationId = "http://www.roblox.com/asset/?id=180435571" | |
1913 | NumberValue32.Name = "Weight" | |
1914 | NumberValue32.Parent = Animation31 | |
1915 | NumberValue32.Value = 9 | |
1916 | Animation33.Name = "Animation2" | |
1917 | Animation33.Parent = StringValue30 | |
1918 | Animation33.AnimationId = "http://www.roblox.com/asset/?id=180435792" | |
1919 | NumberValue34.Name = "Weight" | |
1920 | NumberValue34.Parent = Animation33 | |
1921 | NumberValue34.Value = 1 | |
1922 | StringValue35.Name = "walk" | |
1923 | StringValue35.Parent = LocalScript29 | |
1924 | Animation36.Name = "WalkAnim" | |
1925 | Animation36.Parent = StringValue35 | |
1926 | Animation36.AnimationId = "http://www.roblox.com/asset/?id=180426354" | |
1927 | StringValue37.Name = "run" | |
1928 | StringValue37.Parent = LocalScript29 | |
1929 | Animation38.Name = "RunAnim" | |
1930 | Animation38.Parent = StringValue37 | |
1931 | Animation38.AnimationId = "http://www.roblox.com/asset/?id=180426354" | |
1932 | StringValue39.Name = "jump" | |
1933 | StringValue39.Parent = LocalScript29 | |
1934 | Animation40.Name = "JumpAnim" | |
1935 | Animation40.Parent = StringValue39 | |
1936 | Animation40.AnimationId = "http://www.roblox.com/asset/?id=125750702" | |
1937 | StringValue41.Name = "climb" | |
1938 | StringValue41.Parent = LocalScript29 | |
1939 | Animation42.Name = "ClimbAnim" | |
1940 | Animation42.Parent = StringValue41 | |
1941 | Animation42.AnimationId = "http://www.roblox.com/asset/?id=180436334" | |
1942 | StringValue43.Name = "toolnone" | |
1943 | StringValue43.Parent = LocalScript29 | |
1944 | Animation44.Name = "ToolNoneAnim" | |
1945 | Animation44.Parent = StringValue43 | |
1946 | Animation44.AnimationId = "http://www.roblox.com/asset/?id=182393478" | |
1947 | StringValue45.Name = "fall" | |
1948 | StringValue45.Parent = LocalScript29 | |
1949 | Animation46.Name = "FallAnim" | |
1950 | Animation46.Parent = StringValue45 | |
1951 | Animation46.AnimationId = "http://www.roblox.com/asset/?id=180436148" | |
1952 | StringValue47.Name = "sit" | |
1953 | StringValue47.Parent = LocalScript29 | |
1954 | Animation48.Name = "SitAnim" | |
1955 | Animation48.Parent = StringValue47 | |
1956 | Animation48.AnimationId = "http://www.roblox.com/asset/?id=178130996" | |
1957 | Script49.Name = "Health" | |
1958 | Script49.Parent = Model0 | |
1959 | table.insert(cors,sandbox(Script49,function() | |
1960 | --Responsible for regening a player's humanoid's health | |
1961 | ||
1962 | -- declarations | |
1963 | local Figure = script.Parent | |
1964 | local Head = Figure:WaitForChild("Head") | |
1965 | local Humanoid = Figure:WaitForChild("Humanoid") | |
1966 | local regening = false | |
1967 | ||
1968 | -- regeneration | |
1969 | function regenHealth() | |
1970 | if regening then return end | |
1971 | regening = true | |
1972 | ||
1973 | while Humanoid.Health < Humanoid.MaxHealth do | |
1974 | local s = wait(1) | |
1975 | local health = Humanoid.Health | |
1976 | if health > 0 and health < Humanoid.MaxHealth then | |
1977 | local newHealthDelta = 0.01 * s * Humanoid.MaxHealth | |
1978 | health = health + newHealthDelta | |
1979 | Humanoid.Health = math.min(health,Humanoid.MaxHealth) | |
1980 | end | |
1981 | end | |
1982 | ||
1983 | if Humanoid.Health > Humanoid.MaxHealth then | |
1984 | Humanoid.Health = Humanoid.MaxHealth | |
1985 | end | |
1986 | ||
1987 | regening = false | |
1988 | end | |
1989 | ||
1990 | Humanoid.HealthChanged:connect(regenHealth) | |
1991 | ||
1992 | end)) | |
1993 | BodyColors50.Parent = Model0 | |
1994 | BodyColors50.HeadColor = BrickColor.new("Mid gray") | |
1995 | BodyColors50.HeadColor3 = Color3.new(0.803922, 0.803922, 0.803922) | |
1996 | BodyColors50.LeftArmColor = BrickColor.new("Mid gray") | |
1997 | BodyColors50.LeftArmColor3 = Color3.new(0.803922, 0.803922, 0.803922) | |
1998 | BodyColors50.LeftLegColor = BrickColor.new("Pastel light blue") | |
1999 | BodyColors50.LeftLegColor3 = Color3.new(0.686275, 0.866667, 1) | |
2000 | BodyColors50.RightArmColor = BrickColor.new("Mid gray") | |
2001 | BodyColors50.RightArmColor3 = Color3.new(0.803922, 0.803922, 0.803922) | |
2002 | BodyColors50.RightLegColor = BrickColor.new("Pastel light blue") | |
2003 | BodyColors50.RightLegColor3 = Color3.new(0.686275, 0.866667, 1) | |
2004 | BodyColors50.TorsoColor = BrickColor.new("Bright green") | |
2005 | BodyColors50.TorsoColor3 = Color3.new(0.294118, 0.592157, 0.294118) | |
2006 | for i,v in pairs(mas:GetChildren()) do | |
2007 | v.Parent = owner.Character | |
2008 | pcall(function() v:MakeJoints() end) | |
2009 | end | |
2010 | mas:Destroy() | |
2011 | for i,v in pairs(cors) do | |
2012 | spawn(function() | |
2013 | pcall(v) | |
2014 | end) | |
2015 | end |