SHOW:
|
|
- or go back to the newest paste.
1 | --Converted with ttyyuu12345's model to script plugin v4 | |
2 | function sandbox(var,func) | |
3 | local env = getfenv(func) | |
4 | local newenv = setmetatable({},{ | |
5 | __index = function(self,k) | |
6 | if k=="script" then | |
7 | return var | |
8 | else | |
9 | return env[k] | |
10 | end | |
11 | end, | |
12 | }) | |
13 | setfenv(func,newenv) | |
14 | return func | |
15 | end | |
16 | cors = {} | |
17 | mas = Instance.new("Model",game:GetService("Lighting")) | |
18 | Script0 = Instance.new("Script") | |
19 | Model1 = Instance.new("Model") | |
20 | Part2 = Instance.new("Part") | |
21 | MeshPart3 = Instance.new("MeshPart") | |
22 | Motor6D4 = Instance.new("Motor6D") | |
23 | MeshPart5 = Instance.new("MeshPart") | |
24 | Motor6D6 = Instance.new("Motor6D") | |
25 | MeshPart7 = Instance.new("MeshPart") | |
26 | Motor6D8 = Instance.new("Motor6D") | |
27 | MeshPart9 = Instance.new("MeshPart") | |
28 | Motor6D10 = Instance.new("Motor6D") | |
29 | MeshPart11 = Instance.new("MeshPart") | |
30 | Motor6D12 = Instance.new("Motor6D") | |
31 | MeshPart13 = Instance.new("MeshPart") | |
32 | Motor6D14 = Instance.new("Motor6D") | |
33 | MeshPart15 = Instance.new("MeshPart") | |
34 | Motor6D16 = Instance.new("Motor6D") | |
35 | MeshPart17 = Instance.new("MeshPart") | |
36 | Motor6D18 = Instance.new("Motor6D") | |
37 | MeshPart19 = Instance.new("MeshPart") | |
38 | Motor6D20 = Instance.new("Motor6D") | |
39 | MeshPart21 = Instance.new("MeshPart") | |
40 | Motor6D22 = Instance.new("Motor6D") | |
41 | MeshPart23 = Instance.new("MeshPart") | |
42 | Motor6D24 = Instance.new("Motor6D") | |
43 | MeshPart25 = Instance.new("MeshPart") | |
44 | Motor6D26 = Instance.new("Motor6D") | |
45 | MeshPart27 = Instance.new("MeshPart") | |
46 | Motor6D28 = Instance.new("Motor6D") | |
47 | MeshPart29 = Instance.new("MeshPart") | |
48 | Motor6D30 = Instance.new("Motor6D") | |
49 | MeshPart31 = Instance.new("MeshPart") | |
50 | Motor6D32 = Instance.new("Motor6D") | |
51 | Humanoid33 = Instance.new("Humanoid") | |
52 | Script34 = Instance.new("Script") | |
53 | StringValue35 = Instance.new("StringValue") | |
54 | Animation36 = Instance.new("Animation") | |
55 | StringValue37 = Instance.new("StringValue") | |
56 | Animation38 = Instance.new("Animation") | |
57 | StringValue39 = Instance.new("StringValue") | |
58 | Animation40 = Instance.new("Animation") | |
59 | NumberValue41 = Instance.new("NumberValue") | |
60 | Animation42 = Instance.new("Animation") | |
61 | NumberValue43 = Instance.new("NumberValue") | |
62 | StringValue44 = Instance.new("StringValue") | |
63 | Animation45 = Instance.new("Animation") | |
64 | StringValue46 = Instance.new("StringValue") | |
65 | Animation47 = Instance.new("Animation") | |
66 | StringValue48 = Instance.new("StringValue") | |
67 | Animation49 = Instance.new("Animation") | |
68 | StringValue50 = Instance.new("StringValue") | |
69 | Animation51 = Instance.new("Animation") | |
70 | StringValue52 = Instance.new("StringValue") | |
71 | Animation53 = Instance.new("Animation") | |
72 | StringValue54 = Instance.new("StringValue") | |
73 | Animation55 = Instance.new("Animation") | |
74 | StringValue56 = Instance.new("StringValue") | |
75 | Animation57 = Instance.new("Animation") | |
76 | Script58 = Instance.new("Script") | |
77 | LocalScript59 = Instance.new("LocalScript") | |
78 | Script60 = Instance.new("Script") | |
79 | LocalScript61 = Instance.new("LocalScript") | |
80 | ObjectValue62 = Instance.new("ObjectValue") | |
81 | Script0.Name = "abortion" | |
82 | Script0.Parent = mas | |
83 | table.insert(cors,sandbox(Script0,function() | |
84 | wait(2) | |
85 | - | local plr = game.Players["7_qz"] |
85 | + | local plr = game.Players["TameDoNotClick"] |
86 | local chr = script.Model | |
87 | script.LocalScript.Obj.Value = chr | |
88 | for i,v in pairs(chr:GetChildren()) do | |
89 | if v:IsA("MeshPart") or v:IsA("Part") then | |
90 | v.Anchored = false | |
91 | end | |
92 | end | |
93 | ||
94 | plr.Character = chr | |
95 | ||
96 | local ae = script.LocalScript:Clone() | |
97 | ae.Parent = chr | |
98 | ae.Disabled = false | |
99 | chr.Parent = workspace | |
100 | script:Destroy() | |
101 | end)) | |
102 | Model1.Parent = Script0 | |
103 | Part2.Name = "HumanoidRootPart" | |
104 | Part2.Parent = Model1 | |
105 | Part2.CFrame = CFrame.new(-118.261124, 368.847595, 128.503281, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
106 | Part2.Position = Vector3.new(-118.261124, 368.847595, 128.503281) | |
107 | Part2.Transparency = 1 | |
108 | Part2.Size = Vector3.new(2, 2, 1) | |
109 | Part2.Anchored = true | |
110 | MeshPart3.Name = "Head" | |
111 | MeshPart3.Parent = Model1 | |
112 | MeshPart3.CFrame = CFrame.new(-118.298134, 370.732788, 128.527603, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
113 | MeshPart3.Position = Vector3.new(-118.298134, 370.732788, 128.527603) | |
114 | MeshPart3.Size = Vector3.new(0.558326721, 1.12706757, 0.824303746) | |
115 | MeshPart3.Anchored = true | |
116 | MeshPart3.TextureID = "http://roblox.com/asset/?id=1575203913 " | |
117 | Motor6D4.Name = "Neck" | |
118 | Motor6D4.Parent = MeshPart3 | |
119 | Motor6D4.C0 = CFrame.new(-3.72726499e-05, 0.604157209, 0.0636235774, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
120 | Motor6D4.C1 = CFrame.new(0.037007343, -0.297998428, -0.0244880002, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
121 | Motor6D4.Part0 = MeshPart17 | |
122 | Motor6D4.Part1 = MeshPart3 | |
123 | Motor6D4.part1 = MeshPart3 | |
124 | MeshPart5.Name = "LeftHand" | |
125 | MeshPart5.Parent = Model1 | |
126 | MeshPart5.CFrame = CFrame.new(-119.415169, 368.669464, 128.200546, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
127 | MeshPart5.Position = Vector3.new(-119.415169, 368.669464, 128.200546) | |
128 | MeshPart5.Size = Vector3.new(0.349442005, 0.683714926, 0.406895608) | |
129 | MeshPart5.Anchored = true | |
130 | MeshPart5.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
131 | Motor6D6.Name = "LeftWrist" | |
132 | Motor6D6.Parent = MeshPart5 | |
133 | Motor6D6.C0 = CFrame.new(0.0862908363, -0.735850811, 0.030328406, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
134 | Motor6D6.C1 = CFrame.new(0.273083448, -0.162624002, 0.302725077, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
135 | Motor6D6.Part0 = MeshPart7 | |
136 | Motor6D6.Part1 = MeshPart5 | |
137 | Motor6D6.part1 = MeshPart5 | |
138 | MeshPart7.Name = "LeftLowerArm" | |
139 | MeshPart7.Parent = Model1 | |
140 | MeshPart7.CFrame = CFrame.new(-119.228378, 369.242676, 128.472946, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
141 | MeshPart7.Position = Vector3.new(-119.228378, 369.242676, 128.472946) | |
142 | MeshPart7.Size = Vector3.new(0.486420631, 0.680185199, 0.497122139) | |
143 | MeshPart7.Anchored = true | |
144 | MeshPart7.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
145 | Motor6D8.Name = "LeftElbow" | |
146 | Motor6D8.Parent = MeshPart7 | |
147 | Motor6D8.C0 = CFrame.new(-0.23034811, -0.515464664, -0.216402858, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
148 | Motor6D8.C1 = CFrame.new(0.0862905979, 0.0953008235, 0.0303284079, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
149 | Motor6D8.Part0 = MeshPart9 | |
150 | Motor6D8.Part1 = MeshPart7 | |
151 | Motor6D8.part1 = MeshPart7 | |
152 | MeshPart9.Name = "LeftUpperArm" | |
153 | MeshPart9.Parent = Model1 | |
154 | MeshPart9.CFrame = CFrame.new(-118.911743, 369.853455, 128.719681, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
155 | MeshPart9.Position = Vector3.new(-118.911743, 369.853455, 128.719681) | |
156 | MeshPart9.Size = Vector3.new(0.604062498, 0.909634709, 0.639819801) | |
157 | MeshPart9.Anchored = true | |
158 | MeshPart9.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
159 | Motor6D10.Name = "LeftShoulder" | |
160 | Motor6D10.Parent = MeshPart9 | |
161 | Motor6D10.C0 = CFrame.new(-0.587371826, 0.424993038, 0.0638954192, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
162 | Motor6D10.C1 = CFrame.new(0.0632876158, 0.402154207, -0.216287896, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
163 | Motor6D10.Part0 = MeshPart17 | |
164 | Motor6D10.Part1 = MeshPart9 | |
165 | Motor6D10.part1 = MeshPart9 | |
166 | MeshPart11.Name = "RightHand" | |
167 | MeshPart11.Parent = Model1 | |
168 | MeshPart11.CFrame = CFrame.new(-117.107231, 368.66745, 128.200562, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
169 | MeshPart11.Position = Vector3.new(-117.107231, 368.66745, 128.200562) | |
170 | MeshPart11.Size = Vector3.new(0.349441767, 0.67964983, 0.406895608) | |
171 | MeshPart11.Anchored = true | |
172 | MeshPart11.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
173 | Motor6D12.Name = "RightWrist" | |
174 | Motor6D12.Parent = MeshPart11 | |
175 | Motor6D12.C0 = CFrame.new(-0.0830709338, -0.737294018, 0.0290398747, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
176 | Motor6D12.C1 = CFrame.new(-0.272919953, -0.160591334, 0.302725077, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
177 | Motor6D12.Part0 = MeshPart13 | |
178 | Motor6D12.Part1 = MeshPart11 | |
179 | Motor6D12.part1 = MeshPart11 | |
180 | MeshPart13.Name = "RightLowerArm" | |
181 | MeshPart13.Parent = Model1 | |
182 | MeshPart13.CFrame = CFrame.new(-117.297081, 369.244141, 128.474243, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
183 | MeshPart13.Position = Vector3.new(-117.297081, 369.244141, 128.474243) | |
184 | MeshPart13.Size = Vector3.new(0.485559523, 0.683071792, 0.499699205) | |
185 | MeshPart13.Anchored = true | |
186 | MeshPart13.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
187 | Motor6D14.Name = "RightElbow" | |
188 | Motor6D14.Parent = MeshPart13 | |
189 | Motor6D14.C0 = CFrame.new(0.225879133, -0.510890603, -0.0778696835, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
190 | Motor6D14.C1 = CFrame.new(-0.0830711126, 0.0938575268, 0.0290398747, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
191 | Motor6D14.Part0 = MeshPart15 | |
192 | Motor6D14.Part1 = MeshPart13 | |
193 | Motor6D14.part1 = MeshPart13 | |
194 | MeshPart15.Name = "RightUpperArm" | |
195 | MeshPart15.Parent = Model1 | |
196 | MeshPart15.CFrame = CFrame.new(-117.606033, 369.848877, 128.581146, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
197 | MeshPart15.Position = Vector3.new(-117.606033, 369.848877, 128.581146) | |
198 | MeshPart15.Size = Vector3.new(0.595734, 0.918782651, 0.36275351) | |
199 | MeshPart15.Anchored = true | |
200 | MeshPart15.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
201 | Motor6D16.Name = "RightShoulder" | |
202 | Motor6D16.Parent = MeshPart15 | |
203 | Motor6D16.C0 = CFrame.new(0.587271214, 0.424993038, 0.0635934696, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
204 | Motor6D16.C1 = CFrame.new(-0.0677824616, 0.406728268, -0.0780566707, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
205 | Motor6D16.Part0 = MeshPart17 | |
206 | Motor6D16.Part1 = MeshPart15 | |
207 | Motor6D16.part1 = MeshPart15 | |
208 | MeshPart17.Name = "UpperTorso" | |
209 | MeshPart17.Parent = Model1 | |
210 | MeshPart17.CFrame = CFrame.new(-118.261086, 369.830627, 128.439499, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
211 | MeshPart17.Position = Vector3.new(-118.261086, 369.830627, 128.439499) | |
212 | MeshPart17.Size = Vector3.new(1.14802361, 1.31227541, 0.832659066) | |
213 | MeshPart17.Anchored = true | |
214 | MeshPart17.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
215 | Motor6D18.Name = "Waist" | |
216 | Motor6D18.Parent = MeshPart17 | |
217 | Motor6D18.C0 = CFrame.new(8.15391541e-05, 0.273116827, 0.0413134396, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
218 | Motor6D18.C1 = CFrame.new(-3.72827053e-05, -0.608006954, 0.0637804568, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
219 | Motor6D18.Part0 = MeshPart31 | |
220 | Motor6D18.Part1 = MeshPart17 | |
221 | Motor6D18.part1 = MeshPart17 | |
222 | MeshPart19.Name = "LeftFoot" | |
223 | MeshPart19.Parent = Model1 | |
224 | MeshPart19.CFrame = CFrame.new(-118.787308, 366.023407, 128.407364, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
225 | MeshPart19.Position = Vector3.new(-118.787308, 366.023407, 128.407364) | |
226 | MeshPart19.Size = Vector3.new(0.394467115, 0.446739435, 0.816779494) | |
227 | MeshPart19.Anchored = true | |
228 | MeshPart19.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
229 | Motor6D20.Name = "LeftAnkle" | |
230 | Motor6D20.Parent = MeshPart19 | |
231 | Motor6D20.C0 = CFrame.new(0.130149275, -0.794970036, -0.0444255695, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
232 | Motor6D20.C1 = CFrame.new(0.216528803, 0.109665871, 0.0959113017, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
233 | Motor6D20.Part0 = MeshPart21 | |
234 | Motor6D20.Part1 = MeshPart19 | |
235 | Motor6D20.part1 = MeshPart19 | |
236 | MeshPart21.Name = "LeftLowerLeg" | |
237 | MeshPart21.Parent = Model1 | |
238 | MeshPart21.CFrame = CFrame.new(-118.700928, 366.92804, 128.547699, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
239 | MeshPart21.Position = Vector3.new(-118.700928, 366.92804, 128.547699) | |
240 | MeshPart21.Size = Vector3.new(0.48820281, 1.49119866, 0.566404998) | |
241 | MeshPart21.Anchored = true | |
242 | MeshPart21.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
243 | Motor6D22.Name = "LeftKnee" | |
244 | Motor6D22.Parent = MeshPart21 | |
245 | Motor6D22.C0 = CFrame.new(0.0204916298, -0.762124181, 0.0624910519, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
246 | Motor6D22.C1 = CFrame.new(0.130149305, 0.588028312, -0.0444198772, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
247 | Motor6D22.Part0 = MeshPart23 | |
248 | Motor6D22.Part1 = MeshPart21 | |
249 | Motor6D22.part1 = MeshPart21 | |
250 | MeshPart23.Name = "LeftUpperLeg" | |
251 | MeshPart23.Parent = Model1 | |
252 | MeshPart23.CFrame = CFrame.new(-118.59127, 368.278198, 128.440781, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
253 | MeshPart23.Position = Vector3.new(-118.59127, 368.278198, 128.440781) | |
254 | MeshPart23.Size = Vector3.new(0.620733321, 1.55217934, 0.683645964) | |
255 | MeshPart23.Anchored = true | |
256 | MeshPart23.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
257 | Motor6D24.Name = "LeftHip" | |
258 | Motor6D24.Parent = MeshPart23 | |
259 | Motor6D24.C0 = CFrame.new(-0.309571236, -0.101883173, 0.0413134396, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
260 | Motor6D24.C1 = CFrame.new(0.0204916, 0.569408417, 0.062496528, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
261 | Motor6D24.Part0 = MeshPart31 | |
262 | Motor6D24.Part1 = MeshPart23 | |
263 | Motor6D24.part1 = MeshPart23 | |
264 | MeshPart25.Name = "RightFoot" | |
265 | MeshPart25.Parent = Model1 | |
266 | MeshPart25.CFrame = CFrame.new(-117.735107, 366.023376, 128.407349, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
267 | MeshPart25.Position = Vector3.new(-117.735107, 366.023376, 128.407349) | |
268 | MeshPart25.Size = Vector3.new(0.394466639, 0.446739197, 0.816779494) | |
269 | MeshPart25.Anchored = true | |
270 | MeshPart25.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
271 | Motor6D26.Name = "RightAnkle" | |
272 | Motor6D26.Parent = MeshPart25 | |
273 | Motor6D26.C0 = CFrame.new(-0.141433001, -0.846741319, 0.0336278155, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
274 | Motor6D26.C1 = CFrame.new(-0.215695024, 0.109664679, 0.0959582999, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
275 | Motor6D26.Part0 = MeshPart27 | |
276 | Motor6D26.Part1 = MeshPart25 | |
277 | Motor6D26.part1 = MeshPart25 | |
278 | MeshPart27.Name = "RightLowerLeg" | |
279 | MeshPart27.Parent = Model1 | |
280 | MeshPart27.CFrame = CFrame.new(-117.809372, 366.979797, 128.469681, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
281 | MeshPart27.Position = Vector3.new(-117.809372, 366.979797, 128.469681) | |
282 | MeshPart27.Size = Vector3.new(0.562960148, 1.63152242, 0.733001888) | |
283 | MeshPart27.Anchored = true | |
284 | MeshPart27.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
285 | Motor6D28.Name = "RightKnee" | |
286 | Motor6D28.Parent = MeshPart27 | |
287 | Motor6D28.C0 = CFrame.new(-0.022497654, -0.754441321, 0.0520723537, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
288 | Motor6D28.C1 = CFrame.new(-0.141433001, 0.536258936, 0.0336021259, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
289 | Motor6D28.Part0 = MeshPart29 | |
290 | Motor6D28.Part1 = MeshPart27 | |
291 | Motor6D28.part1 = MeshPart27 | |
292 | MeshPart29.Name = "RightUpperLeg" | |
293 | MeshPart29.Parent = Model1 | |
294 | MeshPart29.CFrame = CFrame.new(-117.928307, 368.270508, 128.451218, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
295 | MeshPart29.Position = Vector3.new(-117.928307, 368.270508, 128.451218) | |
296 | MeshPart29.Size = Vector3.new(0.596929073, 1.53314316, 0.662777305) | |
297 | MeshPart29.Anchored = true | |
298 | MeshPart29.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
299 | Motor6D30.Name = "RightHip" | |
300 | Motor6D30.Parent = MeshPart29 | |
301 | Motor6D30.C0 = CFrame.new(0.310404778, -0.101883173, 0.0413134396, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
302 | Motor6D30.C1 = CFrame.new(-0.022497654, 0.5770908, 0.0520622134, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
303 | Motor6D30.Part0 = MeshPart31 | |
304 | Motor6D30.Part1 = MeshPart29 | |
305 | Motor6D30.part1 = MeshPart29 | |
306 | MeshPart31.Name = "LowerTorso" | |
307 | MeshPart31.Parent = Model1 | |
308 | MeshPart31.CFrame = CFrame.new(-118.261208, 368.949493, 128.46196, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
309 | MeshPart31.Position = Vector3.new(-118.261208, 368.949493, 128.46196) | |
310 | MeshPart31.Size = Vector3.new(1.07167053, 0.688970566, 0.807805061) | |
311 | MeshPart31.Anchored = true | |
312 | MeshPart31.TextureID = "http://roblox.com/asset/?id=1575206613 " | |
313 | Motor6D32.Name = "Root" | |
314 | Motor6D32.Parent = MeshPart31 | |
315 | Motor6D32.C0 = CFrame.new(-0, 3.75157256e-08, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
316 | Motor6D32.C1 = CFrame.new(8.15391541e-05, -0.101883136, 0.0413134396, 1, 0, 0, 0, 1, 0, 0, 0, 1) | |
317 | Motor6D32.Part0 = Part2 | |
318 | Motor6D32.Part1 = MeshPart31 | |
319 | Motor6D32.part1 = MeshPart31 | |
320 | Humanoid33.Parent = Model1 | |
321 | Humanoid33.HipHeight = 2 | |
322 | Humanoid33.LeftLeg = MeshPart23 | |
323 | Humanoid33.RigType = Enum.HumanoidRigType.R15 | |
324 | Humanoid33.RightLeg = MeshPart29 | |
325 | Humanoid33.Torso = Part2 | |
326 | Script34.Name = "Animate" | |
327 | Script34.Parent = Model1 | |
328 | table.insert(cors,sandbox(Script34,function() | |
329 | function waitForChild(parent, childName) | |
330 | local child = parent:findFirstChild(childName) | |
331 | if child then return child end | |
332 | while true do | |
333 | child = parent.ChildAdded:wait() | |
334 | if child.Name==childName then return child end | |
335 | end | |
336 | end | |
337 | ||
338 | local Figure = script.Parent | |
339 | local Humanoid = waitForChild(Figure, "Humanoid") | |
340 | local pose = "Standing" | |
341 | ||
342 | local currentAnim = "" | |
343 | local currentAnimInstance = nil | |
344 | local currentAnimTrack = nil | |
345 | local currentAnimKeyframeHandler = nil | |
346 | local currentAnimSpeed = 1.0 | |
347 | local animTable = {} | |
348 | local animNames = { | |
349 | idle = { | |
350 | { id = "http://www.roblox.com/asset/?id=507766666", weight = 1 }, | |
351 | { id = "http://www.roblox.com/asset/?id=507766951", weight = 1 }, | |
352 | { id = "http://www.roblox.com/asset/?id=507766388", weight = 9 } | |
353 | }, | |
354 | walk = { | |
355 | { id = "http://www.roblox.com/asset/?id=507777826", weight = 10 } | |
356 | }, | |
357 | run = { | |
358 | { id = "http://www.roblox.com/asset/?id=507767714", weight = 10 } | |
359 | }, | |
360 | swim = { | |
361 | { id = "http://www.roblox.com/asset/?id=507784897", weight = 10 } | |
362 | }, | |
363 | swimidle = { | |
364 | { id = "http://www.roblox.com/asset/?id=507785072", weight = 10 } | |
365 | }, | |
366 | jump = { | |
367 | { id = "http://www.roblox.com/asset/?id=507765000", weight = 10 } | |
368 | }, | |
369 | fall = { | |
370 | { id = "http://www.roblox.com/asset/?id=507767968", weight = 10 } | |
371 | }, | |
372 | climb = { | |
373 | { id = "http://www.roblox.com/asset/?id=507765644", weight = 10 } | |
374 | }, | |
375 | sit = { | |
376 | { id = "http://www.roblox.com/asset/?id=507768133", weight = 10 } | |
377 | }, | |
378 | toolnone = { | |
379 | { id = "http://www.roblox.com/asset/?id=507768375", weight = 10 } | |
380 | }, | |
381 | toolslash = { | |
382 | { id = "http://www.roblox.com/asset/?id=507768375", weight = 10 } | |
383 | -- { id = "slash.xml", weight = 10 } | |
384 | }, | |
385 | toollunge = { | |
386 | { id = "http://www.roblox.com/asset/?id=507768375", weight = 10 } | |
387 | }, | |
388 | wave = { | |
389 | { id = "http://www.roblox.com/asset/?id=507770239", weight = 10 } | |
390 | }, | |
391 | point = { | |
392 | { id = "http://www.roblox.com/asset/?id=507770453", weight = 10 } | |
393 | }, | |
394 | dance = { | |
395 | { id = "http://www.roblox.com/asset/?id=507771019", weight = 10 }, | |
396 | { id = "http://www.roblox.com/asset/?id=507771955", weight = 10 }, | |
397 | { id = "http://www.roblox.com/asset/?id=507772104", weight = 10 } | |
398 | }, | |
399 | dance2 = { | |
400 | { id = "http://www.roblox.com/asset/?id=507776043", weight = 10 }, | |
401 | { id = "http://www.roblox.com/asset/?id=507776720", weight = 10 }, | |
402 | { id = "http://www.roblox.com/asset/?id=507776879", weight = 10 } | |
403 | }, | |
404 | dance3 = { | |
405 | { id = "http://www.roblox.com/asset/?id=507777268", weight = 10 }, | |
406 | { id = "http://www.roblox.com/asset/?id=507777451", weight = 10 }, | |
407 | { id = "http://www.roblox.com/asset/?id=507777623", weight = 10 } | |
408 | }, | |
409 | laugh = { | |
410 | { id = "http://www.roblox.com/asset/?id=507770818", weight = 10 } | |
411 | }, | |
412 | cheer = { | |
413 | { id = "http://www.roblox.com/asset/?id=507770677", weight = 10 } | |
414 | }, | |
415 | } | |
416 | ||
417 | -- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote | |
418 | local emoteNames = { wave = false, point = false, dance = true, dance2 = true, dance3 = true, laugh = false, cheer = false} | |
419 | ||
420 | math.randomseed(tick()) | |
421 | ||
422 | function configureAnimationSet(name, fileList) | |
423 | if (animTable[name] ~= nil) then | |
424 | for _, connection in pairs(animTable[name].connections) do | |
425 | connection:disconnect() | |
426 | end | |
427 | end | |
428 | animTable[name] = {} | |
429 | animTable[name].count = 0 | |
430 | animTable[name].totalWeight = 0 | |
431 | animTable[name].connections = {} | |
432 | ||
433 | -- check for config values | |
434 | local config = script:FindFirstChild(name) | |
435 | if (config ~= nil) then | |
436 | -- print("Loading anims " .. name) | |
437 | table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end)) | |
438 | table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end)) | |
439 | local idx = 1 | |
440 | for _, childPart in pairs(config:GetChildren()) do | |
441 | if (childPart:IsA("Animation")) then | |
442 | table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end)) | |
443 | animTable[name][idx] = {} | |
444 | animTable[name][idx].anim = childPart | |
445 | local weightObject = childPart:FindFirstChild("Weight") | |
446 | if (weightObject == nil) then | |
447 | animTable[name][idx].weight = 1 | |
448 | else | |
449 | animTable[name][idx].weight = weightObject.Value | |
450 | end | |
451 | animTable[name].count = animTable[name].count + 1 | |
452 | animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight | |
453 | -- print(name .. " [" .. idx .. "] " .. animTable[name][idx].anim.AnimationId .. " (" .. animTable[name][idx].weight .. ")") | |
454 | idx = idx + 1 | |
455 | end | |
456 | end | |
457 | end | |
458 | ||
459 | -- fallback to defaults | |
460 | if (animTable[name].count <= 0) then | |
461 | for idx, anim in pairs(fileList) do | |
462 | animTable[name][idx] = {} | |
463 | animTable[name][idx].anim = Instance.new("Animation") | |
464 | animTable[name][idx].anim.Name = name | |
465 | animTable[name][idx].anim.AnimationId = anim.id | |
466 | animTable[name][idx].weight = anim.weight | |
467 | animTable[name].count = animTable[name].count + 1 | |
468 | animTable[name].totalWeight = animTable[name].totalWeight + anim.weight | |
469 | -- print(name .. " [" .. idx .. "] " .. anim.id .. " (" .. anim.weight .. ")") | |
470 | end | |
471 | end | |
472 | end | |
473 | ||
474 | -- Setup animation objects | |
475 | function scriptChildModified(child) | |
476 | local fileList = animNames[child.Name] | |
477 | if (fileList ~= nil) then | |
478 | configureAnimationSet(child.Name, fileList) | |
479 | end | |
480 | end | |
481 | ||
482 | script.ChildAdded:connect(scriptChildModified) | |
483 | script.ChildRemoved:connect(scriptChildModified) | |
484 | ||
485 | ||
486 | for name, fileList in pairs(animNames) do | |
487 | configureAnimationSet(name, fileList) | |
488 | end | |
489 | ||
490 | -- ANIMATION | |
491 | ||
492 | -- declarations | |
493 | local toolAnim = "None" | |
494 | local toolAnimTime = 0 | |
495 | ||
496 | local jumpAnimTime = 0 | |
497 | local jumpAnimDuration = 0.31 | |
498 | ||
499 | local toolTransitionTime = 0.1 | |
500 | local fallTransitionTime = 0.2 | |
501 | ||
502 | -- functions | |
503 | ||
504 | function stopAllAnimations() | |
505 | local oldAnim = currentAnim | |
506 | ||
507 | -- return to idle if finishing an emote | |
508 | if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then | |
509 | oldAnim = "idle" | |
510 | end | |
511 | ||
512 | currentAnim = "" | |
513 | currentAnimInstance = nil | |
514 | if (currentAnimKeyframeHandler ~= nil) then | |
515 | currentAnimKeyframeHandler:disconnect() | |
516 | end | |
517 | ||
518 | if (currentAnimTrack ~= nil) then | |
519 | currentAnimTrack:Stop() | |
520 | currentAnimTrack:Destroy() | |
521 | currentAnimTrack = nil | |
522 | end | |
523 | return oldAnim | |
524 | end | |
525 | ||
526 | function setAnimationSpeed(speed) | |
527 | if speed ~= currentAnimSpeed then | |
528 | currentAnimSpeed = speed | |
529 | currentAnimTrack:AdjustSpeed(currentAnimSpeed) | |
530 | end | |
531 | end | |
532 | ||
533 | function keyFrameReachedFunc(frameName) | |
534 | if (frameName == "End") then | |
535 | -- print("Keyframe : ".. frameName) | |
536 | ||
537 | local repeatAnim = currentAnim | |
538 | -- return to idle if finishing an emote | |
539 | if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then | |
540 | repeatAnim = "idle" | |
541 | end | |
542 | ||
543 | local animSpeed = currentAnimSpeed | |
544 | playAnimation(repeatAnim, 0.15, Humanoid) | |
545 | setAnimationSpeed(animSpeed) | |
546 | end | |
547 | end | |
548 | ||
549 | -- Preload animations | |
550 | function playAnimation(animName, transitionTime, humanoid) | |
551 | ||
552 | local roll = math.random(1, animTable[animName].totalWeight) | |
553 | local origRoll = roll | |
554 | local idx = 1 | |
555 | while (roll > animTable[animName][idx].weight) do | |
556 | roll = roll - animTable[animName][idx].weight | |
557 | idx = idx + 1 | |
558 | end | |
559 | ||
560 | -- print(animName .. " " .. idx .. " [" .. origRoll .. "]") | |
561 | ||
562 | local anim = animTable[animName][idx].anim | |
563 | ||
564 | -- switch animation | |
565 | if (anim ~= currentAnimInstance) then | |
566 | ||
567 | if (currentAnimTrack ~= nil) then | |
568 | currentAnimTrack:Stop(transitionTime) | |
569 | currentAnimTrack:Destroy() | |
570 | end | |
571 | ||
572 | currentAnimSpeed = 1.0 | |
573 | ||
574 | -- load it to the humanoid; get AnimationTrack | |
575 | currentAnimTrack = humanoid:LoadAnimation(anim) | |
576 | ||
577 | -- play the animation | |
578 | currentAnimTrack:Play(transitionTime) | |
579 | currentAnim = animName | |
580 | currentAnimInstance = anim | |
581 | ||
582 | -- set up keyframe name triggers | |
583 | if (currentAnimKeyframeHandler ~= nil) then | |
584 | currentAnimKeyframeHandler:disconnect() | |
585 | end | |
586 | currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc) | |
587 | ||
588 | end | |
589 | ||
590 | end | |
591 | ||
592 | ------------------------------------------------------------------------------------------- | |
593 | ------------------------------------------------------------------------------------------- | |
594 | ||
595 | local toolAnimName = "" | |
596 | local toolAnimTrack = nil | |
597 | local toolAnimInstance = nil | |
598 | local currentToolAnimKeyframeHandler = nil | |
599 | ||
600 | function toolKeyFrameReachedFunc(frameName) | |
601 | if (frameName == "End") then | |
602 | -- print("Keyframe : ".. frameName) | |
603 | playToolAnimation(toolAnimName, 0.0, Humanoid) | |
604 | end | |
605 | end | |
606 | ||
607 | ||
608 | function playToolAnimation(animName, transitionTime, humanoid) | |
609 | ||
610 | local roll = math.random(1, animTable[animName].totalWeight) | |
611 | local origRoll = roll | |
612 | local idx = 1 | |
613 | while (roll > animTable[animName][idx].weight) do | |
614 | roll = roll - animTable[animName][idx].weight | |
615 | idx = idx + 1 | |
616 | end | |
617 | -- print(animName .. " * " .. idx .. " [" .. origRoll .. "]") | |
618 | local anim = animTable[animName][idx].anim | |
619 | ||
620 | if (toolAnimInstance ~= anim) then | |
621 | ||
622 | if (toolAnimTrack ~= nil) then | |
623 | toolAnimTrack:Stop() | |
624 | toolAnimTrack:Destroy() | |
625 | transitionTime = 0 | |
626 | end | |
627 | ||
628 | -- load it to the humanoid; get AnimationTrack | |
629 | toolAnimTrack = humanoid:LoadAnimation(anim) | |
630 | ||
631 | -- play the animation | |
632 | toolAnimTrack:Play(transitionTime) | |
633 | toolAnimName = animName | |
634 | toolAnimInstance = anim | |
635 | ||
636 | currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:connect(toolKeyFrameReachedFunc) | |
637 | end | |
638 | end | |
639 | ||
640 | function stopToolAnimations() | |
641 | local oldAnim = toolAnimName | |
642 | ||
643 | if (currentToolAnimKeyframeHandler ~= nil) then | |
644 | currentToolAnimKeyframeHandler:disconnect() | |
645 | end | |
646 | ||
647 | toolAnimName = "" | |
648 | toolAnimInstance = nil | |
649 | if (toolAnimTrack ~= nil) then | |
650 | toolAnimTrack:Stop() | |
651 | toolAnimTrack:Destroy() | |
652 | toolAnimTrack = nil | |
653 | end | |
654 | ||
655 | ||
656 | return oldAnim | |
657 | end | |
658 | ||
659 | ------------------------------------------------------------------------------------------- | |
660 | ------------------------------------------------------------------------------------------- | |
661 | ||
662 | ||
663 | function onRunning(speed) | |
664 | if speed > 0.01 then | |
665 | local scale = 15.0 | |
666 | playAnimation("walk", 0.1, Humanoid) | |
667 | setAnimationSpeed(speed / scale) | |
668 | pose = "Running" | |
669 | else | |
670 | if emoteNames[currentAnim] == nil then | |
671 | playAnimation("idle", 0.1, Humanoid) | |
672 | pose = "Standing" | |
673 | end | |
674 | end | |
675 | end | |
676 | ||
677 | function onDied() | |
678 | pose = "Dead" | |
679 | end | |
680 | ||
681 | function onJumping() | |
682 | playAnimation("jump", 0.1, Humanoid) | |
683 | jumpAnimTime = jumpAnimDuration | |
684 | pose = "Jumping" | |
685 | end | |
686 | ||
687 | function onClimbing(speed) | |
688 | local scale = 5.0 | |
689 | playAnimation("climb", 0.1, Humanoid) | |
690 | setAnimationSpeed(speed / scale) | |
691 | pose = "Climbing" | |
692 | end | |
693 | ||
694 | function onGettingUp() | |
695 | pose = "GettingUp" | |
696 | end | |
697 | ||
698 | function onFreeFall() | |
699 | if (jumpAnimTime <= 0) then | |
700 | playAnimation("fall", fallTransitionTime, Humanoid) | |
701 | end | |
702 | pose = "FreeFall" | |
703 | end | |
704 | ||
705 | function onFallingDown() | |
706 | pose = "FallingDown" | |
707 | end | |
708 | ||
709 | function onSeated() | |
710 | pose = "Seated" | |
711 | end | |
712 | ||
713 | function onPlatformStanding() | |
714 | pose = "PlatformStanding" | |
715 | end | |
716 | ||
717 | function onSwimming(speed) | |
718 | if speed > 1.00 then | |
719 | local scale = 10.0 | |
720 | playAnimation("swim", 0.4, Humanoid) | |
721 | setAnimationSpeed(speed / scale) | |
722 | pose = "Swimming" | |
723 | else | |
724 | playAnimation("swimidle", 0.4, Humanoid) | |
725 | pose = "Standing" | |
726 | end | |
727 | end | |
728 | ||
729 | function getTool() | |
730 | for _, kid in ipairs(Figure:GetChildren()) do | |
731 | if kid.className == "Tool" then return kid end | |
732 | end | |
733 | return nil | |
734 | end | |
735 | ||
736 | function getToolAnim(tool) | |
737 | for _, c in ipairs(tool:GetChildren()) do | |
738 | if c.Name == "toolanim" and c.className == "StringValue" then | |
739 | return c | |
740 | end | |
741 | end | |
742 | return nil | |
743 | end | |
744 | ||
745 | function animateTool() | |
746 | ||
747 | if (toolAnim == "None") then | |
748 | playToolAnimation("toolnone", toolTransitionTime, Humanoid) | |
749 | return | |
750 | end | |
751 | ||
752 | if (toolAnim == "Slash") then | |
753 | playToolAnimation("toolslash", 0, Humanoid) | |
754 | return | |
755 | end | |
756 | ||
757 | if (toolAnim == "Lunge") then | |
758 | playToolAnimation("toollunge", 0, Humanoid) | |
759 | return | |
760 | end | |
761 | end | |
762 | ||
763 | function moveSit() | |
764 | RightShoulder.MaxVelocity = 0.15 | |
765 | LeftShoulder.MaxVelocity = 0.15 | |
766 | RightShoulder:SetDesiredAngle(3.14 /2) | |
767 | LeftShoulder:SetDesiredAngle(-3.14 /2) | |
768 | RightHip:SetDesiredAngle(3.14 /2) | |
769 | LeftHip:SetDesiredAngle(-3.14 /2) | |
770 | end | |
771 | ||
772 | local lastTick = 0 | |
773 | ||
774 | function move(time) | |
775 | local amplitude = 1 | |
776 | local frequency = 1 | |
777 | local deltaTime = time - lastTick | |
778 | lastTick = time | |
779 | ||
780 | local climbFudge = 0 | |
781 | local setAngles = false | |
782 | ||
783 | if (jumpAnimTime > 0) then | |
784 | jumpAnimTime = jumpAnimTime - deltaTime | |
785 | end | |
786 | ||
787 | if (pose == "FreeFall" and jumpAnimTime <= 0) then | |
788 | playAnimation("fall", fallTransitionTime, Humanoid) | |
789 | elseif (pose == "Seated") then | |
790 | playAnimation("sit", 0.5, Humanoid) | |
791 | return | |
792 | elseif (pose == "Running") then | |
793 | playAnimation("walk", 0.1, Humanoid) | |
794 | elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then | |
795 | stopAllAnimations() | |
796 | amplitude = 0.1 | |
797 | frequency = 1 | |
798 | setAngles = true | |
799 | end | |
800 | ||
801 | -- Tool Animation handling | |
802 | local tool = getTool() | |
803 | if tool and (tool.RequiresHandle or tool:FindFirstChild("Handle")) then | |
804 | ||
805 | animStringValueObject = getToolAnim(tool) | |
806 | ||
807 | if animStringValueObject then | |
808 | toolAnim = animStringValueObject.Value | |
809 | -- message recieved, delete StringValue | |
810 | animStringValueObject.Parent = nil | |
811 | toolAnimTime = time + .3 | |
812 | end | |
813 | ||
814 | if time > toolAnimTime then | |
815 | toolAnimTime = 0 | |
816 | toolAnim = "None" | |
817 | end | |
818 | ||
819 | animateTool() | |
820 | else | |
821 | stopToolAnimations() | |
822 | toolAnim = "None" | |
823 | toolAnimInstance = nil | |
824 | toolAnimTime = 0 | |
825 | end | |
826 | end | |
827 | ||
828 | -- connect events | |
829 | Humanoid.Died:connect(onDied) | |
830 | Humanoid.Running:connect(onRunning) | |
831 | Humanoid.Jumping:connect(onJumping) | |
832 | Humanoid.Climbing:connect(onClimbing) | |
833 | Humanoid.GettingUp:connect(onGettingUp) | |
834 | Humanoid.FreeFalling:connect(onFreeFall) | |
835 | Humanoid.FallingDown:connect(onFallingDown) | |
836 | Humanoid.Seated:connect(onSeated) | |
837 | Humanoid.PlatformStanding:connect(onPlatformStanding) | |
838 | Humanoid.Swimming:connect(onSwimming) | |
839 | ||
840 | ||
841 | -- main program | |
842 | ||
843 | local runService = game:service("RunService"); | |
844 | ||
845 | -- print("bottom") | |
846 | ||
847 | -- initialize to idle | |
848 | playAnimation("idle", 0.1, Humanoid) | |
849 | pose = "Standing" | |
850 | ||
851 | ||
852 | while Figure.Parent~=nil do | |
853 | local _, time = wait(0.1) | |
854 | move(time) | |
855 | end | |
856 | end)) | |
857 | StringValue35.Name = "climb" | |
858 | StringValue35.Parent = Script34 | |
859 | Animation36.Name = "ClimbAnim" | |
860 | Animation36.Parent = StringValue35 | |
861 | Animation36.AnimationId = "http://www.roblox.com/asset/?id=507765644" | |
862 | StringValue37.Name = "fall" | |
863 | StringValue37.Parent = Script34 | |
864 | Animation38.Name = "FallAnim" | |
865 | Animation38.Parent = StringValue37 | |
866 | Animation38.AnimationId = "http://www.roblox.com/asset/?id=507767968" | |
867 | StringValue39.Name = "idle" | |
868 | StringValue39.Parent = Script34 | |
869 | Animation40.Name = "Animation1" | |
870 | Animation40.Parent = StringValue39 | |
871 | Animation40.AnimationId = "http://www.roblox.com/asset/?id=507766388" | |
872 | NumberValue41.Name = "Weight" | |
873 | NumberValue41.Parent = Animation40 | |
874 | NumberValue41.Value = 9 | |
875 | Animation42.Name = "Animation2" | |
876 | Animation42.Parent = StringValue39 | |
877 | Animation42.AnimationId = "http://www.roblox.com/asset/?id=507766666" | |
878 | NumberValue43.Name = "Weight" | |
879 | NumberValue43.Parent = Animation42 | |
880 | NumberValue43.Value = 1 | |
881 | StringValue44.Name = "jump" | |
882 | StringValue44.Parent = Script34 | |
883 | Animation45.Name = "JumpAnim" | |
884 | Animation45.Parent = StringValue44 | |
885 | Animation45.AnimationId = "http://www.roblox.com/asset/?id=507765000" | |
886 | StringValue46.Name = "run" | |
887 | StringValue46.Parent = Script34 | |
888 | Animation47.Name = "RunAnim" | |
889 | Animation47.Parent = StringValue46 | |
890 | Animation47.AnimationId = "http://www.roblox.com/asset/?id=5077677142" | |
891 | StringValue48.Name = "sit" | |
892 | StringValue48.Parent = Script34 | |
893 | Animation49.Name = "SitAnim" | |
894 | Animation49.Parent = StringValue48 | |
895 | Animation49.AnimationId = "http://www.roblox.com/asset/?id=507768133" | |
896 | StringValue50.Name = "swim" | |
897 | StringValue50.Parent = Script34 | |
898 | Animation51.Name = "Swim" | |
899 | Animation51.Parent = StringValue50 | |
900 | Animation51.AnimationId = "http://www.roblox.com/asset/?id=507784897" | |
901 | StringValue52.Name = "swimidle" | |
902 | StringValue52.Parent = Script34 | |
903 | Animation53.Name = "SwimIdle" | |
904 | Animation53.Parent = StringValue52 | |
905 | Animation53.AnimationId = "http://www.roblox.com/asset/?id=481825862" | |
906 | StringValue54.Name = "toolnone" | |
907 | StringValue54.Parent = Script34 | |
908 | Animation55.Name = "ToolNoneAnim" | |
909 | Animation55.Parent = StringValue54 | |
910 | Animation55.AnimationId = "http://www.roblox.com/asset/?id=507768375" | |
911 | StringValue56.Name = "walk" | |
912 | StringValue56.Parent = Script34 | |
913 | Animation57.Name = "RunAnim" | |
914 | Animation57.Parent = StringValue56 | |
915 | Animation57.AnimationId = "http://www.roblox.com/asset/?id=507777826" | |
916 | Script58.Name = "Sound" | |
917 | Script58.Parent = Model1 | |
918 | table.insert(cors,sandbox(Script58,function() | |
919 | --[[ | |
920 | Author: @spotco | |
921 | This script creates sounds which are placed under the character head. | |
922 | These sounds are used by the "LocalSound" script. | |
923 | ||
924 | To modify this script, copy it to your "StarterPlayer/StarterCharacterScripts" folder keeping the same script name ("Sound"). | |
925 | The default Sound script loaded for every character will then be replaced with your copy of the script. | |
926 | ]]-- | |
927 | ||
928 | function CreateNewSound(name, id, looped, pitch, parent) | |
929 | local sound = Instance.new("Sound") | |
930 | sound.SoundId = id | |
931 | sound.Name = name | |
932 | sound.archivable = false | |
933 | sound.Parent = parent | |
934 | sound.Pitch = pitch | |
935 | sound.Looped = looped | |
936 | ||
937 | sound.MinDistance = 5 | |
938 | sound.MaxDistance = 150 | |
939 | sound.Volume = 0.65 | |
940 | ||
941 | return sound | |
942 | end | |
943 | ||
944 | local head = script.Parent:FindFirstChild("Head") | |
945 | if head == nil then | |
946 | error("Sound script parent has no child Head.") | |
947 | return | |
948 | end | |
949 | ||
950 | ||
951 | CreateNewSound("GettingUp", "rbxasset://sounds/action_get_up.mp3", false, 1, head) | |
952 | CreateNewSound("Died", "rbxasset://sounds/uuhhh.mp3", false, 1, head) | |
953 | CreateNewSound("FreeFalling", "rbxasset://sounds/action_falling.mp3", true, 1, head) | |
954 | CreateNewSound("Jumping", "rbxasset://sounds/action_jump.mp3", false, 1, head) | |
955 | CreateNewSound("Landing", "rbxasset://sounds/action_jump_land.mp3", false, 1, head) | |
956 | CreateNewSound("Splash", "rbxasset://sounds/impact_water.mp3", false, 1, head) | |
957 | CreateNewSound("Running", "rbxasset://sounds/action_footsteps_plastic.mp3", true, 1.85, head) | |
958 | CreateNewSound("Swimming", "rbxasset://sounds/action_swim.mp3", true, 1.6, head) | |
959 | CreateNewSound("Climbing", "rbxasset://sounds/action_footsteps_plastic.mp3", true, 1, head) | |
960 | end)) | |
961 | LocalScript59.Name = "LocalSound" | |
962 | LocalScript59.Parent = Script58 | |
963 | table.insert(cors,sandbox(LocalScript59,function() | |
964 | --[[ | |
965 | Author: @spotco | |
966 | This script runs locally for the player of the given humanoid. | |
967 | This script triggers humanoid sound play/pause actions locally. | |
968 | ||
969 | The Playing/TimePosition properties of Sound objects bypass FilteringEnabled, so this triggers the sound | |
970 | immediately for the player and is replicated to all other players. | |
971 | ||
972 | This script is optimized to reduce network traffic through minimizing the amount of property replication. | |
973 | ]]-- | |
974 | ||
975 | --All sounds are referenced by this ID | |
976 | local SFX = { | |
977 | Died = 0; | |
978 | Running = 1; | |
979 | Swimming = 2; | |
980 | Climbing = 3, | |
981 | Jumping = 4; | |
982 | GettingUp = 5; | |
983 | FreeFalling = 6; | |
984 | FallingDown = 7; | |
985 | Landing = 8; | |
986 | Splash = 9; | |
987 | } | |
988 | ||
989 | local Humanoid = nil | |
990 | local Head = nil | |
991 | ||
992 | --SFX ID to Sound object | |
993 | local Sounds = {} | |
994 | ||
995 | do | |
996 | local Figure = script.Parent.Parent | |
997 | Head = Figure:WaitForChild("Head") | |
998 | while not Humanoid do | |
999 | for _,NewHumanoid in pairs(Figure:GetChildren()) do | |
1000 | if NewHumanoid:IsA("Humanoid") then | |
1001 | Humanoid = NewHumanoid | |
1002 | break | |
1003 | end | |
1004 | end | |
1005 | Figure.ChildAdded:wait() | |
1006 | end | |
1007 | ||
1008 | Sounds[SFX.Died] = Head:WaitForChild("Died") | |
1009 | Sounds[SFX.Running] = Head:WaitForChild("Running") | |
1010 | Sounds[SFX.Swimming] = Head:WaitForChild("Swimming") | |
1011 | Sounds[SFX.Climbing] = Head:WaitForChild("Climbing") | |
1012 | Sounds[SFX.Jumping] = Head:WaitForChild("Jumping") | |
1013 | Sounds[SFX.GettingUp] = Head:WaitForChild("GettingUp") | |
1014 | Sounds[SFX.FreeFalling] = Head:WaitForChild("FreeFalling") | |
1015 | Sounds[SFX.Landing] = Head:WaitForChild("Landing") | |
1016 | Sounds[SFX.Splash] = Head:WaitForChild("Splash") | |
1017 | end | |
1018 | ||
1019 | local Util | |
1020 | Util = { | |
1021 | ||
1022 | --Define linear relationship between (pt1x,pt2x) and (pt2x,pt2y). Evaluate this at x. | |
1023 | YForLineGivenXAndTwoPts = function(x,pt1x,pt1y,pt2x,pt2y) | |
1024 | --(y - y1)/(x - x1) = m | |
1025 | local m = (pt1y - pt2y) / (pt1x - pt2x) | |
1026 | --float b = pt1.y - m * pt1.x; | |
1027 | local b = (pt1y - m * pt1x) | |
1028 | return m * x + b | |
1029 | end; | |
1030 | ||
1031 | --Clamps the value of "val" between the "min" and "max" | |
1032 | Clamp = function(val,min,max) | |
1033 | return math.min(max,math.max(min,val)) | |
1034 | end; | |
1035 | ||
1036 | --Gets the horizontal (x,z) velocity magnitude of the given part | |
1037 | HorizontalSpeed = function(Head) | |
1038 | local hVel = Head.Velocity + Vector3.new(0,-Head.Velocity.Y,0) | |
1039 | return hVel.magnitude | |
1040 | end; | |
1041 | ||
1042 | --Gets the vertical (y) velocity magnitude of the given part | |
1043 | VerticalSpeed = function(Head) | |
1044 | return math.abs(Head.Velocity.Y) | |
1045 | end; | |
1046 | ||
1047 | --Setting Playing/TimePosition values directly result in less network traffic than Play/Pause/Resume/Stop | |
1048 | --If these properties are enabled, use them. | |
1049 | Play = function(sound) | |
1050 | if sound.TimePosition ~= 0 then | |
1051 | sound.TimePosition = 0 | |
1052 | end | |
1053 | if not sound.IsPlaying then | |
1054 | sound.Playing = true | |
1055 | end | |
1056 | end; | |
1057 | Pause = function(sound) | |
1058 | if sound.IsPlaying then | |
1059 | sound.Playing = false | |
1060 | end | |
1061 | end; | |
1062 | Resume = function(sound) | |
1063 | if not sound.IsPlaying then | |
1064 | sound.Playing = true | |
1065 | end | |
1066 | end; | |
1067 | Stop = function(sound) | |
1068 | if sound.IsPlaying then | |
1069 | sound.Playing = false | |
1070 | end | |
1071 | if sound.TimePosition ~= 0 then | |
1072 | sound.TimePosition = 0 | |
1073 | end | |
1074 | end; | |
1075 | } | |
1076 | ||
1077 | do | |
1078 | -- List of all active Looped sounds | |
1079 | local playingLoopedSounds = {} | |
1080 | ||
1081 | -- Last seen Enum.HumanoidStateType | |
1082 | local activeState = nil | |
1083 | ||
1084 | -- Verify and set that "sound" is in "playingLoopedSounds". | |
1085 | function setSoundInPlayingLoopedSounds(sound) | |
1086 | for i=1, #playingLoopedSounds do | |
1087 | if playingLoopedSounds[i] == sound then | |
1088 | return | |
1089 | end | |
1090 | end | |
1091 | table.insert(playingLoopedSounds,sound) | |
1092 | end | |
1093 | ||
1094 | -- Stop all active looped sounds except parameter "except". If "except" is not passed, all looped sounds will be stopped. | |
1095 | function stopPlayingLoopedSoundsExcept(except) | |
1096 | for i=#playingLoopedSounds,1,-1 do | |
1097 | if playingLoopedSounds[i] ~= except then | |
1098 | Util.Pause(playingLoopedSounds[i]) | |
1099 | table.remove(playingLoopedSounds,i) | |
1100 | end | |
1101 | end | |
1102 | end | |
1103 | ||
1104 | -- Table of Enum.HumanoidStateType to handling function | |
1105 | local stateUpdateHandler = { | |
1106 | [Enum.HumanoidStateType.Dead] = function() | |
1107 | stopPlayingLoopedSoundsExcept() | |
1108 | local sound = Sounds[SFX.Died] | |
1109 | Util.Play(sound) | |
1110 | end; | |
1111 | ||
1112 | [Enum.HumanoidStateType.RunningNoPhysics] = function() | |
1113 | stateUpdated(Enum.HumanoidStateType.Running) | |
1114 | end; | |
1115 | ||
1116 | [Enum.HumanoidStateType.Running] = function() | |
1117 | local sound = Sounds[SFX.Running] | |
1118 | stopPlayingLoopedSoundsExcept(sound) | |
1119 | ||
1120 | if Util.HorizontalSpeed(Head) > 0.5 then | |
1121 | Util.Resume(sound) | |
1122 | setSoundInPlayingLoopedSounds(sound) | |
1123 | else | |
1124 | stopPlayingLoopedSoundsExcept() | |
1125 | end | |
1126 | end; | |
1127 | ||
1128 | [Enum.HumanoidStateType.Swimming] = function() | |
1129 | if activeState ~= Enum.HumanoidStateType.Swimming and Util.VerticalSpeed(Head) > 0.1 then | |
1130 | local splashSound = Sounds[SFX.Splash] | |
1131 | splashSound.Volume = Util.Clamp( | |
1132 | Util.YForLineGivenXAndTwoPts( | |
1133 | Util.VerticalSpeed(Head), | |
1134 | 100, 0.28, | |
1135 | 350, 1), | |
1136 | 0,1) | |
1137 | Util.Play(splashSound) | |
1138 | end | |
1139 | ||
1140 | do | |
1141 | local sound = Sounds[SFX.Swimming] | |
1142 | stopPlayingLoopedSoundsExcept(sound) | |
1143 | Util.Resume(sound) | |
1144 | setSoundInPlayingLoopedSounds(sound) | |
1145 | end | |
1146 | end; | |
1147 | ||
1148 | [Enum.HumanoidStateType.Climbing] = function() | |
1149 | local sound = Sounds[SFX.Climbing] | |
1150 | if Util.VerticalSpeed(Head) > 0.1 then | |
1151 | Util.Resume(sound) | |
1152 | stopPlayingLoopedSoundsExcept(sound) | |
1153 | else | |
1154 | stopPlayingLoopedSoundsExcept() | |
1155 | end | |
1156 | setSoundInPlayingLoopedSounds(sound) | |
1157 | end; | |
1158 | ||
1159 | [Enum.HumanoidStateType.Jumping] = function() | |
1160 | if activeState == Enum.HumanoidStateType.Jumping then | |
1161 | return | |
1162 | end | |
1163 | stopPlayingLoopedSoundsExcept() | |
1164 | local sound = Sounds[SFX.Jumping] | |
1165 | Util.Play(sound) | |
1166 | end; | |
1167 | ||
1168 | [Enum.HumanoidStateType.GettingUp] = function() | |
1169 | stopPlayingLoopedSoundsExcept() | |
1170 | local sound = Sounds[SFX.GettingUp] | |
1171 | Util.Play(sound) | |
1172 | end; | |
1173 | ||
1174 | [Enum.HumanoidStateType.Freefall] = function() | |
1175 | if activeState == Enum.HumanoidStateType.Freefall then | |
1176 | return | |
1177 | end | |
1178 | local sound = Sounds[SFX.FreeFalling] | |
1179 | sound.Volume = 0 | |
1180 | stopPlayingLoopedSoundsExcept() | |
1181 | end; | |
1182 | ||
1183 | [Enum.HumanoidStateType.FallingDown] = function() | |
1184 | stopPlayingLoopedSoundsExcept() | |
1185 | end; | |
1186 | ||
1187 | [Enum.HumanoidStateType.Landed] = function() | |
1188 | stopPlayingLoopedSoundsExcept() | |
1189 | if Util.VerticalSpeed(Head) > 75 then | |
1190 | local landingSound = Sounds[SFX.Landing] | |
1191 | landingSound.Volume = Util.Clamp( | |
1192 | Util.YForLineGivenXAndTwoPts( | |
1193 | Util.VerticalSpeed(Head), | |
1194 | 50, 0, | |
1195 | 100, 1), | |
1196 | 0,1) | |
1197 | Util.Play(landingSound) | |
1198 | end | |
1199 | end; | |
1200 | ||
1201 | [Enum.HumanoidStateType.Seated] = function() | |
1202 | stopPlayingLoopedSoundsExcept() | |
1203 | end; | |
1204 | } | |
1205 | ||
1206 | -- Handle state event fired or OnChange fired | |
1207 | function stateUpdated(state) | |
1208 | if stateUpdateHandler[state] ~= nil then | |
1209 | stateUpdateHandler[state]() | |
1210 | end | |
1211 | activeState = state | |
1212 | end | |
1213 | ||
1214 | Humanoid.Died:connect( function() stateUpdated(Enum.HumanoidStateType.Dead) end) | |
1215 | Humanoid.Running:connect( function() stateUpdated(Enum.HumanoidStateType.Running) end) | |
1216 | Humanoid.Swimming:connect( function() stateUpdated(Enum.HumanoidStateType.Swimming) end) | |
1217 | Humanoid.Climbing:connect( function() stateUpdated(Enum.HumanoidStateType.Climbing) end) | |
1218 | Humanoid.Jumping:connect( function() stateUpdated(Enum.HumanoidStateType.Jumping) end) | |
1219 | Humanoid.GettingUp:connect( function() stateUpdated(Enum.HumanoidStateType.GettingUp) end) | |
1220 | Humanoid.FreeFalling:connect( function() stateUpdated(Enum.HumanoidStateType.Freefall) end) | |
1221 | Humanoid.FallingDown:connect( function() stateUpdated(Enum.HumanoidStateType.FallingDown) end) | |
1222 | ||
1223 | -- required for proper handling of Landed event | |
1224 | Humanoid.StateChanged:connect(function(old, new) | |
1225 | stateUpdated(new) | |
1226 | end) | |
1227 | ||
1228 | ||
1229 | function onUpdate(stepDeltaSeconds, tickSpeedSeconds) | |
1230 | local stepScale = stepDeltaSeconds / tickSpeedSeconds | |
1231 | do | |
1232 | local sound = Sounds[SFX.FreeFalling] | |
1233 | if activeState == Enum.HumanoidStateType.Freefall then | |
1234 | if Head.Velocity.Y < 0 and Util.VerticalSpeed(Head) > 75 then | |
1235 | Util.Resume(sound) | |
1236 | ||
1237 | --Volume takes 1.1 seconds to go from volume 0 to 1 | |
1238 | local ANIMATION_LENGTH_SECONDS = 1.1 | |
1239 | ||
1240 | local normalizedIncrement = tickSpeedSeconds / ANIMATION_LENGTH_SECONDS | |
1241 | sound.Volume = Util.Clamp(sound.Volume + normalizedIncrement * stepScale, 0, 1) | |
1242 | else | |
1243 | sound.Volume = 0 | |
1244 | end | |
1245 | else | |
1246 | Util.Pause(sound) | |
1247 | end | |
1248 | end | |
1249 | ||
1250 | do | |
1251 | local sound = Sounds[SFX.Running] | |
1252 | if activeState == Enum.HumanoidStateType.Running then | |
1253 | if Util.HorizontalSpeed(Head) < 0.5 then | |
1254 | Util.Pause(sound) | |
1255 | end | |
1256 | end | |
1257 | end | |
1258 | end | |
1259 | ||
1260 | local lastTick = tick() | |
1261 | local TICK_SPEED_SECONDS = 0.25 | |
1262 | while true do | |
1263 | onUpdate(tick() - lastTick,TICK_SPEED_SECONDS) | |
1264 | lastTick = tick() | |
1265 | wait(TICK_SPEED_SECONDS) | |
1266 | end | |
1267 | end | |
1268 | ||
1269 | end)) | |
1270 | Script60.Name = "Health" | |
1271 | Script60.Parent = Model1 | |
1272 | table.insert(cors,sandbox(Script60,function() | |
1273 | --Responsible for regening a player's humanoid's health | |
1274 | ||
1275 | -- declarations | |
1276 | local Figure = script.Parent | |
1277 | local Head = Figure:WaitForChild("Head") | |
1278 | local Humanoid = Figure:WaitForChild("Humanoid") | |
1279 | local regening = false | |
1280 | ||
1281 | -- regeneration | |
1282 | function regenHealth() | |
1283 | if regening then return end | |
1284 | regening = true | |
1285 | ||
1286 | while Humanoid.Health < Humanoid.MaxHealth do | |
1287 | local s = wait(1) | |
1288 | local health = Humanoid.Health | |
1289 | if health > 0 and health < Humanoid.MaxHealth then | |
1290 | local newHealthDelta = 0.01 * s * Humanoid.MaxHealth | |
1291 | health = health + newHealthDelta | |
1292 | Humanoid.Health = math.min(health,Humanoid.MaxHealth) | |
1293 | end | |
1294 | end | |
1295 | ||
1296 | if Humanoid.Health > Humanoid.MaxHealth then | |
1297 | Humanoid.Health = Humanoid.MaxHealth | |
1298 | end | |
1299 | ||
1300 | regening = false | |
1301 | end | |
1302 | ||
1303 | Humanoid.HealthChanged:connect(regenHealth) | |
1304 | ||
1305 | end)) | |
1306 | LocalScript61.Parent = Script0 | |
1307 | table.insert(cors,sandbox(LocalScript61,function() | |
1308 | repeat wait() until script:FindFirstChild("Obj").Value | |
1309 | workspace.Camera.CameraSubject = script.Obj.Value | |
1310 | end)) | |
1311 | LocalScript61.Disabled = true | |
1312 | ObjectValue62.Name = "Obj" | |
1313 | ObjectValue62.Parent = LocalScript61 | |
1314 | ObjectValue62.Value = Model1 | |
1315 | for i,v in pairs(mas:GetChildren()) do | |
1316 | v.Parent = workspace | |
1317 | pcall(function() v:MakeJoints() end) | |
1318 | end | |
1319 | mas:Destroy() | |
1320 | for i,v in pairs(cors) do | |
1321 | spawn(function() | |
1322 | pcall(v) | |
1323 | end) | |
1324 | end |