SHOW:
|
|
- or go back to the newest paste.
1 | - | -- [[ Ghost Roamer, by Melon and MyWorld ]] -- |
1 | + | |
2 | - | --[[ Note, MyWorld did not work on this script, |
2 | + | |
3 | - | im just using some of his sines and raycasts.]]-- |
3 | + | |
4 | - | -- [[ Hats ]] -- |
4 | + | |
5 | local uis=game:FindFirstChildOfClass("UserInputService") | |
6 | - | --[[ |
6 | + | |
7 | - | - Free |
7 | + | |
8 | - | https://www.roblox.com/catalog/4819740796/Robox |
8 | + | |
9 | - | https://www.roblox.com/catalog/9867487176/Le-Rouge-Cross-body-Bag-3-0 |
9 | + | |
10 | - | https://www.roblox.com/catalog/9867481700/Le-Rouge-Cross-body-Bag-1-0 |
10 | + | |
11 | - | https://www.roblox.com/catalog/8763318146/Warrior-Mat-Alo-Yoga-Strap-Jungle |
11 | + | |
12 | - | https://www.roblox.com/catalog/8763290412/Warrior-Mat-Alo-Yoga-Strap-Black |
12 | + | |
13 | local heartbeat=rs.Heartbeat | |
14 | - | - Free (2) |
14 | + | |
15 | - | https://www.roblox.com/catalog/4819740796/Robox |
15 | + | |
16 | - | https://www.roblox.com/catalog/3033908130/International-Fedora-France |
16 | + | |
17 | - | https://www.roblox.com/catalog/3398308134/International-Fedora-Canada |
17 | + | |
18 | - | https://www.roblox.com/catalog/3409612660/International-Fedora-USA |
18 | + | |
19 | - | https://www.roblox.com/catalog/3033910400/International-Fedora-Germany |
19 | + | |
20 | local sbyte=string.byte | |
21 | - | - Paid |
21 | + | |
22 | - | https://www.roblox.com/catalog/14255528083/Torso-Extension |
22 | + | |
23 | - | https://www.roblox.com/catalog/14255556501/Extra-Right-White-Arm |
23 | + | |
24 | - | https://www.roblox.com/catalog/14255554762/Extra-Left-White-Arm |
24 | + | |
25 | - | https://www.roblox.com/catalog/12344591101/Extra-Right-hand-moving-Blocky-white |
25 | + | |
26 | - | https://www.roblox.com/catalog/12344545199/Extra-Left-hand-moving-Blocky-white3 |
26 | + | |
27 | local cos=math.cos | |
28 | - | - Paid *LEGS ALTERNATIVE* (2) |
28 | + | |
29 | - | https://www.roblox.com/catalog/11263254795/Dummy-Head-For-Headless |
29 | + | |
30 | - | https://www.roblox.com/catalog/11159410305/Rectangle-Head-For-Headless |
30 | + | |
31 | - | ]]-- |
31 | + | |
32 | local tfind=table.find | |
33 | local tunpack=table.unpack | |
34 | ||
35 | local i=Instance.new | |
36 | local v2=Vector2.new | |
37 | local v3=Vector3.new | |
38 | local c3=Color3.new | |
39 | local cf=CFrame.new | |
40 | local angles=CFrame.Angles | |
41 | local u2=UDim2.new | |
42 | local e=Enum | |
43 | local cs=ColorSequence.new | |
44 | local csk=ColorSequenceKeypoint.new | |
45 | ||
46 | local sine=osclock() | |
47 | local deltaTime=0 | |
48 | local v3_0=v3(0,0,0) | |
49 | local v3_101=v3(1,0,1) | |
50 | local v3_010=v3(0,1,0) | |
51 | local v3_001=v3(0,0,1) | |
52 | local cf_0=cf(0,0,0) | |
53 | local v3_xz=v3_101*10 | |
54 | local v3_net=v3_010*25.01 | |
55 | ||
56 | local function makepcall(f) | |
57 | if type(f)=="function" then | |
58 | return function(...) | |
59 | local a={...} | |
60 | local r=nil | |
61 | pcall(function() | |
62 | r={f(tunpack(a))} | |
63 | end) | |
64 | return tunpack(r or {}) | |
65 | end | |
66 | end | |
67 | return function() end | |
68 | end | |
69 | local function rs(l) | |
70 | l=l or mrandom(8,15) | |
71 | local s="" | |
72 | for i=1,l do | |
73 | if mrandom(1,2)==1 then | |
74 | s=s..schar(mrandom(65,90)) | |
75 | else | |
76 | s=s..schar(mrandom(97,122)) | |
77 | end | |
78 | end | |
79 | return s | |
80 | end | |
81 | local function gp(p,n,cl) | |
82 | if typeof(p)=="Instance" then | |
83 | local c=p:GetChildren() | |
84 | for i=1,#c do | |
85 | local v=c[i] | |
86 | if (v.Name==n) and v:IsA(cl) then | |
87 | return v | |
88 | end | |
89 | end | |
90 | end | |
91 | return nil | |
92 | end | |
93 | local function loopgp(...) | |
94 | while true do | |
95 | local r=gp(...) | |
96 | if r then | |
97 | return r | |
98 | end | |
99 | twait() | |
100 | end | |
101 | end | |
102 | local function timegp(p,n,c,t) | |
103 | t=osclock()+t | |
104 | while t>osclock() do | |
105 | local r=gp(p,n,c) | |
106 | if r then | |
107 | return r | |
108 | end | |
109 | twait() | |
110 | end | |
111 | return nil | |
112 | end | |
113 | local function getNetlessVelocity(realVel) | |
114 | --if true then return v3_0 end | |
115 | --if true then return realPartVelocity end | |
116 | --if true then return v3_net end | |
117 | if realVel.Magnitude>25.01 then | |
118 | realVel=realVel.Unit*25.01 | |
119 | end | |
120 | return realVel*v3_xz+v3_net | |
121 | end | |
122 | local isClientInstance=makepcall(function(i) | |
123 | return ssub(i:GetDebugId(),1,1)=="0" | |
124 | end) | |
125 | local isServerInstance=function(i) | |
126 | return not isClientInstance(i) | |
127 | end | |
128 | local shp=(((type(getfenv)=="function") and getfenv()) or {}).sethiddenproperty | |
129 | ||
130 | local allowshiftlock=nil | |
131 | local ctrltp=nil | |
132 | local simrad=nil | |
133 | local placeholders=nil | |
134 | local clickfling=nil | |
135 | ||
136 | local stopreanimate=function() return nil end | |
137 | local function reanimate() | |
138 | --[[ | |
139 | FDless reanimate by MyWorld | |
140 | aka no client sided instances | |
141 | "what else do i optimize here" | |
142 | ]] | |
143 | ||
144 | local novoid = true --prevents parts from going under workspace.FallenPartsDestroyHeight if you control them | |
145 | local placeholders = true --makes client sided accessories replacing the real ones when unavailable | |
146 | local speedlimit = 3000 --makes your parts move slower if the magnitude of their velocity is higher than this | |
147 | local antiragdoll = true --removes instances that are usually used for ragdolling form your character | |
148 | local addPartsOnRun = false --allows u to add more parts and joints to the simulation after it started | |
149 | local R15toR6 = true --adds fake r6 parts and joints for animations if your character is r15 | |
150 | local walkSpeed = 16 --your walkspeed (can be changed at runtime) | |
151 | local jumpPower = 50 --your jump power (can be changed at runtime) | |
152 | local allowshiftlock = true --allows the user to use shiftlock (can be changed at runtime) | |
153 | local gravity = 196.2 --how fast the characters velocity increases while falling (can be changed at runtime) | |
154 | local simrad = "shp" --sets simulation radius to this with sethiddenproperty if its set to a number | |
155 | local ctrlclicktp = false --makes you teleport where u point ur mouse cursor at when click and hold ctrl down | |
156 | local clickfling = true --makes you fling the person you clicked when its available to do so | |
157 | local flingvel = v3(16000,16000,16000) --the rotation velocity that ur character will have while flinging | |
158 | ||
159 | local c=lp.Character | |
160 | if stopreanimate() or not (c and c:IsDescendantOf(ws)) then return end | |
161 | ||
162 | local hum=c:FindFirstChildOfClass("Humanoid") | |
163 | local rootpart=gp(c,"HumanoidRootPart","BasePart") or gp(c,"Torso","BasePart") or gp(c,"UpperTorso","BasePart") or (hum and hum.RootPart) or timegp(c,"HumanoidRootPart","BasePart",0.5) or c:FindFirstChildWhichIsA("BasePart") | |
164 | if not rootpart then return end | |
165 | ||
166 | R15toR6=R15toR6 and hum and (hum.RigType==e.HumanoidRigType.R15) | |
167 | simrad = (type(simrad)=="number") and (type(shp)=="function") and simrad | |
168 | ||
169 | local flingparts={} | |
170 | local cam=nil | |
171 | --theres a way to have ws.currentcamera nil on heartbeat and still have the game run normally | |
172 | local function refcam() | |
173 | cam=ws.CurrentCamera | |
174 | while not cam do | |
175 | ws:GetPropertyChangedSignal("CurrentCamera"):Wait() | |
176 | cam=ws.CurrentCamera | |
177 | end | |
178 | end | |
179 | refcam() | |
180 | local camcf=cam.CFrame | |
181 | local enumCamS=e.CameraType.Scriptable | |
182 | local camt=cam.CameraType | |
183 | local camcon0=nil | |
184 | local camcon1=nil | |
185 | local function onnewcamera() | |
186 | refcam() | |
187 | if camcon0 then | |
188 | camcon0:Disconnect() | |
189 | camcon0=nil | |
190 | end | |
191 | if not c then | |
192 | if cam.CameraType==enumCamS then | |
193 | cam.CameraType=camt | |
194 | end | |
195 | return camcon1:Disconnect() | |
196 | end | |
197 | camcon0=cam.Changed:Connect(function(p) | |
198 | if not c then | |
199 | camcon0:Disconnect() | |
200 | return camcon1:Disconnect() | |
201 | end | |
202 | if (p=="CFrame") and (cam.CFrame~=camcf) then | |
203 | cam.CFrame=camcf | |
204 | elseif (p=="CameraSubject") or (p=="CameraType") then | |
205 | local subj=cam.CameraSubject | |
206 | if subj and subj:IsA("Humanoid") and (subj.Parent==c) and (cam.CameraType~=enumCamS) then | |
207 | cam.CameraType = enumCamS | |
208 | end | |
209 | end | |
210 | end) | |
211 | local subj=cam.CameraSubject | |
212 | if subj and subj:IsA("Humanoid") and (subj.Parent==c) and (cam.CameraType~=enumCamS) then | |
213 | cam.CameraType=enumCamS | |
214 | end | |
215 | cam.CFrame=camcf | |
216 | end | |
217 | camcon1=ws:GetPropertyChangedSignal("CurrentCamera"):Connect(onnewcamera) | |
218 | onnewcamera() | |
219 | ||
220 | local fpdh=ws.FallenPartsDestroyHeight | |
221 | novoid=novoid and (fpdh+1) | |
222 | ||
223 | local function getMeshOfPart(v) | |
224 | if typeof(v)=="Instance" then | |
225 | if v:IsA("MeshPart") then | |
226 | return v.MeshId, v.TextureID | |
227 | else | |
228 | v=v:FindFirstChildOfClass("SpecialMesh") | |
229 | if v then | |
230 | return v.MeshId, v.TextureId | |
231 | end | |
232 | end | |
233 | end | |
234 | return nil, nil | |
235 | end | |
236 | ||
237 | local joints={} | |
238 | local cframes={} | |
239 | local des=c:GetDescendants() | |
240 | for i=1,#des do | |
241 | local v=des[i] | |
242 | if v:IsA("JointInstance") then | |
243 | tinsert(joints,{ | |
244 | Name=v.Name, | |
245 | C0=v.C0, | |
246 | C1=v.C1, | |
247 | Part0=v.Part0, | |
248 | Part1=v.Part1 | |
249 | }) | |
250 | elseif v:IsA("BasePart") then | |
251 | cframes[v]=v.CFrame | |
252 | end | |
253 | end | |
254 | ||
255 | local function makeplaceholder(v) | |
256 | if typeof(v)~="Instance" then | |
257 | return nil | |
258 | end | |
259 | if not v.Archivable then | |
260 | v.Archivable=true | |
261 | end | |
262 | v=v:Clone() | |
263 | local c=v:GetChildren() | |
264 | for i=1,#c do | |
265 | local v=c[i] | |
266 | if v:IsA("SpecialMesh") then | |
267 | v.Name=rs() | |
268 | v:ClearAllChildren() | |
269 | else | |
270 | v:Destroy() | |
271 | end | |
272 | end | |
273 | v.Name=rs() | |
274 | v.Anchored=true | |
275 | v.CanCollide=false | |
276 | v.Transparency=0.25 | |
277 | v.Parent=ws | |
278 | return v | |
279 | end | |
280 | ||
281 | local function filterInstance(v) | |
282 | local ins=v | |
283 | if isClientInstance(v) then | |
284 | v={CFrame=v.CFrame,Name=v.Name,Anchored=true} | |
285 | else | |
286 | local meshid,textureid=getMeshOfPart(v) | |
287 | if meshid and (meshid~="") and textureid and (textureid~="") then | |
288 | if placeholders then | |
289 | v={CFrame=v.CFrame,Name=v.Name,Anchored=true,meshid=meshid,textureid=textureid,placeholder=makeplaceholder(v)} | |
290 | else | |
291 | v={CFrame=v.CFrame,Name=v.Name,Anchored=true,meshid=meshid,textureid=textureid} | |
292 | end | |
293 | else | |
294 | v={CFrame=v.CFrame,Name=v.Name,Anchored=true} | |
295 | end | |
296 | end | |
297 | local check=ins~=v | |
298 | while check do | |
299 | check=false | |
300 | for i,v1 in pairs(cframes) do | |
301 | if i==ins then | |
302 | cframes[ins]=nil | |
303 | cframes[v]=v1 | |
304 | check=true | |
305 | break | |
306 | end | |
307 | end | |
308 | end | |
309 | for i,v1 in pairs(joints) do | |
310 | if v1.Part0==ins then | |
311 | v1.Part0=v | |
312 | elseif v1.Part1==ins then | |
313 | v1.Part1=v | |
314 | end | |
315 | end | |
316 | if rootpart==ins then | |
317 | rootpart=v | |
318 | end | |
319 | return v | |
320 | end | |
321 | for i,v in pairs(joints) do | |
322 | v.Part0=filterInstance(v.Part0) | |
323 | v.Part1=filterInstance(v.Part1) | |
324 | end | |
325 | ||
326 | local Yvel=0 | |
327 | local cfr=rootpart.CFrame | |
328 | local pos=cfr.Position | |
329 | local shiftlock=false | |
330 | local firstperson=false | |
331 | local xzvel=v3_0 | |
332 | local v3_0150=v3_010*1.5 | |
333 | local camoff=cf(v3_0,camcf.LookVector) | |
334 | camoff=camoff-v3_001*(camcf.Position-(pos+v3_0150)).Magnitude | |
335 | ||
336 | local refreshjointsinternal=nil | |
337 | refreshjointsinternal=function(part,refreshed) | |
338 | if not part then return end | |
339 | tinsert(refreshed,part) | |
340 | for i,v in pairs(joints) do | |
341 | local part0=v.Part0 | |
342 | local part1=v.Part1 | |
343 | if part1 and (part0==part) then | |
344 | cframes[part1]=cframes[part]*v.C0*v.C1:Inverse() | |
345 | if not tfind(refreshed,part1) then | |
346 | refreshjointsinternal(part1,refreshed) | |
347 | end | |
348 | elseif part0 and (part1==part) then | |
349 | cframes[part0]=cframes[part]*v.C1*v.C0:Inverse() | |
350 | if not tfind(refreshed,part0) then | |
351 | refreshjointsinternal(part0,refreshed) | |
352 | end | |
353 | end | |
354 | end | |
355 | end | |
356 | local function refreshjoints(v) | |
357 | refreshjointsinternal(v,{}) | |
358 | end | |
359 | ||
360 | if R15toR6 then | |
361 | local R6parts={ | |
362 | head={Name="Head",Anchored=true}, | |
363 | torso={Name="Torso",Anchored=true}, | |
364 | root={Name="HumanoidRootPart",Anchored=true}, | |
365 | leftArm={Name="Left Arm",Anchored=true}, | |
366 | rightArm={Name="Right Arm",Anchored=true}, | |
367 | leftLeg={Name="Left Leg",Anchored=true}, | |
368 | rightLeg={Name="Right Leg",Anchored=true} | |
369 | } | |
370 | for i,v in pairs(R6parts) do | |
371 | cframes[v]=cfr | |
372 | end | |
373 | tinsert(joints,{ | |
374 | Name="Neck", | |
375 | Part0=R6parts.torso,Part1=R6parts.head, | |
376 | C0=cf(0,1,0,-1,0,0,0,0,1,0,1,-0), | |
377 | C1=cf(0,-0.5,0,-1,0,0,0,0,1,0,1,-0) | |
378 | }) | |
379 | tinsert(joints,{ | |
380 | Name="RootJoint", | |
381 | Part0=R6parts.root,Part1=R6parts.torso, | |
382 | C0=cf(0,0,0,-1,0,0,0,0,1,0,1,-0), | |
383 | C1=cf(0,0,0,-1,0,0,0,0,1,0,1,-0) | |
384 | }) | |
385 | tinsert(joints,{ | |
386 | Name="Right Shoulder", | |
387 | Part0=R6parts.torso,Part1=R6parts.rightArm, | |
388 | C0=cf(1,0.5,0,0,0,1,0,1,-0,-1,0,0), | |
389 | C1=cf(-0.5,0.5,0,0,0,1,0,1,-0,-1,0,0) | |
390 | }) | |
391 | tinsert(joints,{ | |
392 | Name="Left Shoulder", | |
393 | Part0=R6parts.torso,Part1=R6parts.leftArm, | |
394 | C0=cf(-1,0.5,0,0,0,-1,0,1,0,1,0,0), | |
395 | C1=cf(0.5,0.5,0,0,0,-1,0,1,0,1,0,0) | |
396 | }) | |
397 | tinsert(joints,{ | |
398 | Name="Right Hip", | |
399 | Part0=R6parts.torso,Part1=R6parts.rightLeg, | |
400 | C0=cf(1,-1,0,0,0,1,0,1,-0,-1,0,0), | |
401 | C1=cf(0.5,1,0,0,0,1,0,1,-0,-1,0,0) | |
402 | }) | |
403 | tinsert(joints,{ | |
404 | Name="Left Hip" , | |
405 | Part0=R6parts.torso,Part1=R6parts.leftLeg, | |
406 | C0=cf(-1,-1,0,0,0,-1,0,1,0,1,0,0), | |
407 | C1=cf(-0.5,1,0,0,0,-1,0,1,0,1,0,0) | |
408 | }) | |
409 | tinsert(joints,{ | |
410 | Part0=R6parts.root,Part1=rootpart, | |
411 | C0=cf_0,C1=cf_0 | |
412 | }) | |
413 | refreshjoints(rootpart) | |
414 | local function getpart(n) | |
415 | for i,_ in pairs(cframes) do | |
416 | if (i.Name==n) and (type(i)~="table") then | |
417 | return i | |
418 | end | |
419 | end | |
420 | return nil | |
421 | end | |
422 | local function makejoint(p0, p1, p2) | |
423 | p1=getpart(p1) | |
424 | p2=getpart(p2) | |
425 | if not (p1 and p2) then return end | |
426 | for i,v in pairs(joints) do | |
427 | if (v.Part0==p1) and (v.Part1==p2) then | |
428 | joints[i]=nil | |
429 | elseif (v.Part0==p2) and (v.Part1==p1) then | |
430 | joints[i]=nil | |
431 | end | |
432 | end | |
433 | tinsert(joints,{ | |
434 | Part0=p0,Part1=p1, | |
435 | C0=cf_0, | |
436 | C1=cframes[p1]:Inverse()*cframes[p0] | |
437 | }) | |
438 | end | |
439 | makejoint(R6parts.head,"Head","UpperTorso") | |
440 | makejoint(R6parts.leftArm,"LeftUpperArm","UpperTorso") | |
441 | makejoint(R6parts.rightArm,"RightUpperArm","UpperTorso") | |
442 | makejoint(R6parts.leftLeg,"LeftUpperLeg","LowerTorso") | |
443 | makejoint(R6parts.rightLeg,"RightUpperLeg","LowerTorso") | |
444 | makejoint(R6parts.torso,"LowerTorso","HumanoidRootPart") | |
445 | end | |
446 | ||
447 | local function getPart(name,blacklist) | |
448 | for i,v in pairs(cframes) do | |
449 | if (i.Name==name) and not (blacklist and tfind(blacklist,i)) then | |
450 | return i | |
451 | end | |
452 | end | |
453 | return nil | |
454 | end | |
455 | ||
456 | local function getPartFromMesh(meshid,textureid,blacklist) | |
457 | for v,_ in pairs(cframes) do | |
458 | if (type(v)=="table") and not (blacklist and tfind(blacklist,v)) then | |
459 | if v.meshid and sfind(v.meshid,meshid) and sfind(v.textureid,textureid) then | |
460 | return v | |
461 | end | |
462 | end | |
463 | end | |
464 | return nil | |
465 | end | |
466 | ||
467 | local function getJoint(name) | |
468 | for i,v in pairs(joints) do | |
469 | if v.Name==name then | |
470 | return v | |
471 | end | |
472 | end | |
473 | return {C0=cf_0,C1=cf_0} | |
474 | end | |
475 | ||
476 | local function getPartJoint(handle) | |
477 | for i,v in pairs(joints) do | |
478 | if v.Part0==handle then | |
479 | return v | |
480 | end | |
481 | end | |
482 | for i,v in pairs(joints) do | |
483 | if v.Part1==handle then | |
484 | return v | |
485 | end | |
486 | end | |
487 | return nil | |
488 | end | |
489 | ||
490 | local accessorylimbs={ | |
491 | -- paid aligning -- | |
492 | {meshid="12344207333",textureid="12344207341",C0=angles(115,0,0),Name="Left Arm"}, -- Moving Left Arm [White] | |
493 | {meshid="12344206657",textureid="12344206675",C0=angles(115,0,0),Name="Right Arm"}, -- Moving Right Arm [White] | |
494 | {meshid="14255522247",textureid="14255543546",C0=angles(0,0,1.5707963267948966),Name="Left Leg"}, -- Blocky Left Leg [White] | |
495 | {meshid="14255522247",textureid="14255543546",C0=angles(0,0,1.5707963267948966),Name="Right Leg"}, -- Blocky Right Leg [White] | |
496 | {meshid="14241018198",textureid="14251599953",C0=cf_0,Name="Torso"}, -- Torso Extension | |
497 | {meshid="11159370334",textureid="11159284657",C0=angles(0,0,1.5707963267948966),Name="Right Leg"}, -- Dummy Head1 | |
498 | {meshid="11263221350",textureid="11263219250",C0=angles(0,0,1.5707963267948966),Name="Left Leg"}, -- Dummy Head2 | |
499 | ||
500 | -- free aligning -- | |
501 | {meshid="8761442057",textureid="8761547598",C0=angles(115,0,0),Name="Left Arm"}, -- Yoga Mat1 | |
502 | {meshid="8761442057",textureid="8761421987",C0=angles(115,0,0),Name="Right Arm"}, -- Yoga Mat2 | |
503 | {meshid="9867442567",textureid="9867451480",C0=angles(0,0,-15),Name="Left Leg"}, -- Rouge Bag1 | |
504 | {meshid="9867442661",textureid="9867451480",C0=angles(0,0,-15),Name="Right Leg"}, -- Rouge Bag2 | |
505 | {meshid="4819720316",textureid="4819722776",C0=angles(0,0,-105),Name="Torso"}, -- Robox | |
506 | ||
507 | -- free aligning, fedoras -- | |
508 | {meshid="3030546036",textureid="3033903209",C0=angles(115,0,0),Name="Left Arm"}, | |
509 | {meshid="3030546036",textureid="3360978739",C0=angles(115,0,0),Name="Right Arm"}, | |
510 | {meshid="3030546036",textureid="3409604993",C0=angles(115,-115,0),Name="Left Leg"}, | |
511 | {meshid="3030546036",textureid="3033898741",C0=angles(115,115,0),Name="Right Leg"} | |
512 | } | |
513 | ||
514 | local alignblacklist={} | |
515 | for i=1,#accessorylimbs do | |
516 | local v=accessorylimbs[i] | |
517 | local p=getPart(v.Name) | |
518 | local h=getPartFromMesh(v.meshid,v.textureid,alignblacklist) | |
519 | local w=getPartJoint(h) | |
520 | if p and w then | |
521 | w.C0=v.C0 | |
522 | w.Part0=h | |
523 | w.C1=cf_0 | |
524 | w.Part1=p | |
525 | tinsert(alignblacklist,h) | |
526 | end | |
527 | end | |
528 | ||
529 | local raycastparams=RaycastParams.new() | |
530 | raycastparams.FilterType=e.RaycastFilterType.Blacklist | |
531 | raycastparams.RespectCanCollide=true | |
532 | local rayfilter={} | |
533 | local characters={} | |
534 | local function refreshrayfilter() | |
535 | tclear(rayfilter) | |
536 | for i,v in pairs(characters) do | |
537 | tinsert(rayfilter,v) | |
538 | end | |
539 | raycastparams.FilterDescendantsInstances=rayfilter | |
540 | end | |
541 | local flingtarget=nil | |
542 | local cframes1={} | |
543 | local lastpositions={} | |
544 | local rootparts={} | |
545 | local function onplayer(v) | |
546 | local lastc=nil | |
547 | local function oncharacter() | |
548 | local newc=v.Character | |
549 | if newc and (newc ~= lastc) then | |
550 | lastc=newc | |
551 | characters[v]=newc | |
552 | refreshrayfilter() | |
553 | local hrp=loopgp(newc,"HumanoidRootPart","BasePart") | |
554 | if v~=lp then | |
555 | rootparts[v]=hrp | |
556 | end | |
557 | twait() | |
558 | if c and (v==lp) and hrp and (hrp.Parent==newc) and newc:IsDescendantOf(ws) then | |
559 | local startpos=pos+v3(mrandom(-32,32),0,mrandom(-32,32)) | |
560 | local dir=nil | |
561 | local poscheck=true | |
562 | while poscheck do | |
563 | poscheck=false | |
564 | for i,v in pairs(rootparts) do | |
565 | local diff=(startpos-v.Position)*v3_101 | |
566 | if diff.Magnitude<10 then | |
567 | poscheck=true | |
568 | dir=dir or diff.Unit | |
569 | startpos=startpos+dir | |
570 | end | |
571 | end | |
572 | local diff=(startpos-pos)*v3_101 | |
573 | if diff.Magnitude<10 then | |
574 | poscheck=true | |
575 | dir=dir or diff.Unit | |
576 | startpos=startpos+dir | |
577 | end | |
578 | end | |
579 | startpos=cfr+startpos-cfr.Position | |
580 | if flingtarget then | |
581 | local con=heartbeat:Connect(function() | |
582 | local idleoff=v3(sin((sine-0.0375)*16),sin(sine*16),sin((sine+0.075)*16)) | |
583 | ||
584 | hrp.CFrame=flingtarget.CFrame+flingtarget.Velocity*(sin(sine*15)+1)+v3(0,-2,0)+idleoff*0.001 | |
585 | hrp.Velocity=idleoff | |
586 | hrp.RotVelocity=flingvel+idleoff | |
587 | end) | |
588 | twait(0.5) | |
589 | con:Disconnect() | |
590 | flingtarget=nil | |
591 | end | |
592 | tspawn(function() | |
593 | local con=heartbeat:Connect(function() | |
594 | hrp.CFrame=startpos+v3(sin((sine-0.0375)*16),sin(sine*16),sin((sine+0.075)*16))*0.005 | |
595 | hrp.Velocity=v3_0 | |
596 | hrp.RotVelocity=v3_0 | |
597 | end) | |
598 | twait(0.3) | |
599 | con:Disconnect() | |
600 | if newc:IsDescendantOf(ws) then | |
601 | tclear(cframes1) | |
602 | tclear(lastpositions) | |
603 | newc:BreakJoints() | |
604 | twait(0.1) | |
605 | local cd=newc:GetDescendants() | |
606 | for i,v in pairs(cframes) do | |
607 | if type(i)=="table" then | |
608 | local meshid=i.meshid | |
609 | if meshid then | |
610 | local textureid=i.textureid | |
611 | for i1=1,#cd do | |
612 | local v=cd[i1] | |
613 | if v and v:IsA("BasePart") then | |
614 | local meshid1,textureid1=getMeshOfPart(v) | |
615 | if (meshid1==meshid) and (textureid1==textureid) then | |
616 | cd[i1]=nil | |
617 | cframes1[v]=i | |
618 | lastpositions[v]=v.Position | |
619 | break | |
620 | end | |
621 | end | |
622 | end | |
623 | end | |
624 | end | |
625 | end | |
626 | end | |
627 | end) | |
628 | end | |
629 | end | |
630 | end | |
631 | v:GetPropertyChangedSignal("Character"):Connect(oncharacter) | |
632 | oncharacter() | |
633 | end | |
634 | local plrst=plrs:GetPlayers() | |
635 | for i=1,#plrst do onplayer(plrst[i]) end | |
636 | plrs.PlayerAdded:Connect(onplayer) | |
637 | plrs.PlayerRemoving:Connect(function(v) | |
638 | characters[v]=nil | |
639 | rootparts[v]=nil | |
640 | end) | |
641 | ||
642 | local mradN05=rad(-0.5) | |
643 | local enumMLC=e.MouseBehavior.LockCenter | |
644 | local enumMB2=e.UserInputType.MouseButton2 | |
645 | local enumMLCP=e.MouseBehavior.LockCurrentPosition | |
646 | local enumMD=e.MouseBehavior.Default | |
647 | local enumMW=e.UserInputType.MouseWheel | |
648 | ||
649 | local mode="default" | |
650 | local modes={default={}} | |
651 | local function addmode(key,mode) | |
652 | if (type(key)~="string") or (type(mode)~="table") then | |
653 | return | |
654 | end | |
655 | for i, v in pairs(mode) do | |
656 | if type(v)~="function" then | |
657 | mode[i]=nil | |
658 | end | |
659 | end | |
660 | if key=="default" then | |
661 | modes.default=mode | |
662 | if mode.modeEntered then | |
663 | mode.modeEntered() | |
664 | end | |
665 | elseif #key==1 then | |
666 | key=e.KeyCode[supper(ssub(key,1,1))] | |
667 | modes[key]=mode | |
668 | end | |
669 | end | |
670 | ||
671 | local keyW=e.KeyCode.W | |
672 | local keyA=e.KeyCode.A | |
673 | local keyS=e.KeyCode.S | |
674 | local keyD=e.KeyCode.D | |
675 | local keySpace=e.KeyCode.Space | |
676 | local keyShift=e.KeyCode.LeftShift | |
677 | local movementkeys = { | |
678 | [keyW]=false, | |
679 | [keyA]=false, | |
680 | [keyS]=false, | |
681 | [keyD]=false, | |
682 | [keySpace]=false | |
683 | } | |
684 | uis.InputBegan:Connect(function(a) | |
685 | if gs.MenuIsOpen or uis:GetFocusedTextBox() then | |
686 | return | |
687 | end | |
688 | a=a.KeyCode | |
689 | if movementkeys[a]==false then | |
690 | movementkeys[a]=true | |
691 | elseif a==keyShift then | |
692 | shiftlock=allowshiftlock and not shiftlock | |
693 | elseif modes[a] then | |
694 | if modes[mode].modeLeft then | |
695 | modes[mode].modeLeft() | |
696 | end | |
697 | if mode==a then | |
698 | mode="default" | |
699 | else | |
700 | mode=a | |
701 | end | |
702 | if modes[mode].modeEntered then | |
703 | modes[mode].modeEntered() | |
704 | end | |
705 | end | |
706 | end) | |
707 | uis.InputEnded:Connect(function(a) | |
708 | if movementkeys[a.KeyCode] then | |
709 | movementkeys[a.KeyCode]=false | |
710 | end | |
711 | end) | |
712 | uis.InputChanged:Connect(function(a,b) | |
713 | if (not b) and (a.UserInputType==enumMW) then | |
714 | camoff=camoff+a.Position*v3_001*(0.75-camoff.Z/4) | |
715 | if camoff.Z>0 then | |
716 | camoff=camoff-camoff.Position | |
717 | end | |
718 | firstperson=camoff.Z==0 | |
719 | end | |
720 | end) | |
721 | ||
722 | local function fling(target,duration,rotVelocity) | |
723 | twait() | |
724 | return true --maybe later | |
725 | end | |
726 | ||
727 | local function predictionfling(target) | |
728 | if typeof(target)~="Instance" then | |
729 | target=mouse.Target | |
730 | if not target then | |
731 | return twait() and false | |
732 | end | |
733 | end | |
734 | if target:IsA("Humanoid") or target:IsA("BasePart") then | |
735 | target=target.Parent | |
736 | if target:IsA("Accessory") then | |
737 | target=target.Parent | |
738 | end | |
739 | end | |
740 | if (not target:IsA("Model")) or (target==c) then | |
741 | return twait() and false | |
742 | end | |
743 | target=gp(target,"HumanoidRootPart","BasePart") or gp(target,"Torso","BasePart") or gp(target,"UpperTorso","BasePart") | |
744 | if not (target and target:IsDescendantOf(ws)) then | |
745 | return twait() and false | |
746 | end | |
747 | flingtarget=target | |
748 | twait() | |
749 | return true | |
750 | end | |
751 | ||
752 | if ctrlclicktp then | |
753 | ctrlclicktp=e.KeyCode.LeftControl | |
754 | local tpoff=v3_010*3 | |
755 | if clickfling then | |
756 | mouse.Button1Down:Connect(function() | |
757 | if mouse.Target then | |
758 | if uis:IsKeyDown(ctrlclicktp) then | |
759 | pos=mouse.Hit.Position+tpoff | |
760 | cfr=cf(pos,pos+camoff.LookVector*v3_101) | |
761 | xzvel=v3_0 | |
762 | Yvel=0 | |
763 | else | |
764 | predictionfling() | |
765 | end | |
766 | end | |
767 | end) | |
768 | else | |
769 | mouse.Button1Down:Connect(function() | |
770 | if mouse.Target and uis:IsKeyDown(ctrlclicktp) then | |
771 | pos=mouse.Hit.Position+tpoff | |
772 | cfr=cf(pos,pos+camoff.LookVector*v3_101) | |
773 | xzvel=v3_0 | |
774 | Yvel=0 | |
775 | end | |
776 | end) | |
777 | end | |
778 | elseif clickfling then | |
779 | mouse.Button1Down:Connect(predictionfling) | |
780 | end | |
781 | ||
782 | local noYvelTime=1 | |
783 | local lastsine=sine | |
784 | local pose=nil | |
785 | local con=nil | |
786 | local function mainFunction() | |
787 | if not c then | |
788 | for i,v in pairs(cframes) do | |
789 | local p=i.placeholder | |
790 | if p then | |
791 | p:Destroy() | |
792 | end | |
793 | end | |
794 | uis.MouseBehavior=enumMD | |
795 | onnewcamera() | |
796 | local c=lp.Character | |
797 | if c then | |
798 | cam.CameraSubject=c:FindFirstChildOfClass("Humanoid") | |
799 | end | |
800 | return con and con:Disconnect() | |
801 | end | |
802 | ||
803 | sine=osclock() | |
804 | local delta=sine-lastsine | |
805 | deltaTime=clamp(delta*10,0,1) | |
806 | lastsine=sine | |
807 | ||
808 | if shiftlock then | |
809 | if allowshiftlock then | |
810 | uis.MouseBehavior=enumMLC | |
811 | local rotation=uis:GetMouseDelta()*mradN05 | |
812 | local camoffpos=camoff.Position | |
813 | camoff=cf(camoffpos,camoffpos+camoff.LookVector)*angles(rotation.Y,rotation.X,0) | |
814 | else | |
815 | shiftlock=false | |
816 | end | |
817 | elseif firstperson then | |
818 | uis.MouseBehavior=enumMLC | |
819 | local rotation=uis:GetMouseDelta()*mradN05 | |
820 | local camoffpos=camoff.Position | |
821 | camoff=cf(camoffpos,camoffpos+camoff.LookVector)*angles(rotation.Y,rotation.X,0) | |
822 | elseif uis:IsMouseButtonPressed(enumMB2) then | |
823 | uis.MouseBehavior=enumMLCP | |
824 | local rotation=uis:GetMouseDelta()*mradN05 | |
825 | local camoffpos=camoff.Position | |
826 | camoff=cf(camoffpos,camoffpos+camoff.LookVector)*angles(rotation.Y,rotation.X,0) | |
827 | else | |
828 | uis.MouseBehavior=enumMD | |
829 | end | |
830 | ||
831 | local raycastresult=ws:Raycast(pos,v3_010*(fpdh-pos.Y),raycastparams) | |
832 | local onground=nil | |
833 | if raycastresult then | |
834 | raycastresult=raycastresult.Position | |
835 | onground=(pos.Y-raycastresult.Y)<3.01 | |
836 | if onground then | |
837 | Yvel=0 | |
838 | cfr=cfr+v3_010*(raycastresult.Y+3-pos.Y)*clamp(delta*20,0,1) | |
839 | if movementkeys[keySpace] then | |
840 | Yvel=jumpPower | |
841 | end | |
842 | else | |
843 | Yvel=Yvel-gravity*delta | |
844 | if pos.Y+Yvel*delta<raycastresult.Y then | |
845 | Yvel=0 | |
846 | cfr=cfr+v3_010*(raycastresult.Y+3-pos.Y) | |
847 | end | |
848 | end | |
849 | else | |
850 | Yvel=0 | |
851 | onground=false | |
852 | end | |
853 | xzvel=v3_0 | |
854 | if movementkeys[keyW] then | |
855 | xzvel=xzvel+(camoff.LookVector*v3_101).Unit | |
856 | end | |
857 | if movementkeys[keyS] then | |
858 | xzvel=xzvel-(camoff.LookVector*v3_101).Unit | |
859 | end | |
860 | if movementkeys[keyA] then | |
861 | xzvel=xzvel-(camoff.RightVector*v3_101).Unit | |
862 | end | |
863 | if movementkeys[keyD] then | |
864 | xzvel=xzvel+(camoff.RightVector*v3_101).Unit | |
865 | end | |
866 | pos=cfr.Position | |
867 | if shiftlock or firstperson then | |
868 | if xzvel.Magnitude>0 then | |
869 | xzvel=xzvel.Unit*walkSpeed | |
870 | end | |
871 | cfr=cf(pos,pos+camoff.LookVector*v3_101) | |
872 | elseif xzvel.Magnitude>0 then | |
873 | xzvel=xzvel.Unit*walkSpeed | |
874 | cfr=cfr:Lerp(cf(pos,pos+xzvel),deltaTime) | |
875 | end | |
876 | cfr=cfr+(xzvel+(v3_010*Yvel))*delta | |
877 | pos=cfr.Position | |
878 | ||
879 | camcf=cf(pos,pos+camoff.LookVector)+camoff.LookVector*camoff.Z+v3_0150 | |
880 | if shiftlock and not firstperson then | |
881 | camcf=camcf+camcf.RightVector*1.75 | |
882 | end | |
883 | if cam then | |
884 | cam.CFrame=camcf | |
885 | end | |
886 | ||
887 | if onground then | |
888 | if xzvel==v3_0 then | |
889 | pose="idle" | |
890 | else | |
891 | pose="walk" | |
892 | end | |
893 | elseif Yvel>0 then | |
894 | pose="jump" | |
895 | else | |
896 | pose="fall" | |
897 | end | |
898 | local lerpfunc=modes[mode][pose] | |
899 | lerpfunc=lerpfunc or modes.default[pose] | |
900 | if lerpfunc then | |
901 | lerpfunc() | |
902 | end | |
903 | ||
904 | cframes[rootpart]=cfr | |
905 | refreshjoints(rootpart) | |
906 | ||
907 | if abs(Yvel)>1 then | |
908 | noYvelTime=0 | |
909 | else | |
910 | noYvelTime=clamp(noYvelTime+delta*0.3,0,1) | |
911 | xzvel=xzvel*(1-noYvelTime) | |
912 | end | |
913 | ||
914 | local idlerv=v3(sin((sine-0.0375)*16),sin(sine*16),sin((sine+0.075)*16)) | |
915 | local idleoff=idlerv*0.001 | |
916 | ||
917 | for i,v in pairs(cframes) do | |
918 | local p=i.placeholder | |
919 | if p then | |
920 | if p.Parent~=ws then | |
921 | p.Parent=ws | |
922 | end | |
923 | p.CFrame=v | |
924 | end | |
925 | end | |
926 | for i,v in pairs(cframes1) do | |
927 | if (not i.Anchored) and i:IsDescendantOf(ws) then | |
928 | if i.ReceiveAge==0 then | |
929 | local p=v.placeholder | |
930 | if p and p.Parent then | |
931 | p.Parent=nil | |
932 | end | |
933 | v=cframes[v] | |
934 | local lastpos=lastpositions[i] | |
935 | local vel=(v.Position-lastpos)/delta | |
936 | if vel.Magnitude>speedlimit then | |
937 | vel=vel.Unit*speedlimit | |
938 | v=v+(lastpos+vel*delta)-v.Position | |
939 | end | |
940 | lastpositions[i]=v.Position | |
941 | if vel.Magnitude<0.15 then | |
942 | v=v+idleoff | |
943 | end | |
944 | if novoid and (v.Y<novoid) then | |
945 | v=v+v3_010*(novoid-v.Y) | |
946 | end | |
947 | i.Velocity=getNetlessVelocity(vel*noYvelTime+xzvel) | |
948 | i.CFrame=v | |
949 | i.RotVelocity=idlerv | |
950 | else | |
951 | lastpositions[i]=i.Position | |
952 | end | |
953 | end | |
954 | end | |
955 | ||
956 | if simrad then | |
957 | shp(lp,"SimulationRadius",simrad) | |
958 | end | |
959 | end | |
960 | ||
961 | con=heartbeat:Connect(mainFunction) | |
962 | mainFunction() | |
963 | ||
964 | stopreanimate=function() | |
965 | if c then | |
966 | c=nil | |
967 | return true | |
968 | else | |
969 | return false | |
970 | end | |
971 | end | |
972 | ||
973 | local legcfR=cf(1,-1,0) | |
974 | local legcfL=cf(-1,-1,0) | |
975 | local raydir=v3_010*-2 | |
976 | local function raycastlegs() --this returns 2 values: right leg raycast offset, left leg raycast offset | |
977 | local rY=ws:Raycast((cfr*legcfR).Position,raydir,raycastparams) | |
978 | local lY=ws:Raycast((cfr*legcfL).Position,raydir,raycastparams) | |
979 | return rY and (rY.Position.Y-(pos.Y-3)) or 0,lY and (lY.Position.Y-(pos.Y-3)) or 0 | |
980 | end | |
981 | ||
982 | local function velbycfrvec() --this returns 2 values: forward/backwards movement (from -1 to 1), right/left movement (from -1 to 1) | |
983 | local fw=cfr.LookVector*xzvel/walkSpeed | |
984 | local rt=cfr.RightVector*xzvel/walkSpeed | |
985 | return fw.X+fw.Z,rt.X+rt.Z | |
986 | end | |
987 | ||
988 | local lastvel=v3_0 | |
989 | local velchg1=v3_0 | |
990 | local function velchgbycfrvec() --this returns 2 values: forward/backwards velocity change, right/left velocity change | |
991 | velchg1=velchg1+(lastvel-xzvel) --i recommend setting velchg1 to v3_0 when u start using this function or it will look worse | |
992 | lastvel=xzvel | |
993 | velchg1=velchg1:Lerp(v3_0,deltaTime/2) | |
994 | local fw=cfr.LookVector*velchg1/32 | |
995 | local rt=cfr.RightVector*velchg1/32 | |
996 | return fw.X+fw.Z,rt.X+rt.Z | |
997 | end | |
998 | ||
999 | local function rotToMouse(alpha) --this rotates ur character towards your mouse hit position | |
1000 | local mpos=mouse.Hit.Position | |
1001 | cfr=cfr:Lerp(cf(pos,v3(mpos.X,pos.Y,mpos.Z)),alpha or deltaTime) | |
1002 | end | |
1003 | ||
1004 | local function setWalkSpeed(n) | |
1005 | if type(n) ~= "number" then | |
1006 | n=16 | |
1007 | end | |
1008 | walkSpeed=n | |
1009 | end | |
1010 | local function setJumpPower(n) | |
1011 | if type(n) ~= "number" then | |
1012 | n=50 | |
1013 | end | |
1014 | jumpPower=n | |
1015 | end | |
1016 | local function setGravity(n) | |
1017 | if type(n) ~= "number" then | |
1018 | n=196.2 | |
1019 | end | |
1020 | gravity=n | |
1021 | end | |
1022 | ||
1023 | return { | |
1024 | cframes=cframes, | |
1025 | joints=joints, | |
1026 | refreshjoints=refreshjoints, | |
1027 | raycastlegs=raycastlegs, | |
1028 | velbycfrvec=velbycfrvec, | |
1029 | velchgbycfrvec=velchgbycfrvec, | |
1030 | addmode=addmode, | |
1031 | getPart=getPart, | |
1032 | getPartFromMesh=getPartFromMesh, | |
1033 | getJoint=getJoint, | |
1034 | getPartJoint=getPartJoint, | |
1035 | rotToMouse=rotToMouse, | |
1036 | setWalkSpeed=setWalkSpeed, | |
1037 | setJumpPower=setJumpPower, | |
1038 | setGravity=setGravity | |
1039 | } | |
1040 | end | |
1041 | ||
1042 | local t=reanimate() | |
1043 | if type(t)~="table" then return end | |
1044 | local raycastlegs=t.raycastlegs | |
1045 | local velbycfrvec=t.velbycfrvec | |
1046 | local velchgbycfrvec=t.velchgbycfrvec | |
1047 | local addmode=t.addmode | |
1048 | local getJoint=t.getJoint | |
1049 | local RootJoint=getJoint("RootJoint") | |
1050 | local RightShoulder=getJoint("Right Shoulder") | |
1051 | local LeftShoulder=getJoint("Left Shoulder") | |
1052 | local RightHip=getJoint("Right Hip") | |
1053 | local LeftHip=getJoint("Left Hip") | |
1054 | local Neck=getJoint("Neck") | |
1055 | addmode("default", { | |
1056 | idle = function() | |
1057 | local rY, lY = raycastlegs() | |
1058 | local Cfw, Crt = velchgbycfrvec() | |
1059 | LeftShoulder.C0=LeftShoulder.C0:Lerp(cf(-1,1+0.4*sin(sine*1),0)*angles(-0.15707963267948966+0.06981317007977318*sin((sine+9)*40),-1.5707963267948966,0),deltaTime) LeftHip.C0=LeftHip.C0:Lerp(cf(-1,-1+0.3*sin(sine*1),0)*angles(0,-0.15707963267948966,0),deltaTime) RightShoulder.C0=RightShoulder.C0:Lerp(cf(1,0.2,0)*angles(-1.5707963267948966+0.15707963267948966*sin((sine+2)*1),1.5707963267948966,0),deltaTime) RightHip.C0=RightHip.C0:Lerp(cf(1,-1+0.3*sin(sine*1),0)*angles(-1.5707963267948966,1.5707963267948966,0),deltaTime) RootJoint.C0=RootJoint.C0:Lerp(cf(5+4*sin((sine + 0.3)*0.2),4,0)*angles(0.03490658503988659,0,3.141592653589793),deltaTime) | |
1060 | end, | |
1061 | ||
1062 | walk = function() | |
1063 | local Vfw, Vrt = velbycfrvec() | |
1064 | local rY, lY = raycastlegs() | |
1065 | local Cfw, Crt = velchgbycfrvec() | |
1066 | LeftHip.C0=LeftHip.C0:Lerp(cf(-1,0.2 * sin(sine*1),0)*angles(0.3490658503988659,-1.5707963267948966,0),deltaTime) RightHip.C0=RightHip.C0:Lerp(cf(1,-1,0)*angles(-0.3490658503988659,1.5707963267948966,0),deltaTime) LeftShoulder.C0=LeftShoulder.C0:Lerp(cf(-1.5,0,0)*angles(-0.20943951023931956+0.15707963267948966*sin(sine*1),0,0),deltaTime) RightShoulder.C0=RightShoulder.C0:Lerp(cf(1,0.9+0.8*sin(sine*1),0)*angles(-0.20943951023931956+0.08726646259971647*sin(sine*1),1.5707963267948966,0),deltaTime) Neck.C0=Neck.C0:Lerp(cf(0,1,0)*angles(-1.5707963267948966,0,3.141592653589793),deltaTime) RootJoint.C0=RootJoint.C0:Lerp(cf(2+3*sin((sine + 2)*0.2),2+0.7*sin((sine + 4)*1),0)*angles(3.490658503988659,0,3.141592653589793),deltaTime) | |
1067 | end, | |
1068 | ||
1069 | jump = function() | |
1070 | local Cfw, Crt = velchgbycfrvec() | |
1071 | local Vfw, Vrt = velbycfrvec() LeftShoulder.C0=LeftShoulder.C0:Lerp(cf(-1,1+0.4*sin(sine*1),0)*angles(-0.15707963267948966+0.06981317007977318*sin((sine+9)*40),-1.5707963267948966,0),deltaTime) LeftHip.C0=LeftHip.C0:Lerp(cf(-1,-1+0.3*sin(sine*1),0)*angles(0,-0.15707963267948966,0),deltaTime) RightShoulder.C0=RightShoulder.C0:Lerp(cf(1,0.2,0)*angles(-1.5707963267948966+0.15707963267948966*sin((sine+2)*1),1.5707963267948966,0),deltaTime) Neck.C0=Neck.C0:Lerp(cf(0,1,0)*angles(-1.5707963267948966,0,3.141592653589793),deltaTime) RightHip.C0=RightHip.C0:Lerp(cf(1,-1+0.3*sin(sine*1),0)*angles(-1.5707963267948966,1.5707963267948966,0),deltaTime) RootJoint.C0=RootJoint.C0:Lerp(cf(5+4*sin((sine + 0.3)*0.2),4,0)*angles(0.03490658503988659,0,3.141592653589793),deltaTime) | |
1072 | end, | |
1073 | ||
1074 | fall = function() | |
1075 | local Vfw, Vrt = velbycfrvec() | |
1076 | local Cfw, Crt = velchgbycfrvec() | |
1077 | LeftShoulder.C0=LeftShoulder.C0:Lerp(cf(-1,1+0.4*sin(sine*1),0)*angles(-0.15707963267948966+0.06981317007977318*sin((sine+9)*40),-1.5707963267948966,0),deltaTime) LeftHip.C0=LeftHip.C0:Lerp(cf(-1,-1+0.3*sin(sine*1),0)*angles(0,-0.15707963267948966,0),deltaTime) RightShoulder.C0=RightShoulder.C0:Lerp(cf(1,0.2,0)*angles(-1.5707963267948966+0.15707963267948966*sin((sine+2)*1),1.5707963267948966,0),deltaTime) RightHip.C0=RightHip.C0:Lerp(cf(1,-1+0.3*sin(sine*1),0)*angles(-1.5707963267948966,1.5707963267948966,0),deltaTime) RootJoint.C0=RootJoint.C0:Lerp(cf(5+4*sin((sine + 0.3)*0.2),4,0)*angles(0.03490658503988659,0,3.141592653589793),deltaTime) | |
1078 | end | |
1079 | }) | |
1080 |